diff --git a/.github/workflows/ci-workflow.yml b/.github/workflows/ci-workflow.yml index 86e8cb32..69b7338d 100644 --- a/.github/workflows/ci-workflow.yml +++ b/.github/workflows/ci-workflow.yml @@ -1,15 +1,6 @@ name: Compilation & tests -on: - workflow_dispatch: - push: - branches: - - master - - develop - pull_request: - branches: - - master - - develop +on: [workflow_dispatch, push, pull_request] jobs: job_nanoS_build_debug: @@ -17,7 +8,7 @@ jobs: runs-on: ubuntu-latest container: - image: ghcr.io/ledgerhq/ledger-app-builder/ledger-app-builder:latest + image: ghcr.io/ledgerhq/ledger-app-builder/ledger-app-builder:d5bfe2e793f15a826971ae9de2adcad524df3e8e steps: - name: Clone @@ -25,9 +16,9 @@ jobs: - name: Build run: | - make DEBUG=1 + make DEVEL=1 - - name: Upload app binary + - name: Upload app binary NanoS uses: actions/upload-artifact@v2 with: name: fio-app-nanoS-debug @@ -38,7 +29,7 @@ jobs: runs-on: ubuntu-latest container: - image: ghcr.io/ledgerhq/ledger-app-builder/ledger-app-builder:latest + image: ghcr.io/ledgerhq/ledger-app-builder/ledger-app-builder:d5bfe2e793f15a826971ae9de2adcad524df3e8e steps: - name: Clone @@ -46,21 +37,42 @@ jobs: - name: Build run: | - make DEBUG=1 BOLOS_SDK=$NANOX_SDK + make DEVEL=1 BOLOS_SDK=$NANOX_SDK - - name: Upload app binary + - name: Upload app binary NanoX uses: actions/upload-artifact@v2 with: name: fio-app-nanoX-debug path: bin + job_nanoSP_build_debug: + name: Build debug app for NanoSP + runs-on: ubuntu-latest + + container: + image: ghcr.io/ledgerhq/ledger-app-builder/ledger-app-builder:d5bfe2e793f15a826971ae9de2adcad524df3e8e + + steps: + - name: Clone + uses: actions/checkout@v2 + + - name: Build + run: | + make DEVEL=1 BOLOS_SDK=$NANOSP_SDK + + - name: Upload app binary NanoSP + uses: actions/upload-artifact@v2 + with: + name: fio-app-nanoSP-debug + path: bin + job_scan_build: name: Clang Static Analyzer runs-on: ubuntu-latest needs: job_nanoS_build_debug container: - image: ghcr.io/ledgerhq/ledger-app-builder/ledger-app-builder:latest + image: ghcr.io/ledgerhq/ledger-app-builder/ledger-app-builder:d5bfe2e793f15a826971ae9de2adcad524df3e8e steps: - uses: actions/checkout@v2 @@ -74,3 +86,125 @@ jobs: with: name: scan-build path: scan-build + + job_speculos_nanos_unit_tests_5001: + name: NanoS Speculos 5001 unit tests + needs: job_nanoS_build_debug + runs-on: ubuntu-latest + steps: + - name: Clone + uses: actions/checkout@v2 + - name: Setup node + uses: actions/setup-node@v3 + with: + node-version: 16.10.0 + - name: Download app binary + uses: actions/download-artifact@v2 + with: + name: fio-app-nanoS-debug + path: bin + + - name: install speculos + run: | + export BOLOS_SDK= + make js-yarn + make test-yarn + - name: Run tests + run: | + make speculos_port_5001_unit_test + - name: Upload Speculos 5001s log + uses: actions/upload-artifact@v2 + with: + name: speculos-ut-5001s-log + path: tests_speculos/speculos-port-5001.log + job_speculos_nanos_tests_5001: + name: NanoS Speculos 5001 tests + needs: job_nanoS_build_debug + runs-on: ubuntu-latest + steps: + - name: Clone + uses: actions/checkout@v2 + - name: Setup node + uses: actions/setup-node@v3 + with: + node-version: 16.10.0 + - name: Download app binary + uses: actions/download-artifact@v2 + with: + name: fio-app-nanoS-debug + path: bin + + - name: install speculos + run: | + export BOLOS_SDK= + make js-yarn + make test-yarn + - name: Run tests + run: | + make speculos_port_5001_test + - name: Upload Speculos 5001s log + uses: actions/upload-artifact@v2 + with: + name: speculos-5001s-log + path: tests_speculos/speculos-port-5001.log + job_speculos_nanox_tests_5001: + name: NanoX Speculos 5001 tests + needs: job_nanoX_build_debug + runs-on: ubuntu-latest + steps: + - name: Clone + uses: actions/checkout@v2 + - name: Setup node + uses: actions/setup-node@v3 + with: + node-version: 16.10.0 + - name: Download app binary + uses: actions/download-artifact@v2 + with: + name: fio-app-nanoX-debug + path: bin + + - name: install speculos + run: | + export BOLOS_SDK= + make js-yarn + make test-yarn + - name: Run tests + run: | + TARGET_DEVICE=NANO_X make speculos_port_5001_test + - name: Upload Speculos 5001s log + uses: actions/upload-artifact@v2 + with: + name: speculos-5001x-log + path: tests_speculos/speculos-port-5001.log + job_speculos_nanosp_tests_5001: + name: NanoS+ Speculos 5001 tests + needs: job_nanoSP_build_debug + runs-on: ubuntu-latest + steps: + - name: Clone + uses: actions/checkout@v2 + - name: Setup node + uses: actions/setup-node@v3 + with: + node-version: 16.10.0 + - name: Download app binary + uses: actions/download-artifact@v2 + with: + name: fio-app-nanoSP-debug + path: bin + + - name: install speculos + run: | + export BOLOS_SDK= + make js-yarn + make test-yarn + - name: Run tests + run: | + TARGET_DEVICE=NANO_SP make speculos_port_5001_test + - name: Upload Speculos 5001sp log + uses: actions/upload-artifact@v2 + with: + name: speculos-5001sp-log + path: tests_speculos/speculos-port-5001.log + diff --git a/.github/workflows/guidelines_enforcer.yml b/.github/workflows/guidelines_enforcer.yml new file mode 100644 index 00000000..3aa0962e --- /dev/null +++ b/.github/workflows/guidelines_enforcer.yml @@ -0,0 +1,21 @@ +name: Ensure compliance with Ledger guidelines + +# This workflow is mandatory in all applications +# It calls a reusable workflow guidelines_enforcer developed by Ledger's internal developer team. +# The successful completion of the reusable workflow is a mandatory step for an app to be available on the Ledger +# application store. +# +# More information on the guidelines can be found in the repository: +# LedgerHQ/ledger-app-workflows/ + +on: + workflow_dispatch: + push: + pull_request: + +jobs: + guidelines_enforcer: + name: Call Ledger guidelines_enforcer + uses: LedgerHQ/ledger-app-workflows/.github/workflows/reusable_guidelines_enforcer.yml@v1 + with: + run_for_devices: '["nanos", "nanox", "nanosp"]' diff --git a/.github/workflows/lint-workflow.yml b/.github/workflows/lint-workflow.yml index 25b0cf1f..24c3d6de 100644 --- a/.github/workflows/lint-workflow.yml +++ b/.github/workflows/lint-workflow.yml @@ -3,13 +3,7 @@ name: Code style check on: workflow_dispatch: push: - branches: - - master - - develop pull_request: - branches: - - master - - develop jobs: job_lint: @@ -21,8 +15,8 @@ jobs: uses: actions/checkout@v2 - name: Lint - uses: DoozyX/clang-format-lint-action@v0.11 + uses: DoozyX/clang-format-lint-action@v0.12 with: source: './src' extensions: 'h,c' - clangFormatVersion: 11 + clangFormatVersion: 12 diff --git a/.gitignore b/.gitignore index 356539b2..43e19adb 100644 --- a/.gitignore +++ b/.gitignore @@ -5,9 +5,16 @@ docs_generated/ ledger bin debug +build dep obj src/u2f_crypto_data.h src/glyphs.h src/glyphs.c .vscode +output-scan-build +pkg +*.log +*.new.png +yarn.lock +null.d diff --git a/Makefile b/Makefile index e0895b16..92a2af77 100644 --- a/Makefile +++ b/Makefile @@ -15,174 +15,66 @@ # limitations under the License. #******************************************************************************* -ifeq ($(BOLOS_SDK),) -$(error Environment variable BOLOS_SDK is not set) -endif -include $(BOLOS_SDK)/Makefile.defines +# We use BOLOS_SDK to determine the development environment that is being used +# BOLOS_SDK IS DEFINED We use the plain Makefile for Ledger +# BOLOS_SDK NOT DEFINED We use a containerized build approach +# containerize build is recommended + +APPVERSION_M = 1 +APPVERSION_N = 0 +APPVERSION_P = 5 -SIGNKEY = `cat sign.key` -APPSIG = `cat bin/app.sig` NANOS_ID = 1 WORDS = "abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about" PIN = 5555 -APPNAME = "FIO" -APPVERSION_M = 0 -APPVERSION_N = 0 -APPVERSION_P = 3 -APPVERSION = "$(APPVERSION_M).$(APPVERSION_N).$(APPVERSION_P)" - -ifeq ($(TARGET_NAME), TARGET_NANOX) - APP_LOAD_PARAMS=--appFlags 0x200 # APPLICATION_FLAG_BOLOS_SETTINGS -else - APP_LOAD_PARAMS=--appFlags 0x000 -endif -APP_LOAD_PARAMS += --curve secp256k1 --path "44'/235'" -APP_LOAD_PARAMS += $(COMMON_LOAD_PARAMS) - -ifeq ($(TARGET_NAME),TARGET_NANOS) - ICONNAME=icon_fio_nanos.gif -else - ICONNAME=icon_fio_nanox.gif -endif - -################ -# Default rule # -################ -all: default - -############ -# Platform # -############ -DEFINES += OS_IO_SEPROXYHAL -DEFINES += HAVE_BAGL HAVE_SPRINTF HAVE_SNPRINTF_FORMAT_U -DEFINES += APPVERSION=\"$(APPVERSION)\" -DEFINES += MAJOR_VERSION=$(APPVERSION_M) MINOR_VERSION=$(APPVERSION_N) PATCH_VERSION=$(APPVERSION_P) - -## USB HID? -DEFINES += HAVE_IO_USB HAVE_L4_USBLIB IO_USB_MAX_ENDPOINTS=4 IO_HID_EP_LENGTH=64 HAVE_USB_APDU - -## WEBUSB -#WEBUSB_URL = https://www.ledger.com/pages/supported-crypto-assets -#DEFINES += HAVE_WEBUSB WEBUSB_URL_SIZE_B=$(shell echo -n $(WEBUSB_URL) | wc -c) WEBUSB_URL=$(shell echo -n $(WEBUSB_URL) | sed -e "s/./\\\'\0\\\',/g") -DEFINES += HAVE_WEBUSB WEBUSB_URL_SIZE_B=0 WEBUSB_URL="" - -## BLUETOOTH -ifeq ($(TARGET_NAME),TARGET_NANOX) - DEFINES += HAVE_BLE BLE_COMMAND_TIMEOUT_MS=2000 HAVE_BLE_APDU +SPECULOS_MODEL_SWITCH=nanos +NANO_ICON_GIF=icon_fio_nanos.gif +BOLOS_SDK_DIRECTORY=/opt/nanos-secure-sdk +TARGET_NAME=TARGET_NANOS +TEST_DEVICE=nanos +SPECULOS_SDK_STRING= --sdk 2.1 +ifeq ($(TARGET_DEVICE), NANO_X) + $(info Targeting NanoX) + SPECULOS_MODEL_SWITCH=nanox + NANO_ICON_GIF=icon_fio_nanox.gif + BOLOS_SDK_DIRECTORY=/opt/nanox-secure-sdk + TARGET_NAME=TARGET_NANOX + TEST_DEVICE=nanox + SPECULOS_SDK_STRING= endif - -## Protect stack overflows -DEFINES += HAVE_BOLOS_APP_STACK_CANARY - -ifeq ($(TARGET_NAME),TARGET_NANOS) -DEFINES += IO_SEPROXYHAL_BUFFER_SIZE_B=128 -else -DEFINES += IO_SEPROXYHAL_BUFFER_SIZE_B=300 -DEFINES += HAVE_GLO096 -DEFINES += HAVE_BAGL BAGL_WIDTH=128 BAGL_HEIGHT=64 -DEFINES += HAVE_BAGL_ELLIPSIS # long label truncation feature -DEFINES += HAVE_BAGL_FONT_OPEN_SANS_REGULAR_11PX -DEFINES += HAVE_BAGL_FONT_OPEN_SANS_EXTRABOLD_11PX -DEFINES += HAVE_BAGL_FONT_OPEN_SANS_LIGHT_16PX -DEFINES += HAVE_UX_FLOW +ifeq ($(TARGET_DEVICE), NANO_SP) + $(info Targeting NanoSPlus) + SPECULOS_MODEL_SWITCH=nanosp + NANO_ICON_GIF=icon_fio_nanox.gif + BOLOS_SDK_DIRECTORY=/opt/nanosplus-secure-sdk + TARGET_NAME=TARGET_NANOS2 + TEST_DEVICE=nanosp + SPECULOS_SDK_STRING= endif -DEFINES += RESET_ON_CRASH - -## Use developer build -# DEVEL = 1 -# DEFINES += HEADLESS - -# Enabling debug PRINTF -ifeq ($(DEVEL), 1) - DEFINES += DEVEL HAVE_PRINTF - ifeq ($(TARGET_NAME),TARGET_NANOS) - DEFINES += PRINTF=screen_printf - else - DEFINES += PRINTF=mcu_usb_printf - endif -else - DEFINES += PRINTF\(...\)= +ifeq ($(TARGET_DEVICE), STAX) + $(info Targeting STAX) + SPECULOS_MODEL_SWITCH=stax + NANO_ICON_GIF=icon_fio_stax.png + BOLOS_SDK_DIRECTORY=/opt/stax-secure-sdk + TARGET_NAME=TARGET_STAX + TEST_DEVICE=stax + SPECULOS_SDK_STRING= endif -############## -# Compiler # -############## -ifneq ($(BOLOS_ENV),) -$(info BOLOS_ENV=$(BOLOS_ENV)) -CLANGPATH := $(BOLOS_ENV)/clang-arm-fropi/bin/ -GCCPATH := $(BOLOS_ENV)/gcc-arm-none-eabi-5_3-2016q1/bin/ -else -$(info BOLOS_ENV is not set: falling back to CLANGPATH and GCCPATH) -endif -ifeq ($(CLANGPATH),) -$(info CLANGPATH is not set: clang will be used from PATH) -endif -ifeq ($(GCCPATH),) -$(info GCCPATH is not set: arm-none-eabi-* will be used from PATH) -endif -ifeq ($(TARGET_NAME),TARGET_NANOS) -WERROR := -Werror=incompatible-pointer-types -Werror=return-type +ifeq ($(BOLOS_SDK),) +include $(CURDIR)/MakefileContainer.mk else -WERROR := -Werror=return-type -endif - -CC := $(CLANGPATH)clang -CFLAGS += -O3 -Os -Wall -Wextra -Wuninitialized $(WERROR) - -AS := $(GCCPATH)arm-none-eabi-gcc -LD := $(GCCPATH)arm-none-eabi-gcc - -LDFLAGS += -O3 -Os -Wall -LDLIBS += -lm -lgcc -lc - -##Enable to strip debug info from app -#LDFLAGS += -Wl,-s - -################## -# Dependencies # -################## - -# import rules to compile glyphs -include $(BOLOS_SDK)/Makefile.glyphs - -### computed variables -APP_SOURCE_PATH += src -SDK_SOURCE_PATH += lib_stusb lib_stusb_impl -SDK_SOURCE_PATH += lib_ux -ifeq ($(TARGET_NAME),TARGET_NANOX) - SDK_SOURCE_PATH += lib_blewbxx lib_blewbxx_impl +include $(CURDIR)/MakefileLocal.mk endif -############## -# Build # -############## - -load: all - python -m ledgerblue.loadApp $(APP_LOAD_PARAMS) - -delete: - python -m ledgerblue.deleteApp $(COMMON_DELETE_PARAMS) - -seed: - python -m ledgerblue.hostOnboard --id $(NANOS_ID) --words $(WORDS) --pin $(PIN) - - -# import generic rules from the sdk -include $(BOLOS_SDK)/Makefile.rules +include $(CURDIR)/MakefilePhysicalDevice.mk -#add dependency on custom makefile filename -dep/%.d: %.c Makefile +include $(CURDIR)/MakefileSpeculos.mk -listvariants: - @echo VARIANTS COIN flow +include $(CURDIR)/MakefileJS.mk -############## -# Style # -############## +include $(CURDIR)/MakefileTest.mk -# better to run this manually to avoid irrelevant dependencies processing -format: - clang-format -i src/* diff --git a/MakefileContainer.mk b/MakefileContainer.mk new file mode 100644 index 00000000..6c947f62 --- /dev/null +++ b/MakefileContainer.mk @@ -0,0 +1,105 @@ +#******************************************************************************* +# Ledger Nano S +# (c) 2016 Ledger +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +#******************************************************************************* + +ifneq ($(BOLOS_SDK),) +$(error Containerized build, BOLOS_SDK should be empty) +endif + +APP_BUILDER_IMAGE = ledger-app-builder:d5bfe2e793f15a826971ae9de2adcad524df3e8e + +default_target: build + +ifdef INTERACTIVE +INTERACTIVE_SETTING:="-i" +TTY_SETTING:="-t" +else +INTERACTIVE_SETTING:= +TTY_SETTING:= +endif + +ifdef NO_PULL +DOCKER_PULL_COMMAND = +else +DOCKER_PULL_COMMAND = docker pull ghcr.io/ledgerhq/ledger-app-builder/$(APP_BUILDER_IMAGE) +endif + +#We build the container from source to avoid this issue https://github.community/t/docker-pull-from-public-github-package-registry-fail-with-no-basic-auth-credentials-error/16358 +define run_docker + $(DOCKER_PULL_COMMAND) + docker image tag ghcr.io/ledgerhq/ledger-app-builder/$(APP_BUILDER_IMAGE) ledger-app-builder + @echo "docker host: id -u: `id -u`" + @echo "docker host: whoami: `whoami`" + docker version + docker run $(TTY_SETTING) $(INTERACTIVE_SETTING) $(MAKE_LINUX_DOCKER_OPTIONS) --rm \ + -e SCP_PRIVKEY=$(SCP_PRIVKEY) \ + -e BOLOS_ENV_IGNORE=/opt/bolos \ + -e COIN=$(COIN) \ + -e APP_TESTING=$(APP_TESTING) \ + -e BOLOS_SDK=$(BOLOS_SDK_DIRECTORY) \ + -e DEVEL=$(DEVEL) \ + -e TARGET_NAME=$(TARGET_NAME) \ + -e NO_INTEGRITY_CHECK=$(NO_INTEGRITY_CHECK) \ + -u $(USERID):$(USERID) \ + -v $(shell pwd):/app \ + $(1) \ + ledger-app-builder \ + $(2) +endef + +############## +# Build # +############## + +.PHONY: shell +shell: + $(call run_docker, -ti, bash) + +.PHONY: build +build: + $(call run_docker, , make build) + +.PHONY: all +all: + $(call run_docker, , make all) + +.PHONY: clean +clean: + $(call run_docker, , make clean) + +.PHONY: listvariants +listvariants: + $(call run_docker, , make listvariants) + +.PHONY: size +size: + $(call run_docker, , make size) + + +############## +# Style # +############## + +.PHONY: format +format: + $(call run_docker, , make format) + +#Does not work in non-containerized build +.PHONY: scan-build +scan-build: + $(call run_docker, , make scan-build) + + diff --git a/MakefileJS.mk b/MakefileJS.mk new file mode 100644 index 00000000..baa1f0d6 --- /dev/null +++ b/MakefileJS.mk @@ -0,0 +1,57 @@ +#******************************************************************************* +# Ledger Nano S +# (c) 2016 Ledger +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +#******************************************************************************* + +.PHONY: js-yarn +js-yarn: + cd ledgerjs-fio && yarn && cd .. + +.PHONY: js-prepack +js-prepack: + cd ledgerjs-fio && yarn prepack && cd .. + +.PHONY: js-lint +js-lint: + cd ledgerjs-fio && yarn lint && cd .. + +.PHONY: js-clean +js-clean: + cd ledgerjs-fio && yarn clean && cd .. + +.PHONY: js-build +js-build: + cd ledgerjs-fio && yarn build && cd .. + +.PHONY: js-build-flowtypes +js-build-flowtypes: + cd ledgerjs-fio && yarn build:flowtypes && cd .. + +.PHONY: js-flow +js-flow: + cd ledgerjs-fio && yarn flow && cd .. + +.PHONY: js-gen-docs +js-gen-docs: + cd ledgerjs-fio && yarn gen-docs && cd .. + +.PHONY: js-prepublish +js-prepublish: + cd ledgerjs-fio && yarn prepublish && cd .. + +.PHONY: js-run-example +js-run-example: + cd ledgerjs-fio && yarn run-example && cd .. + diff --git a/MakefileLocal.mk b/MakefileLocal.mk new file mode 100644 index 00000000..0e8cf43a --- /dev/null +++ b/MakefileLocal.mk @@ -0,0 +1,201 @@ +#******************************************************************************* +# Ledger Nano S +# (c) 2016 Ledger +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +#******************************************************************************* + +ifeq ($(BOLOS_SDK),) +$(error Environment variable BOLOS_SDK is not set) +endif + +APPNAME = "FIO" +APPVERSION = "$(APPVERSION_M).$(APPVERSION_N).$(APPVERSION_P)" +APPPATH = "44'/235'" + +################## +# Default target # +################## + +default_target: build + +include $(BOLOS_SDK)/Makefile.defines + +APP_LOAD_PARAMS =--appFlags 0x240 --curve secp256k1 --path "44'/235'" +APP_LOAD_PARAMS += $(COMMON_LOAD_PARAMS) + +ifeq ($(TARGET_NAME),TARGET_NANOS) + ICONNAME=icon_fio_nanos.gif +else + ifeq ($(TARGET_NAME),TARGET_STAX) + ICONNAME=icon_fio_stax.png + else + ICONNAME=icon_fio_nanox.gif + endif +endif + +############ +# Platform # +############ +DEFINES += OS_IO_SEPROXYHAL +DEFINES += HAVE_BAGL HAVE_SPRINTF HAVE_SNPRINTF_FORMAT_U +DEFINES += APPVERSION=\"$(APPVERSION)\" +DEFINES += MAJOR_VERSION=$(APPVERSION_M) MINOR_VERSION=$(APPVERSION_N) PATCH_VERSION=$(APPVERSION_P) + +# Ledger: add the "Pending security review" disclaimer +APP_LOAD_PARAMS += --tlvraw 9F:01 +DEFINES += HAVE_PENDING_REVIEW_SCREEN + +## USB HID? +DEFINES += HAVE_IO_USB HAVE_L4_USBLIB IO_USB_MAX_ENDPOINTS=4 IO_HID_EP_LENGTH=64 HAVE_USB_APDU + +## WEBUSB +#WEBUSB_URL = https://www.ledger.com/pages/supported-crypto-assets +#DEFINES += HAVE_WEBUSB WEBUSB_URL_SIZE_B=$(shell echo -n $(WEBUSB_URL) | wc -c) WEBUSB_URL=$(shell echo -n $(WEBUSB_URL) | sed -e "s/./\\\'\0\\\',/g") +DEFINES += HAVE_WEBUSB WEBUSB_URL_SIZE_B=0 WEBUSB_URL="" + +## BLUETOOTH +ifeq ($(TARGET_NAME),TARGET_NANOX) + DEFINES += HAVE_BLE BLE_COMMAND_TIMEOUT_MS=2000 HAVE_BLE_APDU +endif + +## Protect stack overflows +DEFINES += HAVE_BOLOS_APP_STACK_CANARY + +ifeq ($(TARGET_NAME),TARGET_NANOS) +DEFINES += IO_SEPROXYHAL_BUFFER_SIZE_B=128 +else +DEFINES += IO_SEPROXYHAL_BUFFER_SIZE_B=300 +DEFINES += HAVE_GLO096 +DEFINES += HAVE_BAGL BAGL_WIDTH=128 BAGL_HEIGHT=64 +DEFINES += HAVE_BAGL_ELLIPSIS # long label truncation feature +DEFINES += HAVE_BAGL_FONT_OPEN_SANS_REGULAR_11PX +DEFINES += HAVE_BAGL_FONT_OPEN_SANS_EXTRABOLD_11PX +DEFINES += HAVE_BAGL_FONT_OPEN_SANS_LIGHT_16PX +DEFINES += HAVE_UX_FLOW +endif + +# Enabling debug PRINTF +ifeq ($(DEVEL), 1) + DEFINES += DEVEL HAVE_PRINTF + ifeq ($(TARGET_NAME),TARGET_NANOS) + DEFINES += PRINTF=screen_printf + else + DEFINES += PRINTF=mcu_usb_printf + endif + ifeq ($(NO_INTEGRITY_CHECK), 1) + DEFINES += NO_INTEGRITY_CHECK + endif +else + DEFINES += RESET_ON_CRASH + DEFINES += PRINTF\(...\)= +endif + +############## +# Compiler # +############## + +ifneq ($(BOLOS_ENV),) +$(info BOLOS_ENV=$(BOLOS_ENV)) +CLANGPATH := $(BOLOS_ENV)/clang-arm-fropi/bin/ +GCCPATH := $(BOLOS_ENV)/gcc-arm-none-eabi-5_3-2016q1/bin/ +else +$(info BOLOS_ENV is not set: falling back to CLANGPATH and GCCPATH) +endif +ifeq ($(CLANGPATH),) +$(info CLANGPATH is not set: clang will be used from PATH) +endif +ifeq ($(GCCPATH),) +$(info GCCPATH is not set: arm-none-eabi-* will be used from PATH) +endif + +ifeq ($(TARGET_NAME),TARGET_NANOS) +WERROR := -Werror=incompatible-pointer-types -Werror=return-type +else +WERROR := -Werror=return-type +endif + +CC := $(CLANGPATH)clang +CFLAGS += -O3 -Os -Wall -Wextra -Wuninitialized $(WERROR) + +AS := $(GCCPATH)arm-none-eabi-gcc +LD := $(GCCPATH)arm-none-eabi-gcc + +LDFLAGS += -O3 -Os -Wall +LDLIBS += -lm -lgcc -lc + +##Enable to strip debug info from app +##This needs to be commented out for Speculos to work +#LDFLAGS += -Wl,-s + + +################## +# Dependencies # +################## + +# import rules to compile glyphs +include $(BOLOS_SDK)/Makefile.glyphs + +### computed variables +APP_SOURCE_PATH += src +SDK_SOURCE_PATH += lib_stusb lib_stusb_impl +SDK_SOURCE_PATH += lib_ux +ifeq ($(TARGET_NAME),TARGET_NANOX) + SDK_SOURCE_PATH += lib_blewbxx lib_blewbxx_impl +endif + + +############## +# Build # +############## + +build: bin/app.elf + @cp $(DBG_DIR)/app.asm debug/app.asm + @cp $(DBG_DIR)/app.map debug/app.map + @cp $(BIN_DIR)/app.hex bin/app.hex + @mkdir -p pkg + @echo "#!/usr/bin/env bash" > $(CURDIR)/pkg/loadingtool.sh + @echo "APPNAME=\"${APPNAME}\"" >> $(CURDIR)/pkg/loadingtool.sh + @echo "APPVERSION=\"${APPVERSION}\"" >> $(CURDIR)/pkg/loadingtool.sh + @echo "APPPATH=\""${APPPATH}"\"" >> $(CURDIR)/pkg/loadingtool.sh + @echo "LOAD_PARAMS=\"${COMMON_LOAD_PARAMS}\"" >> $(CURDIR)/pkg/loadingtool.sh + @echo "DELETE_PARAMS=\"${COMMON_DELETE_PARAMS}\"" >> $(CURDIR)/pkg/loadingtool.sh + @echo "APPHEX=\"" >> $(CURDIR)/pkg/loadingtool.sh + @cat $(CURDIR)/bin/app.hex >> $(CURDIR)/pkg/loadingtool.sh + @echo "\"" >> $(CURDIR)/pkg/loadingtool.sh + @cat $(CURDIR)/submodules/template.sh >> $(CURDIR)/pkg/loadingtool.sh + @chmod +x $(CURDIR)/pkg/loadingtool.sh + +# import generic rules from the sdk +include $(BOLOS_SDK)/Makefile.rules + +#add dependency on custom makefile filename +dep/%.d: %.c Makefile + +listvariants: + @echo VARIANTS COIN FIO + +############## +# Style # +############## + +# better to run this manually to avoid irrelevant dependencies processing +format: + clang-format -i src/* + +#scan_build: +#In sdk + +size: bin/app.elf + $(GCCPATH)arm-none-eabi-size --format=GNU bin/app.elf + diff --git a/MakefilePhysicalDevice.mk b/MakefilePhysicalDevice.mk new file mode 100644 index 00000000..380f44b0 --- /dev/null +++ b/MakefilePhysicalDevice.mk @@ -0,0 +1,30 @@ +#******************************************************************************* +# Ledger Nano S +# (c) 2016 Ledger +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +#******************************************************************************* + +.PHONY: load +load: pkg/loadingtool.sh + ${CURDIR}/pkg/loadingtool.sh load + +.PHONY: delete +delete: pkg/loadingtool.sh + ${CURDIR}/pkg/loadingtool.sh delete + +.PHONY: seed +seed: + python -m ledgerblue.hostOnboard --id $(NANOS_ID) --words $(WORDS) --pin $(PIN) + + diff --git a/MakefileSpeculos.mk b/MakefileSpeculos.mk new file mode 100644 index 00000000..885f4551 --- /dev/null +++ b/MakefileSpeculos.mk @@ -0,0 +1,54 @@ +#******************************************************************************* +# Ledger Nano S +# (c) 2016 Ledger +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +#******************************************************************************* + +SPECULOS_IMAGE = speculos:sha-6a34680 + +define run_announce + @perl -e 'use Time::HiRes; use POSIX; $$ts = sprintf qq[%f], Time::HiRes::time(); ($$f) = $$ts =~ m~(\....)~; printf qq[%s%s %s make: %s\n], POSIX::strftime("%H:%M:%S", gmtime), $$f, q[-] x 126, $$ARGV[0];' "$(1)" +endef + +ifdef NO_PULL +DOCKER_SPECULOS_PULL_COMMAND = +else +DOCKER_SPECULOS_PULL_COMMAND = docker pull ghcr.io/ledgerhq/$(SPECULOS_IMAGE) +endif + +define start_speculos_container + $(DOCKER_SPECULOS_PULL_COMMAND) + docker image tag ghcr.io/ledgerhq/$(SPECULOS_IMAGE) speculos + docker run --detach --name speculos-port-$(1) --rm -it -v $(CURDIR)$(3):/speculos/app/bin --publish $(1):$(1) --publish $(2):$(2) speculos --model $(SPECULOS_MODEL_SWITCH) $(SPECULOS_SDK_STRING) --seed $(WORDS) --display headless --apdu-port $(2) --api-port $(1) /speculos/app/bin/app.elf ; rm -f $(CURDIR)/speculos-port-$(1).log ; docker logs --follow speculos-port-$(1) 2>&1 | tee -a $(CURDIR)/speculos-port-$(1).log > /dev/null 2>&1 & + @perl -e 'use Time::HiRes; $$t1=Time::HiRes::time(); while(1){ $$o=`cat $(CURDIR)/speculos-port-$(1).log`; if($$o =~ m~Running on .*\:$(1)~s){ printf qq[# detected -- via log -- speculos listening after %f seconds; spy on emulated device via http://localhost:$(1)/\n], Time::HiRes::time() - $$t1; exit; } Time::HiRes::sleep(0.01); };' +endef + +define stop_speculos_container + # make: todo: using --time 0 because this stops the docker container faster; but it still takes ~ 2.4 seconds... how to stop faster? + docker stop --time 0 speculos-port-$(1) +endef + +.PHONY: speculos_port_5001_start +speculos_port_5001_start: + $(call run_announce,$@) + $(call start_speculos_container,5001,40001,/bin) + +.PHONY: speculos_port_5001_stop +speculos_port_5001_stop: + $(call run_announce,$@) + $(call stop_speculos_container,5001) + + + + diff --git a/MakefileTest.mk b/MakefileTest.mk new file mode 100644 index 00000000..6be3a75d --- /dev/null +++ b/MakefileTest.mk @@ -0,0 +1,113 @@ +#******************************************************************************* +# Ledger Nano S +# (c) 2016 Ledger +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +#******************************************************************************* + +.PHONY: test-yarn +test-yarn: + cd test-integration && yarn && yarn upgrade ledgerjs-hw-app-fio && cd .. + +TESTS_SPECULOS_DIR=test-integration + +define run_nodejs_test + @cd $(TESTS_SPECULOS_DIR) \ + && { { { \ + TEST_SPECULOS_API_PORT=$(1) TEST_SPECULOS_APDU_PORT=$(2) TEST_DEVICE=$(TEST_DEVICE) \ + APPVERSION_M=$(APPVERSION_M) APPVERSION_N=$(APPVERSION_N) APPVERSION_P=$(APPVERSION_P) \ + node $(3) 2>&1; echo $$? >&3; \ + } | tee -a ../speculos-port-$(1).log >&4; } 3>&1 | { read xs; exit $$xs; } } 4>&1 +endef + +.PHONY: speculos_port_5001_test_internal +speculos_port_5001_test_internal: + $(call run_announce,$@) +# $(call run_nodejs_test,5001,40001,getVersion.js) + $(call run_nodejs_test,5001,40001,getSerial.js) + $(call run_nodejs_test,5001,40001,getPublicKey.js) + $(call run_nodejs_test,5001,40001,decodeMessage.js) + $(call run_nodejs_test,5001,40001,signTransactionTrnsfiopubky.js) + $(call run_nodejs_test,5001,40001,signTransactionNewfundsreq.js) + $(call run_nodejs_test,5001,40001,signTransactionRecordobt.js) + $(call run_nodejs_test,5001,40001,signTransactionAddaddress.js) + $(call run_nodejs_test,5001,40001,signTransactionRemaddress.js) + $(call run_nodejs_test,5001,40001,signTransactionAddnft.js) + $(call run_nodejs_test,5001,40001,signTransactionRemnft.js) + $(call run_nodejs_test,5001,40001,signTransactionOtherFioAddress.js) + $(call run_nodejs_test,5001,40001,signTransactionOtherFioReqobt.js) + $(call run_nodejs_test,5001,40001,signTransactionOtherFioStaking.js) + $(call run_nodejs_test,5001,40001,signTransactionOtherEosio.js) + $(call run_nodejs_test,5001,40001,signTransactionOtherFioOracle.js) + @echo "# ALL TESTS COMPLETED!" | tee -a speculos-port-5001.log + +.PHONY: speculos_port_5001_unit_test_internal +speculos_port_5001_unit_test_internal: + $(call run_announce,$@) + $(call run_nodejs_test,5001,40001,runUnitTests.js) + $(call run_nodejs_test,5001,40001,signTransactionCommandsBasic.js) + $(call run_nodejs_test,5001,40001,signTransactionCommandsShowData.js) + $(call run_nodejs_test,5001,40001,signTransactionCommandsCountedSection.js) + $(call run_nodejs_test,5001,40001,signTransactionCommandsStorage.js) + $(call run_nodejs_test,5001,40001,signTransactionCommandsDH.js) + $(call run_nodejs_test,5001,40001,signTransactionCommandsDHAndCountedSections.js) + @echo "# ALL TESTS COMPLETED!" | tee -a speculos-port-5001.log + +.PHONY: speculos_port_5001_unit_test +speculos_port_5001_unit_test: + $(call run_announce,$@) + $(MAKE) --no-print-directory speculos_port_5001_start && ($(MAKE) --no-print-directory speculos_port_5001_unit_test_internal; ret=$$?;$(MAKE) --no-print-directory speculos_port_5001_stop;$(call run_announce,note: logs: cat /speculos-port-5001.log);cat speculos-port-5001.log; exit $$ret) + +.PHONY: speculos_port_5001_test +speculos_port_5001_test: + $(call run_announce,$@) + $(MAKE) --no-print-directory speculos_port_5001_start && ($(MAKE) --no-print-directory speculos_port_5001_test_internal; ret=$$?;$(MAKE) --no-print-directory speculos_port_5001_stop;$(call run_announce,note: logs: cat speculos-port-5001.log);cat speculos-port-5001.log; exit $$ret) + +.PHONY: get_integrity_hashes_from_logs +get_integrity_hashes_from_logs: + sed -n -e 's/^.*Integrity check for: //p' speculos-port-5001.log + +.PHONY: get_allowed_sequences_from_logs +get_allowed_sequences_from_logs: + grep -e "vvvvvv testStart() // snapshots/signTransaction" -e "\^\^\^\^\^\^ testEnd() // snapshots/signTransaction" -e "integrityCheckProcessInstruction:322" -e "Integrity check for" speculos-port-5001.log + + +#Test on physical device + +.PHONY: ledger_test +ledger_test: + $(call run_announce,$@) + @cd $(TESTS_SPECULOS_DIR) && TEST_ON_DEVICE=LEDGER TEST_DEVICE=$(TEST_DEVICE) APPVERSION_M=$(APPVERSION_M) APPVERSION_N=$(APPVERSION_N) APPVERSION_P=$(APPVERSION_P) node getVersion.js + @cd $(TESTS_SPECULOS_DIR) && TEST_ON_DEVICE=LEDGER TEST_DEVICE=$(TEST_DEVICE) APPVERSION_M=$(APPVERSION_M) APPVERSION_N=$(APPVERSION_N) APPVERSION_P=$(APPVERSION_P) node getSerial.js + @cd $(TESTS_SPECULOS_DIR) && TEST_ON_DEVICE=LEDGER TEST_DEVICE=$(TEST_DEVICE) APPVERSION_M=$(APPVERSION_M) APPVERSION_N=$(APPVERSION_N) APPVERSION_P=$(APPVERSION_P) node getPublicKey.js + @cd $(TESTS_SPECULOS_DIR) && TEST_ON_DEVICE=LEDGER TEST_DEVICE=$(TEST_DEVICE) APPVERSION_M=$(APPVERSION_M) APPVERSION_N=$(APPVERSION_N) APPVERSION_P=$(APPVERSION_P) node decodeMessage.js + @cd $(TESTS_SPECULOS_DIR) && TEST_ON_DEVICE=LEDGER TEST_DEVICE=$(TEST_DEVICE) APPVERSION_M=$(APPVERSION_M) APPVERSION_N=$(APPVERSION_N) APPVERSION_P=$(APPVERSION_P) node signTransactionTrnsfiopubky.js + @cd $(TESTS_SPECULOS_DIR) && TEST_ON_DEVICE=LEDGER TEST_DEVICE=$(TEST_DEVICE) APPVERSION_M=$(APPVERSION_M) APPVERSION_N=$(APPVERSION_N) APPVERSION_P=$(APPVERSION_P) node signTransactionNewfundsreq.js + @cd $(TESTS_SPECULOS_DIR) && TEST_ON_DEVICE=LEDGER TEST_DEVICE=$(TEST_DEVICE) APPVERSION_M=$(APPVERSION_M) APPVERSION_N=$(APPVERSION_N) APPVERSION_P=$(APPVERSION_P) node signTransactionRecordobt.js + @cd $(TESTS_SPECULOS_DIR) && TEST_ON_DEVICE=LEDGER TEST_DEVICE=$(TEST_DEVICE) APPVERSION_M=$(APPVERSION_M) APPVERSION_N=$(APPVERSION_N) APPVERSION_P=$(APPVERSION_P) node signTransactionAddaddress.js + @cd $(TESTS_SPECULOS_DIR) && TEST_ON_DEVICE=LEDGER TEST_DEVICE=$(TEST_DEVICE) APPVERSION_M=$(APPVERSION_M) APPVERSION_N=$(APPVERSION_N) APPVERSION_P=$(APPVERSION_P) node signTransactionRemaddress.js + @cd $(TESTS_SPECULOS_DIR) && TEST_ON_DEVICE=LEDGER TEST_DEVICE=$(TEST_DEVICE) APPVERSION_M=$(APPVERSION_M) APPVERSION_N=$(APPVERSION_N) APPVERSION_P=$(APPVERSION_P) node signTransactionAddnft.js + @cd $(TESTS_SPECULOS_DIR) && TEST_ON_DEVICE=LEDGER TEST_DEVICE=$(TEST_DEVICE) APPVERSION_M=$(APPVERSION_M) APPVERSION_N=$(APPVERSION_N) APPVERSION_P=$(APPVERSION_P) node signTransactionRemaddress.js + @cd $(TESTS_SPECULOS_DIR) && TEST_ON_DEVICE=LEDGER TEST_DEVICE=$(TEST_DEVICE) APPVERSION_M=$(APPVERSION_M) APPVERSION_N=$(APPVERSION_N) APPVERSION_P=$(APPVERSION_P) node signTransactionOtherFioAddress.js + @cd $(TESTS_SPECULOS_DIR) && TEST_ON_DEVICE=LEDGER TEST_DEVICE=$(TEST_DEVICE) APPVERSION_M=$(APPVERSION_M) APPVERSION_N=$(APPVERSION_N) APPVERSION_P=$(APPVERSION_P) node signTransactionOtherFioReqobt.js + @cd $(TESTS_SPECULOS_DIR) && TEST_ON_DEVICE=LEDGER TEST_DEVICE=$(TEST_DEVICE) node APPVERSION_M=$(APPVERSION_M) APPVERSION_N=$(APPVERSION_N) APPVERSION_P=$(APPVERSION_P) signTransactionOtherFioStaking.js + #We don't do signTransactionEosio as it is too time consuming + $(call run_nodejs_test,5001,40001,signTransactionOtherEosio.js) + @echo "# ALL TESTS COMPLETED!" + +.PHONY: ledger_unit_test +ledger_unit_test: + $(call run_announce,$@) + @cd $(TESTS_SPECULOS_DIR) && TEST_ON_DEVICE=LEDGER TEST_DEVICE=$(TEST_DEVICE) node runUnitTests.js + + diff --git a/README.md b/README.md index 2e6b95b4..7aca3f3c 100644 --- a/README.md +++ b/README.md @@ -1,29 +1,109 @@ # FIO Ledger App -FIO Ledger App for Ledger Nano S +FIO Ledger App for Ledger Nano S, Ledger Nano X, and Ledger Nano SPlus. ## Building -### Loading the app +There are two ways how to build: local build and containerize build. Enviromental variable `BOLOS_SDK` determines the approach. If using local build it should contain directory containing SDK. If using containerize approach is should be empty. -`make load` +Containerized approach is preferred. For containerized approach you need docker. For local build you need to setup the enviroment. Environment setup and developer documentation is sufficiently provided in Ledger’s [Read the Docs](https://developers.ledger.com/docs/nano-app/quickstart/). -Builds and loads the application into connected device. Just make sure to close the Ledger app on the device before running the command. +Make sure you have: +- SDK >= 2.0.0 (for local build) +- MCU >= 1.11 (if you want to lead the app on the device) + + +### Building commands + +To select device for which to build use enviromental variable `TARGET_DEVICE=NANO_S` (default), `TARGET_DEVICE=NANO_X`, or`TARGET_DEVICE=NANO_SP`. +To induce debug build set enviromental variable `DEVEL=1`. Thus, you can use: `TARGET_DEVICE=NANO_SP DEVEL=1 make`. + +Use the following commands: + +`make` or `make build` +Builds the app, including Loading Tool. + +`make all` +Builds the app, including app.hex and app.sha.256 file, excluding Loading Tool. Reqiuires ledgerblue python package. + +`make clean` + +`make format` + +`make scan-build` + +`make shell` +Starts the container and runs shell (only for container build) + +`make size` +Determines the size of the app. + +Further interesting options are: ` +- `NO_PULL=1`- do not pull containers (this works also for other commands using containers) +- `NO_INTEGRITY_CHECK=1` - integrity check is always ok, must also have `DEVEL=1`. If you run speculos tests you can obtain required integrity hashes from logs using `make get_integrity_hashes_from_logs`. You can copy them to signTransactionIntegrity.c . This is the easiest way to update integrity hash list after changes. + + +## Javascript layer + +`make js-yarn` + +`make js-prepack` + +`make js-lint` + +`make js-clean` + +`make js-build` +`make js-build-flowtypes` -### Debug version +`make js-flow` -In `Makefile`, uncomment +`make js-gen-docs` - #DEVEL = 1 - #DEFINES += HEADLESS +`make js-prepublish` -also comment out +`make js-run-example` +Runs an example app. Requires ledger to be connected and loaded with FIO app. - DEFINES += RESET_ON_CRASH -and then run `make clean load`. +## Speculos emulator and emulator tests + +Requires Docker. You need to set `TARGET_DEVICE` enviromental variable (if you do not want to emulate Nano S) is a similar way as when you build the app. + +`make speculos_port_5001_start` +Starts the container. You can interact with it on ports: +- 5001: API port + You can use this api to press buttons, take snapshots; besides this you can interact at http://localhost:5001/ +- 40001: APDU port + You may use SpeculosTransport class to communicate with the device via this port. Note that this transport can be injected into main js class. + +`make speculos_port_5001_stop` +Stops the container + +Further interesting options are: ` +- `NO_PULL=1`- do not pull containers (this works also for other commands using containers) + +### Running tests on Speculos + +If you update JavaScript, you need to `make js-build` to compile it and then `make test-yarn` to update the dependency in tests. + +`make test-yarn` +Prepares dependencies for speculos tests + +`make speculos_port_5001_test` +Runs integration tests on Speculos. If screenshot change, then you need to set variable `TEST_PNG_RE_GEN_FOR`. +E.g. `TEST_PNG_RE_GEN_FOR=snapshots/getPublicKey.js make speculos_port_5001_test` runs tests and re-genetates screenshots +for `getPublicKey.js` integration tests. `TEST_PNG_RE_GEN_FOR=snapshots make speculos_port_5001_test` regenerates all snapshots. + +`make speculos_port_5001_unit_test` +Runs unit tests on Speculos. Requires DEVEL build. + +Further interesting options are: ` +- `NO_PULL=1`- do not pull containers (this works also for other commands using containers) + +## Testing on physical device ### Setup @@ -35,40 +115,65 @@ Environment setup and developer documentation is sufficiently provided in Ledger You want a debug version of the MCU firmware (but it blocks SDK firmware updates, so for the purpose of upgrading SDK, replace it temporarily with a non-debug one). Instructions for swapping MCU versions: https://github.com/LedgerHQ/ledger-dev-doc/blob/master/source/userspace/debugging.rst + ### Troubleshooting connection problems The quickstart guide's script sets up your udev rules, but there still might be problems. - https://support.ledger.com/hc/en-us/articles/115005165269-Fix-connection-issues -## Development -To learn more about development process and individual commands, [check the desing doc](doc/design_doc.md). +### Loading the app + +`make load` +Builds and loads the application into connected device. Just make sure to close the Ledger app on the device before running the command. + +`make delete` +Deletes the application from connected device + +`make seed` +Resets mnemonics and pin as desired to ones desired by test. +Many of our integration tests expect the device to be configured with a known test mnemonic. +- Plug your device while pressing the right button +- Your device will show "Recovery" in the screen +- Double click + + +### Running tests on real device + +If you update JavaScript, you need to `make js-build` to compile it and then `make test-yarn` to update the dependency in tests. + +If you do not want to click through all the screens you may, if you use DEVEL build set `HEADLESS`, e.g. `HEADLESS= make` +At this moment we experience issues with PRINTF macro on ledger device thus you should only run `make ledger_test` on non-development build. -## Deploying +`make ledger_test` -The build process is managed with [Make](https://www.gnu.org/software/make/). +`make ledger_unit_test` +This requires `DEVEL=1` app version. -### Make Commands -* `load`: Load signed app onto the Ledger device -* `clean`: Clean the build and output directories -* `delete`: Remove the application from the device -* `build`: Build obj and bin api artefacts without loading -* `format`: Format source code. +## How to get a transaction body computed by Ledger (for development purposes) -See `Makefile` for list of included functions. +If you use Speculos with `DEVEL=1` build, then you can find logs from `sha_256_append` function. Concatenating what went into hash computation gives the transaction body as signed by ledger. -## How to get a transaction body computed by Ledger +## How to add a new type of action -Ordinarily, Ledger computes a rolling hash of the serialized transaction body, but the body itself is not available. It is possible to acquire it from the development build by going through the following steps: +The suggested method is the following: +1. Start writing speculos integration test for the new action until the point when you can retrieve necessary types ftom ABI. Add the new test to the list of tests in MakefileTest.mk. You may want to comment out all other tests durring first phase of the development. +2. Add new public type for the new action's data to ledgerjs-fio/src/types/public.ts . Do not forget to add the new type to Action definition. Add internal types for parsed action data to ledgerjs-fio/src/types/internal.ts . Again, do not forget to add the types ParsedAction definition. +3. Add action data parsing to ledgerjs-fio/src/utils/parseTxActions.ts . +4. Add action data parsing to ledgerjs-fio/src/utils/parse.ts . +5. Prepare transaction template in ledgerjs-fio/src/interaction/transactionTemplates . To get the right serialization you have to follow ABI obtained in step 1. Add the new template into the template list in ledgerjs-fio/src/interaction/transactionTemplates/template_all.ts +6. Build js and connect it with integration tests: `make js-build`, `make test-yarn` +7. Build integration tests for the new action. If the action allows for multiple workflows, all of them must be in integration tests, otherwise we will not get all necessary hashes in later steps. +8. Create a directory in test-integration/snapshots/ that matches the name of your test. +9. Build the NanoS app in devel mode that ignores integrity check: `make clean`, `NO_INTEGRITY_CHECK=1 DEVEL=1 make`. +10. Run Speculos integration tests, generating screenshots for the new test: `TEST_PNG_RE_GEN_FOR=snapshots make speculos_port_5001_test`. After this, the logs contain all necessary interity hashes. +11. Retrieve the integrity hashes from the logs `make get_integrity_hashes_from_logs`. Append the new ones (or if you ran all the tests replace the whole list) to the list of hashes in src/signTransactionIntegrity.c . Run `make format` to format the changes. +12. Build NanoS+ app `make clean`, `TARGET_DEVICE=NANO_SP make` and generate the snapshots for the new test `TEST_PNG_RE_GEN_FOR=snapshots TARGET_DEVICE=NANO_SP make speculos_port_5001_test` . Now the app is not in devel mode thus we validate that integrity hashes were added correctly. +13. Review all snapshots. Uncomment tests you commented in MakefileTest.mk . You can either run all tests again lacally, or use CI to run all tests. -1. [Install debug MCU](https://ledger.readthedocs.io/en/latest/userspace/debugging.html#application-debug) on your Ledger Nano S device. -2. Install the debug version of FIO app (see above). -3. Install `usbtool` and turn on [console printing](https://ledger.readthedocs.io/en/latest/userspace/debugging.html#console-printing). -4. Send a single `signTx` call to Ledger (e.g. by running `yarn test-integration --grep ""`). -5. After the call is processed, the terminal running console printing now contains all log messages resulting from that `signTx` call. (See the `TRACE*` macros.). You can build the transactions using data between logged within sha_256_append function. diff --git a/doc/allowed_command_sequences.md b/doc/allowed_command_sequences.md new file mode 100644 index 00000000..f255ad7c --- /dev/null +++ b/doc/allowed_command_sequences.md @@ -0,0 +1,2028 @@ +# Sign Transaction allowed commands sequences + +Hashes in the list of allowed hashes come from a run of the app in compiled with `DEVEL=1`. +Here follows the excrept of the log containing all allowed command sequences. Note that integrity hash is validated only on DH\_END and FINISH commands. This can be obtained by `make get_allowed_sequences_from_logs` + +11:55:52.009 vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv testStart() // snapshots/signTransactionTrnsfiopubky +11:55:52.516:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 01. p2: 00, constdata: +11:55:52.938:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 01020a000000000000000a000000000000000200 +11:55:52.995:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 0000000001 +11:55:53.037:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 0000980ad20ca85be0e1d195ba85e7cd01 +11:55:53.074:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 03. p2: 00, constdata: 06416374696f6e135472616e736665722046494f20746f6b656e73 +11:55:53.476:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 07. p2: 01, constdata: +11:55:53.521:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000001200 +11:55:53.569:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000000200 +11:55:53.624:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 05. p2: 00, constdata: 17030000000000000000ffffffff00000000 +11:55:53.660:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040201000000000000000400000001000000050c5061796565205075626b6579 +11:55:54.000:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 10030000000000000000ffffffffffffff7f0506416d6f756e74 +11:55:54.462:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 10030000000000000000ffffffffffffff7f05074d617820666565 +11:55:54.842:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000001200 +11:55:54.892:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0402010000000000000004000000010000000200 +11:55:54.956:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 06. p2: 00, constdata: +11:55:54.986:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 000000000000000000000000000000000000000000000000000000000000000000 +11:55:55.031:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 10. p2: 00, constdata: +11:55:55.384:seproxyhal: printf: Integrity check for: {0x72, 0x0b, 0x29, 0xb9, 0xb7, 0x06, 0xaa, 0xac, 0xdd, 0x35, 0xa7, 0xae, 0xef, 0xde, 0x25, 0x59, 0x1a, 0x55, 0x46, 0x06, 0x16, 0x54, 0x82, 0x78, 0x84, 0x16, 0x83, 0xe1, 0xf0, 0xd7, 0x98, 0x73} +11:55:57.102:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 01. p2: 00, constdata: +11:55:57.561:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 01020a000000000000000a000000000000000200 +11:55:57.616:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 0000000001 +11:55:57.670:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 0000980ad20ca85be0e1d195ba85e7cd01 +11:55:57.707:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 03. p2: 00, constdata: 06416374696f6e135472616e736665722046494f20746f6b656e73 +11:55:58.068:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 07. p2: 01, constdata: +11:55:58.111:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000001200 +11:55:58.172:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000000200 +11:55:58.215:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 05. p2: 00, constdata: 17030000000000000000ffffffff00000000 +11:55:58.258:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040201000000000000000400000001000000050c5061796565205075626b6579 +11:55:58.783:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 10030000000000000000ffffffffffffff7f0506416d6f756e74 +11:55:59.219:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 10030000000000000000ffffffffffffff7f05074d617820666565 +11:55:59.577:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000001200 +11:55:59.624:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0402010000000000000004000000010000000200 +11:55:59.680:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 06. p2: 00, constdata: +11:55:59.714:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 000000000000000000000000000000000000000000000000000000000000000000 +11:55:59.786:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 10. p2: 00, constdata: +11:56:00.068:seproxyhal: printf: Integrity check for: {0x72, 0x0b, 0x29, 0xb9, 0xb7, 0x06, 0xaa, 0xac, 0xdd, 0x35, 0xa7, 0xae, 0xef, 0xde, 0x25, 0x59, 0x1a, 0x55, 0x46, 0x06, 0x16, 0x54, 0x82, 0x78, 0x84, 0x16, 0x83, 0xe1, 0xf0, 0xd7, 0x98, 0x73} +11:56:01.250:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 01. p2: 00, constdata: +11:56:01.532:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 01. p2: 00, constdata: +11:56:01.913:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 01020a000000000000000a000000000000000200 +11:56:01.978:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 0000000001 +11:56:02.033:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 0000980ad20ca85be0e1d195ba85e7cd01 +11:56:02.085:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 03. p2: 00, constdata: 06416374696f6e135472616e736665722046494f20746f6b656e73 +11:56:02.426:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 07. p2: 01, constdata: +11:56:02.466:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000001200 +11:56:02.523:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000000200 +11:56:02.566:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 05. p2: 00, constdata: 17030000000000000000ffffffff00000000 +11:56:02.604:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040201000000000000000400000001000000050c5061796565205075626b6579 +11:56:02.947:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 10030000000000000000ffffffffffffff7f0506416d6f756e74 +11:56:03.349:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 10030000000000000000ffffffffffffff7f05074d617820666565 +11:56:03.779:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000001200 +11:56:03.825:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0402010000000000000004000000010000000200 +11:56:03.880:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 06. p2: 00, constdata: +11:56:03.917:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 000000000000000000000000000000000000000000000000000000000000000000 +11:56:03.972:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 10. p2: 00, constdata: +11:56:04.283:seproxyhal: printf: Integrity check for: {0x72, 0x0b, 0x29, 0xb9, 0xb7, 0x06, 0xaa, 0xac, 0xdd, 0x35, 0xa7, 0xae, 0xef, 0xde, 0x25, 0x59, 0x1a, 0x55, 0x46, 0x06, 0x16, 0x54, 0x82, 0x78, 0x84, 0x16, 0x83, 0xe1, 0xf0, 0xd7, 0x98, 0x73} +11:56:06.214:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 01. p2: 00, constdata: +11:56:06.639:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 01020a000000000000000a000000000000000200 +11:56:06.688:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 0000000001 +11:56:06.732:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 0000980ad20ca85be0e1d195ba85e7cd01 +11:56:06.789:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 03. p2: 00, constdata: 06416374696f6e135472616e736665722046494f20746f6b656e73 +11:56:07.133:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 07. p2: 01, constdata: +11:56:07.167:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000001200 +11:56:07.214:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000000200 +11:56:07.255:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 05. p2: 00, constdata: 17030000000000000000ffffffff00000000 +11:56:07.291:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040201000000000000000400000001000000050c5061796565205075626b6579 +11:56:07.688:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 10030000000000000000ffffffffffffff7f0506416d6f756e74 +11:56:08.108:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 10030000000000000000ffffffffffffff7f05074d617820666565 +11:56:08.589:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000001200 +11:56:08.640:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0402010000000000000004000000010000000200 +11:56:08.700:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 06. p2: 00, constdata: +11:56:08.728:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 000000000000000000000000000000000000000000000000000000000000000000 +11:56:08.766:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 10. p2: 00, constdata: +11:56:09.176:seproxyhal: printf: Integrity check for: {0x72, 0x0b, 0x29, 0xb9, 0xb7, 0x06, 0xaa, 0xac, 0xdd, 0x35, 0xa7, 0xae, 0xef, 0xde, 0x25, 0x59, 0x1a, 0x55, 0x46, 0x06, 0x16, 0x54, 0x82, 0x78, 0x84, 0x16, 0x83, 0xe1, 0xf0, 0xd7, 0x98, 0x73} +11:56:10.234 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ testEnd() // snapshots/signTransactionTrnsfiopubky +11:56:13.404 vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv testStart() // snapshots/signTransactionNewfundsreq +11:56:13.645:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 01. p2: 00, constdata: +11:56:14.055:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 01020a000000000000000a000000000000000200 +11:56:14.098:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 0000000001 +11:56:14.141:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 00403ed4aa0ba85b00acba384dbdb89a01 +11:56:14.202:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 03. p2: 00, constdata: 06416374696f6e0d526571756573742046756e6473 +11:56:14.554:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 07. p2: 01, constdata: +11:56:14.591:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000001200 +11:56:14.651:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000000200 +11:56:14.715:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 05. p2: 00, constdata: 17030000000000000000ffffffff00000000 +11:56:14.754:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000051050617965722046494f2048616e646c65 +11:56:15.240:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000051050617965652046494f2048616e646c65 +11:56:15.620:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 05. p2: 00, constdata: 170340000000000000002801000000000000 +11:56:15.670:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 08. p2: 00, constdata: +11:56:16.342:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 04020100000000000000040000000100000005115061796565205075626c69632041646472 +11:56:16.906:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0402010000000000000004000000010000000510416d6f756e7420726571756573746564 +11:56:17.528:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040202000000000000000b00000000000000050a436861696e20636f6465 +11:56:18.207:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040202000000000000000b00000000000000050a546f6b656e20636f6465 +11:56:18.958:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 2001000000000000000000000000000000000200 +11:56:19.132:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 09. p2: 00, constdata: +11:56:19.481:seproxyhal: printf: Integrity check for: {0x04, 0x68, 0x6b, 0x09, 0xf5, 0x1d, 0x68, 0xb0, 0x8a, 0x0d, 0x0c, 0x6f, 0xac, 0x1a, 0x53, 0x37, 0x05, 0xe4, 0x02, 0x8a, 0x86, 0xf0, 0xc5, 0x2f, 0xb9, 0x2c, 0x2c, 0x09, 0xe1, 0x30, 0x09, 0x52} +11:56:20.085:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 06. p2: 00, constdata: +11:56:20.139:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 10030000000000000000ffffffffffffff7f05074d617820666565 +11:56:20.649:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 05. p2: 00, constdata: 17030000000000000000ffffffff00000000 +11:56:20.704:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 020200000000000000000e000000000000004200 +11:56:20.766:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 06. p2: 00, constdata: +11:56:20.794:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0402010000000000000004000000010000000200 +11:56:20.836:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 06. p2: 00, constdata: +11:56:20.883:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 000000000000000000000000000000000000000000000000000000000000000000 +11:56:20.939:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 10. p2: 00, constdata: +11:56:21.302:seproxyhal: printf: Integrity check for: {0x23, 0x27, 0x7c, 0x5c, 0x25, 0x48, 0x1d, 0xa2, 0xa8, 0x97, 0xa5, 0xf2, 0xb7, 0xa3, 0x66, 0x1e, 0x35, 0xd7, 0x89, 0x90, 0x61, 0xad, 0x9b, 0x00, 0x91, 0xc2, 0x53, 0x30, 0xb2, 0x6b, 0x42, 0xca} +11:56:22.455:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 01. p2: 00, constdata: +11:56:22.813:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 01020a000000000000000a000000000000000200 +11:56:22.875:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 0000000001 +11:56:22.920:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 00403ed4aa0ba85b00acba384dbdb89a01 +11:56:22.957:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 03. p2: 00, constdata: 06416374696f6e0d526571756573742046756e6473 +11:56:23.399:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 07. p2: 01, constdata: +11:56:23.457:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000001200 +11:56:23.520:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000000200 +11:56:23.572:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 05. p2: 00, constdata: 17030000000000000000ffffffff00000000 +11:56:23.637:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000051050617965722046494f2048616e646c65 +11:56:24.074:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000051050617965652046494f2048616e646c65 +11:56:24.518:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 05. p2: 00, constdata: 170340000000000000002801000000000000 +11:56:24.571:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 08. p2: 00, constdata: +11:56:25.197:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 04020100000000000000040000000100000005115061796565205075626c69632041646472 +11:56:25.740:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0402010000000000000004000000010000000510416d6f756e7420726571756573746564 +11:56:26.416:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040202000000000000000b00000000000000050a436861696e20636f6465 +11:56:26.922:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040202000000000000000b00000000000000050a546f6b656e20636f6465 +11:56:27.374:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 2001000000000000000000000000000000000200 +11:56:27.585:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 09. p2: 00, constdata: +11:56:27.926:seproxyhal: printf: Integrity check for: {0x04, 0x68, 0x6b, 0x09, 0xf5, 0x1d, 0x68, 0xb0, 0x8a, 0x0d, 0x0c, 0x6f, 0xac, 0x1a, 0x53, 0x37, 0x05, 0xe4, 0x02, 0x8a, 0x86, 0xf0, 0xc5, 0x2f, 0xb9, 0x2c, 0x2c, 0x09, 0xe1, 0x30, 0x09, 0x52} +11:56:28.414:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 06. p2: 00, constdata: +11:56:28.465:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 10030000000000000000ffffffffffffff7f05074d617820666565 +11:56:28.833:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 05. p2: 00, constdata: 17030000000000000000ffffffff00000000 +11:56:28.879:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 020200000000000000000e000000000000004200 +11:56:28.930:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 06. p2: 00, constdata: +11:56:28.961:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0402010000000000000004000000010000000200 +11:56:29.001:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 06. p2: 00, constdata: +11:56:29.041:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 000000000000000000000000000000000000000000000000000000000000000000 +11:56:29.112:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 10. p2: 00, constdata: +11:56:29.428:seproxyhal: printf: Integrity check for: {0x23, 0x27, 0x7c, 0x5c, 0x25, 0x48, 0x1d, 0xa2, 0xa8, 0x97, 0xa5, 0xf2, 0xb7, 0xa3, 0x66, 0x1e, 0x35, 0xd7, 0x89, 0x90, 0x61, 0xad, 0x9b, 0x00, 0x91, 0xc2, 0x53, 0x30, 0xb2, 0x6b, 0x42, 0xca} +11:56:31.298:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 01. p2: 00, constdata: +11:56:31.691:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 01020a000000000000000a000000000000000200 +11:56:31.733:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 0000000001 +11:56:31.762:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 00403ed4aa0ba85b00acba384dbdb89a01 +11:56:31.813:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 03. p2: 00, constdata: 06416374696f6e0d526571756573742046756e6473 +11:56:32.260:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 07. p2: 01, constdata: +11:56:32.298:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000001200 +11:56:32.336:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000000200 +11:56:32.382:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 05. p2: 00, constdata: 17030000000000000000ffffffff00000000 +11:56:32.429:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000051050617965722046494f2048616e646c65 +11:56:32.803:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000051050617965652046494f2048616e646c65 +11:56:33.176:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 05. p2: 00, constdata: 170340000000000000002801000000000000 +11:56:33.228:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 08. p2: 00, constdata: +11:56:33.889:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 04020100000000000000040000000100000005115061796565205075626c69632041646472 +11:56:34.564:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0402010000000000000004000000010000000510416d6f756e7420726571756573746564 +11:56:35.260:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040202000000000000000b00000000000000050a436861696e20636f6465 +11:56:35.746:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040202000000000000000b00000000000000050a546f6b656e20636f6465 +11:56:36.289:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 2001000000000000000000000000000000000200 +11:56:36.535:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 09. p2: 00, constdata: +11:56:36.869:seproxyhal: printf: Integrity check for: {0x04, 0x68, 0x6b, 0x09, 0xf5, 0x1d, 0x68, 0xb0, 0x8a, 0x0d, 0x0c, 0x6f, 0xac, 0x1a, 0x53, 0x37, 0x05, 0xe4, 0x02, 0x8a, 0x86, 0xf0, 0xc5, 0x2f, 0xb9, 0x2c, 0x2c, 0x09, 0xe1, 0x30, 0x09, 0x52} +11:56:37.591:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 06. p2: 00, constdata: +11:56:37.641:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 10030000000000000000ffffffffffffff7f05074d617820666565 +11:56:38.162:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 05. p2: 00, constdata: 17030000000000000000ffffffff00000000 +11:56:38.239:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 020200000000000000000e000000000000004200 +11:56:38.286:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 06. p2: 00, constdata: +11:56:38.324:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0402010000000000000004000000010000000200 +11:56:38.383:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 06. p2: 00, constdata: +11:56:38.424:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 000000000000000000000000000000000000000000000000000000000000000000 +11:56:38.484:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 10. p2: 00, constdata: +11:56:38.812:seproxyhal: printf: Integrity check for: {0x23, 0x27, 0x7c, 0x5c, 0x25, 0x48, 0x1d, 0xa2, 0xa8, 0x97, 0xa5, 0xf2, 0xb7, 0xa3, 0x66, 0x1e, 0x35, 0xd7, 0x89, 0x90, 0x61, 0xad, 0x9b, 0x00, 0x91, 0xc2, 0x53, 0x30, 0xb2, 0x6b, 0x42, 0xca} +11:56:39.812:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 01. p2: 00, constdata: +11:56:40.277:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 01020a000000000000000a000000000000000200 +11:56:40.327:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 0000000001 +11:56:40.373:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 00403ed4aa0ba85b00acba384dbdb89a01 +11:56:40.405:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 03. p2: 00, constdata: 06416374696f6e0d526571756573742046756e6473 +11:56:40.792:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 07. p2: 01, constdata: +11:56:40.835:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000001200 +11:56:40.899:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000000200 +11:56:40.939:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 05. p2: 00, constdata: 17030000000000000000ffffffff00000000 +11:56:40.987:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000051050617965722046494f2048616e646c65 +11:56:41.497:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000051050617965652046494f2048616e646c65 +11:56:41.871:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 05. p2: 00, constdata: 170340000000000000002801000000000000 +11:56:41.921:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 08. p2: 00, constdata: +11:56:42.603:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 04020100000000000000040000000100000005115061796565205075626c69632041646472 +11:56:43.076:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0402010000000000000004000000010000000510416d6f756e7420726571756573746564 +11:56:43.576:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040202000000000000000b00000000000000050a436861696e20636f6465 +11:56:44.061:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040202000000000000000b00000000000000050a546f6b656e20636f6465 +11:56:44.566:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 2001000000000000000000000000000000000200 +11:56:44.767:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 09. p2: 00, constdata: +11:56:45.106:seproxyhal: printf: Integrity check for: {0x04, 0x68, 0x6b, 0x09, 0xf5, 0x1d, 0x68, 0xb0, 0x8a, 0x0d, 0x0c, 0x6f, 0xac, 0x1a, 0x53, 0x37, 0x05, 0xe4, 0x02, 0x8a, 0x86, 0xf0, 0xc5, 0x2f, 0xb9, 0x2c, 0x2c, 0x09, 0xe1, 0x30, 0x09, 0x52} +11:56:45.853:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 06. p2: 00, constdata: +11:56:45.891:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 10030000000000000000ffffffffffffff7f05074d617820666565 +11:56:46.429:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 05. p2: 00, constdata: 17030000000000000000ffffffff00000000 +11:56:46.475:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 020200000000000000000e000000000000004200 +11:56:46.527:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 06. p2: 00, constdata: +11:56:46.559:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0402010000000000000004000000010000000200 +11:56:46.607:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 06. p2: 00, constdata: +11:56:46.656:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 000000000000000000000000000000000000000000000000000000000000000000 +11:56:46.709:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 10. p2: 00, constdata: +11:56:47.030:seproxyhal: printf: Integrity check for: {0x23, 0x27, 0x7c, 0x5c, 0x25, 0x48, 0x1d, 0xa2, 0xa8, 0x97, 0xa5, 0xf2, 0xb7, 0xa3, 0x66, 0x1e, 0x35, 0xd7, 0x89, 0x90, 0x61, 0xad, 0x9b, 0x00, 0x91, 0xc2, 0x53, 0x30, 0xb2, 0x6b, 0x42, 0xca} +11:56:47.963 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ testEnd() // snapshots/signTransactionNewfundsreq +11:56:51.395 vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv testStart() // snapshots/signTransactionRecordobt +11:56:51.652:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 01. p2: 00, constdata: +11:56:52.052:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 01020a000000000000000a000000000000000200 +11:56:52.101:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 0000000001 +11:56:52.140:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 00403ed4aa0ba85b0000c887a64b91ba01 +11:56:52.184:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 03. p2: 00, constdata: 06416374696f6e0f5265636f7264206d65746164617461 +11:56:52.610:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 07. p2: 01, constdata: +11:56:52.654:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000001200 +11:56:52.723:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000000200 +11:56:52.770:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 05. p2: 00, constdata: 17030000000000000000ffffffff00000000 +11:56:52.815:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040201000000000000000400000001000000060a52657175657374204944 +11:56:53.287:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000051050617965722046494f2048616e646c65 +11:56:53.676:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000051050617965652046494f2048616e646c65 +11:56:54.067:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 05. p2: 00, constdata: 17034000000000000000b001000000000000 +11:56:54.109:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 08. p2: 00, constdata: +11:56:54.779:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 04020100000000000000040000000100000005115061796572205075626c69632041646472 +11:56:55.281:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 04020100000000000000040000000100000005115061796565205075626c69632041646472 +11:56:55.923:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0402010000000000000004000000010000000510416d6f756e7420726571756573746564 +11:56:56.561:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040202000000000000000b00000000000000050a436861696e20636f6465 +11:56:57.045:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040202000000000000000b00000000000000050a546f6b656e20636f6465 +11:56:57.568:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0402010000000000000004000000010000000506537461747573 +11:56:58.101:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 04020100000000000000040000000100000005064f6274204944 +11:56:58.804:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 2001000000000000000000000000000000000200 +11:56:59.057:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 09. p2: 00, constdata: +11:56:59.414:seproxyhal: printf: Integrity check for: {0xb9, 0xb3, 0x6e, 0x49, 0xe5, 0xc2, 0xac, 0x9e, 0x27, 0xd7, 0xbf, 0xd1, 0x6c, 0x33, 0xdb, 0xa4, 0x79, 0x36, 0xc3, 0x6f, 0xa2, 0xac, 0x28, 0xdc, 0x9e, 0xd8, 0xa8, 0x5b, 0x67, 0x33, 0x6f, 0x44} +11:57:00.113:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 06. p2: 00, constdata: +11:57:00.152:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 10030000000000000000ffffffffffffff7f05074d617820666565 +11:57:00.513:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 05. p2: 00, constdata: 17030000000000000000ffffffff00000000 +11:57:00.558:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 020200000000000000000e000000000000004200 +11:57:00.621:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 06. p2: 00, constdata: +11:57:00.659:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0402010000000000000004000000010000000200 +11:57:00.719:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 06. p2: 00, constdata: +11:57:00.757:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 000000000000000000000000000000000000000000000000000000000000000000 +11:57:00.826:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 10. p2: 00, constdata: +11:57:01.111:seproxyhal: printf: Integrity check for: {0x90, 0xd9, 0xdd, 0xf7, 0x0d, 0x88, 0x32, 0xc2, 0x8a, 0xb2, 0xa8, 0xb2, 0xd5, 0xae, 0x08, 0x21, 0x54, 0xc6, 0xcf, 0x76, 0x4e, 0x77, 0x5e, 0x22, 0xde, 0x34, 0x63, 0x10, 0x4b, 0x60, 0xd4, 0x73} +11:57:02.443:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 01. p2: 00, constdata: +11:57:02.921:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 01020a000000000000000a000000000000000200 +11:57:02.962:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 0000000001 +11:57:03.006:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 00403ed4aa0ba85b0000c887a64b91ba01 +11:57:03.040:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 03. p2: 00, constdata: 06416374696f6e0f5265636f7264206d65746164617461 +11:57:03.407:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 07. p2: 01, constdata: +11:57:03.445:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000001200 +11:57:03.501:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000000200 +11:57:03.546:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 05. p2: 00, constdata: 17030000000000000000ffffffff00000000 +11:57:03.585:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040201000000000000000400000001000000060a52657175657374204944 +11:57:03.944:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000051050617965722046494f2048616e646c65 +11:57:04.326:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000051050617965652046494f2048616e646c65 +11:57:04.695:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 05. p2: 00, constdata: 17034000000000000000b001000000000000 +11:57:04.736:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 08. p2: 00, constdata: +11:57:05.312:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 04020100000000000000040000000100000005115061796572205075626c69632041646472 +11:57:05.870:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 04020100000000000000040000000100000005115061796565205075626c69632041646472 +11:57:06.573:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0402010000000000000004000000010000000510416d6f756e7420726571756573746564 +11:57:07.222:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040202000000000000000b00000000000000050a436861696e20636f6465 +11:57:07.717:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040202000000000000000b00000000000000050a546f6b656e20636f6465 +11:57:08.220:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0402010000000000000004000000010000000506537461747573 +11:57:08.727:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 04020100000000000000040000000100000005064f6274204944 +11:57:09.236:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 2001000000000000000000000000000000000200 +11:57:09.420:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 09. p2: 00, constdata: +11:57:09.761:seproxyhal: printf: Integrity check for: {0xb9, 0xb3, 0x6e, 0x49, 0xe5, 0xc2, 0xac, 0x9e, 0x27, 0xd7, 0xbf, 0xd1, 0x6c, 0x33, 0xdb, 0xa4, 0x79, 0x36, 0xc3, 0x6f, 0xa2, 0xac, 0x28, 0xdc, 0x9e, 0xd8, 0xa8, 0x5b, 0x67, 0x33, 0x6f, 0x44} +11:57:10.506:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 06. p2: 00, constdata: +11:57:10.553:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 10030000000000000000ffffffffffffff7f05074d617820666565 +11:57:11.108:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 05. p2: 00, constdata: 17030000000000000000ffffffff00000000 +11:57:11.150:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 020200000000000000000e000000000000004200 +11:57:11.202:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 06. p2: 00, constdata: +11:57:11.232:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0402010000000000000004000000010000000200 +11:57:11.271:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 06. p2: 00, constdata: +11:57:11.313:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 000000000000000000000000000000000000000000000000000000000000000000 +11:57:11.357:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 10. p2: 00, constdata: +11:57:11.688:seproxyhal: printf: Integrity check for: {0x90, 0xd9, 0xdd, 0xf7, 0x0d, 0x88, 0x32, 0xc2, 0x8a, 0xb2, 0xa8, 0xb2, 0xd5, 0xae, 0x08, 0x21, 0x54, 0xc6, 0xcf, 0x76, 0x4e, 0x77, 0x5e, 0x22, 0xde, 0x34, 0x63, 0x10, 0x4b, 0x60, 0xd4, 0x73} +11:57:12.789:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 01. p2: 00, constdata: +11:57:13.231:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 01020a000000000000000a000000000000000200 +11:57:13.272:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 0000000001 +11:57:13.337:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 00403ed4aa0ba85b0000c887a64b91ba01 +11:57:13.378:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 03. p2: 00, constdata: 06416374696f6e0f5265636f7264206d65746164617461 +11:57:13.736:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 07. p2: 01, constdata: +11:57:13.789:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000001200 +11:57:13.855:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000000200 +11:57:13.896:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 05. p2: 00, constdata: 17030000000000000000ffffffff00000000 +11:57:13.955:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040201000000000000000400000001000000060a52657175657374204944 +11:57:13.999:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000051050617965722046494f2048616e646c65 +11:57:14.398:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000051050617965652046494f2048616e646c65 +11:57:14.788:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 05. p2: 00, constdata: 17034000000000000000b001000000000000 +11:57:14.838:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 08. p2: 00, constdata: +11:57:15.522:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 04020100000000000000040000000100000005115061796572205075626c69632041646472 +11:57:16.203:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 04020100000000000000040000000100000005115061796565205075626c69632041646472 +11:57:16.691:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0402010000000000000004000000010000000510416d6f756e7420726571756573746564 +11:57:17.197:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040202000000000000000b00000000000000050a436861696e20636f6465 +11:57:17.660:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040202000000000000000b00000000000000050a546f6b656e20636f6465 +11:57:18.160:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0402010000000000000004000000010000000506537461747573 +11:57:18.844:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 04020100000000000000040000000100000005064f6274204944 +11:57:19.511:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 2001000000000000000000000000000000000200 +11:57:19.690:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 09. p2: 00, constdata: +11:57:20.020:seproxyhal: printf: Integrity check for: {0xb9, 0xb3, 0x6e, 0x49, 0xe5, 0xc2, 0xac, 0x9e, 0x27, 0xd7, 0xbf, 0xd1, 0x6c, 0x33, 0xdb, 0xa4, 0x79, 0x36, 0xc3, 0x6f, 0xa2, 0xac, 0x28, 0xdc, 0x9e, 0xd8, 0xa8, 0x5b, 0x67, 0x33, 0x6f, 0x44} +11:57:20.779:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 06. p2: 00, constdata: +11:57:20.819:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 10030000000000000000ffffffffffffff7f05074d617820666565 +11:57:21.155:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 05. p2: 00, constdata: 17030000000000000000ffffffff00000000 +11:57:21.198:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 020200000000000000000e000000000000004200 +11:57:21.248:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 06. p2: 00, constdata: +11:57:21.277:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0402010000000000000004000000010000000200 +11:57:21.320:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 06. p2: 00, constdata: +11:57:21.362:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 000000000000000000000000000000000000000000000000000000000000000000 +11:57:21.401:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 10. p2: 00, constdata: +11:57:21.738:seproxyhal: printf: Integrity check for: {0x90, 0xd9, 0xdd, 0xf7, 0x0d, 0x88, 0x32, 0xc2, 0x8a, 0xb2, 0xa8, 0xb2, 0xd5, 0xae, 0x08, 0x21, 0x54, 0xc6, 0xcf, 0x76, 0x4e, 0x77, 0x5e, 0x22, 0xde, 0x34, 0x63, 0x10, 0x4b, 0x60, 0xd4, 0x73} +11:57:23.356:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 01. p2: 00, constdata: +11:57:23.858:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 01020a000000000000000a000000000000000200 +11:57:23.914:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 0000000001 +11:57:23.956:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 00403ed4aa0ba85b0000c887a64b91ba01 +11:57:23.994:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 03. p2: 00, constdata: 06416374696f6e0f5265636f7264206d65746164617461 +11:57:24.399:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 07. p2: 01, constdata: +11:57:24.439:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000001200 +11:57:24.489:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000000200 +11:57:24.528:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 05. p2: 00, constdata: 17030000000000000000ffffffff00000000 +11:57:24.575:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040201000000000000000400000001000000060a52657175657374204944 +11:57:24.658:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000051050617965722046494f2048616e646c65 +11:57:25.065:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000051050617965652046494f2048616e646c65 +11:57:25.448:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 05. p2: 00, constdata: 17034000000000000000b001000000000000 +11:57:25.496:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 08. p2: 00, constdata: +11:57:26.160:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 04020100000000000000040000000100000005115061796572205075626c69632041646472 +11:57:26.655:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 04020100000000000000040000000100000005115061796565205075626c69632041646472 +11:57:27.160:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0402010000000000000004000000010000000510416d6f756e7420726571756573746564 +11:57:27.679:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040202000000000000000b00000000000000050a436861696e20636f6465 +11:57:28.382:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040202000000000000000b00000000000000050a546f6b656e20636f6465 +11:57:29.115:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0402010000000000000004000000010000000506537461747573 +11:57:29.807:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 04020100000000000000040000000100000005064f6274204944 +11:57:30.296:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 2001000000000000000000000000000000000200 +11:57:30.478:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 09. p2: 00, constdata: +11:57:30.783:seproxyhal: printf: Integrity check for: {0xb9, 0xb3, 0x6e, 0x49, 0xe5, 0xc2, 0xac, 0x9e, 0x27, 0xd7, 0xbf, 0xd1, 0x6c, 0x33, 0xdb, 0xa4, 0x79, 0x36, 0xc3, 0x6f, 0xa2, 0xac, 0x28, 0xdc, 0x9e, 0xd8, 0xa8, 0x5b, 0x67, 0x33, 0x6f, 0x44} +11:57:31.334:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 06. p2: 00, constdata: +11:57:31.375:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 10030000000000000000ffffffffffffff7f05074d617820666565 +11:57:31.739:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 05. p2: 00, constdata: 17030000000000000000ffffffff00000000 +11:57:31.782:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 020200000000000000000e000000000000004200 +11:57:31.841:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 06. p2: 00, constdata: +11:57:31.874:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0402010000000000000004000000010000000200 +11:57:31.913:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 06. p2: 00, constdata: +11:57:31.957:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 000000000000000000000000000000000000000000000000000000000000000000 +11:57:32.009:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 10. p2: 00, constdata: +11:57:32.395:seproxyhal: printf: Integrity check for: {0x90, 0xd9, 0xdd, 0xf7, 0x0d, 0x88, 0x32, 0xc2, 0x8a, 0xb2, 0xa8, 0xb2, 0xd5, 0xae, 0x08, 0x21, 0x54, 0xc6, 0xcf, 0x76, 0x4e, 0x77, 0x5e, 0x22, 0xde, 0x34, 0x63, 0x10, 0x4b, 0x60, 0xd4, 0x73} +11:57:33.521 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ testEnd() // snapshots/signTransactionRecordobt +11:57:36.980 vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv testStart() // snapshots/signTransactionAddaddress +11:57:37.426:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 01. p2: 00, constdata: +11:57:37.873:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 01020a000000000000000a000000000000000200 +11:57:37.918:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 0000000001 +11:57:37.955:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 003056372503a85b0000c6eaa664523201 +11:57:38.014:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 03. p2: 00, constdata: 06416374696f6e124d6170207075626c69632061646472657373 +11:57:38.440:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 07. p2: 01, constdata: +11:57:38.477:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000001200 +11:57:38.526:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000000200 +11:57:38.579:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 05. p2: 00, constdata: 17030000000000000000ffffffff00000000 +11:57:38.636:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a46494f2048616e646c65 +11:57:39.152:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 01 +11:57:39.192:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 21010000000000000000000000000000000005094d617070696e672031 +11:57:39.750:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 10030000000000000000ffffffffffffff7f05074d617820666565 +11:57:40.196:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000001200 +11:57:40.264:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0402010000000000000004000000010000000200 +11:57:40.326:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 06. p2: 00, constdata: +11:57:40.381:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 000000000000000000000000000000000000000000000000000000000000000000 +11:57:40.451:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 10. p2: 00, constdata: +11:57:40.780:seproxyhal: printf: Integrity check for: {0xab, 0x0f, 0x5c, 0xce, 0x2f, 0xaf, 0x6b, 0x90, 0x93, 0xf3, 0xb5, 0xbe, 0xa9, 0x6a, 0x74, 0xa7, 0x70, 0xd2, 0x91, 0x68, 0xf7, 0x1f, 0xe5, 0x3d, 0x19, 0x74, 0xf7, 0xa5, 0x10, 0x39, 0x63, 0xc1} +11:57:42.072:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 01. p2: 00, constdata: +11:57:42.538:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 01020a000000000000000a000000000000000200 +11:57:42.600:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 0000000001 +11:57:42.641:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 003056372503a85b0000c6eaa664523201 +11:57:42.683:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 03. p2: 00, constdata: 06416374696f6e124d6170207075626c69632061646472657373 +11:57:43.044:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 07. p2: 01, constdata: +11:57:43.080:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000001200 +11:57:43.120:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000000200 +11:57:43.193:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 05. p2: 00, constdata: 17030000000000000000ffffffff00000000 +11:57:43.230:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a46494f2048616e646c65 +11:57:43.761:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 02 +11:57:43.806:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 21010000000000000000000000000000000005094d617070696e672031 +11:57:44.351:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 21010000000000000000000000000000000005094d617070696e672032 +11:57:44.755:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 10030000000000000000ffffffffffffff7f05074d617820666565 +11:57:45.144:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000001200 +11:57:45.203:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0402010000000000000004000000010000000200 +11:57:45.256:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 06. p2: 00, constdata: +11:57:45.286:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 000000000000000000000000000000000000000000000000000000000000000000 +11:57:45.338:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 10. p2: 00, constdata: +11:57:45.698:seproxyhal: printf: Integrity check for: {0x30, 0x73, 0x00, 0xed, 0x8d, 0x10, 0x65, 0x24, 0x7f, 0xa3, 0xdd, 0x2a, 0x1b, 0x7c, 0x90, 0xa8, 0xb2, 0x6f, 0xaf, 0xad, 0xb6, 0xf7, 0xa7, 0x5f, 0x91, 0x92, 0x97, 0xe5, 0xf1, 0xb1, 0x21, 0x96} +11:57:47.081:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 01. p2: 00, constdata: +11:57:47.584:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 01020a000000000000000a000000000000000200 +11:57:47.660:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 0000000001 +11:57:47.700:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 003056372503a85b0000c6eaa664523201 +11:57:47.737:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 03. p2: 00, constdata: 06416374696f6e124d6170207075626c69632061646472657373 +11:57:48.070:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 07. p2: 01, constdata: +11:57:48.115:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000001200 +11:57:48.161:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000000200 +11:57:48.199:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 05. p2: 00, constdata: 17030000000000000000ffffffff00000000 +11:57:48.240:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a46494f2048616e646c65 +11:57:48.593:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 03 +11:57:48.639:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 21010000000000000000000000000000000005094d617070696e672031 +11:57:49.003:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 21010000000000000000000000000000000005094d617070696e672032 +11:57:49.382:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 21010000000000000000000000000000000005094d617070696e672033 +11:57:49.763:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 10030000000000000000ffffffffffffff7f05074d617820666565 +11:57:50.193:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000001200 +11:57:50.238:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0402010000000000000004000000010000000200 +11:57:50.288:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 06. p2: 00, constdata: +11:57:50.326:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 000000000000000000000000000000000000000000000000000000000000000000 +11:57:50.369:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 10. p2: 00, constdata: +11:57:50.730:seproxyhal: printf: Integrity check for: {0x13, 0x02, 0x4a, 0xa0, 0xa0, 0xea, 0x70, 0xc8, 0x11, 0x52, 0x2d, 0x67, 0x17, 0x41, 0xcd, 0x8c, 0x4e, 0xf6, 0x80, 0x31, 0x7c, 0x4d, 0x5c, 0xa0, 0xf2, 0xfa, 0x3c, 0x4b, 0xb1, 0x85, 0xc5, 0xcd} +11:57:51.893:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 01. p2: 00, constdata: +11:57:52.342:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 01020a000000000000000a000000000000000200 +11:57:52.388:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 0000000001 +11:57:52.431:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 003056372503a85b0000c6eaa664523201 +11:57:52.497:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 03. p2: 00, constdata: 06416374696f6e124d6170207075626c69632061646472657373 +11:57:52.862:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 07. p2: 01, constdata: +11:57:52.904:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000001200 +11:57:52.957:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000000200 +11:57:52.995:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 05. p2: 00, constdata: 17030000000000000000ffffffff00000000 +11:57:53.048:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a46494f2048616e646c65 +11:57:53.578:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 04 +11:57:53.623:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 21010000000000000000000000000000000005094d617070696e672031 +11:57:54.016:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 21010000000000000000000000000000000005094d617070696e672032 +11:57:54.423:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 21010000000000000000000000000000000005094d617070696e672033 +11:57:54.801:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 21010000000000000000000000000000000005094d617070696e672034 +11:57:55.208:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 10030000000000000000ffffffffffffff7f05074d617820666565 +11:57:55.597:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000001200 +11:57:55.643:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0402010000000000000004000000010000000200 +11:57:55.698:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 06. p2: 00, constdata: +11:57:55.726:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 000000000000000000000000000000000000000000000000000000000000000000 +11:57:55.790:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 10. p2: 00, constdata: +11:57:56.084:seproxyhal: printf: Integrity check for: {0x8e, 0x26, 0x84, 0x94, 0x40, 0xd8, 0xcd, 0xf9, 0xd0, 0x1a, 0x08, 0x17, 0xaa, 0x0b, 0x57, 0x33, 0xf6, 0x48, 0xf0, 0x1f, 0xea, 0xfd, 0x51, 0xb4, 0xac, 0x3d, 0x18, 0xad, 0x87, 0x3f, 0xb9, 0xa4} +11:57:57.285:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 01. p2: 00, constdata: +11:57:57.789:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 01020a000000000000000a000000000000000200 +11:57:57.854:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 0000000001 +11:57:57.909:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 003056372503a85b0000c6eaa664523201 +11:57:57.941:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 03. p2: 00, constdata: 06416374696f6e124d6170207075626c69632061646472657373 +11:57:58.488:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 07. p2: 01, constdata: +11:57:58.547:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000001200 +11:57:58.596:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000000200 +11:57:58.643:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 05. p2: 00, constdata: 17030000000000000000ffffffff00000000 +11:57:58.690:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a46494f2048616e646c65 +11:57:59.185:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 05 +11:57:59.226:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 21010000000000000000000000000000000005094d617070696e672031 +11:57:59.601:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 21010000000000000000000000000000000005094d617070696e672032 +11:57:59.969:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 21010000000000000000000000000000000005094d617070696e672033 +11:58:00.414:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 21010000000000000000000000000000000005094d617070696e672034 +11:58:00.820:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 21010000000000000000000000000000000005094d617070696e672035 +11:58:01.216:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 10030000000000000000ffffffffffffff7f05074d617820666565 +11:58:01.667:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000001200 +11:58:01.714:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0402010000000000000004000000010000000200 +11:58:01.775:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 06. p2: 00, constdata: +11:58:01.821:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 000000000000000000000000000000000000000000000000000000000000000000 +11:58:01.886:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 10. p2: 00, constdata: +11:58:02.218:seproxyhal: printf: Integrity check for: {0xf6, 0x9c, 0xe5, 0x0f, 0x3c, 0xdf, 0xa4, 0x1e, 0x00, 0x7e, 0xf3, 0xb0, 0x29, 0xc4, 0x3b, 0xc7, 0x92, 0x3e, 0xb3, 0x78, 0x71, 0x7d, 0xed, 0x96, 0x1c, 0x41, 0x5a, 0x4c, 0x82, 0x50, 0xc9, 0xa1} +11:58:03.481 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ testEnd() // snapshots/signTransactionAddaddress +11:58:06.890 vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv testStart() // snapshots/signTransactionRemaddress +11:58:07.400:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 01. p2: 00, constdata: +11:58:07.899:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 01020a000000000000000a000000000000000200 +11:58:07.950:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 0000000001 +11:58:08.008:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 003056372503a85b0000c6eaa664a4ba01 +11:58:08.051:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 03. p2: 00, constdata: 06416374696f6e1e52656d6f7665207075626c69632061646472657373206d617070696e6773 +11:58:08.412:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 07. p2: 01, constdata: +11:58:08.448:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000001200 +11:58:08.501:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000000200 +11:58:08.549:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 05. p2: 00, constdata: 17030000000000000000ffffffff00000000 +11:58:08.592:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a46494f2048616e646c65 +11:58:09.098:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 01 +11:58:09.151:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 21010000000000000000000000000000000005094d617070696e672031 +11:58:09.695:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 10030000000000000000ffffffffffffff7f05074d617820666565 +11:58:10.118:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000001200 +11:58:10.168:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0402010000000000000004000000010000000200 +11:58:10.234:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 06. p2: 00, constdata: +11:58:10.271:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 000000000000000000000000000000000000000000000000000000000000000000 +11:58:10.316:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 10. p2: 00, constdata: +11:58:10.703:seproxyhal: printf: Integrity check for: {0xe7, 0xa8, 0xd4, 0xed, 0x82, 0xd2, 0x60, 0x32, 0x54, 0x5a, 0xc2, 0xc6, 0x73, 0x73, 0xfb, 0xf5, 0xfa, 0xa6, 0x8f, 0x2f, 0xb4, 0xb8, 0x91, 0xe3, 0xe8, 0x11, 0x6a, 0xca, 0x08, 0xbf, 0x59, 0xe1} +11:58:11.922:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 01. p2: 00, constdata: +11:58:12.433:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 01020a000000000000000a000000000000000200 +11:58:12.497:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 0000000001 +11:58:12.530:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 003056372503a85b0000c6eaa664a4ba01 +11:58:12.584:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 03. p2: 00, constdata: 06416374696f6e1e52656d6f7665207075626c69632061646472657373206d617070696e6773 +11:58:13.117:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 07. p2: 01, constdata: +11:58:13.166:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000001200 +11:58:13.229:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000000200 +11:58:13.282:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 05. p2: 00, constdata: 17030000000000000000ffffffff00000000 +11:58:13.331:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a46494f2048616e646c65 +11:58:13.721:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 02 +11:58:13.760:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 21010000000000000000000000000000000005094d617070696e672031 +11:58:14.142:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 21010000000000000000000000000000000005094d617070696e672032 +11:58:14.538:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 10030000000000000000ffffffffffffff7f05074d617820666565 +11:58:14.925:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000001200 +11:58:14.979:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0402010000000000000004000000010000000200 +11:58:15.047:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 06. p2: 00, constdata: +11:58:15.086:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 000000000000000000000000000000000000000000000000000000000000000000 +11:58:15.150:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 10. p2: 00, constdata: +11:58:15.534:seproxyhal: printf: Integrity check for: {0x26, 0xe5, 0x21, 0x0f, 0x8f, 0xc8, 0x77, 0x8e, 0xb7, 0x24, 0x97, 0x32, 0x20, 0xa2, 0xbc, 0x85, 0xbe, 0x11, 0x10, 0xb8, 0x39, 0x8d, 0xd2, 0x7e, 0x9d, 0x3a, 0xbc, 0xaf, 0x58, 0x1a, 0x48, 0x79} +11:58:16.775:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 01. p2: 00, constdata: +11:58:17.277:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 01020a000000000000000a000000000000000200 +11:58:17.321:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 0000000001 +11:58:17.362:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 003056372503a85b0000c6eaa664a4ba01 +11:58:17.419:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 03. p2: 00, constdata: 06416374696f6e1e52656d6f7665207075626c69632061646472657373206d617070696e6773 +11:58:17.774:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 07. p2: 01, constdata: +11:58:17.821:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000001200 +11:58:17.890:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000000200 +11:58:17.942:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 05. p2: 00, constdata: 17030000000000000000ffffffff00000000 +11:58:18.014:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a46494f2048616e646c65 +11:58:18.396:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 03 +11:58:18.435:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 21010000000000000000000000000000000005094d617070696e672031 +11:58:18.802:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 21010000000000000000000000000000000005094d617070696e672032 +11:58:19.170:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 21010000000000000000000000000000000005094d617070696e672033 +11:58:19.560:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 10030000000000000000ffffffffffffff7f05074d617820666565 +11:58:19.942:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000001200 +11:58:19.995:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0402010000000000000004000000010000000200 +11:58:20.056:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 06. p2: 00, constdata: +11:58:20.090:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 000000000000000000000000000000000000000000000000000000000000000000 +11:58:20.131:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 10. p2: 00, constdata: +11:58:20.451:seproxyhal: printf: Integrity check for: {0xe0, 0xa6, 0x06, 0xd1, 0x34, 0xb3, 0xbf, 0xfd, 0x72, 0x6f, 0x69, 0xf7, 0xd1, 0xa5, 0x68, 0x78, 0xd8, 0xad, 0x15, 0x66, 0xd4, 0x1e, 0xdc, 0x30, 0x1d, 0xbe, 0xea, 0x09, 0x82, 0xf1, 0x3d, 0xb} +11:58:21.664:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 01. p2: 00, constdata: +11:58:22.118:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 01020a000000000000000a000000000000000200 +11:58:22.171:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 0000000001 +11:58:22.214:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 003056372503a85b0000c6eaa664a4ba01 +11:58:22.266:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 03. p2: 00, constdata: 06416374696f6e1e52656d6f7665207075626c69632061646472657373206d617070696e6773 +11:58:22.594:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 07. p2: 01, constdata: +11:58:22.635:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000001200 +11:58:22.691:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000000200 +11:58:22.730:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 05. p2: 00, constdata: 17030000000000000000ffffffff00000000 +11:58:22.779:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a46494f2048616e646c65 +11:58:23.153:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 04 +11:58:23.197:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 21010000000000000000000000000000000005094d617070696e672031 +11:58:23.566:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 21010000000000000000000000000000000005094d617070696e672032 +11:58:23.980:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 21010000000000000000000000000000000005094d617070696e672033 +11:58:24.370:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 21010000000000000000000000000000000005094d617070696e672034 +11:58:24.745:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 10030000000000000000ffffffffffffff7f05074d617820666565 +11:58:25.153:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000001200 +11:58:25.221:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0402010000000000000004000000010000000200 +11:58:25.264:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 06. p2: 00, constdata: +11:58:25.295:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 000000000000000000000000000000000000000000000000000000000000000000 +11:58:25.353:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 10. p2: 00, constdata: +11:58:25.715:seproxyhal: printf: Integrity check for: {0xd6, 0xcc, 0x05, 0x60, 0xfd, 0xa9, 0x7d, 0x55, 0xb2, 0x49, 0x4e, 0x2a, 0x59, 0x13, 0xe3, 0xe4, 0x3c, 0xf7, 0x3e, 0x5e, 0x28, 0x3d, 0x15, 0xe4, 0x68, 0x2d, 0x23, 0x3e, 0x7c, 0x9b, 0x0b, 0x63} +11:58:27.036:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 01. p2: 00, constdata: +11:58:27.518:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 01020a000000000000000a000000000000000200 +11:58:27.578:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 0000000001 +11:58:27.631:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 003056372503a85b0000c6eaa664a4ba01 +11:58:27.671:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 03. p2: 00, constdata: 06416374696f6e1e52656d6f7665207075626c69632061646472657373206d617070696e6773 +11:58:28.015:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 07. p2: 01, constdata: +11:58:28.059:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000001200 +11:58:28.142:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000000200 +11:58:28.184:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 05. p2: 00, constdata: 17030000000000000000ffffffff00000000 +11:58:28.235:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a46494f2048616e646c65 +11:58:28.614:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 05 +11:58:28.679:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 21010000000000000000000000000000000005094d617070696e672031 +11:58:29.201:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 21010000000000000000000000000000000005094d617070696e672032 +11:58:29.599:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 21010000000000000000000000000000000005094d617070696e672033 +11:58:29.980:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 21010000000000000000000000000000000005094d617070696e672034 +11:58:30.381:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 21010000000000000000000000000000000005094d617070696e672035 +11:58:30.768:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 10030000000000000000ffffffffffffff7f05074d617820666565 +11:58:31.198:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000001200 +11:58:31.258:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0402010000000000000004000000010000000200 +11:58:31.313:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 06. p2: 00, constdata: +11:58:31.344:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 000000000000000000000000000000000000000000000000000000000000000000 +11:58:31.396:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 10. p2: 00, constdata: +11:58:31.754:seproxyhal: printf: Integrity check for: {0xb5, 0xf3, 0xed, 0x5f, 0x34, 0x48, 0x5d, 0xa3, 0xa4, 0x93, 0x10, 0xf0, 0x09, 0x8d, 0xfb, 0x71, 0x34, 0x5e, 0x0f, 0x6a, 0xc8, 0x42, 0x16, 0xc0, 0xe1, 0xb9, 0xed, 0x11, 0x09, 0x7c, 0x22, 0x30} +11:58:32.661 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ testEnd() // snapshots/signTransactionRemaddress +11:58:36.065 vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv testStart() // snapshots/signTransactionAddnft +11:58:36.561:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 01. p2: 00, constdata: +11:58:37.052:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 01020a000000000000000a000000000000000200 +11:58:37.091:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 0000000001 +11:58:37.135:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 003056372503a85b00000000e435533201 +11:58:37.190:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 03. p2: 00, constdata: 06416374696f6e084d6170206e667473 +11:58:37.547:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 07. p2: 01, constdata: +11:58:37.599:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000001200 +11:58:37.665:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000000200 +11:58:37.713:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 05. p2: 00, constdata: 17030000000000000000ffffffff00000000 +11:58:37.776:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a46494f2048616e646c65 +11:58:38.150:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 01 +11:58:38.189:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 03. p2: 00, constdata: 094d617070696e67203100 +11:58:38.606:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040202000000000000000b00000000000000050a436861696e20636f6465 +11:58:38.999:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0402020000000000000082000000000000000510436f6e74726163742061646472657373 +11:58:39.425:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040201000000000000008200000000000000050c4e465420546f6b656e204944 +11:58:39.798:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0402010000000000000082000000000000000200 +11:58:39.870:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0402010000000000000041000000000000000200 +11:58:39.935:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0402010000000000000082000000000000000200 +11:58:39.979:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 10030000000000000000ffffffffffffff7f05074d617820666565 +11:58:40.339:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000001200 +11:58:40.388:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0402010000000000000004000000010000000200 +11:58:40.439:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 06. p2: 00, constdata: +11:58:40.489:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 000000000000000000000000000000000000000000000000000000000000000000 +11:58:40.547:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 10. p2: 00, constdata: +11:58:40.918:seproxyhal: printf: Integrity check for: {0x3b, 0x19, 0xb4, 0x63, 0xcd, 0xba, 0xd4, 0x75, 0x76, 0x78, 0x03, 0x92, 0x17, 0xae, 0xd5, 0xea, 0x13, 0xe1, 0xe8, 0xab, 0xc8, 0xc8, 0x35, 0x7b, 0x50, 0xc8, 0xef, 0x5c, 0x1c, 0x2e, 0xe1, 0x72} +11:58:42.254:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 01. p2: 00, constdata: +11:58:42.741:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 01020a000000000000000a000000000000000200 +11:58:42.813:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 0000000001 +11:58:42.855:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 003056372503a85b00000000e435533201 +11:58:42.891:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 03. p2: 00, constdata: 06416374696f6e084d6170206e667473 +11:58:43.267:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 07. p2: 01, constdata: +11:58:43.308:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000001200 +11:58:43.360:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000000200 +11:58:43.401:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 05. p2: 00, constdata: 17030000000000000000ffffffff00000000 +11:58:43.452:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a46494f2048616e646c65 +11:58:43.914:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 02 +11:58:43.950:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 03. p2: 00, constdata: 094d617070696e67203100 +11:58:44.330:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040202000000000000000b00000000000000050a436861696e20636f6465 +11:58:44.726:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0402020000000000000082000000000000000510436f6e74726163742061646472657373 +11:58:45.097:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040201000000000000008200000000000000050c4e465420546f6b656e204944 +11:58:45.497:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0402010000000000000082000000000000000200 +11:58:45.551:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0402010000000000000041000000000000000200 +11:58:45.605:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0402010000000000000082000000000000000200 +11:58:45.646:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 03. p2: 00, constdata: 094d617070696e67203200 +11:58:46.069:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040202000000000000000b00000000000000050a436861696e20636f6465 +11:58:46.534:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0402020000000000000082000000000000000510436f6e74726163742061646472657373 +11:58:46.933:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040201000000000000008200000000000000050c4e465420546f6b656e204944 +11:58:47.318:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0402010000000000000082000000000000000200 +11:58:47.379:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0402010000000000000041000000000000000200 +11:58:47.448:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0402010000000000000082000000000000000200 +11:58:47.518:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 10030000000000000000ffffffffffffff7f05074d617820666565 +11:58:47.991:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000001200 +11:58:48.059:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0402010000000000000004000000010000000200 +11:58:48.128:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 06. p2: 00, constdata: +11:58:48.171:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 000000000000000000000000000000000000000000000000000000000000000000 +11:58:48.213:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 10. p2: 00, constdata: +11:58:48.562:seproxyhal: printf: Integrity check for: {0x39, 0x31, 0xa7, 0x1c, 0x07, 0x8e, 0x5e, 0x28, 0x20, 0x90, 0x3e, 0x25, 0xe1, 0x81, 0x8f, 0xea, 0x46, 0xda, 0x16, 0xd9, 0xd2, 0x56, 0xf3, 0x91, 0x7e, 0x5a, 0xe4, 0x5b, 0x94, 0x73, 0x45, 0xdf} +11:58:49.912:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 01. p2: 00, constdata: +11:58:50.380:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 01020a000000000000000a000000000000000200 +11:58:50.433:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 0000000001 +11:58:50.472:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 003056372503a85b00000000e435533201 +11:58:50.519:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 03. p2: 00, constdata: 06416374696f6e084d6170206e667473 +11:58:50.867:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 07. p2: 01, constdata: +11:58:50.905:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000001200 +11:58:50.965:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000000200 +11:58:51.011:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 05. p2: 00, constdata: 17030000000000000000ffffffff00000000 +11:58:51.068:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a46494f2048616e646c65 +11:58:51.565:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 03 +11:58:51.600:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 03. p2: 00, constdata: 094d617070696e67203100 +11:58:51.964:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040202000000000000000b00000000000000050a436861696e20636f6465 +11:58:52.360:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0402020000000000000082000000000000000510436f6e74726163742061646472657373 +11:58:52.727:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040201000000000000008200000000000000050c4e465420546f6b656e204944 +11:58:53.174:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0402010000000000000082000000000000000200 +11:58:53.220:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0402010000000000000041000000000000000200 +11:58:53.273:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0402010000000000000082000000000000000200 +11:58:53.327:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 03. p2: 00, constdata: 094d617070696e67203200 +11:58:53.683:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040202000000000000000b00000000000000050a436861696e20636f6465 +11:58:54.060:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0402020000000000000082000000000000000510436f6e74726163742061646472657373 +11:58:54.477:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040201000000000000008200000000000000050c4e465420546f6b656e204944 +11:58:54.838:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0402010000000000000082000000000000000200 +11:58:54.889:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0402010000000000000041000000000000000200 +11:58:54.942:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0402010000000000000082000000000000000200 +11:58:55.005:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 03. p2: 00, constdata: 094d617070696e67203300 +11:58:55.377:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040202000000000000000b00000000000000050a436861696e20636f6465 +11:58:55.744:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0402020000000000000082000000000000000510436f6e74726163742061646472657373 +11:58:56.125:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040201000000000000008200000000000000050c4e465420546f6b656e204944 +11:58:56.522:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0402010000000000000082000000000000000200 +11:58:56.589:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0402010000000000000041000000000000000200 +11:58:56.645:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0402010000000000000082000000000000000200 +11:58:56.710:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 10030000000000000000ffffffffffffff7f05074d617820666565 +11:58:57.069:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000001200 +11:58:57.152:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0402010000000000000004000000010000000200 +11:58:57.228:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 06. p2: 00, constdata: +11:58:57.268:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 000000000000000000000000000000000000000000000000000000000000000000 +11:58:57.307:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 10. p2: 00, constdata: +11:58:57.695:seproxyhal: printf: Integrity check for: {0xea, 0xa0, 0xae, 0x50, 0x58, 0x10, 0x80, 0x4b, 0x52, 0x1e, 0x91, 0x0b, 0xc9, 0x64, 0xad, 0x73, 0x76, 0xd9, 0x37, 0xfa, 0x33, 0xab, 0xcf, 0x1f, 0xf8, 0x71, 0x50, 0xf9, 0xba, 0xea, 0x4b, 0x2d} +11:58:58.904 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ testEnd() // snapshots/signTransactionAddnft +11:59:02.230 vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv testStart() // snapshots/signTransactionRemnft +11:59:02.665:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 01. p2: 00, constdata: +11:59:03.073:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 01020a000000000000000a000000000000000200 +11:59:03.131:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 0000000001 +11:59:03.173:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 003056372503a85b00000000e435a5ba01 +11:59:03.212:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 03. p2: 00, constdata: 06416374696f6e1352656d6f7665206e6674206d617070696e6773 +11:59:03.562:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 07. p2: 01, constdata: +11:59:03.601:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000001200 +11:59:03.668:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000000200 +11:59:03.712:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 05. p2: 00, constdata: 17030000000000000000ffffffff00000000 +11:59:03.750:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a46494f2048616e646c65 +11:59:04.116:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 01 +11:59:04.165:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 03. p2: 00, constdata: 094d617070696e67203100 +11:59:04.530:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040202000000000000000b00000000000000050a436861696e20636f6465 +11:59:04.921:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0402020000000000000082000000000000000510436f6e74726163742061646472657373 +11:59:05.296:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040201000000000000008200000000000000050c4e465420546f6b656e204944 +11:59:05.699:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 10030000000000000000ffffffffffffff7f05074d617820666565 +11:59:06.113:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000001200 +11:59:06.180:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0402010000000000000004000000010000000200 +11:59:06.238:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 06. p2: 00, constdata: +11:59:06.270:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 000000000000000000000000000000000000000000000000000000000000000000 +11:59:06.328:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 10. p2: 00, constdata: +11:59:06.677:seproxyhal: printf: Integrity check for: {0xeb, 0x12, 0x64, 0xc2, 0x90, 0xa6, 0x78, 0x09, 0xe1, 0x56, 0xdf, 0x06, 0x15, 0xd6, 0x64, 0x7e, 0x47, 0xb9, 0x92, 0x95, 0x92, 0x2b, 0x51, 0x40, 0xe8, 0xc9, 0x82, 0x7f, 0x68, 0x4f, 0xe6, 0xfc} +11:59:07.915:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 01. p2: 00, constdata: +11:59:08.373:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 01020a000000000000000a000000000000000200 +11:59:08.420:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 0000000001 +11:59:08.460:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 003056372503a85b00000000e435a5ba01 +11:59:08.499:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 03. p2: 00, constdata: 06416374696f6e1352656d6f7665206e6674206d617070696e6773 +11:59:08.926:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 07. p2: 01, constdata: +11:59:08.970:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000001200 +11:59:09.039:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000000200 +11:59:09.076:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 05. p2: 00, constdata: 17030000000000000000ffffffff00000000 +11:59:09.122:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a46494f2048616e646c65 +11:59:09.650:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 02 +11:59:09.687:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 03. p2: 00, constdata: 094d617070696e67203100 +11:59:10.056:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040202000000000000000b00000000000000050a436861696e20636f6465 +11:59:10.468:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0402020000000000000082000000000000000510436f6e74726163742061646472657373 +11:59:10.948:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040201000000000000008200000000000000050c4e465420546f6b656e204944 +11:59:11.344:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 03. p2: 00, constdata: 094d617070696e67203200 +11:59:11.735:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040202000000000000000b00000000000000050a436861696e20636f6465 +11:59:12.112:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0402020000000000000082000000000000000510436f6e74726163742061646472657373 +11:59:12.574:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040201000000000000008200000000000000050c4e465420546f6b656e204944 +11:59:13.037:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 10030000000000000000ffffffffffffff7f05074d617820666565 +11:59:13.436:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000001200 +11:59:13.490:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0402010000000000000004000000010000000200 +11:59:13.545:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 06. p2: 00, constdata: +11:59:13.578:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 000000000000000000000000000000000000000000000000000000000000000000 +11:59:13.616:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 10. p2: 00, constdata: +11:59:13.989:seproxyhal: printf: Integrity check for: {0x62, 0x62, 0x11, 0x4f, 0xad, 0x75, 0x96, 0x76, 0x7f, 0x65, 0x43, 0xd0, 0x61, 0x91, 0x35, 0x1d, 0x6e, 0xbf, 0x64, 0xd6, 0x94, 0x1c, 0x25, 0xbb, 0x59, 0xc1, 0x26, 0xe5, 0x94, 0xce, 0x89, 0xcf} +11:59:15.299:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 01. p2: 00, constdata: +11:59:15.768:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 01020a000000000000000a000000000000000200 +11:59:15.839:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 0000000001 +11:59:15.879:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 003056372503a85b00000000e435a5ba01 +11:59:15.919:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 03. p2: 00, constdata: 06416374696f6e1352656d6f7665206e6674206d617070696e6773 +11:59:16.261:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 07. p2: 01, constdata: +11:59:16.300:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000001200 +11:59:16.356:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000000200 +11:59:16.416:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 05. p2: 00, constdata: 17030000000000000000ffffffff00000000 +11:59:16.485:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a46494f2048616e646c65 +11:59:16.943:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 03 +11:59:16.979:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 03. p2: 00, constdata: 094d617070696e67203100 +11:59:17.327:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040202000000000000000b00000000000000050a436861696e20636f6465 +11:59:17.793:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0402020000000000000082000000000000000510436f6e74726163742061646472657373 +11:59:18.196:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040201000000000000008200000000000000050c4e465420546f6b656e204944 +11:59:18.578:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 03. p2: 00, constdata: 094d617070696e67203200 +11:59:18.963:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040202000000000000000b00000000000000050a436861696e20636f6465 +11:59:19.368:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0402020000000000000082000000000000000510436f6e74726163742061646472657373 +11:59:19.717:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040201000000000000008200000000000000050c4e465420546f6b656e204944 +11:59:20.192:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 03. p2: 00, constdata: 094d617070696e67203300 +11:59:20.581:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040202000000000000000b00000000000000050a436861696e20636f6465 +11:59:21.014:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0402020000000000000082000000000000000510436f6e74726163742061646472657373 +11:59:21.392:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040201000000000000008200000000000000050c4e465420546f6b656e204944 +11:59:21.757:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 10030000000000000000ffffffffffffff7f05074d617820666565 +11:59:22.166:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000001200 +11:59:22.224:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0402010000000000000004000000010000000200 +11:59:22.276:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 06. p2: 00, constdata: +11:59:22.318:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 000000000000000000000000000000000000000000000000000000000000000000 +11:59:22.365:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 10. p2: 00, constdata: +11:59:22.693:seproxyhal: printf: Integrity check for: {0x68, 0x4d, 0x19, 0x1b, 0xec, 0x18, 0x69, 0x3a, 0xc2, 0x2a, 0x79, 0xe3, 0xbc, 0xe5, 0xa4, 0xc6, 0xe1, 0xa5, 0xb3, 0xfd, 0x6e, 0x04, 0xb0, 0x33, 0xd4, 0x2f, 0xe6, 0x1b, 0x5d, 0x51, 0x7b, 0x80} +11:59:23.671 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ testEnd() // snapshots/signTransactionRemnft +11:59:26.982 vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv testStart() // snapshots/signTransactionOtherFioAddress +11:59:27.475:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 01. p2: 00, constdata: +11:59:27.907:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 01020a000000000000000a000000000000000200 +11:59:27.983:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 0000000001 +11:59:28.022:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 003056372503a85b00c04dc9c468a4ba01 +11:59:28.077:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 03. p2: 00, constdata: 06416374696f6e2252656d6f766520616c6c207075626c69632061646472657373206d617070696e6773 +11:59:28.568:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 07. p2: 01, constdata: +11:59:28.611:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000001200 +11:59:28.669:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000000200 +11:59:28.707:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 05. p2: 00, constdata: 17030000000000000000ffffffff00000000 +11:59:28.746:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a46494f2048616e646c65 +11:59:29.118:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 10030000000000000000ffffffffffffff7f05074d617820666565 +11:59:29.579:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000001200 +11:59:29.624:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0402010000000000000004000000010000000200 +11:59:29.684:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 06. p2: 00, constdata: +11:59:29.733:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 000000000000000000000000000000000000000000000000000000000000000000 +11:59:29.792:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 10. p2: 00, constdata: +11:59:30.112:seproxyhal: printf: Integrity check for: {0xf7, 0xf1, 0xe3, 0xcc, 0xda, 0xbc, 0x21, 0x9c, 0xb7, 0xef, 0xbe, 0x45, 0x6c, 0x87, 0xf3, 0x59, 0x76, 0xc9, 0x9c, 0x0d, 0xe9, 0xac, 0x10, 0x93, 0x46, 0xda, 0x1f, 0x91, 0xd3, 0x78, 0x1b, 0x53} +11:59:31.406:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 01. p2: 00, constdata: +11:59:31.903:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 01020a000000000000000a000000000000000200 +11:59:31.944:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 0000000001 +11:59:31.991:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 003056372503a85b000056314d7d523201 +11:59:32.052:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 03. p2: 00, constdata: 06416374696f6e0b4164642042756e646c6573 +11:59:32.497:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 07. p2: 01, constdata: +11:59:32.550:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000001200 +11:59:32.603:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000000200 +11:59:32.645:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 05. p2: 00, constdata: 17030000000000000000ffffffff00000000 +11:59:32.682:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a46494f2048616e646c65 +11:59:33.208:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 14030000000000000000ffffffffffffff7f050b42756e646c652073657473 +11:59:33.602:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 10030000000000000000ffffffffffffff7f05074d617820666565 +11:59:33.981:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0402010000000000000004000000010000000200 +11:59:34.075:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000001200 +11:59:34.110:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 06. p2: 00, constdata: +11:59:34.145:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 000000000000000000000000000000000000000000000000000000000000000000 +11:59:34.219:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 10. p2: 00, constdata: +11:59:34.518:seproxyhal: printf: Integrity check for: {0x04, 0x7d, 0x85, 0x04, 0xb6, 0xb9, 0x21, 0x51, 0x19, 0x7d, 0x20, 0xc9, 0xe7, 0x9f, 0xc1, 0x81, 0x3e, 0xe4, 0xa0, 0xd5, 0xa2, 0x1d, 0x3c, 0x36, 0x66, 0x89, 0x01, 0x1a, 0x71, 0xe9, 0x2a, 0x8a} +11:59:35.909:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 01. p2: 00, constdata: +11:59:36.396:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 01020a000000000000000a000000000000000200 +11:59:36.438:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 0000000001 +11:59:36.482:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 003056372503a85b0000c6eaa66498ba01 +11:59:36.527:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 03. p2: 00, constdata: 06416374696f6e1a52656769737465722046494f2043727970746f2048616e646c65 +11:59:36.961:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 07. p2: 01, constdata: +11:59:37.003:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000001200 +11:59:37.051:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000000200 +11:59:37.106:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 05. p2: 00, constdata: 17030000000000000000ffffffff00000000 +11:59:37.143:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a46494f2048616e646c65 +11:59:37.698:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040201000000000000000400000001000000050c4f776e6572205075626b6579 +11:59:38.097:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 10030000000000000000ffffffffffffff7f05074d617820666565 +11:59:38.466:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000001200 +11:59:38.511:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0402010000000000000004000000010000000200 +11:59:38.579:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 06. p2: 00, constdata: +11:59:38.617:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 000000000000000000000000000000000000000000000000000000000000000000 +11:59:38.665:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 10. p2: 00, constdata: +11:59:39.041:seproxyhal: printf: Integrity check for: {0x47, 0x75, 0xd1, 0x26, 0xa4, 0x4b, 0x48, 0x95, 0x2d, 0x84, 0x5e, 0x43, 0x06, 0x7e, 0x6b, 0x13, 0x42, 0x6f, 0xdd, 0x77, 0x55, 0x25, 0x9d, 0x6a, 0xfc, 0x7f, 0x83, 0xc0, 0x82, 0xc2, 0xeb, 0x4c} +11:59:40.557:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 01. p2: 00, constdata: +11:59:41.028:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 01020a000000000000000a000000000000000200 +11:59:41.071:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 0000000001 +11:59:41.115:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 003056372503a85b003056372573d5ea01 +11:59:41.156:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 03. p2: 00, constdata: 06416374696f6e1a5472616e736665722046494f2043727970746f2048616e646c65 +11:59:41.555:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 07. p2: 01, constdata: +11:59:41.614:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000001200 +11:59:41.683:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000000200 +11:59:41.718:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 05. p2: 00, constdata: 17030000000000000000ffffffff00000000 +11:59:41.762:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a46494f2048616e646c65 +11:59:42.216:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040201000000000000000400000001000000050c4f776e6572205075626b6579 +11:59:42.610:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 10030000000000000000ffffffffffffff7f05074d617820666565 +11:59:43.017:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000001200 +11:59:43.095:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0402010000000000000004000000010000000200 +11:59:43.159:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 06. p2: 00, constdata: +11:59:43.210:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 000000000000000000000000000000000000000000000000000000000000000000 +11:59:43.253:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 10. p2: 00, constdata: +11:59:43.577:seproxyhal: printf: Integrity check for: {0x52, 0x44, 0x21, 0x4f, 0x79, 0xf9, 0xba, 0x27, 0x9e, 0x34, 0xd4, 0xfb, 0x35, 0x13, 0x7f, 0xc4, 0x06, 0xe6, 0xc7, 0x7d, 0x99, 0x51, 0x7e, 0xd4, 0xd2, 0x7d, 0x8e, 0x97, 0xf8, 0x1c, 0x34, 0x54} +11:59:44.750:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 01. p2: 00, constdata: +11:59:45.247:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 01020a000000000000000a000000000000000200 +11:59:45.290:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 0000000001 +11:59:45.335:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 003056372503a85b000098ce489a98ba01 +11:59:45.371:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 03. p2: 00, constdata: 06416374696f6e1352656769737465722046494f20446f6d61696e +11:59:45.780:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 07. p2: 01, constdata: +11:59:45.827:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000001200 +11:59:45.891:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000000200 +11:59:45.929:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 05. p2: 00, constdata: 17030000000000000000ffffffff00000000 +11:59:45.976:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040202000000000000003f00000000000000050a46494f20446f6d61696e +11:59:46.466:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040201000000000000000400000001000000050c4f776e6572205075626b6579 +11:59:46.879:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 10030000000000000000ffffffffffffff7f05074d617820666565 +11:59:47.239:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000001200 +11:59:47.297:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0402010000000000000004000000010000000200 +11:59:47.363:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 06. p2: 00, constdata: +11:59:47.391:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 000000000000000000000000000000000000000000000000000000000000000000 +11:59:47.433:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 10. p2: 00, constdata: +11:59:47.821:seproxyhal: printf: Integrity check for: {0xf8, 0x73, 0x29, 0xbd, 0xc7, 0x2d, 0xaf, 0x8d, 0xdb, 0xac, 0xac, 0x28, 0xea, 0x24, 0x7a, 0xe1, 0x1a, 0x82, 0x97, 0x47, 0x4f, 0x9b, 0x59, 0x86, 0xcb, 0x27, 0xe5, 0xf9, 0x99, 0x1d, 0xf1, 0x43} +11:59:49.228:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 01. p2: 00, constdata: +11:59:49.697:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 01020a000000000000000a000000000000000200 +11:59:49.755:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 0000000001 +11:59:49.801:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 003056372503a85b00a6339226aea6ba01 +11:59:49.840:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 03. p2: 00, constdata: 06416374696f6e1052656e65772046494f20646f6d61696e +11:59:50.229:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 07. p2: 01, constdata: +11:59:50.265:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000001200 +11:59:50.329:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000000200 +11:59:50.382:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 05. p2: 00, constdata: 17030000000000000000ffffffff00000000 +11:59:50.431:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040202000000000000003f00000000000000050a46494f20446f6d61696e +11:59:50.770:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 10030000000000000000ffffffffffffff7f05074d617820666565 +11:59:51.184:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0402010000000000000004000000010000000200 +11:59:51.243:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000001200 +11:59:51.290:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 06. p2: 00, constdata: +11:59:51.337:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 000000000000000000000000000000000000000000000000000000000000000000 +11:59:51.389:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 10. p2: 00, constdata: +11:59:51.763:seproxyhal: printf: Integrity check for: {0x2d, 0x26, 0x7c, 0x41, 0xf6, 0x32, 0x27, 0x91, 0x10, 0x76, 0x96, 0x39, 0x57, 0x0f, 0xe3, 0xf5, 0x56, 0x9b, 0x81, 0xa3, 0x02, 0xc9, 0x1d, 0x46, 0x95, 0x19, 0x0b, 0x26, 0x3b, 0x60, 0xf0, 0xe4} +11:59:53.169:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 01. p2: 00, constdata: +11:59:53.666:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 01020a000000000000000a000000000000000200 +11:59:53.716:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 0000000001 +11:59:53.761:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 003056372503a85b70749dce489ab2c201 +11:59:53.820:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 03. p2: 00, constdata: 06416374696f6e265365742046494f20446f6d61696e20726567697374726174696f6e207065726d697373696f6e +11:59:54.186:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 07. p2: 01, constdata: +11:59:54.238:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000001200 +11:59:54.297:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000000200 +11:59:54.345:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 05. p2: 00, constdata: 17030000000000000000ffffffff00000000 +11:59:54.419:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040202000000000000003f00000000000000050a46494f20446f6d61696e +11:59:54.810:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 01 +11:59:54.863:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 03. p2: 00, constdata: 044d616b65065075626c6963 +11:59:55.394:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 10030000000000000000ffffffffffffff7f05074d617820666565 +11:59:55.795:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000001200 +11:59:55.843:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0402010000000000000004000000010000000200 +11:59:55.894:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 06. p2: 00, constdata: +11:59:55.927:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 000000000000000000000000000000000000000000000000000000000000000000 +11:59:55.974:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 10. p2: 00, constdata: +11:59:56.395:seproxyhal: printf: Integrity check for: {0x2f, 0x1e, 0x4e, 0xa2, 0x81, 0x48, 0x5e, 0x01, 0x55, 0x1b, 0x4f, 0x20, 0x56, 0x7b, 0x97, 0x27, 0xba, 0xae, 0xad, 0x60, 0x5f, 0xb6, 0x83, 0xd7, 0x37, 0x4a, 0x0d, 0x06, 0xeb, 0xa0, 0xf8, 0xbb} +11:59:57.753:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 01. p2: 00, constdata: +11:59:58.236:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 01020a000000000000000a000000000000000200 +11:59:58.287:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 0000000001 +11:59:58.332:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 003056372503a85b70749dce489ab2c201 +11:59:58.388:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 03. p2: 00, constdata: 06416374696f6e265365742046494f20446f6d61696e20726567697374726174696f6e207065726d697373696f6e +11:59:58.715:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 07. p2: 01, constdata: +11:59:58.754:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000001200 +11:59:58.826:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000000200 +11:59:58.877:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 05. p2: 00, constdata: 17030000000000000000ffffffff00000000 +11:59:58.923:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040202000000000000003f00000000000000050a46494f20446f6d61696e +11:59:59.423:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 00 +11:59:59.465:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 03. p2: 00, constdata: 044d616b650750726976617465 +11:59:59.797:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 10030000000000000000ffffffffffffff7f05074d617820666565 +12:00:00.301:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000001200 +12:00:00.367:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0402010000000000000004000000010000000200 +12:00:00.414:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 06. p2: 00, constdata: +12:00:00.447:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 000000000000000000000000000000000000000000000000000000000000000000 +12:00:00.492:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 10. p2: 00, constdata: +12:00:00.836:seproxyhal: printf: Integrity check for: {0xe4, 0x85, 0x22, 0x61, 0x22, 0x3b, 0xa3, 0x05, 0x42, 0xa0, 0xb6, 0x0d, 0x73, 0xbf, 0xf9, 0xcd, 0x82, 0x6a, 0x9c, 0x9b, 0x74, 0x70, 0x47, 0x5c, 0x61, 0x80, 0x31, 0x25, 0x46, 0xa9, 0x4f, 0x21} +12:00:02.201:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 01. p2: 00, constdata: +12:00:02.720:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 01020a000000000000000a000000000000000200 +12:00:02.769:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 0000000001 +12:00:02.819:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 003056372503a85b00c07446d274d5ea01 +12:00:02.856:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 03. p2: 00, constdata: 06416374696f6e135472616e736665722046494f20446f6d61696e +12:00:03.221:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 07. p2: 01, constdata: +12:00:03.261:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000001200 +12:00:03.309:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000000200 +12:00:03.348:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 05. p2: 00, constdata: 17030000000000000000ffffffff00000000 +12:00:03.388:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040202000000000000003f00000000000000050a46494f20446f6d61696e +12:00:03.757:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 04020100000000000000040000000100000005104e6577206f776e6572205075626b6579 +12:00:04.136:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 10030000000000000000ffffffffffffff7f05074d617820666565 +12:00:04.596:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000001200 +12:00:04.653:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0402010000000000000004000000010000000200 +12:00:04.703:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 06. p2: 00, constdata: +12:00:04.736:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 000000000000000000000000000000000000000000000000000000000000000000 +12:00:04.805:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 10. p2: 00, constdata: +12:00:05.130:seproxyhal: printf: Integrity check for: {0xf2, 0xef, 0xc6, 0x69, 0x8f, 0x05, 0x36, 0x14, 0x8b, 0x56, 0x1d, 0x43, 0xb2, 0x22, 0xfb, 0x42, 0xb9, 0x1f, 0x8d, 0xd8, 0x83, 0x07, 0xb7, 0xff, 0x87, 0x09, 0x47, 0xf1, 0xb8, 0x61, 0x52, 0xbb} +12:00:06.562:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 01. p2: 00, constdata: +12:00:07.039:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 01020a000000000000000a000000000000000200 +12:00:07.081:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 0000000001 +12:00:07.118:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 003056372503a85b0000ce6bc668a4ba01 +12:00:07.169:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 03. p2: 00, constdata: 06416374696f6e1752656d6f766520616c6c206e6674206d617070696e6773 +12:00:07.578:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 07. p2: 01, constdata: +12:00:07.620:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000001200 +12:00:07.676:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000000200 +12:00:07.715:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 05. p2: 00, constdata: 17030000000000000000ffffffff00000000 +12:00:07.753:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a46494f2048616e646c65 +12:00:08.267:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 10030000000000000000ffffffffffffff7f05074d617820666565 +12:00:08.634:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000001200 +12:00:08.719:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0402010000000000000004000000010000000200 +12:00:08.770:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 06. p2: 00, constdata: +12:00:08.828:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 000000000000000000000000000000000000000000000000000000000000000000 +12:00:08.872:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 10. p2: 00, constdata: +12:00:09.237:seproxyhal: printf: Integrity check for: {0x21, 0xfb, 0x21, 0x50, 0xd1, 0x7b, 0xa2, 0x06, 0x4b, 0xe7, 0x52, 0xa8, 0x1f, 0xca, 0x68, 0xdf, 0x60, 0x62, 0x43, 0xeb, 0x75, 0x3c, 0x56, 0x9d, 0x97, 0x10, 0xc4, 0x24, 0x20, 0xba, 0xf4, 0x4d} +12:00:10.239 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ testEnd() // snapshots/signTransactionOtherFioAddress +12:00:13.651 vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv testStart() // snapshots/signTransactionOtherFioReqobt +12:00:14.160:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 01. p2: 00, constdata: +12:00:14.614:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 01020a000000000000000a000000000000000200 +12:00:14.678:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 0000000001 +12:00:14.726:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 00403ed4aa0ba85b60d54d734585a64101 +12:00:14.767:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 03. p2: 00, constdata: 06416374696f6e1443616e63656c2066756e64732072657175657374 +12:00:15.131:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 07. p2: 01, constdata: +12:00:15.169:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000001200 +12:00:15.215:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000000200 +12:00:15.253:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 05. p2: 00, constdata: 17030000000000000000ffffffff00000000 +12:00:15.292:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040201000000000000000400000001000000050a52657175657374204944 +12:00:15.665:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 10030000000000000000ffffffffffffff7f05074d617820666565 +12:00:16.022:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 05. p2: 00, constdata: 17030000000000000000ffffffff00000000 +12:00:16.087:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 020200000000000000000e000000000000004200 +12:00:16.159:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 06. p2: 00, constdata: +12:00:16.200:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0402010000000000000004000000010000000200 +12:00:16.246:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 06. p2: 00, constdata: +12:00:16.278:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 000000000000000000000000000000000000000000000000000000000000000000 +12:00:16.334:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 10. p2: 00, constdata: +12:00:16.712:seproxyhal: printf: Integrity check for: {0x10, 0x21, 0x24, 0x06, 0xf8, 0xec, 0xc1, 0x2b, 0x09, 0x46, 0x00, 0x4c, 0x6c, 0x81, 0x01, 0x82, 0x67, 0xc8, 0x81, 0x68, 0x5a, 0x8a, 0x57, 0x6a, 0x7e, 0xb1, 0xb1, 0xf7, 0x6a, 0x7b, 0x4b, 0xae} +12:00:17.942:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 01. p2: 00, constdata: +12:00:18.443:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 01020a000000000000000a000000000000000200 +12:00:18.509:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 0000000001 +12:00:18.559:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 00403ed4aa0ba85b60d54d7365a49eba01 +12:00:18.598:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 03. p2: 00, constdata: 06416374696f6e1452656a6563742066756e64732072657175657374 +12:00:18.938:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 07. p2: 01, constdata: +12:00:18.976:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000001200 +12:00:19.030:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000000200 +12:00:19.086:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 05. p2: 00, constdata: 17030000000000000000ffffffff00000000 +12:00:19.133:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040201000000000000000400000001000000050a52657175657374204944 +12:00:19.625:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 10030000000000000000ffffffffffffff7f05074d617820666565 +12:00:20.021:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 05. p2: 00, constdata: 17030000000000000000ffffffff00000000 +12:00:20.096:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 020200000000000000000e000000000000004200 +12:00:20.144:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 06. p2: 00, constdata: +12:00:20.181:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0402010000000000000004000000010000000200 +12:00:20.233:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 06. p2: 00, constdata: +12:00:20.283:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 000000000000000000000000000000000000000000000000000000000000000000 +12:00:20.335:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 10. p2: 00, constdata: +12:00:20.648:seproxyhal: printf: Integrity check for: {0xb8, 0x19, 0x6b, 0x10, 0x79, 0x4b, 0x3f, 0xe1, 0x50, 0xb3, 0xa1, 0xdb, 0x0f, 0x74, 0xd3, 0x82, 0xa1, 0x6c, 0xad, 0xdb, 0xb1, 0x0d, 0xd0, 0x20, 0xc2, 0xad, 0x8e, 0x74, 0xbe, 0xb1, 0x9f, 0xb4} +12:00:21.604 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ testEnd() // snapshots/signTransactionOtherFioReqobt +12:00:24.984 vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv testStart() // snapshots/signTransactionOtherFioStaking +12:00:25.518:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 01. p2: 00, constdata: +12:00:25.990:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 01020a000000000000000a000000000000000200 +12:00:26.051:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 0000000001 +12:00:26.099:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 00d874d0640ca85b000000d42d054dc601 +12:00:26.133:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 03. p2: 00, constdata: 06416374696f6e105374616b652046494f20546f6b656e73 +12:00:26.575:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 07. p2: 01, constdata: +12:00:26.618:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000001200 +12:00:26.670:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000000200 +12:00:26.712:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 05. p2: 00, constdata: 17030000000000000000ffffffff00000000 +12:00:26.751:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a46494f2048616e646c65 +12:00:27.127:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 10030000000000000000ffffffffffffff7f0506416d6f756e74 +12:00:27.513:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 10030000000000000000ffffffffffffff7f05074d617820666565 +12:00:27.943:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0402010000000000000004000000010000000200 +12:00:28.009:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000001200 +12:00:28.058:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 06. p2: 00, constdata: +12:00:28.094:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 000000000000000000000000000000000000000000000000000000000000000000 +12:00:28.133:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 10. p2: 00, constdata: +12:00:28.466:seproxyhal: printf: Integrity check for: {0xa8, 0x1e, 0x4e, 0xc5, 0xa9, 0x1e, 0x6b, 0x4d, 0xe2, 0x33, 0x46, 0x1f, 0xfd, 0xbf, 0x3c, 0x84, 0x77, 0x55, 0xcb, 0x1f, 0x64, 0xdd, 0x17, 0xdc, 0xe6, 0x35, 0xb4, 0xb9, 0xe7, 0x7d, 0x27, 0xdc} +12:00:29.777:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 01. p2: 00, constdata: +12:00:30.265:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 01020a000000000000000a000000000000000200 +12:00:30.306:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 0000000001 +12:00:30.350:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 00d874d0640ca85b0000754b4193f1d401 +12:00:30.392:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 03. p2: 00, constdata: 06416374696f6e12556e7374616b652046494f20546f6b656e73 +12:00:30.750:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 07. p2: 01, constdata: +12:00:30.794:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000001200 +12:00:30.853:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000000200 +12:00:30.889:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 05. p2: 00, constdata: 17030000000000000000ffffffff00000000 +12:00:30.957:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a46494f2048616e646c65 +12:00:31.420:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 10030000000000000000ffffffffffffff7f0506416d6f756e74 +12:00:31.836:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 10030000000000000000ffffffffffffff7f05074d617820666565 +12:00:32.246:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0402010000000000000004000000010000000200 +12:00:32.297:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000001200 +12:00:32.351:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 06. p2: 00, constdata: +12:00:32.395:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 000000000000000000000000000000000000000000000000000000000000000000 +12:00:32.479:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 10. p2: 00, constdata: +12:00:32.789:seproxyhal: printf: Integrity check for: {0x84, 0x95, 0x42, 0x84, 0x3c, 0x8b, 0x00, 0xd8, 0x9c, 0x2c, 0x17, 0xa0, 0x72, 0x66, 0xf9, 0x15, 0x08, 0x0b, 0xc9, 0xf0, 0x48, 0x7c, 0x01, 0x09, 0x15, 0x2e, 0x42, 0x7b, 0x70, 0x82, 0x0d, 0x7a} +12:00:33.961 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ testEnd() // snapshots/signTransactionOtherFioStaking +12:00:37.190 vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv testStart() // snapshots/signTransactionOtherEosio +12:00:37.578:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 01. p2: 00, constdata: +12:00:38.084:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 01020a000000000000000a000000000000000200 +12:00:38.161:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 0000000001 +12:00:38.191:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 0000000000ea30557015d289deaa32dd01 +12:00:38.232:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 03. p2: 00, constdata: 06416374696f6e1c566f746520666f722046494f20426c6f636b2070726f647563657273 +12:00:38.764:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 07. p2: 01, constdata: +12:00:38.805:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000001200 +12:00:38.877:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000000200 +12:00:38.922:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 05. p2: 00, constdata: 17030000000000000000ffffffff00000000 +12:00:38.963:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 01 +12:00:38.996:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722031 +12:00:39.417:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a46494f2048616e646c65 +12:00:39.792:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000001200 +12:00:39.850:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 10030000000000000000ffffffffffffff7f05074d617820666565 +12:00:40.398:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 06. p2: 00, constdata: +12:00:40.454:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 000000000000000000000000000000000000000000000000000000000000000000 +12:00:40.498:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 10. p2: 00, constdata: +12:00:40.843:seproxyhal: printf: Integrity check for: {0x72, 0x12, 0x3c, 0xb5, 0x28, 0xc5, 0x67, 0xc4, 0xe3, 0x45, 0x56, 0x1f, 0xa9, 0x74, 0xe3, 0xcc, 0x87, 0x33, 0xbf, 0x9e, 0xe4, 0xc6, 0x37, 0x0b, 0x8f, 0x77, 0x7c, 0xe3, 0xa3, 0xa1, 0x02, 0xa3} +12:00:42.012:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 01. p2: 00, constdata: +12:00:42.447:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 01020a000000000000000a000000000000000200 +12:00:42.490:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 0000000001 +12:00:42.547:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 0000000000ea30557015d289deaa32dd01 +12:00:42.589:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 03. p2: 00, constdata: 06416374696f6e1c566f746520666f722046494f20426c6f636b2070726f647563657273 +12:00:42.960:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 07. p2: 01, constdata: +12:00:43.000:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000001200 +12:00:43.059:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000000200 +12:00:43.107:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 05. p2: 00, constdata: 17030000000000000000ffffffff00000000 +12:00:43.158:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 02 +12:00:43.194:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722031 +12:00:43.610:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722032 +12:00:44.002:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a46494f2048616e646c65 +12:00:44.401:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000001200 +12:00:44.477:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 10030000000000000000ffffffffffffff7f05074d617820666565 +12:00:44.977:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 06. p2: 00, constdata: +12:00:45.023:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 000000000000000000000000000000000000000000000000000000000000000000 +12:00:45.073:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 10. p2: 00, constdata: +12:00:45.415:seproxyhal: printf: Integrity check for: {0xbd, 0x92, 0x94, 0x84, 0x09, 0xaa, 0x7b, 0x8e, 0xc0, 0xed, 0x3a, 0x07, 0x81, 0xa3, 0x71, 0x32, 0xec, 0x5d, 0xda, 0x02, 0x54, 0x3f, 0xe7, 0x2c, 0xed, 0xb5, 0xe8, 0xc0, 0xb9, 0x5a, 0xdd, 0x38} +12:00:46.845:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 01. p2: 00, constdata: +12:00:47.294:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 01020a000000000000000a000000000000000200 +12:00:47.338:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 0000000001 +12:00:47.382:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 0000000000ea30557015d289deaa32dd01 +12:00:47.424:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 03. p2: 00, constdata: 06416374696f6e1c566f746520666f722046494f20426c6f636b2070726f647563657273 +12:00:47.870:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 07. p2: 01, constdata: +12:00:47.906:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000001200 +12:00:47.955:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000000200 +12:00:47.993:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 05. p2: 00, constdata: 17030000000000000000ffffffff00000000 +12:00:48.032:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 03 +12:00:48.066:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722031 +12:00:48.610:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722032 +12:00:49.000:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722033 +12:00:49.391:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a46494f2048616e646c65 +12:00:49.786:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000001200 +12:00:49.851:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 10030000000000000000ffffffffffffff7f05074d617820666565 +12:00:50.398:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 06. p2: 00, constdata: +12:00:50.449:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 000000000000000000000000000000000000000000000000000000000000000000 +12:00:50.505:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 10. p2: 00, constdata: +12:00:50.858:seproxyhal: printf: Integrity check for: {0xfd, 0x00, 0x10, 0x47, 0x1a, 0x47, 0xad, 0xd1, 0x5b, 0x01, 0x5d, 0xcf, 0x12, 0xd4, 0xba, 0x20, 0x12, 0x7d, 0xd6, 0x6a, 0x99, 0x37, 0xde, 0x57, 0x79, 0x6a, 0x30, 0x3f, 0xc3, 0x92, 0x45, 0x86} +12:00:53.156:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 01. p2: 00, constdata: +12:00:53.651:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 01020a000000000000000a000000000000000200 +12:00:53.721:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 0000000001 +12:00:53.771:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 0000000000ea30557015d289deaa32dd01 +12:00:53.809:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 03. p2: 00, constdata: 06416374696f6e1c566f746520666f722046494f20426c6f636b2070726f647563657273 +12:00:54.170:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 07. p2: 01, constdata: +12:00:54.217:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000001200 +12:00:54.277:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000000200 +12:00:54.324:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 05. p2: 00, constdata: 17030000000000000000ffffffff00000000 +12:00:54.356:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 04 +12:00:54.415:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722031 +12:00:54.886:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722032 +12:00:55.260:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722033 +12:00:55.720:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722034 +12:00:56.102:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a46494f2048616e646c65 +12:00:56.501:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000001200 +12:00:56.561:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 10030000000000000000ffffffffffffff7f05074d617820666565 +12:00:57.059:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 06. p2: 00, constdata: +12:00:57.114:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 000000000000000000000000000000000000000000000000000000000000000000 +12:00:57.173:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 10. p2: 00, constdata: +12:00:57.587:seproxyhal: printf: Integrity check for: {0x4c, 0x3b, 0x0f, 0xe9, 0x89, 0x90, 0xd3, 0x01, 0xac, 0x21, 0x87, 0x6f, 0x36, 0xf1, 0x3c, 0x74, 0xe0, 0xad, 0x9d, 0x6e, 0x2b, 0xb6, 0x5a, 0x22, 0x64, 0x78, 0x04, 0xca, 0x15, 0xa1, 0x8c, 0xfc} +12:00:58.796:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 01. p2: 00, constdata: +12:00:59.298:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 01020a000000000000000a000000000000000200 +12:00:59.372:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 0000000001 +12:00:59.418:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 0000000000ea30557015d289deaa32dd01 +12:00:59.465:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 03. p2: 00, constdata: 06416374696f6e1c566f746520666f722046494f20426c6f636b2070726f647563657273 +12:00:59.948:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 07. p2: 01, constdata: +12:01:00.002:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000001200 +12:01:00.060:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000000200 +12:01:00.103:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 05. p2: 00, constdata: 17030000000000000000ffffffff00000000 +12:01:00.156:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 05 +12:01:00.204:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722031 +12:01:00.582:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722032 +12:01:00.966:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722033 +12:01:01.376:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722034 +12:01:01.728:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722035 +12:01:02.182:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a46494f2048616e646c65 +12:01:02.566:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000001200 +12:01:02.615:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 10030000000000000000ffffffffffffff7f05074d617820666565 +12:01:02.943:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 06. p2: 00, constdata: +12:01:02.982:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 000000000000000000000000000000000000000000000000000000000000000000 +12:01:03.035:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 10. p2: 00, constdata: +12:01:03.390:seproxyhal: printf: Integrity check for: {0xbf, 0xb9, 0x78, 0x51, 0x6e, 0x2d, 0x39, 0x0e, 0x60, 0x99, 0x18, 0x16, 0x7b, 0x35, 0xe3, 0xea, 0xa5, 0x6c, 0x85, 0x10, 0x7a, 0x79, 0x31, 0xe3, 0xc3, 0x72, 0x3d, 0x46, 0x4a, 0xb1, 0x40, 0x6a} +12:01:05.595:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 01. p2: 00, constdata: +12:01:06.082:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 01020a000000000000000a000000000000000200 +12:01:06.141:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 0000000001 +12:01:06.184:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 0000000000ea30557015d289deaa32dd01 +12:01:06.231:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 03. p2: 00, constdata: 06416374696f6e1c566f746520666f722046494f20426c6f636b2070726f647563657273 +12:01:06.558:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 07. p2: 01, constdata: +12:01:06.599:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000001200 +12:01:06.676:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000000200 +12:01:06.717:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 05. p2: 00, constdata: 17030000000000000000ffffffff00000000 +12:01:06.749:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 06 +12:01:06.806:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722031 +12:01:07.257:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722032 +12:01:07.699:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722033 +12:01:08.083:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722034 +12:01:08.537:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722035 +12:01:08.870:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722036 +12:01:09.296:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a46494f2048616e646c65 +12:01:09.686:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000001200 +12:01:09.753:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 10030000000000000000ffffffffffffff7f05074d617820666565 +12:01:10.247:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 06. p2: 00, constdata: +12:01:10.292:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 000000000000000000000000000000000000000000000000000000000000000000 +12:01:10.371:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 10. p2: 00, constdata: +12:01:10.756:seproxyhal: printf: Integrity check for: {0x41, 0x5f, 0x45, 0x83, 0x7a, 0xb3, 0xbf, 0x54, 0x4c, 0x6a, 0xa0, 0x99, 0x48, 0xfb, 0x93, 0x9a, 0xa9, 0x9f, 0x4e, 0x60, 0x61, 0x25, 0xea, 0xa3, 0xe3, 0x3e, 0xca, 0x60, 0xde, 0xa9, 0xce, 0x8e} +12:01:11.975:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 01. p2: 00, constdata: +12:01:12.485:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 01020a000000000000000a000000000000000200 +12:01:12.534:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 0000000001 +12:01:12.580:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 0000000000ea30557015d289deaa32dd01 +12:01:12.621:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 03. p2: 00, constdata: 06416374696f6e1c566f746520666f722046494f20426c6f636b2070726f647563657273 +12:01:13.036:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 07. p2: 01, constdata: +12:01:13.071:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000001200 +12:01:13.116:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000000200 +12:01:13.172:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 05. p2: 00, constdata: 17030000000000000000ffffffff00000000 +12:01:13.206:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 07 +12:01:13.240:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722031 +12:01:13.770:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722032 +12:01:14.270:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722033 +12:01:14.656:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722034 +12:01:15.041:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722035 +12:01:15.475:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722036 +12:01:15.912:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722037 +12:01:16.309:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a46494f2048616e646c65 +12:01:16.699:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000001200 +12:01:16.776:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 10030000000000000000ffffffffffffff7f05074d617820666565 +12:01:17.229:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 06. p2: 00, constdata: +12:01:17.271:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 000000000000000000000000000000000000000000000000000000000000000000 +12:01:17.346:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 10. p2: 00, constdata: +12:01:17.715:seproxyhal: printf: Integrity check for: {0xfd, 0xa3, 0xe5, 0x8e, 0x32, 0x92, 0xb9, 0xa4, 0x6c, 0x17, 0x80, 0x34, 0x87, 0xf8, 0xaf, 0xcd, 0xa8, 0xe5, 0x1e, 0x91, 0xbd, 0x2f, 0x89, 0x8e, 0x1e, 0xe8, 0x30, 0x48, 0xa8, 0x8d, 0xd7, 0xbc} +12:01:19.066:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 01. p2: 00, constdata: +12:01:19.557:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 01020a000000000000000a000000000000000200 +12:01:19.605:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 0000000001 +12:01:19.645:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 0000000000ea30557015d289deaa32dd01 +12:01:19.686:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 03. p2: 00, constdata: 06416374696f6e1c566f746520666f722046494f20426c6f636b2070726f647563657273 +12:01:20.053:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 07. p2: 01, constdata: +12:01:20.090:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000001200 +12:01:20.138:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000000200 +12:01:20.195:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 05. p2: 00, constdata: 17030000000000000000ffffffff00000000 +12:01:20.224:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 08 +12:01:20.261:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722031 +12:01:20.783:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722032 +12:01:21.206:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722033 +12:01:21.652:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722034 +12:01:22.043:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722035 +12:01:22.460:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722036 +12:01:22.845:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722037 +12:01:23.272:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722038 +12:01:23.696:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a46494f2048616e646c65 +12:01:24.124:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000001200 +12:01:24.189:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 10030000000000000000ffffffffffffff7f05074d617820666565 +12:01:24.658:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 06. p2: 00, constdata: +12:01:24.734:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 000000000000000000000000000000000000000000000000000000000000000000 +12:01:24.782:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 10. p2: 00, constdata: +12:01:25.162:seproxyhal: printf: Integrity check for: {0x9c, 0x08, 0x4d, 0x07, 0x8a, 0x16, 0x6f, 0x65, 0xca, 0xd8, 0x80, 0x5a, 0x82, 0x6f, 0xe3, 0x28, 0x18, 0x13, 0x88, 0xee, 0xc4, 0xd7, 0xaf, 0x2f, 0xda, 0x1b, 0xe9, 0xa0, 0xf3, 0x74, 0x01, 0x60} +12:01:26.477:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 01. p2: 00, constdata: +12:01:26.983:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 01020a000000000000000a000000000000000200 +12:01:27.035:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 0000000001 +12:01:27.077:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 0000000000ea30557015d289deaa32dd01 +12:01:27.117:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 03. p2: 00, constdata: 06416374696f6e1c566f746520666f722046494f20426c6f636b2070726f647563657273 +12:01:27.565:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 07. p2: 01, constdata: +12:01:27.608:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000001200 +12:01:27.673:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000000200 +12:01:27.722:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 05. p2: 00, constdata: 17030000000000000000ffffffff00000000 +12:01:27.776:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 09 +12:01:27.815:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722031 +12:01:28.195:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722032 +12:01:28.592:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722033 +12:01:28.945:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722034 +12:01:29.425:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722035 +12:01:29.917:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722036 +12:01:30.302:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722037 +12:01:30.699:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722038 +12:01:31.076:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722039 +12:01:31.528:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a46494f2048616e646c65 +12:01:31.948:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000001200 +12:01:31.994:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 10030000000000000000ffffffffffffff7f05074d617820666565 +12:01:32.536:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 06. p2: 00, constdata: +12:01:32.584:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 000000000000000000000000000000000000000000000000000000000000000000 +12:01:32.653:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 10. p2: 00, constdata: +12:01:33.006:seproxyhal: printf: Integrity check for: {0x22, 0x77, 0x67, 0x74, 0x9f, 0x04, 0xfd, 0xb0, 0x1b, 0x4a, 0x9e, 0x87, 0xaa, 0x3c, 0x35, 0xa6, 0xc3, 0xf1, 0xb8, 0x62, 0xb1, 0xd9, 0x12, 0x33, 0x43, 0x55, 0x2d, 0xe8, 0x25, 0x7d, 0x7c, 0xaa} +12:01:34.421:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 01. p2: 00, constdata: +12:01:34.938:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 01020a000000000000000a000000000000000200 +12:01:34.979:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 0000000001 +12:01:35.033:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 0000000000ea30557015d289deaa32dd01 +12:01:35.091:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 03. p2: 00, constdata: 06416374696f6e1c566f746520666f722046494f20426c6f636b2070726f647563657273 +12:01:35.439:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 07. p2: 01, constdata: +12:01:35.476:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000001200 +12:01:35.542:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000000200 +12:01:35.599:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 05. p2: 00, constdata: 17030000000000000000ffffffff00000000 +12:01:35.658:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 0a +12:01:35.694:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722031 +12:01:36.061:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722032 +12:01:36.459:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722033 +12:01:36.868:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722034 +12:01:37.254:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722035 +12:01:37.665:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722036 +12:01:38.057:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722037 +12:01:38.448:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722038 +12:01:38.854:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722039 +12:01:39.233:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203130 +12:01:39.662:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a46494f2048616e646c65 +12:01:40.055:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000001200 +12:01:40.119:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 10030000000000000000ffffffffffffff7f05074d617820666565 +12:01:40.628:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 06. p2: 00, constdata: +12:01:40.669:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 000000000000000000000000000000000000000000000000000000000000000000 +12:01:40.730:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 10. p2: 00, constdata: +12:01:41.058:seproxyhal: printf: Integrity check for: {0x53, 0x8f, 0xc3, 0xe7, 0xcc, 0x10, 0x26, 0x04, 0x1c, 0xe7, 0x08, 0xfd, 0x9a, 0xf0, 0xf8, 0x8a, 0x06, 0xc4, 0x62, 0x04, 0xa5, 0xd0, 0x7c, 0xfd, 0xd4, 0x99, 0x30, 0xbd, 0x29, 0x98, 0x59, 0x8e} +12:01:42.149:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 01. p2: 00, constdata: +12:01:42.592:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 01020a000000000000000a000000000000000200 +12:01:42.644:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 0000000001 +12:01:42.680:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 0000000000ea30557015d289deaa32dd01 +12:01:42.720:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 03. p2: 00, constdata: 06416374696f6e1c566f746520666f722046494f20426c6f636b2070726f647563657273 +12:01:43.155:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 07. p2: 01, constdata: +12:01:43.193:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000001200 +12:01:43.244:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000000200 +12:01:43.293:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 05. p2: 00, constdata: 17030000000000000000ffffffff00000000 +12:01:43.340:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 0b +12:01:43.392:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722031 +12:01:43.880:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722032 +12:01:44.272:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722033 +12:01:44.661:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722034 +12:01:45.115:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722035 +12:01:45.516:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722036 +12:01:45.908:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722037 +12:01:46.366:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722038 +12:01:46.770:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722039 +12:01:47.162:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203130 +12:01:47.543:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203131 +12:01:47.964:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a46494f2048616e646c65 +12:01:48.341:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000001200 +12:01:48.388:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 10030000000000000000ffffffffffffff7f05074d617820666565 +12:01:48.921:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 06. p2: 00, constdata: +12:01:48.959:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 000000000000000000000000000000000000000000000000000000000000000000 +12:01:49.017:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 10. p2: 00, constdata: +12:01:49.321:seproxyhal: printf: Integrity check for: {0x23, 0xc9, 0xce, 0x25, 0xf6, 0x0a, 0xd3, 0x61, 0x65, 0x42, 0xcd, 0x86, 0xb6, 0x76, 0x73, 0x47, 0x7f, 0xf2, 0x14, 0x45, 0x2b, 0x01, 0x66, 0x96, 0x35, 0xed, 0x82, 0xf7, 0x1a, 0xf1, 0x5d, 0x30} +12:01:51.487:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 01. p2: 00, constdata: +12:01:51.963:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 01020a000000000000000a000000000000000200 +12:01:52.005:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 0000000001 +12:01:52.052:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 0000000000ea30557015d289deaa32dd01 +12:01:52.091:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 03. p2: 00, constdata: 06416374696f6e1c566f746520666f722046494f20426c6f636b2070726f647563657273 +12:01:52.456:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 07. p2: 01, constdata: +12:01:52.493:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000001200 +12:01:52.549:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000000200 +12:01:52.591:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 05. p2: 00, constdata: 17030000000000000000ffffffff00000000 +12:01:52.630:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 0c +12:01:52.672:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722031 +12:01:53.191:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722032 +12:01:53.590:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722033 +12:01:53.960:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722034 +12:01:54.380:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722035 +12:01:54.744:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722036 +12:01:55.156:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722037 +12:01:55.547:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722038 +12:01:55.946:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722039 +12:01:56.324:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203130 +12:01:56.716:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203131 +12:01:57.105:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203132 +12:01:57.510:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a46494f2048616e646c65 +12:01:57.904:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000001200 +12:01:57.947:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 10030000000000000000ffffffffffffff7f05074d617820666565 +12:01:58.300:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 06. p2: 00, constdata: +12:01:58.342:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 000000000000000000000000000000000000000000000000000000000000000000 +12:01:58.391:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 10. p2: 00, constdata: +12:01:58.799:seproxyhal: printf: Integrity check for: {0xac, 0x34, 0x97, 0xb2, 0xd8, 0xeb, 0x94, 0xd3, 0x22, 0x46, 0x08, 0x2e, 0x3f, 0x28, 0x09, 0xb3, 0x40, 0x1a, 0xf0, 0x8f, 0x7d, 0x30, 0x1a, 0x83, 0xd7, 0x7b, 0xbc, 0x13, 0x7c, 0xa2, 0xde, 0x5c} +12:02:00.288:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 01. p2: 00, constdata: +12:02:00.761:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 01020a000000000000000a000000000000000200 +12:02:00.811:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 0000000001 +12:02:00.869:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 0000000000ea30557015d289deaa32dd01 +12:02:00.910:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 03. p2: 00, constdata: 06416374696f6e1c566f746520666f722046494f20426c6f636b2070726f647563657273 +12:02:01.265:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 07. p2: 01, constdata: +12:02:01.302:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000001200 +12:02:01.352:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000000200 +12:02:01.402:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 05. p2: 00, constdata: 17030000000000000000ffffffff00000000 +12:02:01.455:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 0d +12:02:01.503:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722031 +12:02:01.978:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722032 +12:02:02.341:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722033 +12:02:02.803:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722034 +12:02:03.265:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722035 +12:02:03.695:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722036 +12:02:04.093:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722037 +12:02:04.477:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722038 +12:02:04.884:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722039 +12:02:05.272:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203130 +12:02:05.665:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203131 +12:02:06.051:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203132 +12:02:06.443:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203133 +12:02:06.839:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a46494f2048616e646c65 +12:02:07.247:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000001200 +12:02:07.298:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 10030000000000000000ffffffffffffff7f05074d617820666565 +12:02:07.801:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 06. p2: 00, constdata: +12:02:07.842:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 000000000000000000000000000000000000000000000000000000000000000000 +12:02:07.891:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 10. p2: 00, constdata: +12:02:08.268:seproxyhal: printf: Integrity check for: {0x92, 0x80, 0x45, 0xf0, 0x68, 0xab, 0x62, 0x83, 0xfd, 0x9b, 0x55, 0xaf, 0x83, 0xaf, 0x5f, 0x9f, 0x8b, 0x92, 0x4c, 0xb1, 0xb6, 0x2d, 0x12, 0x1a, 0xe9, 0x46, 0xa0, 0x0f, 0x0f, 0xd5, 0x4c, 0x82} +12:02:09.623:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 01. p2: 00, constdata: +12:02:10.109:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 01020a000000000000000a000000000000000200 +12:02:10.170:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 0000000001 +12:02:10.211:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 0000000000ea30557015d289deaa32dd01 +12:02:10.267:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 03. p2: 00, constdata: 06416374696f6e1c566f746520666f722046494f20426c6f636b2070726f647563657273 +12:02:10.624:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 07. p2: 01, constdata: +12:02:10.666:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000001200 +12:02:10.720:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000000200 +12:02:10.785:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 05. p2: 00, constdata: 17030000000000000000ffffffff00000000 +12:02:10.840:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 0e +12:02:10.888:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722031 +12:02:11.263:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722032 +12:02:11.641:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722033 +12:02:12.038:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722034 +12:02:12.515:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722035 +12:02:12.900:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722036 +12:02:13.327:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722037 +12:02:13.713:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722038 +12:02:14.103:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722039 +12:02:14.498:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203130 +12:02:14.881:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203131 +12:02:15.287:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203132 +12:02:15.672:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203133 +12:02:16.151:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203134 +12:02:16.518:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a46494f2048616e646c65 +12:02:16.864:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000001200 +12:02:16.928:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 10030000000000000000ffffffffffffff7f05074d617820666565 +12:02:17.278:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 06. p2: 00, constdata: +12:02:17.322:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 000000000000000000000000000000000000000000000000000000000000000000 +12:02:17.375:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 10. p2: 00, constdata: +12:02:17.708:seproxyhal: printf: Integrity check for: {0x54, 0xa0, 0xde, 0x88, 0x10, 0xbd, 0x6f, 0x67, 0x14, 0xfc, 0xd1, 0x0d, 0x93, 0xb9, 0xe7, 0x07, 0x28, 0x14, 0x2d, 0xab, 0x50, 0x5c, 0x12, 0x83, 0xdc, 0x87, 0xb5, 0x52, 0x6a, 0x02, 0xf9, 0x61} +12:02:18.804:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 01. p2: 00, constdata: +12:02:19.300:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 01020a000000000000000a000000000000000200 +12:02:19.339:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 0000000001 +12:02:19.380:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 0000000000ea30557015d289deaa32dd01 +12:02:19.445:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 03. p2: 00, constdata: 06416374696f6e1c566f746520666f722046494f20426c6f636b2070726f647563657273 +12:02:19.808:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 07. p2: 01, constdata: +12:02:19.850:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000001200 +12:02:19.903:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000000200 +12:02:19.955:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 05. p2: 00, constdata: 17030000000000000000ffffffff00000000 +12:02:19.989:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 0f +12:02:20.032:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722031 +12:02:20.562:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722032 +12:02:20.929:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722033 +12:02:21.409:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722034 +12:02:21.784:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722035 +12:02:22.190:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722036 +12:02:22.609:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722037 +12:02:23.041:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722038 +12:02:23.435:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722039 +12:02:23.827:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203130 +12:02:24.230:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203131 +12:02:24.620:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203132 +12:02:25.061:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203133 +12:02:25.446:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203134 +12:02:25.821:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203135 +12:02:26.303:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a46494f2048616e646c65 +12:02:26.683:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000001200 +12:02:26.746:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 10030000000000000000ffffffffffffff7f05074d617820666565 +12:02:27.254:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 06. p2: 00, constdata: +12:02:27.292:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 000000000000000000000000000000000000000000000000000000000000000000 +12:02:27.341:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 10. p2: 00, constdata: +12:02:27.673:seproxyhal: printf: Integrity check for: {0xf5, 0xd6, 0xf2, 0x37, 0xb4, 0x66, 0x56, 0xe3, 0xca, 0xba, 0xac, 0x01, 0x50, 0x4c, 0x97, 0xa6, 0x2b, 0xb7, 0x14, 0x45, 0xb6, 0x54, 0x7c, 0x18, 0x29, 0xb7, 0xde, 0x4f, 0xf3, 0xae, 0xfd, 0x2} +12:02:28.792:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 01. p2: 00, constdata: +12:02:29.222:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 01020a000000000000000a000000000000000200 +12:02:29.284:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 0000000001 +12:02:29.325:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 0000000000ea30557015d289deaa32dd01 +12:02:29.364:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 03. p2: 00, constdata: 06416374696f6e1c566f746520666f722046494f20426c6f636b2070726f647563657273 +12:02:29.753:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 07. p2: 01, constdata: +12:02:29.805:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000001200 +12:02:29.857:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000000200 +12:02:29.907:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 05. p2: 00, constdata: 17030000000000000000ffffffff00000000 +12:02:29.940:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 10 +12:02:29.979:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722031 +12:02:30.488:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722032 +12:02:30.942:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722033 +12:02:31.352:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722034 +12:02:31.729:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722035 +12:02:32.157:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722036 +12:02:32.557:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722037 +12:02:32.929:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722038 +12:02:33.321:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722039 +12:02:33.725:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203130 +12:02:34.101:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203131 +12:02:34.514:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203132 +12:02:34.964:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203133 +12:02:35.427:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203134 +12:02:35.842:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203135 +12:02:36.349:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203136 +12:02:36.730:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a46494f2048616e646c65 +12:02:37.119:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000001200 +12:02:37.164:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 10030000000000000000ffffffffffffff7f05074d617820666565 +12:02:37.527:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 06. p2: 00, constdata: +12:02:37.567:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 000000000000000000000000000000000000000000000000000000000000000000 +12:02:37.623:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 10. p2: 00, constdata: +12:02:38.056:seproxyhal: printf: Integrity check for: {0x81, 0x6f, 0x57, 0xd9, 0x7d, 0x97, 0x3f, 0xc6, 0x30, 0x61, 0x79, 0x5b, 0x26, 0x2d, 0x57, 0x22, 0xe8, 0xe7, 0xdc, 0x8d, 0xbf, 0xb2, 0xab, 0x51, 0x15, 0x4b, 0x7b, 0x57, 0x52, 0x70, 0xdc, 0x2d} +12:02:39.477:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 01. p2: 00, constdata: +12:02:39.900:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 01020a000000000000000a000000000000000200 +12:02:39.978:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 0000000001 +12:02:40.009:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 0000000000ea30557015d289deaa32dd01 +12:02:40.049:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 03. p2: 00, constdata: 06416374696f6e1c566f746520666f722046494f20426c6f636b2070726f647563657273 +12:02:40.382:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 07. p2: 01, constdata: +12:02:40.427:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000001200 +12:02:40.487:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000000200 +12:02:40.533:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 05. p2: 00, constdata: 17030000000000000000ffffffff00000000 +12:02:40.583:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 11 +12:02:40.623:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722031 +12:02:41.018:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722032 +12:02:41.428:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722033 +12:02:41.775:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722034 +12:02:42.213:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722035 +12:02:42.605:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722036 +12:02:42.931:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722037 +12:02:43.426:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722038 +12:02:43.826:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722039 +12:02:44.257:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203130 +12:02:44.645:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203131 +12:02:45.028:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203132 +12:02:45.411:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203133 +12:02:45.813:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203134 +12:02:46.180:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203135 +12:02:46.591:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203136 +12:02:46.958:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203137 +12:02:47.367:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a46494f2048616e646c65 +12:02:47.750:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000001200 +12:02:47.795:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 10030000000000000000ffffffffffffff7f05074d617820666565 +12:02:48.122:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 06. p2: 00, constdata: +12:02:48.176:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 000000000000000000000000000000000000000000000000000000000000000000 +12:02:48.256:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 10. p2: 00, constdata: +12:02:48.532:seproxyhal: printf: Integrity check for: {0xa9, 0xae, 0x65, 0x7f, 0x2c, 0x82, 0x95, 0x2b, 0xab, 0x45, 0x31, 0x85, 0x43, 0xe4, 0x12, 0x59, 0x45, 0x4e, 0x2c, 0x10, 0x9c, 0x13, 0xe6, 0xbe, 0x2a, 0x1e, 0x97, 0x0a, 0xce, 0xfa, 0xc6, 0x13} +12:02:50.172:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 01. p2: 00, constdata: +12:02:50.605:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 01020a000000000000000a000000000000000200 +12:02:50.652:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 0000000001 +12:02:50.686:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 0000000000ea30557015d289deaa32dd01 +12:02:50.752:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 03. p2: 00, constdata: 06416374696f6e1c566f746520666f722046494f20426c6f636b2070726f647563657273 +12:02:51.211:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 07. p2: 01, constdata: +12:02:51.270:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000001200 +12:02:51.340:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000000200 +12:02:51.380:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 05. p2: 00, constdata: 17030000000000000000ffffffff00000000 +12:02:51.436:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 12 +12:02:51.484:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722031 +12:02:51.845:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722032 +12:02:52.247:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722033 +12:02:52.636:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722034 +12:02:53.033:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722035 +12:02:53.437:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722036 +12:02:53.843:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722037 +12:02:54.200:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722038 +12:02:54.679:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722039 +12:02:55.071:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203130 +12:02:55.467:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203131 +12:02:55.840:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203132 +12:02:56.260:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203133 +12:02:56.647:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203134 +12:02:57.033:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203135 +12:02:57.422:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203136 +12:02:57.844:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203137 +12:02:58.259:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203138 +12:02:58.640:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a46494f2048616e646c65 +12:02:59.053:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000001200 +12:02:59.117:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 10030000000000000000ffffffffffffff7f05074d617820666565 +12:02:59.619:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 06. p2: 00, constdata: +12:02:59.669:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 000000000000000000000000000000000000000000000000000000000000000000 +12:02:59.721:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 10. p2: 00, constdata: +12:03:00.028:seproxyhal: printf: Integrity check for: {0x0f, 0x32, 0x00, 0x3e, 0xa4, 0x48, 0xc1, 0xdf, 0x21, 0xe8, 0xf4, 0xec, 0x4e, 0xae, 0x7a, 0x68, 0x36, 0x68, 0x0a, 0x20, 0xb5, 0xa0, 0xd5, 0x2c, 0xec, 0x26, 0x2c, 0x95, 0x04, 0x50, 0xf9, 0x7} +12:03:01.507:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 01. p2: 00, constdata: +12:03:01.923:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 01020a000000000000000a000000000000000200 +12:03:01.968:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 0000000001 +12:03:02.031:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 0000000000ea30557015d289deaa32dd01 +12:03:02.077:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 03. p2: 00, constdata: 06416374696f6e1c566f746520666f722046494f20426c6f636b2070726f647563657273 +12:03:02.410:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 07. p2: 01, constdata: +12:03:02.453:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000001200 +12:03:02.495:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000000200 +12:03:02.545:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 05. p2: 00, constdata: 17030000000000000000ffffffff00000000 +12:03:02.590:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 13 +12:03:02.631:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722031 +12:03:03.146:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722032 +12:03:03.532:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722033 +12:03:04.013:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722034 +12:03:04.398:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722035 +12:03:04.794:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722036 +12:03:05.152:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722037 +12:03:05.558:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722038 +12:03:06.020:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722039 +12:03:06.401:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203130 +12:03:06.793:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203131 +12:03:07.178:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203132 +12:03:07.658:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203133 +12:03:08.055:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203134 +12:03:08.441:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203135 +12:03:08.836:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203136 +12:03:09.205:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203137 +12:03:09.677:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203138 +12:03:10.060:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203139 +12:03:10.480:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a46494f2048616e646c65 +12:03:10.867:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000001200 +12:03:10.919:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 10030000000000000000ffffffffffffff7f05074d617820666565 +12:03:11.448:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 06. p2: 00, constdata: +12:03:11.490:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 000000000000000000000000000000000000000000000000000000000000000000 +12:03:11.549:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 10. p2: 00, constdata: +12:03:11.925:seproxyhal: printf: Integrity check for: {0x5a, 0x28, 0xc1, 0x55, 0xfe, 0x77, 0x53, 0x06, 0xe7, 0x97, 0xcd, 0x1f, 0x65, 0xe5, 0xbe, 0xbe, 0x6a, 0x49, 0xdd, 0x0d, 0xce, 0x10, 0x04, 0x10, 0xf2, 0xcb, 0xe0, 0xad, 0xa4, 0xd7, 0x0d, 0x66} +12:03:13.199:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 01. p2: 00, constdata: +12:03:13.668:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 01020a000000000000000a000000000000000200 +12:03:13.708:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 0000000001 +12:03:13.759:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 0000000000ea30557015d289deaa32dd01 +12:03:13.799:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 03. p2: 00, constdata: 06416374696f6e1c566f746520666f722046494f20426c6f636b2070726f647563657273 +12:03:14.149:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 07. p2: 01, constdata: +12:03:14.197:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000001200 +12:03:14.252:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000000200 +12:03:14.301:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 05. p2: 00, constdata: 17030000000000000000ffffffff00000000 +12:03:14.353:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 14 +12:03:14.391:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722031 +12:03:14.794:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722032 +12:03:15.172:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722033 +12:03:15.621:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722034 +12:03:16.001:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722035 +12:03:16.398:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722036 +12:03:16.832:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722037 +12:03:17.210:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722038 +12:03:17.577:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722039 +12:03:18.013:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203130 +12:03:18.378:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203131 +12:03:18.829:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203132 +12:03:19.233:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203133 +12:03:19.633:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203134 +12:03:19.950:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203135 +12:03:20.335:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203136 +12:03:20.718:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203137 +12:03:21.107:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203138 +12:03:21.572:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203139 +12:03:21.956:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203230 +12:03:22.339:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a46494f2048616e646c65 +12:03:22.721:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000001200 +12:03:22.766:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 10030000000000000000ffffffffffffff7f05074d617820666565 +12:03:23.105:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 06. p2: 00, constdata: +12:03:23.161:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 000000000000000000000000000000000000000000000000000000000000000000 +12:03:23.232:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 10. p2: 00, constdata: +12:03:23.582:seproxyhal: printf: Integrity check for: {0x89, 0x16, 0x45, 0xa3, 0xad, 0x26, 0xe6, 0xdc, 0xc6, 0xb9, 0x44, 0xb3, 0x74, 0x7c, 0x76, 0xe7, 0x0e, 0x56, 0xb8, 0x39, 0xe5, 0x75, 0xe5, 0x48, 0x23, 0x32, 0x93, 0xb2, 0x7c, 0xbf, 0x44, 0xad} +12:03:24.887:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 01. p2: 00, constdata: +12:03:25.343:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 01020a000000000000000a000000000000000200 +12:03:25.406:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 0000000001 +12:03:25.447:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 0000000000ea30557015d289deaa32dd01 +12:03:25.488:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 03. p2: 00, constdata: 06416374696f6e1c566f746520666f722046494f20426c6f636b2070726f647563657273 +12:03:25.939:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 07. p2: 01, constdata: +12:03:25.977:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000001200 +12:03:26.030:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000000200 +12:03:26.073:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 05. p2: 00, constdata: 17030000000000000000ffffffff00000000 +12:03:26.107:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 15 +12:03:26.150:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722031 +12:03:26.566:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722032 +12:03:26.985:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722033 +12:03:27.347:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722034 +12:03:27.781:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722035 +12:03:28.191:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722036 +12:03:28.526:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722037 +12:03:29.029:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722038 +12:03:29.420:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722039 +12:03:29.806:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203130 +12:03:30.182:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203131 +12:03:30.586:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203132 +12:03:30.961:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203133 +12:03:31.370:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203134 +12:03:31.771:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203135 +12:03:32.171:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203136 +12:03:32.532:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203137 +12:03:33.014:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203138 +12:03:33.404:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203139 +12:03:33.791:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203230 +12:03:34.177:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203231 +12:03:34.573:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a46494f2048616e646c65 +12:03:34.978:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000001200 +12:03:35.044:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 10030000000000000000ffffffffffffff7f05074d617820666565 +12:03:35.525:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 06. p2: 00, constdata: +12:03:35.577:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 000000000000000000000000000000000000000000000000000000000000000000 +12:03:35.628:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 10. p2: 00, constdata: +12:03:35.961:seproxyhal: printf: Integrity check for: {0x0c, 0xf2, 0x4f, 0x0e, 0x34, 0xeb, 0x55, 0xae, 0xa2, 0x60, 0x55, 0x46, 0xa3, 0x4e, 0x48, 0x0d, 0xb8, 0x34, 0x58, 0x2a, 0x80, 0x62, 0xc3, 0x07, 0x65, 0x76, 0x65, 0x34, 0xe6, 0xe9, 0x45, 0x69} +12:03:37.200:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 01. p2: 00, constdata: +12:03:37.671:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 01020a000000000000000a000000000000000200 +12:03:37.733:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 0000000001 +12:03:37.792:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 0000000000ea30557015d289deaa32dd01 +12:03:37.840:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 03. p2: 00, constdata: 06416374696f6e1c566f746520666f722046494f20426c6f636b2070726f647563657273 +12:03:38.211:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 07. p2: 01, constdata: +12:03:38.252:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000001200 +12:03:38.304:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000000200 +12:03:38.346:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 05. p2: 00, constdata: 17030000000000000000ffffffff00000000 +12:03:38.378:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 16 +12:03:38.437:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722031 +12:03:38.899:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722032 +12:03:39.301:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722033 +12:03:39.686:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722034 +12:03:40.059:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722035 +12:03:40.465:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722036 +12:03:40.868:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722037 +12:03:41.275:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722038 +12:03:41.638:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722039 +12:03:42.093:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203130 +12:03:42.482:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203131 +12:03:42.869:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203132 +12:03:43.281:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203133 +12:03:43.688:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203134 +12:03:44.123:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203135 +12:03:44.520:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203136 +12:03:44.921:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203137 +12:03:45.308:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203138 +12:03:45.725:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203139 +12:03:46.122:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203230 +12:03:46.532:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203231 +12:03:46.927:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203232 +12:03:47.301:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a46494f2048616e646c65 +12:03:47.686:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000001200 +12:03:47.734:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 10030000000000000000ffffffffffffff7f05074d617820666565 +12:03:48.252:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 06. p2: 00, constdata: +12:03:48.299:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 000000000000000000000000000000000000000000000000000000000000000000 +12:03:48.358:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 10. p2: 00, constdata: +12:03:48.757:seproxyhal: printf: Integrity check for: {0x80, 0x4e, 0x3b, 0x2d, 0xea, 0x0b, 0x2c, 0x7b, 0x06, 0xfb, 0x0c, 0xb5, 0x63, 0xfc, 0x66, 0xf1, 0x0c, 0x95, 0xd0, 0x0e, 0x67, 0x65, 0xa8, 0x98, 0xa3, 0xa8, 0xe0, 0x1e, 0xeb, 0x5e, 0x65, 0x3c} +12:03:50.091:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 01. p2: 00, constdata: +12:03:50.561:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 01020a000000000000000a000000000000000200 +12:03:50.620:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 0000000001 +12:03:50.674:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 0000000000ea30557015d289deaa32dd01 +12:03:50.716:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 03. p2: 00, constdata: 06416374696f6e1c566f746520666f722046494f20426c6f636b2070726f647563657273 +12:03:51.047:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 07. p2: 01, constdata: +12:03:51.098:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000001200 +12:03:51.154:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000000200 +12:03:51.197:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 05. p2: 00, constdata: 17030000000000000000ffffffff00000000 +12:03:51.251:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 17 +12:03:51.314:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722031 +12:03:51.796:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722032 +12:03:52.228:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722033 +12:03:52.602:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722034 +12:03:53.018:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722035 +12:03:53.407:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722036 +12:03:53.793:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722037 +12:03:54.228:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722038 +12:03:54.666:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722039 +12:03:55.061:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203130 +12:03:55.450:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203131 +12:03:55.831:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203132 +12:03:56.245:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203133 +12:03:56.682:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203134 +12:03:57.127:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203135 +12:03:57.557:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203136 +12:03:58.033:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203137 +12:03:58.416:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203138 +12:03:58.802:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203139 +12:03:59.210:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203230 +12:03:59.564:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203231 +12:04:00.025:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203232 +12:04:00.488:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203233 +12:04:00.812:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a46494f2048616e646c65 +12:04:01.204:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000001200 +12:04:01.256:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 10030000000000000000ffffffffffffff7f05074d617820666565 +12:04:01.608:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 06. p2: 00, constdata: +12:04:01.652:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 000000000000000000000000000000000000000000000000000000000000000000 +12:04:01.722:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 10. p2: 00, constdata: +12:04:02.103:seproxyhal: printf: Integrity check for: {0xa2, 0x12, 0x84, 0xf7, 0xd7, 0x4e, 0x24, 0x3b, 0xbd, 0x7c, 0x61, 0x03, 0xbe, 0x8b, 0xeb, 0xeb, 0xde, 0x44, 0x09, 0xf2, 0x5c, 0xd2, 0x08, 0x90, 0x1d, 0x03, 0xf2, 0xaf, 0xa3, 0x22, 0xbc, 0xb1} +12:04:03.307:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 01. p2: 00, constdata: +12:04:03.762:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 01020a000000000000000a000000000000000200 +12:04:03.802:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 0000000001 +12:04:03.841:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 0000000000ea30557015d289deaa32dd01 +12:04:03.884:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 03. p2: 00, constdata: 06416374696f6e1c566f746520666f722046494f20426c6f636b2070726f647563657273 +12:04:04.333:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 07. p2: 01, constdata: +12:04:04.374:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000001200 +12:04:04.454:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000000200 +12:04:04.510:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 05. p2: 00, constdata: 17030000000000000000ffffffff00000000 +12:04:04.561:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 18 +12:04:04.603:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722031 +12:04:05.143:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722032 +12:04:05.486:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722033 +12:04:05.934:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722034 +12:04:06.333:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722035 +12:04:06.782:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722036 +12:04:07.157:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722037 +12:04:07.547:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722038 +12:04:07.947:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722039 +12:04:08.327:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203130 +12:04:08.701:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203131 +12:04:09.158:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203132 +12:04:09.538:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203133 +12:04:09.932:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203134 +12:04:10.286:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203135 +12:04:10.740:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203136 +12:04:11.117:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203137 +12:04:11.585:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203138 +12:04:11.960:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203139 +12:04:12.357:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203230 +12:04:12.779:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203231 +12:04:13.175:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203232 +12:04:13.575:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203233 +12:04:13.940:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203234 +12:04:14.353:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a46494f2048616e646c65 +12:04:14.730:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000001200 +12:04:14.788:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 10030000000000000000ffffffffffffff7f05074d617820666565 +12:04:15.306:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 06. p2: 00, constdata: +12:04:15.345:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 000000000000000000000000000000000000000000000000000000000000000000 +12:04:15.391:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 10. p2: 00, constdata: +12:04:15.773:seproxyhal: printf: Integrity check for: {0x85, 0xd6, 0x13, 0x4e, 0x7e, 0x0c, 0x78, 0x9c, 0x59, 0x8b, 0x42, 0x3d, 0xa8, 0x57, 0x3e, 0x53, 0xb0, 0x82, 0xcb, 0xc9, 0x03, 0x01, 0xe9, 0x62, 0xbd, 0x01, 0x55, 0x73, 0x40, 0xa0, 0xc6, 0xd9} +12:04:17.045:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 01. p2: 00, constdata: +12:04:17.536:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 01020a000000000000000a000000000000000200 +12:04:17.582:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 0000000001 +12:04:17.634:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 0000000000ea30557015d289deaa32dd01 +12:04:17.703:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 03. p2: 00, constdata: 06416374696f6e1c566f746520666f722046494f20426c6f636b2070726f647563657273 +12:04:18.223:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 07. p2: 01, constdata: +12:04:18.265:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000001200 +12:04:18.325:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000000200 +12:04:18.372:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 05. p2: 00, constdata: 17030000000000000000ffffffff00000000 +12:04:18.408:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 19 +12:04:18.445:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722031 +12:04:18.928:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722032 +12:04:19.371:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722033 +12:04:19.857:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722034 +12:04:20.241:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722035 +12:04:20.608:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722036 +12:04:21.094:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722037 +12:04:21.495:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722038 +12:04:21.857:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722039 +12:04:22.302:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203130 +12:04:22.684:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203131 +12:04:23.118:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203132 +12:04:23.493:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203133 +12:04:23.975:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203134 +12:04:24.368:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203135 +12:04:24.758:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203136 +12:04:25.140:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203137 +12:04:25.484:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203138 +12:04:25.893:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203139 +12:04:26.274:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203230 +12:04:26.707:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203231 +12:04:27.122:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203232 +12:04:27.495:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203233 +12:04:27.924:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203234 +12:04:28.303:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203235 +12:04:28.710:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a46494f2048616e646c65 +12:04:29.090:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000001200 +12:04:29.150:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 10030000000000000000ffffffffffffff7f05074d617820666565 +12:04:29.654:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 06. p2: 00, constdata: +12:04:29.703:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 000000000000000000000000000000000000000000000000000000000000000000 +12:04:29.766:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 10. p2: 00, constdata: +12:04:30.101:seproxyhal: printf: Integrity check for: {0xaf, 0xca, 0xde, 0x50, 0xca, 0xf1, 0x6f, 0x6c, 0x6e, 0x0e, 0xca, 0x9b, 0xda, 0x54, 0x7d, 0x22, 0xa4, 0x04, 0x32, 0x17, 0x98, 0x63, 0x24, 0x62, 0x37, 0xe4, 0x09, 0x7d, 0x02, 0x15, 0x48, 0xed} +12:04:31.316:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 01. p2: 00, constdata: +12:04:31.779:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 01020a000000000000000a000000000000000200 +12:04:31.857:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 0000000001 +12:04:31.889:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 0000000000ea30557015d289deaa32dd01 +12:04:31.941:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 03. p2: 00, constdata: 06416374696f6e1c566f746520666f722046494f20426c6f636b2070726f647563657273 +12:04:32.462:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 07. p2: 01, constdata: +12:04:32.502:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000001200 +12:04:32.564:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000000200 +12:04:32.608:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 05. p2: 00, constdata: 17030000000000000000ffffffff00000000 +12:04:32.646:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 1a +12:04:32.700:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722031 +12:04:33.196:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722032 +12:04:33.675:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722033 +12:04:34.075:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722034 +12:04:34.433:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722035 +12:04:34.828:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722036 +12:04:35.214:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722037 +12:04:35.625:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722038 +12:04:36.011:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722039 +12:04:36.423:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203130 +12:04:36.800:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203131 +12:04:37.263:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203132 +12:04:37.671:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203133 +12:04:38.061:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203134 +12:04:38.463:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203135 +12:04:38.850:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203136 +12:04:39.242:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203137 +12:04:39.633:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203138 +12:04:40.013:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203139 +12:04:40.459:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203230 +12:04:40.856:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203231 +12:04:41.224:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203232 +12:04:41.676:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203233 +12:04:42.064:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203234 +12:04:42.454:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203235 +12:04:42.856:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203236 +12:04:43.235:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a46494f2048616e646c65 +12:04:43.632:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000001200 +12:04:43.688:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 10030000000000000000ffffffffffffff7f05074d617820666565 +12:04:44.207:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 06. p2: 00, constdata: +12:04:44.244:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 000000000000000000000000000000000000000000000000000000000000000000 +12:04:44.289:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 10. p2: 00, constdata: +12:04:44.624:seproxyhal: printf: Integrity check for: {0x7c, 0x77, 0x9d, 0x79, 0xd4, 0x5e, 0x49, 0x5a, 0xd4, 0xb9, 0x8d, 0xf6, 0xb9, 0xb3, 0x4b, 0x44, 0x5e, 0xd3, 0x6a, 0x4a, 0x36, 0x9f, 0x1f, 0xd7, 0x1a, 0x5b, 0xec, 0x19, 0x45, 0xd9, 0x6c, 0x39} +12:04:45.972:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 01. p2: 00, constdata: +12:04:46.450:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 01020a000000000000000a000000000000000200 +12:04:46.532:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 0000000001 +12:04:46.578:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 0000000000ea30557015d289deaa32dd01 +12:04:46.627:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 03. p2: 00, constdata: 06416374696f6e1c566f746520666f722046494f20426c6f636b2070726f647563657273 +12:04:47.161:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 07. p2: 01, constdata: +12:04:47.219:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000001200 +12:04:47.273:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000000200 +12:04:47.316:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 05. p2: 00, constdata: 17030000000000000000ffffffff00000000 +12:04:47.367:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 1b +12:04:47.415:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722031 +12:04:47.777:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722032 +12:04:48.177:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722033 +12:04:48.569:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722034 +12:04:48.960:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722035 +12:04:49.329:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722036 +12:04:49.719:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722037 +12:04:50.137:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722038 +12:04:50.465:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722039 +12:04:50.885:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203130 +12:04:51.288:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203131 +12:04:51.650:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203132 +12:04:52.098:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203133 +12:04:52.497:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203134 +12:04:52.887:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203135 +12:04:53.267:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203136 +12:04:53.661:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203137 +12:04:54.062:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203138 +12:04:54.431:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203139 +12:04:54.873:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203230 +12:04:55.241:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203231 +12:04:55.639:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203232 +12:04:56.034:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203233 +12:04:56.487:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203234 +12:04:56.878:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203235 +12:04:57.276:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203236 +12:04:57.647:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203237 +12:04:58.052:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a46494f2048616e646c65 +12:04:58.444:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000001200 +12:04:58.515:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 10030000000000000000ffffffffffffff7f05074d617820666565 +12:04:58.982:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 06. p2: 00, constdata: +12:04:59.026:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 000000000000000000000000000000000000000000000000000000000000000000 +12:04:59.090:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 10. p2: 00, constdata: +12:04:59.440:seproxyhal: printf: Integrity check for: {0x2e, 0x75, 0xa8, 0x74, 0x8b, 0xcf, 0xdd, 0x43, 0x2d, 0xb2, 0x58, 0x1a, 0x20, 0xc1, 0x06, 0xcd, 0x76, 0x6a, 0x55, 0x6d, 0xac, 0x29, 0x33, 0x62, 0x3e, 0x3f, 0x72, 0xf4, 0xaf, 0xf2, 0x1c, 0x20} +12:05:00.680:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 01. p2: 00, constdata: +12:05:01.186:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 01020a000000000000000a000000000000000200 +12:05:01.251:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 0000000001 +12:05:01.287:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 0000000000ea30557015d289deaa32dd01 +12:05:01.327:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 03. p2: 00, constdata: 06416374696f6e1c566f746520666f722046494f20426c6f636b2070726f647563657273 +12:05:01.634:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 07. p2: 01, constdata: +12:05:01.683:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000001200 +12:05:01.755:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000000200 +12:05:01.817:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 05. p2: 00, constdata: 17030000000000000000ffffffff00000000 +12:05:01.864:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 1c +12:05:01.914:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722031 +12:05:02.246:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722032 +12:05:02.665:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722033 +12:05:03.149:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722034 +12:05:03.580:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722035 +12:05:03.966:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722036 +12:05:04.342:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722037 +12:05:04.713:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722038 +12:05:05.187:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722039 +12:05:05.559:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203130 +12:05:06.002:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203131 +12:05:06.398:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203132 +12:05:06.756:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203133 +12:05:07.248:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203134 +12:05:07.703:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203135 +12:05:08.090:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203136 +12:05:08.496:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203137 +12:05:08.875:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203138 +12:05:09.289:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203139 +12:05:09.682:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203230 +12:05:10.051:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203231 +12:05:10.538:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203232 +12:05:10.915:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203233 +12:05:11.344:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203234 +12:05:11.787:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203235 +12:05:12.159:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203236 +12:05:12.604:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203237 +12:05:13.002:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203238 +12:05:13.370:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a46494f2048616e646c65 +12:05:13.758:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000001200 +12:05:13.813:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 10030000000000000000ffffffffffffff7f05074d617820666565 +12:05:14.132:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 06. p2: 00, constdata: +12:05:14.175:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 000000000000000000000000000000000000000000000000000000000000000000 +12:05:14.246:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 10. p2: 00, constdata: +12:05:14.522:seproxyhal: printf: Integrity check for: {0x3a, 0xb8, 0xac, 0xce, 0x82, 0x3b, 0x31, 0xff, 0xf5, 0x4f, 0x18, 0x95, 0x19, 0x82, 0xed, 0xec, 0x82, 0x76, 0xde, 0x4a, 0x91, 0x4c, 0x97, 0xc8, 0x18, 0xc4, 0xaa, 0x90, 0x65, 0xae, 0x99, 0xc1} +12:05:16.177:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 01. p2: 00, constdata: +12:05:16.635:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 01020a000000000000000a000000000000000200 +12:05:16.678:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 0000000001 +12:05:16.728:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 0000000000ea30557015d289deaa32dd01 +12:05:16.781:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 03. p2: 00, constdata: 06416374696f6e1c566f746520666f722046494f20426c6f636b2070726f647563657273 +12:05:17.163:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 07. p2: 01, constdata: +12:05:17.204:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000001200 +12:05:17.259:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000000200 +12:05:17.323:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 05. p2: 00, constdata: 17030000000000000000ffffffff00000000 +12:05:17.376:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 1d +12:05:17.419:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722031 +12:05:17.785:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722032 +12:05:18.150:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722033 +12:05:18.602:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722034 +12:05:19.012:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722035 +12:05:19.474:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722036 +12:05:19.839:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722037 +12:05:20.286:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722038 +12:05:20.689:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722039 +12:05:21.073:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203130 +12:05:21.456:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203131 +12:05:21.827:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203132 +12:05:22.305:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203133 +12:05:22.690:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203134 +12:05:23.079:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203135 +12:05:23.516:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203136 +12:05:23.943:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203137 +12:05:24.324:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203138 +12:05:24.776:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203139 +12:05:25.184:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203230 +12:05:25.568:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203231 +12:05:25.962:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203232 +12:05:26.360:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203233 +12:05:26.767:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203234 +12:05:27.151:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203235 +12:05:27.549:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203236 +12:05:27.903:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203237 +12:05:28.385:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203238 +12:05:28.767:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203239 +12:05:29.172:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a46494f2048616e646c65 +12:05:29.558:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000001200 +12:05:29.619:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 10030000000000000000ffffffffffffff7f05074d617820666565 +12:05:30.095:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 06. p2: 00, constdata: +12:05:30.151:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 000000000000000000000000000000000000000000000000000000000000000000 +12:05:30.219:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 10. p2: 00, constdata: +12:05:30.549:seproxyhal: printf: Integrity check for: {0x2c, 0x03, 0x66, 0x3b, 0xa4, 0xa8, 0x16, 0xe1, 0xd5, 0x33, 0xed, 0xc9, 0x53, 0xe4, 0xe0, 0xb2, 0xb5, 0xf1, 0x9f, 0xfa, 0x48, 0x61, 0x62, 0xdc, 0xd2, 0x20, 0x6e, 0xc9, 0x46, 0x8c, 0xe2, 0xcb} +12:05:31.819:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 01. p2: 00, constdata: +12:05:32.246:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 01020a000000000000000a000000000000000200 +12:05:32.320:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 0000000001 +12:05:32.356:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 0000000000ea30557015d289deaa32dd01 +12:05:32.415:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 03. p2: 00, constdata: 06416374696f6e1c566f746520666f722046494f20426c6f636b2070726f647563657273 +12:05:32.758:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 07. p2: 01, constdata: +12:05:32.798:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000001200 +12:05:32.854:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000000200 +12:05:32.913:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 05. p2: 00, constdata: 17030000000000000000ffffffff00000000 +12:05:32.953:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 1e +12:05:33.008:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722031 +12:05:33.480:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722032 +12:05:33.869:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722033 +12:05:34.280:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722034 +12:05:34.655:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722035 +12:05:35.057:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722036 +12:05:35.453:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722037 +12:05:35.823:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722038 +12:05:36.307:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a50726f64756365722039 +12:05:36.667:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203130 +12:05:37.102:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203131 +12:05:37.460:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203132 +12:05:37.933:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203133 +12:05:38.342:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203134 +12:05:38.711:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203135 +12:05:39.158:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203136 +12:05:39.542:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203137 +12:05:39.941:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203138 +12:05:40.329:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203139 +12:05:40.737:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203230 +12:05:41.141:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203231 +12:05:41.538:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203232 +12:05:41.915:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203233 +12:05:42.306:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203234 +12:05:42.691:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203235 +12:05:43.075:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203236 +12:05:43.539:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203237 +12:05:43.943:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203238 +12:05:44.333:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203239 +12:05:44.758:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050b50726f6475636572203330 +12:05:45.171:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a46494f2048616e646c65 +12:05:45.543:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000001200 +12:05:45.589:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 10030000000000000000ffffffffffffff7f05074d617820666565 +12:05:45.938:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 06. p2: 00, constdata: +12:05:45.999:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 000000000000000000000000000000000000000000000000000000000000000000 +12:05:46.047:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 10. p2: 00, constdata: +12:05:46.352:seproxyhal: printf: Integrity check for: {0x4a, 0xde, 0x67, 0x61, 0x5f, 0xa6, 0x74, 0x60, 0xa0, 0x70, 0x9b, 0x9e, 0x81, 0x0f, 0x54, 0x76, 0xe8, 0x6a, 0xed, 0x5b, 0xaa, 0xbc, 0x04, 0x96, 0xc1, 0x5d, 0xeb, 0x28, 0xf5, 0x7c, 0xa5, 0x25} +12:05:47.506:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 01. p2: 00, constdata: +12:05:47.973:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 01020a000000000000000a000000000000000200 +12:05:48.052:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 0000000001 +12:05:48.086:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 0000000000ea30550000f09ddeaa32dd01 +12:05:48.121:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 03. p2: 00, constdata: 06416374696f6e0b50726f787920766f746573 +12:05:48.475:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 07. p2: 01, constdata: +12:05:48.527:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000001200 +12:05:48.588:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000000200 +12:05:48.626:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 05. p2: 00, constdata: 17030000000000000000ffffffff00000000 +12:05:48.684:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050550726f7879 +12:05:49.069:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040204000000000000004100000000000000050a46494f2048616e646c65 +12:05:49.487:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000001200 +12:05:49.550:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 10030000000000000000ffffffffffffff7f05074d617820666565 +12:05:50.005:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 06. p2: 00, constdata: +12:05:50.058:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 000000000000000000000000000000000000000000000000000000000000000000 +12:05:50.110:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 10. p2: 00, constdata: +12:05:50.473:seproxyhal: printf: Integrity check for: {0xf8, 0x4d, 0xac, 0xa3, 0xb0, 0x93, 0xa7, 0x32, 0x47, 0x21, 0x4c, 0x7e, 0xf1, 0xfb, 0x99, 0x0a, 0xb5, 0x4f, 0xf0, 0x6b, 0x9d, 0x3b, 0x69, 0xac, 0x73, 0xd9, 0x91, 0xf9, 0xdf, 0x79, 0x54, 0x4c} +12:05:51.495 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ testEnd() // snapshots/signTransactionOtherEosio +12:05:55.279 vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv testStart() // snapshots/signTransactionOtherFioOracle +12:05:55.886:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 01. p2: 00, constdata: +12:05:56.332:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 01020a000000000000000a000000000000000200 +12:05:56.373:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 0000000001 +12:05:56.407:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 00808ac85c0aa85b00c07446d254cde501 +12:05:56.460:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 03. p2: 00, constdata: 06416374696f6e0f577261702046494f20446f6d61696e +12:05:56.903:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 07. p2: 01, constdata: +12:05:56.951:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000001200 +12:05:57.000:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000000200 +12:05:57.055:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 05. p2: 00, constdata: 17030000000000000000ffffffff00000000 +12:05:57.100:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040202000000000000003f00000000000000050a46494f20446f6d61696e +12:05:57.588:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040202000000000000000b00000000000000050a436861696e20636f6465 +12:05:58.072:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040201000000000000000400000001000000050e5075626c69632041646472657373 +12:05:58.439:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 10030000000000000000ffffffffffffff7f050e4d6178206f7261636c6520666565 +12:05:58.830:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 10030000000000000000ffffffffffffff7f05074d617820666565 +12:05:59.262:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0402010000000000000004000000010000000200 +12:05:59.313:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000001200 +12:05:59.362:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 06. p2: 00, constdata: +12:05:59.402:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 000000000000000000000000000000000000000000000000000000000000000000 +12:05:59.465:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 10. p2: 00, constdata: +12:05:59.847:seproxyhal: printf: Integrity check for: {0x15, 0x20, 0xa0, 0x1b, 0x8c, 0x14, 0xc1, 0x46, 0x2c, 0xe2, 0xcb, 0x55, 0x20, 0x7c, 0xef, 0xba, 0x6d, 0x77, 0x56, 0x5f, 0xec, 0xe1, 0xbf, 0xe9, 0x0a, 0x60, 0xf9, 0xa2, 0xe1, 0x2d, 0x33, 0xf8} +12:06:01.076:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 01. p2: 00, constdata: +12:06:01.574:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 01020a000000000000000a000000000000000200 +12:06:01.624:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 0000000001 +12:06:01.673:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 00808ac85c0aa85b00009e0ad25ccde501 +12:06:01.708:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 03. p2: 00, constdata: 06416374696f6e0b5772617020546f6b656e73 +12:06:02.126:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 07. p2: 01, constdata: +12:06:02.170:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000001200 +12:06:02.221:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000000200 +12:06:02.261:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 05. p2: 00, constdata: 17030000000000000000ffffffff00000000 +12:06:02.315:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 10030000000000000000ffffffffffffff7f0506416d6f756e74 +12:06:02.678:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040202000000000000000b00000000000000050a436861696e20636f6465 +12:06:03.078:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 040201000000000000000400000001000000050e5075626c69632041646472657373 +12:06:03.473:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 10030000000000000000ffffffffffffff7f050e4d6178206f7261636c6520666565 +12:06:03.801:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 10030000000000000000ffffffffffffff7f05074d617820666565 +12:06:04.188:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0402010000000000000004000000010000000200 +12:06:04.249:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 04. p2: 00, constdata: 0102080000000000000008000000000000001200 +12:06:04.292:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 06. p2: 00, constdata: +12:06:04.327:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 02. p2: 00, constdata: 000000000000000000000000000000000000000000000000000000000000000000 +12:06:04.369:seproxyhal: printf: [integrityCheckProcessInstruction:322] p1: 10. p2: 00, constdata: +12:06:04.765:seproxyhal: printf: Integrity check for: {0x97, 0xb8, 0xd1, 0xc4, 0x89, 0x18, 0x9b, 0xbc, 0xcb, 0xc6, 0xb1, 0x8e, 0x54, 0x0c, 0xba, 0x73, 0x37, 0xd2, 0xe3, 0x8f, 0x04, 0x3e, 0x98, 0xad, 0xb9, 0x7e, 0x6d, 0xba, 0xaa, 0xae, 0xef, 0xa0} +12:06:06.421 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ testEnd() // snapshots/signTransactionOtherFioOracle + diff --git a/doc/design_doc.md b/doc/design_doc.md index 19f6b28c..5e57f158 100644 --- a/doc/design_doc.md +++ b/doc/design_doc.md @@ -37,7 +37,7 @@ Generally the response from the app looks like this: |**size (B)**| variable | 1 | 1 | where `SW1 SW2` represents the return code. -Known error codes are: +Error codes are: - 0x9000 = OK - see [src/errors.h](../src/errors.h) for the full listing of other errors @@ -62,7 +62,13 @@ Instructions related to public keys/addresses Instructions related to transaction signing -- `0x21` [Sign Transaction](ins_sign_tx.md) +- `0x20` [Sign Transaction](ins_sign_tx.md) + +### `INS=0x3*` group + +Instructions related to DH decryption + +- `0x30` [Decrypt shared secret](ins_decrypt.md) ### `INS=0xF*` group @@ -74,4 +80,4 @@ Instructions related to debug mode of the app. These instructions *must not* be In order to ensure safe forward compatibility, sender *must* set any *unused* field to zero. When upgrading protocol, any unused field that is no longer unused *must* define only values != 0. This will ensure that clients using old protocol will receive errors instead of an unexpected behavior. -❓(VL): Do we want to force clients to check app version (mis)match, e.g. by having an explicit handshake? A custom (non `ledgerjs`-based) client app might omit version checks which might lead to potential problems + diff --git a/doc/ins_decode.md b/doc/ins_decode.md new file mode 100644 index 00000000..2e1e2e30 --- /dev/null +++ b/doc/ins_decode.md @@ -0,0 +1,92 @@ +# decode shared secret + +**Description** + +Decrypt shared secret. Decryption of shared secret spanns several APDU commands. + +**Command 1** + +| Field | Value | +| ----- | -------- | +| CLA | `0xD7` | +| INS | `0x30` | +| P1 | `0x01` | +| P2 | unused | +| Lc | data | + +Data contains part of the encrypted data (after base64 decoding). This command can be sent multiple times, but reasonably, it should be used at most twice at this moment (the longest addmissible message has length 324 bytes after base 64 decoding). + +**Command 2** + +| Field | Value | +| ----- | -------------------------------------------- | +| CLA | `0xD7` | +| INS | `0x30` | +| P1 | `0x02` | +| P2 | `0x01` for newfundsreq; `0x02` for recordobt | +| Lc | data | + +Data decoding. + +**Command 2 Data** + +| Field | Length | Comments | +| --------------------------------- | ------ | ---------------------------------- | +| Other public key | 65 | Pub key | +| BIP32 path len | 1 | min 2, max 10 | +| First derivation index | 4 | Little endian. Must be 44' | +| Second derivation index | 4 | Little endian. Must be 235' | +| (optional) Third derivation index | 4 | Little endian | +| ... | ... | ... | +| (optional) Last derivation index | 4 | Little endian | +| (optional) No. of remaining keys | 4 | Little endian | + +Ledger will will process only certain paths, other paths will be rejected by app policy (see Ledger responsibilities section). + +**Command 3** + +| Field | Value | +| ----- | -------| +| CLA | `0xD7` | +| INS | `0x30` | +| P1 | `0x03` | +| P2 | unused | +| Lc | unused | + +Sends remaining decoded data. You need to send this message even if the data + +**Response** + +| Field | Length | Comments | +| ---------------------------------------- | -------- |------------------------------------ | +| total length of the whole message | 2 | Little endian | +| length of the second part of the message | 1 | | +| decoded message (first part) | variable | Length according to the field above | + +**Errors (SW codes)** + +- `0x9000` OK +- `0x6E10` Request rejected by app policy +- `0x6E09` Request rejected by user +- for more errors, see [src/errors.h](../src/errors.h) + +**Ledger responsibilities** + +- Check: + - check P1 is valid + - check P2 is valid + - check data is valid: + - `Lc >= 66` (we have public key and path_len) + - `65 + 1 + path_len * 4 == Lc` + - check if public key is valid + - check derivation path is valid and within FIO BIP32 space + - `path_len == 5` + - `path[0] == 44'` (' means hardened) + - `path[1] == 235'` + - `path[2] == 0'` + - `path[3] == 0` + - Ledger might impose more restrictions, see implementation of `policyForDecodeDHDecode` in [src/securityPolicy.c](../src/securityPolicy.c) for details +- validate that decoded message confirms to format imposed by newfundsreq / recordobt content structure +- display relevant decoded fields +- after confirmation respond with decoded message + diff --git a/doc/ins_get_public_key.md b/doc/ins_get_public_key.md index 2f66ae14..09294749 100644 --- a/doc/ins_get_public_key.md +++ b/doc/ins_get_public_key.md @@ -21,21 +21,21 @@ The public key and derivation path will be shown either way if the derivation pa | Field | Length | Comments | | --------------------------------- | ------ | ---------------------------------- | | BIP32 path len | 1 | min 2, max 10 | -| First derivation index | 4 | Big endian. Must be 44' | -| Second derivation index | 4 | Big endian. Must be 235' | -| (optional) Third derivation index | 4 | Big endian | +| First derivation index | 4 | Little endian. Must be 44' | +| Second derivation index | 4 | Little endian. Must be 235' | +| (optional) Third derivation index | 4 | Little endian | | ... | ... | ... | -| (optional) Last derivation index | 4 | Big endian | -| (optional) No. of remaining keys | 4 | Big endian | +| (optional) Last derivation index | 4 | Little endian | +| (optional) No. of remaining keys | 4 | Little endian | -Ledger will will process only certain paths, other paths will be rejected by app policy (see Ledger responsibilities section). +Ledger will process only certain paths, other paths will be rejected by app policy (see Ledger responsibilities section). **Response** -| Field | Length | -| ----------- | ------ | -| pub_key | 65 | -| pub_key_WIF | 53 | +| Field | Length | +| ------------ | ------ | +| pub_key | 65 | +| pub_key_hash | 32 | **Errors (SW codes)** diff --git a/doc/ins_sign_tx.md b/doc/ins_sign_tx.md index 7b6b7381..bd6161b7 100644 --- a/doc/ins_sign_tx.md +++ b/doc/ins_sign_tx.md @@ -4,10 +4,15 @@ Construct and sign a transaction (returns just the signature). -Due to Ledger constraints and potential security implications (parsing errors), FIO Ledger app uses a custom format for streaming the transaction to be signed. The main rationale behind is the following: -1) Serializing is easier than parsing. This is true especially if transaction chunks would not be aligned with processing (e.g., inputs/outputs arbitrarily split between multiple APDUs). This also allows a potentially smaller memory footprint on the device. -2) SignTx communication protocol is more extensible in the future. -3) Potential security improvement --- because SignTx does not output the serialized transaction, only the witnesses, the host app is responsible for serializing the transaction itself. Any serialization mismatch between host and Ledger would result in a transaction which is rejected by nodes. +For FIO app main use cases it is instrumental that the app is as small as possible, while we need to have >20 different workflows for various actions. To accomplish this we designed several commands to serialize transaction while displaying (or not) parts of it. Each command is divided into constant part and variable part. Constant parts of the commands are used to calculate integrity hash by concatenating integrity hash of the previous command with constant parts of current command to produce new integrity hash. This process creates a Merkle tree and at every critical step (signing transaction, finishing DH encryption) we compare the integrity hash to one stored in the app. This guarantees that to get ether a signature or encrypted message, the constant parts of theinstructions and the ordering of the instructions have to match exactly. + +For the list of allowed command sequences, see [List of allowed command sequences](allowed_command_sequences.md) + +The main rationale behind is the following: +1) This approach reduces app size. The app size is almost constant while we add new features. +2) Decreases memory footprint (and no need to use flash memory). We never store whole transaction on the device. The data arrives in natural chunks. +3) Communication protocol is easily extensible in the future. +4) Potential security improvement --- because SignTx does not output the serialized transaction, only the witnesses, the host app is responsible for serializing the transaction itself. Any serialization mismatch between host and Ledger would result in a transaction which is rejected by nodes. **SignTx Limitations** @@ -19,160 +24,405 @@ The communication protocol is designed to *ease* the Ledger App implementation ( Given these requirements in mind, here is how transaction signing works: -## Signing +## General command structure -Transaction signing consists of an exchange of several APDUs. During this exchange, Ledger keeps track of its current internal state, so APDU messages have to be sent in the order of increasing P1 values, and the entities in the transaction body are serialized in the same order as the messages are received. The Ledger maintains an internal state and refuses to accept APDU messages that are out of place by aborting the transaction being signed. +**Command** -**General command** +| Field | Value | +| ----- | -------- | +| CLA | `0xD7` | +| INS | `0x20` | +| P1 | command | +| P2 | variable | +| Lc | variable | -|Field|Value| -|-----|-----| -| CLA | `0xD7` | -| INS | `0x21` | -| P1 | signing phase | -| P2 | (specific for each subcall) | +**Data** -The phases must follow in sequence, each call exactly once. Ledger is computing the rolling hash of the serialized transaction. +| Field | Length | Comments | +| ----------------------| -------- | ----------------------------------- | +| Constant data length | 1 | | +| Variable data length | 1 | | +| Constant data | variable | Length matches constant data length | +| Variable data | variable | Length matches variable data length | -### Initialize signing +Ledger will will process only certain paths, other paths will be rejected by app policy (see Ledger responsibilities section). -Initializes signing request. +**Return value** -**Command** +FINISH command returns signature and serialized transaction hash. +All other commands either do return nothing, or if we are within DH-encoded sections return finished blocks encoded by Diffie-Hellman. -|Field|Value| -|-----|-----| -| P1 | `0x01` | -| P2 | unused | -*Data* +## List of commands -|Field| Length | Comments| -|------|-----|-----| -| chainId | 32 | | +| Command | P1 | Brief description | +| ----------------------- |------- |-------------------------------------------------------| +| INIT | `0x01` | Initiates transaction signing | +| APPEND_CONST_DATA | `0x02` | Appends constant data do the transaction | +| SHOW_MESSAGE | `0x03` | Show message on ledger screen | +| APPEND_DATA | `0x04` | Append variable data to the transaction | +| START_COUNTED_SECTION | `0x05` | Initiates transaction section of given length | +| END_COUNTED_SECTION | `0x06` | Ends transaction section of given length | +| STORE_VALUE | `0x07` | Store value into a register | +| DH_START | `0x08` | Starts transaction section encrypted by shared secret | +| DH_END | `0x09` | Ends transaction section encrypted by shared secret | +| FINISH | `0x10` | Finishes and signs the transaction | -*Serialization* -Serializes chainId as it is. +### INIT -### Transaction header +| Field | Value | +| ------|--------- | +| P1 | `0x01` | +| P2 | unused | -|Field|Value| -|-----|-----| -| P1 | `0x02` | -| P2 | unused | +**Constant data** -*Data* +| Field | Length | Comments | +| --------------------------------- | ------ | ----------------------------------- | +| (none) | | | -|Field| Length | Comments| -|-----|--------|--------| -| Expiration | 4 | time_t, little endian | -| Ref block num | 2 | little endian | -| Ref block prefix | 4 | little endian | +**Variable data** -*Serialization* +| Field | Length | Comments | +| --------------------------------- | -------| ---------------------------------- | +| Chain ID | 32 | Must be mainnet or testnet chainId | +| BIP32 path len | 1 | min 2, max 10 | +| First derivation index | 4 | Little endian. Must be 44' | +| Second derivation index | 4 | Little endian. Must be 235' | +| (optional) Third derivation index | 4 | Little endian | +| ... | ... | ... | +| (optional) Last derivation index | 4 | Little endian | +| (optional) No. of remaining keys | 4 | Little endian | + +**Ledger actions** + +- Validate Chain Id +- Validate derivation path, ledger accepts only certain derivation paths (see [src/securityPolicy.c](../src/securityPolicy.c)) +- Appends Chain Id to the transaction (includes counted section validation update) +- Display chain to the user +- Initialize integrity validation + +### APPEND_CONST_DATA + +| Field | Value | +| ------|--------- | +| P1 | `0x02` | +| P2 | unused | -Converts all three integer to big endian for serialization. Then it adds 4 zero bytes which stand for `max_net_usage_words`, `max_cpu_usage_ms`, `delay_sec`, and number of context-free actions. +**Constant data** +| Field | Length | Comments | +| --------------------------------- | -------- | ----------------------------------- | +| Data to append to transaction | variable | | -### Action header +**Variable data** -**Command** +| Field | Length | Comments | +| --------------------------------- | ------ | ----------------------------------- | +| (none) | | | -|Field|Value| -|-----|-----| -| P1 | `0x03` | -| P2 | unused | +**Ledger actions** -*Data* +- Appends data to the transaction (includes counted section validation update and possible DH encoding) +- Continue integrity validation -|Field| Length | Comments| -|-----|--------|--------| -| Contract, Account, Name | 16 | serialized as they go into the transaction | +### SHOW_MESSAGE -Ledger knows and recognizes the constant and asigns correct action to it. +| Field | Value | +| ------|--------- | +| P1 | `0x03` | +| P2 | unused | -*Serialization* +**Constant data** -Adds one byte with value 1, this stands for one action. 16 bytes from APDU data follows. +| Field | Length | Comments | +| --------------------------------- | -------- | ----------------------------------- | +| Key Len | 1 | | +| Key | variable | | +| Value Len | 1 | | +| Value | variable | | +**Variable data** -### Action Authorization +| Field | Length | Comments | +| --------------------------------- | ------ | ----------------------------------- | +| (none) | | | -**Command (top-level output data)** +**Ledger actions** -|Field|Value| -|-----|-----| -| P1 | `0x04` | -| P2 | unused | +- Display the message +- Continue integrity validation -*Data* +### APPEND_DATA + +| Field | Value | +| ------|--------- | +| P1 | `0x04` | +| P2 | unused | -|Field| Length | Comments| -|-----|--------|--------| -| Actor | 8 | Serialized as `name`| -| Permission | 8 | Serialized as `name`| +**Constant data** -*Serialization* +| Field | Length | Comments | +| --------------------------------- | -------- | ------------------------------------------ | +| Value Format | 1 | NAME, STRING, UINT64 | +| ValueValidation | 1 | NONE, LENGTH, EQUALS_STORED | +| ValueValidationArg 1 | 8 | | +| ValueValidationArg 2 | 8 | | +| Policy and storage | 1 | higher 4 bits storage, lower 4 bits policy | +| Key length | 1 | | +| Key | variable | | -Adds one byte with value 1, this stands for one authorization. Actor and Permission follow (8+8 bytes). +Value formats: +- VALUE_FORMAT_BUFFER_SHOW_AS_HEX = 0x01 +- VALUE_FORMAT_ASCII_STRING = 0x02, +- VALUE_FORMAT_NAME = 0x03: Special FIO name format. To be converted to string before display +- VALUE_FORMAT_ASCII_STRING_WITH_LENGTH = 0x04: String prefixed with VarUInt length +- VALUE_FORMAT_FIO_AMOUNT = 0x10: FIO currency amount stored as UINT64 +- VALUE_FORMAT_UINT64 = 0x14, +- VALUE_FORMAT_VARUINT32 = 0x17, +- VALUE_FORMAT_MEMO_HASH = 0x20: Special mode for showing memo or hash and offline url. + Format: + - has memo 1 byte (0x00/0x01) followed by memo string with length (as in VALUE_FORMAT_ASCII_STRING_WITH_LENGTH), string length 1-127. + - has hash 1 byte (0x00/0x01) followed by hash string with length (as in VALUE_FORMAT_ASCII_STRING_WITH_LENGTH), string length 0-127. + - has offline_url 1 byte (0x00/0x01) followed by offline_url string with length (as in VALUE_FORMAT_ASCII_STRING_WITH_LENGTH), string length 0-127. + The value has to have either memo, or hash and offline_url. Hash and offline_url cannot be of max length at the same time because of APDU buffer size. The purpose of this instruction is to save several APDUs and to limit the number of allowed command sequences. +- VALUE_FORMAT_CHAIN_CODE_TOKEN_CODE_PUBLIC_ADDR = 0x21: Special mode for showing chain code, token code and public address as one entry. + Format: + - Token code (as in VALUE_FORMAT_ASCII_STRING_WITH_LENGTH) + - Chain code (as in VALUE_FORMAT_ASCII_STRING_WITH_LENGTH) + - Public address (as in VALUE_FORMAT_ASCII_STRING_WITH_LENGTH) + +Value validation: -### Action Data +- VALUE_VALIDATION_NONE = 0x01 +- VALUE_VALIDATION_INBUFFER_LENGTH = 0x02: Validates that the length of value is between ValueValidationArg 1 and ValueValidationArg 2 +- VALUE_VALIDATION_NUMBER = 0x03: Value has to be a number (VALUE_FIO_AMOUNT, VALUE_UINT64, VALUE_FORMAT_VARUINT32). Validates that the numeric value is between ValueValidationArg1 and ValueValidationArg2 -As of now, only Transfer FIO tokens action is implemented. +Storage bites: -|Field|Value| -|-----|-----| -| P1 | `0x05` | -| P2 | unused | +Storage is used to guarantee that certain elements in the transaction match. Storage has three registers of variable sizes (see store value calls). +- VALUE_STORAGE_CHECK_NO = 0x00: No check with storage +- VALUE_STORAGE_CHECK_R1 = 0x10: Checks value equality with R1 +- VALUE_STORAGE_CHECK_R2 = 0x20: Checks value equality with R2 +- VALUE_STORAGE_CHECK_R3 = 0x30: Checks value equality with R3 +- VALUE_STORAGE_CHECK_R1_DECODE_NAME = 0x40: Checks value equality with R1 converted from name to string. -*Data* -We add trailing zeroes to the string. Thus APDU data length will be Data length (as it goes to the transaction) +3. This is for two trailing 0's and data length field. +**Variable data** -|Field| Length | Comments| -|-----|--------|--------| -| Data length | 1 | Length of the action data in the transaction| -| Pubkey length | 1 | | -| Pubkey | Pubkey length | | -| 0 | 1 | Pubkey trailing `0` | -| Amount | 8 | little endian in SUFs | -| Fee | 8 | little endian in SUFs | -| Actor | 8 | Serialized as `name`, must match Action authorization `actor` | -| tpid length | 1 | | -| tpid | tpid length | | -| 0 | 1 | Tpid trailing `0` | +| Field | Length | Comments | +| --------------------------------- | -------- | ----------------------------------- | +| Value | variable | | -For both pubkey and tpid we have both length and trailing 0. The reason for this is that it makes the code on ledger slightly easier, while it has very little impact on JS code. +**Ledger actions** -*Serialization* +- Parse and validate the value +- Validate storage +- Append value to tx (includes counted section validation update and possible DH encoding) +- Display key and parsed value(s) if policy requires it +- Continue integrity validation -The data are serialized as in APDU, except: -- the two trailing 0's are omitted -- amount and fee are converted to big endian. -The Data length field must be equal to the length of the rest of serialized data. -### Compute witnesses +### START_COUNTED_SECTION -Given a valid BIP44 path, sign TxHash by Ledger. Return the hash and the signature. -The caller is responsible for assembling the actual witness. +Counted sections append a VARINT to the transaction and then validate that the total length of buffers appended to the transaction between START_COUNTED_SECTION and END_COUNTED_SECTION matches the value. Matching pairs of commands have to be both either outside or within DH encrypted segment. Note that DH encoding modifies the length of what is appended to the transaction so counted section takes this into account. -**Command** +| Field | Value | +| ------|--------- | +| P1 | `0x05` | +| P2 | unused | + +**Constant data** + +| Field | Length | Comments | +| --------------------------------- | -------- | ------------------------------------------ | +| Value Format | 1 | NAME, STRING, UINT64 | +| ValueValidation | 1 | NONE, LENGTH, EQUALS_STORED | +| ValueValidationArg1 | 8 | | +| ValueValidationArg2 | 8 | | + +Value formats: +- VALUE_FORMAT_FIO_AMOUNT = 0x10: FIO currency amount stored as UINT64 +- VALUE_FORMAT_UINT64 = 0x14, +- VALUE_FORMAT_VARUINT32 = 0x17, + +Value validation: +See APPEND_DATA instruction + +**Variable data** + +| Field | Length | Comments | +| --------------------------------- | -------- | ----------------------------------- | +| Value | variable | | + +**Ledger actions** + +- Checks if the limit on nested counted section was not surpassed (MAX_NESTED_COUNTED_SECTIONS = 5) +- Parse and validate the value +- Append value to tx (includes counted section validation update and possible DH encoding) +- Initiate new counted section validation (Value itself does not count into the new counted section) +- Continue integrity validation + + +### END_COUNTED_SECTION + +| Field | Value | +| ------|--------- | +| P1 | `0x06` | +| P2 | unused | + +**Constant data** + +| Field | Length | Comments | +| --------------------------------- | ------ | ----------------------------------- | +| (none) | | | + +**Variable data** + +| Field | Length | Comments | +| --------------------------------- | -------- | ----------------------------------- | +| Value | variable | | + +**Ledger actions** + +- Validate that the number of bytes appended matches the expected value given in matching START_COUNTED_SECTION. +- Continue integrity validation + + +### STORE_VALUE + +Stores Value into one of the registers. APPEND_DATA may compare its value with the register. This mechanism allows to guarantee match of certain transaction elements. + +| Field | Value | +| ------|------------------------------ | +| P1 | `0x07` | +| P2 | register to use: 1, 2, or 3 | + +Registers 1 and 2 have 8 bytes. Register 3 has 64 bytes. Together with the value we also store its length. + +**Constant data** + +| Field | Length | Comments | +| --------------------------------- | ------ | ----------------------------------- | +| (none) | | | + +**Variable data** + +| Field | Length | Comments | +| --------------------------------- | ------ | ----------------------------------- | +| (none) | | | -|Field|Value| -|-----|-----| -| P1 | `0x10` | -| P2 | unused | -| data | BIP44 path. See [GetExtPubKey call](ins_get_public_key.md) for a format example | +**Ledger actions** -*Serialization* +- Validate that the value fits into selected register. +- Store value into selected register +- Continue integrity validation -Adds 33 empty bytes. This stands for extension points (1 byte) and context-free data (32 bytes). + +### DH_START + +Starts Diffie-Hellman encrypted block. + +| Field | Value | +| ------|--------- | +| P1 | `0x08` | +| P2 | unused | + +**Constant data** + +| Field | Length | Comments | +| --------------------------------- | ------ | ----------------------------------- | +| (none) | | | + +**Variable data** + +| Field | Length | Comments | +| --------------------------------- | ------ | ----------------------------------- | +| DH encryption (their) pubkey | 65 | | + +**Ledger actions** + +- Continue integrity validation +- Show that DH encrypted section is starting +- Parse, store and show DH pubkey +- Validate that DH encryption is not active and activate it (and guarantee that counted sections take DH into account) +- Derive and wipe out AES key +- Securely create the initialization vector (IV) +- Return encrypted blocks that were finished during AES initialization. + +Note that all commands within DH encrypted section that append value to the transaction have to: +- Initiate and wipe out AES key +- Instead of appending the data to the transaction, append them to DH encryption, and append the finished blocks to the transaction +- Return finished blocks +Also note that partial DH encrypted cypher text is of no cryptographic use before final HMAC is sent (which is only done at the end ). + + +### DH_END + +Ends Diffie-Hellman encrypted block. + +| Field | Value | +| ------|--------- | +| P1 | `0x09` | +| P2 | unused | + +**Constant data** + +| Field | Length | Comments | +| --------------------------------- | ------ | ----------------------------------- | +| (none) | | | + +**Variable data** + +| Field | Length | Comments | +| --------------------------------- | ------ | ----------------------------------- | +| (none) | | | + + +**Ledger actions** + +- Continue integrity validation +- Validate the integrity hash against the list of known hashes +- Validate that DH encryption active and deactivate it (and guarantee that counted sections take DH into account) +- Derive and wipe out AES key +- Finish DH encryption +- Ask for confirmation before returning final blocks (containing HMAC) +- Return final encrypted blocks that were finished during AES initialization + + +### FINISH + +| Field | Value | +| ------|--------- | +| P1 | `0x10` | +| P2 | unused | + +**Constant data** + +| Field | Length | Comments | +| --------------------------------- | ------ | ----------------------------------- | +| (none) | | | + +**Variable data** + +| Field | Length | Comments | +| --------------------------------- | ------ | ----------------------------------- | +| (none) | | | + +**Ledger actions** + +- Validate that DH is not active and there is no running counted section +- Continue integrity validation +- Validate the integrity hash against the list of known hashes +- Request confirmation to sign the transaction +- Return the signature and hash **Response** -|Field|Length| Comments| -|-----|-----|-----| -| Signature |65| Witness signature.| -| Hash |32| Serialized Tx hash.| +| Field | Length | Comments | +| --------- | ------ | ------------------ | +| Signature | 65 | Witness signature | +| Hash | 32 | Serialized Tx hash | + diff --git a/doc/security/security_doc.md b/doc/security/security_doc.md new file mode 100644 index 00000000..1f5c97e7 --- /dev/null +++ b/doc/security/security_doc.md @@ -0,0 +1,220 @@ +# FIO Ledger App security documentation + +For purpose of this documentation we divide the app into following parts: +- Main app +- Common components +- Simple calls (getSerial, getVersion, runTests) +- Get public key call +- DecodeDH call +- Sign transaction call + +## Main app + +- `handlers.c/h` +Lookup handler function. +Tests: Speculos tests for respective calls +Change: Add decode_handleAPDU handler + +- `menu*.c/h` +Menu. +Testing: Manual on device test +No change + +- `state.c/h` +App state. +Security concerns: +- It is important to wipe out the state when new APDU sequence is initiated. (handled by main.c) +Testing: Speculos tests for respective calls +Change: Add state for DH decoding + +- `main.c` +Main app +Security concerns: +- Wipe out app state when new APDU sequence is initiated +- Terminate APDU sequence in case of an error (so that the state is wiped out). +Testing: Speculos tests for respective calls +Change: Minor cleanup + + +## Common components + +The files in this section offer services to the rest of the app. + +- `assert.c/h` +Introduces assert function and macros. +Testing: Speculos tests for respective calls +No modification. + +- `bip44.c/h` +Types and function working with BIP44 derivation paths +Testing: Unit tests present +Change: LE to BE transition + +- `common.h` +Header to be included in many source files +No modification. + +- `diffieHellman.c/h` +Diffie-Hellman key derivation, encoding, and decoding function and related types. +Encoding works as a stream with two buffers. One buffer is for DH encoding itself, second buffer is for base64 encoding. Decoding occurs in one go. +Security concerns: +- Wipe out intermediate secrets even in the case of failure +- Callers must wipe out retrieved secrets even in the case of failure +Testing: This files have unit tests covering all aspects of their functionality +These files are new. + +- `eos_utils.c/h` +Helpers for FIO signature calculation / conversion. +Security concerns: +- Functions use cryptographicaly sensitive data, but do not create any new secrets/coppies of secrets. +- Caller is responsible for wiping out the secrets provided to these functions. +Testing: Speculos tests for signTx calls +No modification. + +- `errors.h` +List of error codes +Change: New error codes for integrity check and HMAC validation failure. + +- `fio.c/h` +FIO chain helper functions. +Testing: Speculos tests for signTx calls +Minor cleanup. + +- `glyphs.c/h` +Generated files containing icons + +- `hash.h` +Hash calculation helper functions. +Testing: Speculos tests for signTx calls (including DH encryption) +Change: Added SHA-512. + +- `hexUtils.c/h` +Hex encoding and decoding. +Testing: Covered by unit tests. +Change: Formatting change. + +- `io.c/h` +IO helper functions +Testing: Speculos tests for various calls +No change + +- `keyDerivation.c/h` +Key derivation functions +Security concerns: +- Wipe out intermediate secrets even in the case of failure +- Callers must wipe out retrieved secrets even in the case of failure +Testing: This files have unit tests +Minor cleanup. + +- `securityPolicy.c/h` +Defines security policies for all relevant aspects of the app +Change: Policies modified doe to app changes with the focus on cryptographicaly sensitive events. + +- `testUtils.h` +Test utils. +No change. + +- `textUtils.c/h` +Text utils +Testing: Unit tests present +Change: Formatting change. + +- `uiElements.h` +Helpers to declare UI elements +No change. + +- `uiHelpers*.c/h` +Helpers for UI steps declaration +Change: wipes out the value to be returned in case of reject. + +- `uiScreens.c/h` +Helpers for displaying UI screens. +Testing: Speculos tests for various calls +Minor cleanup. + +- `utils.h` +Defines various macros used in the code. +Testing: Speculos tests for various calls +Change: New MARK_UNUSED_NO_DEVEL macro, formatting. + + +## Simple calls (getSerial, getVersion, runTests) + +- `getSerial.c/h` +Get serial call +Testing: Speculos tests for getSerial call +No change + +- `getVersion.c/h` +Get version call +Testing: Speculos tests for getVersion call +No change + +- `runTests.c/h` +Run tests call. +Testing: For DEVEL mode only, unit tests are ran in Speculos. +Changes: Add new unit tests: run_diffieHellman_test(), run_integrityCheck_test(), run_countedSection_test(), remove endian unit tests (functions were removed) + + +## Get public key call + +- `getPublicKey.c/h` +Get public key call. To store data `instructionState.getKeyContext` is used (see `state.h`). +Testing: Speculos tests for getPublicKey call +New debugging printouts. + + +## DecodeDH call + +- `decodeDH.c/h` +Decode DH call. To store data `instructionState.decodeContext` (`*ctx`) is used (see `state.h`). +The call is served using multi APDU sequence. +- APDUs with `P1=0x01` are used to receive data and store it into `ctx->buffer`. Further APDUs extend the buffer. +- APDU with `P1=0x02` asks for decodes the message and shows its content (interpretation depending on `P2`) and asks for confirmation. +- APDUs with `P1=0x03` the device to send next chunk of decoded data. +Security concerns: +- Wipe out secrets. For decoding, all secrets are handled solely by`diffieHellman.c/h`. +- Wipe out the decoded buffer in case user rejects sending the decoded message or in case of an error. +Testing: Speculos tests for decodeDH call +New file + + +## Sign transaction call + +- `signTransaction*.c/h` +See [Sign Transaction](security_sign.md) + + +## C source files index + +References to where source files are covered: +- `assert.c/h` - Common components +- `bip44.c/h` - Common components +- `common.h` - Common components +- `decodeDH.c/h`- Decode call +- `diffieHellman.c/h`- Common components +- `eos_utils.c/h` - Common components +- `errors.h` - Common components +- `fio.c/h` - Common components +- `getPublicKey.c/h` - Get public key call +- `getSerial.c/h` - Simple calls +- `getVersion.c/h` - Simple calls +- `glyphs.c/h` - Common components +- `handlers.c/h` - Main app +- `hash.h` - Common components +- `hexUtils.c/h` - Common components +- `io.c/h` - Common components +- `keyDerivation.c/h` - Common components +- `main.c` - Main app +- `menu*.c/h` - Main app +- `runTests.c/h` - simple calls +- `securityPolicy.c/h` - Common components +- `signTransaction*.c/h` - Sign transaction call +- `state.c/h` - Main app +- `testUtils.h` - Common components +- `textUtils.c/h` - Common components +- `uiElements.h` - Common components +- `uiHelpers*.c/h` - Common components +- `uiScreens.c/h` - Common components +- `utils.h` - Common components + diff --git a/doc/security/security_sign.md b/doc/security/security_sign.md new file mode 100644 index 00000000..838c3d6f --- /dev/null +++ b/doc/security/security_sign.md @@ -0,0 +1,183 @@ +# FIO Ledger App Sign transaction call security documentation + +For purpose of this documentation we divide the call source into following parts: +- App integrity component +- Parsing component +- Counted section component +- MAIN HANDLER +- INIT and FINISH subcalls +- APPEND_CONST_DATA subcall +- SHOW_MESSAGE subcall +- STORE_VALUE subcall +- APPEND_DATA subcall +- Counted section subcalls +- DH subcalls + +Sign transaction is a multiAPDU call. The call sequence starts with an INIT call and ends with FINISH call. Between these calls, there may be an arbitrary sequence of calls, however, paired commands have to match(`START COUNTED SECTION`-`END COUNTED SECTION`, `START DH ENCODING`- `END DH ENCODING`). That is if we replace counted section commands with `(` and `)`, DH commands with `[` and `]`, and remove other commands, we need to obtain a correct parentheses-bracket sequence. + +Each command has constant part and variable part. There is a list of allowed command sequences (`../allowed_command_sequences.md`). Constant part of the command must be constant within the command sequence (this includes P1, P2), variable parts may vary, thus only constant parts of the commands are documented. + +The app uses the mechanism of integrity hashes (see app integrity component) to validate that the command sequence is allowed. Init initializes integirity component and each subsequent call sends its constant data to the integrity component. On cryptographically important occasions, integrity components compares its state with a list of known states to validate that thw whole previous command sequence is correct. The occasions are: +- `END DH ENCODING` subcall - This subcall finishes DH encoding and produces final HMAC. Note that without HMAC, the part of encoded message is of no cryptographic use. Thus it is OK to return parts of encoded H message without integrity validation (and also without confirmation). +- `FINISH` subcall - We produce signature only if a correct sequence of commands was executed. + + +## App integrity component + +The integrity check component is implemented in`signTransactionIntegrity.c/h`. +The integrity check component works as a linear Merkle tree using SHA-256. + +`integrityCheckInit` - Initiates integrity context. sets hash to `0`'s. This corresponds to the leaf of the Merkle tree +`integrityCheckProcessInstruction` - Takes current integrity hash, concatenates it with p1, p2, constant data length, and constant data. Note that this concatenation is injective. Then calculates hash of the result. Thanks to SHA-256 second preimage resistance and the injectivity of the concatenation, it is not feasible to construct the resulting hash in a different way. +`integrityCheckEvaluate` - Verifies, if current hash is among the known list of integrity hashes (known Merkle tree roots). + +Security consideration: +- First APDU in a sequence must initialize integrity check with `integrityCheckInit` (done by MAIN HANDLER). +- Each instruction (including `INIT`) must call `integrityCheckProcessInstruction` (done by MAIN HANDLER). +- `END DH ENCODING` and `FINISH` must call `integrityCheckEvaluate` after calling `integrityCheckProcessInstruction` (done by END DH ENCODING and FINISH). + +Testing: This component is covered by a unit test validating most aspects of its functionality. +The component is new. + + +## Counted section component + +The counted section component is implemented in`signTransactionCountedSection.c/h`. +On many places, transaction contains length of the next element (which may be a sting or a more complex structure). Counted sections are created to guarantee that the length of the element matches the length appended to the transaction. + +Counted section component does not directly handle issues arising from DH encoded sections. Counted sections inside DH encoded section need to count data before DH encoding, and those that include DH encoded section must calculate the encoded data length. We achieve this behavior by "fixing" the length difference using `countedSectionProcess` call when handling END DH ENCODING subcall. + +`countedSectionInit` - Initializes counted section variable +`countedSectionBegin` - Starts new counted section +`countedSectionProcess` - Adds given number of bytes to all currently running counted section +`countedSectionEnd` - Finishes topmost counted section. Validates that its length matches the sum of lengths given in `countedSectionProcess` calls. +`countedSectionFinalize` - Validates that all counted sections are finished + +Security consideration: +- First APDU in sequence must call `integrityCheckInit` (done by MAIN HANDLER). +- All other calls must use `countedSectionBegin`/ `countedSectionProcess` / `countedSectionEnd` to guarantee transaction integrity. +- Allowed APDU sequences must be defined in such a way that there is a bijection from resulting transaction to variable data in respective calls + - This is attained by fixing length of everything that goes into the transaction (either due to the fact that the length is constant or due to being in a counted section). + - See `allowed_command_sequences.md` and `ledferjs-fio/src/interactions/transactionTemplates/` for command sequences description. +- FINISH must call `countedSectionFinalize` (done by FINISH) + +Testing: This component is covered by a unit test validating most aspects of its functionality. +The component is new. + + +## Parsing component + +The counted section component is implemented in `signTransactionParse.c/h`. +This component parses and validates data given in various formats. +Testing: This component is tested as part of integration tests as they the functions present are used to parse various transaction elements. +The component is new. + + +## MAIN HANDLER + +This covers `MISC` and `MAIN HANDLER` sections of `signTransaction.c/h`. + +- `lookup_subhandler` - Finds correct subhandler given the value of `P1`. +- `signTransaction_handleAPDU` + - Initiates everything if the call is new. + - Integrity variable + - Counted section variable + - Storage variable + - Validates and splits input to constant and variable parts + - Updates integrity check +- `processShaAndPosibleDHAndPrepareResponse` - Helper function to update rolling hash of the transaction. This includes possible DH encoding if we are within DH encoded section (this includes calculating the difference of DH encrypted data and plain data, so we can adjust counted sections once we leave DH encoded section). +- `prepareOurPubkeyForDisplay` - Helper function to get our public key in a readable format. +- `signTx_ui_runStep_simple` - Defines simple and reusable UI screen sequence. It uses `ctx->key` and `ctx->value` as the source of data/ + +Testing: This component is tested as part of integration tests. +The component is new. + + +## INIT and FINISH subcalls + +This covers `INIT` and `FINISH` sections of `signTransaction.c/h`. + +Testing: Primary test for this part is `signTransactionCommandsBasic.js` Speculos test. +- `INIT` subcall must + - Parse derivation path and chain. + - Show chain to the user. +- `FINISH` subcall must + - Validate command sequence integrity + - Validate that there are no running counted sections + - Validate that DH encoded section is not running + - Display public key used to sign the transaction + - Ask user for confirmation before sending the response +The component is new. + + +## APPEND_CONST_DATA subcall + +This covers `APPEND_CONST_DATA` section of `signTransaction.c/h`. + +Testing: Primary test for this part is `signTransactionCommandsBasic.js` Speculos test. +The component is new. + + +## SHOW_MESSAGE subcall + +This covers `SHOW_MESSAGE` section of `signTransaction.c/h`. + +Testing: Primary test for this part is `signTransactionCommandsBasic.js` Speculos test. +The component is new. + + +## STORE_VALUE subcall + +The app has three register variables. The purpose of this subcall is to write variable part of the instruction into one of the registers + +Testing: Primary test for this part is `signTransactionCommandsStorage.js` Speculos test. +The component is new. + + +## APPEND_DATA subcall + +Append data to transaction, parse, validate it, and possibly display it. This may include value validation again one of register variables. + +Testing: Primary test for this part is `signTransactionCommandsShowData.js` Speculos test. Various modes of function of this call is tested in Speculos transaction tests. +The component is new. + + +## Counted section subcalls + +This covers `START COUNTED SECTION` and `END COUNTED SECTION` sections of `signTransaction.c/h`. + +Testing: Primary test for this part is `signTransactionCommandsCountedSection.js` Speculos test. Various modes of function of this call is tested in Speculos transaction tests. +The component is new. + + +## DH subcalls + +This covers `START DH ENCODING` and `END DH ENCODING` sections of `signTransaction.c/h`. + +Security consideration: + - `END DH ENCODING` encoding must adjust the length of outstanding counted section for the different length of DH encoded data compared to plain data. + - `END DH ENCODING` must ask for confirmation before returning the last blocks (which include HMAC). + - `END DH ENCODING` must wipe out encoded buffer in case user rejects encoding. +Testing: Primary test for this part is `signTransactionCommandsDH.js` and `signTransactionCommandsDHAndCountedSections.js` +The component is new. + + +## C source files index + +- `signTransaction.c/h` - Source file divided into sections. + - `MISC`- Main handler + - `INIT` - INIT and FINISH subcalls + - `APPEND_CONST_DATA` - APPEND_CONST_DATA subcall + - `APPEND_DATA` - APPEND_DATA subcall + - `SHOW_MESSAGE` - SHOW_MESSAGE subcall + - `START COUNTED SECTION` - Counted section subcalls + - `END COUNTED SECTION` - Counted section subcalls + - `STORE_VALUE` - STORE_VALUE subcall + - `START DH ENCODING` - DH subcalls + - `END DH ENCODING` - DH subcalls + - `FINISH` - INIT and FINISH subcalls + - `MAIN HANDLER` - MAIN HANDLER +- `signTransactionCountedSections.c/h` - Counted section component +- `signTransactionIntegrity.c/h` - App integrity component +- `signTransactionParse.c/h` - Parsing component + diff --git a/fuzzing/CMakeLists.txt b/fuzzing/CMakeLists.txt index 30b31992..15aa9bd4 100644 --- a/fuzzing/CMakeLists.txt +++ b/fuzzing/CMakeLists.txt @@ -8,7 +8,7 @@ set(CMAKE_C_STANDARD 11) set(BOLOS_SDK $ENV{BOLOS_SDK}) add_compile_definitions(IO_HID_EP_LENGTH=64) -add_compile_definitions(HAVE_ECC HAVE_HASH HAVE_HMAC HAVE_SHA256 HAVE_RIPEMD160 HAVE_ECDSA HAVE_ECC_WEIERSTRASS HAVE_SECP256K1_CURVE ) +add_compile_definitions(HAVE_ECC HAVE_HASH HAVE_HMAC HAVE_SHA256 HAVE_SHA512 HAVE_AES HAVE_ECDH HAVE_RNG HAVE_RIPEMD160 HAVE_ECDSA HAVE_ECC_WEIERSTRASS HAVE_SECP256K1_CURVE DEVEL NO_INTEGRITY_CHECK HEADLESS) include_directories(. ../src "${BOLOS_SDK}/include" @@ -36,10 +36,10 @@ set(APP_SRC_DIR "../src") add_definitions( -DAPPNAME="FIO" - -DMAJOR_VERSION=0 + -DMAJOR_VERSION=1 -DMINOR_VERSION=0 - -DPATCH_VERSION=2 - -DAPPVERSION="0.0.2" + -DPATCH_VERSION=6 + -DAPPVERSION="1.0.6" -DOS_IO_SEPROXYHAL -DIO_SEPROXYHAL_BUFFER_SIZE_B=128 @@ -61,43 +61,51 @@ add_definitions( ) set(APP_SOURCES - ${APP_SRC_DIR}/handlers.h - ${APP_SRC_DIR}/handlers.c - ${APP_SRC_DIR}/getVersion.h - ${APP_SRC_DIR}/getVersion.c ${APP_SRC_DIR}/assert.h ${APP_SRC_DIR}/assert.c - ${APP_SRC_DIR}/utils.h - ${APP_SRC_DIR}/getSerial.h - ${APP_SRC_DIR}/getSerial.c + ${APP_SRC_DIR}/bip44.h + ${APP_SRC_DIR}/bip44.c + ${APP_SRC_DIR}/decodeDH.h + ${APP_SRC_DIR}/decodeDH.c + ${APP_SRC_DIR}/diffieHellman.h + ${APP_SRC_DIR}/diffieHellman.c + ${APP_SRC_DIR}/eos_utils.h + ${APP_SRC_DIR}/eos_utils.c + ${APP_SRC_DIR}/fio.h + ${APP_SRC_DIR}/fio.c ${APP_SRC_DIR}/getPublicKey.h ${APP_SRC_DIR}/getPublicKey.c + ${APP_SRC_DIR}/getSerial.h + ${APP_SRC_DIR}/getSerial.c + ${APP_SRC_DIR}/getVersion.h + ${APP_SRC_DIR}/getVersion.c + ${APP_SRC_DIR}/hash.h + ${APP_SRC_DIR}/handlers.h + ${APP_SRC_DIR}/handlers.c + ${APP_SRC_DIR}/hexUtils.h + ${APP_SRC_DIR}/hexUtils.c + ${APP_SRC_DIR}/keyDerivation.h + ${APP_SRC_DIR}/keyDerivation.c + ${APP_SRC_DIR}/securityPolicy.h + ${APP_SRC_DIR}/securityPolicy.c ${APP_SRC_DIR}/signTransaction.h ${APP_SRC_DIR}/signTransaction.c - ${APP_SRC_DIR}/uiHelpers.h - ${APP_SRC_DIR}/uiHelpers.c + ${APP_SRC_DIR}/signTransactionCountedSection.h + ${APP_SRC_DIR}/signTransactionCountedSection.c + ${APP_SRC_DIR}/signTransactionIntegrity.h + ${APP_SRC_DIR}/signTransactionIntegrity.c + ${APP_SRC_DIR}/signTransactionParse.h + ${APP_SRC_DIR}/signTransactionParse.c ${APP_SRC_DIR}/state.h ${APP_SRC_DIR}/state.c - ${APP_SRC_DIR}/bip44.h - ${APP_SRC_DIR}/bip44.c - ${APP_SRC_DIR}/uiHelpers.h - ${APP_SRC_DIR}/uiHelpers.c - ${APP_SRC_DIR}/securityPolicy.h - ${APP_SRC_DIR}/securityPolicy.c - ${APP_SRC_DIR}/keyDerivation.h - ${APP_SRC_DIR}/keyDerivation.c ${APP_SRC_DIR}/textUtils.h ${APP_SRC_DIR}/textUtils.c - ${APP_SRC_DIR}/endian.h + ${APP_SRC_DIR}/uiHelpers.h + ${APP_SRC_DIR}/uiHelpers.c ${APP_SRC_DIR}/uiHelpers_nanos.c - ${APP_SRC_DIR}/eos_utils.h - ${APP_SRC_DIR}/eos_utils.c ${APP_SRC_DIR}/uiScreens.h ${APP_SRC_DIR}/uiScreens.c - ${APP_SRC_DIR}/fio.h - ${APP_SRC_DIR}/fio.c - ${APP_SRC_DIR}/hexUtils.h - ${APP_SRC_DIR}/hexUtils.c + ${APP_SRC_DIR}/utils.h ) add_executable(fuzz_message diff --git a/fuzzing/corpus/decode_1 b/fuzzing/corpus/decode_1 new file mode 100644 index 00000000..b168489f Binary files /dev/null and b/fuzzing/corpus/decode_1 differ diff --git a/fuzzing/corpus/decode_2 b/fuzzing/corpus/decode_2 new file mode 100644 index 00000000..6681d4ae Binary files /dev/null and b/fuzzing/corpus/decode_2 differ diff --git a/fuzzing/corpus/decode_3 b/fuzzing/corpus/decode_3 new file mode 100644 index 00000000..029b4e1c Binary files /dev/null and b/fuzzing/corpus/decode_3 differ diff --git a/fuzzing/corpus/get_pubkey b/fuzzing/corpus/get_pubkey index c6526428..3c4fa716 100644 Binary files a/fuzzing/corpus/get_pubkey and b/fuzzing/corpus/get_pubkey differ diff --git a/fuzzing/corpus/sign_1 b/fuzzing/corpus/sign_1 index 12147263..7eed16a4 100644 Binary files a/fuzzing/corpus/sign_1 and b/fuzzing/corpus/sign_1 differ diff --git a/fuzzing/corpus/sign_10 b/fuzzing/corpus/sign_10 new file mode 100644 index 00000000..4e13951d Binary files /dev/null and b/fuzzing/corpus/sign_10 differ diff --git a/fuzzing/corpus/sign_2 b/fuzzing/corpus/sign_2 index a56c8bfb..fea7a2d7 100644 Binary files a/fuzzing/corpus/sign_2 and b/fuzzing/corpus/sign_2 differ diff --git a/fuzzing/corpus/sign_3 b/fuzzing/corpus/sign_3 index f45457a1..646e188b 100644 Binary files a/fuzzing/corpus/sign_3 and b/fuzzing/corpus/sign_3 differ diff --git a/fuzzing/corpus/sign_4 b/fuzzing/corpus/sign_4 index 5d3bc213..b6ebacb7 100644 Binary files a/fuzzing/corpus/sign_4 and b/fuzzing/corpus/sign_4 differ diff --git a/fuzzing/corpus/sign_5 b/fuzzing/corpus/sign_5 index 9ba26cf3..73f8b0a4 100644 Binary files a/fuzzing/corpus/sign_5 and b/fuzzing/corpus/sign_5 differ diff --git a/fuzzing/corpus/sign_6 b/fuzzing/corpus/sign_6 index 4e4d6252..b8dbcc14 100644 Binary files a/fuzzing/corpus/sign_6 and b/fuzzing/corpus/sign_6 differ diff --git a/fuzzing/corpus/sign_7 b/fuzzing/corpus/sign_7 new file mode 100644 index 00000000..76c839ff Binary files /dev/null and b/fuzzing/corpus/sign_7 differ diff --git a/fuzzing/corpus/sign_8 b/fuzzing/corpus/sign_8 new file mode 100644 index 00000000..9bb5fdb9 Binary files /dev/null and b/fuzzing/corpus/sign_8 differ diff --git a/fuzzing/corpus/sign_9 b/fuzzing/corpus/sign_9 new file mode 100644 index 00000000..e0ef81a4 Binary files /dev/null and b/fuzzing/corpus/sign_9 differ diff --git a/fuzzing/fuzz_fio.c b/fuzzing/fuzz_fio.c index 8dfb62e2..1ebf75bc 100644 --- a/fuzzing/fuzz_fio.c +++ b/fuzzing/fuzz_fio.c @@ -1,25 +1,49 @@ #include "handlers.h" +#include "state.h" #include +#include + +static const int INS_NONE = -1; + typedef struct { uint8_t cla; uint8_t ins; uint8_t p1; uint8_t p2; - uint8_t lc; + uint8_t lc; //will be ignored } header_t; int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) { // The size of the data should exceed the length of the header if (Size >= sizeof(header_t)){ header_t * header = (header_t *) Data; - uint8_t* data = (uint8_t *)(Data + sizeof(*header)); + size_t data_size = Size - sizeof(*header); + + printf("%hhx, %hhx, %hhx, %hhx\n", header->cla, header->ins, header->p1, header->p2); + + BEGIN_TRY { + TRY { + handler_fn_t* handlerFn = lookupHandler(header->ins); + + VALIDATE(handlerFn != NULL, ERR_UNKNOWN_INS); + printf("Hander found\n"); + + explicit_bzero(&instructionState, SIZEOF(instructionState)); + currentInstruction = header->ins; - handler_fn_t* handlerFn = lookupHandler(header->ins); - handlerFn(header->p1, header->p2, data, header->lc, true); + printf("Running handler\n"); + handlerFn(header->p1, header->p2, data, data_size, true); + } + CATCH_OTHER(e) { + } + FINALLY { + } + END_TRY; + } } return 0; -} \ No newline at end of file +} diff --git a/fuzzing/os_mocks.c b/fuzzing/os_mocks.c index 3233b60f..3bb01173 100644 --- a/fuzzing/os_mocks.c +++ b/fuzzing/os_mocks.c @@ -1,6 +1,7 @@ #include "cx.h" unsigned char G_io_apdu_buffer[260]; +unsigned int app_stack_canary = 0xDEAD0031; void os_longjmp(unsigned int exception) { longjmp(try_context_get()->jmp_buf, exception); @@ -112,6 +113,49 @@ cx_err_t cx_ripemd160_init_no_throw(cx_ripemd160_t *hash){ return CX_OK; } +cx_err_t cx_ecdh_no_throw(const cx_ecfp_private_key_t *pvkey, + uint32_t mode, + const uint8_t * P, + size_t P_len, + uint8_t * secret, + size_t secret_len) { + return CX_OK; +} + +cx_err_t cx_sha512_init_no_throw(cx_sha512_t *hash) { + return CX_OK; +} + +cx_err_t cx_aes_init_key_no_throw(const uint8_t *rawkey, size_t key_len, cx_aes_key_t *key) { + return CX_OK; +} + +cx_err_t cx_hmac_update(cx_hmac_t *hmac, const uint8_t *in, size_t in_len) { + return CX_OK; +} + +cx_err_t cx_aes_enc_block(const cx_aes_key_t *key, const uint8_t *inblock, uint8_t *outblock) { + return CX_OK; +} + +cx_err_t cx_hmac_final(cx_hmac_t *ctx, uint8_t *out, size_t *out_len) { + return CX_OK; +} + +cx_err_t cx_aes_dec_block(const cx_aes_key_t *key, const uint8_t *inblock, uint8_t *outblock) { + return CX_OK; +} + +void cx_rng_no_throw(uint8_t *buffer, size_t len) { +} + +void handleRunTests(uint8_t p1, + uint8_t p2, + uint8_t *wireBuffer, + size_t wireSize, + bool isNewCall) { +} + void os_perso_derive_node_bip32 ( cx_curve_t curve, const unsigned int * path, unsigned int pathLength, unsigned char * privateKey, unsigned char * chain ) {} void ui_idle(void) {} @@ -150,4 +194,9 @@ bool device_is_unlocked() { void *pic(void *link_address) { return link_address; -} \ No newline at end of file +} + +typedef void timeout_callback_fn_t(bool ux_allowed); +void nanos_set_timer(int ms, timeout_callback_fn_t* cb) { +} + diff --git a/icon_fio_stax.png b/icon_fio_stax.png new file mode 100644 index 00000000..e4cdc734 Binary files /dev/null and b/icon_fio_stax.png differ diff --git a/icon_fio_stax_large.png b/icon_fio_stax_large.png new file mode 100644 index 00000000..5bc3a5d7 Binary files /dev/null and b/icon_fio_stax_large.png differ diff --git a/ledger_app.toml b/ledger_app.toml new file mode 100644 index 00000000..adc922d3 --- /dev/null +++ b/ledger_app.toml @@ -0,0 +1,5 @@ +[app] +build_directory = "./" +sdk = "C" +devices = ["nanos", "nanox", "nanos+"] + diff --git a/ledgerjs-fio/package-lock.json b/ledgerjs-fio/package-lock.json deleted file mode 100644 index 63759448..00000000 --- a/ledgerjs-fio/package-lock.json +++ /dev/null @@ -1,9993 +0,0 @@ -{ - "name": "ledgerjs-hw-app-fio", - "version": "3.2.0", - "lockfileVersion": 2, - "requires": true, - "packages": { - "": { - "name": "ledgerjs-hw-app-fio", - "version": "3.2.0", - "license": "Apache-2.0", - "dependencies": { - "@ledgerhq/hw-transport": "^5.12.0", - "@types/ledgerhq__hw-transport": "^4.21.3", - "base-x": "^3.0.5", - "bech32": "^1.1.4", - "wait-console-input": "^0.1.7" - }, - "devDependencies": { - "@fioprotocol/fiojs": "^1.0.1", - "@ledgerhq/hw-transport-node-hid": "^5.12.0", - "@types/chai": "^4.2.15", - "@types/chai-as-promised": "^7.1.3", - "@types/ledgerhq__hw-transport-node-hid": "^4.22.2", - "@types/mocha": "^8.2.1", - "@types/node": "^14.14.28", - "@typescript-eslint/eslint-plugin": "^4.15.0", - "@typescript-eslint/parser": "^4.15.0", - "bigi": "^1.4.2", - "bs58": "^4.0.1", - "chai": "^4.2.0", - "chai-as-promised": "^7.1.1", - "chalk": "^4.0.0", - "create-hmac": "^1.1.7", - "ecurve": "^1.0.6", - "eslint": "^7.19.0", - "eslint-import-resolver-typescript": "^2.3.0", - "eslint-plugin-import": "^2.22.1", - "eslint-plugin-mocha": "^8.0.0", - "eslint-plugin-prettier": "^3.3.1", - "eslint-plugin-simple-import-sort": "^7.0.0", - "eslint-plugin-typescript": "^0.14.0", - "flow-bin": "^0.149.0", - "flowgen": "^1.14.0", - "gh-pages": "^3.1.0", - "mocha": "^7.1.1", - "node-fetch": "^2.6.1", - "prettier": "^2.2.1", - "prettier-eslint": "^12.0.0", - "randombytes": "^2.1.0", - "text-encoding": "^0.7.0", - "ts-node": "^9.1.1", - "typedoc": "^0.21.9", - "typescript": "^4.1.5" - } - }, - "node_modules/@babel/code-frame": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", - "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", - "dev": true, - "dependencies": { - "@babel/highlight": "^7.10.4" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.14.9", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.9.tgz", - "integrity": "sha512-pQYxPY0UP6IHISRitNe8bsijHex4TWZXi2HwKVsjPiltzlhse2znVcm9Ace510VT1kxIHjGJCZZQBX2gJDbo0g==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", - "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", - "dev": true, - "dependencies": { - "@babel/helper-validator-identifier": "^7.14.5", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@eslint/eslintrc": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz", - "integrity": "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==", - "dev": true, - "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.1.1", - "espree": "^7.3.0", - "globals": "^13.9.0", - "ignore": "^4.0.6", - "import-fresh": "^3.2.1", - "js-yaml": "^3.13.1", - "minimatch": "^3.0.4", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/@eslint/eslintrc/node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@fioprotocol/fiojs": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@fioprotocol/fiojs/-/fiojs-1.0.1.tgz", - "integrity": "sha512-+rxJ/ynUkox/DO3ihHPpAc//DDI+DQvrphLqwRKufw0atC3GKluGR2qMTeO45O0UjorvOIw6esuuG7NpbVUm8Q==", - "dev": true, - "dependencies": { - "ajv": "^6.10.2", - "babel-runtime": "6.26.0", - "bigi": "^1.4.2", - "browserify-aes": "^1.2.0", - "bs58": "^4.0.1", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "ecurve": "^1.0.6", - "long": "^4.0.0", - "randombytes": "^2.1.0", - "text-encoding": "0.7.0" - } - }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz", - "integrity": "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==", - "dev": true, - "dependencies": { - "@humanwhocodes/object-schema": "^1.2.0", - "debug": "^4.1.1", - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=10.10.0" - } - }, - "node_modules/@humanwhocodes/object-schema": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.0.tgz", - "integrity": "sha512-wdppn25U8z/2yiaT6YGquE6X8sSv7hNMWSXYSSU1jGv/yd6XqjXgTDJ8KP4NgjTXfJ3GbRjeeb8RTV7a/VpM+w==", - "dev": true - }, - "node_modules/@ledgerhq/devices": { - "version": "5.51.1", - "resolved": "https://registry.npmjs.org/@ledgerhq/devices/-/devices-5.51.1.tgz", - "integrity": "sha512-4w+P0VkbjzEXC7kv8T1GJ/9AVaP9I6uasMZ/JcdwZBS3qwvKo5A5z9uGhP5c7TvItzcmPb44b5Mw2kT+WjUuAA==", - "dependencies": { - "@ledgerhq/errors": "^5.50.0", - "@ledgerhq/logs": "^5.50.0", - "rxjs": "6", - "semver": "^7.3.5" - } - }, - "node_modules/@ledgerhq/errors": { - "version": "5.50.0", - "resolved": "https://registry.npmjs.org/@ledgerhq/errors/-/errors-5.50.0.tgz", - "integrity": "sha512-gu6aJ/BHuRlpU7kgVpy2vcYk6atjB4iauP2ymF7Gk0ez0Y/6VSMVSJvubeEQN+IV60+OBK0JgeIZG7OiHaw8ow==" - }, - "node_modules/@ledgerhq/hw-transport": { - "version": "5.51.1", - "resolved": "https://registry.npmjs.org/@ledgerhq/hw-transport/-/hw-transport-5.51.1.tgz", - "integrity": "sha512-6wDYdbWrw9VwHIcoDnqWBaDFyviyjZWv6H9vz9Vyhe4Qd7TIFmbTl/eWs6hZvtZBza9K8y7zD8ChHwRI4s9tSw==", - "dependencies": { - "@ledgerhq/devices": "^5.51.1", - "@ledgerhq/errors": "^5.50.0", - "events": "^3.3.0" - } - }, - "node_modules/@ledgerhq/hw-transport-node-hid": { - "version": "5.51.1", - "resolved": "https://registry.npmjs.org/@ledgerhq/hw-transport-node-hid/-/hw-transport-node-hid-5.51.1.tgz", - "integrity": "sha512-Y2eVCCdhVs2Lfr7N2x2cNb+ogcZ24ZATO4QxaQ7LogjiPwYmzmvuXFn8zFjMSrKUCn9CtbptXcuiu0NkGsjWlw==", - "dev": true, - "dependencies": { - "@ledgerhq/devices": "^5.51.1", - "@ledgerhq/errors": "^5.50.0", - "@ledgerhq/hw-transport": "^5.51.1", - "@ledgerhq/hw-transport-node-hid-noevents": "^5.51.1", - "@ledgerhq/logs": "^5.50.0", - "lodash": "^4.17.21", - "node-hid": "2.1.1", - "usb": "^1.7.0" - } - }, - "node_modules/@ledgerhq/hw-transport-node-hid-noevents": { - "version": "5.51.1", - "resolved": "https://registry.npmjs.org/@ledgerhq/hw-transport-node-hid-noevents/-/hw-transport-node-hid-noevents-5.51.1.tgz", - "integrity": "sha512-9wFf1L8ZQplF7XOY2sQGEeOhpmBRzrn+4X43kghZ7FBDoltrcK+s/D7S+7ffg3j2OySyP6vIIIgloXylao5Scg==", - "dev": true, - "dependencies": { - "@ledgerhq/devices": "^5.51.1", - "@ledgerhq/errors": "^5.50.0", - "@ledgerhq/hw-transport": "^5.51.1", - "@ledgerhq/logs": "^5.50.0", - "node-hid": "2.1.1" - } - }, - "node_modules/@ledgerhq/logs": { - "version": "5.50.0", - "resolved": "https://registry.npmjs.org/@ledgerhq/logs/-/logs-5.50.0.tgz", - "integrity": "sha512-swKHYCOZUGyVt4ge0u8a7AwNcA//h4nx5wIi0sruGye1IJ5Cva0GyK9L2/WdX+kWVTKp92ZiEo1df31lrWGPgA==" - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@types/chai": { - "version": "4.2.21", - "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.2.21.tgz", - "integrity": "sha512-yd+9qKmJxm496BOV9CMNaey8TWsikaZOwMRwPHQIjcOJM9oV+fi9ZMNw3JsVnbEEbo2gRTDnGEBv8pjyn67hNg==", - "dev": true - }, - "node_modules/@types/chai-as-promised": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/@types/chai-as-promised/-/chai-as-promised-7.1.4.tgz", - "integrity": "sha512-1y3L1cHePcIm5vXkh1DSGf/zQq5n5xDKG1fpCvf18+uOkpce0Z1ozNFPkyWsVswK7ntN1sZBw3oU6gmN+pDUcA==", - "dev": true, - "dependencies": { - "@types/chai": "*" - } - }, - "node_modules/@types/eslint-visitor-keys": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz", - "integrity": "sha512-OCutwjDZ4aFS6PB1UZ988C4YgwlBHJd6wCeQqaLdmadZ/7e+w79+hbMUFC1QXDNCmdyoRfAFdm0RypzwR+Qpag==", - "dev": true - }, - "node_modules/@types/json-schema": { - "version": "7.0.9", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz", - "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==", - "dev": true - }, - "node_modules/@types/json5": { - "version": "0.0.29", - "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", - "integrity": "sha1-7ihweulOEdK4J7y+UnC86n8+ce4=", - "dev": true - }, - "node_modules/@types/ledgerhq__hw-transport": { - "version": "4.21.4", - "resolved": "https://registry.npmjs.org/@types/ledgerhq__hw-transport/-/ledgerhq__hw-transport-4.21.4.tgz", - "integrity": "sha512-vep+6yZnGv6owAthIY0w3f72w4dJIb4+yE5PCHveInTlZE9wukvU6Wc5Eig0OUUxcdhTazzeZx1xUaNVLqyQSg==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/ledgerhq__hw-transport-node-hid": { - "version": "4.22.2", - "resolved": "https://registry.npmjs.org/@types/ledgerhq__hw-transport-node-hid/-/ledgerhq__hw-transport-node-hid-4.22.2.tgz", - "integrity": "sha512-b9dXYEZ8Iijv20LykEVhbThVzSjchMpvj8y/mSsCSP1n7Ncs+YqD8mjEV/bGTks9jAP8CdxhRqOGq+h47/4B9g==", - "dev": true, - "dependencies": { - "@types/ledgerhq__hw-transport": "*", - "@types/node": "*", - "@types/node-hid": "*" - } - }, - "node_modules/@types/mocha": { - "version": "8.2.3", - "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-8.2.3.tgz", - "integrity": "sha512-ekGvFhFgrc2zYQoX4JeZPmVzZxw6Dtllga7iGHzfbYIYkAMUx/sAFP2GdFpLff+vdHXu5fl7WX9AT+TtqYcsyw==", - "dev": true - }, - "node_modules/@types/node": { - "version": "14.17.12", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.17.12.tgz", - "integrity": "sha512-vhUqgjJR1qxwTWV5Ps5txuy2XMdf7Fw+OrdChRboy8BmWUPkckOhphaohzFG6b8DW7CrxaBMdrdJ47SYFq1okw==" - }, - "node_modules/@types/node-hid": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@types/node-hid/-/node-hid-1.3.1.tgz", - "integrity": "sha512-VPxuGDCoDxOUKrTZPSok7IEmiK4cVLfj8Csu09FtG5uF+eqf1HETERHXQkO02Rk6j6YiiHxp0/DA9R4llvhEzQ==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@typescript-eslint/eslint-plugin": { - "version": "4.30.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.30.0.tgz", - "integrity": "sha512-NgAnqk55RQ/SD+tZFD9aPwNSeHmDHHe5rtUyhIq0ZeCWZEvo4DK9rYz7v9HDuQZFvn320Ot+AikaCKMFKLlD0g==", - "dev": true, - "dependencies": { - "@typescript-eslint/experimental-utils": "4.30.0", - "@typescript-eslint/scope-manager": "4.30.0", - "debug": "^4.3.1", - "functional-red-black-tree": "^1.0.1", - "regexpp": "^3.1.0", - "semver": "^7.3.5", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "@typescript-eslint/parser": "^4.0.0", - "eslint": "^5.0.0 || ^6.0.0 || ^7.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/experimental-utils": { - "version": "4.30.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.30.0.tgz", - "integrity": "sha512-K8RNIX9GnBsv5v4TjtwkKtqMSzYpjqAQg/oSphtxf3xxdt6T0owqnpojztjjTcatSteH3hLj3t/kklKx87NPqw==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.7", - "@typescript-eslint/scope-manager": "4.30.0", - "@typescript-eslint/types": "4.30.0", - "@typescript-eslint/typescript-estree": "4.30.0", - "eslint-scope": "^5.1.1", - "eslint-utils": "^3.0.0" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "*" - } - }, - "node_modules/@typescript-eslint/experimental-utils/node_modules/@typescript-eslint/typescript-estree": { - "version": "4.30.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.30.0.tgz", - "integrity": "sha512-6WN7UFYvykr/U0Qgy4kz48iGPWILvYL34xXJxvDQeiRE018B7POspNRVtAZscWntEPZpFCx4hcz/XBT+erenfg==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "4.30.0", - "@typescript-eslint/visitor-keys": "4.30.0", - "debug": "^4.3.1", - "globby": "^11.0.3", - "is-glob": "^4.0.1", - "semver": "^7.3.5", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/experimental-utils/node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@typescript-eslint/experimental-utils/node_modules/eslint-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", - "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", - "dev": true, - "dependencies": { - "eslint-visitor-keys": "^2.0.0" - }, - "engines": { - "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - }, - "peerDependencies": { - "eslint": ">=5" - } - }, - "node_modules/@typescript-eslint/experimental-utils/node_modules/eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/@typescript-eslint/experimental-utils/node_modules/globby": { - "version": "11.0.4", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz", - "integrity": "sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==", - "dev": true, - "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.1.1", - "ignore": "^5.1.4", - "merge2": "^1.3.0", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@typescript-eslint/experimental-utils/node_modules/ignore": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", - "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/@typescript-eslint/parser": { - "version": "4.30.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.30.0.tgz", - "integrity": "sha512-HJ0XuluSZSxeboLU7Q2VQ6eLlCwXPBOGnA7CqgBnz2Db3JRQYyBDJgQnop6TZ+rsbSx5gEdWhw4rE4mDa1FnZg==", - "dev": true, - "dependencies": { - "@typescript-eslint/scope-manager": "4.30.0", - "@typescript-eslint/types": "4.30.0", - "@typescript-eslint/typescript-estree": "4.30.0", - "debug": "^4.3.1" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^5.0.0 || ^6.0.0 || ^7.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/typescript-estree": { - "version": "4.30.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.30.0.tgz", - "integrity": "sha512-6WN7UFYvykr/U0Qgy4kz48iGPWILvYL34xXJxvDQeiRE018B7POspNRVtAZscWntEPZpFCx4hcz/XBT+erenfg==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "4.30.0", - "@typescript-eslint/visitor-keys": "4.30.0", - "debug": "^4.3.1", - "globby": "^11.0.3", - "is-glob": "^4.0.1", - "semver": "^7.3.5", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/parser/node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@typescript-eslint/parser/node_modules/globby": { - "version": "11.0.4", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz", - "integrity": "sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==", - "dev": true, - "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.1.1", - "ignore": "^5.1.4", - "merge2": "^1.3.0", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@typescript-eslint/parser/node_modules/ignore": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", - "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/@typescript-eslint/scope-manager": { - "version": "4.30.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.30.0.tgz", - "integrity": "sha512-VJ/jAXovxNh7rIXCQbYhkyV2Y3Ac/0cVHP/FruTJSAUUm4Oacmn/nkN5zfWmWFEanN4ggP0vJSHOeajtHq3f8A==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "4.30.0", - "@typescript-eslint/visitor-keys": "4.30.0" - }, - "engines": { - "node": "^8.10.0 || ^10.13.0 || >=11.10.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/types": { - "version": "4.30.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.30.0.tgz", - "integrity": "sha512-YKldqbNU9K4WpTNwBqtAerQKLLW/X2A/j4yw92e3ZJYLx+BpKLeheyzoPfzIXHfM8BXfoleTdiYwpsvVPvHrDw==", - "dev": true, - "engines": { - "node": "^8.10.0 || ^10.13.0 || >=11.10.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/typescript-estree": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-3.10.1.tgz", - "integrity": "sha512-QbcXOuq6WYvnB3XPsZpIwztBoquEYLXh2MtwVU+kO8jgYCiv4G5xrSP/1wg4tkvrEE+esZVquIPX/dxPlePk1w==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "3.10.1", - "@typescript-eslint/visitor-keys": "3.10.1", - "debug": "^4.1.1", - "glob": "^7.1.6", - "is-glob": "^4.0.1", - "lodash": "^4.17.15", - "semver": "^7.3.2", - "tsutils": "^3.17.1" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/@typescript-eslint/types": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-3.10.1.tgz", - "integrity": "sha512-+3+FCUJIahE9q0lDi1WleYzjCwJs5hIsbugIgnbB+dSCYUxl8L6PwmsyOPFZde2hc1DlTo/xnkOgiTLSyAbHiQ==", - "dev": true, - "engines": { - "node": "^8.10.0 || ^10.13.0 || >=11.10.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/@typescript-eslint/visitor-keys": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-3.10.1.tgz", - "integrity": "sha512-9JgC82AaQeglebjZMgYR5wgmfUdUc+EitGUUMW8u2nDckaeimzW+VsoLV6FoimPv2id3VQzfjwBxEMVz08ameQ==", - "dev": true, - "dependencies": { - "eslint-visitor-keys": "^1.1.0" - }, - "engines": { - "node": "^8.10.0 || ^10.13.0 || >=11.10.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/visitor-keys": { - "version": "4.30.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.30.0.tgz", - "integrity": "sha512-pNaaxDt/Ol/+JZwzP7MqWc8PJQTUhZwoee/PVlQ+iYoYhagccvoHnC9e4l+C/krQYYkENxznhVSDwClIbZVxRw==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "4.30.0", - "eslint-visitor-keys": "^2.0.0" - }, - "engines": { - "node": "^8.10.0 || ^10.13.0 || >=11.10.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ansi-colors": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.3.tgz", - "integrity": "sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", - "dev": true, - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/aproba": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", - "dev": true - }, - "node_modules/are-we-there-yet": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", - "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", - "dev": true, - "dependencies": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" - } - }, - "node_modules/are-we-there-yet/node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/are-we-there-yet/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/are-we-there-yet/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/arg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "dev": true - }, - "node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/array-includes": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.3.tgz", - "integrity": "sha512-gcem1KlBU7c9rB+Rq8/3PPKsK2kjqeEBa3bD5kkQo4nYlOHQCJqIJFqBXDEfwaRuYTT4E+FxA9xez7Gf/e3Q7A==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.2", - "get-intrinsic": "^1.1.1", - "is-string": "^1.0.5" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array-union": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", - "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", - "dev": true, - "dependencies": { - "array-uniq": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/array-uniq": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", - "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/array.prototype.flat": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.4.tgz", - "integrity": "sha512-4470Xi3GAPAjZqFcljX2xzckv1qeKPizoNkiS0+O4IoPR2ZNpcjE0pkhdihlDouK+x6QOast26B4Q/O9DJnwSg==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/assertion-error": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", - "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/astral-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/async": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", - "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", - "dev": true, - "dependencies": { - "lodash": "^4.17.14" - } - }, - "node_modules/babel-runtime": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", - "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", - "dev": true, - "dependencies": { - "core-js": "^2.4.0", - "regenerator-runtime": "^0.11.0" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "node_modules/base-x": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.8.tgz", - "integrity": "sha512-Rl/1AWP4J/zRrk54hhlxH4drNxPJXYUaKffODVI53/dAsV4t9fBxyxYKAVPU1XBHxYwOWP9h9H0hM2MVw4YfJA==", - "dependencies": { - "safe-buffer": "^5.0.1" - } - }, - "node_modules/base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/bech32": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/bech32/-/bech32-1.1.4.tgz", - "integrity": "sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==" - }, - "node_modules/bigi": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/bigi/-/bigi-1.4.2.tgz", - "integrity": "sha1-nGZalfiLiwj8Bc/XMfVhhZ1yWCU=", - "dev": true - }, - "node_modules/binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/bindings": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", - "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", - "dev": true, - "dependencies": { - "file-uri-to-path": "1.0.0" - } - }, - "node_modules/bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", - "dev": true, - "dependencies": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/browser-stdout": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", - "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", - "dev": true - }, - "node_modules/browserify-aes": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", - "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", - "dev": true, - "dependencies": { - "buffer-xor": "^1.0.3", - "cipher-base": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.3", - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/bs58": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", - "integrity": "sha1-vhYedsNU9veIrkBx9j806MTwpCo=", - "dev": true, - "dependencies": { - "base-x": "^3.0.2" - } - }, - "node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "node_modules/buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true - }, - "node_modules/buffer-xor": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", - "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", - "dev": true - }, - "node_modules/call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/chai": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.4.tgz", - "integrity": "sha512-yS5H68VYOCtN1cjfwumDSuzn/9c+yza4f3reKXlE5rUg7SFcCEy90gJvydNgOYtblyf4Zi6jIWRnXOgErta0KA==", - "dev": true, - "dependencies": { - "assertion-error": "^1.1.0", - "check-error": "^1.0.2", - "deep-eql": "^3.0.1", - "get-func-name": "^2.0.0", - "pathval": "^1.1.1", - "type-detect": "^4.0.5" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/chai-as-promised": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/chai-as-promised/-/chai-as-promised-7.1.1.tgz", - "integrity": "sha512-azL6xMoi+uxu6z4rhWQ1jbdUhOMhis2PvscD/xjLqNMkv3BPPp2JyyuTHOrf9BOosGpNQ11v6BKv/g57RXbiaA==", - "dev": true, - "dependencies": { - "check-error": "^1.0.2" - }, - "peerDependencies": { - "chai": ">= 2.1.2 < 5" - } - }, - "node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/chalk/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/chalk/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/chalk/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/chalk/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/chalk/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/check-error": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", - "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/chokidar": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.3.0.tgz", - "integrity": "sha512-dGmKLDdT3Gdl7fBUe8XK+gAtGmzy5Fn0XkkWQuYxGIgWVPPse2CxFA5mtrlD0TOHaHjEUqkWNyP1XdHoJES/4A==", - "dev": true, - "dependencies": { - "anymatch": "~3.1.1", - "braces": "~3.0.2", - "glob-parent": "~5.1.0", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.2.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "optionalDependencies": { - "fsevents": "~2.1.1" - } - }, - "node_modules/chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", - "dev": true - }, - "node_modules/cipher-base": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", - "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", - "dev": true, - "dependencies": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/cliui": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", - "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", - "dev": true, - "dependencies": { - "string-width": "^3.1.0", - "strip-ansi": "^5.2.0", - "wrap-ansi": "^5.1.0" - } - }, - "node_modules/cliui/node_modules/ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/cliui/node_modules/strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "dependencies": { - "ansi-regex": "^4.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true - }, - "node_modules/common-tags": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.0.tgz", - "integrity": "sha512-6P6g0uetGpW/sdyUy/iQQCbFF0kWVMSIVSyYz7Zgjcgh8mgw8PQzDNZeyZ5DQ2gM7LBoZPHmnjz8rUthkBG5tw==", - "dev": true, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", - "dev": true - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true - }, - "node_modules/console-control-strings": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", - "dev": true - }, - "node_modules/core-js": { - "version": "2.6.12", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.12.tgz", - "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==", - "deprecated": "core-js@<3.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Please, upgrade your dependencies to the actual version of core-js.", - "dev": true, - "hasInstallScript": true - }, - "node_modules/core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", - "dev": true - }, - "node_modules/create-hash": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", - "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", - "dev": true, - "dependencies": { - "cipher-base": "^1.0.1", - "inherits": "^2.0.1", - "md5.js": "^1.3.4", - "ripemd160": "^2.0.1", - "sha.js": "^2.4.0" - } - }, - "node_modules/create-hmac": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", - "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", - "dev": true, - "dependencies": { - "cipher-base": "^1.0.3", - "create-hash": "^1.1.0", - "inherits": "^2.0.1", - "ripemd160": "^2.0.0", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, - "node_modules/create-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", - "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", - "dev": true - }, - "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/cross-spawn/node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/debug": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", - "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/decompress-response": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-4.2.1.tgz", - "integrity": "sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw==", - "dev": true, - "dependencies": { - "mimic-response": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/deep-eql": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", - "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", - "dev": true, - "dependencies": { - "type-detect": "^4.0.0" - }, - "engines": { - "node": ">=0.12" - } - }, - "node_modules/deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "dev": true, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/deep-is": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", - "dev": true - }, - "node_modules/define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", - "dev": true, - "dependencies": { - "object-keys": "^1.0.12" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/delegates": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", - "dev": true - }, - "node_modules/detect-libc": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", - "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=", - "dev": true, - "bin": { - "detect-libc": "bin/detect-libc.js" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/diff": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", - "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", - "dev": true, - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/dir-glob/node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/dlv": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", - "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", - "dev": true - }, - "node_modules/doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ecurve": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/ecurve/-/ecurve-1.0.6.tgz", - "integrity": "sha512-/BzEjNfiSuB7jIWKcS/z8FK9jNjmEWvUV2YZ4RLSmcDtP7Lq0m6FvDuSnJpBlDpGRpfRQeTLGLBI8H+kEv0r+w==", - "dev": true, - "dependencies": { - "bigi": "^1.1.0", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/email-addresses": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/email-addresses/-/email-addresses-3.1.0.tgz", - "integrity": "sha512-k0/r7GrWVL32kZlGwfPNgB2Y/mMXVTq/decgLczm/j34whdaspNrZO8CnXPf1laaHxI6ptUlsnAxN+UAPw+fzg==", - "dev": true - }, - "node_modules/emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", - "dev": true - }, - "node_modules/end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dev": true, - "dependencies": { - "once": "^1.4.0" - } - }, - "node_modules/enquirer": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", - "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", - "dev": true, - "dependencies": { - "ansi-colors": "^4.1.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/enquirer/node_modules/ansi-colors": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, - "dependencies": { - "is-arrayish": "^0.2.1" - } - }, - "node_modules/es-abstract": { - "version": "1.18.5", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.5.tgz", - "integrity": "sha512-DDggyJLoS91CkJjgauM5c0yZMjiD1uK3KcaCeAmffGwZ+ODWzOkPN4QwRbsK5DOFf06fywmyLci3ZD8jLGhVYA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "get-intrinsic": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.2", - "internal-slot": "^1.0.3", - "is-callable": "^1.2.3", - "is-negative-zero": "^2.0.1", - "is-regex": "^1.1.3", - "is-string": "^1.0.6", - "object-inspect": "^1.11.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.2", - "string.prototype.trimend": "^1.0.4", - "string.prototype.trimstart": "^1.0.4", - "unbox-primitive": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/es-abstract/node_modules/object.assign": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", - "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dev": true, - "dependencies": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/eslint": { - "version": "7.32.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.32.0.tgz", - "integrity": "sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==", - "dev": true, - "dependencies": { - "@babel/code-frame": "7.12.11", - "@eslint/eslintrc": "^0.4.3", - "@humanwhocodes/config-array": "^0.5.0", - "ajv": "^6.10.0", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.0.1", - "doctrine": "^3.0.0", - "enquirer": "^2.3.5", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^5.1.1", - "eslint-utils": "^2.1.0", - "eslint-visitor-keys": "^2.0.0", - "espree": "^7.3.1", - "esquery": "^1.4.0", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^5.1.2", - "globals": "^13.6.0", - "ignore": "^4.0.6", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "js-yaml": "^3.13.1", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.0.4", - "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "progress": "^2.0.0", - "regexpp": "^3.1.0", - "semver": "^7.2.1", - "strip-ansi": "^6.0.0", - "strip-json-comments": "^3.1.0", - "table": "^6.0.9", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-import-resolver-node": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz", - "integrity": "sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw==", - "dev": true, - "dependencies": { - "debug": "^3.2.7", - "resolve": "^1.20.0" - } - }, - "node_modules/eslint-import-resolver-node/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/eslint-import-resolver-typescript": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-2.4.0.tgz", - "integrity": "sha512-useJKURidCcldRLCNKWemr1fFQL1SzB3G4a0li6lFGvlc5xGe1hY343bvG07cbpCzPuM/lK19FIJB3XGFSkplA==", - "dev": true, - "dependencies": { - "debug": "^4.1.1", - "glob": "^7.1.6", - "is-glob": "^4.0.1", - "resolve": "^1.17.0", - "tsconfig-paths": "^3.9.0" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "eslint": "*", - "eslint-plugin-import": "*" - } - }, - "node_modules/eslint-module-utils": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.6.2.tgz", - "integrity": "sha512-QG8pcgThYOuqxupd06oYTZoNOGaUdTY1PqK+oS6ElF6vs4pBdk/aYxFVQQXzcrAqp9m7cl7lb2ubazX+g16k2Q==", - "dev": true, - "dependencies": { - "debug": "^3.2.7", - "pkg-dir": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint-module-utils/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/eslint-plugin-import": { - "version": "2.24.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.24.2.tgz", - "integrity": "sha512-hNVtyhiEtZmpsabL4neEj+6M5DCLgpYyG9nzJY8lZQeQXEn5UPW1DpUdsMHMXsq98dbNm7nt1w9ZMSVpfJdi8Q==", - "dev": true, - "dependencies": { - "array-includes": "^3.1.3", - "array.prototype.flat": "^1.2.4", - "debug": "^2.6.9", - "doctrine": "^2.1.0", - "eslint-import-resolver-node": "^0.3.6", - "eslint-module-utils": "^2.6.2", - "find-up": "^2.0.0", - "has": "^1.0.3", - "is-core-module": "^2.6.0", - "minimatch": "^3.0.4", - "object.values": "^1.1.4", - "pkg-up": "^2.0.0", - "read-pkg-up": "^3.0.0", - "resolve": "^1.20.0", - "tsconfig-paths": "^3.11.0" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0" - } - }, - "node_modules/eslint-plugin-import/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/eslint-plugin-import/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "node_modules/eslint-plugin-mocha": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-mocha/-/eslint-plugin-mocha-8.2.0.tgz", - "integrity": "sha512-8oOR47Ejt+YJPNQzedbiklDqS1zurEaNrxXpRs+Uk4DMDPVmKNagShFeUaYsfvWP55AhI+P1non5QZAHV6K78A==", - "dev": true, - "dependencies": { - "eslint-utils": "^2.1.0", - "ramda": "^0.27.1" - }, - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "eslint": ">=7.0.0" - } - }, - "node_modules/eslint-plugin-prettier": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-3.4.1.tgz", - "integrity": "sha512-htg25EUYUeIhKHXjOinK4BgCcDwtLHjqaxCDsMy5nbnUMkKFvIhMVCp+5GFUXQ4Nr8lBsPqtGAqBenbpFqAA2g==", - "dev": true, - "dependencies": { - "prettier-linter-helpers": "^1.0.0" - }, - "engines": { - "node": ">=6.0.0" - }, - "peerDependencies": { - "eslint": ">=5.0.0", - "prettier": ">=1.13.0" - }, - "peerDependenciesMeta": { - "eslint-config-prettier": { - "optional": true - } - } - }, - "node_modules/eslint-plugin-simple-import-sort": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-simple-import-sort/-/eslint-plugin-simple-import-sort-7.0.0.tgz", - "integrity": "sha512-U3vEDB5zhYPNfxT5TYR7u01dboFZp+HNpnGhkDB2g/2E4wZ/g1Q9Ton8UwCLfRV9yAKyYqDh62oHOamvkFxsvw==", - "dev": true, - "peerDependencies": { - "eslint": ">=5.0.0" - } - }, - "node_modules/eslint-plugin-typescript": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-typescript/-/eslint-plugin-typescript-0.14.0.tgz", - "integrity": "sha512-2u1WnnDF2mkWWgU1lFQ2RjypUlmRoBEvQN02y9u+IL12mjWlkKFGEBnVsjs9Y8190bfPQCvWly1c2rYYUSOxWw==", - "deprecated": "Deprecated: Use @typescript-eslint/eslint-plugin instead", - "dev": true, - "dependencies": { - "requireindex": "~1.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/eslint-scope/node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/eslint-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", - "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", - "dev": true, - "dependencies": { - "eslint-visitor-keys": "^1.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - } - }, - "node_modules/eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint/node_modules/ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/eslint/node_modules/doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/eslint/node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/node_modules/eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/eslint/node_modules/strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/eslint/node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/espree": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", - "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", - "dev": true, - "dependencies": { - "acorn": "^7.4.0", - "acorn-jsx": "^5.3.1", - "eslint-visitor-keys": "^1.3.0" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true, - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/esquery": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", - "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", - "dev": true, - "dependencies": { - "estraverse": "^5.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "engines": { - "node": ">=0.8.x" - } - }, - "node_modules/evp_bytestokey": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", - "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", - "dev": true, - "dependencies": { - "md5.js": "^1.3.4", - "safe-buffer": "^5.1.1" - } - }, - "node_modules/expand-template": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", - "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - }, - "node_modules/fast-diff": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz", - "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==", - "dev": true - }, - "node_modules/fast-glob": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz", - "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==", - "dev": true, - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", - "dev": true - }, - "node_modules/fastq": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.12.0.tgz", - "integrity": "sha512-VNX0QkHK3RsXVKr9KrlUv/FoTa0NdbYoHHl7uXHv2rzyHSlxjdNAKug2twd9luJxpcyNeAgf5iPPMutJO67Dfg==", - "dev": true, - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "dev": true, - "dependencies": { - "flat-cache": "^3.0.4" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/file-uri-to-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", - "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", - "dev": true - }, - "node_modules/filename-reserved-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz", - "integrity": "sha1-q/c9+rc10EVECr/qLZHzieu/oik=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/filenamify": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/filenamify/-/filenamify-4.3.0.tgz", - "integrity": "sha512-hcFKyUG57yWGAzu1CMt/dPzYZuv+jAJUT85bL8mrXvNe6hWj6yEHEc4EdcgiA6Z3oi1/9wXJdZPXF2dZNgwgOg==", - "dev": true, - "dependencies": { - "filename-reserved-regex": "^2.0.0", - "strip-outer": "^1.0.1", - "trim-repeated": "^1.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/find-cache-dir": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", - "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", - "dev": true, - "dependencies": { - "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/avajs/find-cache-dir?sponsor=1" - } - }, - "node_modules/find-cache-dir/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/find-cache-dir/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/find-cache-dir/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/find-cache-dir/node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/find-cache-dir/node_modules/pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, - "dependencies": { - "find-up": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "dev": true, - "dependencies": { - "locate-path": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/flat": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/flat/-/flat-4.1.1.tgz", - "integrity": "sha512-FmTtBsHskrU6FJ2VxCnsDb84wu9zhmO3cUX2kGFb5tuwhfXxGciiT0oRY+cck35QmG+NmGh5eLz6lLCpWTqwpA==", - "dev": true, - "dependencies": { - "is-buffer": "~2.0.3" - }, - "bin": { - "flat": "cli.js" - } - }, - "node_modules/flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", - "dev": true, - "dependencies": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/flatted": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.2.tgz", - "integrity": "sha512-JaTY/wtrcSyvXJl4IMFHPKyFur1sE9AUqc0QnhOaJ0CxHtAoIV8pYDzeEfAaNEtGkOfq4gr3LBFmdXW5mOQFnA==", - "dev": true - }, - "node_modules/flow-bin": { - "version": "0.149.0", - "resolved": "https://registry.npmjs.org/flow-bin/-/flow-bin-0.149.0.tgz", - "integrity": "sha512-32hM6iKSInPCUuooS23SJ4c5Up0Tt9ozrXEE6urEpTDJU0z/vQblnCBRt3QZaEEDzSKOu2QZAU6K7fbShOOHaQ==", - "dev": true, - "bin": { - "flow": "cli.js" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/flowgen": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/flowgen/-/flowgen-1.14.1.tgz", - "integrity": "sha512-rpwM75zi4BH5CLHtak0/1wZ40/3eEi2E7CafjiGPnyL2b9y3zznSrgbNTnpkspU1o4C0Ypsvfwi0lFslIVxWVw==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.10.4", - "@babel/highlight": "^7.10.4", - "commander": "^6.1.0", - "lodash": "^4.17.20", - "prettier": "^2.1.1", - "shelljs": "^0.8.4", - "typescript": "^4.0.2", - "typescript-compiler": "^1.4.1-2" - }, - "bin": { - "flowgen": "lib/cli/index.js" - } - }, - "node_modules/flowgen/node_modules/commander": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", - "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==", - "dev": true, - "engines": { - "node": ">= 6" - } - }, - "node_modules/fs-constants": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", - "dev": true - }, - "node_modules/fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - }, - "engines": { - "node": ">=6 <7 || >=8" - } - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true - }, - "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "node_modules/functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", - "dev": true - }, - "node_modules/gauge": { - "version": "2.7.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", - "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", - "dev": true, - "dependencies": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" - } - }, - "node_modules/gauge/node_modules/is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dev": true, - "dependencies": { - "number-is-nan": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/gauge/node_modules/string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true, - "dependencies": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true, - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/get-func-name": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", - "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/get-intrinsic": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", - "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/gh-pages": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/gh-pages/-/gh-pages-3.2.3.tgz", - "integrity": "sha512-jA1PbapQ1jqzacECfjUaO9gV8uBgU6XNMV0oXLtfCX3haGLe5Atq8BxlrADhbD6/UdG9j6tZLWAkAybndOXTJg==", - "dev": true, - "dependencies": { - "async": "^2.6.1", - "commander": "^2.18.0", - "email-addresses": "^3.0.1", - "filenamify": "^4.3.0", - "find-cache-dir": "^3.3.1", - "fs-extra": "^8.1.0", - "globby": "^6.1.0" - }, - "bin": { - "gh-pages": "bin/gh-pages.js", - "gh-pages-clean": "bin/gh-pages-clean.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/github-from-package": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", - "integrity": "sha1-l/tdlr/eiXMxPyDoKI75oWf6ZM4=", - "dev": true - }, - "node_modules/glob": { - "version": "7.1.7", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", - "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/globals": { - "version": "13.11.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.11.0.tgz", - "integrity": "sha512-08/xrJ7wQjK9kkkRoI3OFUBbLx4f+6x3SGwcPvQ0QH6goFDrOU2oyAWrmh3dJezu65buo+HBMzAMQy6rovVC3g==", - "dev": true, - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/globby": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", - "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", - "dev": true, - "dependencies": { - "array-union": "^1.0.1", - "glob": "^7.0.3", - "object-assign": "^4.0.1", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/globby/node_modules/pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.8", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", - "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==", - "dev": true - }, - "node_modules/growl": { - "version": "1.10.5", - "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", - "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", - "dev": true, - "engines": { - "node": ">=4.x" - } - }, - "node_modules/handlebars": { - "version": "4.7.7", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", - "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==", - "dev": true, - "dependencies": { - "minimist": "^1.2.5", - "neo-async": "^2.6.0", - "source-map": "^0.6.1", - "wordwrap": "^1.0.0" - }, - "bin": { - "handlebars": "bin/handlebars" - }, - "engines": { - "node": ">=0.4.7" - }, - "optionalDependencies": { - "uglify-js": "^3.1.4" - } - }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/has-ansi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", - "dev": true, - "dependencies": { - "ansi-regex": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-bigints": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", - "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/has-symbols": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", - "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", - "dev": true, - "dependencies": { - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-unicode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", - "dev": true - }, - "node_modules/hash-base": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", - "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", - "dev": true, - "dependencies": { - "inherits": "^2.0.4", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", - "dev": true, - "bin": { - "he": "bin/he" - } - }, - "node_modules/hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true - }, - "node_modules/ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dev": true, - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", - "dev": true, - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "node_modules/ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "dev": true - }, - "node_modules/internal-slot": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", - "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", - "dev": true, - "dependencies": { - "get-intrinsic": "^1.1.0", - "has": "^1.0.3", - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/interpret": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", - "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", - "dev": true, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", - "dev": true - }, - "node_modules/is-bigint": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", - "dev": true, - "dependencies": { - "has-bigints": "^1.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-boolean-object": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-buffer": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", - "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "engines": { - "node": ">=4" - } - }, - "node_modules/is-callable": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", - "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-core-module": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.6.0.tgz", - "integrity": "sha512-wShG8vs60jKfPWpF2KZRaAtvt3a20OAn7+IJ6hLPECpSABLcKtFKTTI4ZtH5QcBruBHlq+WsdHWyz0BCZW7svQ==", - "dev": true, - "dependencies": { - "has": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-date-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", - "dev": true, - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", - "dev": true, - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-negative-zero": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", - "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-number-object": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.6.tgz", - "integrity": "sha512-bEVOqiRcvo3zO1+G2lVMy+gkkEm9Yh7cDMRusKKu5ZJKPUYSJwICTKZrNKHA2EbSP0Tu0+6B/emsYNHZyn6K8g==", - "dev": true, - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-string": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", - "dev": true, - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", - "dev": true, - "dependencies": { - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true - }, - "node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/json-parse-better-errors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", - "dev": true - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", - "dev": true - }, - "node_modules/json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dev": true, - "dependencies": { - "minimist": "^1.2.0" - }, - "bin": { - "json5": "lib/cli.js" - } - }, - "node_modules/jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", - "dev": true, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/load-json-file": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", - "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.2", - "parse-json": "^4.0.0", - "pify": "^3.0.0", - "strip-bom": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", - "dev": true, - "dependencies": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, - "node_modules/lodash.clonedeep": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", - "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", - "dev": true - }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true - }, - "node_modules/lodash.truncate": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", - "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=", - "dev": true - }, - "node_modules/log-symbols": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-3.0.0.tgz", - "integrity": "sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ==", - "dev": true, - "dependencies": { - "chalk": "^2.4.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/log-symbols/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/log-symbols/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/loglevel": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.7.1.tgz", - "integrity": "sha512-Hesni4s5UkWkwCGJMQGAh71PaLUmKFM60dHvq0zi/vDhhrzuk+4GgNbTXJ12YYQJn6ZKBDNIjYcuQGKudvqrIw==", - "dev": true, - "engines": { - "node": ">= 0.6.0" - }, - "funding": { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/loglevel" - } - }, - "node_modules/loglevel-colored-level-prefix": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/loglevel-colored-level-prefix/-/loglevel-colored-level-prefix-1.0.0.tgz", - "integrity": "sha1-akAhj9x64V/HbD0PPmdsRlOIYD4=", - "dev": true, - "dependencies": { - "chalk": "^1.1.3", - "loglevel": "^1.4.1" - } - }, - "node_modules/loglevel-colored-level-prefix/node_modules/ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/loglevel-colored-level-prefix/node_modules/chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "dependencies": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/loglevel-colored-level-prefix/node_modules/supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/long": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", - "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==", - "dev": true - }, - "node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/lunr": { - "version": "2.3.9", - "resolved": "https://registry.npmjs.org/lunr/-/lunr-2.3.9.tgz", - "integrity": "sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==", - "dev": true - }, - "node_modules/make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, - "dependencies": { - "semver": "^6.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/make-dir/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/make-error": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "dev": true - }, - "node_modules/marked": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/marked/-/marked-3.0.2.tgz", - "integrity": "sha512-TMJQQ79Z0e3rJYazY0tIoMsFzteUGw9fB3FD+gzuIT3zLuG9L9ckIvUfF51apdJkcqc208jJN2KbtPbOvXtbjA==", - "dev": true, - "bin": { - "marked": "bin/marked" - }, - "engines": { - "node": ">= 12" - } - }, - "node_modules/md5.js": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", - "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", - "dev": true, - "dependencies": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/micromatch": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", - "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", - "dev": true, - "dependencies": { - "braces": "^3.0.1", - "picomatch": "^2.2.3" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/mimic-response": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-2.1.0.tgz", - "integrity": "sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", - "dev": true - }, - "node_modules/mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "dev": true, - "dependencies": { - "minimist": "^1.2.5" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/mkdirp-classic": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", - "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", - "dev": true - }, - "node_modules/mocha": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-7.2.0.tgz", - "integrity": "sha512-O9CIypScywTVpNaRrCAgoUnJgozpIofjKUYmJhiCIJMiuYnLI6otcb1/kpW9/n/tJODHGZ7i8aLQoDVsMtOKQQ==", - "dev": true, - "dependencies": { - "ansi-colors": "3.2.3", - "browser-stdout": "1.3.1", - "chokidar": "3.3.0", - "debug": "3.2.6", - "diff": "3.5.0", - "escape-string-regexp": "1.0.5", - "find-up": "3.0.0", - "glob": "7.1.3", - "growl": "1.10.5", - "he": "1.2.0", - "js-yaml": "3.13.1", - "log-symbols": "3.0.0", - "minimatch": "3.0.4", - "mkdirp": "0.5.5", - "ms": "2.1.1", - "node-environment-flags": "1.0.6", - "object.assign": "4.1.0", - "strip-json-comments": "2.0.1", - "supports-color": "6.0.0", - "which": "1.3.1", - "wide-align": "1.1.3", - "yargs": "13.3.2", - "yargs-parser": "13.1.2", - "yargs-unparser": "1.6.0" - }, - "bin": { - "_mocha": "bin/_mocha", - "mocha": "bin/mocha" - }, - "engines": { - "node": ">= 8.10.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/mochajs" - } - }, - "node_modules/mocha/node_modules/debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "deprecated": "Debug versions >=3.2.0 <3.2.7 || >=4 <4.3.1 have a low-severity ReDos regression when used in a Node.js environment. It is recommended you upgrade to 3.2.7 or 4.3.1. (https://github.com/visionmedia/debug/issues/797)", - "dev": true, - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/mocha/node_modules/debug/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "node_modules/mocha/node_modules/find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "dependencies": { - "locate-path": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/mocha/node_modules/glob": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", - "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - } - }, - "node_modules/mocha/node_modules/js-yaml": { - "version": "3.13.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", - "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", - "dev": true, - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/mocha/node_modules/locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "dependencies": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/mocha/node_modules/ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", - "dev": true - }, - "node_modules/mocha/node_modules/p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "dependencies": { - "p-limit": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "node_modules/napi-build-utils": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", - "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==", - "dev": true - }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", - "dev": true - }, - "node_modules/neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "dev": true - }, - "node_modules/node-abi": { - "version": "2.30.0", - "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-2.30.0.tgz", - "integrity": "sha512-g6bZh3YCKQRdwuO/tSZZYJAw622SjsRfJ2X0Iy4sSOHZ34/sPPdVBn8fev2tj7njzLwuqPw9uMtGsGkO5kIQvg==", - "dev": true, - "dependencies": { - "semver": "^5.4.1" - } - }, - "node_modules/node-abi/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/node-addon-api": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.0.2.tgz", - "integrity": "sha512-+D4s2HCnxPd5PjjI0STKwncjXTUKKqm74MDMz9OPXavjsGmjkvwgLtA5yoxJUdmpj52+2u+RrXgPipahKczMKg==", - "dev": true - }, - "node_modules/node-environment-flags": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/node-environment-flags/-/node-environment-flags-1.0.6.tgz", - "integrity": "sha512-5Evy2epuL+6TM0lCQGpFIj6KwiEsGh1SrHUhTbNX+sLbBtjidPZFAnVK9y5yU1+h//RitLbRHTIMyxQPtxMdHw==", - "dev": true, - "dependencies": { - "object.getownpropertydescriptors": "^2.0.3", - "semver": "^5.7.0" - } - }, - "node_modules/node-environment-flags/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/node-fetch": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", - "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==", - "dev": true, - "engines": { - "node": "4.x || >=6.0.0" - } - }, - "node_modules/node-hid": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/node-hid/-/node-hid-2.1.1.tgz", - "integrity": "sha512-Skzhqow7hyLZU93eIPthM9yjot9lszg9xrKxESleEs05V2NcbUptZc5HFqzjOkSmL0sFlZFr3kmvaYebx06wrw==", - "dev": true, - "hasInstallScript": true, - "dependencies": { - "bindings": "^1.5.0", - "node-addon-api": "^3.0.2", - "prebuild-install": "^6.0.0" - }, - "bin": { - "hid-showdevices": "src/show-devices.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/node-hid/node_modules/node-addon-api": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", - "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==", - "dev": true - }, - "node_modules/node-hid/node_modules/prebuild-install": { - "version": "6.1.4", - "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-6.1.4.tgz", - "integrity": "sha512-Z4vpywnK1lBg+zdPCVCsKq0xO66eEV9rWo2zrROGGiRS4JtueBOdlB1FnY8lcy7JsUud/Q3ijUxyWN26Ika0vQ==", - "dev": true, - "dependencies": { - "detect-libc": "^1.0.3", - "expand-template": "^2.0.3", - "github-from-package": "0.0.0", - "minimist": "^1.2.3", - "mkdirp-classic": "^0.5.3", - "napi-build-utils": "^1.0.1", - "node-abi": "^2.21.0", - "npmlog": "^4.0.1", - "pump": "^3.0.0", - "rc": "^1.2.7", - "simple-get": "^3.0.3", - "tar-fs": "^2.0.0", - "tunnel-agent": "^0.6.0" - }, - "bin": { - "prebuild-install": "bin.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/noop-logger": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/noop-logger/-/noop-logger-0.1.1.tgz", - "integrity": "sha1-lKKxYzxPExdVMAfYlm/Q6EG2pMI=", - "dev": true - }, - "node_modules/normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, - "dependencies": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "node_modules/normalize-package-data/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/npmlog": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", - "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", - "dev": true, - "dependencies": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" - } - }, - "node_modules/number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-inspect": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.11.0.tgz", - "integrity": "sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.assign": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", - "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", - "dev": true, - "dependencies": { - "define-properties": "^1.1.2", - "function-bind": "^1.1.1", - "has-symbols": "^1.0.0", - "object-keys": "^1.0.11" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.getownpropertydescriptors": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.2.tgz", - "integrity": "sha512-WtxeKSzfBjlzL+F9b7M7hewDzMwy+C8NRssHd1YrNlzHzIDrXcXiNOMrezdAEM4UXixgV+vvnyBeN7Rygl2ttQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.2" - }, - "engines": { - "node": ">= 0.8" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.values": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.4.tgz", - "integrity": "sha512-TnGo7j4XSnKQoK3MfvkzqKCi0nVe/D9I9IjwTNYdb/fxYHpjrluHVOgw0AF6jrRFGMPHdfuidR09tIDiIvnaSg==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/onigasm": { - "version": "2.2.5", - "resolved": "https://registry.npmjs.org/onigasm/-/onigasm-2.2.5.tgz", - "integrity": "sha512-F+th54mPc0l1lp1ZcFMyL/jTs2Tlq4SqIHKIXGZOR/VkHkF9A7Fr5rRr5+ZG/lWeRsyrClLYRq7s/yFQ/XhWCA==", - "dev": true, - "dependencies": { - "lru-cache": "^5.1.1" - } - }, - "node_modules/onigasm/node_modules/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dev": true, - "dependencies": { - "yallist": "^3.0.2" - } - }, - "node_modules/onigasm/node_modules/yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true - }, - "node_modules/optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", - "dev": true, - "dependencies": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.3" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", - "dev": true, - "dependencies": { - "p-limit": "^1.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/p-locate/node_modules/p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "dev": true, - "dependencies": { - "p-try": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/p-locate/node_modules/p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", - "dev": true, - "dependencies": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true - }, - "node_modules/path-type": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", - "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", - "dev": true, - "dependencies": { - "pify": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/pathval": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", - "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/picomatch": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", - "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", - "dev": true, - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/pinkie-promise": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", - "dev": true, - "dependencies": { - "pinkie": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/pkg-dir": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", - "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", - "dev": true, - "dependencies": { - "find-up": "^2.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/pkg-up": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-2.0.0.tgz", - "integrity": "sha1-yBmscoBZpGHKscOImivjxJoATX8=", - "dev": true, - "dependencies": { - "find-up": "^2.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/prebuild-install": { - "version": "5.3.6", - "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-5.3.6.tgz", - "integrity": "sha512-s8Aai8++QQGi4sSbs/M1Qku62PFK49Jm1CbgXklGz4nmHveDq0wzJkg7Na5QbnO1uNH8K7iqx2EQ/mV0MZEmOg==", - "dev": true, - "dependencies": { - "detect-libc": "^1.0.3", - "expand-template": "^2.0.3", - "github-from-package": "0.0.0", - "minimist": "^1.2.3", - "mkdirp-classic": "^0.5.3", - "napi-build-utils": "^1.0.1", - "node-abi": "^2.7.0", - "noop-logger": "^0.1.1", - "npmlog": "^4.0.1", - "pump": "^3.0.0", - "rc": "^1.2.7", - "simple-get": "^3.0.3", - "tar-fs": "^2.0.0", - "tunnel-agent": "^0.6.0", - "which-pm-runs": "^1.0.0" - }, - "bin": { - "prebuild-install": "bin.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/prettier": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.3.2.tgz", - "integrity": "sha512-lnJzDfJ66zkMy58OL5/NY5zp70S7Nz6KqcKkXYzn2tMVrNxvbqaBpg7H3qHaLxCJ5lNMsGuM8+ohS7cZrthdLQ==", - "dev": true, - "bin": { - "prettier": "bin-prettier.js" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/prettier-eslint": { - "version": "12.0.0", - "resolved": "https://registry.npmjs.org/prettier-eslint/-/prettier-eslint-12.0.0.tgz", - "integrity": "sha512-N8SGGQwAosISXTNl1E57sBbtnqUGlyRWjcfIUxyD3HF4ynehA9GZ8IfJgiep/OfYvCof/JEpy9ZqSl250Wia7A==", - "dev": true, - "dependencies": { - "@typescript-eslint/parser": "^3.0.0", - "common-tags": "^1.4.0", - "dlv": "^1.1.0", - "eslint": "^7.9.0", - "indent-string": "^4.0.0", - "lodash.merge": "^4.6.0", - "loglevel-colored-level-prefix": "^1.0.0", - "prettier": "^2.0.0", - "pretty-format": "^23.0.1", - "require-relative": "^0.8.7", - "typescript": "^3.9.3", - "vue-eslint-parser": "~7.1.0" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/prettier-eslint/node_modules/@typescript-eslint/experimental-utils": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-3.10.1.tgz", - "integrity": "sha512-DewqIgscDzmAfd5nOGe4zm6Bl7PKtMG2Ad0KG8CUZAHlXfAKTF9Ol5PXhiMh39yRL2ChRH1cuuUGOcVyyrhQIw==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.3", - "@typescript-eslint/types": "3.10.1", - "@typescript-eslint/typescript-estree": "3.10.1", - "eslint-scope": "^5.0.0", - "eslint-utils": "^2.0.0" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "*" - } - }, - "node_modules/prettier-eslint/node_modules/@typescript-eslint/parser": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-3.10.1.tgz", - "integrity": "sha512-Ug1RcWcrJP02hmtaXVS3axPPTTPnZjupqhgj+NnZ6BCkwSImWk/283347+x9wN+lqOdK9Eo3vsyiyDHgsmiEJw==", - "dev": true, - "dependencies": { - "@types/eslint-visitor-keys": "^1.0.0", - "@typescript-eslint/experimental-utils": "3.10.1", - "@typescript-eslint/types": "3.10.1", - "@typescript-eslint/typescript-estree": "3.10.1", - "eslint-visitor-keys": "^1.1.0" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^5.0.0 || ^6.0.0 || ^7.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/prettier-eslint/node_modules/@typescript-eslint/types": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-3.10.1.tgz", - "integrity": "sha512-+3+FCUJIahE9q0lDi1WleYzjCwJs5hIsbugIgnbB+dSCYUxl8L6PwmsyOPFZde2hc1DlTo/xnkOgiTLSyAbHiQ==", - "dev": true, - "engines": { - "node": "^8.10.0 || ^10.13.0 || >=11.10.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/prettier-eslint/node_modules/typescript": { - "version": "3.9.10", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.10.tgz", - "integrity": "sha512-w6fIxVE/H1PkLKcCPsFqKE7Kv7QUwhU8qQY2MueZXWx5cPZdwFupLgKK3vntcK98BtNHZtAF4LA/yl2a7k8R6Q==", - "dev": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=4.2.0" - } - }, - "node_modules/prettier-linter-helpers": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", - "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", - "dev": true, - "dependencies": { - "fast-diff": "^1.1.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/pretty-format": { - "version": "23.6.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-23.6.0.tgz", - "integrity": "sha512-zf9NV1NSlDLDjycnwm6hpFATCGl/K1lt0R/GdkAK2O5LN/rwJoB+Mh93gGJjut4YbmecbfgLWVGSTCr0Ewvvbw==", - "dev": true, - "dependencies": { - "ansi-regex": "^3.0.0", - "ansi-styles": "^3.2.0" - } - }, - "node_modules/pretty-format/node_modules/ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true - }, - "node_modules/progress": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "node_modules/punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/ramda": { - "version": "0.27.1", - "resolved": "https://registry.npmjs.org/ramda/-/ramda-0.27.1.tgz", - "integrity": "sha512-PgIdVpn5y5Yns8vqb8FzBUEYn98V3xcPgawAkkgj0YJ0qDsnHCiNmZYfOGMgOvoB0eWFLpYbhxUR3mxfDIMvpw==", - "dev": true - }, - "node_modules/randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dev": true, - "dependencies": { - "safe-buffer": "^5.1.0" - } - }, - "node_modules/rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "dev": true, - "dependencies": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "bin": { - "rc": "cli.js" - } - }, - "node_modules/read-pkg": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", - "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", - "dev": true, - "dependencies": { - "load-json-file": "^4.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/read-pkg-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz", - "integrity": "sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc=", - "dev": true, - "dependencies": { - "find-up": "^2.0.0", - "read-pkg": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/readdirp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.2.0.tgz", - "integrity": "sha512-crk4Qu3pmXwgxdSgGhgA/eXiJAPQiX4GMOZZMXnqKxHX7TaoL+3gQVo/WeuAiogr07DpnfjIMpXXa+PAIvwPGQ==", - "dev": true, - "dependencies": { - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/readline-sync": { - "version": "1.4.10", - "resolved": "https://registry.npmjs.org/readline-sync/-/readline-sync-1.4.10.tgz", - "integrity": "sha512-gNva8/6UAe8QYepIQH/jQ2qn91Qj0B9sYjMBBs3QOB8F2CXcKgLxQaJRP76sWVRQt+QU+8fAkCbCvjjMFu7Ycw==", - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/rechoir": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", - "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", - "dev": true, - "dependencies": { - "resolve": "^1.1.6" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/regenerator-runtime": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", - "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==", - "dev": true - }, - "node_modules/regexpp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - } - }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", - "dev": true - }, - "node_modules/require-relative": { - "version": "0.8.7", - "resolved": "https://registry.npmjs.org/require-relative/-/require-relative-0.8.7.tgz", - "integrity": "sha1-eZlTn8ngR6N5KPoZb44VY9q9Nt4=", - "dev": true - }, - "node_modules/requireindex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/requireindex/-/requireindex-1.1.0.tgz", - "integrity": "sha1-5UBLgVV+91225JxacgBIk/4D4WI=", - "dev": true, - "engines": { - "node": ">=0.10.5" - } - }, - "node_modules/resolve": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", - "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", - "dev": true, - "dependencies": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true, - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/ripemd160": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", - "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", - "dev": true, - "dependencies": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/rxjs": { - "version": "6.6.7", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", - "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", - "dependencies": { - "tslib": "^1.9.0" - }, - "engines": { - "npm": ">=2.0.0" - } - }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", - "dev": true - }, - "node_modules/sha.js": { - "version": "2.4.11", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", - "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", - "dev": true, - "dependencies": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - }, - "bin": { - "sha.js": "bin.js" - } - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/shelljs": { - "version": "0.8.4", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.4.tgz", - "integrity": "sha512-7gk3UZ9kOfPLIAbslLzyWeGiEqx9e3rxwZM0KE6EL8GlGwjym9Mrlx5/p33bWTu9YG6vcS4MBxYZDHYr5lr8BQ==", - "dev": true, - "dependencies": { - "glob": "^7.0.0", - "interpret": "^1.0.0", - "rechoir": "^0.6.2" - }, - "bin": { - "shjs": "bin/shjs" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/shiki": { - "version": "0.9.8", - "resolved": "https://registry.npmjs.org/shiki/-/shiki-0.9.8.tgz", - "integrity": "sha512-499zQUTjcNTVwwiaPrWldUTXIV3T9HZWxDwE82bY+9GE7P2uD6hpHUTXNbTof3iOG6WT+/062+OMbl0lDoG8WQ==", - "dev": true, - "dependencies": { - "json5": "^2.2.0", - "onigasm": "^2.2.5", - "vscode-textmate": "5.2.0" - } - }, - "node_modules/shiki/node_modules/json5": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", - "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", - "dev": true, - "dependencies": { - "minimist": "^1.2.5" - }, - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/signal-exit": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", - "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", - "dev": true - }, - "node_modules/simple-concat": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", - "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/simple-get": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-3.1.0.tgz", - "integrity": "sha512-bCR6cP+aTdScaQCnQKbPKtJOKDp/hj9EDLJo3Nw4y1QksqaovlW/bnptB6/c1e+qmNIDHRK+oXFDdEqBT8WzUA==", - "dev": true, - "dependencies": { - "decompress-response": "^4.2.0", - "once": "^1.3.1", - "simple-concat": "^1.0.0" - } - }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/slice-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" - } - }, - "node_modules/slice-ansi/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/slice-ansi/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/slice-ansi/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-support": { - "version": "0.5.19", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", - "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", - "dev": true, - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/spdx-correct": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", - "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", - "dev": true, - "dependencies": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-exceptions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", - "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", - "dev": true - }, - "node_modules/spdx-expression-parse": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", - "dev": true, - "dependencies": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-license-ids": { - "version": "3.0.10", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.10.tgz", - "integrity": "sha512-oie3/+gKf7QtpitB0LYLETe+k8SifzsX4KixvpOsbI6S0kRiRQ5MKOio8eMSAKQ17N06+wdEOXRiId+zOxo0hA==", - "dev": true - }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true - }, - "node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "dependencies": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/string-width/node_modules/ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/string-width/node_modules/is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/string-width/node_modules/strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "dependencies": { - "ansi-regex": "^4.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/string.prototype.trimend": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", - "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimstart": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", - "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "dependencies": { - "ansi-regex": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/strip-outer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/strip-outer/-/strip-outer-1.0.1.tgz", - "integrity": "sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg==", - "dev": true, - "dependencies": { - "escape-string-regexp": "^1.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/supports-color": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz", - "integrity": "sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/table": { - "version": "6.7.1", - "resolved": "https://registry.npmjs.org/table/-/table-6.7.1.tgz", - "integrity": "sha512-ZGum47Yi6KOOFDE8m223td53ath2enHcYLgOCjGr5ngu8bdIARQk6mN/wRMv4yMRcHnCSnHbCEha4sobQx5yWg==", - "dev": true, - "dependencies": { - "ajv": "^8.0.1", - "lodash.clonedeep": "^4.5.0", - "lodash.truncate": "^4.4.2", - "slice-ansi": "^4.0.0", - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/table/node_modules/ajv": { - "version": "8.6.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.6.2.tgz", - "integrity": "sha512-9807RlWAgT564wT+DjeyU5OFMPjmzxVobvDFmNAhY+5zD6A2ly3jDp6sgnfyDtlIQ+7H97oc/DGCzzfu9rjw9w==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/table/node_modules/ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/table/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "node_modules/table/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - }, - "node_modules/table/node_modules/string-width": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", - "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/table/node_modules/strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tar-fs": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", - "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", - "dev": true, - "dependencies": { - "chownr": "^1.1.1", - "mkdirp-classic": "^0.5.2", - "pump": "^3.0.0", - "tar-stream": "^2.1.4" - } - }, - "node_modules/tar-stream": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", - "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", - "dev": true, - "dependencies": { - "bl": "^4.0.3", - "end-of-stream": "^1.4.1", - "fs-constants": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/text-encoding": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/text-encoding/-/text-encoding-0.7.0.tgz", - "integrity": "sha512-oJQ3f1hrOnbRLOcwKz0Liq2IcrvDeZRHXhd9RgLrsT+DjWY/nty1Hi7v3dtkaEYbPYe0mUoOfzRrMwfXXwgPUA==", - "deprecated": "no longer maintained", - "dev": true - }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", - "dev": true - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/trim-repeated": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/trim-repeated/-/trim-repeated-1.0.0.tgz", - "integrity": "sha1-42RqLqTokTEr9+rObPsFOAvAHCE=", - "dev": true, - "dependencies": { - "escape-string-regexp": "^1.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ts-node": { - "version": "9.1.1", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-9.1.1.tgz", - "integrity": "sha512-hPlt7ZACERQGf03M253ytLY3dHbGNGrAq9qIHWUY9XHYl1z7wYngSr3OQ5xmui8o2AaxsONxIzjafLUiWBo1Fg==", - "dev": true, - "dependencies": { - "arg": "^4.1.0", - "create-require": "^1.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "source-map-support": "^0.5.17", - "yn": "3.1.1" - }, - "bin": { - "ts-node": "dist/bin.js", - "ts-node-script": "dist/bin-script.js", - "ts-node-transpile-only": "dist/bin-transpile.js", - "ts-script": "dist/bin-script-deprecated.js" - }, - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "typescript": ">=2.7" - } - }, - "node_modules/ts-node/node_modules/diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "dev": true, - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/tsconfig-paths": { - "version": "3.11.0", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.11.0.tgz", - "integrity": "sha512-7ecdYDnIdmv639mmDwslG6KQg1Z9STTz1j7Gcz0xa+nshh/gKDAHcPxRbWOsA3SPp0tXP2leTcY9Kw+NAkfZzA==", - "dev": true, - "dependencies": { - "@types/json5": "^0.0.29", - "json5": "^1.0.1", - "minimist": "^1.2.0", - "strip-bom": "^3.0.0" - } - }, - "node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - }, - "node_modules/tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", - "dev": true, - "dependencies": { - "tslib": "^1.8.1" - }, - "engines": { - "node": ">= 6" - }, - "peerDependencies": { - "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" - } - }, - "node_modules/tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "dev": true, - "dependencies": { - "safe-buffer": "^5.0.1" - }, - "engines": { - "node": "*" - } - }, - "node_modules/type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, - "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/typedoc": { - "version": "0.21.9", - "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.21.9.tgz", - "integrity": "sha512-VRo7aII4bnYaBBM1lhw4bQFmUcDQV8m8tqgjtc7oXl87jc1Slbhfw2X5MccfcR2YnEClHDWgsiQGgNB8KJXocA==", - "dev": true, - "dependencies": { - "glob": "^7.1.7", - "handlebars": "^4.7.7", - "lunr": "^2.3.9", - "marked": "^3.0.2", - "minimatch": "^3.0.0", - "progress": "^2.0.3", - "shiki": "^0.9.8", - "typedoc-default-themes": "^0.12.10" - }, - "bin": { - "typedoc": "bin/typedoc" - }, - "engines": { - "node": ">= 12.10.0" - }, - "peerDependencies": { - "typescript": "4.0.x || 4.1.x || 4.2.x || 4.3.x || 4.4.x" - } - }, - "node_modules/typedoc-default-themes": { - "version": "0.12.10", - "resolved": "https://registry.npmjs.org/typedoc-default-themes/-/typedoc-default-themes-0.12.10.tgz", - "integrity": "sha512-fIS001cAYHkyQPidWXmHuhs8usjP5XVJjWB8oZGqkTowZaz3v7g3KDZeeqE82FBrmkAnIBOY3jgy7lnPnqATbA==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/typescript": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.4.2.tgz", - "integrity": "sha512-gzP+t5W4hdy4c+68bfcv0t400HVJMMd2+H9B7gae1nQlBzCqvrXX+6GL/b3GAgyTH966pzrZ70/fRjwAtZksSQ==", - "dev": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=4.2.0" - } - }, - "node_modules/typescript-compiler": { - "version": "1.4.1-2", - "resolved": "https://registry.npmjs.org/typescript-compiler/-/typescript-compiler-1.4.1-2.tgz", - "integrity": "sha1-uk99si2RU0oZKdkACdzhYety/T8=", - "dev": true - }, - "node_modules/uglify-js": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.14.1.tgz", - "integrity": "sha512-JhS3hmcVaXlp/xSo3PKY5R0JqKs5M3IV+exdLHW99qKvKivPO4Z8qbej6mte17SOPqAOVMjt/XGgWacnFSzM3g==", - "dev": true, - "optional": true, - "bin": { - "uglifyjs": "bin/uglifyjs" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/unbox-primitive": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", - "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1", - "has-bigints": "^1.0.1", - "has-symbols": "^1.0.2", - "which-boxed-primitive": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "dev": true, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/usb": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/usb/-/usb-1.7.2.tgz", - "integrity": "sha512-SfVSItgsD9+YfEpcK1UZ8tQ7e8GdxQ0xoQtB773omNBKTVj3IuFJNKjwSnpE58FGcV4tUoKLHmBMc018RUY5SA==", - "dev": true, - "hasInstallScript": true, - "dependencies": { - "bindings": "^1.4.0", - "node-addon-api": "3.0.2", - "prebuild-install": "^5.3.3" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true - }, - "node_modules/v8-compile-cache": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", - "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", - "dev": true - }, - "node_modules/validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dev": true, - "dependencies": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "node_modules/vscode-textmate": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/vscode-textmate/-/vscode-textmate-5.2.0.tgz", - "integrity": "sha512-Uw5ooOQxRASHgu6C7GVvUxisKXfSgW4oFlO+aa+PAkgmH89O3CXxEEzNRNtHSqtXFTl0nAC1uYj0GMSH27uwtQ==", - "dev": true - }, - "node_modules/vue-eslint-parser": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-7.1.1.tgz", - "integrity": "sha512-8FdXi0gieEwh1IprIBafpiJWcApwrU+l2FEj8c1HtHFdNXMd0+2jUSjBVmcQYohf/E72irwAXEXLga6TQcB3FA==", - "dev": true, - "dependencies": { - "debug": "^4.1.1", - "eslint-scope": "^5.0.0", - "eslint-visitor-keys": "^1.1.0", - "espree": "^6.2.1", - "esquery": "^1.0.1", - "lodash": "^4.17.15" - }, - "engines": { - "node": ">=8.10" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - }, - "peerDependencies": { - "eslint": ">=5.0.0" - } - }, - "node_modules/vue-eslint-parser/node_modules/espree": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-6.2.1.tgz", - "integrity": "sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw==", - "dev": true, - "dependencies": { - "acorn": "^7.1.1", - "acorn-jsx": "^5.2.0", - "eslint-visitor-keys": "^1.1.0" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/wait-console-input": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/wait-console-input/-/wait-console-input-0.1.7.tgz", - "integrity": "sha512-gDxDpK1hbpsCk9nryIDUhrtK6wS9ei/o//BTFSYdMChlKMpHVUdw0LSnPR9lVSMgBAKybbezUYA8XRjTqu11hQ==", - "dependencies": { - "readline-sync": "^1.4.9" - } - }, - "node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" - } - }, - "node_modules/which-boxed-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", - "dev": true, - "dependencies": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", - "dev": true - }, - "node_modules/which-pm-runs": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/which-pm-runs/-/which-pm-runs-1.0.0.tgz", - "integrity": "sha1-Zws6+8VS4LVd9rd4DKdGFfI60cs=", - "dev": true - }, - "node_modules/wide-align": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", - "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", - "dev": true, - "dependencies": { - "string-width": "^1.0.2 || 2" - } - }, - "node_modules/wide-align/node_modules/is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dev": true, - "dependencies": { - "number-is-nan": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/wide-align/node_modules/string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true, - "dependencies": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/wordwrap": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", - "dev": true - }, - "node_modules/wrap-ansi": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", - "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.0", - "string-width": "^3.0.0", - "strip-ansi": "^5.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/wrap-ansi/node_modules/ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/wrap-ansi/node_modules/strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "dependencies": { - "ansi-regex": "^4.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true - }, - "node_modules/y18n": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", - "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", - "dev": true - }, - "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, - "node_modules/yargs": { - "version": "13.3.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", - "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", - "dev": true, - "dependencies": { - "cliui": "^5.0.0", - "find-up": "^3.0.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^3.0.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^13.1.2" - } - }, - "node_modules/yargs-parser": { - "version": "13.1.2", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", - "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", - "dev": true, - "dependencies": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } - }, - "node_modules/yargs-unparser": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-1.6.0.tgz", - "integrity": "sha512-W9tKgmSn0DpSatfri0nx52Joq5hVXgeLiqR/5G0sZNDoLZFOr/xjBUDcShCOGNsBnEMNo1KAMBkTej1Hm62HTw==", - "dev": true, - "dependencies": { - "flat": "^4.1.0", - "lodash": "^4.17.15", - "yargs": "^13.3.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/yargs/node_modules/find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "dependencies": { - "locate-path": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/yargs/node_modules/locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "dependencies": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/yargs/node_modules/p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "dependencies": { - "p-limit": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/yn": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", - "dev": true, - "engines": { - "node": ">=6" - } - } - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", - "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", - "dev": true, - "requires": { - "@babel/highlight": "^7.10.4" - } - }, - "@babel/helper-validator-identifier": { - "version": "7.14.9", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.9.tgz", - "integrity": "sha512-pQYxPY0UP6IHISRitNe8bsijHex4TWZXi2HwKVsjPiltzlhse2znVcm9Ace510VT1kxIHjGJCZZQBX2gJDbo0g==", - "dev": true - }, - "@babel/highlight": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", - "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.14.5", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - }, - "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "@eslint/eslintrc": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz", - "integrity": "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==", - "dev": true, - "requires": { - "ajv": "^6.12.4", - "debug": "^4.1.1", - "espree": "^7.3.0", - "globals": "^13.9.0", - "ignore": "^4.0.6", - "import-fresh": "^3.2.1", - "js-yaml": "^3.13.1", - "minimatch": "^3.0.4", - "strip-json-comments": "^3.1.1" - }, - "dependencies": { - "strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true - } - } - }, - "@fioprotocol/fiojs": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@fioprotocol/fiojs/-/fiojs-1.0.1.tgz", - "integrity": "sha512-+rxJ/ynUkox/DO3ihHPpAc//DDI+DQvrphLqwRKufw0atC3GKluGR2qMTeO45O0UjorvOIw6esuuG7NpbVUm8Q==", - "dev": true, - "requires": { - "ajv": "^6.10.2", - "babel-runtime": "6.26.0", - "bigi": "^1.4.2", - "browserify-aes": "^1.2.0", - "bs58": "^4.0.1", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "ecurve": "^1.0.6", - "long": "^4.0.0", - "randombytes": "^2.1.0", - "text-encoding": "0.7.0" - } - }, - "@humanwhocodes/config-array": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz", - "integrity": "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==", - "dev": true, - "requires": { - "@humanwhocodes/object-schema": "^1.2.0", - "debug": "^4.1.1", - "minimatch": "^3.0.4" - } - }, - "@humanwhocodes/object-schema": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.0.tgz", - "integrity": "sha512-wdppn25U8z/2yiaT6YGquE6X8sSv7hNMWSXYSSU1jGv/yd6XqjXgTDJ8KP4NgjTXfJ3GbRjeeb8RTV7a/VpM+w==", - "dev": true - }, - "@ledgerhq/devices": { - "version": "5.51.1", - "resolved": "https://registry.npmjs.org/@ledgerhq/devices/-/devices-5.51.1.tgz", - "integrity": "sha512-4w+P0VkbjzEXC7kv8T1GJ/9AVaP9I6uasMZ/JcdwZBS3qwvKo5A5z9uGhP5c7TvItzcmPb44b5Mw2kT+WjUuAA==", - "requires": { - "@ledgerhq/errors": "^5.50.0", - "@ledgerhq/logs": "^5.50.0", - "rxjs": "6", - "semver": "^7.3.5" - } - }, - "@ledgerhq/errors": { - "version": "5.50.0", - "resolved": "https://registry.npmjs.org/@ledgerhq/errors/-/errors-5.50.0.tgz", - "integrity": "sha512-gu6aJ/BHuRlpU7kgVpy2vcYk6atjB4iauP2ymF7Gk0ez0Y/6VSMVSJvubeEQN+IV60+OBK0JgeIZG7OiHaw8ow==" - }, - "@ledgerhq/hw-transport": { - "version": "5.51.1", - "resolved": "https://registry.npmjs.org/@ledgerhq/hw-transport/-/hw-transport-5.51.1.tgz", - "integrity": "sha512-6wDYdbWrw9VwHIcoDnqWBaDFyviyjZWv6H9vz9Vyhe4Qd7TIFmbTl/eWs6hZvtZBza9K8y7zD8ChHwRI4s9tSw==", - "requires": { - "@ledgerhq/devices": "^5.51.1", - "@ledgerhq/errors": "^5.50.0", - "events": "^3.3.0" - } - }, - "@ledgerhq/hw-transport-node-hid": { - "version": "5.51.1", - "resolved": "https://registry.npmjs.org/@ledgerhq/hw-transport-node-hid/-/hw-transport-node-hid-5.51.1.tgz", - "integrity": "sha512-Y2eVCCdhVs2Lfr7N2x2cNb+ogcZ24ZATO4QxaQ7LogjiPwYmzmvuXFn8zFjMSrKUCn9CtbptXcuiu0NkGsjWlw==", - "dev": true, - "requires": { - "@ledgerhq/devices": "^5.51.1", - "@ledgerhq/errors": "^5.50.0", - "@ledgerhq/hw-transport": "^5.51.1", - "@ledgerhq/hw-transport-node-hid-noevents": "^5.51.1", - "@ledgerhq/logs": "^5.50.0", - "lodash": "^4.17.21", - "node-hid": "2.1.1", - "usb": "^1.7.0" - } - }, - "@ledgerhq/hw-transport-node-hid-noevents": { - "version": "5.51.1", - "resolved": "https://registry.npmjs.org/@ledgerhq/hw-transport-node-hid-noevents/-/hw-transport-node-hid-noevents-5.51.1.tgz", - "integrity": "sha512-9wFf1L8ZQplF7XOY2sQGEeOhpmBRzrn+4X43kghZ7FBDoltrcK+s/D7S+7ffg3j2OySyP6vIIIgloXylao5Scg==", - "dev": true, - "requires": { - "@ledgerhq/devices": "^5.51.1", - "@ledgerhq/errors": "^5.50.0", - "@ledgerhq/hw-transport": "^5.51.1", - "@ledgerhq/logs": "^5.50.0", - "node-hid": "2.1.1" - } - }, - "@ledgerhq/logs": { - "version": "5.50.0", - "resolved": "https://registry.npmjs.org/@ledgerhq/logs/-/logs-5.50.0.tgz", - "integrity": "sha512-swKHYCOZUGyVt4ge0u8a7AwNcA//h4nx5wIi0sruGye1IJ5Cva0GyK9L2/WdX+kWVTKp92ZiEo1df31lrWGPgA==" - }, - "@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "requires": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - } - }, - "@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true - }, - "@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "requires": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - } - }, - "@types/chai": { - "version": "4.2.21", - "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.2.21.tgz", - "integrity": "sha512-yd+9qKmJxm496BOV9CMNaey8TWsikaZOwMRwPHQIjcOJM9oV+fi9ZMNw3JsVnbEEbo2gRTDnGEBv8pjyn67hNg==", - "dev": true - }, - "@types/chai-as-promised": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/@types/chai-as-promised/-/chai-as-promised-7.1.4.tgz", - "integrity": "sha512-1y3L1cHePcIm5vXkh1DSGf/zQq5n5xDKG1fpCvf18+uOkpce0Z1ozNFPkyWsVswK7ntN1sZBw3oU6gmN+pDUcA==", - "dev": true, - "requires": { - "@types/chai": "*" - } - }, - "@types/eslint-visitor-keys": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz", - "integrity": "sha512-OCutwjDZ4aFS6PB1UZ988C4YgwlBHJd6wCeQqaLdmadZ/7e+w79+hbMUFC1QXDNCmdyoRfAFdm0RypzwR+Qpag==", - "dev": true - }, - "@types/json-schema": { - "version": "7.0.9", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz", - "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==", - "dev": true - }, - "@types/json5": { - "version": "0.0.29", - "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", - "integrity": "sha1-7ihweulOEdK4J7y+UnC86n8+ce4=", - "dev": true - }, - "@types/ledgerhq__hw-transport": { - "version": "4.21.4", - "resolved": "https://registry.npmjs.org/@types/ledgerhq__hw-transport/-/ledgerhq__hw-transport-4.21.4.tgz", - "integrity": "sha512-vep+6yZnGv6owAthIY0w3f72w4dJIb4+yE5PCHveInTlZE9wukvU6Wc5Eig0OUUxcdhTazzeZx1xUaNVLqyQSg==", - "requires": { - "@types/node": "*" - } - }, - "@types/ledgerhq__hw-transport-node-hid": { - "version": "4.22.2", - "resolved": "https://registry.npmjs.org/@types/ledgerhq__hw-transport-node-hid/-/ledgerhq__hw-transport-node-hid-4.22.2.tgz", - "integrity": "sha512-b9dXYEZ8Iijv20LykEVhbThVzSjchMpvj8y/mSsCSP1n7Ncs+YqD8mjEV/bGTks9jAP8CdxhRqOGq+h47/4B9g==", - "dev": true, - "requires": { - "@types/ledgerhq__hw-transport": "*", - "@types/node": "*", - "@types/node-hid": "*" - } - }, - "@types/mocha": { - "version": "8.2.3", - "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-8.2.3.tgz", - "integrity": "sha512-ekGvFhFgrc2zYQoX4JeZPmVzZxw6Dtllga7iGHzfbYIYkAMUx/sAFP2GdFpLff+vdHXu5fl7WX9AT+TtqYcsyw==", - "dev": true - }, - "@types/node": { - "version": "14.17.12", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.17.12.tgz", - "integrity": "sha512-vhUqgjJR1qxwTWV5Ps5txuy2XMdf7Fw+OrdChRboy8BmWUPkckOhphaohzFG6b8DW7CrxaBMdrdJ47SYFq1okw==" - }, - "@types/node-hid": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@types/node-hid/-/node-hid-1.3.1.tgz", - "integrity": "sha512-VPxuGDCoDxOUKrTZPSok7IEmiK4cVLfj8Csu09FtG5uF+eqf1HETERHXQkO02Rk6j6YiiHxp0/DA9R4llvhEzQ==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@typescript-eslint/eslint-plugin": { - "version": "4.30.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.30.0.tgz", - "integrity": "sha512-NgAnqk55RQ/SD+tZFD9aPwNSeHmDHHe5rtUyhIq0ZeCWZEvo4DK9rYz7v9HDuQZFvn320Ot+AikaCKMFKLlD0g==", - "dev": true, - "requires": { - "@typescript-eslint/experimental-utils": "4.30.0", - "@typescript-eslint/scope-manager": "4.30.0", - "debug": "^4.3.1", - "functional-red-black-tree": "^1.0.1", - "regexpp": "^3.1.0", - "semver": "^7.3.5", - "tsutils": "^3.21.0" - } - }, - "@typescript-eslint/experimental-utils": { - "version": "4.30.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.30.0.tgz", - "integrity": "sha512-K8RNIX9GnBsv5v4TjtwkKtqMSzYpjqAQg/oSphtxf3xxdt6T0owqnpojztjjTcatSteH3hLj3t/kklKx87NPqw==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.7", - "@typescript-eslint/scope-manager": "4.30.0", - "@typescript-eslint/types": "4.30.0", - "@typescript-eslint/typescript-estree": "4.30.0", - "eslint-scope": "^5.1.1", - "eslint-utils": "^3.0.0" - }, - "dependencies": { - "@typescript-eslint/typescript-estree": { - "version": "4.30.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.30.0.tgz", - "integrity": "sha512-6WN7UFYvykr/U0Qgy4kz48iGPWILvYL34xXJxvDQeiRE018B7POspNRVtAZscWntEPZpFCx4hcz/XBT+erenfg==", - "dev": true, - "requires": { - "@typescript-eslint/types": "4.30.0", - "@typescript-eslint/visitor-keys": "4.30.0", - "debug": "^4.3.1", - "globby": "^11.0.3", - "is-glob": "^4.0.1", - "semver": "^7.3.5", - "tsutils": "^3.21.0" - } - }, - "array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true - }, - "eslint-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", - "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", - "dev": true, - "requires": { - "eslint-visitor-keys": "^2.0.0" - } - }, - "eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "dev": true - }, - "globby": { - "version": "11.0.4", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz", - "integrity": "sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==", - "dev": true, - "requires": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.1.1", - "ignore": "^5.1.4", - "merge2": "^1.3.0", - "slash": "^3.0.0" - } - }, - "ignore": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", - "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", - "dev": true - } - } - }, - "@typescript-eslint/parser": { - "version": "4.30.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.30.0.tgz", - "integrity": "sha512-HJ0XuluSZSxeboLU7Q2VQ6eLlCwXPBOGnA7CqgBnz2Db3JRQYyBDJgQnop6TZ+rsbSx5gEdWhw4rE4mDa1FnZg==", - "dev": true, - "requires": { - "@typescript-eslint/scope-manager": "4.30.0", - "@typescript-eslint/types": "4.30.0", - "@typescript-eslint/typescript-estree": "4.30.0", - "debug": "^4.3.1" - }, - "dependencies": { - "@typescript-eslint/typescript-estree": { - "version": "4.30.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.30.0.tgz", - "integrity": "sha512-6WN7UFYvykr/U0Qgy4kz48iGPWILvYL34xXJxvDQeiRE018B7POspNRVtAZscWntEPZpFCx4hcz/XBT+erenfg==", - "dev": true, - "requires": { - "@typescript-eslint/types": "4.30.0", - "@typescript-eslint/visitor-keys": "4.30.0", - "debug": "^4.3.1", - "globby": "^11.0.3", - "is-glob": "^4.0.1", - "semver": "^7.3.5", - "tsutils": "^3.21.0" - } - }, - "array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true - }, - "globby": { - "version": "11.0.4", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz", - "integrity": "sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==", - "dev": true, - "requires": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.1.1", - "ignore": "^5.1.4", - "merge2": "^1.3.0", - "slash": "^3.0.0" - } - }, - "ignore": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", - "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", - "dev": true - } - } - }, - "@typescript-eslint/scope-manager": { - "version": "4.30.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.30.0.tgz", - "integrity": "sha512-VJ/jAXovxNh7rIXCQbYhkyV2Y3Ac/0cVHP/FruTJSAUUm4Oacmn/nkN5zfWmWFEanN4ggP0vJSHOeajtHq3f8A==", - "dev": true, - "requires": { - "@typescript-eslint/types": "4.30.0", - "@typescript-eslint/visitor-keys": "4.30.0" - } - }, - "@typescript-eslint/types": { - "version": "4.30.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.30.0.tgz", - "integrity": "sha512-YKldqbNU9K4WpTNwBqtAerQKLLW/X2A/j4yw92e3ZJYLx+BpKLeheyzoPfzIXHfM8BXfoleTdiYwpsvVPvHrDw==", - "dev": true - }, - "@typescript-eslint/typescript-estree": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-3.10.1.tgz", - "integrity": "sha512-QbcXOuq6WYvnB3XPsZpIwztBoquEYLXh2MtwVU+kO8jgYCiv4G5xrSP/1wg4tkvrEE+esZVquIPX/dxPlePk1w==", - "dev": true, - "requires": { - "@typescript-eslint/types": "3.10.1", - "@typescript-eslint/visitor-keys": "3.10.1", - "debug": "^4.1.1", - "glob": "^7.1.6", - "is-glob": "^4.0.1", - "lodash": "^4.17.15", - "semver": "^7.3.2", - "tsutils": "^3.17.1" - }, - "dependencies": { - "@typescript-eslint/types": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-3.10.1.tgz", - "integrity": "sha512-+3+FCUJIahE9q0lDi1WleYzjCwJs5hIsbugIgnbB+dSCYUxl8L6PwmsyOPFZde2hc1DlTo/xnkOgiTLSyAbHiQ==", - "dev": true - }, - "@typescript-eslint/visitor-keys": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-3.10.1.tgz", - "integrity": "sha512-9JgC82AaQeglebjZMgYR5wgmfUdUc+EitGUUMW8u2nDckaeimzW+VsoLV6FoimPv2id3VQzfjwBxEMVz08ameQ==", - "dev": true, - "requires": { - "eslint-visitor-keys": "^1.1.0" - } - } - } - }, - "@typescript-eslint/visitor-keys": { - "version": "4.30.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.30.0.tgz", - "integrity": "sha512-pNaaxDt/Ol/+JZwzP7MqWc8PJQTUhZwoee/PVlQ+iYoYhagccvoHnC9e4l+C/krQYYkENxznhVSDwClIbZVxRw==", - "dev": true, - "requires": { - "@typescript-eslint/types": "4.30.0", - "eslint-visitor-keys": "^2.0.0" - }, - "dependencies": { - "eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "dev": true - } - } - }, - "acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "dev": true - }, - "acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "requires": {} - }, - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ansi-colors": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.3.tgz", - "integrity": "sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw==", - "dev": true - }, - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", - "dev": true, - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, - "aproba": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", - "dev": true - }, - "are-we-there-yet": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", - "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", - "dev": true, - "requires": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "arg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "dev": true - }, - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "array-includes": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.3.tgz", - "integrity": "sha512-gcem1KlBU7c9rB+Rq8/3PPKsK2kjqeEBa3bD5kkQo4nYlOHQCJqIJFqBXDEfwaRuYTT4E+FxA9xez7Gf/e3Q7A==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.2", - "get-intrinsic": "^1.1.1", - "is-string": "^1.0.5" - } - }, - "array-union": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", - "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", - "dev": true, - "requires": { - "array-uniq": "^1.0.1" - } - }, - "array-uniq": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", - "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", - "dev": true - }, - "array.prototype.flat": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.4.tgz", - "integrity": "sha512-4470Xi3GAPAjZqFcljX2xzckv1qeKPizoNkiS0+O4IoPR2ZNpcjE0pkhdihlDouK+x6QOast26B4Q/O9DJnwSg==", - "dev": true, - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.1" - } - }, - "assertion-error": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", - "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", - "dev": true - }, - "astral-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", - "dev": true - }, - "async": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", - "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", - "dev": true, - "requires": { - "lodash": "^4.17.14" - } - }, - "babel-runtime": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", - "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", - "dev": true, - "requires": { - "core-js": "^2.4.0", - "regenerator-runtime": "^0.11.0" - } - }, - "balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "base-x": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.8.tgz", - "integrity": "sha512-Rl/1AWP4J/zRrk54hhlxH4drNxPJXYUaKffODVI53/dAsV4t9fBxyxYKAVPU1XBHxYwOWP9h9H0hM2MVw4YfJA==", - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "dev": true - }, - "bech32": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/bech32/-/bech32-1.1.4.tgz", - "integrity": "sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==" - }, - "bigi": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/bigi/-/bigi-1.4.2.tgz", - "integrity": "sha1-nGZalfiLiwj8Bc/XMfVhhZ1yWCU=", - "dev": true - }, - "binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "dev": true - }, - "bindings": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", - "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", - "dev": true, - "requires": { - "file-uri-to-path": "1.0.0" - } - }, - "bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", - "dev": true, - "requires": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "requires": { - "fill-range": "^7.0.1" - } - }, - "browser-stdout": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", - "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", - "dev": true - }, - "browserify-aes": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", - "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", - "dev": true, - "requires": { - "buffer-xor": "^1.0.3", - "cipher-base": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.3", - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "bs58": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", - "integrity": "sha1-vhYedsNU9veIrkBx9j806MTwpCo=", - "dev": true, - "requires": { - "base-x": "^3.0.2" - } - }, - "buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "dev": true, - "requires": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true - }, - "buffer-xor": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", - "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", - "dev": true - }, - "call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - } - }, - "callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true - }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true - }, - "chai": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.4.tgz", - "integrity": "sha512-yS5H68VYOCtN1cjfwumDSuzn/9c+yza4f3reKXlE5rUg7SFcCEy90gJvydNgOYtblyf4Zi6jIWRnXOgErta0KA==", - "dev": true, - "requires": { - "assertion-error": "^1.1.0", - "check-error": "^1.0.2", - "deep-eql": "^3.0.1", - "get-func-name": "^2.0.0", - "pathval": "^1.1.1", - "type-detect": "^4.0.5" - } - }, - "chai-as-promised": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/chai-as-promised/-/chai-as-promised-7.1.1.tgz", - "integrity": "sha512-azL6xMoi+uxu6z4rhWQ1jbdUhOMhis2PvscD/xjLqNMkv3BPPp2JyyuTHOrf9BOosGpNQ11v6BKv/g57RXbiaA==", - "dev": true, - "requires": { - "check-error": "^1.0.2" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "check-error": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", - "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=", - "dev": true - }, - "chokidar": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.3.0.tgz", - "integrity": "sha512-dGmKLDdT3Gdl7fBUe8XK+gAtGmzy5Fn0XkkWQuYxGIgWVPPse2CxFA5mtrlD0TOHaHjEUqkWNyP1XdHoJES/4A==", - "dev": true, - "requires": { - "anymatch": "~3.1.1", - "braces": "~3.0.2", - "fsevents": "~2.1.1", - "glob-parent": "~5.1.0", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.2.0" - } - }, - "chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", - "dev": true - }, - "cipher-base": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", - "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "cliui": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", - "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", - "dev": true, - "requires": { - "string-width": "^3.1.0", - "strip-ansi": "^5.2.0", - "wrap-ansi": "^5.1.0" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - } - } - }, - "code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", - "dev": true - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true - }, - "common-tags": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.0.tgz", - "integrity": "sha512-6P6g0uetGpW/sdyUy/iQQCbFF0kWVMSIVSyYz7Zgjcgh8mgw8PQzDNZeyZ5DQ2gM7LBoZPHmnjz8rUthkBG5tw==", - "dev": true - }, - "commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", - "dev": true - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true - }, - "console-control-strings": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", - "dev": true - }, - "core-js": { - "version": "2.6.12", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.12.tgz", - "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==", - "dev": true - }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", - "dev": true - }, - "create-hash": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", - "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", - "dev": true, - "requires": { - "cipher-base": "^1.0.1", - "inherits": "^2.0.1", - "md5.js": "^1.3.4", - "ripemd160": "^2.0.1", - "sha.js": "^2.4.0" - } - }, - "create-hmac": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", - "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", - "dev": true, - "requires": { - "cipher-base": "^1.0.3", - "create-hash": "^1.1.0", - "inherits": "^2.0.1", - "ripemd160": "^2.0.0", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, - "create-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", - "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", - "dev": true - }, - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "dependencies": { - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - } - } - }, - "debug": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", - "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", - "dev": true - }, - "decompress-response": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-4.2.1.tgz", - "integrity": "sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw==", - "dev": true, - "requires": { - "mimic-response": "^2.0.0" - } - }, - "deep-eql": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", - "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", - "dev": true, - "requires": { - "type-detect": "^4.0.0" - } - }, - "deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "dev": true - }, - "deep-is": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", - "dev": true - }, - "define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", - "dev": true, - "requires": { - "object-keys": "^1.0.12" - } - }, - "delegates": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", - "dev": true - }, - "detect-libc": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", - "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=", - "dev": true - }, - "diff": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", - "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", - "dev": true - }, - "dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "requires": { - "path-type": "^4.0.0" - }, - "dependencies": { - "path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true - } - } - }, - "dlv": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", - "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", - "dev": true - }, - "doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, - "requires": { - "esutils": "^2.0.2" - } - }, - "ecurve": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/ecurve/-/ecurve-1.0.6.tgz", - "integrity": "sha512-/BzEjNfiSuB7jIWKcS/z8FK9jNjmEWvUV2YZ4RLSmcDtP7Lq0m6FvDuSnJpBlDpGRpfRQeTLGLBI8H+kEv0r+w==", - "dev": true, - "requires": { - "bigi": "^1.1.0", - "safe-buffer": "^5.0.1" - } - }, - "email-addresses": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/email-addresses/-/email-addresses-3.1.0.tgz", - "integrity": "sha512-k0/r7GrWVL32kZlGwfPNgB2Y/mMXVTq/decgLczm/j34whdaspNrZO8CnXPf1laaHxI6ptUlsnAxN+UAPw+fzg==", - "dev": true - }, - "emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", - "dev": true - }, - "end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dev": true, - "requires": { - "once": "^1.4.0" - } - }, - "enquirer": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", - "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", - "dev": true, - "requires": { - "ansi-colors": "^4.1.1" - }, - "dependencies": { - "ansi-colors": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", - "dev": true - } - } - }, - "error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, - "requires": { - "is-arrayish": "^0.2.1" - } - }, - "es-abstract": { - "version": "1.18.5", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.5.tgz", - "integrity": "sha512-DDggyJLoS91CkJjgauM5c0yZMjiD1uK3KcaCeAmffGwZ+ODWzOkPN4QwRbsK5DOFf06fywmyLci3ZD8jLGhVYA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "get-intrinsic": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.2", - "internal-slot": "^1.0.3", - "is-callable": "^1.2.3", - "is-negative-zero": "^2.0.1", - "is-regex": "^1.1.3", - "is-string": "^1.0.6", - "object-inspect": "^1.11.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.2", - "string.prototype.trimend": "^1.0.4", - "string.prototype.trimstart": "^1.0.4", - "unbox-primitive": "^1.0.1" - }, - "dependencies": { - "object.assign": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", - "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", - "object-keys": "^1.1.1" - } - } - } - }, - "es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dev": true, - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true - }, - "eslint": { - "version": "7.32.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.32.0.tgz", - "integrity": "sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==", - "dev": true, - "requires": { - "@babel/code-frame": "7.12.11", - "@eslint/eslintrc": "^0.4.3", - "@humanwhocodes/config-array": "^0.5.0", - "ajv": "^6.10.0", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.0.1", - "doctrine": "^3.0.0", - "enquirer": "^2.3.5", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^5.1.1", - "eslint-utils": "^2.1.0", - "eslint-visitor-keys": "^2.0.0", - "espree": "^7.3.1", - "esquery": "^1.4.0", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^5.1.2", - "globals": "^13.6.0", - "ignore": "^4.0.6", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "js-yaml": "^3.13.1", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.0.4", - "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "progress": "^2.0.0", - "regexpp": "^3.1.0", - "semver": "^7.2.1", - "strip-ansi": "^6.0.0", - "strip-json-comments": "^3.1.0", - "table": "^6.0.9", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true - }, - "doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "requires": { - "esutils": "^2.0.2" - } - }, - "escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true - }, - "eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "dev": true - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } - }, - "strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true - } - } - }, - "eslint-import-resolver-node": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz", - "integrity": "sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw==", - "dev": true, - "requires": { - "debug": "^3.2.7", - "resolve": "^1.20.0" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - } - } - }, - "eslint-import-resolver-typescript": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-2.4.0.tgz", - "integrity": "sha512-useJKURidCcldRLCNKWemr1fFQL1SzB3G4a0li6lFGvlc5xGe1hY343bvG07cbpCzPuM/lK19FIJB3XGFSkplA==", - "dev": true, - "requires": { - "debug": "^4.1.1", - "glob": "^7.1.6", - "is-glob": "^4.0.1", - "resolve": "^1.17.0", - "tsconfig-paths": "^3.9.0" - } - }, - "eslint-module-utils": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.6.2.tgz", - "integrity": "sha512-QG8pcgThYOuqxupd06oYTZoNOGaUdTY1PqK+oS6ElF6vs4pBdk/aYxFVQQXzcrAqp9m7cl7lb2ubazX+g16k2Q==", - "dev": true, - "requires": { - "debug": "^3.2.7", - "pkg-dir": "^2.0.0" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - } - } - }, - "eslint-plugin-import": { - "version": "2.24.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.24.2.tgz", - "integrity": "sha512-hNVtyhiEtZmpsabL4neEj+6M5DCLgpYyG9nzJY8lZQeQXEn5UPW1DpUdsMHMXsq98dbNm7nt1w9ZMSVpfJdi8Q==", - "dev": true, - "requires": { - "array-includes": "^3.1.3", - "array.prototype.flat": "^1.2.4", - "debug": "^2.6.9", - "doctrine": "^2.1.0", - "eslint-import-resolver-node": "^0.3.6", - "eslint-module-utils": "^2.6.2", - "find-up": "^2.0.0", - "has": "^1.0.3", - "is-core-module": "^2.6.0", - "minimatch": "^3.0.4", - "object.values": "^1.1.4", - "pkg-up": "^2.0.0", - "read-pkg-up": "^3.0.0", - "resolve": "^1.20.0", - "tsconfig-paths": "^3.11.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "eslint-plugin-mocha": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-mocha/-/eslint-plugin-mocha-8.2.0.tgz", - "integrity": "sha512-8oOR47Ejt+YJPNQzedbiklDqS1zurEaNrxXpRs+Uk4DMDPVmKNagShFeUaYsfvWP55AhI+P1non5QZAHV6K78A==", - "dev": true, - "requires": { - "eslint-utils": "^2.1.0", - "ramda": "^0.27.1" - } - }, - "eslint-plugin-prettier": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-3.4.1.tgz", - "integrity": "sha512-htg25EUYUeIhKHXjOinK4BgCcDwtLHjqaxCDsMy5nbnUMkKFvIhMVCp+5GFUXQ4Nr8lBsPqtGAqBenbpFqAA2g==", - "dev": true, - "requires": { - "prettier-linter-helpers": "^1.0.0" - } - }, - "eslint-plugin-simple-import-sort": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-simple-import-sort/-/eslint-plugin-simple-import-sort-7.0.0.tgz", - "integrity": "sha512-U3vEDB5zhYPNfxT5TYR7u01dboFZp+HNpnGhkDB2g/2E4wZ/g1Q9Ton8UwCLfRV9yAKyYqDh62oHOamvkFxsvw==", - "dev": true, - "requires": {} - }, - "eslint-plugin-typescript": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-typescript/-/eslint-plugin-typescript-0.14.0.tgz", - "integrity": "sha512-2u1WnnDF2mkWWgU1lFQ2RjypUlmRoBEvQN02y9u+IL12mjWlkKFGEBnVsjs9Y8190bfPQCvWly1c2rYYUSOxWw==", - "dev": true, - "requires": { - "requireindex": "~1.1.0" - } - }, - "eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "dependencies": { - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true - } - } - }, - "eslint-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", - "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", - "dev": true, - "requires": { - "eslint-visitor-keys": "^1.1.0" - } - }, - "eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true - }, - "espree": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", - "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", - "dev": true, - "requires": { - "acorn": "^7.4.0", - "acorn-jsx": "^5.3.1", - "eslint-visitor-keys": "^1.3.0" - } - }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true - }, - "esquery": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", - "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", - "dev": true, - "requires": { - "estraverse": "^5.1.0" - } - }, - "esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "requires": { - "estraverse": "^5.2.0" - } - }, - "estraverse": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", - "dev": true - }, - "esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true - }, - "events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==" - }, - "evp_bytestokey": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", - "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", - "dev": true, - "requires": { - "md5.js": "^1.3.4", - "safe-buffer": "^5.1.1" - } - }, - "expand-template": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", - "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", - "dev": true - }, - "fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - }, - "fast-diff": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz", - "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==", - "dev": true - }, - "fast-glob": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz", - "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==", - "dev": true, - "requires": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - } - }, - "fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true - }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", - "dev": true - }, - "fastq": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.12.0.tgz", - "integrity": "sha512-VNX0QkHK3RsXVKr9KrlUv/FoTa0NdbYoHHl7uXHv2rzyHSlxjdNAKug2twd9luJxpcyNeAgf5iPPMutJO67Dfg==", - "dev": true, - "requires": { - "reusify": "^1.0.4" - } - }, - "file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "dev": true, - "requires": { - "flat-cache": "^3.0.4" - } - }, - "file-uri-to-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", - "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", - "dev": true - }, - "filename-reserved-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz", - "integrity": "sha1-q/c9+rc10EVECr/qLZHzieu/oik=", - "dev": true - }, - "filenamify": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/filenamify/-/filenamify-4.3.0.tgz", - "integrity": "sha512-hcFKyUG57yWGAzu1CMt/dPzYZuv+jAJUT85bL8mrXvNe6hWj6yEHEc4EdcgiA6Z3oi1/9wXJdZPXF2dZNgwgOg==", - "dev": true, - "requires": { - "filename-reserved-regex": "^2.0.0", - "strip-outer": "^1.0.1", - "trim-repeated": "^1.0.0" - } - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "find-cache-dir": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", - "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", - "dev": true, - "requires": { - "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.0" - }, - "dependencies": { - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true - }, - "pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, - "requires": { - "find-up": "^4.0.0" - } - } - } - }, - "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "dev": true, - "requires": { - "locate-path": "^2.0.0" - } - }, - "flat": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/flat/-/flat-4.1.1.tgz", - "integrity": "sha512-FmTtBsHskrU6FJ2VxCnsDb84wu9zhmO3cUX2kGFb5tuwhfXxGciiT0oRY+cck35QmG+NmGh5eLz6lLCpWTqwpA==", - "dev": true, - "requires": { - "is-buffer": "~2.0.3" - } - }, - "flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", - "dev": true, - "requires": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" - } - }, - "flatted": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.2.tgz", - "integrity": "sha512-JaTY/wtrcSyvXJl4IMFHPKyFur1sE9AUqc0QnhOaJ0CxHtAoIV8pYDzeEfAaNEtGkOfq4gr3LBFmdXW5mOQFnA==", - "dev": true - }, - "flow-bin": { - "version": "0.149.0", - "resolved": "https://registry.npmjs.org/flow-bin/-/flow-bin-0.149.0.tgz", - "integrity": "sha512-32hM6iKSInPCUuooS23SJ4c5Up0Tt9ozrXEE6urEpTDJU0z/vQblnCBRt3QZaEEDzSKOu2QZAU6K7fbShOOHaQ==", - "dev": true - }, - "flowgen": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/flowgen/-/flowgen-1.14.1.tgz", - "integrity": "sha512-rpwM75zi4BH5CLHtak0/1wZ40/3eEi2E7CafjiGPnyL2b9y3zznSrgbNTnpkspU1o4C0Ypsvfwi0lFslIVxWVw==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/highlight": "^7.10.4", - "commander": "^6.1.0", - "lodash": "^4.17.20", - "prettier": "^2.1.1", - "shelljs": "^0.8.4", - "typescript": "^4.0.2", - "typescript-compiler": "^1.4.1-2" - }, - "dependencies": { - "commander": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", - "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==", - "dev": true - } - } - }, - "fs-constants": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", - "dev": true - }, - "fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", - "dev": true, - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", - "dev": true - }, - "gauge": { - "version": "2.7.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", - "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", - "dev": true, - "requires": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" - }, - "dependencies": { - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dev": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - } - } - }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true - }, - "get-func-name": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", - "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=", - "dev": true - }, - "get-intrinsic": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", - "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1" - } - }, - "gh-pages": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/gh-pages/-/gh-pages-3.2.3.tgz", - "integrity": "sha512-jA1PbapQ1jqzacECfjUaO9gV8uBgU6XNMV0oXLtfCX3haGLe5Atq8BxlrADhbD6/UdG9j6tZLWAkAybndOXTJg==", - "dev": true, - "requires": { - "async": "^2.6.1", - "commander": "^2.18.0", - "email-addresses": "^3.0.1", - "filenamify": "^4.3.0", - "find-cache-dir": "^3.3.1", - "fs-extra": "^8.1.0", - "globby": "^6.1.0" - } - }, - "github-from-package": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", - "integrity": "sha1-l/tdlr/eiXMxPyDoKI75oWf6ZM4=", - "dev": true - }, - "glob": { - "version": "7.1.7", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", - "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - }, - "globals": { - "version": "13.11.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.11.0.tgz", - "integrity": "sha512-08/xrJ7wQjK9kkkRoI3OFUBbLx4f+6x3SGwcPvQ0QH6goFDrOU2oyAWrmh3dJezu65buo+HBMzAMQy6rovVC3g==", - "dev": true, - "requires": { - "type-fest": "^0.20.2" - } - }, - "globby": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", - "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", - "dev": true, - "requires": { - "array-union": "^1.0.1", - "glob": "^7.0.3", - "object-assign": "^4.0.1", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - }, - "dependencies": { - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - } - } - }, - "graceful-fs": { - "version": "4.2.8", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", - "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==", - "dev": true - }, - "growl": { - "version": "1.10.5", - "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", - "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", - "dev": true - }, - "handlebars": { - "version": "4.7.7", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", - "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==", - "dev": true, - "requires": { - "minimist": "^1.2.5", - "neo-async": "^2.6.0", - "source-map": "^0.6.1", - "uglify-js": "^3.1.4", - "wordwrap": "^1.0.0" - } - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-ansi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "has-bigints": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", - "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "has-symbols": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", - "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", - "dev": true - }, - "has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", - "dev": true, - "requires": { - "has-symbols": "^1.0.2" - } - }, - "has-unicode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", - "dev": true - }, - "hash-base": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", - "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", - "dev": true, - "requires": { - "inherits": "^2.0.4", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" - } - }, - "he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", - "dev": true - }, - "hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true - }, - "ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "dev": true - }, - "ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true - }, - "import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dev": true, - "requires": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - } - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", - "dev": true - }, - "indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "dev": true - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "dev": true - }, - "internal-slot": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", - "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", - "dev": true, - "requires": { - "get-intrinsic": "^1.1.0", - "has": "^1.0.3", - "side-channel": "^1.0.4" - } - }, - "interpret": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", - "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", - "dev": true - }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", - "dev": true - }, - "is-bigint": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", - "dev": true, - "requires": { - "has-bigints": "^1.0.1" - } - }, - "is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "requires": { - "binary-extensions": "^2.0.0" - } - }, - "is-boolean-object": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } - }, - "is-buffer": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", - "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", - "dev": true - }, - "is-callable": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", - "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==", - "dev": true - }, - "is-core-module": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.6.0.tgz", - "integrity": "sha512-wShG8vs60jKfPWpF2KZRaAtvt3a20OAn7+IJ6hLPECpSABLcKtFKTTI4ZtH5QcBruBHlq+WsdHWyz0BCZW7svQ==", - "dev": true, - "requires": { - "has": "^1.0.3" - } - }, - "is-date-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", - "dev": true, - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-negative-zero": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", - "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==", - "dev": true - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true - }, - "is-number-object": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.6.tgz", - "integrity": "sha512-bEVOqiRcvo3zO1+G2lVMy+gkkEm9Yh7cDMRusKKu5ZJKPUYSJwICTKZrNKHA2EbSP0Tu0+6B/emsYNHZyn6K8g==", - "dev": true, - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } - }, - "is-string": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", - "dev": true, - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", - "dev": true, - "requires": { - "has-symbols": "^1.0.2" - } - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true - }, - "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true - }, - "js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "json-parse-better-errors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", - "dev": true - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", - "dev": true - }, - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dev": true, - "requires": { - "minimist": "^1.2.0" - } - }, - "jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6" - } - }, - "levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "requires": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - } - }, - "load-json-file": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", - "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^4.0.0", - "pify": "^3.0.0", - "strip-bom": "^3.0.0" - } - }, - "locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", - "dev": true, - "requires": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - } - }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, - "lodash.clonedeep": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", - "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", - "dev": true - }, - "lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true - }, - "lodash.truncate": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", - "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=", - "dev": true - }, - "log-symbols": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-3.0.0.tgz", - "integrity": "sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ==", - "dev": true, - "requires": { - "chalk": "^2.4.2" - }, - "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "loglevel": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.7.1.tgz", - "integrity": "sha512-Hesni4s5UkWkwCGJMQGAh71PaLUmKFM60dHvq0zi/vDhhrzuk+4GgNbTXJ12YYQJn6ZKBDNIjYcuQGKudvqrIw==", - "dev": true - }, - "loglevel-colored-level-prefix": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/loglevel-colored-level-prefix/-/loglevel-colored-level-prefix-1.0.0.tgz", - "integrity": "sha1-akAhj9x64V/HbD0PPmdsRlOIYD4=", - "dev": true, - "requires": { - "chalk": "^1.1.3", - "loglevel": "^1.4.1" - }, - "dependencies": { - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } - } - }, - "long": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", - "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==", - "dev": true - }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "requires": { - "yallist": "^4.0.0" - } - }, - "lunr": { - "version": "2.3.9", - "resolved": "https://registry.npmjs.org/lunr/-/lunr-2.3.9.tgz", - "integrity": "sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==", - "dev": true - }, - "make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, - "requires": { - "semver": "^6.0.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "make-error": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "dev": true - }, - "marked": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/marked/-/marked-3.0.2.tgz", - "integrity": "sha512-TMJQQ79Z0e3rJYazY0tIoMsFzteUGw9fB3FD+gzuIT3zLuG9L9ckIvUfF51apdJkcqc208jJN2KbtPbOvXtbjA==", - "dev": true - }, - "md5.js": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", - "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", - "dev": true, - "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true - }, - "micromatch": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", - "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", - "dev": true, - "requires": { - "braces": "^3.0.1", - "picomatch": "^2.2.3" - } - }, - "mimic-response": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-2.1.0.tgz", - "integrity": "sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==", - "dev": true - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", - "dev": true - }, - "mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "dev": true, - "requires": { - "minimist": "^1.2.5" - } - }, - "mkdirp-classic": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", - "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", - "dev": true - }, - "mocha": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-7.2.0.tgz", - "integrity": "sha512-O9CIypScywTVpNaRrCAgoUnJgozpIofjKUYmJhiCIJMiuYnLI6otcb1/kpW9/n/tJODHGZ7i8aLQoDVsMtOKQQ==", - "dev": true, - "requires": { - "ansi-colors": "3.2.3", - "browser-stdout": "1.3.1", - "chokidar": "3.3.0", - "debug": "3.2.6", - "diff": "3.5.0", - "escape-string-regexp": "1.0.5", - "find-up": "3.0.0", - "glob": "7.1.3", - "growl": "1.10.5", - "he": "1.2.0", - "js-yaml": "3.13.1", - "log-symbols": "3.0.0", - "minimatch": "3.0.4", - "mkdirp": "0.5.5", - "ms": "2.1.1", - "node-environment-flags": "1.0.6", - "object.assign": "4.1.0", - "strip-json-comments": "2.0.1", - "supports-color": "6.0.0", - "which": "1.3.1", - "wide-align": "1.1.3", - "yargs": "13.3.2", - "yargs-parser": "13.1.2", - "yargs-unparser": "1.6.0" - }, - "dependencies": { - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - }, - "dependencies": { - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } - } - }, - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } - }, - "glob": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", - "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "js-yaml": { - "version": "3.13.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", - "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", - "dev": true - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "requires": { - "p-limit": "^2.0.0" - } - } - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "napi-build-utils": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", - "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==", - "dev": true - }, - "natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", - "dev": true - }, - "neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "dev": true - }, - "node-abi": { - "version": "2.30.0", - "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-2.30.0.tgz", - "integrity": "sha512-g6bZh3YCKQRdwuO/tSZZYJAw622SjsRfJ2X0Iy4sSOHZ34/sPPdVBn8fev2tj7njzLwuqPw9uMtGsGkO5kIQvg==", - "dev": true, - "requires": { - "semver": "^5.4.1" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - } - } - }, - "node-addon-api": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.0.2.tgz", - "integrity": "sha512-+D4s2HCnxPd5PjjI0STKwncjXTUKKqm74MDMz9OPXavjsGmjkvwgLtA5yoxJUdmpj52+2u+RrXgPipahKczMKg==", - "dev": true - }, - "node-environment-flags": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/node-environment-flags/-/node-environment-flags-1.0.6.tgz", - "integrity": "sha512-5Evy2epuL+6TM0lCQGpFIj6KwiEsGh1SrHUhTbNX+sLbBtjidPZFAnVK9y5yU1+h//RitLbRHTIMyxQPtxMdHw==", - "dev": true, - "requires": { - "object.getownpropertydescriptors": "^2.0.3", - "semver": "^5.7.0" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - } - } - }, - "node-fetch": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", - "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==", - "dev": true - }, - "node-hid": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/node-hid/-/node-hid-2.1.1.tgz", - "integrity": "sha512-Skzhqow7hyLZU93eIPthM9yjot9lszg9xrKxESleEs05V2NcbUptZc5HFqzjOkSmL0sFlZFr3kmvaYebx06wrw==", - "dev": true, - "requires": { - "bindings": "^1.5.0", - "node-addon-api": "^3.0.2", - "prebuild-install": "^6.0.0" - }, - "dependencies": { - "node-addon-api": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", - "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==", - "dev": true - }, - "prebuild-install": { - "version": "6.1.4", - "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-6.1.4.tgz", - "integrity": "sha512-Z4vpywnK1lBg+zdPCVCsKq0xO66eEV9rWo2zrROGGiRS4JtueBOdlB1FnY8lcy7JsUud/Q3ijUxyWN26Ika0vQ==", - "dev": true, - "requires": { - "detect-libc": "^1.0.3", - "expand-template": "^2.0.3", - "github-from-package": "0.0.0", - "minimist": "^1.2.3", - "mkdirp-classic": "^0.5.3", - "napi-build-utils": "^1.0.1", - "node-abi": "^2.21.0", - "npmlog": "^4.0.1", - "pump": "^3.0.0", - "rc": "^1.2.7", - "simple-get": "^3.0.3", - "tar-fs": "^2.0.0", - "tunnel-agent": "^0.6.0" - } - } - } - }, - "noop-logger": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/noop-logger/-/noop-logger-0.1.1.tgz", - "integrity": "sha1-lKKxYzxPExdVMAfYlm/Q6EG2pMI=", - "dev": true - }, - "normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, - "requires": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - } - } - }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true - }, - "npmlog": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", - "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", - "dev": true, - "requires": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" - } - }, - "number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", - "dev": true - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", - "dev": true - }, - "object-inspect": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.11.0.tgz", - "integrity": "sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg==", - "dev": true - }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true - }, - "object.assign": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", - "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", - "dev": true, - "requires": { - "define-properties": "^1.1.2", - "function-bind": "^1.1.1", - "has-symbols": "^1.0.0", - "object-keys": "^1.0.11" - } - }, - "object.getownpropertydescriptors": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.2.tgz", - "integrity": "sha512-WtxeKSzfBjlzL+F9b7M7hewDzMwy+C8NRssHd1YrNlzHzIDrXcXiNOMrezdAEM4UXixgV+vvnyBeN7Rygl2ttQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.2" - } - }, - "object.values": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.4.tgz", - "integrity": "sha512-TnGo7j4XSnKQoK3MfvkzqKCi0nVe/D9I9IjwTNYdb/fxYHpjrluHVOgw0AF6jrRFGMPHdfuidR09tIDiIvnaSg==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.2" - } - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "onigasm": { - "version": "2.2.5", - "resolved": "https://registry.npmjs.org/onigasm/-/onigasm-2.2.5.tgz", - "integrity": "sha512-F+th54mPc0l1lp1ZcFMyL/jTs2Tlq4SqIHKIXGZOR/VkHkF9A7Fr5rRr5+ZG/lWeRsyrClLYRq7s/yFQ/XhWCA==", - "dev": true, - "requires": { - "lru-cache": "^5.1.1" - }, - "dependencies": { - "lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dev": true, - "requires": { - "yallist": "^3.0.2" - } - }, - "yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true - } - } - }, - "optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", - "dev": true, - "requires": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.3" - } - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", - "dev": true, - "requires": { - "p-limit": "^1.1.0" - }, - "dependencies": { - "p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "dev": true, - "requires": { - "p-try": "^1.0.0" - } - }, - "p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", - "dev": true - } - } - }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true - }, - "parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, - "requires": { - "callsites": "^3.0.0" - } - }, - "parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", - "dev": true, - "requires": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - } - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true - }, - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true - }, - "path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true - }, - "path-type": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", - "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", - "dev": true, - "requires": { - "pify": "^3.0.0" - } - }, - "pathval": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", - "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", - "dev": true - }, - "picomatch": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", - "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", - "dev": true - }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - }, - "pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", - "dev": true - }, - "pinkie-promise": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", - "dev": true, - "requires": { - "pinkie": "^2.0.0" - } - }, - "pkg-dir": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", - "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", - "dev": true, - "requires": { - "find-up": "^2.1.0" - } - }, - "pkg-up": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-2.0.0.tgz", - "integrity": "sha1-yBmscoBZpGHKscOImivjxJoATX8=", - "dev": true, - "requires": { - "find-up": "^2.1.0" - } - }, - "prebuild-install": { - "version": "5.3.6", - "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-5.3.6.tgz", - "integrity": "sha512-s8Aai8++QQGi4sSbs/M1Qku62PFK49Jm1CbgXklGz4nmHveDq0wzJkg7Na5QbnO1uNH8K7iqx2EQ/mV0MZEmOg==", - "dev": true, - "requires": { - "detect-libc": "^1.0.3", - "expand-template": "^2.0.3", - "github-from-package": "0.0.0", - "minimist": "^1.2.3", - "mkdirp-classic": "^0.5.3", - "napi-build-utils": "^1.0.1", - "node-abi": "^2.7.0", - "noop-logger": "^0.1.1", - "npmlog": "^4.0.1", - "pump": "^3.0.0", - "rc": "^1.2.7", - "simple-get": "^3.0.3", - "tar-fs": "^2.0.0", - "tunnel-agent": "^0.6.0", - "which-pm-runs": "^1.0.0" - } - }, - "prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true - }, - "prettier": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.3.2.tgz", - "integrity": "sha512-lnJzDfJ66zkMy58OL5/NY5zp70S7Nz6KqcKkXYzn2tMVrNxvbqaBpg7H3qHaLxCJ5lNMsGuM8+ohS7cZrthdLQ==", - "dev": true - }, - "prettier-eslint": { - "version": "12.0.0", - "resolved": "https://registry.npmjs.org/prettier-eslint/-/prettier-eslint-12.0.0.tgz", - "integrity": "sha512-N8SGGQwAosISXTNl1E57sBbtnqUGlyRWjcfIUxyD3HF4ynehA9GZ8IfJgiep/OfYvCof/JEpy9ZqSl250Wia7A==", - "dev": true, - "requires": { - "@typescript-eslint/parser": "^3.0.0", - "common-tags": "^1.4.0", - "dlv": "^1.1.0", - "eslint": "^7.9.0", - "indent-string": "^4.0.0", - "lodash.merge": "^4.6.0", - "loglevel-colored-level-prefix": "^1.0.0", - "prettier": "^2.0.0", - "pretty-format": "^23.0.1", - "require-relative": "^0.8.7", - "typescript": "^3.9.3", - "vue-eslint-parser": "~7.1.0" - }, - "dependencies": { - "@typescript-eslint/experimental-utils": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-3.10.1.tgz", - "integrity": "sha512-DewqIgscDzmAfd5nOGe4zm6Bl7PKtMG2Ad0KG8CUZAHlXfAKTF9Ol5PXhiMh39yRL2ChRH1cuuUGOcVyyrhQIw==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.3", - "@typescript-eslint/types": "3.10.1", - "@typescript-eslint/typescript-estree": "3.10.1", - "eslint-scope": "^5.0.0", - "eslint-utils": "^2.0.0" - } - }, - "@typescript-eslint/parser": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-3.10.1.tgz", - "integrity": "sha512-Ug1RcWcrJP02hmtaXVS3axPPTTPnZjupqhgj+NnZ6BCkwSImWk/283347+x9wN+lqOdK9Eo3vsyiyDHgsmiEJw==", - "dev": true, - "requires": { - "@types/eslint-visitor-keys": "^1.0.0", - "@typescript-eslint/experimental-utils": "3.10.1", - "@typescript-eslint/types": "3.10.1", - "@typescript-eslint/typescript-estree": "3.10.1", - "eslint-visitor-keys": "^1.1.0" - } - }, - "@typescript-eslint/types": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-3.10.1.tgz", - "integrity": "sha512-+3+FCUJIahE9q0lDi1WleYzjCwJs5hIsbugIgnbB+dSCYUxl8L6PwmsyOPFZde2hc1DlTo/xnkOgiTLSyAbHiQ==", - "dev": true - }, - "typescript": { - "version": "3.9.10", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.10.tgz", - "integrity": "sha512-w6fIxVE/H1PkLKcCPsFqKE7Kv7QUwhU8qQY2MueZXWx5cPZdwFupLgKK3vntcK98BtNHZtAF4LA/yl2a7k8R6Q==", - "dev": true - } - } - }, - "prettier-linter-helpers": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", - "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", - "dev": true, - "requires": { - "fast-diff": "^1.1.2" - } - }, - "pretty-format": { - "version": "23.6.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-23.6.0.tgz", - "integrity": "sha512-zf9NV1NSlDLDjycnwm6hpFATCGl/K1lt0R/GdkAK2O5LN/rwJoB+Mh93gGJjut4YbmecbfgLWVGSTCr0Ewvvbw==", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0", - "ansi-styles": "^3.2.0" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - } - } - }, - "process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true - }, - "progress": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", - "dev": true - }, - "pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true - }, - "queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true - }, - "ramda": { - "version": "0.27.1", - "resolved": "https://registry.npmjs.org/ramda/-/ramda-0.27.1.tgz", - "integrity": "sha512-PgIdVpn5y5Yns8vqb8FzBUEYn98V3xcPgawAkkgj0YJ0qDsnHCiNmZYfOGMgOvoB0eWFLpYbhxUR3mxfDIMvpw==", - "dev": true - }, - "randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dev": true, - "requires": { - "safe-buffer": "^5.1.0" - } - }, - "rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "dev": true, - "requires": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - } - }, - "read-pkg": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", - "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", - "dev": true, - "requires": { - "load-json-file": "^4.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^3.0.0" - } - }, - "read-pkg-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz", - "integrity": "sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc=", - "dev": true, - "requires": { - "find-up": "^2.0.0", - "read-pkg": "^3.0.0" - } - }, - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "readdirp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.2.0.tgz", - "integrity": "sha512-crk4Qu3pmXwgxdSgGhgA/eXiJAPQiX4GMOZZMXnqKxHX7TaoL+3gQVo/WeuAiogr07DpnfjIMpXXa+PAIvwPGQ==", - "dev": true, - "requires": { - "picomatch": "^2.0.4" - } - }, - "readline-sync": { - "version": "1.4.10", - "resolved": "https://registry.npmjs.org/readline-sync/-/readline-sync-1.4.10.tgz", - "integrity": "sha512-gNva8/6UAe8QYepIQH/jQ2qn91Qj0B9sYjMBBs3QOB8F2CXcKgLxQaJRP76sWVRQt+QU+8fAkCbCvjjMFu7Ycw==" - }, - "rechoir": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", - "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", - "dev": true, - "requires": { - "resolve": "^1.1.6" - } - }, - "regenerator-runtime": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", - "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==", - "dev": true - }, - "regexpp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", - "dev": true - }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", - "dev": true - }, - "require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "dev": true - }, - "require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", - "dev": true - }, - "require-relative": { - "version": "0.8.7", - "resolved": "https://registry.npmjs.org/require-relative/-/require-relative-0.8.7.tgz", - "integrity": "sha1-eZlTn8ngR6N5KPoZb44VY9q9Nt4=", - "dev": true - }, - "requireindex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/requireindex/-/requireindex-1.1.0.tgz", - "integrity": "sha1-5UBLgVV+91225JxacgBIk/4D4WI=", - "dev": true - }, - "resolve": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", - "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", - "dev": true, - "requires": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" - } - }, - "resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true - }, - "reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true - }, - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "ripemd160": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", - "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", - "dev": true, - "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1" - } - }, - "run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "requires": { - "queue-microtask": "^1.2.2" - } - }, - "rxjs": { - "version": "6.6.7", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", - "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", - "requires": { - "tslib": "^1.9.0" - } - }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" - }, - "semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", - "requires": { - "lru-cache": "^6.0.0" - } - }, - "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", - "dev": true - }, - "sha.js": { - "version": "2.4.11", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", - "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "requires": { - "shebang-regex": "^3.0.0" - } - }, - "shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true - }, - "shelljs": { - "version": "0.8.4", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.4.tgz", - "integrity": "sha512-7gk3UZ9kOfPLIAbslLzyWeGiEqx9e3rxwZM0KE6EL8GlGwjym9Mrlx5/p33bWTu9YG6vcS4MBxYZDHYr5lr8BQ==", - "dev": true, - "requires": { - "glob": "^7.0.0", - "interpret": "^1.0.0", - "rechoir": "^0.6.2" - } - }, - "shiki": { - "version": "0.9.8", - "resolved": "https://registry.npmjs.org/shiki/-/shiki-0.9.8.tgz", - "integrity": "sha512-499zQUTjcNTVwwiaPrWldUTXIV3T9HZWxDwE82bY+9GE7P2uD6hpHUTXNbTof3iOG6WT+/062+OMbl0lDoG8WQ==", - "dev": true, - "requires": { - "json5": "^2.2.0", - "onigasm": "^2.2.5", - "vscode-textmate": "5.2.0" - }, - "dependencies": { - "json5": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", - "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", - "dev": true, - "requires": { - "minimist": "^1.2.5" - } - } - } - }, - "side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "dev": true, - "requires": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - } - }, - "signal-exit": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", - "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", - "dev": true - }, - "simple-concat": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", - "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", - "dev": true - }, - "simple-get": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-3.1.0.tgz", - "integrity": "sha512-bCR6cP+aTdScaQCnQKbPKtJOKDp/hj9EDLJo3Nw4y1QksqaovlW/bnptB6/c1e+qmNIDHRK+oXFDdEqBT8WzUA==", - "dev": true, - "requires": { - "decompress-response": "^4.2.0", - "once": "^1.3.1", - "simple-concat": "^1.0.0" - } - }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true - }, - "slice-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - } - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "source-map-support": { - "version": "0.5.19", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", - "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "spdx-correct": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", - "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", - "dev": true, - "requires": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-exceptions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", - "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", - "dev": true - }, - "spdx-expression-parse": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", - "dev": true, - "requires": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-license-ids": { - "version": "3.0.10", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.10.tgz", - "integrity": "sha512-oie3/+gKf7QtpitB0LYLETe+k8SifzsX4KixvpOsbI6S0kRiRQ5MKOio8eMSAKQ17N06+wdEOXRiId+zOxo0hA==", - "dev": true - }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true - }, - "string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dev": true, - "requires": { - "safe-buffer": "~5.2.0" - } - }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - } - } - }, - "string.prototype.trimend": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", - "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - } - }, - "string.prototype.trimstart": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", - "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "dev": true - }, - "strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", - "dev": true - }, - "strip-outer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/strip-outer/-/strip-outer-1.0.1.tgz", - "integrity": "sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg==", - "dev": true, - "requires": { - "escape-string-regexp": "^1.0.2" - } - }, - "supports-color": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz", - "integrity": "sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - }, - "table": { - "version": "6.7.1", - "resolved": "https://registry.npmjs.org/table/-/table-6.7.1.tgz", - "integrity": "sha512-ZGum47Yi6KOOFDE8m223td53ath2enHcYLgOCjGr5ngu8bdIARQk6mN/wRMv4yMRcHnCSnHbCEha4sobQx5yWg==", - "dev": true, - "requires": { - "ajv": "^8.0.1", - "lodash.clonedeep": "^4.5.0", - "lodash.truncate": "^4.4.2", - "slice-ansi": "^4.0.0", - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0" - }, - "dependencies": { - "ajv": { - "version": "8.6.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.6.2.tgz", - "integrity": "sha512-9807RlWAgT564wT+DjeyU5OFMPjmzxVobvDFmNAhY+5zD6A2ly3jDp6sgnfyDtlIQ+7H97oc/DGCzzfu9rjw9w==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - } - }, - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - }, - "string-width": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", - "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - } - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } - } - } - }, - "tar-fs": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", - "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", - "dev": true, - "requires": { - "chownr": "^1.1.1", - "mkdirp-classic": "^0.5.2", - "pump": "^3.0.0", - "tar-stream": "^2.1.4" - } - }, - "tar-stream": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", - "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", - "dev": true, - "requires": { - "bl": "^4.0.3", - "end-of-stream": "^1.4.1", - "fs-constants": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1" - } - }, - "text-encoding": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/text-encoding/-/text-encoding-0.7.0.tgz", - "integrity": "sha512-oJQ3f1hrOnbRLOcwKz0Liq2IcrvDeZRHXhd9RgLrsT+DjWY/nty1Hi7v3dtkaEYbPYe0mUoOfzRrMwfXXwgPUA==", - "dev": true - }, - "text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", - "dev": true - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "requires": { - "is-number": "^7.0.0" - } - }, - "trim-repeated": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/trim-repeated/-/trim-repeated-1.0.0.tgz", - "integrity": "sha1-42RqLqTokTEr9+rObPsFOAvAHCE=", - "dev": true, - "requires": { - "escape-string-regexp": "^1.0.2" - } - }, - "ts-node": { - "version": "9.1.1", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-9.1.1.tgz", - "integrity": "sha512-hPlt7ZACERQGf03M253ytLY3dHbGNGrAq9qIHWUY9XHYl1z7wYngSr3OQ5xmui8o2AaxsONxIzjafLUiWBo1Fg==", - "dev": true, - "requires": { - "arg": "^4.1.0", - "create-require": "^1.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "source-map-support": "^0.5.17", - "yn": "3.1.1" - }, - "dependencies": { - "diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "dev": true - } - } - }, - "tsconfig-paths": { - "version": "3.11.0", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.11.0.tgz", - "integrity": "sha512-7ecdYDnIdmv639mmDwslG6KQg1Z9STTz1j7Gcz0xa+nshh/gKDAHcPxRbWOsA3SPp0tXP2leTcY9Kw+NAkfZzA==", - "dev": true, - "requires": { - "@types/json5": "^0.0.29", - "json5": "^1.0.1", - "minimist": "^1.2.0", - "strip-bom": "^3.0.0" - } - }, - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - }, - "tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", - "dev": true, - "requires": { - "tslib": "^1.8.1" - } - }, - "tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "dev": true, - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, - "requires": { - "prelude-ls": "^1.2.1" - } - }, - "type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "dev": true - }, - "type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true - }, - "typedoc": { - "version": "0.21.9", - "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.21.9.tgz", - "integrity": "sha512-VRo7aII4bnYaBBM1lhw4bQFmUcDQV8m8tqgjtc7oXl87jc1Slbhfw2X5MccfcR2YnEClHDWgsiQGgNB8KJXocA==", - "dev": true, - "requires": { - "glob": "^7.1.7", - "handlebars": "^4.7.7", - "lunr": "^2.3.9", - "marked": "^3.0.2", - "minimatch": "^3.0.0", - "progress": "^2.0.3", - "shiki": "^0.9.8", - "typedoc-default-themes": "^0.12.10" - } - }, - "typedoc-default-themes": { - "version": "0.12.10", - "resolved": "https://registry.npmjs.org/typedoc-default-themes/-/typedoc-default-themes-0.12.10.tgz", - "integrity": "sha512-fIS001cAYHkyQPidWXmHuhs8usjP5XVJjWB8oZGqkTowZaz3v7g3KDZeeqE82FBrmkAnIBOY3jgy7lnPnqATbA==", - "dev": true - }, - "typescript": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.4.2.tgz", - "integrity": "sha512-gzP+t5W4hdy4c+68bfcv0t400HVJMMd2+H9B7gae1nQlBzCqvrXX+6GL/b3GAgyTH966pzrZ70/fRjwAtZksSQ==", - "dev": true - }, - "typescript-compiler": { - "version": "1.4.1-2", - "resolved": "https://registry.npmjs.org/typescript-compiler/-/typescript-compiler-1.4.1-2.tgz", - "integrity": "sha1-uk99si2RU0oZKdkACdzhYety/T8=", - "dev": true - }, - "uglify-js": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.14.1.tgz", - "integrity": "sha512-JhS3hmcVaXlp/xSo3PKY5R0JqKs5M3IV+exdLHW99qKvKivPO4Z8qbej6mte17SOPqAOVMjt/XGgWacnFSzM3g==", - "dev": true, - "optional": true - }, - "unbox-primitive": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", - "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "has-bigints": "^1.0.1", - "has-symbols": "^1.0.2", - "which-boxed-primitive": "^1.0.2" - } - }, - "universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "dev": true - }, - "uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "requires": { - "punycode": "^2.1.0" - } - }, - "usb": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/usb/-/usb-1.7.2.tgz", - "integrity": "sha512-SfVSItgsD9+YfEpcK1UZ8tQ7e8GdxQ0xoQtB773omNBKTVj3IuFJNKjwSnpE58FGcV4tUoKLHmBMc018RUY5SA==", - "dev": true, - "requires": { - "bindings": "^1.4.0", - "node-addon-api": "3.0.2", - "prebuild-install": "^5.3.3" - } - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true - }, - "v8-compile-cache": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", - "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", - "dev": true - }, - "validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dev": true, - "requires": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "vscode-textmate": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/vscode-textmate/-/vscode-textmate-5.2.0.tgz", - "integrity": "sha512-Uw5ooOQxRASHgu6C7GVvUxisKXfSgW4oFlO+aa+PAkgmH89O3CXxEEzNRNtHSqtXFTl0nAC1uYj0GMSH27uwtQ==", - "dev": true - }, - "vue-eslint-parser": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-7.1.1.tgz", - "integrity": "sha512-8FdXi0gieEwh1IprIBafpiJWcApwrU+l2FEj8c1HtHFdNXMd0+2jUSjBVmcQYohf/E72irwAXEXLga6TQcB3FA==", - "dev": true, - "requires": { - "debug": "^4.1.1", - "eslint-scope": "^5.0.0", - "eslint-visitor-keys": "^1.1.0", - "espree": "^6.2.1", - "esquery": "^1.0.1", - "lodash": "^4.17.15" - }, - "dependencies": { - "espree": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-6.2.1.tgz", - "integrity": "sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw==", - "dev": true, - "requires": { - "acorn": "^7.1.1", - "acorn-jsx": "^5.2.0", - "eslint-visitor-keys": "^1.1.0" - } - } - } - }, - "wait-console-input": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/wait-console-input/-/wait-console-input-0.1.7.tgz", - "integrity": "sha512-gDxDpK1hbpsCk9nryIDUhrtK6wS9ei/o//BTFSYdMChlKMpHVUdw0LSnPR9lVSMgBAKybbezUYA8XRjTqu11hQ==", - "requires": { - "readline-sync": "^1.4.9" - } - }, - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - }, - "which-boxed-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", - "dev": true, - "requires": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" - } - }, - "which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", - "dev": true - }, - "which-pm-runs": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/which-pm-runs/-/which-pm-runs-1.0.0.tgz", - "integrity": "sha1-Zws6+8VS4LVd9rd4DKdGFfI60cs=", - "dev": true - }, - "wide-align": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", - "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", - "dev": true, - "requires": { - "string-width": "^1.0.2 || 2" - }, - "dependencies": { - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dev": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - } - } - }, - "word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", - "dev": true - }, - "wordwrap": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", - "dev": true - }, - "wrap-ansi": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", - "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.0", - "string-width": "^3.0.0", - "strip-ansi": "^5.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - } - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true - }, - "y18n": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", - "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", - "dev": true - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, - "yargs": { - "version": "13.3.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", - "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", - "dev": true, - "requires": { - "cliui": "^5.0.0", - "find-up": "^3.0.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^3.0.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^13.1.2" - }, - "dependencies": { - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "requires": { - "p-limit": "^2.0.0" - } - } - } - }, - "yargs-parser": { - "version": "13.1.2", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", - "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } - }, - "yargs-unparser": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-1.6.0.tgz", - "integrity": "sha512-W9tKgmSn0DpSatfri0nx52Joq5hVXgeLiqR/5G0sZNDoLZFOr/xjBUDcShCOGNsBnEMNo1KAMBkTej1Hm62HTw==", - "dev": true, - "requires": { - "flat": "^4.1.0", - "lodash": "^4.17.15", - "yargs": "^13.3.0" - } - }, - "yn": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", - "dev": true - } - } -} diff --git a/ledgerjs-fio/package.json b/ledgerjs-fio/package.json index 350e97e4..27a3ec82 100644 --- a/ledgerjs-fio/package.json +++ b/ledgerjs-fio/package.json @@ -1,6 +1,6 @@ { "name": "ledgerjs-hw-app-fio", - "version": "0.0.1", + "version": "1.0.5", "files": [ "dist" ], diff --git a/ledgerjs-fio/src/errors/deviceStatusError.ts b/ledgerjs-fio/src/errors/deviceStatusError.ts index 02cfbe7b..e61ed1ae 100644 --- a/ledgerjs-fio/src/errors/deviceStatusError.ts +++ b/ledgerjs-fio/src/errors/deviceStatusError.ts @@ -6,11 +6,13 @@ import {ErrorBase} from "./errorBase" */ export const DeviceStatusCodes = { ERR_STILL_IN_CALL: 0x6e04 as const, // internal + ERR_INVALID_STATE: 0x6e06 as const, ERR_INVALID_DATA: 0x6e07 as const, + ERR_INTEGRITY_CHECK_FAILED: 0x6e08 as const, ERR_REJECTED_BY_USER: 0x6e09 as const, ERR_REJECTED_BY_POLICY: 0x6e10 as const, ERR_DEVICE_LOCKED: 0x6e11 as const, - ERR_UNSUPPORTED_ADDRESS_TYPE: 0x6e12 as const, + ERR_INVALID_HMAC: 0x6e12 as const, // Not thrown by ledger-app-fio itself but other apps ERR_CLA_NOT_SUPPORTED: 0x6e00 as const, @@ -18,13 +20,15 @@ export const DeviceStatusCodes = { // Human-readable version of errors reported by APDU protocol const DeviceStatusMessages: Record = { + [DeviceStatusCodes.ERR_INVALID_STATE]: "Ledger device reached invalid state", [DeviceStatusCodes.ERR_INVALID_DATA]: "Invalid data supplied to Ledger", + [DeviceStatusCodes.ERR_INTEGRITY_CHECK_FAILED]: "Failed command sequence integrity check", [DeviceStatusCodes.ERR_REJECTED_BY_USER]: "Action rejected by user", [DeviceStatusCodes.ERR_REJECTED_BY_POLICY]: "Action rejected by Ledger's security policy", [DeviceStatusCodes.ERR_DEVICE_LOCKED]: "Device is locked", [DeviceStatusCodes.ERR_CLA_NOT_SUPPORTED]: "Wrong Ledger app", - [DeviceStatusCodes.ERR_UNSUPPORTED_ADDRESS_TYPE]: "Unsupported address type", + [DeviceStatusCodes.ERR_INVALID_HMAC]: "Invalid HMAC", } const GH_DEVICE_ERRORS_LINK = diff --git a/ledgerjs-fio/src/errors/invalidDataReason.ts b/ledgerjs-fio/src/errors/invalidDataReason.ts index 7ca60fdd..1b39d53a 100644 --- a/ledgerjs-fio/src/errors/invalidDataReason.ts +++ b/ledgerjs-fio/src/errors/invalidDataReason.ts @@ -23,4 +23,29 @@ export enum InvalidDataReason { INVALID_ACTOR = "invalid actor", INVALID_PERMISSION = "invalid permission", ACTION_DATA_TOO_LONG = "action data too long", + UNEXPECTED_ERROR = "Unexpected error", + INVALID_PAYER_FIO_ADDRESS = "invalid payer fio address", + INVALID_PAYEE_FIO_ADDRESS = "invalid payer fio address", + INVALID_FIO_ADDRESS = "invalid fio address", + INVALID_PAYER_PUBLIC_ADDRESS = "invalid payer public address", + INVALID_PAYEE_PUBLIC_ADDRESS = "invalid payer public address", + INVALID_PUBLIC_ADDRESS = "invalid public address", + INVALID_CHAIN_CODE = "invalid chain code", + INVALID_TOKEN_CODE = "invalid token code", + INVALID_PUBLIC_KEY = "invalid public key", + INVALID_MEMO = "invalid memo", + INVALID_HASH = "invalid hash", + INVALID_OFFLINE_URL = "invalid offline url", + INVALID_FIO_REQUEST_ID = "invalid fio request id", + INVALID_STATUS = "invalid status", + INVALID_OBT_ID = "invalid opt id", + INVALID_MESSAGE = "invalid message", + INVALID_CONTEXT = "invalid context", + INCORRECT_NUMBER_OF_PUBLIC_ADDRESSES = "incorrect number of public addresses", + INCORRECT_NUMBER_OF_NFTS = "incorrect number of nfts", + INVALID_BUNDLE_SETS = "invalid bundle sets", + INVALID_IS_PUBLIC = "ivalid is public", + INCORRECT_NUMBER_OF_PRODUCERS = "incorrect number of producers", + INVALID_PRODUCER = "invalid producer", + INVALID_PROXY = "invalid proxy", } diff --git a/ledgerjs-fio/src/fio.ts b/ledgerjs-fio/src/fio.ts index 4585bf3b..4389712c 100644 --- a/ledgerjs-fio/src/fio.ts +++ b/ledgerjs-fio/src/fio.ts @@ -15,6 +15,7 @@ * limitations under the License. ********************************************************************************/ import type Transport from "@ledgerhq/hw-transport" +import { decodeMessage } from "./interactions/decodeMessage" import {DeviceStatusCodes, DeviceStatusError, InvalidDataReason} from './errors' import type {Interaction, SendParams} from './interactions/common/types' @@ -23,11 +24,11 @@ import {getSerial} from "./interactions/getSerial" import {getCompatibility, getVersion} from "./interactions/getVersion" import {runTests} from "./interactions/runTests" import {signTransaction} from "./interactions/signTransaction" -import type {HexString, ParsedTransaction, ValidBIP32Path} from './types/internal' +import {HexString, ParsedContext, ParsedTransaction, PUBLIC_KEY_LENGTH, ValidBIP32Path} from './types/internal' import type {BIP32Path, DeviceCompatibility, Serial, SignedTransactionData, Transaction, Version} from './types/public' import {stripRetcodeFromResponse} from "./utils" import {assert} from './utils/assert' -import {isArray, parseBIP32Path, parseHexString, parseTransaction, validate} from './utils/parse' +import {isArray, parseBIP32Path, parseContext, parseHexString, parseMessage, parseTransaction, validate} from './utils/parse' export * from './errors' export * from './types/public' @@ -220,7 +221,7 @@ export class Fio { * * @example * ``` - * const sign = await fio.getPublicKey[[ HARDENED + 44, HARDENED + 235, HARDENED + 0, 0, 0 ], chainId, tx); + * const sign = await fio.signTransaction({path, chainId, tx}); * console.log(sign); * @see [[SignTransactionRequest]] * @see [[SignTransactionResponse]] @@ -239,6 +240,33 @@ export class Fio { return yield* signTransaction(version, parsedPath, chainId, tx) } + /** + * Decode mesage encoded using DH shared cypher. + * + * @returns Decoded message + * + * @example + * ``` + * const decoded = await fio.getPublicKey[[ HARDENED + 44, HARDENED + 235, HARDENED + 0, 0, 0 ], chainId, tx); + * console.log(sign); + * @see [[DecodeMessageRequest]] + * @see [[DecodeMessageResponse]] + * ``` + */ + async decodeMessage({path, publicKeyHex, message, context}: DecodeMessageRequest): Promise { + const parsedPath = parseBIP32Path(path, InvalidDataReason.INVALID_PATH) + const parsedPubkey = parseHexString(publicKeyHex, InvalidDataReason.INVALID_PUBLIC_KEY, PUBLIC_KEY_LENGTH, PUBLIC_KEY_LENGTH) + const parsedMessage = parseMessage(message, InvalidDataReason.INVALID_MESSAGE) + const parsedContext = parseContext(context, InvalidDataReason.INVALID_CONTEXT) + return interact(this._decodeMessage(parsedPath, parsedPubkey, parsedMessage, parsedContext), this._send) + } + + /** @ignore */ + * _decodeMessage(parsedPath: ValidBIP32Path, pubkey: HexString, message: HexString, context: ParsedContext) { + const version = yield* getVersion() + return yield* decodeMessage(version, parsedPath, pubkey, message, context) + } + /** * Runs unit tests on the device (DEVEL app build only) */ @@ -257,7 +285,7 @@ export class Fio { /** * Get FIO app version [[Fio.getVersion]] response data * @category Main - * @see [[DeviceCompatibility] + * @see [[DeviceCompatibility]] */ export type GetVersionResponse = { version: Version @@ -316,4 +344,30 @@ export type SignTransactionRequest = { */ export type SignTransactionResponse = SignedTransactionData +/** + * Sign transaction ([[Fio.signTransaction]]) request data + * @category Main + * @see [[DecodeMessageResponse]] + */ + export type DecodeMessageRequest = { + /** Path to public key used to decode the message */ + path: BIP32Path, + /** Other public key in raw hex format*/ + publicKeyHex: string, + /** Base64 encoded message */ + message: string, + /** Message context, either "newfundsreq" or "recordobt" */ + context: string, +} + +/** + * Sign transaction ([[Fio.signTransaction]]) response data + * @category Main + * @see [[DecodeMessageRequest]] + */ +export type DecodeMessageResponse = { + /** Decoded message */ + message: Buffer, +} + export default Fio diff --git a/ledgerjs-fio/src/interactions/common/ins.ts b/ledgerjs-fio/src/interactions/common/ins.ts index 65ff3c08..fe91729c 100644 --- a/ledgerjs-fio/src/interactions/common/ins.ts +++ b/ledgerjs-fio/src/interactions/common/ins.ts @@ -6,5 +6,7 @@ export const enum INS { SIGN_TX = 0x20, + DECODE_MESSAGE = 0x30, + RUN_TESTS = 0xf0, } diff --git a/ledgerjs-fio/src/interactions/decodeMessage.ts b/ledgerjs-fio/src/interactions/decodeMessage.ts new file mode 100644 index 00000000..a8364d38 --- /dev/null +++ b/ledgerjs-fio/src/interactions/decodeMessage.ts @@ -0,0 +1,101 @@ +import { validate } from "utils/parse" +import { DeviceStatusError, DeviceStatusCodes } from "../errors" +import type {DecodeMessageResponse} from "../fio" +import type {HexString, ParsedContext, ValidBIP32Path} from "../types/internal" +import {PUBLIC_KEY_LENGTH} from "../types/internal" +import type {Version} from "../types/public" +import {assert} from "../utils/assert" +import {chunkBy} from "../utils/ioHelpers" +import {path_to_buf} from "../utils/serialize" +import {INS} from "./common/ins" +import type {Interaction, SendParams} from "./common/types" +import {ensureLedgerAppVersionCompatible} from "./getVersion" + +const send = (params: { + p1: number, + p2: number, + data: Buffer, + expectedResponseLength?: number +}): SendParams => ({ins: INS.DECODE_MESSAGE, ...params}) + +const enum P1 { + SEND_DATA = 0x01, + DECODE = 0x02, + RECEIVE_REST = 0x03, +} + +const enum P2 { + UNUSED = 0x00, +} + +export function* decodeMessage( + version: Version, + path: ValidBIP32Path, + pubkey: HexString, + message: HexString, + context: ParsedContext +): Interaction { + ensureLedgerAppVersionCompatible(version) + + const toSend = Buffer.from(message, "hex"); + const firstChunkLength = 200; + //We start sending message + yield send({ + p1: P1.SEND_DATA, + p2: P2.UNUSED, + data: toSend.slice(0, firstChunkLength), + expectedResponseLength: 0, + }) + if (toSend.slice(firstChunkLength).length != 0) { + yield send({ + p1: P1.SEND_DATA, + p2: P2.UNUSED, + data: toSend.slice(firstChunkLength), + expectedResponseLength: 0, + }) + } + + + //decode data + const pathData = path_to_buf(path) + yield send({ + p1: P1.DECODE, + p2: context, + data: Buffer.from(pubkey+pathData.toString("hex"), "hex"), + }) + + //get the data + const response = yield send({ + p1: P1.RECEIVE_REST, + p2: P2.UNUSED, + data: Buffer.from(""), + }) + const [msgLen, chunkLen, decoded] = chunkBy(response, [2, 1]) + + //we may need more than one apdu to retrieve data + let msg = decoded + let totalLen = msgLen.readUInt16LE() + let len = chunkLen.readUInt8() + + while(len < totalLen) { + const response = yield send({ + p1: P1.RECEIVE_REST, + p2: P2.UNUSED, + data: Buffer.from(""), + }) + const [msgLen, chunkLen, decoded] = chunkBy(response, [2, 1]) + const msg2 = decoded + const totalLen2 = msgLen.readUInt16LE() + const len2 = chunkLen.readUInt8() + len += len2; + msg = Buffer.concat([msg, msg2]) + if (totalLen != totalLen2) { + throw new DeviceStatusError(DeviceStatusCodes.ERR_INVALID_STATE); + } + } + if (totalLen != len) { + throw new DeviceStatusError(DeviceStatusCodes.ERR_INVALID_STATE); + } + + return {message: msg} +} diff --git a/ledgerjs-fio/src/interactions/getVersion.ts b/ledgerjs-fio/src/interactions/getVersion.ts index 3e5aaad6..211f0f99 100644 --- a/ledgerjs-fio/src/interactions/getVersion.ts +++ b/ledgerjs-fio/src/interactions/getVersion.ts @@ -36,12 +36,12 @@ export function* getVersion(): Interaction { export function getCompatibility(version: Version): DeviceCompatibility { // We restrict forward compatibility only to backward-compatible semver changes - const v0_0 = isLedgerAppVersionAtLeast(version, 0, 0) && - isLedgerAppVersionAtMost(version, 0, Infinity) + const v1_0 = isLedgerAppVersionAtLeast(version, 1, 0) && + isLedgerAppVersionAtMost(version, 1, 0) return { - isCompatible: v0_0, - recommendedVersion: v0_0 ? null : '0.0', + isCompatible: v1_0, + recommendedVersion: v1_0 ? null : '1.0', } } diff --git a/ledgerjs-fio/src/interactions/signTransaction.ts b/ledgerjs-fio/src/interactions/signTransaction.ts index e0d335fe..f3bf245d 100644 --- a/ledgerjs-fio/src/interactions/signTransaction.ts +++ b/ledgerjs-fio/src/interactions/signTransaction.ts @@ -1,24 +1,13 @@ -import type {HexString, ParsedTransaction, ParsedTransferFIOTokensData, Uint8_t, ValidBIP32Path} from "../types/internal" +import type {HexString, ParsedTransaction, Uint8_t, ValidBIP32Path} from "../types/internal" import {InvalidDataReason} from "../errors" import type {SignedTransactionData, Version} from "../types/public" -import {HARDENED} from "../types/public" -import {assert} from "../utils/assert" -import {chunkBy} from "../utils/ioHelpers" import {validate} from "../utils/parse" -import {buf_to_hex, date_to_buf, path_to_buf, uint8_to_buf, uint16_to_buf, uint32_to_buf, uint64_to_buf} from "../utils/serialize" +import {uint8_to_buf} from "../utils/serialize" import {INS} from "./common/ins" import type {Interaction, SendParams} from "./common/types" import {ensureLedgerAppVersionCompatible} from "./getVersion" - -const enum P1 { - STAGE_INIT = 0x01, - STAGE_HEADER = 0x02, - STAGE_ACTION_HEADER = 0x03, - STAGE_ACTION_AUTHORIZATION = 0x04, - STAGE_ACTION_DATA = 0x05, - STAGE_WITNESSES = 0x10, -} +import { templete_all } from "./transactionTemplates/template_all" const send = (params: { p1: number, @@ -31,101 +20,27 @@ const send = (params: { export function* signTransaction(version: Version, parsedPath: ValidBIP32Path, chainId: HexString, tx: ParsedTransaction): Interaction { ensureLedgerAppVersionCompatible(version) - //Initialize and send chainId - { - const P2_UNUSED = 0x00 - yield send({ - p1: P1.STAGE_INIT, - p2: P2_UNUSED, - data: Buffer.from(chainId, "hex"), - expectedResponseLength: 0, - }) - } - //Send expiration, ref block num, ref block prefix - { - const P2_UNUSED = 0x00 - yield send({ - p1: P1.STAGE_HEADER, - p2: P2_UNUSED, - data: Buffer.concat([date_to_buf(tx.expiration), uint16_to_buf(tx.ref_block_num), uint32_to_buf(tx.ref_block_prefix)]), - expectedResponseLength: 0, - }) - } - //Send action account, name, acount, permission level - { - const P2_UNUSED = 0x00 - yield send({ - p1: P1.STAGE_ACTION_HEADER, - p2: P2_UNUSED, - data: Buffer.from(tx.actions[0].contractAccountName, "hex"), - expectedResponseLength: 0, - }) - } - //Send action authorization - { - const P2_UNUSED = 0x00 - yield send({ - p1: P1.STAGE_ACTION_AUTHORIZATION, - p2: P2_UNUSED, - data: Buffer.concat([ - Buffer.from(tx.actions[0].authorization[0].actor, "hex"), - Buffer.from(tx.actions[0].authorization[0].permission, "hex"), - ]), - expectedResponseLength: 0, - }) - } - - //prepare to send action data - const actionData: ParsedTransferFIOTokensData = tx.actions[0].data - const SIMPLE_LENGTH_VARIABLE_LENGTH = 1 - const AMOUNT_TYPE_LENGTH = 8 - const NAME_VARIABLE_LENGTH = 8 - const actionDataLength: number = - SIMPLE_LENGTH_VARIABLE_LENGTH + actionData.payee_public_key.length //pubkey lenght, pubkey - + 2*AMOUNT_TYPE_LENGTH + NAME_VARIABLE_LENGTH //amount, max_fee, actor - + SIMPLE_LENGTH_VARIABLE_LENGTH + actionData.tpid.length //tpid length, tpid - - validate(actionDataLength < 128, InvalidDataReason.ACTION_DATA_TOO_LONG) - - //Send action data - { - const P2_UNUSED = 0x00 - yield send({ - p1: P1.STAGE_ACTION_DATA, - p2: P2_UNUSED, - data: Buffer.concat([ - uint8_to_buf(actionDataLength as Uint8_t), - uint8_to_buf(actionData.payee_public_key.length as Uint8_t), - Buffer.from(actionData.payee_public_key), - uint8_to_buf(0 as Uint8_t), //we add trailing zero to the string to help ledger displaying - uint64_to_buf(actionData.amount), - uint64_to_buf(actionData.max_fee), - Buffer.from(actionData.actor, "hex"), - uint8_to_buf(actionData.tpid.length as Uint8_t), - Buffer.from(actionData.tpid), - uint8_to_buf(0 as Uint8_t), //we add trailing zero to the string to help ledger displaying - ]), - expectedResponseLength: 0, - }) - } - - //Send witnesses - const P2_UNUSED = 0x00 - const response = yield send({ - p1: P1.STAGE_WITNESSES, - p2: P2_UNUSED, - data: path_to_buf(parsedPath), - expectedResponseLength: 65 + 32, - }) - - const [witnessSignature, hash, rest] = chunkBy(response, [65, 32]) - assert(rest.length === 0, "invalid response length") - - return { - txHashHex: buf_to_hex(hash), - witness: { - path: [44 + HARDENED, 235 + HARDENED, 0 + HARDENED, 0, 0], - witnessSignatureHex: buf_to_hex(witnessSignature), - }, + const commands = templete_all(chainId, tx, parsedPath); + validate(commands.length != 0, InvalidDataReason.ACTION_NOT_SUPPORTED); + + let result: SignedTransactionData = {dhEncryptedData: "", txHashHex: "", witness: {path: parsedPath, witnessSignatureHex: ""}}; + + for(const command of commands) { + validate(command.constData.length + command.varData.length +2 <= 255, InvalidDataReason.UNEXPECTED_ERROR); + result = command.dataAction( + yield send({ + p1: command.command, + p2: command.p2, + data: Buffer.concat([ + uint8_to_buf(Buffer.from(command.constData, "hex").length as Uint8_t), + uint8_to_buf(command.varData.length as Uint8_t), + Buffer.from(command.constData, "hex"), + command.varData, + ]), + expectedResponseLength: command.expectedResponseLength, + }), + result + ) } + return result; } diff --git a/ledgerjs-fio/src/interactions/transactionTemplates/commands.ts b/ledgerjs-fio/src/interactions/transactionTemplates/commands.ts new file mode 100644 index 00000000..572c1744 --- /dev/null +++ b/ledgerjs-fio/src/interactions/transactionTemplates/commands.ts @@ -0,0 +1,478 @@ +import { assert } from "../../utils/assert"; +import { InvalidDataReason } from "../../errors" +import { HexString, Uint8_t, ParsedTransaction, ValidBIP32Path, VarlenAsciiString, Uint64_str } from "types/internal" +import { buf_to_hex, path_to_buf, uint8_to_buf, varuint32_to_buf } from "../../utils/serialize"; +import type { SignedTransactionData } from "../../types/public"; +import { chunkBy } from "../../utils/ioHelpers" +import { validate } from "../../utils/parse"; + +export const enum COMMAND { + NONE = 0x00, + INIT = 0x01, + APPEND_CONST_DATA = 0x02, + SHOW_MESSAGE = 0x03, + APPEND_DATA = 0x04, + START_COUNTED_SECTION = 0x05, + END_COUNTED_SECTION = 0x06, + STORE_VALUE = 0x07, + START_DH_ENCRYPTION = 0x08, + END_DH_ENCRYPTION = 0x09, + FINISH= 0x10, +}; + +export const enum VALUE_FORMAT { + VALUE_FORMAT_BUFFER_SHOW_AS_HEX = 0x01, + VALUE_FORMAT_ASCII_STRING = 0x02, + VALUE_FORMAT_NAME = 0x03, + VALUE_FORMAT_ASCII_STRING_WITH_LENGTH = 0x04, + + VALUE_FORMAT_FIO_AMOUNT = 0x10, + VALUE_FORMAT_UINT64 = 0x14, + VALUE_FORMAT_VARUINT32 = 0x17, + + VALUE_FORMAT_MEMO_HASH = 0x20, + VALUE_FORMAT_CHAIN_CODE_TOKEN_CODE_PUBLIC_ADDR = 0x21, +} + +export const enum VALUE_VALIDATION { + VALUE_VALIDATION_NONE = 1, + VALUE_VALIDATION_INBUFFER_LENGTH = 2, + VALUE_VALIDATION_NUMBER = 3, +} + +export const enum VALUE_POLICY { + VALUE_SHOW_ON_DEVICE = 5, + VALUE_SHOW_ON_DEVICE_IF_NONEMPTY = 6, + VALUE_DO_NOT_SHOW_ON_DEVICE = 2, +} + +export const enum VALUE_STORAGE_COMPARE { + DO_NOT_COMPARE = 0x00, + COMPARE_REGISTER1 = 0x10, + COMPARE_REGISTER2 = 0x20, + COMPARE_REGISTER3 = 0x30, + COMPARE_REGISTER1_DECODE_NAME = 0x40, +} + +export type DataAction = (b: Buffer, s: SignedTransactionData) => SignedTransactionData + +export const dhDataAction: DataAction = (b, s) => { + return { + dhEncryptedData: s.dhEncryptedData + b.toString(), + txHashHex: s.txHashHex, + witness: s.witness + } +} + +export type Command = { + command: COMMAND, + p2: Uint8_t, + constData: HexString, + varData: Buffer, + expectedResponseLength?: number, + dataAction: DataAction, + txLen: number, //This is necessary to make counted sections work +} + +export const defaultCommand: Command = { + command: COMMAND.NONE, + p2: 0 as Uint8_t, + constData: "" as HexString, + varData: Buffer.from(""), + dataAction: dhDataAction, //does nothing if there is no DH + txLen: 0 +} + +export type TransactionTemplate = (chainId: HexString, tx: ParsedTransaction, parsedPath: ValidBIP32Path) => Array; + +export function constDataAppendData(format: VALUE_FORMAT, validation: VALUE_VALIDATION, arg1: bigint, arg2: bigint, + policy: VALUE_POLICY, storage: VALUE_STORAGE_COMPARE, key: string): HexString { + const buf = Buffer.allocUnsafe(20+ key.length); + buf.writeUInt8(format, 0); + buf.writeUInt8(validation, 1); + buf.writeBigUInt64LE(arg1, 2); + buf.writeBigUInt64LE(arg2, 10); + buf.writeUInt8(policy | storage, 18); + buf.writeUInt8(key.length, 19); + buf.write(key, 20); + return buf.toString("hex") as HexString; +} + +export function constDataShowMessage(key: string, value: string) { const buf = Buffer.allocUnsafe(2+key.length+value.length); + buf.writeUInt8(key.length, 0); + buf.write(key, 1); + buf.writeUInt8(value.length, 1+key.length); + buf.write(value, 2+key.length); + return buf.toString("hex") as HexString; +} + +export function constDataStartCountedSection(format: VALUE_FORMAT, validation: VALUE_VALIDATION, arg1: bigint, arg2: bigint): HexString { + const buf = Buffer.allocUnsafe(18); + buf.writeUInt8(format, 0); + buf.writeUInt8(validation, 1); + buf.writeBigUInt64LE(arg1, 2); + buf.writeBigUInt64LE(arg2, 10); + return buf.toString("hex") as HexString; +} + +export function getCommandVarLength(commands: Array): number { + let len: number = 0; + for(let i=0; i): TransactionTemplate { + return (chainId, tx, path) => { + for (const t of templates) { + const commands: Array = t(chainId, tx, path); + if (commands.length != 0) { //template match + return commands; + } + } + return []; + } +} + +//---------------------INSTRUCTION SPECIFIC COMMANDS--------------------------------- + +export function COMMAND_INIT(chainId: HexString, parsedPath: ValidBIP32Path): Command { + const varData = Buffer.concat([Buffer.from(chainId, "hex"), path_to_buf(parsedPath)]) + return { + ...defaultCommand, + command: COMMAND.INIT, + varData: varData, + txLen: varData.length + } +} + +export function COMMAND_APPEND_CONST_DATA(constData: HexString): Command { + return { + ...defaultCommand, + command: COMMAND.APPEND_CONST_DATA, + constData: constData, + txLen: Buffer.from(constData, "hex").length, + } +} + +export function COMMAND_SHOW_MESSAGE(key: string, value: string): Command { + return { + ...defaultCommand, + command: COMMAND.SHOW_MESSAGE, + constData: constDataShowMessage( + key, + value + ), + } +} + +export function COMMAND_APPEND_DATA_BUFFER_DO_NOT_SHOW(varData: Buffer, bufLenMin: number = 0, bufLenMax: number = 0xFFFFFFFF): Command { + return { + ...defaultCommand, + command: COMMAND.APPEND_DATA, + constData: constDataAppendData( + VALUE_FORMAT.VALUE_FORMAT_BUFFER_SHOW_AS_HEX, + VALUE_VALIDATION.VALUE_VALIDATION_INBUFFER_LENGTH, BigInt(bufLenMin), BigInt(bufLenMax), + VALUE_POLICY.VALUE_DO_NOT_SHOW_ON_DEVICE, + VALUE_STORAGE_COMPARE.DO_NOT_COMPARE, + "" + ), + varData: varData, + txLen: varData.length, + } +} + +export function COMMAND_APPEND_DATA_STRING_DO_NOT_SHOW(varData: Buffer, bufLenMin: number = 0, bufLenMax: number = 0xFFFFFFFF): Command { + return { + ...defaultCommand, + command: COMMAND.APPEND_DATA, + constData: constDataAppendData( + VALUE_FORMAT.VALUE_FORMAT_ASCII_STRING, + VALUE_VALIDATION.VALUE_VALIDATION_INBUFFER_LENGTH, BigInt(bufLenMin), BigInt(bufLenMax), + VALUE_POLICY.VALUE_DO_NOT_SHOW_ON_DEVICE, + VALUE_STORAGE_COMPARE.DO_NOT_COMPARE, + "" + ), + varData: varData, + txLen: varData.length, + } +} + +export function COMMAND_APPEND_DATA_STRING_SHOW(key: string, varData: Buffer, bufLenMin: number = 0, bufLenMax: number = 0xFFFFFFFF): Command { + return { + ...defaultCommand, + command: COMMAND.APPEND_DATA, + constData: constDataAppendData( + VALUE_FORMAT.VALUE_FORMAT_ASCII_STRING, + VALUE_VALIDATION.VALUE_VALIDATION_INBUFFER_LENGTH, BigInt(bufLenMin), BigInt(bufLenMax), + VALUE_POLICY.VALUE_SHOW_ON_DEVICE, + VALUE_STORAGE_COMPARE.DO_NOT_COMPARE, + key + ), + varData: varData, + txLen: varData.length, + } +} + +//calculates the length of varint +function lenlen(n: number): number { + return 1 + (n >= 128 ? 1 : 0) + (n >= 16384 ? 1 : 0) + (n >= 2097152 ? 1 : 0) + (n >= 268435456 ? 1 : 0) +} + +export function COMMAND_APPEND_DATA_STRING_WITH_LENGTH_DO_NOT_SHOW(varData: Buffer, bufLenMin: number = 0, bufLenMax: number = 0xFFFFFFFF): Command { + const vD = Buffer.concat([varuint32_to_buf(varData.length), varData]); + return { + ...defaultCommand, + command: COMMAND.APPEND_DATA, + constData: constDataAppendData( + VALUE_FORMAT.VALUE_FORMAT_ASCII_STRING_WITH_LENGTH, + VALUE_VALIDATION.VALUE_VALIDATION_INBUFFER_LENGTH, BigInt(bufLenMin + lenlen(bufLenMin)), BigInt(bufLenMax + lenlen(bufLenMax)), + VALUE_POLICY.VALUE_DO_NOT_SHOW_ON_DEVICE, + VALUE_STORAGE_COMPARE.DO_NOT_COMPARE, + "" + ), + varData: vD, + txLen: vD.length, + } +} + +export function COMMAND_APPEND_DATA_STRING_WITH_LENGTH_SHOW(key: string, varData: Buffer, bufLenMin: number = 0, bufLenMax: number = 0xFFFFFFFF): Command { + const vD = Buffer.concat([varuint32_to_buf(varData.length), varData]); + return { + ...defaultCommand, + command: COMMAND.APPEND_DATA, + constData: constDataAppendData( + VALUE_FORMAT.VALUE_FORMAT_ASCII_STRING_WITH_LENGTH, + VALUE_VALIDATION.VALUE_VALIDATION_INBUFFER_LENGTH, BigInt(bufLenMin + lenlen(bufLenMin)), BigInt(bufLenMax + lenlen(bufLenMax)), + VALUE_POLICY.VALUE_SHOW_ON_DEVICE, + VALUE_STORAGE_COMPARE.DO_NOT_COMPARE, + key + ), + varData: vD, + txLen: vD.length, + } +} + +export function COMMAND_APPEND_DATA_STRING_WITH_LENGTH_SHOW_IF_NON_EMPTY(key: string, varData: Buffer, bufLenMin: number = 0, bufLenMax: number = 0xFFFFFFFF): Command { + const vD = Buffer.concat([varuint32_to_buf(varData.length), varData]); + return { + ...defaultCommand, + command: COMMAND.APPEND_DATA, + constData: constDataAppendData( + VALUE_FORMAT.VALUE_FORMAT_ASCII_STRING_WITH_LENGTH, + VALUE_VALIDATION.VALUE_VALIDATION_INBUFFER_LENGTH, BigInt(bufLenMin + lenlen(bufLenMin)), BigInt(bufLenMax + lenlen(bufLenMax)), + VALUE_POLICY.VALUE_SHOW_ON_DEVICE_IF_NONEMPTY, + VALUE_STORAGE_COMPARE.DO_NOT_COMPARE, + key + ), + varData: vD, + txLen: vD.length, + } +} + +export function COMMAND_APPEND_DATA_NAME_SHOW(key: string, name: HexString): Command { + return { + ...defaultCommand, + command: COMMAND.APPEND_DATA, + constData: constDataAppendData( + VALUE_FORMAT.VALUE_FORMAT_NAME, + VALUE_VALIDATION.VALUE_VALIDATION_NONE, BigInt(0), BigInt(0), + VALUE_POLICY.VALUE_SHOW_ON_DEVICE, + VALUE_STORAGE_COMPARE.DO_NOT_COMPARE, + key + ), + varData: Buffer.from(name, "hex"), + txLen: Buffer.from(name, "hex").length, + } +} + +export function COMMAND_APPEND_DATA_FIO_AMOUNT_SHOW(key: string, varData: Buffer, minAmount: number = 0, maxAmount: bigint = BigInt("0x7FFFFFFFFFFFFFFF")): Command { + return { + ...defaultCommand, + command: COMMAND.APPEND_DATA, + constData: constDataAppendData( + VALUE_FORMAT.VALUE_FORMAT_FIO_AMOUNT, + VALUE_VALIDATION.VALUE_VALIDATION_NUMBER, BigInt(minAmount), BigInt(maxAmount), + VALUE_POLICY.VALUE_SHOW_ON_DEVICE, + VALUE_STORAGE_COMPARE.DO_NOT_COMPARE, + key + ), + varData: varData, + txLen: varData.length, + } +} + +export function COMMAND_APPEND_DATA_UINT64_SHOW(key: string, varData: Buffer, minAmount: number = 0, maxAmount: bigint = BigInt("0x7FFFFFFFFFFFFFFF")): Command { + return { + ...defaultCommand, + command: COMMAND.APPEND_DATA, + constData: constDataAppendData( + VALUE_FORMAT.VALUE_FORMAT_UINT64, + VALUE_VALIDATION.VALUE_VALIDATION_NUMBER, BigInt(minAmount), BigInt(maxAmount), + VALUE_POLICY.VALUE_SHOW_ON_DEVICE, + VALUE_STORAGE_COMPARE.DO_NOT_COMPARE, + key + ), + varData: varData, + txLen: varData.length, + } +} + + +export function COMMANDS_COUNTED_SECTION(commands: Array, min: number = 0, max: number = 0xFFFFFFFF): Array { + const varData = varuint32_to_buf(getCommandVarLength(commands)); + return [ + { + ...defaultCommand, + command: COMMAND.START_COUNTED_SECTION, + constData: constDataStartCountedSection( + VALUE_FORMAT.VALUE_FORMAT_VARUINT32, VALUE_VALIDATION.VALUE_VALIDATION_NUMBER, BigInt(min), BigInt(max), + ), + varData: varData, + txLen: varData.length + }, + ...commands, + { + ...defaultCommand, + command: COMMAND.END_COUNTED_SECTION, + } + ] +} + +export function COMMAND_STORE_VALUE(register: Uint8_t, varData: Buffer): Command { + return { + ...defaultCommand, + command: COMMAND.STORE_VALUE, + p2: register as Uint8_t, + varData: varData, + } +} + +export function COMMANDS_DH_ENCODE(other_public_key: Buffer, commands: Array): Array { + return [ + { + ...defaultCommand, + command: COMMAND.START_DH_ENCRYPTION, + varData: other_public_key, + expectedResponseLength: 20, //IV 16b - base64: 1b cached, 15b->20b + txLen: 0, //getCommandVarLength includes the output by default + }, + ...commands, + { + ...defaultCommand, + command: COMMAND.END_DH_ENCRYPTION, + txLen: 0, //getCommandVarLength includes the output by default + } + ] +} + +export function COMMAND_FINISH(parsedPath: ValidBIP32Path): Command { + return { + ...defaultCommand, + command: COMMAND.FINISH, + expectedResponseLength: 65 + 32, + dataAction: (b, s) => { + const [witnessSignature, hash, rest] = chunkBy(b, [65, 32]) + assert(rest.length === 0, "invalid response length") + + return { + dhEncryptedData: s.dhEncryptedData, + txHashHex: buf_to_hex(hash), + witness: { + path: parsedPath, + witnessSignatureHex: buf_to_hex(witnessSignature), + }, + } + + }, + } +} + +export function ADD_STORAGE_CHECK(check: VALUE_STORAGE_COMPARE, c: Command): Command { + const constData: Buffer = Buffer.from(c.constData, "hex") + const policyAndStorage: Uint8_t = constData[18] as Uint8_t + const newValue: Uint8_t = ((policyAndStorage & 0x0F) | check) as Uint8_t + constData.writeUInt8(newValue,18) + return { + ...c, + constData: constData.toString("hex") as HexString, + } +} + +export function COMMAND_APPEND_DATA_MEMO_HASH(memo?: VarlenAsciiString, hash?: VarlenAsciiString, offline_url?: VarlenAsciiString): Command { + var varData: Buffer = Buffer.from(""); + if (memo === undefined) { + validate(hash !== undefined, InvalidDataReason.INVALID_HASH); + validate(offline_url !== undefined, InvalidDataReason.INVALID_OFFLINE_URL); + varData = Buffer.concat([ + Buffer.from("0001", "hex"), + varuint32_to_buf(hash.length), + Buffer.from(hash), + Buffer.from("01", "hex"), + varuint32_to_buf(offline_url.length), + Buffer.from(offline_url), + ]) + } + else { + validate(hash === undefined, InvalidDataReason.INVALID_HASH); + validate(hash === undefined, InvalidDataReason.INVALID_OFFLINE_URL); + varData = Buffer.concat([ + Buffer.from("01", "hex"), + varuint32_to_buf(memo.length), + Buffer.from(memo), + Buffer.from("0000", "hex"), + ]) + } + return { + ...defaultCommand, + command: COMMAND.APPEND_DATA, + constData: constDataAppendData( + VALUE_FORMAT.VALUE_FORMAT_MEMO_HASH, + VALUE_VALIDATION.VALUE_VALIDATION_NONE, BigInt(0), BigInt(0), + VALUE_POLICY.VALUE_DO_NOT_SHOW_ON_DEVICE, + VALUE_STORAGE_COMPARE.DO_NOT_COMPARE, + "" + ), + varData: varData, + txLen: varData.length, + } +} + + +export function COMMAND_APPEND_DATA_CHAIN_CODE_TOKEN_CODE_PUBLIC_ADDR_SHOW(key: string, chainCode: VarlenAsciiString, tokenCode: VarlenAsciiString, publicAddr: VarlenAsciiString): Command { + const varData: Buffer = Buffer.concat([ + varuint32_to_buf(tokenCode.length), + Buffer.from(tokenCode), + varuint32_to_buf(chainCode.length), + Buffer.from(chainCode), + varuint32_to_buf(publicAddr.length), + Buffer.from(publicAddr), + ]) + return { + ...defaultCommand, + command: COMMAND.APPEND_DATA, + constData: constDataAppendData( + VALUE_FORMAT.VALUE_FORMAT_CHAIN_CODE_TOKEN_CODE_PUBLIC_ADDR, + VALUE_VALIDATION.VALUE_VALIDATION_NONE, BigInt(0), BigInt(0), + VALUE_POLICY.VALUE_SHOW_ON_DEVICE, + VALUE_STORAGE_COMPARE.DO_NOT_COMPARE, + key + ), + varData: varData, + txLen: varData.length, + } +} diff --git a/ledgerjs-fio/src/interactions/transactionTemplates/template_addaddress.ts b/ledgerjs-fio/src/interactions/transactionTemplates/template_addaddress.ts new file mode 100644 index 00000000..f5a8880b --- /dev/null +++ b/ledgerjs-fio/src/interactions/transactionTemplates/template_addaddress.ts @@ -0,0 +1,167 @@ +import type {HexString, ParsedActionAuthorisation, ParsedMapBlockchainPublicAddress, ParsedTransaction, ParsedTransferFIOTokensData, Uint8_t, ValidBIP32Path} from "../../types/internal" +import { Command, VALUE_STORAGE_COMPARE, COMMAND_APPEND_CONST_DATA, COMMAND_SHOW_MESSAGE, COMMANDS_COUNTED_SECTION, COMMAND_STORE_VALUE, + COMMAND_APPEND_DATA_BUFFER_DO_NOT_SHOW, COMMAND_APPEND_DATA_STRING_SHOW, COMMAND_APPEND_DATA_FIO_AMOUNT_SHOW, + COMMAND_APPEND_DATA_STRING_DO_NOT_SHOW, + ADD_STORAGE_CHECK, + templateAlternative, + COMMAND_APPEND_DATA_CHAIN_CODE_TOKEN_CODE_PUBLIC_ADDR_SHOW, + COMMAND_APPEND_DATA_STRING_WITH_LENGTH_SHOW, + COMMAND_APPEND_DATA_STRING_WITH_LENGTH_DO_NOT_SHOW} from "./commands" +import { uint64_to_buf } from "../../utils/serialize" +import { parseNameString, validate } from "../../utils/parse" +import { InvalidDataReason } from "../../errors"; + +const CONTRACT_ACCOUNT = parseNameString("fio.address", InvalidDataReason.UNEXPECTED_ERROR); +const CONTRACT_NAME = parseNameString("addaddress", InvalidDataReason.UNEXPECTED_ERROR); + + +function template1(chainId: HexString, tx: ParsedTransaction, parsedPath: ValidBIP32Path): Array { + validate(tx.actions.length == 1, InvalidDataReason.MULTIPLE_ACTIONS_NOT_SUPPORTED); + validate(tx.actions[0].account === CONTRACT_ACCOUNT, InvalidDataReason. ACTION_NOT_SUPPORTED); + validate(tx.actions[0].name === CONTRACT_NAME, InvalidDataReason. ACTION_NOT_SUPPORTED); + + const actionData: ParsedMapBlockchainPublicAddress = tx.actions[0].data as ParsedMapBlockchainPublicAddress; + + //Matching template + if (actionData.public_addresses.length != 1) { + return [] + } + + return [ + COMMAND_APPEND_CONST_DATA("01" as HexString), + COMMAND_APPEND_DATA_CHAIN_CODE_TOKEN_CODE_PUBLIC_ADDR_SHOW("Mapping 1", actionData.public_addresses[0].chain_code, + actionData.public_addresses[0].token_code, actionData.public_addresses[0].public_address), + ] +} + +function template2(chainId: HexString, tx: ParsedTransaction, parsedPath: ValidBIP32Path): Array { + validate(tx.actions.length == 1, InvalidDataReason.MULTIPLE_ACTIONS_NOT_SUPPORTED); + validate(tx.actions[0].account === CONTRACT_ACCOUNT, InvalidDataReason. ACTION_NOT_SUPPORTED); + validate(tx.actions[0].name === CONTRACT_NAME, InvalidDataReason. ACTION_NOT_SUPPORTED); + + const actionData: ParsedMapBlockchainPublicAddress = tx.actions[0].data as ParsedMapBlockchainPublicAddress; + + //Matching template + if (actionData.public_addresses.length != 2) { + return [] + } + + return [ + COMMAND_APPEND_CONST_DATA("02" as HexString), + COMMAND_APPEND_DATA_CHAIN_CODE_TOKEN_CODE_PUBLIC_ADDR_SHOW("Mapping 1", actionData.public_addresses[0].chain_code, + actionData.public_addresses[0].token_code, actionData.public_addresses[0].public_address), + COMMAND_APPEND_DATA_CHAIN_CODE_TOKEN_CODE_PUBLIC_ADDR_SHOW("Mapping 2", actionData.public_addresses[1].chain_code, + actionData.public_addresses[1].token_code, actionData.public_addresses[1].public_address), + ] +} + +function template3(chainId: HexString, tx: ParsedTransaction, parsedPath: ValidBIP32Path): Array { + validate(tx.actions.length == 1, InvalidDataReason.MULTIPLE_ACTIONS_NOT_SUPPORTED); + validate(tx.actions[0].account === CONTRACT_ACCOUNT, InvalidDataReason. ACTION_NOT_SUPPORTED); + validate(tx.actions[0].name === CONTRACT_NAME, InvalidDataReason. ACTION_NOT_SUPPORTED); + + const actionData: ParsedMapBlockchainPublicAddress = tx.actions[0].data as ParsedMapBlockchainPublicAddress; + + //Matching template + if (actionData.public_addresses.length != 3) { + return [] + } + + return [ + COMMAND_APPEND_CONST_DATA("03" as HexString), + COMMAND_APPEND_DATA_CHAIN_CODE_TOKEN_CODE_PUBLIC_ADDR_SHOW("Mapping 1", actionData.public_addresses[0].chain_code, + actionData.public_addresses[0].token_code, actionData.public_addresses[0].public_address), + COMMAND_APPEND_DATA_CHAIN_CODE_TOKEN_CODE_PUBLIC_ADDR_SHOW("Mapping 2", actionData.public_addresses[1].chain_code, + actionData.public_addresses[1].token_code, actionData.public_addresses[1].public_address), + COMMAND_APPEND_DATA_CHAIN_CODE_TOKEN_CODE_PUBLIC_ADDR_SHOW("Mapping 3", actionData.public_addresses[2].chain_code, + actionData.public_addresses[2].token_code, actionData.public_addresses[2].public_address), + ] +} + +function template4(chainId: HexString, tx: ParsedTransaction, parsedPath: ValidBIP32Path): Array { + validate(tx.actions.length == 1, InvalidDataReason.MULTIPLE_ACTIONS_NOT_SUPPORTED); + validate(tx.actions[0].account === CONTRACT_ACCOUNT, InvalidDataReason. ACTION_NOT_SUPPORTED); + validate(tx.actions[0].name === CONTRACT_NAME, InvalidDataReason. ACTION_NOT_SUPPORTED); + + const actionData: ParsedMapBlockchainPublicAddress = tx.actions[0].data as ParsedMapBlockchainPublicAddress; + + //Matching template + if (actionData.public_addresses.length != 4) { + return [] + } + + return [ + COMMAND_APPEND_CONST_DATA("04" as HexString), + COMMAND_APPEND_DATA_CHAIN_CODE_TOKEN_CODE_PUBLIC_ADDR_SHOW("Mapping 1", actionData.public_addresses[0].chain_code, + actionData.public_addresses[0].token_code, actionData.public_addresses[0].public_address), + COMMAND_APPEND_DATA_CHAIN_CODE_TOKEN_CODE_PUBLIC_ADDR_SHOW("Mapping 2", actionData.public_addresses[1].chain_code, + actionData.public_addresses[1].token_code, actionData.public_addresses[1].public_address), + COMMAND_APPEND_DATA_CHAIN_CODE_TOKEN_CODE_PUBLIC_ADDR_SHOW("Mapping 3", actionData.public_addresses[2].chain_code, + actionData.public_addresses[2].token_code, actionData.public_addresses[2].public_address), + COMMAND_APPEND_DATA_CHAIN_CODE_TOKEN_CODE_PUBLIC_ADDR_SHOW("Mapping 4", actionData.public_addresses[3].chain_code, + actionData.public_addresses[3].token_code, actionData.public_addresses[3].public_address), + ] +} + + +function template5(chainId: HexString, tx: ParsedTransaction, parsedPath: ValidBIP32Path): Array { + validate(tx.actions.length == 1, InvalidDataReason.MULTIPLE_ACTIONS_NOT_SUPPORTED); + validate(tx.actions[0].account === CONTRACT_ACCOUNT, InvalidDataReason. ACTION_NOT_SUPPORTED); + validate(tx.actions[0].name === CONTRACT_NAME, InvalidDataReason. ACTION_NOT_SUPPORTED); + + const actionData: ParsedMapBlockchainPublicAddress = tx.actions[0].data as ParsedMapBlockchainPublicAddress; + + //Matching template + if (actionData.public_addresses.length != 5) { + return [] + } + + return [ + COMMAND_APPEND_CONST_DATA("05" as HexString), + COMMAND_APPEND_DATA_CHAIN_CODE_TOKEN_CODE_PUBLIC_ADDR_SHOW("Mapping 1", actionData.public_addresses[0].chain_code, + actionData.public_addresses[0].token_code, actionData.public_addresses[0].public_address), + COMMAND_APPEND_DATA_CHAIN_CODE_TOKEN_CODE_PUBLIC_ADDR_SHOW("Mapping 2", actionData.public_addresses[1].chain_code, + actionData.public_addresses[1].token_code, actionData.public_addresses[1].public_address), + COMMAND_APPEND_DATA_CHAIN_CODE_TOKEN_CODE_PUBLIC_ADDR_SHOW("Mapping 3", actionData.public_addresses[2].chain_code, + actionData.public_addresses[2].token_code, actionData.public_addresses[2].public_address), + COMMAND_APPEND_DATA_CHAIN_CODE_TOKEN_CODE_PUBLIC_ADDR_SHOW("Mapping 4", actionData.public_addresses[3].chain_code, + actionData.public_addresses[3].token_code, actionData.public_addresses[3].public_address), + COMMAND_APPEND_DATA_CHAIN_CODE_TOKEN_CODE_PUBLIC_ADDR_SHOW("Mapping 5", actionData.public_addresses[4].chain_code, + actionData.public_addresses[4].token_code, actionData.public_addresses[4].public_address), + ] +} + +export function template_addaddress(chainId: HexString, tx: ParsedTransaction, parsedPath: ValidBIP32Path): Array { + //Validate template expectations + validate(tx.context_free_actions.length == 0, InvalidDataReason.CONTEXT_FREE_ACTIONS_NOT_SUPPORTED); + validate(tx.actions.length == 1, InvalidDataReason.MULTIPLE_ACTIONS_NOT_SUPPORTED); + validate(tx.actions[0].authorization.length == 1, InvalidDataReason.MULTIPLE_AUTHORIZATION_NOT_SUPPORTED); + + // Template matching + if (tx.actions[0].account !== CONTRACT_ACCOUNT || tx.actions[0].name !== CONTRACT_NAME) { + return []; + } + + const actionData: ParsedMapBlockchainPublicAddress = tx.actions[0].data as ParsedMapBlockchainPublicAddress; + const authorization: ParsedActionAuthorisation = tx.actions[0].authorization[0]; + + const addressesCommands: Array = templateAlternative([template1, template2, template3, template4, template5])(chainId, tx, parsedPath) + validate(addressesCommands.length !== 0, InvalidDataReason.INCORRECT_NUMBER_OF_PUBLIC_ADDRESSES) + + return [ + COMMAND_APPEND_CONST_DATA(tx.actions[0].account+tx.actions[0].name+"01" as HexString), + COMMAND_SHOW_MESSAGE("Action", "Map public address"), + COMMAND_STORE_VALUE(1 as Uint8_t, Buffer.from(tx.actions[0].authorization[0].actor, "hex")), + ADD_STORAGE_CHECK(VALUE_STORAGE_COMPARE.COMPARE_REGISTER1, + COMMAND_APPEND_DATA_BUFFER_DO_NOT_SHOW(Buffer.from(authorization.actor, "hex"), 8, 8)), + COMMAND_APPEND_DATA_BUFFER_DO_NOT_SHOW(Buffer.from(authorization.permission, "hex"), 8, 8), + ...COMMANDS_COUNTED_SECTION([ + COMMAND_APPEND_DATA_STRING_WITH_LENGTH_SHOW("FIO Handle", Buffer.from(actionData.fio_address), 3, 64), + ...addressesCommands, + COMMAND_APPEND_DATA_FIO_AMOUNT_SHOW("Max fee", uint64_to_buf(actionData.max_fee).reverse()), + ADD_STORAGE_CHECK(VALUE_STORAGE_COMPARE.COMPARE_REGISTER1, + COMMAND_APPEND_DATA_BUFFER_DO_NOT_SHOW(Buffer.from(actionData.actor, "hex"), 8, 8)), + COMMAND_APPEND_DATA_STRING_WITH_LENGTH_DO_NOT_SHOW(Buffer.from(actionData.tpid)), + ]), + ]; +} diff --git a/ledgerjs-fio/src/interactions/transactionTemplates/template_addbundles.ts b/ledgerjs-fio/src/interactions/transactionTemplates/template_addbundles.ts new file mode 100644 index 00000000..9f07a1f8 --- /dev/null +++ b/ledgerjs-fio/src/interactions/transactionTemplates/template_addbundles.ts @@ -0,0 +1,46 @@ +import type {HexString, ParsedActionAuthorisation, ParsedBuyBundledTransaction, ParsedTransaction, Uint8_t, ValidBIP32Path} from "../../types/internal" +import { Command, VALUE_STORAGE_COMPARE, COMMAND_APPEND_CONST_DATA, COMMAND_SHOW_MESSAGE, COMMANDS_COUNTED_SECTION, COMMAND_STORE_VALUE, + COMMAND_APPEND_DATA_BUFFER_DO_NOT_SHOW, COMMAND_APPEND_DATA_FIO_AMOUNT_SHOW, + ADD_STORAGE_CHECK, + COMMAND_APPEND_DATA_UINT64_SHOW, + COMMAND_APPEND_DATA_STRING_WITH_LENGTH_SHOW, + COMMAND_APPEND_DATA_STRING_WITH_LENGTH_DO_NOT_SHOW} from "./commands" +import { uint64_to_buf } from "../../utils/serialize" +import { parseNameString, validate } from "../../utils/parse" +import { InvalidDataReason } from "../../errors"; + +const CONTRACT_ACCOUNT = parseNameString("fio.address", InvalidDataReason.UNEXPECTED_ERROR); +const CONTRACT_NAME = parseNameString("addbundles", InvalidDataReason.UNEXPECTED_ERROR); + + +export function template_addbundles(chainId: HexString, tx: ParsedTransaction, parsedPath: ValidBIP32Path): Array { + //Validate template expectations + validate(tx.context_free_actions.length == 0, InvalidDataReason.CONTEXT_FREE_ACTIONS_NOT_SUPPORTED); + validate(tx.actions.length == 1, InvalidDataReason.MULTIPLE_ACTIONS_NOT_SUPPORTED); + validate(tx.actions[0].authorization.length == 1, InvalidDataReason.MULTIPLE_AUTHORIZATION_NOT_SUPPORTED); + + // Template matching + if (tx.actions[0].account !== CONTRACT_ACCOUNT || tx.actions[0].name !== CONTRACT_NAME) { + return []; + } + + const actionData: ParsedBuyBundledTransaction = tx.actions[0].data as ParsedBuyBundledTransaction; + const authorization: ParsedActionAuthorisation = tx.actions[0].authorization[0]; + + return [ + COMMAND_APPEND_CONST_DATA(tx.actions[0].account+tx.actions[0].name+"01" as HexString), + COMMAND_SHOW_MESSAGE("Action", "Add Bundles"), + COMMAND_STORE_VALUE(1 as Uint8_t, Buffer.from(tx.actions[0].authorization[0].actor, "hex")), + ADD_STORAGE_CHECK(VALUE_STORAGE_COMPARE.COMPARE_REGISTER1, + COMMAND_APPEND_DATA_BUFFER_DO_NOT_SHOW(Buffer.from(authorization.actor, "hex"), 8, 8)), + COMMAND_APPEND_DATA_BUFFER_DO_NOT_SHOW(Buffer.from(authorization.permission, "hex"), 8, 8), + ...COMMANDS_COUNTED_SECTION([ + COMMAND_APPEND_DATA_STRING_WITH_LENGTH_SHOW("FIO Handle", Buffer.from(actionData.fio_address), 3, 64), + COMMAND_APPEND_DATA_UINT64_SHOW("Bundle sets", uint64_to_buf(actionData.bundle_sets).reverse()), + COMMAND_APPEND_DATA_FIO_AMOUNT_SHOW("Max fee", uint64_to_buf(actionData.max_fee).reverse()), + COMMAND_APPEND_DATA_STRING_WITH_LENGTH_DO_NOT_SHOW(Buffer.from(actionData.tpid)), + ADD_STORAGE_CHECK(VALUE_STORAGE_COMPARE.COMPARE_REGISTER1, + COMMAND_APPEND_DATA_BUFFER_DO_NOT_SHOW(Buffer.from(actionData.actor, "hex"), 8, 8)), + ]), + ]; +} diff --git a/ledgerjs-fio/src/interactions/transactionTemplates/template_addnft.ts b/ledgerjs-fio/src/interactions/transactionTemplates/template_addnft.ts new file mode 100644 index 00000000..d7772cb4 --- /dev/null +++ b/ledgerjs-fio/src/interactions/transactionTemplates/template_addnft.ts @@ -0,0 +1,142 @@ +import type {HexString, ParsedActionAuthorisation, ParsedMapNFTSignature, ParsedTransaction, Uint8_t, ValidBIP32Path} from "../../types/internal" +import { Command, VALUE_STORAGE_COMPARE, COMMAND_APPEND_CONST_DATA, COMMAND_SHOW_MESSAGE, COMMANDS_COUNTED_SECTION, COMMAND_STORE_VALUE, + COMMAND_APPEND_DATA_BUFFER_DO_NOT_SHOW, COMMAND_APPEND_DATA_FIO_AMOUNT_SHOW, + ADD_STORAGE_CHECK, + templateAlternative, + COMMAND_APPEND_DATA_STRING_WITH_LENGTH_DO_NOT_SHOW, + COMMAND_APPEND_DATA_STRING_WITH_LENGTH_SHOW} from "./commands" +import { uint64_to_buf } from "../../utils/serialize" +import { parseNameString, validate } from "../../utils/parse" +import { InvalidDataReason } from "../../errors"; + +const CONTRACT_ACCOUNT = parseNameString("fio.address", InvalidDataReason.UNEXPECTED_ERROR); +const CONTRACT_NAME = parseNameString("addnft", InvalidDataReason.UNEXPECTED_ERROR); + + +function template1(chainId: HexString, tx: ParsedTransaction, parsedPath: ValidBIP32Path): Array { + validate(tx.actions.length == 1, InvalidDataReason.MULTIPLE_ACTIONS_NOT_SUPPORTED); + validate(tx.actions[0].account === CONTRACT_ACCOUNT, InvalidDataReason. ACTION_NOT_SUPPORTED); + validate(tx.actions[0].name === CONTRACT_NAME, InvalidDataReason. ACTION_NOT_SUPPORTED); + + const actionData: ParsedMapNFTSignature = tx.actions[0].data as ParsedMapNFTSignature; + + //Matching template + if (actionData.nfts.length != 1) { + return [] + } + + return [ + COMMAND_APPEND_CONST_DATA("01" as HexString), + COMMAND_SHOW_MESSAGE("Mapping 1", ""), + COMMAND_APPEND_DATA_STRING_WITH_LENGTH_SHOW("Chain code", Buffer.from(actionData.nfts[0].chain_code), 1, 10), + COMMAND_APPEND_DATA_STRING_WITH_LENGTH_SHOW("Contract address", Buffer.from(actionData.nfts[0].contract_address), 1, 128), + COMMAND_APPEND_DATA_STRING_WITH_LENGTH_SHOW("NFT Token ID", Buffer.from(actionData.nfts[0].token_id), 0, 128), + COMMAND_APPEND_DATA_STRING_WITH_LENGTH_DO_NOT_SHOW(Buffer.from(actionData.nfts[0].url), 0, 128), + COMMAND_APPEND_DATA_STRING_WITH_LENGTH_DO_NOT_SHOW(Buffer.from(actionData.nfts[0].hash), 0, 64), + COMMAND_APPEND_DATA_STRING_WITH_LENGTH_DO_NOT_SHOW(Buffer.from(actionData.nfts[0].metadata), 0, 128), + ] +} + +function template2(chainId: HexString, tx: ParsedTransaction, parsedPath: ValidBIP32Path): Array { + validate(tx.actions.length == 1, InvalidDataReason.MULTIPLE_ACTIONS_NOT_SUPPORTED); + validate(tx.actions[0].account === CONTRACT_ACCOUNT, InvalidDataReason. ACTION_NOT_SUPPORTED); + validate(tx.actions[0].name === CONTRACT_NAME, InvalidDataReason. ACTION_NOT_SUPPORTED); + + const actionData: ParsedMapNFTSignature = tx.actions[0].data as ParsedMapNFTSignature; + + //Matching template + if (actionData.nfts.length != 2) { + return [] + } + + return [ + COMMAND_APPEND_CONST_DATA("02" as HexString), + COMMAND_SHOW_MESSAGE("Mapping 1", ""), + COMMAND_APPEND_DATA_STRING_WITH_LENGTH_SHOW("Chain code", Buffer.from(actionData.nfts[0].chain_code), 1, 10), + COMMAND_APPEND_DATA_STRING_WITH_LENGTH_SHOW("Contract address", Buffer.from(actionData.nfts[0].contract_address), 1, 128), + COMMAND_APPEND_DATA_STRING_WITH_LENGTH_SHOW("NFT Token ID", Buffer.from(actionData.nfts[0].token_id), 0, 128), + COMMAND_APPEND_DATA_STRING_WITH_LENGTH_DO_NOT_SHOW(Buffer.from(actionData.nfts[0].url), 0, 128), + COMMAND_APPEND_DATA_STRING_WITH_LENGTH_DO_NOT_SHOW(Buffer.from(actionData.nfts[0].hash), 0, 64), + COMMAND_APPEND_DATA_STRING_WITH_LENGTH_DO_NOT_SHOW(Buffer.from(actionData.nfts[0].metadata), 0, 128), + COMMAND_SHOW_MESSAGE("Mapping 2", ""), + COMMAND_APPEND_DATA_STRING_WITH_LENGTH_SHOW("Chain code", Buffer.from(actionData.nfts[1].chain_code), 1, 10), + COMMAND_APPEND_DATA_STRING_WITH_LENGTH_SHOW("Contract address", Buffer.from(actionData.nfts[1].contract_address), 1, 128), + COMMAND_APPEND_DATA_STRING_WITH_LENGTH_SHOW("NFT Token ID", Buffer.from(actionData.nfts[1].token_id), 0, 128), + COMMAND_APPEND_DATA_STRING_WITH_LENGTH_DO_NOT_SHOW(Buffer.from(actionData.nfts[1].url), 0, 128), + COMMAND_APPEND_DATA_STRING_WITH_LENGTH_DO_NOT_SHOW(Buffer.from(actionData.nfts[1].hash), 0, 64), + COMMAND_APPEND_DATA_STRING_WITH_LENGTH_DO_NOT_SHOW(Buffer.from(actionData.nfts[1].metadata), 0, 128), + ] +} + +function template3(chainId: HexString, tx: ParsedTransaction, parsedPath: ValidBIP32Path): Array { + validate(tx.actions.length == 1, InvalidDataReason.MULTIPLE_ACTIONS_NOT_SUPPORTED); + validate(tx.actions[0].account === CONTRACT_ACCOUNT, InvalidDataReason. ACTION_NOT_SUPPORTED); + validate(tx.actions[0].name === CONTRACT_NAME, InvalidDataReason. ACTION_NOT_SUPPORTED); + + const actionData: ParsedMapNFTSignature = tx.actions[0].data as ParsedMapNFTSignature; + + //Matching template + if (actionData.nfts.length != 3) { + return [] + } + + return [ + COMMAND_APPEND_CONST_DATA("03" as HexString), + COMMAND_SHOW_MESSAGE("Mapping 1", ""), + COMMAND_APPEND_DATA_STRING_WITH_LENGTH_SHOW("Chain code", Buffer.from(actionData.nfts[0].chain_code), 1, 10), + COMMAND_APPEND_DATA_STRING_WITH_LENGTH_SHOW("Contract address", Buffer.from(actionData.nfts[0].contract_address), 1, 128), + COMMAND_APPEND_DATA_STRING_WITH_LENGTH_SHOW("NFT Token ID", Buffer.from(actionData.nfts[0].token_id), 0, 128), + COMMAND_APPEND_DATA_STRING_WITH_LENGTH_DO_NOT_SHOW(Buffer.from(actionData.nfts[0].url), 0, 128), + COMMAND_APPEND_DATA_STRING_WITH_LENGTH_DO_NOT_SHOW(Buffer.from(actionData.nfts[0].hash), 0, 64), + COMMAND_APPEND_DATA_STRING_WITH_LENGTH_DO_NOT_SHOW(Buffer.from(actionData.nfts[0].metadata), 0, 128), + COMMAND_SHOW_MESSAGE("Mapping 2", ""), + COMMAND_APPEND_DATA_STRING_WITH_LENGTH_SHOW("Chain code", Buffer.from(actionData.nfts[1].chain_code), 1, 10), + COMMAND_APPEND_DATA_STRING_WITH_LENGTH_SHOW("Contract address", Buffer.from(actionData.nfts[1].contract_address), 1, 128), + COMMAND_APPEND_DATA_STRING_WITH_LENGTH_SHOW("NFT Token ID", Buffer.from(actionData.nfts[1].token_id), 0, 128), + COMMAND_APPEND_DATA_STRING_WITH_LENGTH_DO_NOT_SHOW(Buffer.from(actionData.nfts[1].url), 0, 128), + COMMAND_APPEND_DATA_STRING_WITH_LENGTH_DO_NOT_SHOW(Buffer.from(actionData.nfts[1].hash), 0, 64), + COMMAND_APPEND_DATA_STRING_WITH_LENGTH_DO_NOT_SHOW(Buffer.from(actionData.nfts[1].metadata), 0, 128), + COMMAND_SHOW_MESSAGE("Mapping 3", ""), + COMMAND_APPEND_DATA_STRING_WITH_LENGTH_SHOW("Chain code", Buffer.from(actionData.nfts[2].chain_code), 1, 10), + COMMAND_APPEND_DATA_STRING_WITH_LENGTH_SHOW("Contract address", Buffer.from(actionData.nfts[2].contract_address), 1, 128), + COMMAND_APPEND_DATA_STRING_WITH_LENGTH_SHOW("NFT Token ID", Buffer.from(actionData.nfts[2].token_id), 0, 128), + COMMAND_APPEND_DATA_STRING_WITH_LENGTH_DO_NOT_SHOW(Buffer.from(actionData.nfts[2].url), 0, 128), + COMMAND_APPEND_DATA_STRING_WITH_LENGTH_DO_NOT_SHOW(Buffer.from(actionData.nfts[2].hash), 0, 64), + COMMAND_APPEND_DATA_STRING_WITH_LENGTH_DO_NOT_SHOW(Buffer.from(actionData.nfts[2].metadata), 0, 128), + ] +} + +export function template_addnft(chainId: HexString, tx: ParsedTransaction, parsedPath: ValidBIP32Path): Array { + //Validate template expectations + validate(tx.context_free_actions.length == 0, InvalidDataReason.CONTEXT_FREE_ACTIONS_NOT_SUPPORTED); + validate(tx.actions.length == 1, InvalidDataReason.MULTIPLE_ACTIONS_NOT_SUPPORTED); + validate(tx.actions[0].authorization.length == 1, InvalidDataReason.MULTIPLE_AUTHORIZATION_NOT_SUPPORTED); + + // Template matching + if (tx.actions[0].account !== CONTRACT_ACCOUNT || tx.actions[0].name !== CONTRACT_NAME) { + return []; + } + + const actionData: ParsedMapNFTSignature = tx.actions[0].data as ParsedMapNFTSignature; + const authorization: ParsedActionAuthorisation = tx.actions[0].authorization[0]; + + const addressesCommands: Array = templateAlternative([template1, template2, template3])(chainId, tx, parsedPath) + validate(addressesCommands.length !== 0, InvalidDataReason.INCORRECT_NUMBER_OF_PUBLIC_ADDRESSES) + + return [ + COMMAND_APPEND_CONST_DATA(tx.actions[0].account+tx.actions[0].name+"01" as HexString), + COMMAND_SHOW_MESSAGE("Action", "Map nfts"), + COMMAND_STORE_VALUE(1 as Uint8_t, Buffer.from(tx.actions[0].authorization[0].actor, "hex")), + ADD_STORAGE_CHECK(VALUE_STORAGE_COMPARE.COMPARE_REGISTER1, + COMMAND_APPEND_DATA_BUFFER_DO_NOT_SHOW(Buffer.from(authorization.actor, "hex"), 8, 8)), + COMMAND_APPEND_DATA_BUFFER_DO_NOT_SHOW(Buffer.from(authorization.permission, "hex"), 8, 8), + ...COMMANDS_COUNTED_SECTION([ + COMMAND_APPEND_DATA_STRING_WITH_LENGTH_SHOW("FIO Handle", Buffer.from(actionData.fio_address), 3, 64), + ...addressesCommands, + COMMAND_APPEND_DATA_FIO_AMOUNT_SHOW("Max fee", uint64_to_buf(actionData.max_fee).reverse()), + ADD_STORAGE_CHECK(VALUE_STORAGE_COMPARE.COMPARE_REGISTER1, + COMMAND_APPEND_DATA_BUFFER_DO_NOT_SHOW(Buffer.from(actionData.actor, "hex"), 8, 8)), + COMMAND_APPEND_DATA_STRING_WITH_LENGTH_DO_NOT_SHOW(Buffer.from(actionData.tpid)), + ]), + ]; +} diff --git a/ledgerjs-fio/src/interactions/transactionTemplates/template_all.ts b/ledgerjs-fio/src/interactions/transactionTemplates/template_all.ts new file mode 100644 index 00000000..36f36be7 --- /dev/null +++ b/ledgerjs-fio/src/interactions/transactionTemplates/template_all.ts @@ -0,0 +1,77 @@ +import type {HexString, ParsedTransaction, ValidBIP32Path} from "../../types/internal" +import { Command, templateAlternative, COMMAND_INIT, COMMAND_APPEND_CONST_DATA, COMMAND_FINISH, COMMAND_APPEND_DATA_BUFFER_DO_NOT_SHOW} from "./commands" +import { date_to_buf, uint16_to_buf, uint32_to_buf } from "../../utils/serialize" +import { validate } from "../../utils/parse" +import { InvalidDataReason } from "../../errors"; +import { template_trnsfiopubky } from "./template_trnsfiopubky"; +import { template_newfundsreq } from "./template_newfundsreq"; +import { template_recordopt } from "./template_recordobt"; +import { template_addaddress } from "./template_addaddress"; +import { template_remaddress } from "./template_remaddress"; +import { template_addnft } from "./template_addnft"; +import { template_remnft } from "./template_remnft"; +import { template_remalladdr } from "./template_remalladdr"; +import { template_cancelfndreq } from "./template_cancelfndreq"; +import { template_rejectfndreq } from "./template_rejectfndreq"; +import { template_addbundles } from "./template_addbundles"; +import { template_regaddress } from "./template_regaddress"; +import { template_xferaddress } from "./template_xferaddress"; +import { template_regdomain } from "./template_regdomain"; +import { template_renewdomain } from "./template_renewdomain"; +import { template_setdomainpub } from "./template_setdomainpub"; +import { template_xferdomain } from "./template_xferdomain"; +import { template_remallnfts } from "./template_remallnfts"; +import { template_stakefio } from "./template_stakefio"; +import { template_unstakefio } from "./template_unstakefio"; +import { template_voteproducer } from "./template_voteproducer"; +import { template_voteproxy } from "./template_voteproxy"; +import { template_wrapdomain } from "./template_wrapdomain"; +import { template_wraptokens } from "./template_wraptokens"; + +export function templete_all(chainId: HexString, tx: ParsedTransaction, parsedPath: ValidBIP32Path): Array { + //Validate template expectations + validate(tx.context_free_actions.length == 0, InvalidDataReason.CONTEXT_FREE_ACTIONS_NOT_SUPPORTED); + validate(tx.actions.length == 1, InvalidDataReason.MULTIPLE_ACTIONS_NOT_SUPPORTED); + + //Match action + const actionCommands:Array = templateAlternative([ + template_trnsfiopubky, + template_newfundsreq, + template_recordopt, + template_addaddress, + template_remaddress, + template_addnft, + template_remnft, + template_remalladdr, + template_cancelfndreq, + template_rejectfndreq, + template_addbundles, + template_regaddress, + template_xferaddress, + template_regdomain, + template_renewdomain, + template_setdomainpub, + template_xferdomain, + template_remallnfts, + template_stakefio, + template_unstakefio, + template_voteproducer, + template_voteproxy, + template_wrapdomain, + template_wraptokens + ])(chainId, tx, parsedPath) + if (actionCommands.length == 0) return []; + + return [ + COMMAND_INIT(chainId, parsedPath), + COMMAND_APPEND_DATA_BUFFER_DO_NOT_SHOW(Buffer.concat([ + date_to_buf(tx.expiration).reverse(), + uint16_to_buf(tx.ref_block_num).reverse(), + uint32_to_buf(tx.ref_block_prefix).reverse() + ]), 10, 10), + COMMAND_APPEND_CONST_DATA("0000000001" as HexString), + ...actionCommands, + COMMAND_APPEND_CONST_DATA("000000000000000000000000000000000000000000000000000000000000000000" as HexString), + COMMAND_FINISH(parsedPath), + ]; +} \ No newline at end of file diff --git a/ledgerjs-fio/src/interactions/transactionTemplates/template_cancelfndreq.ts b/ledgerjs-fio/src/interactions/transactionTemplates/template_cancelfndreq.ts new file mode 100644 index 00000000..1d29143d --- /dev/null +++ b/ledgerjs-fio/src/interactions/transactionTemplates/template_cancelfndreq.ts @@ -0,0 +1,42 @@ +import type {HexString, ParsedTransaction, ParsedRequestFundsData, ValidBIP32Path, ParsedActionAuthorisation, ParsedRecordOtherBlockchainTransactionMetadata, Uint8_t, ParsedCancelFundsRequest} from "../../types/internal" +import { Command, templateAlternative, COMMANDS_COUNTED_SECTION, COMMAND_APPEND_DATA_STRING_SHOW, COMMAND_APPEND_CONST_DATA, + COMMAND_SHOW_MESSAGE, COMMAND_APPEND_DATA_BUFFER_DO_NOT_SHOW, COMMAND_APPEND_DATA_NAME_SHOW, COMMANDS_DH_ENCODE, + COMMAND_APPEND_DATA_FIO_AMOUNT_SHOW, COMMAND_APPEND_DATA_STRING_DO_NOT_SHOW, COMMAND_STORE_VALUE, ADD_STORAGE_CHECK, VALUE_STORAGE_COMPARE, COMMAND_APPEND_DATA_MEMO_HASH, COMMAND_APPEND_DATA_STRING_WITH_LENGTH_SHOW, COMMAND_APPEND_DATA_STRING_WITH_LENGTH_DO_NOT_SHOW } from "./commands" +import { uint64_to_buf } from "../../utils/serialize" +import { parseNameString, validate } from "../../utils/parse" +import { InvalidDataReason } from "../../errors"; + +const CONTRACT_ACCOUNT = parseNameString("fio.reqobt", InvalidDataReason.UNEXPECTED_ERROR); +const CONTRACT_NAME = parseNameString("cancelfndreq", InvalidDataReason.UNEXPECTED_ERROR); + +export function template_cancelfndreq(chainId: HexString, tx: ParsedTransaction, parsedPath: ValidBIP32Path): Array { + // Validate template expectations + validate(tx.actions.length == 1, InvalidDataReason.MULTIPLE_ACTIONS_NOT_SUPPORTED); + validate(tx.actions[0].authorization.length == 1, InvalidDataReason.MULTIPLE_AUTHORIZATION_NOT_SUPPORTED); + + // Template matching + if (tx.actions[0].account !== CONTRACT_ACCOUNT || tx.actions[0].name !== CONTRACT_NAME) { + return []; + } + + const actionData: ParsedCancelFundsRequest = tx.actions[0].data as ParsedCancelFundsRequest; + const authorization: ParsedActionAuthorisation = tx.actions[0].authorization[0]; + + return [ + COMMAND_APPEND_CONST_DATA(tx.actions[0].account+tx.actions[0].name+"01" as HexString), + COMMAND_SHOW_MESSAGE("Action", "Cancel funds request"), + COMMAND_STORE_VALUE(1 as Uint8_t, Buffer.from(authorization.actor, "hex")), + ADD_STORAGE_CHECK(VALUE_STORAGE_COMPARE.COMPARE_REGISTER1, + COMMAND_APPEND_DATA_BUFFER_DO_NOT_SHOW(Buffer.from(authorization.actor, "hex"), 8, 8)), + COMMAND_APPEND_DATA_BUFFER_DO_NOT_SHOW(Buffer.from(authorization.permission, "hex"), 8, 8), + ...COMMANDS_COUNTED_SECTION([ + COMMAND_APPEND_DATA_STRING_WITH_LENGTH_SHOW("Request ID", Buffer.from(actionData.fio_request_id)), + COMMAND_APPEND_DATA_FIO_AMOUNT_SHOW("Max fee", uint64_to_buf(actionData.max_fee).reverse()), + ...COMMANDS_COUNTED_SECTION([ + ADD_STORAGE_CHECK(VALUE_STORAGE_COMPARE.COMPARE_REGISTER1_DECODE_NAME, + COMMAND_APPEND_DATA_STRING_DO_NOT_SHOW(Buffer.from(actionData.actor), 0, 14)), + ]), + COMMAND_APPEND_DATA_STRING_WITH_LENGTH_DO_NOT_SHOW(Buffer.from(actionData.tpid)), + ]), + ]; +} diff --git a/ledgerjs-fio/src/interactions/transactionTemplates/template_newfundsreq.ts b/ledgerjs-fio/src/interactions/transactionTemplates/template_newfundsreq.ts new file mode 100644 index 00000000..d435f7c7 --- /dev/null +++ b/ledgerjs-fio/src/interactions/transactionTemplates/template_newfundsreq.ts @@ -0,0 +1,51 @@ +import type {HexString, ParsedTransaction, ParsedRequestFundsData, ValidBIP32Path, ParsedActionAuthorisation, Uint8_t} from "../../types/internal" +import { Command, templateAlternative, COMMANDS_COUNTED_SECTION, COMMAND_APPEND_DATA_STRING_SHOW, COMMAND_APPEND_CONST_DATA, + COMMAND_SHOW_MESSAGE, COMMAND_APPEND_DATA_BUFFER_DO_NOT_SHOW, COMMANDS_DH_ENCODE, COMMAND_APPEND_DATA_FIO_AMOUNT_SHOW, + COMMAND_APPEND_DATA_STRING_DO_NOT_SHOW, ADD_STORAGE_CHECK, VALUE_STORAGE_COMPARE, COMMAND_STORE_VALUE, COMMAND_APPEND_DATA_MEMO_HASH, COMMAND_APPEND_DATA_STRING_WITH_LENGTH_SHOW, COMMAND_APPEND_DATA_STRING_WITH_LENGTH_DO_NOT_SHOW } from "./commands" +import { uint64_to_buf } from "../../utils/serialize" +import { parseNameString, validate } from "../../utils/parse" +import { InvalidDataReason } from "../../errors"; + +const CONTRACT_ACCOUNT = parseNameString("fio.reqobt", InvalidDataReason.UNEXPECTED_ERROR); +const CONTRACT_NAME = parseNameString("newfundsreq", InvalidDataReason.UNEXPECTED_ERROR); + +export function template_newfundsreq(chainId: HexString, tx: ParsedTransaction, parsedPath: ValidBIP32Path): Array { + // Validate template expectations + validate(tx.actions.length == 1, InvalidDataReason.MULTIPLE_ACTIONS_NOT_SUPPORTED); + + // Template matching + if (tx.actions[0].account !== CONTRACT_ACCOUNT || tx.actions[0].name !== CONTRACT_NAME) { + return []; + } + + const actionData: ParsedRequestFundsData = tx.actions[0].data as ParsedRequestFundsData; + const authorization: ParsedActionAuthorisation = tx.actions[0].authorization[0]; + + return [ + COMMAND_APPEND_CONST_DATA(tx.actions[0].account+tx.actions[0].name+"01" as HexString), + COMMAND_SHOW_MESSAGE("Action", "Request Funds"), + COMMAND_STORE_VALUE(1 as Uint8_t, Buffer.from(authorization.actor, "hex")), + ADD_STORAGE_CHECK(VALUE_STORAGE_COMPARE.COMPARE_REGISTER1, + COMMAND_APPEND_DATA_BUFFER_DO_NOT_SHOW(Buffer.from(authorization.actor, "hex"), 8, 8)), + COMMAND_APPEND_DATA_BUFFER_DO_NOT_SHOW(Buffer.from(authorization.permission, "hex"), 8, 8), + ...COMMANDS_COUNTED_SECTION([ + COMMAND_APPEND_DATA_STRING_WITH_LENGTH_SHOW("Payer FIO Handle", Buffer.from(actionData.payer_fio_address), 3, 64), + COMMAND_APPEND_DATA_STRING_WITH_LENGTH_SHOW("Payee FIO Handle", Buffer.from(actionData.payee_fio_address), 3, 64), + ...COMMANDS_COUNTED_SECTION([ + ...COMMANDS_DH_ENCODE(Buffer.from(actionData.other_public_key, "hex"), [ + COMMAND_APPEND_DATA_STRING_WITH_LENGTH_SHOW("Payee Public Addr", Buffer.from(actionData.payee_public_address)), + COMMAND_APPEND_DATA_STRING_WITH_LENGTH_SHOW("Amount requested", Buffer.from(actionData.amount)), + COMMAND_APPEND_DATA_STRING_WITH_LENGTH_SHOW("Chain code", Buffer.from(actionData.chain_code), 1, 10), + COMMAND_APPEND_DATA_STRING_WITH_LENGTH_SHOW("Token code", Buffer.from(actionData.token_code), 1, 10), + COMMAND_APPEND_DATA_MEMO_HASH(actionData.memo, actionData.hash, actionData.offline_url), + ]) + ], 64, 296), + COMMAND_APPEND_DATA_FIO_AMOUNT_SHOW("Max fee", uint64_to_buf(actionData.max_fee).reverse()), + ...COMMANDS_COUNTED_SECTION([ + ADD_STORAGE_CHECK(VALUE_STORAGE_COMPARE.COMPARE_REGISTER1_DECODE_NAME, + COMMAND_APPEND_DATA_STRING_DO_NOT_SHOW(Buffer.from(actionData.actor), 0, 14)), + ]), + COMMAND_APPEND_DATA_STRING_WITH_LENGTH_DO_NOT_SHOW(Buffer.from(actionData.tpid)), + ]), + ]; +} diff --git a/ledgerjs-fio/src/interactions/transactionTemplates/template_recordobt.ts b/ledgerjs-fio/src/interactions/transactionTemplates/template_recordobt.ts new file mode 100644 index 00000000..603f0643 --- /dev/null +++ b/ledgerjs-fio/src/interactions/transactionTemplates/template_recordobt.ts @@ -0,0 +1,56 @@ +import type {HexString, ParsedTransaction, ParsedRequestFundsData, ValidBIP32Path, ParsedActionAuthorisation, ParsedRecordOtherBlockchainTransactionMetadata, Uint8_t} from "../../types/internal" +import { Command, templateAlternative, COMMANDS_COUNTED_SECTION, COMMAND_APPEND_DATA_STRING_SHOW, COMMAND_APPEND_CONST_DATA, + COMMAND_SHOW_MESSAGE, COMMAND_APPEND_DATA_BUFFER_DO_NOT_SHOW, COMMAND_APPEND_DATA_NAME_SHOW, COMMANDS_DH_ENCODE, + COMMAND_APPEND_DATA_FIO_AMOUNT_SHOW, COMMAND_APPEND_DATA_STRING_DO_NOT_SHOW, COMMAND_STORE_VALUE, ADD_STORAGE_CHECK, VALUE_STORAGE_COMPARE, COMMAND_APPEND_DATA_MEMO_HASH, COMMAND_APPEND_DATA_STRING_WITH_LENGTH_SHOW, COMMAND_APPEND_DATA_STRING_WITH_LENGTH_DO_NOT_SHOW, COMMAND_APPEND_DATA_STRING_WITH_LENGTH_SHOW_IF_NON_EMPTY } from "./commands" +import { uint64_to_buf } from "../../utils/serialize" +import { parseNameString, validate } from "../../utils/parse" +import { InvalidDataReason } from "../../errors"; + +const CONTRACT_ACCOUNT = parseNameString("fio.reqobt", InvalidDataReason.UNEXPECTED_ERROR); +const CONTRACT_NAME = parseNameString("recordobt", InvalidDataReason.UNEXPECTED_ERROR); + +export function template_recordopt(chainId: HexString, tx: ParsedTransaction, parsedPath: ValidBIP32Path): Array { + // Validate template expectations + validate(tx.actions.length == 1, InvalidDataReason.MULTIPLE_ACTIONS_NOT_SUPPORTED); + validate(tx.actions[0].authorization.length == 1, InvalidDataReason.MULTIPLE_AUTHORIZATION_NOT_SUPPORTED); + + // Template matching + if (tx.actions[0].account !== CONTRACT_ACCOUNT || tx.actions[0].name !== CONTRACT_NAME) { + return []; + } + + const actionData: ParsedRecordOtherBlockchainTransactionMetadata = tx.actions[0].data as ParsedRecordOtherBlockchainTransactionMetadata; + const authorization: ParsedActionAuthorisation = tx.actions[0].authorization[0]; + + return [ + COMMAND_APPEND_CONST_DATA(tx.actions[0].account+tx.actions[0].name+"01" as HexString), + COMMAND_SHOW_MESSAGE("Action", "Record metadata"), + COMMAND_STORE_VALUE(1 as Uint8_t, Buffer.from(authorization.actor, "hex")), + ADD_STORAGE_CHECK(VALUE_STORAGE_COMPARE.COMPARE_REGISTER1, + COMMAND_APPEND_DATA_BUFFER_DO_NOT_SHOW(Buffer.from(authorization.actor, "hex"), 8, 8)), + COMMAND_APPEND_DATA_BUFFER_DO_NOT_SHOW(Buffer.from(authorization.permission, "hex"), 8, 8), + ...COMMANDS_COUNTED_SECTION([ + COMMAND_APPEND_DATA_STRING_WITH_LENGTH_SHOW_IF_NON_EMPTY("Request ID", Buffer.from(actionData.fio_request_id)), + COMMAND_APPEND_DATA_STRING_WITH_LENGTH_SHOW("Payer FIO Handle", Buffer.from(actionData.payer_fio_address), 3, 64), + COMMAND_APPEND_DATA_STRING_WITH_LENGTH_SHOW("Payee FIO Handle", Buffer.from(actionData.payee_fio_address), 3, 64), + ...COMMANDS_COUNTED_SECTION([ + ...COMMANDS_DH_ENCODE(Buffer.from(actionData.other_public_key, "hex"), [ + COMMAND_APPEND_DATA_STRING_WITH_LENGTH_SHOW("Payer Public Addr", Buffer.from(actionData.payer_public_address)), + COMMAND_APPEND_DATA_STRING_WITH_LENGTH_SHOW("Payee Public Addr", Buffer.from(actionData.payee_public_address)), + COMMAND_APPEND_DATA_STRING_WITH_LENGTH_SHOW("Amount requested", Buffer.from(actionData.amount)), + COMMAND_APPEND_DATA_STRING_WITH_LENGTH_SHOW("Chain code", Buffer.from(actionData.chain_code), 1, 10), + COMMAND_APPEND_DATA_STRING_WITH_LENGTH_SHOW("Token code", Buffer.from(actionData.token_code), 1, 10), + COMMAND_APPEND_DATA_STRING_WITH_LENGTH_SHOW("Status", Buffer.from(actionData.status)), + COMMAND_APPEND_DATA_STRING_WITH_LENGTH_SHOW("Obt ID", Buffer.from(actionData.obt_id)), + COMMAND_APPEND_DATA_MEMO_HASH(actionData.memo, actionData.hash, actionData.offline_url), + ]) + ], 64, 432), + COMMAND_APPEND_DATA_FIO_AMOUNT_SHOW("Max fee", uint64_to_buf(actionData.max_fee).reverse()), + ...COMMANDS_COUNTED_SECTION([ + ADD_STORAGE_CHECK(VALUE_STORAGE_COMPARE.COMPARE_REGISTER1_DECODE_NAME, + COMMAND_APPEND_DATA_STRING_DO_NOT_SHOW(Buffer.from(actionData.actor), 0, 14)), + ]), + COMMAND_APPEND_DATA_STRING_WITH_LENGTH_DO_NOT_SHOW(Buffer.from(actionData.tpid)), + ]), + ]; +} diff --git a/ledgerjs-fio/src/interactions/transactionTemplates/template_regaddress.ts b/ledgerjs-fio/src/interactions/transactionTemplates/template_regaddress.ts new file mode 100644 index 00000000..23426858 --- /dev/null +++ b/ledgerjs-fio/src/interactions/transactionTemplates/template_regaddress.ts @@ -0,0 +1,45 @@ +import type {HexString, ParsedActionAuthorisation, ParsedRegisterAddress, ParsedTransaction, Uint8_t, ValidBIP32Path} from "../../types/internal" +import { Command, VALUE_STORAGE_COMPARE, COMMAND_APPEND_CONST_DATA, COMMAND_SHOW_MESSAGE, COMMANDS_COUNTED_SECTION, COMMAND_STORE_VALUE, + COMMAND_APPEND_DATA_BUFFER_DO_NOT_SHOW, COMMAND_APPEND_DATA_FIO_AMOUNT_SHOW, + ADD_STORAGE_CHECK, + COMMAND_APPEND_DATA_STRING_WITH_LENGTH_SHOW, + COMMAND_APPEND_DATA_STRING_WITH_LENGTH_DO_NOT_SHOW} from "./commands" +import { uint64_to_buf } from "../../utils/serialize" +import { parseNameString, validate } from "../../utils/parse" +import { InvalidDataReason } from "../../errors"; + +const CONTRACT_ACCOUNT = parseNameString("fio.address", InvalidDataReason.UNEXPECTED_ERROR); +const CONTRACT_NAME = parseNameString("regaddress", InvalidDataReason.UNEXPECTED_ERROR); + + +export function template_regaddress(chainId: HexString, tx: ParsedTransaction, parsedPath: ValidBIP32Path): Array { + //Validate template expectations + validate(tx.context_free_actions.length == 0, InvalidDataReason.CONTEXT_FREE_ACTIONS_NOT_SUPPORTED); + validate(tx.actions.length == 1, InvalidDataReason.MULTIPLE_ACTIONS_NOT_SUPPORTED); + validate(tx.actions[0].authorization.length == 1, InvalidDataReason.MULTIPLE_AUTHORIZATION_NOT_SUPPORTED); + + // Template matching + if (tx.actions[0].account !== CONTRACT_ACCOUNT || tx.actions[0].name !== CONTRACT_NAME) { + return []; + } + + const actionData: ParsedRegisterAddress = tx.actions[0].data as ParsedRegisterAddress; + const authorization: ParsedActionAuthorisation = tx.actions[0].authorization[0]; + + return [ + COMMAND_APPEND_CONST_DATA(tx.actions[0].account+tx.actions[0].name+"01" as HexString), + COMMAND_SHOW_MESSAGE("Action", "Register FIO Crypto Handle"), + COMMAND_STORE_VALUE(1 as Uint8_t, Buffer.from(tx.actions[0].authorization[0].actor, "hex")), + ADD_STORAGE_CHECK(VALUE_STORAGE_COMPARE.COMPARE_REGISTER1, + COMMAND_APPEND_DATA_BUFFER_DO_NOT_SHOW(Buffer.from(authorization.actor, "hex"), 8, 8)), + COMMAND_APPEND_DATA_BUFFER_DO_NOT_SHOW(Buffer.from(authorization.permission, "hex"), 8, 8), + ...COMMANDS_COUNTED_SECTION([ + COMMAND_APPEND_DATA_STRING_WITH_LENGTH_SHOW("FIO Handle", Buffer.from(actionData.fio_address), 3, 64), + COMMAND_APPEND_DATA_STRING_WITH_LENGTH_SHOW("Owner Pubkey", Buffer.from(actionData.owner_fio_public_key)), + COMMAND_APPEND_DATA_FIO_AMOUNT_SHOW("Max fee", uint64_to_buf(actionData.max_fee).reverse()), + ADD_STORAGE_CHECK(VALUE_STORAGE_COMPARE.COMPARE_REGISTER1, + COMMAND_APPEND_DATA_BUFFER_DO_NOT_SHOW(Buffer.from(actionData.actor, "hex"), 8, 8)), + COMMAND_APPEND_DATA_STRING_WITH_LENGTH_DO_NOT_SHOW(Buffer.from(actionData.tpid)), + ]), + ]; +} diff --git a/ledgerjs-fio/src/interactions/transactionTemplates/template_regdomain.ts b/ledgerjs-fio/src/interactions/transactionTemplates/template_regdomain.ts new file mode 100644 index 00000000..da03c8d3 --- /dev/null +++ b/ledgerjs-fio/src/interactions/transactionTemplates/template_regdomain.ts @@ -0,0 +1,45 @@ +import type {HexString, ParsedActionAuthorisation, ParsedRegisterDomain, ParsedTransaction, Uint8_t, ValidBIP32Path} from "../../types/internal" +import { Command, VALUE_STORAGE_COMPARE, COMMAND_APPEND_CONST_DATA, COMMAND_SHOW_MESSAGE, COMMANDS_COUNTED_SECTION, COMMAND_STORE_VALUE, + COMMAND_APPEND_DATA_BUFFER_DO_NOT_SHOW, COMMAND_APPEND_DATA_FIO_AMOUNT_SHOW, + ADD_STORAGE_CHECK, + COMMAND_APPEND_DATA_STRING_WITH_LENGTH_SHOW, + COMMAND_APPEND_DATA_STRING_WITH_LENGTH_DO_NOT_SHOW} from "./commands" +import { uint64_to_buf } from "../../utils/serialize" +import { parseNameString, validate } from "../../utils/parse" +import { InvalidDataReason } from "../../errors"; + +const CONTRACT_ACCOUNT = parseNameString("fio.address", InvalidDataReason.UNEXPECTED_ERROR); +const CONTRACT_NAME = parseNameString("regdomain", InvalidDataReason.UNEXPECTED_ERROR); + + +export function template_regdomain(chainId: HexString, tx: ParsedTransaction, parsedPath: ValidBIP32Path): Array { + //Validate template expectations + validate(tx.context_free_actions.length == 0, InvalidDataReason.CONTEXT_FREE_ACTIONS_NOT_SUPPORTED); + validate(tx.actions.length == 1, InvalidDataReason.MULTIPLE_ACTIONS_NOT_SUPPORTED); + validate(tx.actions[0].authorization.length == 1, InvalidDataReason.MULTIPLE_AUTHORIZATION_NOT_SUPPORTED); + + // Template matching + if (tx.actions[0].account !== CONTRACT_ACCOUNT || tx.actions[0].name !== CONTRACT_NAME) { + return []; + } + + const actionData: ParsedRegisterDomain = tx.actions[0].data as ParsedRegisterDomain; + const authorization: ParsedActionAuthorisation = tx.actions[0].authorization[0]; + + return [ + COMMAND_APPEND_CONST_DATA(tx.actions[0].account+tx.actions[0].name+"01" as HexString), + COMMAND_SHOW_MESSAGE("Action", "Register FIO Domain"), + COMMAND_STORE_VALUE(1 as Uint8_t, Buffer.from(tx.actions[0].authorization[0].actor, "hex")), + ADD_STORAGE_CHECK(VALUE_STORAGE_COMPARE.COMPARE_REGISTER1, + COMMAND_APPEND_DATA_BUFFER_DO_NOT_SHOW(Buffer.from(authorization.actor, "hex"), 8, 8)), + COMMAND_APPEND_DATA_BUFFER_DO_NOT_SHOW(Buffer.from(authorization.permission, "hex"), 8, 8), + ...COMMANDS_COUNTED_SECTION([ + COMMAND_APPEND_DATA_STRING_WITH_LENGTH_SHOW("FIO Domain", Buffer.from(actionData.fio_domain), 1, 62), + COMMAND_APPEND_DATA_STRING_WITH_LENGTH_SHOW("Owner Pubkey", Buffer.from(actionData.owner_fio_public_key)), + COMMAND_APPEND_DATA_FIO_AMOUNT_SHOW("Max fee", uint64_to_buf(actionData.max_fee).reverse()), + ADD_STORAGE_CHECK(VALUE_STORAGE_COMPARE.COMPARE_REGISTER1, + COMMAND_APPEND_DATA_BUFFER_DO_NOT_SHOW(Buffer.from(actionData.actor, "hex"), 8, 8)), + COMMAND_APPEND_DATA_STRING_WITH_LENGTH_DO_NOT_SHOW(Buffer.from(actionData.tpid)), + ]), + ]; +} diff --git a/ledgerjs-fio/src/interactions/transactionTemplates/template_rejectfndreq.ts b/ledgerjs-fio/src/interactions/transactionTemplates/template_rejectfndreq.ts new file mode 100644 index 00000000..73176c84 --- /dev/null +++ b/ledgerjs-fio/src/interactions/transactionTemplates/template_rejectfndreq.ts @@ -0,0 +1,42 @@ +import type {HexString, ParsedTransaction, ParsedRequestFundsData, ValidBIP32Path, ParsedActionAuthorisation, ParsedRecordOtherBlockchainTransactionMetadata, Uint8_t, ParsedRejectFundsRequest} from "../../types/internal" +import { Command, templateAlternative, COMMANDS_COUNTED_SECTION, COMMAND_APPEND_DATA_STRING_SHOW, COMMAND_APPEND_CONST_DATA, + COMMAND_SHOW_MESSAGE, COMMAND_APPEND_DATA_BUFFER_DO_NOT_SHOW, COMMAND_APPEND_DATA_NAME_SHOW, COMMANDS_DH_ENCODE, + COMMAND_APPEND_DATA_FIO_AMOUNT_SHOW, COMMAND_APPEND_DATA_STRING_DO_NOT_SHOW, COMMAND_STORE_VALUE, ADD_STORAGE_CHECK, VALUE_STORAGE_COMPARE, COMMAND_APPEND_DATA_MEMO_HASH, COMMAND_APPEND_DATA_STRING_WITH_LENGTH_SHOW, COMMAND_APPEND_DATA_STRING_WITH_LENGTH_DO_NOT_SHOW } from "./commands" +import { uint64_to_buf } from "../../utils/serialize" +import { parseNameString, validate } from "../../utils/parse" +import { InvalidDataReason } from "../../errors"; + +const CONTRACT_ACCOUNT = parseNameString("fio.reqobt", InvalidDataReason.UNEXPECTED_ERROR); +const CONTRACT_NAME = parseNameString("rejectfndreq", InvalidDataReason.UNEXPECTED_ERROR); + +export function template_rejectfndreq(chainId: HexString, tx: ParsedTransaction, parsedPath: ValidBIP32Path): Array { + // Validate template expectations + validate(tx.actions.length == 1, InvalidDataReason.MULTIPLE_ACTIONS_NOT_SUPPORTED); + validate(tx.actions[0].authorization.length == 1, InvalidDataReason.MULTIPLE_AUTHORIZATION_NOT_SUPPORTED); + + // Template matching + if (tx.actions[0].account !== CONTRACT_ACCOUNT || tx.actions[0].name !== CONTRACT_NAME) { + return []; + } + + const actionData: ParsedRejectFundsRequest = tx.actions[0].data as ParsedRejectFundsRequest; + const authorization: ParsedActionAuthorisation = tx.actions[0].authorization[0]; + + return [ + COMMAND_APPEND_CONST_DATA(tx.actions[0].account+tx.actions[0].name+"01" as HexString), + COMMAND_SHOW_MESSAGE("Action", "Reject funds request"), + COMMAND_STORE_VALUE(1 as Uint8_t, Buffer.from(authorization.actor, "hex")), + ADD_STORAGE_CHECK(VALUE_STORAGE_COMPARE.COMPARE_REGISTER1, + COMMAND_APPEND_DATA_BUFFER_DO_NOT_SHOW(Buffer.from(authorization.actor, "hex"), 8, 8)), + COMMAND_APPEND_DATA_BUFFER_DO_NOT_SHOW(Buffer.from(authorization.permission, "hex"), 8, 8), + ...COMMANDS_COUNTED_SECTION([ + COMMAND_APPEND_DATA_STRING_WITH_LENGTH_SHOW("Request ID", Buffer.from(actionData.fio_request_id)), + COMMAND_APPEND_DATA_FIO_AMOUNT_SHOW("Max fee", uint64_to_buf(actionData.max_fee).reverse()), + ...COMMANDS_COUNTED_SECTION([ + ADD_STORAGE_CHECK(VALUE_STORAGE_COMPARE.COMPARE_REGISTER1_DECODE_NAME, + COMMAND_APPEND_DATA_STRING_DO_NOT_SHOW(Buffer.from(actionData.actor), 0, 14)), + ]), + COMMAND_APPEND_DATA_STRING_WITH_LENGTH_DO_NOT_SHOW(Buffer.from(actionData.tpid)), + ]), + ]; +} diff --git a/ledgerjs-fio/src/interactions/transactionTemplates/template_remaddress.ts b/ledgerjs-fio/src/interactions/transactionTemplates/template_remaddress.ts new file mode 100644 index 00000000..64adbf0b --- /dev/null +++ b/ledgerjs-fio/src/interactions/transactionTemplates/template_remaddress.ts @@ -0,0 +1,166 @@ +import type {HexString, ParsedActionAuthorisation, ParsedMapBlockchainPublicAddress, ParsedTransaction, ParsedTransferFIOTokensData, Uint8_t, ValidBIP32Path} from "../../types/internal" +import { Command, VALUE_STORAGE_COMPARE, COMMAND_APPEND_CONST_DATA, COMMAND_SHOW_MESSAGE, COMMANDS_COUNTED_SECTION, COMMAND_STORE_VALUE, + COMMAND_APPEND_DATA_BUFFER_DO_NOT_SHOW, COMMAND_APPEND_DATA_STRING_SHOW, COMMAND_APPEND_DATA_FIO_AMOUNT_SHOW, + ADD_STORAGE_CHECK, + templateAlternative, + COMMAND_APPEND_DATA_CHAIN_CODE_TOKEN_CODE_PUBLIC_ADDR_SHOW, + COMMAND_APPEND_DATA_STRING_WITH_LENGTH_SHOW, + COMMAND_APPEND_DATA_STRING_WITH_LENGTH_DO_NOT_SHOW} from "./commands" +import { uint64_to_buf } from "../../utils/serialize" +import { parseNameString, validate } from "../../utils/parse" +import { InvalidDataReason } from "../../errors"; + +const CONTRACT_ACCOUNT = parseNameString("fio.address", InvalidDataReason.UNEXPECTED_ERROR); +const CONTRACT_NAME = parseNameString("remaddress", InvalidDataReason.UNEXPECTED_ERROR); + + +function template1(chainId: HexString, tx: ParsedTransaction, parsedPath: ValidBIP32Path): Array { + validate(tx.actions.length == 1, InvalidDataReason.MULTIPLE_ACTIONS_NOT_SUPPORTED); + validate(tx.actions[0].account === CONTRACT_ACCOUNT, InvalidDataReason. ACTION_NOT_SUPPORTED); + validate(tx.actions[0].name === CONTRACT_NAME, InvalidDataReason. ACTION_NOT_SUPPORTED); + + const actionData: ParsedMapBlockchainPublicAddress = tx.actions[0].data as ParsedMapBlockchainPublicAddress; + + //Matching template + if (actionData.public_addresses.length != 1) { + return [] + } + + return [ + COMMAND_APPEND_CONST_DATA("01" as HexString), + COMMAND_APPEND_DATA_CHAIN_CODE_TOKEN_CODE_PUBLIC_ADDR_SHOW("Mapping 1", actionData.public_addresses[0].chain_code, + actionData.public_addresses[0].token_code, actionData.public_addresses[0].public_address), + ] +} + +function template2(chainId: HexString, tx: ParsedTransaction, parsedPath: ValidBIP32Path): Array { + validate(tx.actions.length == 1, InvalidDataReason.MULTIPLE_ACTIONS_NOT_SUPPORTED); + validate(tx.actions[0].account === CONTRACT_ACCOUNT, InvalidDataReason. ACTION_NOT_SUPPORTED); + validate(tx.actions[0].name === CONTRACT_NAME, InvalidDataReason. ACTION_NOT_SUPPORTED); + + const actionData: ParsedMapBlockchainPublicAddress = tx.actions[0].data as ParsedMapBlockchainPublicAddress; + + //Matching template + if (actionData.public_addresses.length != 2) { + return [] + } + + return [ + COMMAND_APPEND_CONST_DATA("02" as HexString), + COMMAND_APPEND_DATA_CHAIN_CODE_TOKEN_CODE_PUBLIC_ADDR_SHOW("Mapping 1", actionData.public_addresses[0].chain_code, + actionData.public_addresses[0].token_code, actionData.public_addresses[0].public_address), + COMMAND_APPEND_DATA_CHAIN_CODE_TOKEN_CODE_PUBLIC_ADDR_SHOW("Mapping 2", actionData.public_addresses[1].chain_code, + actionData.public_addresses[1].token_code, actionData.public_addresses[1].public_address), + ] +} + +function template3(chainId: HexString, tx: ParsedTransaction, parsedPath: ValidBIP32Path): Array { + validate(tx.actions.length == 1, InvalidDataReason.MULTIPLE_ACTIONS_NOT_SUPPORTED); + validate(tx.actions[0].account === CONTRACT_ACCOUNT, InvalidDataReason. ACTION_NOT_SUPPORTED); + validate(tx.actions[0].name === CONTRACT_NAME, InvalidDataReason. ACTION_NOT_SUPPORTED); + + const actionData: ParsedMapBlockchainPublicAddress = tx.actions[0].data as ParsedMapBlockchainPublicAddress; + + //Matching template + if (actionData.public_addresses.length != 3) { + return [] + } + + return [ + COMMAND_APPEND_CONST_DATA("03" as HexString), + COMMAND_APPEND_DATA_CHAIN_CODE_TOKEN_CODE_PUBLIC_ADDR_SHOW("Mapping 1", actionData.public_addresses[0].chain_code, + actionData.public_addresses[0].token_code, actionData.public_addresses[0].public_address), + COMMAND_APPEND_DATA_CHAIN_CODE_TOKEN_CODE_PUBLIC_ADDR_SHOW("Mapping 2", actionData.public_addresses[1].chain_code, + actionData.public_addresses[1].token_code, actionData.public_addresses[1].public_address), + COMMAND_APPEND_DATA_CHAIN_CODE_TOKEN_CODE_PUBLIC_ADDR_SHOW("Mapping 3", actionData.public_addresses[2].chain_code, + actionData.public_addresses[2].token_code, actionData.public_addresses[2].public_address), + ] +} + +function template4(chainId: HexString, tx: ParsedTransaction, parsedPath: ValidBIP32Path): Array { + validate(tx.actions.length == 1, InvalidDataReason.MULTIPLE_ACTIONS_NOT_SUPPORTED); + validate(tx.actions[0].account === CONTRACT_ACCOUNT, InvalidDataReason. ACTION_NOT_SUPPORTED); + validate(tx.actions[0].name === CONTRACT_NAME, InvalidDataReason. ACTION_NOT_SUPPORTED); + + const actionData: ParsedMapBlockchainPublicAddress = tx.actions[0].data as ParsedMapBlockchainPublicAddress; + + //Matching template + if (actionData.public_addresses.length != 4) { + return [] + } + + return [ + COMMAND_APPEND_CONST_DATA("04" as HexString), + COMMAND_APPEND_DATA_CHAIN_CODE_TOKEN_CODE_PUBLIC_ADDR_SHOW("Mapping 1", actionData.public_addresses[0].chain_code, + actionData.public_addresses[0].token_code, actionData.public_addresses[0].public_address), + COMMAND_APPEND_DATA_CHAIN_CODE_TOKEN_CODE_PUBLIC_ADDR_SHOW("Mapping 2", actionData.public_addresses[1].chain_code, + actionData.public_addresses[1].token_code, actionData.public_addresses[1].public_address), + COMMAND_APPEND_DATA_CHAIN_CODE_TOKEN_CODE_PUBLIC_ADDR_SHOW("Mapping 3", actionData.public_addresses[2].chain_code, + actionData.public_addresses[2].token_code, actionData.public_addresses[2].public_address), + COMMAND_APPEND_DATA_CHAIN_CODE_TOKEN_CODE_PUBLIC_ADDR_SHOW("Mapping 4", actionData.public_addresses[3].chain_code, + actionData.public_addresses[3].token_code, actionData.public_addresses[3].public_address), + ] +} + + +function template5(chainId: HexString, tx: ParsedTransaction, parsedPath: ValidBIP32Path): Array { + validate(tx.actions.length == 1, InvalidDataReason.MULTIPLE_ACTIONS_NOT_SUPPORTED); + validate(tx.actions[0].account === CONTRACT_ACCOUNT, InvalidDataReason. ACTION_NOT_SUPPORTED); + validate(tx.actions[0].name === CONTRACT_NAME, InvalidDataReason. ACTION_NOT_SUPPORTED); + + const actionData: ParsedMapBlockchainPublicAddress = tx.actions[0].data as ParsedMapBlockchainPublicAddress; + + //Matching template + if (actionData.public_addresses.length != 5) { + return [] + } + + return [ + COMMAND_APPEND_CONST_DATA("05" as HexString), + COMMAND_APPEND_DATA_CHAIN_CODE_TOKEN_CODE_PUBLIC_ADDR_SHOW("Mapping 1", actionData.public_addresses[0].chain_code, + actionData.public_addresses[0].token_code, actionData.public_addresses[0].public_address), + COMMAND_APPEND_DATA_CHAIN_CODE_TOKEN_CODE_PUBLIC_ADDR_SHOW("Mapping 2", actionData.public_addresses[1].chain_code, + actionData.public_addresses[1].token_code, actionData.public_addresses[1].public_address), + COMMAND_APPEND_DATA_CHAIN_CODE_TOKEN_CODE_PUBLIC_ADDR_SHOW("Mapping 3", actionData.public_addresses[2].chain_code, + actionData.public_addresses[2].token_code, actionData.public_addresses[2].public_address), + COMMAND_APPEND_DATA_CHAIN_CODE_TOKEN_CODE_PUBLIC_ADDR_SHOW("Mapping 4", actionData.public_addresses[3].chain_code, + actionData.public_addresses[3].token_code, actionData.public_addresses[3].public_address), + COMMAND_APPEND_DATA_CHAIN_CODE_TOKEN_CODE_PUBLIC_ADDR_SHOW("Mapping 5", actionData.public_addresses[4].chain_code, + actionData.public_addresses[4].token_code, actionData.public_addresses[4].public_address), + ] +} + +export function template_remaddress(chainId: HexString, tx: ParsedTransaction, parsedPath: ValidBIP32Path): Array { + //Validate template expectations + validate(tx.context_free_actions.length == 0, InvalidDataReason.CONTEXT_FREE_ACTIONS_NOT_SUPPORTED); + validate(tx.actions.length == 1, InvalidDataReason.MULTIPLE_ACTIONS_NOT_SUPPORTED); + validate(tx.actions[0].authorization.length == 1, InvalidDataReason.MULTIPLE_AUTHORIZATION_NOT_SUPPORTED); + + // Template matching + if (tx.actions[0].account !== CONTRACT_ACCOUNT || tx.actions[0].name !== CONTRACT_NAME) { + return []; + } + + const actionData: ParsedMapBlockchainPublicAddress = tx.actions[0].data as ParsedMapBlockchainPublicAddress; + const authorization: ParsedActionAuthorisation = tx.actions[0].authorization[0]; + + const addressesCommands: Array = templateAlternative([template1, template2, template3, template4, template5])(chainId, tx, parsedPath) + validate(addressesCommands.length !== 0, InvalidDataReason.INCORRECT_NUMBER_OF_PUBLIC_ADDRESSES) + + return [ + COMMAND_APPEND_CONST_DATA(tx.actions[0].account+tx.actions[0].name+"01" as HexString), + COMMAND_SHOW_MESSAGE("Action", "Remove public address mappings"), + COMMAND_STORE_VALUE(1 as Uint8_t, Buffer.from(tx.actions[0].authorization[0].actor, "hex")), + ADD_STORAGE_CHECK(VALUE_STORAGE_COMPARE.COMPARE_REGISTER1, + COMMAND_APPEND_DATA_BUFFER_DO_NOT_SHOW(Buffer.from(authorization.actor, "hex"), 8, 8)), + COMMAND_APPEND_DATA_BUFFER_DO_NOT_SHOW(Buffer.from(authorization.permission, "hex"), 8, 8), + ...COMMANDS_COUNTED_SECTION([ + COMMAND_APPEND_DATA_STRING_WITH_LENGTH_SHOW("FIO Handle", Buffer.from(actionData.fio_address), 3, 64), + ...addressesCommands, + COMMAND_APPEND_DATA_FIO_AMOUNT_SHOW("Max fee", uint64_to_buf(actionData.max_fee).reverse()), + ADD_STORAGE_CHECK(VALUE_STORAGE_COMPARE.COMPARE_REGISTER1, + COMMAND_APPEND_DATA_BUFFER_DO_NOT_SHOW(Buffer.from(actionData.actor, "hex"), 8, 8)), + COMMAND_APPEND_DATA_STRING_WITH_LENGTH_DO_NOT_SHOW(Buffer.from(actionData.tpid)), + ]), + ]; +} diff --git a/ledgerjs-fio/src/interactions/transactionTemplates/template_remalladdr.ts b/ledgerjs-fio/src/interactions/transactionTemplates/template_remalladdr.ts new file mode 100644 index 00000000..12e4ca5e --- /dev/null +++ b/ledgerjs-fio/src/interactions/transactionTemplates/template_remalladdr.ts @@ -0,0 +1,44 @@ +import type {HexString, ParsedActionAuthorisation, ParsedRemoveAllMappedAddresses, ParsedTransaction, Uint8_t, ValidBIP32Path} from "../../types/internal" +import { Command, VALUE_STORAGE_COMPARE, COMMAND_APPEND_CONST_DATA, COMMAND_SHOW_MESSAGE, COMMANDS_COUNTED_SECTION, COMMAND_STORE_VALUE, + COMMAND_APPEND_DATA_BUFFER_DO_NOT_SHOW, COMMAND_APPEND_DATA_FIO_AMOUNT_SHOW, + ADD_STORAGE_CHECK, + COMMAND_APPEND_DATA_STRING_WITH_LENGTH_SHOW, + COMMAND_APPEND_DATA_STRING_WITH_LENGTH_DO_NOT_SHOW} from "./commands" +import { uint64_to_buf } from "../../utils/serialize" +import { parseNameString, validate } from "../../utils/parse" +import { InvalidDataReason } from "../../errors"; + +const CONTRACT_ACCOUNT = parseNameString("fio.address", InvalidDataReason.UNEXPECTED_ERROR); +const CONTRACT_NAME = parseNameString("remalladdr", InvalidDataReason.UNEXPECTED_ERROR); + + +export function template_remalladdr(chainId: HexString, tx: ParsedTransaction, parsedPath: ValidBIP32Path): Array { + //Validate template expectations + validate(tx.context_free_actions.length == 0, InvalidDataReason.CONTEXT_FREE_ACTIONS_NOT_SUPPORTED); + validate(tx.actions.length == 1, InvalidDataReason.MULTIPLE_ACTIONS_NOT_SUPPORTED); + validate(tx.actions[0].authorization.length == 1, InvalidDataReason.MULTIPLE_AUTHORIZATION_NOT_SUPPORTED); + + // Template matching + if (tx.actions[0].account !== CONTRACT_ACCOUNT || tx.actions[0].name !== CONTRACT_NAME) { + return []; + } + + const actionData: ParsedRemoveAllMappedAddresses = tx.actions[0].data as ParsedRemoveAllMappedAddresses; + const authorization: ParsedActionAuthorisation = tx.actions[0].authorization[0]; + + return [ + COMMAND_APPEND_CONST_DATA(tx.actions[0].account+tx.actions[0].name+"01" as HexString), + COMMAND_SHOW_MESSAGE("Action", "Remove all public address mappings"), + COMMAND_STORE_VALUE(1 as Uint8_t, Buffer.from(tx.actions[0].authorization[0].actor, "hex")), + ADD_STORAGE_CHECK(VALUE_STORAGE_COMPARE.COMPARE_REGISTER1, + COMMAND_APPEND_DATA_BUFFER_DO_NOT_SHOW(Buffer.from(authorization.actor, "hex"), 8, 8)), + COMMAND_APPEND_DATA_BUFFER_DO_NOT_SHOW(Buffer.from(authorization.permission, "hex"), 8, 8), + ...COMMANDS_COUNTED_SECTION([ + COMMAND_APPEND_DATA_STRING_WITH_LENGTH_SHOW("FIO Handle", Buffer.from(actionData.fio_address), 3, 64), + COMMAND_APPEND_DATA_FIO_AMOUNT_SHOW("Max fee", uint64_to_buf(actionData.max_fee).reverse()), + ADD_STORAGE_CHECK(VALUE_STORAGE_COMPARE.COMPARE_REGISTER1, + COMMAND_APPEND_DATA_BUFFER_DO_NOT_SHOW(Buffer.from(actionData.actor, "hex"), 8, 8)), + COMMAND_APPEND_DATA_STRING_WITH_LENGTH_DO_NOT_SHOW(Buffer.from(actionData.tpid)), + ]), + ]; +} diff --git a/ledgerjs-fio/src/interactions/transactionTemplates/template_remallnfts.ts b/ledgerjs-fio/src/interactions/transactionTemplates/template_remallnfts.ts new file mode 100644 index 00000000..b5a05d31 --- /dev/null +++ b/ledgerjs-fio/src/interactions/transactionTemplates/template_remallnfts.ts @@ -0,0 +1,44 @@ +import type {HexString, ParsedActionAuthorisation, ParsedRemoveAllNFT, ParsedTransaction, ParsedTransferDomain, ParsedTransferFIOTokensData, Uint8_t, ValidBIP32Path} from "../../types/internal" +import { Command, VALUE_STORAGE_COMPARE, COMMAND_APPEND_CONST_DATA, COMMAND_SHOW_MESSAGE, COMMANDS_COUNTED_SECTION, COMMAND_STORE_VALUE, + COMMAND_APPEND_DATA_BUFFER_DO_NOT_SHOW, COMMAND_APPEND_DATA_FIO_AMOUNT_SHOW, + ADD_STORAGE_CHECK, + COMMAND_APPEND_DATA_STRING_WITH_LENGTH_SHOW, + COMMAND_APPEND_DATA_STRING_WITH_LENGTH_DO_NOT_SHOW} from "./commands" +import { uint64_to_buf } from "../../utils/serialize" +import { parseNameString, validate } from "../../utils/parse" +import { InvalidDataReason } from "../../errors"; + +const CONTRACT_ACCOUNT = parseNameString("fio.address", InvalidDataReason.UNEXPECTED_ERROR); +const CONTRACT_NAME = parseNameString("remallnfts", InvalidDataReason.UNEXPECTED_ERROR); + + +export function template_remallnfts(chainId: HexString, tx: ParsedTransaction, parsedPath: ValidBIP32Path): Array { + //Validate template expectations + validate(tx.context_free_actions.length == 0, InvalidDataReason.CONTEXT_FREE_ACTIONS_NOT_SUPPORTED); + validate(tx.actions.length == 1, InvalidDataReason.MULTIPLE_ACTIONS_NOT_SUPPORTED); + validate(tx.actions[0].authorization.length == 1, InvalidDataReason.MULTIPLE_AUTHORIZATION_NOT_SUPPORTED); + + // Template matching + if (tx.actions[0].account !== CONTRACT_ACCOUNT || tx.actions[0].name !== CONTRACT_NAME) { + return []; + } + + const actionData: ParsedRemoveAllNFT = tx.actions[0].data as ParsedRemoveAllNFT; + const authorization: ParsedActionAuthorisation = tx.actions[0].authorization[0]; + + return [ + COMMAND_APPEND_CONST_DATA(tx.actions[0].account+tx.actions[0].name+"01" as HexString), + COMMAND_SHOW_MESSAGE("Action", "Remove all nft mappings"), + COMMAND_STORE_VALUE(1 as Uint8_t, Buffer.from(tx.actions[0].authorization[0].actor, "hex")), + ADD_STORAGE_CHECK(VALUE_STORAGE_COMPARE.COMPARE_REGISTER1, + COMMAND_APPEND_DATA_BUFFER_DO_NOT_SHOW(Buffer.from(authorization.actor, "hex"), 8, 8)), + COMMAND_APPEND_DATA_BUFFER_DO_NOT_SHOW(Buffer.from(authorization.permission, "hex"), 8, 8), + ...COMMANDS_COUNTED_SECTION([ + COMMAND_APPEND_DATA_STRING_WITH_LENGTH_SHOW("FIO Handle", Buffer.from(actionData.fio_address), 3, 64), + COMMAND_APPEND_DATA_FIO_AMOUNT_SHOW("Max fee", uint64_to_buf(actionData.max_fee).reverse()), + ADD_STORAGE_CHECK(VALUE_STORAGE_COMPARE.COMPARE_REGISTER1, + COMMAND_APPEND_DATA_BUFFER_DO_NOT_SHOW(Buffer.from(actionData.actor, "hex"), 8, 8)), + COMMAND_APPEND_DATA_STRING_WITH_LENGTH_DO_NOT_SHOW(Buffer.from(actionData.tpid)), + ]), + ]; +} diff --git a/ledgerjs-fio/src/interactions/transactionTemplates/template_remnft.ts b/ledgerjs-fio/src/interactions/transactionTemplates/template_remnft.ts new file mode 100644 index 00000000..f2868ca6 --- /dev/null +++ b/ledgerjs-fio/src/interactions/transactionTemplates/template_remnft.ts @@ -0,0 +1,124 @@ +import type {HexString, ParsedActionAuthorisation, ParsedMapNFTSignature, ParsedRemoveNFTSignature, ParsedTransaction, Uint8_t, ValidBIP32Path} from "../../types/internal" +import { Command, VALUE_STORAGE_COMPARE, COMMAND_APPEND_CONST_DATA, COMMAND_SHOW_MESSAGE, COMMANDS_COUNTED_SECTION, COMMAND_STORE_VALUE, + COMMAND_APPEND_DATA_BUFFER_DO_NOT_SHOW, COMMAND_APPEND_DATA_FIO_AMOUNT_SHOW, + ADD_STORAGE_CHECK, + templateAlternative, + COMMAND_APPEND_DATA_STRING_WITH_LENGTH_SHOW, + COMMAND_APPEND_DATA_STRING_WITH_LENGTH_DO_NOT_SHOW} from "./commands" +import { uint64_to_buf } from "../../utils/serialize" +import { parseNameString, validate } from "../../utils/parse" +import { InvalidDataReason } from "../../errors"; + +const CONTRACT_ACCOUNT = parseNameString("fio.address", InvalidDataReason.UNEXPECTED_ERROR); +const CONTRACT_NAME = parseNameString("remnft", InvalidDataReason.UNEXPECTED_ERROR); + + +function template1(chainId: HexString, tx: ParsedTransaction, parsedPath: ValidBIP32Path): Array { + validate(tx.actions.length == 1, InvalidDataReason.MULTIPLE_ACTIONS_NOT_SUPPORTED); + validate(tx.actions[0].account === CONTRACT_ACCOUNT, InvalidDataReason. ACTION_NOT_SUPPORTED); + validate(tx.actions[0].name === CONTRACT_NAME, InvalidDataReason. ACTION_NOT_SUPPORTED); + + const actionData: ParsedRemoveNFTSignature = tx.actions[0].data as ParsedRemoveNFTSignature; + + //Matching template + if (actionData.nfts.length != 1) { + return [] + } + + return [ + COMMAND_APPEND_CONST_DATA("01" as HexString), + COMMAND_SHOW_MESSAGE("Mapping 1", ""), + COMMAND_APPEND_DATA_STRING_WITH_LENGTH_SHOW("Chain code", Buffer.from(actionData.nfts[0].chain_code), 1, 10), + COMMAND_APPEND_DATA_STRING_WITH_LENGTH_SHOW("Contract address", Buffer.from(actionData.nfts[0].contract_address), 1, 128), + COMMAND_APPEND_DATA_STRING_WITH_LENGTH_SHOW("NFT Token ID", Buffer.from(actionData.nfts[0].token_id), 0, 128), + ] +} + +function template2(chainId: HexString, tx: ParsedTransaction, parsedPath: ValidBIP32Path): Array { + validate(tx.actions.length == 1, InvalidDataReason.MULTIPLE_ACTIONS_NOT_SUPPORTED); + validate(tx.actions[0].account === CONTRACT_ACCOUNT, InvalidDataReason. ACTION_NOT_SUPPORTED); + validate(tx.actions[0].name === CONTRACT_NAME, InvalidDataReason. ACTION_NOT_SUPPORTED); + + const actionData: ParsedRemoveNFTSignature = tx.actions[0].data as ParsedRemoveNFTSignature; + + //Matching template + if (actionData.nfts.length != 2) { + return [] + } + + return [ + COMMAND_APPEND_CONST_DATA("02" as HexString), + COMMAND_SHOW_MESSAGE("Mapping 1", ""), + COMMAND_APPEND_DATA_STRING_WITH_LENGTH_SHOW("Chain code", Buffer.from(actionData.nfts[0].chain_code), 1, 10), + COMMAND_APPEND_DATA_STRING_WITH_LENGTH_SHOW("Contract address", Buffer.from(actionData.nfts[0].contract_address), 1, 128), + COMMAND_APPEND_DATA_STRING_WITH_LENGTH_SHOW("NFT Token ID", Buffer.from(actionData.nfts[0].token_id), 0, 128), + COMMAND_SHOW_MESSAGE("Mapping 2", ""), + COMMAND_APPEND_DATA_STRING_WITH_LENGTH_SHOW("Chain code", Buffer.from(actionData.nfts[1].chain_code), 1, 10), + COMMAND_APPEND_DATA_STRING_WITH_LENGTH_SHOW("Contract address", Buffer.from(actionData.nfts[1].contract_address), 1, 128), + COMMAND_APPEND_DATA_STRING_WITH_LENGTH_SHOW("NFT Token ID", Buffer.from(actionData.nfts[1].token_id), 0, 128), + ] +} + +function template3(chainId: HexString, tx: ParsedTransaction, parsedPath: ValidBIP32Path): Array { + validate(tx.actions.length == 1, InvalidDataReason.MULTIPLE_ACTIONS_NOT_SUPPORTED); + validate(tx.actions[0].account === CONTRACT_ACCOUNT, InvalidDataReason. ACTION_NOT_SUPPORTED); + validate(tx.actions[0].name === CONTRACT_NAME, InvalidDataReason. ACTION_NOT_SUPPORTED); + + const actionData: ParsedRemoveNFTSignature = tx.actions[0].data as ParsedRemoveNFTSignature; + + //Matching template + if (actionData.nfts.length != 3) { + return [] + } + + return [ + COMMAND_APPEND_CONST_DATA("03" as HexString), + COMMAND_SHOW_MESSAGE("Mapping 1", ""), + COMMAND_APPEND_DATA_STRING_WITH_LENGTH_SHOW("Chain code", Buffer.from(actionData.nfts[0].chain_code), 1, 10), + COMMAND_APPEND_DATA_STRING_WITH_LENGTH_SHOW("Contract address", Buffer.from(actionData.nfts[0].contract_address), 1, 128), + COMMAND_APPEND_DATA_STRING_WITH_LENGTH_SHOW("NFT Token ID", Buffer.from(actionData.nfts[0].token_id), 0, 128), + COMMAND_SHOW_MESSAGE("Mapping 2", ""), + COMMAND_APPEND_DATA_STRING_WITH_LENGTH_SHOW("Chain code", Buffer.from(actionData.nfts[1].chain_code), 1, 10), + COMMAND_APPEND_DATA_STRING_WITH_LENGTH_SHOW("Contract address", Buffer.from(actionData.nfts[1].contract_address), 1, 128), + COMMAND_APPEND_DATA_STRING_WITH_LENGTH_SHOW("NFT Token ID", Buffer.from(actionData.nfts[1].token_id), 0, 128), + COMMAND_SHOW_MESSAGE("Mapping 3", ""), + COMMAND_APPEND_DATA_STRING_WITH_LENGTH_SHOW("Chain code", Buffer.from(actionData.nfts[2].chain_code), 1, 10), + COMMAND_APPEND_DATA_STRING_WITH_LENGTH_SHOW("Contract address", Buffer.from(actionData.nfts[2].contract_address), 1, 128), + COMMAND_APPEND_DATA_STRING_WITH_LENGTH_SHOW("NFT Token ID", Buffer.from(actionData.nfts[2].token_id), 0, 128), + ] +} + +export function template_remnft(chainId: HexString, tx: ParsedTransaction, parsedPath: ValidBIP32Path): Array { + //Validate template expectations + validate(tx.context_free_actions.length == 0, InvalidDataReason.CONTEXT_FREE_ACTIONS_NOT_SUPPORTED); + validate(tx.actions.length == 1, InvalidDataReason.MULTIPLE_ACTIONS_NOT_SUPPORTED); + validate(tx.actions[0].authorization.length == 1, InvalidDataReason.MULTIPLE_AUTHORIZATION_NOT_SUPPORTED); + + // Template matching + if (tx.actions[0].account !== CONTRACT_ACCOUNT || tx.actions[0].name !== CONTRACT_NAME) { + return []; + } + + const actionData: ParsedMapNFTSignature = tx.actions[0].data as ParsedMapNFTSignature; + const authorization: ParsedActionAuthorisation = tx.actions[0].authorization[0]; + + const addressesCommands: Array = templateAlternative([template1, template2, template3])(chainId, tx, parsedPath) + validate(addressesCommands.length !== 0, InvalidDataReason.INCORRECT_NUMBER_OF_PUBLIC_ADDRESSES) + + return [ + COMMAND_APPEND_CONST_DATA(tx.actions[0].account+tx.actions[0].name+"01" as HexString), + COMMAND_SHOW_MESSAGE("Action", "Remove nft mappings"), + COMMAND_STORE_VALUE(1 as Uint8_t, Buffer.from(tx.actions[0].authorization[0].actor, "hex")), + ADD_STORAGE_CHECK(VALUE_STORAGE_COMPARE.COMPARE_REGISTER1, + COMMAND_APPEND_DATA_BUFFER_DO_NOT_SHOW(Buffer.from(authorization.actor, "hex"), 8, 8)), + COMMAND_APPEND_DATA_BUFFER_DO_NOT_SHOW(Buffer.from(authorization.permission, "hex"), 8, 8), + ...COMMANDS_COUNTED_SECTION([ + COMMAND_APPEND_DATA_STRING_WITH_LENGTH_SHOW("FIO Handle", Buffer.from(actionData.fio_address), 3, 64), + ...addressesCommands, + COMMAND_APPEND_DATA_FIO_AMOUNT_SHOW("Max fee", uint64_to_buf(actionData.max_fee).reverse()), + ADD_STORAGE_CHECK(VALUE_STORAGE_COMPARE.COMPARE_REGISTER1, + COMMAND_APPEND_DATA_BUFFER_DO_NOT_SHOW(Buffer.from(actionData.actor, "hex"), 8, 8)), + COMMAND_APPEND_DATA_STRING_WITH_LENGTH_DO_NOT_SHOW(Buffer.from(actionData.tpid)), + ]), + ]; +} diff --git a/ledgerjs-fio/src/interactions/transactionTemplates/template_renewdomain.ts b/ledgerjs-fio/src/interactions/transactionTemplates/template_renewdomain.ts new file mode 100644 index 00000000..21a89b47 --- /dev/null +++ b/ledgerjs-fio/src/interactions/transactionTemplates/template_renewdomain.ts @@ -0,0 +1,44 @@ +import type {HexString, ParsedActionAuthorisation, ParsedRenewDomain, ParsedTransaction, Uint8_t, ValidBIP32Path} from "../../types/internal" +import { Command, VALUE_STORAGE_COMPARE, COMMAND_APPEND_CONST_DATA, COMMAND_SHOW_MESSAGE, COMMANDS_COUNTED_SECTION, COMMAND_STORE_VALUE, + COMMAND_APPEND_DATA_BUFFER_DO_NOT_SHOW, COMMAND_APPEND_DATA_FIO_AMOUNT_SHOW, + ADD_STORAGE_CHECK, + COMMAND_APPEND_DATA_STRING_WITH_LENGTH_SHOW, + COMMAND_APPEND_DATA_STRING_WITH_LENGTH_DO_NOT_SHOW} from "./commands" +import { uint64_to_buf } from "../../utils/serialize" +import { parseNameString, validate } from "../../utils/parse" +import { InvalidDataReason } from "../../errors"; + +const CONTRACT_ACCOUNT = parseNameString("fio.address", InvalidDataReason.UNEXPECTED_ERROR); +const CONTRACT_NAME = parseNameString("renewdomain", InvalidDataReason.UNEXPECTED_ERROR); + + +export function template_renewdomain(chainId: HexString, tx: ParsedTransaction, parsedPath: ValidBIP32Path): Array { + //Validate template expectations + validate(tx.context_free_actions.length == 0, InvalidDataReason.CONTEXT_FREE_ACTIONS_NOT_SUPPORTED); + validate(tx.actions.length == 1, InvalidDataReason.MULTIPLE_ACTIONS_NOT_SUPPORTED); + validate(tx.actions[0].authorization.length == 1, InvalidDataReason.MULTIPLE_AUTHORIZATION_NOT_SUPPORTED); + + // Template matching + if (tx.actions[0].account !== CONTRACT_ACCOUNT || tx.actions[0].name !== CONTRACT_NAME) { + return []; + } + + const actionData: ParsedRenewDomain = tx.actions[0].data as ParsedRenewDomain; + const authorization: ParsedActionAuthorisation = tx.actions[0].authorization[0]; + + return [ + COMMAND_APPEND_CONST_DATA(tx.actions[0].account+tx.actions[0].name+"01" as HexString), + COMMAND_SHOW_MESSAGE("Action", "Renew FIO domain"), + COMMAND_STORE_VALUE(1 as Uint8_t, Buffer.from(tx.actions[0].authorization[0].actor, "hex")), + ADD_STORAGE_CHECK(VALUE_STORAGE_COMPARE.COMPARE_REGISTER1, + COMMAND_APPEND_DATA_BUFFER_DO_NOT_SHOW(Buffer.from(authorization.actor, "hex"), 8, 8)), + COMMAND_APPEND_DATA_BUFFER_DO_NOT_SHOW(Buffer.from(authorization.permission, "hex"), 8, 8), + ...COMMANDS_COUNTED_SECTION([ + COMMAND_APPEND_DATA_STRING_WITH_LENGTH_SHOW("FIO Domain", Buffer.from(actionData.fio_domain), 1, 62), + COMMAND_APPEND_DATA_FIO_AMOUNT_SHOW("Max fee", uint64_to_buf(actionData.max_fee).reverse()), + COMMAND_APPEND_DATA_STRING_WITH_LENGTH_DO_NOT_SHOW(Buffer.from(actionData.tpid)), + ADD_STORAGE_CHECK(VALUE_STORAGE_COMPARE.COMPARE_REGISTER1, + COMMAND_APPEND_DATA_BUFFER_DO_NOT_SHOW(Buffer.from(actionData.actor, "hex"), 8, 8)), + ]), + ]; +} diff --git a/ledgerjs-fio/src/interactions/transactionTemplates/template_setdomainpub.ts b/ledgerjs-fio/src/interactions/transactionTemplates/template_setdomainpub.ts new file mode 100644 index 00000000..2afb217a --- /dev/null +++ b/ledgerjs-fio/src/interactions/transactionTemplates/template_setdomainpub.ts @@ -0,0 +1,79 @@ +import type {HexString, ParsedActionAuthorisation, ParsedMakeDomainPublic, ParsedTransaction, Uint8_t, ValidBIP32Path} from "../../types/internal" +import { Command, VALUE_STORAGE_COMPARE, COMMAND_APPEND_CONST_DATA, COMMAND_SHOW_MESSAGE, COMMANDS_COUNTED_SECTION, COMMAND_STORE_VALUE, + COMMAND_APPEND_DATA_BUFFER_DO_NOT_SHOW, COMMAND_APPEND_DATA_FIO_AMOUNT_SHOW, + ADD_STORAGE_CHECK, + templateAlternative, + COMMAND_APPEND_DATA_STRING_WITH_LENGTH_SHOW, + COMMAND_APPEND_DATA_STRING_WITH_LENGTH_DO_NOT_SHOW} from "./commands" +import { uint64_to_buf } from "../../utils/serialize" +import { parseNameString, validate } from "../../utils/parse" +import { InvalidDataReason } from "../../errors"; + +const CONTRACT_ACCOUNT = parseNameString("fio.address", InvalidDataReason.UNEXPECTED_ERROR); +const CONTRACT_NAME = parseNameString("setdomainpub", InvalidDataReason.UNEXPECTED_ERROR); + +function template_setdomainpub_true(chainId: HexString, tx: ParsedTransaction, parsedPath: ValidBIP32Path): Array { + validate(tx.actions.length == 1, InvalidDataReason.MULTIPLE_ACTIONS_NOT_SUPPORTED); + const actionData: ParsedMakeDomainPublic = tx.actions[0].data as ParsedMakeDomainPublic; + + //match template + if (!actionData.is_public) { + return []; + } + + return [ + COMMAND_APPEND_CONST_DATA("01" as HexString), + COMMAND_SHOW_MESSAGE("Make", "Public"), + ] +} + +function template_setdomainpub_false(chainId: HexString, tx: ParsedTransaction, parsedPath: ValidBIP32Path): Array { + validate(tx.actions.length == 1, InvalidDataReason.MULTIPLE_ACTIONS_NOT_SUPPORTED); + const actionData: ParsedMakeDomainPublic = tx.actions[0].data as ParsedMakeDomainPublic; + + //match template + if (actionData.is_public) { + return []; + } + + return [ + COMMAND_APPEND_CONST_DATA("00" as HexString), + COMMAND_SHOW_MESSAGE("Make", "Private"), + ] +} + + +export function template_setdomainpub(chainId: HexString, tx: ParsedTransaction, parsedPath: ValidBIP32Path): Array { + //Validate template expectations + validate(tx.context_free_actions.length == 0, InvalidDataReason.CONTEXT_FREE_ACTIONS_NOT_SUPPORTED); + validate(tx.actions.length == 1, InvalidDataReason.MULTIPLE_ACTIONS_NOT_SUPPORTED); + validate(tx.actions[0].authorization.length == 1, InvalidDataReason.MULTIPLE_AUTHORIZATION_NOT_SUPPORTED); + + // Template matching + if (tx.actions[0].account !== CONTRACT_ACCOUNT || tx.actions[0].name !== CONTRACT_NAME) { + return []; + } + + const actionData: ParsedMakeDomainPublic = tx.actions[0].data as ParsedMakeDomainPublic; + const authorization: ParsedActionAuthorisation = tx.actions[0].authorization[0]; + + const isPublicCommands: Array = templateAlternative([template_setdomainpub_true, template_setdomainpub_false])(chainId, tx, parsedPath) + validate(isPublicCommands.length !== 0, InvalidDataReason.INVALID_IS_PUBLIC) + + return [ + COMMAND_APPEND_CONST_DATA(tx.actions[0].account+tx.actions[0].name+"01" as HexString), + COMMAND_SHOW_MESSAGE("Action", "Set FIO Domain registration permission"), + COMMAND_STORE_VALUE(1 as Uint8_t, Buffer.from(tx.actions[0].authorization[0].actor, "hex")), + ADD_STORAGE_CHECK(VALUE_STORAGE_COMPARE.COMPARE_REGISTER1, + COMMAND_APPEND_DATA_BUFFER_DO_NOT_SHOW(Buffer.from(authorization.actor, "hex"), 8, 8)), + COMMAND_APPEND_DATA_BUFFER_DO_NOT_SHOW(Buffer.from(authorization.permission, "hex"), 8, 8), + ...COMMANDS_COUNTED_SECTION([ + COMMAND_APPEND_DATA_STRING_WITH_LENGTH_SHOW("FIO Domain", Buffer.from(actionData.fio_domain), 1, 62), + ...isPublicCommands, + COMMAND_APPEND_DATA_FIO_AMOUNT_SHOW("Max fee", uint64_to_buf(actionData.max_fee).reverse()), + ADD_STORAGE_CHECK(VALUE_STORAGE_COMPARE.COMPARE_REGISTER1, + COMMAND_APPEND_DATA_BUFFER_DO_NOT_SHOW(Buffer.from(actionData.actor, "hex"), 8, 8)), + COMMAND_APPEND_DATA_STRING_WITH_LENGTH_DO_NOT_SHOW(Buffer.from(actionData.tpid)), + ]), + ]; +} diff --git a/ledgerjs-fio/src/interactions/transactionTemplates/template_stakefio.ts b/ledgerjs-fio/src/interactions/transactionTemplates/template_stakefio.ts new file mode 100644 index 00000000..370681f7 --- /dev/null +++ b/ledgerjs-fio/src/interactions/transactionTemplates/template_stakefio.ts @@ -0,0 +1,46 @@ +import type {HexString, ParsedActionAuthorisation, ParsedMapBlockchainPublicAddress, ParsedStakeFIO, ParsedTransaction, ParsedTransferFIOTokensData, Uint8_t, ValidBIP32Path} from "../../types/internal" +import { Command, VALUE_STORAGE_COMPARE, COMMAND_APPEND_CONST_DATA, COMMAND_SHOW_MESSAGE, COMMANDS_COUNTED_SECTION, COMMAND_STORE_VALUE, + COMMAND_APPEND_DATA_BUFFER_DO_NOT_SHOW, COMMAND_APPEND_DATA_STRING_SHOW, COMMAND_APPEND_DATA_FIO_AMOUNT_SHOW, + COMMAND_APPEND_DATA_STRING_DO_NOT_SHOW, + ADD_STORAGE_CHECK, + COMMAND_APPEND_DATA_STRING_WITH_LENGTH_SHOW, + COMMAND_APPEND_DATA_STRING_WITH_LENGTH_DO_NOT_SHOW} from "./commands" +import { uint64_to_buf } from "../../utils/serialize" +import { parseNameString, validate } from "../../utils/parse" +import { InvalidDataReason } from "../../errors"; + +const CONTRACT_ACCOUNT = parseNameString("fio.staking", InvalidDataReason.UNEXPECTED_ERROR); +const CONTRACT_NAME = parseNameString("stakefio", InvalidDataReason.UNEXPECTED_ERROR); + + +export function template_stakefio(chainId: HexString, tx: ParsedTransaction, parsedPath: ValidBIP32Path): Array { + //Validate template expectations + validate(tx.context_free_actions.length == 0, InvalidDataReason.CONTEXT_FREE_ACTIONS_NOT_SUPPORTED); + validate(tx.actions.length == 1, InvalidDataReason.MULTIPLE_ACTIONS_NOT_SUPPORTED); + validate(tx.actions[0].authorization.length == 1, InvalidDataReason.MULTIPLE_AUTHORIZATION_NOT_SUPPORTED); + + // Template matching + if (tx.actions[0].account !== CONTRACT_ACCOUNT || tx.actions[0].name !== CONTRACT_NAME) { + return []; + } + + const actionData: ParsedStakeFIO = tx.actions[0].data as ParsedStakeFIO; + const authorization: ParsedActionAuthorisation = tx.actions[0].authorization[0]; + + return [ + COMMAND_APPEND_CONST_DATA(tx.actions[0].account+tx.actions[0].name+"01" as HexString), + COMMAND_SHOW_MESSAGE("Action", "Stake FIO Tokens"), + COMMAND_STORE_VALUE(1 as Uint8_t, Buffer.from(tx.actions[0].authorization[0].actor, "hex")), + ADD_STORAGE_CHECK(VALUE_STORAGE_COMPARE.COMPARE_REGISTER1, + COMMAND_APPEND_DATA_BUFFER_DO_NOT_SHOW(Buffer.from(authorization.actor, "hex"), 8, 8)), + COMMAND_APPEND_DATA_BUFFER_DO_NOT_SHOW(Buffer.from(authorization.permission, "hex"), 8, 8), + ...COMMANDS_COUNTED_SECTION([ + COMMAND_APPEND_DATA_STRING_WITH_LENGTH_SHOW("FIO Handle", Buffer.from(actionData.fio_address), 3, 64), + COMMAND_APPEND_DATA_FIO_AMOUNT_SHOW("Amount", uint64_to_buf(actionData.amount).reverse()), + COMMAND_APPEND_DATA_FIO_AMOUNT_SHOW("Max fee", uint64_to_buf(actionData.max_fee).reverse()), + COMMAND_APPEND_DATA_STRING_WITH_LENGTH_DO_NOT_SHOW(Buffer.from(actionData.tpid)), + ADD_STORAGE_CHECK(VALUE_STORAGE_COMPARE.COMPARE_REGISTER1, + COMMAND_APPEND_DATA_BUFFER_DO_NOT_SHOW(Buffer.from(actionData.actor, "hex"), 8, 8)), + ]), + ]; +} diff --git a/ledgerjs-fio/src/interactions/transactionTemplates/template_trnsfiopubky.ts b/ledgerjs-fio/src/interactions/transactionTemplates/template_trnsfiopubky.ts new file mode 100644 index 00000000..efd565d7 --- /dev/null +++ b/ledgerjs-fio/src/interactions/transactionTemplates/template_trnsfiopubky.ts @@ -0,0 +1,46 @@ +import type {HexString, ParsedActionAuthorisation, ParsedTransaction, ParsedTransferFIOTokensData, Uint8_t, ValidBIP32Path} from "../../types/internal" +import { COMMAND, Command, constDataAppendData, VALUE_FORMAT, VALUE_VALIDATION, VALUE_POLICY, VALUE_STORAGE_COMPARE, defaultCommand, + COMMAND_APPEND_CONST_DATA, COMMAND_SHOW_MESSAGE, COMMANDS_COUNTED_SECTION, COMMAND_STORE_VALUE, + COMMAND_APPEND_DATA_BUFFER_DO_NOT_SHOW, COMMAND_APPEND_DATA_STRING_SHOW, COMMAND_APPEND_DATA_FIO_AMOUNT_SHOW, + COMMAND_APPEND_DATA_STRING_DO_NOT_SHOW, + ADD_STORAGE_CHECK, + COMMAND_APPEND_DATA_STRING_WITH_LENGTH_SHOW, + COMMAND_APPEND_DATA_STRING_WITH_LENGTH_DO_NOT_SHOW} from "./commands" +import { uint64_to_buf } from "../../utils/serialize" +import { parseNameString, validate } from "../../utils/parse" +import { InvalidDataReason } from "../../errors"; + +const CONTRACT_ACCOUNT = parseNameString("fio.token", InvalidDataReason.UNEXPECTED_ERROR); +const CONTRACT_NAME = parseNameString("trnsfiopubky", InvalidDataReason.UNEXPECTED_ERROR); + +export function template_trnsfiopubky(chainId: HexString, tx: ParsedTransaction, parsedPath: ValidBIP32Path): Array { + //Validate template expectations + validate(tx.context_free_actions.length == 0, InvalidDataReason.CONTEXT_FREE_ACTIONS_NOT_SUPPORTED); + validate(tx.actions.length == 1, InvalidDataReason.MULTIPLE_ACTIONS_NOT_SUPPORTED); + validate(tx.actions[0].authorization.length == 1, InvalidDataReason.MULTIPLE_AUTHORIZATION_NOT_SUPPORTED); + + // Template matching + if (tx.actions[0].account !== CONTRACT_ACCOUNT || tx.actions[0].name !== CONTRACT_NAME) { + return []; + } + + const actionData: ParsedTransferFIOTokensData = tx.actions[0].data as ParsedTransferFIOTokensData; + const authorization: ParsedActionAuthorisation = tx.actions[0].authorization[0]; + + return [ + COMMAND_APPEND_CONST_DATA(tx.actions[0].account+tx.actions[0].name+"01" as HexString), + COMMAND_SHOW_MESSAGE("Action", "Transfer FIO tokens"), + COMMAND_STORE_VALUE(1 as Uint8_t, Buffer.from(tx.actions[0].authorization[0].actor, "hex")), + ADD_STORAGE_CHECK(VALUE_STORAGE_COMPARE.COMPARE_REGISTER1, + COMMAND_APPEND_DATA_BUFFER_DO_NOT_SHOW(Buffer.from(authorization.actor, "hex"), 8, 8)), + COMMAND_APPEND_DATA_BUFFER_DO_NOT_SHOW(Buffer.from(authorization.permission, "hex"), 8, 8), + ...COMMANDS_COUNTED_SECTION([ + COMMAND_APPEND_DATA_STRING_WITH_LENGTH_SHOW("Payee Pubkey", Buffer.from(actionData.payee_public_key)), + COMMAND_APPEND_DATA_FIO_AMOUNT_SHOW("Amount", uint64_to_buf(actionData.amount).reverse()), + COMMAND_APPEND_DATA_FIO_AMOUNT_SHOW("Max fee", uint64_to_buf(actionData.max_fee).reverse()), + ADD_STORAGE_CHECK(VALUE_STORAGE_COMPARE.COMPARE_REGISTER1, + COMMAND_APPEND_DATA_BUFFER_DO_NOT_SHOW(Buffer.from(actionData.actor, "hex"), 8, 8)), + COMMAND_APPEND_DATA_STRING_WITH_LENGTH_DO_NOT_SHOW(Buffer.from(actionData.tpid)), + ]), + ]; +} diff --git a/ledgerjs-fio/src/interactions/transactionTemplates/template_unstakefio.ts b/ledgerjs-fio/src/interactions/transactionTemplates/template_unstakefio.ts new file mode 100644 index 00000000..485add24 --- /dev/null +++ b/ledgerjs-fio/src/interactions/transactionTemplates/template_unstakefio.ts @@ -0,0 +1,46 @@ +import type {HexString, ParsedActionAuthorisation, ParsedMapBlockchainPublicAddress, ParsedStakeFIO, ParsedTransaction, ParsedTransferFIOTokensData, Uint8_t, ValidBIP32Path} from "../../types/internal" +import { Command, VALUE_STORAGE_COMPARE, COMMAND_APPEND_CONST_DATA, COMMAND_SHOW_MESSAGE, COMMANDS_COUNTED_SECTION, COMMAND_STORE_VALUE, + COMMAND_APPEND_DATA_BUFFER_DO_NOT_SHOW, COMMAND_APPEND_DATA_STRING_SHOW, COMMAND_APPEND_DATA_FIO_AMOUNT_SHOW, + COMMAND_APPEND_DATA_STRING_DO_NOT_SHOW, + ADD_STORAGE_CHECK, + COMMAND_APPEND_DATA_STRING_WITH_LENGTH_SHOW, + COMMAND_APPEND_DATA_STRING_WITH_LENGTH_DO_NOT_SHOW} from "./commands" +import { uint64_to_buf } from "../../utils/serialize" +import { parseNameString, validate } from "../../utils/parse" +import { InvalidDataReason } from "../../errors"; + +const CONTRACT_ACCOUNT = parseNameString("fio.staking", InvalidDataReason.UNEXPECTED_ERROR); +const CONTRACT_NAME = parseNameString("unstakefio", InvalidDataReason.UNEXPECTED_ERROR); + + +export function template_unstakefio(chainId: HexString, tx: ParsedTransaction, parsedPath: ValidBIP32Path): Array { + //Validate template expectations + validate(tx.context_free_actions.length == 0, InvalidDataReason.CONTEXT_FREE_ACTIONS_NOT_SUPPORTED); + validate(tx.actions.length == 1, InvalidDataReason.MULTIPLE_ACTIONS_NOT_SUPPORTED); + validate(tx.actions[0].authorization.length == 1, InvalidDataReason.MULTIPLE_AUTHORIZATION_NOT_SUPPORTED); + + // Template matching + if (tx.actions[0].account !== CONTRACT_ACCOUNT || tx.actions[0].name !== CONTRACT_NAME) { + return []; + } + + const actionData: ParsedStakeFIO = tx.actions[0].data as ParsedStakeFIO; + const authorization: ParsedActionAuthorisation = tx.actions[0].authorization[0]; + + return [ + COMMAND_APPEND_CONST_DATA(tx.actions[0].account+tx.actions[0].name+"01" as HexString), + COMMAND_SHOW_MESSAGE("Action", "Unstake FIO Tokens"), + COMMAND_STORE_VALUE(1 as Uint8_t, Buffer.from(tx.actions[0].authorization[0].actor, "hex")), + ADD_STORAGE_CHECK(VALUE_STORAGE_COMPARE.COMPARE_REGISTER1, + COMMAND_APPEND_DATA_BUFFER_DO_NOT_SHOW(Buffer.from(authorization.actor, "hex"), 8, 8)), + COMMAND_APPEND_DATA_BUFFER_DO_NOT_SHOW(Buffer.from(authorization.permission, "hex"), 8, 8), + ...COMMANDS_COUNTED_SECTION([ + COMMAND_APPEND_DATA_STRING_WITH_LENGTH_SHOW("FIO Handle", Buffer.from(actionData.fio_address), 3, 64), + COMMAND_APPEND_DATA_FIO_AMOUNT_SHOW("Amount", uint64_to_buf(actionData.amount).reverse()), + COMMAND_APPEND_DATA_FIO_AMOUNT_SHOW("Max fee", uint64_to_buf(actionData.max_fee).reverse()), + COMMAND_APPEND_DATA_STRING_WITH_LENGTH_DO_NOT_SHOW(Buffer.from(actionData.tpid)), + ADD_STORAGE_CHECK(VALUE_STORAGE_COMPARE.COMPARE_REGISTER1, + COMMAND_APPEND_DATA_BUFFER_DO_NOT_SHOW(Buffer.from(actionData.actor, "hex"), 8, 8)), + ]), + ]; +} diff --git a/ledgerjs-fio/src/interactions/transactionTemplates/template_voteproducer.ts b/ledgerjs-fio/src/interactions/transactionTemplates/template_voteproducer.ts new file mode 100644 index 00000000..bb417a51 --- /dev/null +++ b/ledgerjs-fio/src/interactions/transactionTemplates/template_voteproducer.ts @@ -0,0 +1,68 @@ +import type {HexString, ParsedActionAuthorisation, ParsedMapBlockchainPublicAddress, ParsedStakeFIO, ParsedTransaction, ParsedTransferFIOTokensData, ParsedVoteOnBlockProducers, Uint8_t, ValidBIP32Path} from "../../types/internal" +import { Command, VALUE_STORAGE_COMPARE, COMMAND_APPEND_CONST_DATA, COMMAND_SHOW_MESSAGE, COMMANDS_COUNTED_SECTION, COMMAND_STORE_VALUE, + COMMAND_APPEND_DATA_BUFFER_DO_NOT_SHOW, COMMAND_APPEND_DATA_STRING_SHOW, COMMAND_APPEND_DATA_FIO_AMOUNT_SHOW, + COMMAND_APPEND_DATA_STRING_DO_NOT_SHOW, + ADD_STORAGE_CHECK, + templateAlternative, + COMMAND_APPEND_DATA_STRING_WITH_LENGTH_SHOW} from "./commands" +import { uint64_to_buf, uint8_to_buf } from "../../utils/serialize" +import { parseNameString, validate } from "../../utils/parse" +import { InvalidDataReason } from "../../errors"; + +const CONTRACT_ACCOUNT = parseNameString("eosio", InvalidDataReason.UNEXPECTED_ERROR); +const CONTRACT_NAME = parseNameString("voteproducer", InvalidDataReason.UNEXPECTED_ERROR); + +function template_n(n: number) { + return (chainId: HexString, tx: ParsedTransaction, parsedPath: ValidBIP32Path): Array => { + validate(tx.actions.length == 1, InvalidDataReason.MULTIPLE_ACTIONS_NOT_SUPPORTED); + const actionData: ParsedVoteOnBlockProducers = tx.actions[0].data as ParsedVoteOnBlockProducers; + + //Matching template + if (actionData.producers.length != n) { + return [] + } + + return [ + COMMAND_APPEND_CONST_DATA(uint8_to_buf(n as Uint8_t).toString("hex") as HexString), + ... [...Array(n).keys()].map( + k => COMMAND_APPEND_DATA_STRING_WITH_LENGTH_SHOW("Producer " + (k+1), Buffer.from(actionData.producers[k]), 3, 64) + ) + ] + } +} + +export function template_voteproducer(chainId: HexString, tx: ParsedTransaction, parsedPath: ValidBIP32Path): Array { + //Validate template expectations + validate(tx.context_free_actions.length == 0, InvalidDataReason.CONTEXT_FREE_ACTIONS_NOT_SUPPORTED); + validate(tx.actions.length == 1, InvalidDataReason.MULTIPLE_ACTIONS_NOT_SUPPORTED); + validate(tx.actions[0].authorization.length == 1, InvalidDataReason.MULTIPLE_AUTHORIZATION_NOT_SUPPORTED); + + // Template matching + if (tx.actions[0].account !== CONTRACT_ACCOUNT || tx.actions[0].name !== CONTRACT_NAME) { + return []; + } + + const actionData: ParsedVoteOnBlockProducers = tx.actions[0].data as ParsedVoteOnBlockProducers; + const authorization: ParsedActionAuthorisation = tx.actions[0].authorization[0]; + + const producerCommands: Array = templateAlternative( + [...Array(actionData.producers.length).keys()].map(k=>template_n(k+1)) + )(chainId, tx, parsedPath) + validate(producerCommands.length !== 0, InvalidDataReason.INCORRECT_NUMBER_OF_PRODUCERS) + + return [ + COMMAND_APPEND_CONST_DATA(tx.actions[0].account+tx.actions[0].name+"01" as HexString), + COMMAND_SHOW_MESSAGE("Action", "Vote for FIO Block producers"), + COMMAND_STORE_VALUE(1 as Uint8_t, Buffer.from(tx.actions[0].authorization[0].actor, "hex")), + ADD_STORAGE_CHECK(VALUE_STORAGE_COMPARE.COMPARE_REGISTER1, + COMMAND_APPEND_DATA_BUFFER_DO_NOT_SHOW(Buffer.from(authorization.actor, "hex"), 8, 8)), + COMMAND_APPEND_DATA_BUFFER_DO_NOT_SHOW(Buffer.from(authorization.permission, "hex"), 8, 8), + ...COMMANDS_COUNTED_SECTION([ + ...producerCommands, + COMMAND_APPEND_DATA_STRING_WITH_LENGTH_SHOW("FIO Handle", Buffer.from(actionData.fio_address), 3, 64), + ADD_STORAGE_CHECK(VALUE_STORAGE_COMPARE.COMPARE_REGISTER1, + COMMAND_APPEND_DATA_BUFFER_DO_NOT_SHOW(Buffer.from(actionData.actor, "hex"), 8, 8)), + COMMAND_APPEND_DATA_FIO_AMOUNT_SHOW("Max fee", uint64_to_buf(actionData.max_fee).reverse()), + ]), + ]; +} diff --git a/ledgerjs-fio/src/interactions/transactionTemplates/template_voteproxy.ts b/ledgerjs-fio/src/interactions/transactionTemplates/template_voteproxy.ts new file mode 100644 index 00000000..0b1961a5 --- /dev/null +++ b/ledgerjs-fio/src/interactions/transactionTemplates/template_voteproxy.ts @@ -0,0 +1,44 @@ +import type {HexString, ParsedActionAuthorisation, ParsedMapBlockchainPublicAddress, ParsedProxyVotesToRegisteredProxy, ParsedStakeFIO, ParsedTransaction, ParsedTransferFIOTokensData, Uint8_t, ValidBIP32Path} from "../../types/internal" +import { Command, VALUE_STORAGE_COMPARE, COMMAND_APPEND_CONST_DATA, COMMAND_SHOW_MESSAGE, COMMANDS_COUNTED_SECTION, COMMAND_STORE_VALUE, + COMMAND_APPEND_DATA_BUFFER_DO_NOT_SHOW, COMMAND_APPEND_DATA_STRING_SHOW, COMMAND_APPEND_DATA_FIO_AMOUNT_SHOW, + COMMAND_APPEND_DATA_STRING_DO_NOT_SHOW, + ADD_STORAGE_CHECK, + COMMAND_APPEND_DATA_STRING_WITH_LENGTH_SHOW} from "./commands" +import { uint64_to_buf } from "../../utils/serialize" +import { parseNameString, validate } from "../../utils/parse" +import { InvalidDataReason } from "../../errors"; + +const CONTRACT_ACCOUNT = parseNameString("eosio", InvalidDataReason.UNEXPECTED_ERROR); +const CONTRACT_NAME = parseNameString("voteproxy", InvalidDataReason.UNEXPECTED_ERROR); + + +export function template_voteproxy(chainId: HexString, tx: ParsedTransaction, parsedPath: ValidBIP32Path): Array { + //Validate template expectations + validate(tx.context_free_actions.length == 0, InvalidDataReason.CONTEXT_FREE_ACTIONS_NOT_SUPPORTED); + validate(tx.actions.length == 1, InvalidDataReason.MULTIPLE_ACTIONS_NOT_SUPPORTED); + validate(tx.actions[0].authorization.length == 1, InvalidDataReason.MULTIPLE_AUTHORIZATION_NOT_SUPPORTED); + + // Template matching + if (tx.actions[0].account !== CONTRACT_ACCOUNT || tx.actions[0].name !== CONTRACT_NAME) { + return []; + } + + const actionData: ParsedProxyVotesToRegisteredProxy = tx.actions[0].data as ParsedProxyVotesToRegisteredProxy; + const authorization: ParsedActionAuthorisation = tx.actions[0].authorization[0]; + + return [ + COMMAND_APPEND_CONST_DATA(tx.actions[0].account+tx.actions[0].name+"01" as HexString), + COMMAND_SHOW_MESSAGE("Action", "Proxy votes"), + COMMAND_STORE_VALUE(1 as Uint8_t, Buffer.from(tx.actions[0].authorization[0].actor, "hex")), + ADD_STORAGE_CHECK(VALUE_STORAGE_COMPARE.COMPARE_REGISTER1, + COMMAND_APPEND_DATA_BUFFER_DO_NOT_SHOW(Buffer.from(authorization.actor, "hex"), 8, 8)), + COMMAND_APPEND_DATA_BUFFER_DO_NOT_SHOW(Buffer.from(authorization.permission, "hex"), 8, 8), + ...COMMANDS_COUNTED_SECTION([ + COMMAND_APPEND_DATA_STRING_WITH_LENGTH_SHOW("Proxy", Buffer.from(actionData.proxy), 3, 64), + COMMAND_APPEND_DATA_STRING_WITH_LENGTH_SHOW("FIO Handle", Buffer.from(actionData.fio_address), 3, 64), + ADD_STORAGE_CHECK(VALUE_STORAGE_COMPARE.COMPARE_REGISTER1, + COMMAND_APPEND_DATA_BUFFER_DO_NOT_SHOW(Buffer.from(actionData.actor, "hex"), 8, 8)), + COMMAND_APPEND_DATA_FIO_AMOUNT_SHOW("Max fee", uint64_to_buf(actionData.max_fee).reverse()), + ]), + ]; +} diff --git a/ledgerjs-fio/src/interactions/transactionTemplates/template_wrapdomain.ts b/ledgerjs-fio/src/interactions/transactionTemplates/template_wrapdomain.ts new file mode 100644 index 00000000..f43ad1df --- /dev/null +++ b/ledgerjs-fio/src/interactions/transactionTemplates/template_wrapdomain.ts @@ -0,0 +1,47 @@ +import type {HexString, ParsedActionAuthorisation, ParsedTransaction, ParsedTransferDomain, ParsedWrapDomain, Uint8_t, ValidBIP32Path} from "../../types/internal" +import { Command, VALUE_STORAGE_COMPARE, COMMAND_APPEND_CONST_DATA, COMMAND_SHOW_MESSAGE, COMMANDS_COUNTED_SECTION, COMMAND_STORE_VALUE, + COMMAND_APPEND_DATA_BUFFER_DO_NOT_SHOW, COMMAND_APPEND_DATA_FIO_AMOUNT_SHOW, + ADD_STORAGE_CHECK, + COMMAND_APPEND_DATA_STRING_WITH_LENGTH_SHOW, + COMMAND_APPEND_DATA_STRING_WITH_LENGTH_DO_NOT_SHOW} from "./commands" +import { uint64_to_buf } from "../../utils/serialize" +import { parseNameString, validate } from "../../utils/parse" +import { InvalidDataReason } from "../../errors"; + +const CONTRACT_ACCOUNT = parseNameString("fio.oracle", InvalidDataReason.UNEXPECTED_ERROR); +const CONTRACT_NAME = parseNameString("wrapdomain", InvalidDataReason.UNEXPECTED_ERROR); + + +export function template_wrapdomain(chainId: HexString, tx: ParsedTransaction, parsedPath: ValidBIP32Path): Array { + //Validate template expectations + validate(tx.context_free_actions.length == 0, InvalidDataReason.CONTEXT_FREE_ACTIONS_NOT_SUPPORTED); + validate(tx.actions.length == 1, InvalidDataReason.MULTIPLE_ACTIONS_NOT_SUPPORTED); + validate(tx.actions[0].authorization.length == 1, InvalidDataReason.MULTIPLE_AUTHORIZATION_NOT_SUPPORTED); + + // Template matching + if (tx.actions[0].account !== CONTRACT_ACCOUNT || tx.actions[0].name !== CONTRACT_NAME) { + return []; + } + + const actionData: ParsedWrapDomain = tx.actions[0].data as ParsedWrapDomain; + const authorization: ParsedActionAuthorisation = tx.actions[0].authorization[0]; + + return [ + COMMAND_APPEND_CONST_DATA(tx.actions[0].account+tx.actions[0].name+"01" as HexString), + COMMAND_SHOW_MESSAGE("Action", "Wrap FIO Domain"), + COMMAND_STORE_VALUE(1 as Uint8_t, Buffer.from(tx.actions[0].authorization[0].actor, "hex")), + ADD_STORAGE_CHECK(VALUE_STORAGE_COMPARE.COMPARE_REGISTER1, + COMMAND_APPEND_DATA_BUFFER_DO_NOT_SHOW(Buffer.from(authorization.actor, "hex"), 8, 8)), + COMMAND_APPEND_DATA_BUFFER_DO_NOT_SHOW(Buffer.from(authorization.permission, "hex"), 8, 8), + ...COMMANDS_COUNTED_SECTION([ + COMMAND_APPEND_DATA_STRING_WITH_LENGTH_SHOW("FIO Domain", Buffer.from(actionData.fio_domain), 1, 62), + COMMAND_APPEND_DATA_STRING_WITH_LENGTH_SHOW("Chain code", Buffer.from(actionData.chain_code), 1, 10), + COMMAND_APPEND_DATA_STRING_WITH_LENGTH_SHOW("Public Address", Buffer.from(actionData.public_address)), + COMMAND_APPEND_DATA_FIO_AMOUNT_SHOW("Max oracle fee", uint64_to_buf(actionData.max_oracle_fee).reverse()), + COMMAND_APPEND_DATA_FIO_AMOUNT_SHOW("Max fee", uint64_to_buf(actionData.max_fee).reverse()), + COMMAND_APPEND_DATA_STRING_WITH_LENGTH_DO_NOT_SHOW(Buffer.from(actionData.tpid)), + ADD_STORAGE_CHECK(VALUE_STORAGE_COMPARE.COMPARE_REGISTER1, + COMMAND_APPEND_DATA_BUFFER_DO_NOT_SHOW(Buffer.from(actionData.actor, "hex"), 8, 8)), + ]), + ]; +} diff --git a/ledgerjs-fio/src/interactions/transactionTemplates/template_wraptokens.ts b/ledgerjs-fio/src/interactions/transactionTemplates/template_wraptokens.ts new file mode 100644 index 00000000..08b1893d --- /dev/null +++ b/ledgerjs-fio/src/interactions/transactionTemplates/template_wraptokens.ts @@ -0,0 +1,47 @@ +import type {HexString, ParsedActionAuthorisation, ParsedTransaction, ParsedTransferDomain, ParsedWrapTokens, Uint8_t, ValidBIP32Path} from "../../types/internal" +import { Command, VALUE_STORAGE_COMPARE, COMMAND_APPEND_CONST_DATA, COMMAND_SHOW_MESSAGE, COMMANDS_COUNTED_SECTION, COMMAND_STORE_VALUE, + COMMAND_APPEND_DATA_BUFFER_DO_NOT_SHOW, COMMAND_APPEND_DATA_FIO_AMOUNT_SHOW, + ADD_STORAGE_CHECK, + COMMAND_APPEND_DATA_STRING_WITH_LENGTH_SHOW, + COMMAND_APPEND_DATA_STRING_WITH_LENGTH_DO_NOT_SHOW} from "./commands" +import { uint64_to_buf } from "../../utils/serialize" +import { parseNameString, validate } from "../../utils/parse" +import { InvalidDataReason } from "../../errors"; + +const CONTRACT_ACCOUNT = parseNameString("fio.oracle", InvalidDataReason.UNEXPECTED_ERROR); +const CONTRACT_NAME = parseNameString("wraptokens", InvalidDataReason.UNEXPECTED_ERROR); + + +export function template_wraptokens(chainId: HexString, tx: ParsedTransaction, parsedPath: ValidBIP32Path): Array { + //Validate template expectations + validate(tx.context_free_actions.length == 0, InvalidDataReason.CONTEXT_FREE_ACTIONS_NOT_SUPPORTED); + validate(tx.actions.length == 1, InvalidDataReason.MULTIPLE_ACTIONS_NOT_SUPPORTED); + validate(tx.actions[0].authorization.length == 1, InvalidDataReason.MULTIPLE_AUTHORIZATION_NOT_SUPPORTED); + + // Template matching + if (tx.actions[0].account !== CONTRACT_ACCOUNT || tx.actions[0].name !== CONTRACT_NAME) { + return []; + } + + const actionData: ParsedWrapTokens = tx.actions[0].data as ParsedWrapTokens; + const authorization: ParsedActionAuthorisation = tx.actions[0].authorization[0]; + + return [ + COMMAND_APPEND_CONST_DATA(tx.actions[0].account+tx.actions[0].name+"01" as HexString), + COMMAND_SHOW_MESSAGE("Action", "Wrap Tokens"), + COMMAND_STORE_VALUE(1 as Uint8_t, Buffer.from(tx.actions[0].authorization[0].actor, "hex")), + ADD_STORAGE_CHECK(VALUE_STORAGE_COMPARE.COMPARE_REGISTER1, + COMMAND_APPEND_DATA_BUFFER_DO_NOT_SHOW(Buffer.from(authorization.actor, "hex"), 8, 8)), + COMMAND_APPEND_DATA_BUFFER_DO_NOT_SHOW(Buffer.from(authorization.permission, "hex"), 8, 8), + ...COMMANDS_COUNTED_SECTION([ + COMMAND_APPEND_DATA_FIO_AMOUNT_SHOW("Amount", uint64_to_buf(actionData.amount).reverse()), + COMMAND_APPEND_DATA_STRING_WITH_LENGTH_SHOW("Chain code", Buffer.from(actionData.chain_code), 1, 10), + COMMAND_APPEND_DATA_STRING_WITH_LENGTH_SHOW("Public Address", Buffer.from(actionData.public_address)), + COMMAND_APPEND_DATA_FIO_AMOUNT_SHOW("Max oracle fee", uint64_to_buf(actionData.max_oracle_fee).reverse()), + COMMAND_APPEND_DATA_FIO_AMOUNT_SHOW("Max fee", uint64_to_buf(actionData.max_fee).reverse()), + COMMAND_APPEND_DATA_STRING_WITH_LENGTH_DO_NOT_SHOW(Buffer.from(actionData.tpid)), + ADD_STORAGE_CHECK(VALUE_STORAGE_COMPARE.COMPARE_REGISTER1, + COMMAND_APPEND_DATA_BUFFER_DO_NOT_SHOW(Buffer.from(actionData.actor, "hex"), 8, 8)), + ]), + ]; +} diff --git a/ledgerjs-fio/src/interactions/transactionTemplates/template_xferaddress.ts b/ledgerjs-fio/src/interactions/transactionTemplates/template_xferaddress.ts new file mode 100644 index 00000000..1027589e --- /dev/null +++ b/ledgerjs-fio/src/interactions/transactionTemplates/template_xferaddress.ts @@ -0,0 +1,45 @@ +import type {HexString, ParsedActionAuthorisation, ParsedTransaction, ParsedTransferAddress, Uint8_t, ValidBIP32Path} from "../../types/internal" +import { Command, VALUE_STORAGE_COMPARE, COMMAND_APPEND_CONST_DATA, COMMAND_SHOW_MESSAGE, COMMANDS_COUNTED_SECTION, COMMAND_STORE_VALUE, + COMMAND_APPEND_DATA_BUFFER_DO_NOT_SHOW, COMMAND_APPEND_DATA_FIO_AMOUNT_SHOW, + ADD_STORAGE_CHECK, + COMMAND_APPEND_DATA_STRING_WITH_LENGTH_SHOW, + COMMAND_APPEND_DATA_STRING_WITH_LENGTH_DO_NOT_SHOW} from "./commands" +import { uint64_to_buf } from "../../utils/serialize" +import { parseNameString, validate } from "../../utils/parse" +import { InvalidDataReason } from "../../errors"; + +const CONTRACT_ACCOUNT = parseNameString("fio.address", InvalidDataReason.UNEXPECTED_ERROR); +const CONTRACT_NAME = parseNameString("xferaddress", InvalidDataReason.UNEXPECTED_ERROR); + + +export function template_xferaddress(chainId: HexString, tx: ParsedTransaction, parsedPath: ValidBIP32Path): Array { + //Validate template expectations + validate(tx.context_free_actions.length == 0, InvalidDataReason.CONTEXT_FREE_ACTIONS_NOT_SUPPORTED); + validate(tx.actions.length == 1, InvalidDataReason.MULTIPLE_ACTIONS_NOT_SUPPORTED); + validate(tx.actions[0].authorization.length == 1, InvalidDataReason.MULTIPLE_AUTHORIZATION_NOT_SUPPORTED); + + // Template matching + if (tx.actions[0].account !== CONTRACT_ACCOUNT || tx.actions[0].name !== CONTRACT_NAME) { + return []; + } + + const actionData: ParsedTransferAddress = tx.actions[0].data as ParsedTransferAddress; + const authorization: ParsedActionAuthorisation = tx.actions[0].authorization[0]; + + return [ + COMMAND_APPEND_CONST_DATA(tx.actions[0].account+tx.actions[0].name+"01" as HexString), + COMMAND_SHOW_MESSAGE("Action", "Transfer FIO Crypto Handle"), + COMMAND_STORE_VALUE(1 as Uint8_t, Buffer.from(tx.actions[0].authorization[0].actor, "hex")), + ADD_STORAGE_CHECK(VALUE_STORAGE_COMPARE.COMPARE_REGISTER1, + COMMAND_APPEND_DATA_BUFFER_DO_NOT_SHOW(Buffer.from(authorization.actor, "hex"), 8, 8)), + COMMAND_APPEND_DATA_BUFFER_DO_NOT_SHOW(Buffer.from(authorization.permission, "hex"), 8, 8), + ...COMMANDS_COUNTED_SECTION([ + COMMAND_APPEND_DATA_STRING_WITH_LENGTH_SHOW("FIO Handle", Buffer.from(actionData.fio_address), 3, 64), + COMMAND_APPEND_DATA_STRING_WITH_LENGTH_SHOW("Owner Pubkey", Buffer.from(actionData.new_owner_fio_public_key)), + COMMAND_APPEND_DATA_FIO_AMOUNT_SHOW("Max fee", uint64_to_buf(actionData.max_fee).reverse()), + ADD_STORAGE_CHECK(VALUE_STORAGE_COMPARE.COMPARE_REGISTER1, + COMMAND_APPEND_DATA_BUFFER_DO_NOT_SHOW(Buffer.from(actionData.actor, "hex"), 8, 8)), + COMMAND_APPEND_DATA_STRING_WITH_LENGTH_DO_NOT_SHOW(Buffer.from(actionData.tpid)), + ]), + ]; +} diff --git a/ledgerjs-fio/src/interactions/transactionTemplates/template_xferdomain.ts b/ledgerjs-fio/src/interactions/transactionTemplates/template_xferdomain.ts new file mode 100644 index 00000000..92f36245 --- /dev/null +++ b/ledgerjs-fio/src/interactions/transactionTemplates/template_xferdomain.ts @@ -0,0 +1,45 @@ +import type {HexString, ParsedActionAuthorisation, ParsedTransaction, ParsedTransferDomain, Uint8_t, ValidBIP32Path} from "../../types/internal" +import { Command, VALUE_STORAGE_COMPARE, COMMAND_APPEND_CONST_DATA, COMMAND_SHOW_MESSAGE, COMMANDS_COUNTED_SECTION, COMMAND_STORE_VALUE, + COMMAND_APPEND_DATA_BUFFER_DO_NOT_SHOW, COMMAND_APPEND_DATA_FIO_AMOUNT_SHOW, + ADD_STORAGE_CHECK, + COMMAND_APPEND_DATA_STRING_WITH_LENGTH_SHOW, + COMMAND_APPEND_DATA_STRING_WITH_LENGTH_DO_NOT_SHOW} from "./commands" +import { uint64_to_buf } from "../../utils/serialize" +import { parseNameString, validate } from "../../utils/parse" +import { InvalidDataReason } from "../../errors"; + +const CONTRACT_ACCOUNT = parseNameString("fio.address", InvalidDataReason.UNEXPECTED_ERROR); +const CONTRACT_NAME = parseNameString("xferdomain", InvalidDataReason.UNEXPECTED_ERROR); + + +export function template_xferdomain(chainId: HexString, tx: ParsedTransaction, parsedPath: ValidBIP32Path): Array { + //Validate template expectations + validate(tx.context_free_actions.length == 0, InvalidDataReason.CONTEXT_FREE_ACTIONS_NOT_SUPPORTED); + validate(tx.actions.length == 1, InvalidDataReason.MULTIPLE_ACTIONS_NOT_SUPPORTED); + validate(tx.actions[0].authorization.length == 1, InvalidDataReason.MULTIPLE_AUTHORIZATION_NOT_SUPPORTED); + + // Template matching + if (tx.actions[0].account !== CONTRACT_ACCOUNT || tx.actions[0].name !== CONTRACT_NAME) { + return []; + } + + const actionData: ParsedTransferDomain = tx.actions[0].data as ParsedTransferDomain; + const authorization: ParsedActionAuthorisation = tx.actions[0].authorization[0]; + + return [ + COMMAND_APPEND_CONST_DATA(tx.actions[0].account+tx.actions[0].name+"01" as HexString), + COMMAND_SHOW_MESSAGE("Action", "Transfer FIO Domain"), + COMMAND_STORE_VALUE(1 as Uint8_t, Buffer.from(tx.actions[0].authorization[0].actor, "hex")), + ADD_STORAGE_CHECK(VALUE_STORAGE_COMPARE.COMPARE_REGISTER1, + COMMAND_APPEND_DATA_BUFFER_DO_NOT_SHOW(Buffer.from(authorization.actor, "hex"), 8, 8)), + COMMAND_APPEND_DATA_BUFFER_DO_NOT_SHOW(Buffer.from(authorization.permission, "hex"), 8, 8), + ...COMMANDS_COUNTED_SECTION([ + COMMAND_APPEND_DATA_STRING_WITH_LENGTH_SHOW("FIO Domain", Buffer.from(actionData.fio_domain), 1, 62), + COMMAND_APPEND_DATA_STRING_WITH_LENGTH_SHOW("New owner Pubkey", Buffer.from(actionData.new_owner_fio_public_key)), + COMMAND_APPEND_DATA_FIO_AMOUNT_SHOW("Max fee", uint64_to_buf(actionData.max_fee).reverse()), + ADD_STORAGE_CHECK(VALUE_STORAGE_COMPARE.COMPARE_REGISTER1, + COMMAND_APPEND_DATA_BUFFER_DO_NOT_SHOW(Buffer.from(actionData.actor, "hex"), 8, 8)), + COMMAND_APPEND_DATA_STRING_WITH_LENGTH_DO_NOT_SHOW(Buffer.from(actionData.tpid)), + ]), + ]; +} diff --git a/ledgerjs-fio/src/types/internal.ts b/ledgerjs-fio/src/types/internal.ts index 9e8c9685..17bc54f0 100644 --- a/ledgerjs-fio/src/types/internal.ts +++ b/ledgerjs-fio/src/types/internal.ts @@ -3,6 +3,7 @@ export type VarlenAsciiString = string & { __type: 'ascii' } export type FixlenHexString = string & { __type: 'hex', __length: N } export type NameString = FixlenHexString<16> export type HexString = string & { __type: 'hex' } +export type Base64String = string & { __type: 'base64' } export type _Uint64_num = number & { __type: 'uint64_t' } export type _Uint64_bigint = bigint & { __type: 'uint64_t' } @@ -18,10 +19,238 @@ export const PUBLIC_KEY_LENGTH = 65 export const WIF_PUBLIC_KEY_LENGTH = 53 export type ParsedTransferFIOTokensData = { - payee_public_key: string + payee_public_key: VarlenAsciiString amount: Uint64_str max_fee: Uint64_str - tpid: string + tpid: VarlenAsciiString + actor: NameString +} + +export type ParsedRequestFundsData = { + payer_fio_address: VarlenAsciiString + payee_fio_address: VarlenAsciiString + max_fee: Uint64_str + actor: VarlenAsciiString + tpid: VarlenAsciiString + + //we need this to start DH encryption - + other_public_key: HexString + //content + payee_public_address: VarlenAsciiString + amount: VarlenAsciiString + chain_code: VarlenAsciiString + token_code: VarlenAsciiString + memo?: VarlenAsciiString + hash?: VarlenAsciiString + offline_url?: VarlenAsciiString +} + +export type ParsedRecordOtherBlockchainTransactionMetadata = { + fio_request_id: VarlenAsciiString + payer_fio_address: VarlenAsciiString + payee_fio_address: VarlenAsciiString + max_fee: Uint64_str + actor: VarlenAsciiString + tpid: VarlenAsciiString + + //we need this to start DH encryption + other_public_key: HexString + //content + payee_public_address: VarlenAsciiString + payer_public_address: VarlenAsciiString + amount: VarlenAsciiString + chain_code: VarlenAsciiString + token_code: VarlenAsciiString + status: VarlenAsciiString + obt_id: VarlenAsciiString + memo?: VarlenAsciiString + hash?: VarlenAsciiString + offline_url?: VarlenAsciiString +} + +export type ParsedPublicAddress = { + chain_code: VarlenAsciiString + token_code: VarlenAsciiString + public_address: VarlenAsciiString +} + +export type ParsedMapBlockchainPublicAddress = { + fio_address: VarlenAsciiString + public_addresses: Array + max_fee: Uint64_str + actor: NameString + tpid: VarlenAsciiString +} + +export type ParsedRemoveAddress = { + fio_address: VarlenAsciiString + public_addresses: Array + max_fee: Uint64_str + actor: NameString + tpid: VarlenAsciiString +} + +export type ParsedNFT = { + chain_code: VarlenAsciiString + contract_address: VarlenAsciiString + token_id: VarlenAsciiString + url: VarlenAsciiString + hash: VarlenAsciiString + metadata: VarlenAsciiString +} + +export type ParsedMapNFTSignature = { + fio_address: VarlenAsciiString + nfts: Array + max_fee: Uint64_str + actor: NameString + tpid: VarlenAsciiString +} + +export type ParsedSmallNFT = { + chain_code: VarlenAsciiString + contract_address: VarlenAsciiString + token_id: VarlenAsciiString +} + +export type ParsedRemoveNFTSignature = { + fio_address: VarlenAsciiString + nfts: Array + max_fee: Uint64_str + actor: NameString + tpid: VarlenAsciiString +} + +export type ParsedRemoveAllMappedAddresses = { + fio_address: VarlenAsciiString + max_fee: Uint64_str + actor: NameString + tpid: VarlenAsciiString +} + +export type ParsedCancelFundsRequest = { + fio_request_id: VarlenAsciiString + max_fee: Uint64_str + actor: VarlenAsciiString + tpid: VarlenAsciiString +} + +export type ParsedRejectFundsRequest = { + fio_request_id: VarlenAsciiString + max_fee: Uint64_str + actor: VarlenAsciiString + tpid: VarlenAsciiString +} + +export type ParsedBuyBundledTransaction = { + fio_address: VarlenAsciiString + bundle_sets: Uint64_str + max_fee: Uint64_str + actor: NameString + tpid: VarlenAsciiString +} + +export type ParsedRegisterAddress = { + fio_address: VarlenAsciiString + owner_fio_public_key: VarlenAsciiString + max_fee: Uint64_str + actor: NameString + tpid: VarlenAsciiString +} + +export type ParsedTransferAddress = { + fio_address: VarlenAsciiString + new_owner_fio_public_key: VarlenAsciiString + max_fee: Uint64_str + actor: NameString + tpid: VarlenAsciiString +} + +export type ParsedRegisterDomain = { + fio_domain: VarlenAsciiString + owner_fio_public_key: VarlenAsciiString + max_fee: Uint64_str + actor: NameString + tpid: VarlenAsciiString +} + +export type ParsedRenewDomain = { + fio_domain: VarlenAsciiString + max_fee: Uint64_str + actor: NameString + tpid: VarlenAsciiString +} + +export type ParsedMakeDomainPublic = { + fio_domain: VarlenAsciiString + is_public: boolean + max_fee: Uint64_str + actor: NameString + tpid: VarlenAsciiString +} + +export type ParsedTransferDomain = { + fio_domain: VarlenAsciiString + new_owner_fio_public_key: VarlenAsciiString + max_fee: Uint64_str + actor: NameString + tpid: VarlenAsciiString +} + +export type ParsedRemoveAllNFT = { + fio_address: VarlenAsciiString + max_fee: Uint64_str + actor: NameString + tpid: VarlenAsciiString +} + +export type ParsedStakeFIO = { + fio_address: VarlenAsciiString + amount: Uint64_str + max_fee: Uint64_str + actor: NameString + tpid: VarlenAsciiString +} + +export type ParsedUnstakeFIO = { + fio_address: VarlenAsciiString + amount: Uint64_str + max_fee: Uint64_str + actor: NameString + tpid: VarlenAsciiString +} + +export type ParsedVoteOnBlockProducers = { + producers: Array + fio_address: VarlenAsciiString + max_fee: Uint64_str + actor: NameString +} + + export type ParsedProxyVotesToRegisteredProxy = { + proxy: VarlenAsciiString + fio_address: VarlenAsciiString + max_fee: Uint64_str + actor: NameString +} + +export type ParsedWrapDomain = { + fio_domain: VarlenAsciiString + chain_code: VarlenAsciiString + public_address: VarlenAsciiString + max_oracle_fee: Uint64_str + max_fee: Uint64_str + tpid: VarlenAsciiString + actor: NameString +} + +export type ParsedWrapTokens = { + amount: Uint64_str + chain_code: VarlenAsciiString + public_address: VarlenAsciiString + max_oracle_fee: Uint64_str + max_fee: Uint64_str + tpid: VarlenAsciiString actor: NameString } @@ -30,10 +259,37 @@ export type ParsedActionAuthorisation = { permission: NameString } +export type ParsedActionData = + ParsedTransferFIOTokensData | + ParsedRequestFundsData | + ParsedRecordOtherBlockchainTransactionMetadata | + ParsedMapBlockchainPublicAddress | + ParsedRemoveAddress | + ParsedMapNFTSignature | + ParsedRemoveNFTSignature | + ParsedRemoveAllMappedAddresses | + ParsedCancelFundsRequest | + ParsedRejectFundsRequest | + ParsedRegisterAddress | + ParsedTransferAddress | + ParsedBuyBundledTransaction | + ParsedRegisterDomain | + ParsedRenewDomain | + ParsedMakeDomainPublic | + ParsedTransferDomain | + ParsedRemoveAllNFT | + ParsedStakeFIO | + ParsedUnstakeFIO | + ParsedVoteOnBlockProducers | + ParsedProxyVotesToRegisteredProxy | + ParsedWrapDomain | + ParsedWrapTokens + export type ParsedAction = { - contractAccountName: HexString + account: NameString + name: NameString authorization: Array - data: | ParsedTransferFIOTokensData + data: ParsedActionData } export type ParsedTransaction = { @@ -44,3 +300,8 @@ export type ParsedTransaction = { actions: Array transaction_extensions: null } + +export enum ParsedContext { + NEWFUNDSREQ = 1, + RECORDOT = 2, +} diff --git a/ledgerjs-fio/src/types/public.ts b/ledgerjs-fio/src/types/public.ts index 72add041..0a568471 100644 --- a/ledgerjs-fio/src/types/public.ts +++ b/ledgerjs-fio/src/types/public.ts @@ -1,3 +1,5 @@ +import fiojs from "@fioprotocol/fiojs" +import { PublicKeyInput } from "crypto" /** * Type for 64-bit integers. * @@ -116,10 +118,14 @@ export type Witness = { * @see [[Fio.signTransaction]] */ export type SignedTransactionData = { + /** + * If the transaction involves DH encryption, the data is here (base64 encoding), otherwise, this string is empty + */ + dhEncryptedData: string /** * Hash of signed transaction. Callers should check that they serialize tx the same way */ - txHashHex: string + txHashHex: string /** * List of witnesses. Caller should assemble full transaction to be submitted to the network. */ @@ -138,7 +144,339 @@ export type TransferFIOTokensData = { max_fee: bigint_like tpid: string actor: string +} + +/** + * Represents Request Funds newfundsreq data. + * @category Basic types + * @see [[Action]] + */ + export type RequestFundsData = { + payer_fio_address: string + payee_fio_address: string + max_fee: bigint_like + actor: string + tpid: string + + /** + * Other public key - needed for DH encryprion. In uncomressed format as hex string. + */ + other_public_key: string + //content + payee_public_address: string + amount: string + chain_code: string + token_code: string + memo?: string + hash?: string + offline_url?: string +} + +/** + * Represents Record Other Blockchain Transaction Metadata recordobt data. + * @category Basic types + * @see [[Action]] + */ + export type RecordOtherBlockchainTransactionMetadata = { + fio_request_id: string + payer_fio_address: string + payee_fio_address: string + max_fee: bigint_like + actor: string + tpid: string + + /** + * Other public key - needed for DH encryprion. In uncomressed format as hex string. + */ + other_public_key: string + //content + payee_public_address: string + payer_public_address: string + amount: string + chain_code: string + token_code: string + status: string + obt_id: string + memo?: string + hash?: string + offline_url?: string +} + +/** + * Represents Public addresses . + * @category Basic types + * @see [[Action]] + */ + export type PublicAddress = { + chain_code: string + token_code: string + public_address: string + } + +/** + * Represents Map blockchain public address data. + * @category Basic types + * @see [[Action]] + */ + export type MapBlockchainPublicAddress = { + fio_address: string + public_addresses: Array + max_fee: bigint_like + actor: string + tpid: string +} +/** + * Represents Remove mapped address data. + * @category Basic types + * @see [[Action]] + */ + export type RemoveMappedAddress = { + fio_address: string + public_addresses: Array + max_fee: bigint_like + actor: string + tpid: string +} + +/** + * Represents NFT for addnft. + * @category Basic types + * @see [[Action]] + */ + export type NFT = { + chain_code: string + contract_address: string + token_id: string + url: string + hash: string + metadata: string + } + + /** + * Represents NFT for remnft. + * @category Basic types + * @see [[Action]] + */ + export type SmallNFT = { + chain_code: string + contract_address: string + token_id: string + } + + /** + * Represents Map NFT Signature to a FIO Crypto Handle data. + * @category Basic types + * @see [[Action]] + */ + export type MapNFTSignature = { + fio_address: string + nfts: Array + max_fee: bigint_like + actor: string + tpid: string +} + +/** + * Remove NFT Signature from FIO Crypto Handle data. + * @category Basic types + * @see [[Action]] + */ + export type RemoveNFTSignature = { + fio_address: string + nfts: Array + max_fee: bigint_like + actor: string + tpid: string +} + +/** + * Remove all mapped addresses data. + * @category Basic types + * @see [[Action]] + */ + export type RemoveAllMappedAddresses = { + fio_address: string + max_fee: bigint_like + actor: string + tpid: string +} + +/** + * Cancel Funds Request data. + * @category Basic types + * @see [[Action]] + */ + export type CancelFundsRequest = { + fio_request_id: string + max_fee: bigint_like + actor: string + tpid: string +} + +/** + * Reject Funds Request data. + * @category Basic types + * @see [[Action]] + */ + export type RejectFundsRequest = { + fio_request_id: string + max_fee: bigint_like + actor: string + tpid: string +} + +/** + * Buy bundled ransaction data. + * @category Basic types + * @see [[Action]] + */ + export type BuyBundledTransaction = { + fio_address: string + bundle_sets: bigint_like + max_fee: bigint_like + actor: string + tpid: string +} + +/** + * Register address data. + * @category Basic types + * @see [[Action]] + */ + export type RegisterAddress = { + fio_address: string + owner_fio_public_key: string + max_fee: bigint_like + actor: string + tpid: string +} + +/** + * Transfer address data. + * @category Basic types + * @see [[Action]] + */ + export type TransferAddress = { + fio_address: string + new_owner_fio_public_key: string + max_fee: bigint_like + actor: string + tpid: string +} + +/** + * Register domain data. + * @category Basic types + * @see [[Action]] + */ + export type RegisterDomain = { + fio_domain: string + owner_fio_public_key: string + max_fee: bigint_like + actor: string + tpid: string +} + +/** + * Renew domain data. + * @category Basic types + * @see [[Action]] + */ + export type RenewDomain = { + fio_domain: string + max_fee: bigint_like + actor: string + tpid: string +} + +/** + * Make domain public data. + * @category Basic types + * @see [[Action]] + */ + export type MakeDomainPublic = { + fio_domain: string + is_public: bigint_like + max_fee: bigint_like + actor: string + tpid: string +} + + +/** + * Transfer domain data. + * @category Basic types + * @see [[Action]] + */ + export type TransferDomain = { + fio_domain: string + new_owner_fio_public_key: string + max_fee: bigint_like + actor: string + tpid: string +} + +/** + * RemoveAllNFT data. + * @category Basic types + * @see [[Action]] + */ + export type RemoveAllNFT = { + fio_address: string + max_fee: bigint_like + actor: string + tpid: string +} + +/** + * Stake fio data. + * @category Basic types + * @see [[Action]] + */ + export type StakeFIO = { + amount: bigint_like + fio_address: string + max_fee: bigint_like + actor: string + tpid: string +} + +/** + * Unstake fio data. + * @category Basic types + * @see [[Action]] + */ + export type UnstakeFIO = { + amount: bigint_like + fio_address: string + max_fee: bigint_like + actor: string + tpid: string +} + +/** + * Vote on block producers data. + * @category Basic types + * @see [[Action]] + */ + export type VoteOnBlockProducers = { + producers: Array + fio_address: string + max_fee: bigint_like + actor: string +} + +/** + * Proxy votes to registred proxy data. + * @category Basic types + * @see [[Action]] + */ + export type ProxyVotesToRegisteredProxy = { + proxy: string + fio_address: string + max_fee: bigint_like + actor: string } /** @@ -151,6 +489,36 @@ export type ActionAuthorisation = { permission: string } +/** + * Wrap domain + * @category Basic types + * @see [[Action]] + */ +export type WrapDomain = { + fio_domain: string + chain_code: string + public_address: string + max_oracle_fee: bigint_like + max_fee: bigint_like + tpid: string + actor: string +} + +/** + * Wrap tokens + * @category Basic types + * @see [[Action]] + */ +export type WrapTokens = { + amount: bigint_like + chain_code: string + public_address: string + max_oracle_fee: bigint_like + max_fee: bigint_like + tpid: string + actor: string +} + /** * Represents actions in the transaction. @@ -161,7 +529,31 @@ export type Action = { account: string name: string authorization: Array - data: | TransferFIOTokensData + data: + TransferFIOTokensData | + RequestFundsData | + RecordOtherBlockchainTransactionMetadata | + MapBlockchainPublicAddress | + RemoveMappedAddress | + MapNFTSignature | + RemoveNFTSignature | + RemoveAllMappedAddresses | + CancelFundsRequest | + RejectFundsRequest | + BuyBundledTransaction | + RegisterAddress | + TransferAddress | + RegisterDomain | + RenewDomain | + MakeDomainPublic | + TransferDomain | + RemoveAllNFT | + StakeFIO | + UnstakeFIO | + VoteOnBlockProducers | + ProxyVotesToRegisteredProxy | + WrapDomain | + WrapTokens } diff --git a/ledgerjs-fio/src/utils/parse.ts b/ledgerjs-fio/src/utils/parse.ts index 993b1fe3..40855a9f 100644 --- a/ledgerjs-fio/src/utils/parse.ts +++ b/ledgerjs-fio/src/utils/parse.ts @@ -1,21 +1,16 @@ -import {InvalidData, InvalidDataReason} from "../errors" -import type { - _Uint64_bigint, - _Uint64_num, - FixlenHexString, - HexString, - NameString, - ParsedActionAuthorisation, - ParsedTransaction, - Uint8_t, - Uint16_t, - Uint32_t, - Uint64_str, - ValidBIP32Path, - VarlenAsciiString, -} from "../types/internal" -import type {ParsedAction, ParsedTransferFIOTokensData} from "../types/internal" -import type {ActionAuthorisation, bigint_like, Transaction} from "../types/public" +import { InvalidData, InvalidDataReason } from "../errors" +import {_Uint64_bigint, _Uint64_num, FixlenHexString, HexString, NameString, ParsedActionAuthorisation, ParsedTransaction, + Uint8_t, Uint16_t, Uint32_t, Uint64_str, ValidBIP32Path, VarlenAsciiString, ParsedAction, ParsedActionData, Base64String, ParsedContext } from "../types/internal" +import type {ActionAuthorisation, bigint_like, Transaction, TransferFIOTokensData, RequestFundsData, RecordOtherBlockchainTransactionMetadata, + MapBlockchainPublicAddress, RemoveMappedAddress, MapNFTSignature, RemoveNFTSignature, RemoveAllMappedAddresses, CancelFundsRequest, + RejectFundsRequest, BuyBundledTransaction, RegisterAddress, TransferAddress, RegisterDomain, RenewDomain, MakeDomainPublic, + TransferDomain, RemoveAllNFT, StakeFIO, UnstakeFIO, VoteOnBlockProducers, ProxyVotesToRegisteredProxy, WrapDomain, WrapTokens} from "../types/public" +import { parseActionDataRecordOtherBlockchainTransactionMetadata, parseActionDataRequestFunds, parseActionDataTransferFIOToken, + parseBuyBundledTransaction, parseCancelRequestFunds, ParsedWrapDomain, ParsedWrapTokens, parseMakeDomainPublic, parseMapBlockchainPublicAddress, parseMapNFTSignature, + parseProxyVotesToRegisteredProxy, + parseRegisterAddress, parseRegisterDomain, parseRejectRequestFunds, parseRemoveAllMappedAddresses, parseRemoveAllNFT, + parseRemoveMappedAddress, parseRemoveNFTSignature, parseRenewDomain, parseStakeFIO, parseTransferAddress, + parseTransferDomain, parseUnstakeFIO, parseVoteOnBlockProducers } from "./parseTxActions" export const MAX_UINT_64_STR = "18446744073709551615" @@ -53,6 +48,9 @@ export const isHexString = (data: unknown): data is HexString => export const isHexStringOfLength = (data: unknown, expectedByteLength: L): data is FixlenHexString => isHexString(data) && data.length === expectedByteLength * 2 +export const isBase64String = (data: unknown): data is Base64String => + isString(data) && /^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/.test(data) + export const isValidPath = (data: unknown): data is ValidBIP32Path => isArray(data) && data.every(x => isUint32(x)) && data.length <= 5 @@ -99,8 +97,9 @@ export function validate(cond: boolean, errMsg: InvalidDataReason): asserts cond } -export function parseAscii(str: unknown, errMsg: InvalidDataReason): VarlenAsciiString { +export function parseAscii(str: unknown, errMsg: InvalidDataReason, minLen: number=0, maxLen: number=Number.MAX_SAFE_INTEGER): VarlenAsciiString { validate(isString(str), errMsg) + validate(minLen <= str.length && str.length <= maxLen, errMsg) validate( str.split("").every((c) => c.charCodeAt(0) >= 32 && c.charCodeAt(0) <= 126), errMsg, @@ -109,8 +108,9 @@ export function parseAscii(str: unknown, errMsg: InvalidDataReason): VarlenAscii } -export function parseHexString(str: unknown, errMsg: InvalidDataReason): HexString { +export function parseHexString(str: unknown, errMsg: InvalidDataReason, minLen: number=0, maxLen: number=Number.MAX_SAFE_INTEGER): HexString { validate(isHexString(str), errMsg) + validate(minLen <= str.length*2 && str.length <= maxLen*2, errMsg) return str } @@ -150,6 +150,16 @@ export function parseUint8_t(value: number, errMsg: InvalidDataReason): Uint8_t return value } +export function parseBoolean(value: unknown, errMsg: InvalidDataReason): boolean { + if (value == 0) { + return false; + } + if (value == 1) { + return true; + } + validate(false, errMsg) +} + export function parseBIP32Path(value: unknown, errMsg: InvalidDataReason): ValidBIP32Path { validate(isValidPath(value), errMsg) return value @@ -167,13 +177,6 @@ export function parseIntFromStr(str: string, errMsg: InvalidDataReason): number return i } -export function parseContractAccountName(account: string, name: string, errMsg: InvalidDataReason): HexString { - if (account == "fio.token" && name == "trnsfiopubky") { - return "0000980ad20ca85be0e1d195ba85e7cd" as HexString - } - validate(false, errMsg) -} - export function parseNameString(name: string, errMsg: InvalidDataReason): NameString { validate(isNameString(name), errMsg) @@ -215,46 +218,101 @@ export function parseAuthorization(authorization: ActionAuthorisation, errMsg: I export function parseTransaction(chainId: string, tx: Transaction): ParsedTransaction { // validate tx (Transaction) validate(isString(tx.expiration), InvalidDataReason.INVALID_EXPIRATION) - validate(isBigIntLike(tx.ref_block_num), InvalidDataReason.INVALID_REF_BLOCK_NUM) - validate(isBigIntLike(tx.ref_block_prefix), InvalidDataReason.INVALID_REF_BLOCK_PREFIX) validate(tx.context_free_actions.length == 0, InvalidDataReason.CONTEXT_FREE_ACTIONS_NOT_SUPPORTED) - validate(tx.actions.length == 1, InvalidDataReason.MULTIPLE_ACTIONS_NOT_SUPPORTED) - const action = tx.actions[0] + const action = tx.actions[0] // validate action validate(isString(action.account), InvalidDataReason.INVALID_ACCOUNT) validate(isString(action.name), InvalidDataReason.INVALID_NAME) - validate(action.authorization.length == 1, InvalidDataReason.MULTIPLE_AUTHORIZATION_NOT_SUPPORTED) const authorization = action.authorization[0] - // validate authorization - validate(isString(authorization.actor), InvalidDataReason.INVALID_ACTOR) - validate(isString(authorization.permission), InvalidDataReason.INVALID_PERMISSION) + let parsedActionData: ParsedActionData | null = null - // validate action.data (TransferFIOTokenData) - validate(isString(action.data.payee_public_key), InvalidDataReason.INVALID_PAYEE_PUBKEY) - validate(action.data.payee_public_key.length <= 64, InvalidDataReason.INVALID_PAYEE_PUBKEY) - validate(isBigIntLike(action.data.amount), InvalidDataReason.INVALID_AMOUNT) - validate(isBigIntLike(action.data.max_fee), InvalidDataReason.INVALID_MAX_FEE) - validate(isString(action.data.tpid), InvalidDataReason.INVALID_TPID) - validate(action.data.tpid.length <= 20, InvalidDataReason.INVALID_TPID) - validate(isString(action.data.actor), InvalidDataReason.INVALID_ACTOR) + if (action.account == "fio.token" && action.name == "trnsfiopubky") { + parsedActionData = parseActionDataTransferFIOToken(action.data as TransferFIOTokensData) + } + else if (action.account === "fio.reqobt" && action.name === "newfundsreq") { + parsedActionData = parseActionDataRequestFunds(action.data as RequestFundsData) + } + else if (action.account === "fio.reqobt" && action.name === "recordobt") { + parsedActionData = parseActionDataRecordOtherBlockchainTransactionMetadata(action.data as RecordOtherBlockchainTransactionMetadata) + } + else if (action.account === "fio.address" && action.name === "addaddress") { + parsedActionData = parseMapBlockchainPublicAddress(action.data as MapBlockchainPublicAddress) + } + else if (action.account === "fio.address" && action.name === "remaddress") { + parsedActionData = parseRemoveMappedAddress(action.data as RemoveMappedAddress) + } + else if (action.account === "fio.address" && action.name === "addnft") { + parsedActionData = parseMapNFTSignature(action.data as MapNFTSignature) + } + else if (action.account === "fio.address" && action.name === "remnft") { + parsedActionData = parseRemoveNFTSignature(action.data as RemoveNFTSignature) + } + else if (action.account === "fio.address" && action.name === "remalladdr") { + parsedActionData = parseRemoveAllMappedAddresses(action.data as RemoveAllMappedAddresses) + } + else if (action.account === "fio.reqobt" && action.name === "cancelfndreq") { + parsedActionData = parseCancelRequestFunds(action.data as CancelFundsRequest) + } + else if (action.account === "fio.reqobt" && action.name === "rejectfndreq") { + parsedActionData = parseRejectRequestFunds(action.data as RejectFundsRequest) + } + else if (action.account === "fio.address" && action.name === "addbundles") { + parsedActionData = parseBuyBundledTransaction(action.data as BuyBundledTransaction) + } + else if (action.account === "fio.address" && action.name === "regaddress") { + parsedActionData = parseRegisterAddress(action.data as RegisterAddress) + } + else if (action.account === "fio.address" && action.name === "xferaddress") { + parsedActionData = parseTransferAddress(action.data as TransferAddress) + } + else if (action.account === "fio.address" && action.name === "regdomain") { + parsedActionData = parseRegisterDomain(action.data as RegisterDomain) + } + else if (action.account === "fio.address" && action.name === "renewdomain") { + parsedActionData = parseRenewDomain(action.data as RenewDomain) + } + else if (action.account === "fio.address" && action.name === "setdomainpub") { + parsedActionData = parseMakeDomainPublic(action.data as MakeDomainPublic) + } + else if (action.account === "fio.address" && action.name === "xferdomain") { + parsedActionData = parseTransferDomain(action.data as TransferDomain) + } + else if (action.account === "fio.address" && action.name === "remallnfts") { + parsedActionData = parseRemoveAllNFT(action.data as RemoveAllNFT) + } + else if (action.account === "fio.staking" && action.name === "stakefio") { + parsedActionData = parseStakeFIO(action.data as StakeFIO) + } + else if (action.account === "fio.staking" && action.name === "unstakefio") { + parsedActionData = parseUnstakeFIO(action.data as UnstakeFIO) + } + else if (action.account === "eosio" && action.name === "voteproducer") { + parsedActionData = parseVoteOnBlockProducers(action.data as VoteOnBlockProducers) + } + else if (action.account === "eosio" && action.name === "voteproxy") { + parsedActionData = parseProxyVotesToRegisteredProxy(action.data as ProxyVotesToRegisteredProxy) + } + else if (action.account === "fio.oracle" && action.name === "wrapdomain") { + parsedActionData = ParsedWrapDomain(action.data as WrapDomain) + } + else if (action.account === "fio.oracle" && action.name === "wraptokens") { + parsedActionData = ParsedWrapTokens(action.data as WrapTokens) + } - const parsedActionData: ParsedTransferFIOTokensData = { - payee_public_key: action.data.payee_public_key, - amount: parseUint64_str(action.data.amount, {}, InvalidDataReason.INVALID_AMOUNT), - max_fee: parseUint64_str(action.data.max_fee, {}, InvalidDataReason.INVALID_MAX_FEE), - actor: parseNameString(action.data.actor, InvalidDataReason.INVALID_ACTOR), - tpid: action.data.tpid, + //manual validate so that automatic tools are OK wit conversion that follows + if(parsedActionData == null) { + throw new InvalidData(InvalidDataReason.ACTION_NOT_SUPPORTED) } const parsedAction: ParsedAction = { - contractAccountName: parseContractAccountName(action.account, action.name, - InvalidDataReason.ACTION_NOT_SUPPORTED), + account: parseNameString(action.account, InvalidDataReason.INVALID_ACCOUNT), + name: parseNameString(action.name, InvalidDataReason.INVALID_NAME), authorization: [parseAuthorization(authorization, InvalidDataReason.INVALID_ACTION_AUTHORIZATION)], - data: parsedActionData, + data: parsedActionData as ParsedActionData, } return { @@ -264,5 +322,24 @@ export function parseTransaction(chainId: string, tx: Transaction): ParsedTransa context_free_actions: [], actions: [parsedAction], transaction_extensions: null, + } + + throw new InvalidData(InvalidDataReason.ACTION_NOT_SUPPORTED) +} + +export function parseMessage(message: string, reason: InvalidDataReason): HexString { + validate(isBase64String(message), reason); + validate(message.length <= 432, reason); //max message length + return Buffer.from(message, "base64").toString("hex") as HexString; +} + +export function parseContext(context: string, reason: InvalidDataReason): ParsedContext { + if (context === "newfundsreq") { + return ParsedContext.NEWFUNDSREQ } + if (context === "recordobt") { + return ParsedContext.RECORDOT + } + + validate(false, reason) } diff --git a/ledgerjs-fio/src/utils/parseTxActions.ts b/ledgerjs-fio/src/utils/parseTxActions.ts new file mode 100644 index 00000000..a42bd935 --- /dev/null +++ b/ledgerjs-fio/src/utils/parseTxActions.ts @@ -0,0 +1,347 @@ +import { TransferFIOTokensData, RequestFundsData, RecordOtherBlockchainTransactionMetadata, MapBlockchainPublicAddress, + PublicAddress, RemoveMappedAddress, NFT, MapNFTSignature, RemoveNFTSignature, SmallNFT, RemoveAllMappedAddresses, + CancelFundsRequest, RejectFundsRequest, BuyBundledTransaction, RegisterAddress, TransferAddress, RegisterDomain, + RenewDomain, MakeDomainPublic, TransferDomain, RemoveAllNFT, StakeFIO, UnstakeFIO, VoteOnBlockProducers, + ProxyVotesToRegisteredProxy, WrapDomain, WrapTokens } from "fio"; +import { InvalidDataReason } from "../errors" +import { + _Uint64_bigint, + ParsedTransferFIOTokensData, + ParsedRequestFundsData, + ParsedRecordOtherBlockchainTransactionMetadata, + PUBLIC_KEY_LENGTH, + ParsedMapBlockchainPublicAddress, + ParsedPublicAddress, + ParsedRemoveAddress as ParsedRemoveMappedAddress, + ParsedNFT, + ParsedMapNFTSignature, + ParsedRemoveNFTSignature, + ParsedSmallNFT, + ParsedRemoveAllMappedAddresses, + ParsedCancelFundsRequest, + ParsedRejectFundsRequest, + ParsedBuyBundledTransaction, + ParsedRegisterAddress, + ParsedTransferAddress, + ParsedRegisterDomain, + ParsedRenewDomain, + ParsedMakeDomainPublic, + ParsedTransferDomain, + ParsedRemoveAllNFT, + ParsedStakeFIO, + ParsedUnstakeFIO, + ParsedVoteOnBlockProducers, + VarlenAsciiString, + ParsedProxyVotesToRegisteredProxy, + ParsedWrapDomain, + ParsedWrapTokens, +} from "../types/internal" +import { parseAscii, parseBoolean, parseHexString, parseNameString, parseUint64_str, validate } from "./parse"; + + +export function parseActionDataTransferFIOToken(data: TransferFIOTokensData): ParsedTransferFIOTokensData { + return { + payee_public_key: parseAscii(data.payee_public_key, InvalidDataReason.INVALID_PAYEE_PUBKEY, 0, 64), + amount: parseUint64_str(data.amount, {}, InvalidDataReason.INVALID_AMOUNT), + max_fee: parseUint64_str(data.max_fee, {}, InvalidDataReason.INVALID_MAX_FEE), + actor: parseNameString(data.actor, InvalidDataReason.INVALID_ACTOR), + tpid: parseAscii(data.tpid, InvalidDataReason.INVALID_TPID, 0, 20), + } +} + + +export function parseActionDataRequestFunds(data: RequestFundsData): ParsedRequestFundsData { + return { + payer_fio_address: parseAscii(data.payer_fio_address, InvalidDataReason.INVALID_PAYER_FIO_ADDRESS, 3, 64), + payee_fio_address: parseAscii(data.payee_fio_address, InvalidDataReason.INVALID_PAYEE_FIO_ADDRESS, 3, 64), + max_fee: parseUint64_str(data.max_fee, {}, InvalidDataReason.INVALID_MAX_FEE), + actor: parseAscii(data.actor, InvalidDataReason.INVALID_ACTOR), + tpid: parseAscii(data.tpid, InvalidDataReason.INVALID_TPID, 0, 20), + + other_public_key: parseHexString(data.other_public_key, InvalidDataReason.INVALID_PUBLIC_KEY, PUBLIC_KEY_LENGTH, PUBLIC_KEY_LENGTH), + payee_public_address: parseAscii(data.payee_public_address, InvalidDataReason.INVALID_PAYEE_FIO_ADDRESS), + amount: parseAscii(data.amount, InvalidDataReason.INVALID_AMOUNT), + chain_code: parseAscii(data.chain_code, InvalidDataReason.INVALID_CHAIN_CODE, 1, 10), + token_code: parseAscii(data.token_code, InvalidDataReason.INVALID_TOKEN_CODE, 1, 10), + ...data.memo ? {memo: parseAscii(data.memo, InvalidDataReason.INVALID_MEMO)}:{}, + ...data.hash ? {hash: parseAscii(data.hash, InvalidDataReason.INVALID_HASH)}:{}, + ...data.offline_url ? {offline_url: parseAscii(data.offline_url, InvalidDataReason.INVALID_OFFLINE_URL)}:{}, + } +} + +export function parseActionDataRecordOtherBlockchainTransactionMetadata(data: RecordOtherBlockchainTransactionMetadata): ParsedRecordOtherBlockchainTransactionMetadata { + return { + fio_request_id: parseAscii(data.fio_request_id, InvalidDataReason.INVALID_FIO_REQUEST_ID), + payer_fio_address: parseAscii(data.payer_fio_address, InvalidDataReason.INVALID_PAYER_FIO_ADDRESS, 3, 64), + payee_fio_address: parseAscii(data.payee_fio_address, InvalidDataReason.INVALID_PAYEE_FIO_ADDRESS, 3, 64), + max_fee: parseUint64_str(data.max_fee, {}, InvalidDataReason.INVALID_MAX_FEE), + actor: parseAscii(data.actor, InvalidDataReason.INVALID_ACTOR), + tpid: parseAscii(data.tpid, InvalidDataReason.INVALID_TPID, 0, 20), + + other_public_key: parseHexString(data.other_public_key, InvalidDataReason.INVALID_PUBLIC_KEY, PUBLIC_KEY_LENGTH, PUBLIC_KEY_LENGTH), + payer_public_address: parseAscii(data.payer_public_address, InvalidDataReason.INVALID_PAYER_PUBLIC_ADDRESS), + payee_public_address: parseAscii(data.payee_public_address, InvalidDataReason.INVALID_PAYEE_PUBLIC_ADDRESS), + amount: parseAscii(data.amount, InvalidDataReason.INVALID_AMOUNT), + chain_code: parseAscii(data.chain_code, InvalidDataReason.INVALID_CHAIN_CODE, 1, 10), + token_code: parseAscii(data.token_code, InvalidDataReason.INVALID_TOKEN_CODE, 1, 10), + status: parseAscii(data.status, InvalidDataReason.INVALID_STATUS), + obt_id: parseAscii(data.obt_id, InvalidDataReason.INVALID_OBT_ID), + ...data.memo ? {memo: parseAscii(data.memo, InvalidDataReason.INVALID_MEMO)}:{}, + ...data.hash ? {hash: parseAscii(data.hash, InvalidDataReason.INVALID_HASH)}:{}, + ...data.offline_url ? {offline_url: parseAscii(data.offline_url, InvalidDataReason.INVALID_OFFLINE_URL)}:{}, + } +} + +function parsePublicAddress(a: PublicAddress): ParsedPublicAddress { + return { + chain_code: parseAscii(a.chain_code, InvalidDataReason.INVALID_CHAIN_CODE, 1, 10), + token_code: parseAscii(a.token_code, InvalidDataReason.INVALID_TOKEN_CODE, 1, 10), + public_address: parseAscii(a.public_address, InvalidDataReason.INVALID_PUBLIC_ADDRESS, 1, 64), + } +} + +function parsePublicAddsesses(a: Array): Array { + validate(1 <= a.length && a.length <= 5, InvalidDataReason.INCORRECT_NUMBER_OF_PUBLIC_ADDRESSES) + return a.map( e => parsePublicAddress(e)) +} + +export function parseMapBlockchainPublicAddress(data: MapBlockchainPublicAddress): ParsedMapBlockchainPublicAddress { + return { + fio_address: parseAscii(data.fio_address, InvalidDataReason.INVALID_FIO_ADDRESS, 3, 64), + public_addresses: parsePublicAddsesses(data.public_addresses), + max_fee: parseUint64_str(data.max_fee, {}, InvalidDataReason.INVALID_MAX_FEE), + actor: parseNameString(data.actor, InvalidDataReason.INVALID_ACTOR), + tpid: parseAscii(data.tpid, InvalidDataReason.INVALID_TPID, 0, 20), + } +} + +export function parseRemoveMappedAddress(data: RemoveMappedAddress): ParsedRemoveMappedAddress { + return { + fio_address: parseAscii(data.fio_address, InvalidDataReason.INVALID_FIO_ADDRESS, 3, 64), + public_addresses: parsePublicAddsesses(data.public_addresses), + max_fee: parseUint64_str(data.max_fee, {}, InvalidDataReason.INVALID_MAX_FEE), + actor: parseNameString(data.actor, InvalidDataReason.INVALID_ACTOR), + tpid: parseAscii(data.tpid, InvalidDataReason.INVALID_TPID, 0, 20), + } +} + +function parseNFT(a: NFT): ParsedNFT { + return { + chain_code: parseAscii(a.chain_code, InvalidDataReason.INVALID_CHAIN_CODE, 1, 10), + contract_address: parseAscii(a.contract_address, InvalidDataReason.INVALID_TOKEN_CODE, 1, 128), + token_id: parseAscii(a.token_id, InvalidDataReason.INVALID_TOKEN_CODE, 1, 64), + url: parseAscii(a.url, InvalidDataReason.INVALID_TOKEN_CODE, 0, 128), + hash: parseAscii(a.hash, InvalidDataReason.INVALID_TOKEN_CODE, 0, 64), + metadata: parseAscii(a.metadata, InvalidDataReason.INVALID_TOKEN_CODE, 0, 128), + } +} + +function parseNFTs(a: Array): Array { + validate(1 <= a.length && a.length <= 3, InvalidDataReason.INCORRECT_NUMBER_OF_NFTS) + return a.map( e => parseNFT(e)) +} + +export function parseMapNFTSignature(data: MapNFTSignature): ParsedMapNFTSignature { + return { + fio_address: parseAscii(data.fio_address, InvalidDataReason.INVALID_FIO_ADDRESS, 3, 64), + nfts: parseNFTs(data.nfts), + max_fee: parseUint64_str(data.max_fee, {}, InvalidDataReason.INVALID_MAX_FEE), + actor: parseNameString(data.actor, InvalidDataReason.INVALID_ACTOR), + tpid: parseAscii(data.tpid, InvalidDataReason.INVALID_TPID, 0, 20), + } +} + +function parseSmallNFT(a: SmallNFT): ParsedSmallNFT { + return { + chain_code: parseAscii(a.chain_code, InvalidDataReason.INVALID_CHAIN_CODE, 1, 10), + contract_address: parseAscii(a.contract_address, InvalidDataReason.INVALID_TOKEN_CODE, 1, 128), + token_id: parseAscii(a.token_id, InvalidDataReason.INVALID_TOKEN_CODE, 1, 64), + } +} + +function parseSmallNFTs(a: Array): Array { + validate(1 <= a.length && a.length <= 3, InvalidDataReason.INCORRECT_NUMBER_OF_NFTS) + return a.map( e => parseSmallNFT(e)) +} + +export function parseRemoveNFTSignature(data: RemoveNFTSignature): ParsedRemoveNFTSignature { + return { + fio_address: parseAscii(data.fio_address, InvalidDataReason.INVALID_FIO_ADDRESS, 3, 64), + nfts: parseSmallNFTs(data.nfts), + max_fee: parseUint64_str(data.max_fee, {}, InvalidDataReason.INVALID_MAX_FEE), + actor: parseNameString(data.actor, InvalidDataReason.INVALID_ACTOR), + tpid: parseAscii(data.tpid, InvalidDataReason.INVALID_TPID, 0, 20), + } +} + +export function parseRemoveAllMappedAddresses(data: RemoveAllMappedAddresses): ParsedRemoveAllMappedAddresses { + return { + fio_address: parseAscii(data.fio_address, InvalidDataReason.INVALID_FIO_ADDRESS, 3, 64), + max_fee: parseUint64_str(data.max_fee, {}, InvalidDataReason.INVALID_MAX_FEE), + actor: parseNameString(data.actor, InvalidDataReason.INVALID_ACTOR), + tpid: parseAscii(data.tpid, InvalidDataReason.INVALID_TPID, 0, 20), + } +} + +export function parseCancelRequestFunds(data: CancelFundsRequest): ParsedCancelFundsRequest { + return { + fio_request_id: parseAscii(data.fio_request_id, InvalidDataReason.INVALID_FIO_REQUEST_ID), + max_fee: parseUint64_str(data.max_fee, {}, InvalidDataReason.INVALID_MAX_FEE), + actor: parseAscii(data.actor, InvalidDataReason.INVALID_ACTOR), + tpid: parseAscii(data.tpid, InvalidDataReason.INVALID_TPID, 0, 20), + } +} + +export function parseRejectRequestFunds(data: RejectFundsRequest): ParsedRejectFundsRequest { + return { + fio_request_id: parseAscii(data.fio_request_id, InvalidDataReason.INVALID_FIO_REQUEST_ID), + max_fee: parseUint64_str(data.max_fee, {}, InvalidDataReason.INVALID_MAX_FEE), + actor: parseAscii(data.actor, InvalidDataReason.INVALID_ACTOR), + tpid: parseAscii(data.tpid, InvalidDataReason.INVALID_TPID, 0, 20), + } +} + +export function parseBuyBundledTransaction(data: BuyBundledTransaction): ParsedBuyBundledTransaction { + return { + fio_address: parseAscii(data.fio_address, InvalidDataReason.INVALID_FIO_ADDRESS, 3, 64), + bundle_sets: parseUint64_str(data.bundle_sets, {}, InvalidDataReason.INVALID_BUNDLE_SETS), + max_fee: parseUint64_str(data.max_fee, {}, InvalidDataReason.INVALID_MAX_FEE), + actor: parseNameString(data.actor, InvalidDataReason.INVALID_ACTOR), + tpid: parseAscii(data.tpid, InvalidDataReason.INVALID_TPID, 0, 20), + } +} + +export function parseRegisterAddress(data: RegisterAddress): ParsedRegisterAddress { + return { + fio_address: parseAscii(data.fio_address, InvalidDataReason.INVALID_FIO_ADDRESS, 3, 64), + owner_fio_public_key: parseAscii(data.owner_fio_public_key, InvalidDataReason.INVALID_PUBLIC_KEY), + max_fee: parseUint64_str(data.max_fee, {}, InvalidDataReason.INVALID_MAX_FEE), + actor: parseNameString(data.actor, InvalidDataReason.INVALID_ACTOR), + tpid: parseAscii(data.tpid, InvalidDataReason.INVALID_TPID, 0, 20), + } +} + +export function parseTransferAddress(data: TransferAddress): ParsedTransferAddress { + return { + fio_address: parseAscii(data.fio_address, InvalidDataReason.INVALID_FIO_ADDRESS, 3, 64), + new_owner_fio_public_key: parseAscii(data.new_owner_fio_public_key, InvalidDataReason.INVALID_PUBLIC_KEY), + max_fee: parseUint64_str(data.max_fee, {}, InvalidDataReason.INVALID_MAX_FEE), + actor: parseNameString(data.actor, InvalidDataReason.INVALID_ACTOR), + tpid: parseAscii(data.tpid, InvalidDataReason.INVALID_TPID, 0, 20), + } +} + +export function parseRegisterDomain(data: RegisterDomain): ParsedRegisterDomain { + return { + fio_domain: parseAscii(data.fio_domain, InvalidDataReason.INVALID_FIO_ADDRESS, 1, 62), + owner_fio_public_key: parseAscii(data.owner_fio_public_key, InvalidDataReason.INVALID_PUBLIC_KEY), + max_fee: parseUint64_str(data.max_fee, {}, InvalidDataReason.INVALID_MAX_FEE), + actor: parseNameString(data.actor, InvalidDataReason.INVALID_ACTOR), + tpid: parseAscii(data.tpid, InvalidDataReason.INVALID_TPID, 0, 20), + } +} + +export function parseRenewDomain(data: RenewDomain): ParsedRenewDomain { + return { + fio_domain: parseAscii(data.fio_domain, InvalidDataReason.INVALID_FIO_ADDRESS, 1, 62), + max_fee: parseUint64_str(data.max_fee, {}, InvalidDataReason.INVALID_MAX_FEE), + actor: parseNameString(data.actor, InvalidDataReason.INVALID_ACTOR), + tpid: parseAscii(data.tpid, InvalidDataReason.INVALID_TPID, 0, 20), + } +} + +export function parseMakeDomainPublic(data: MakeDomainPublic): ParsedMakeDomainPublic { + return { + fio_domain: parseAscii(data.fio_domain, InvalidDataReason.INVALID_FIO_ADDRESS, 1, 62), + is_public: parseBoolean(data.is_public, InvalidDataReason.INVALID_IS_PUBLIC), + max_fee: parseUint64_str(data.max_fee, {}, InvalidDataReason.INVALID_MAX_FEE), + actor: parseNameString(data.actor, InvalidDataReason.INVALID_ACTOR), + tpid: parseAscii(data.tpid, InvalidDataReason.INVALID_TPID, 0, 20), + } +} + +export function parseTransferDomain(data: TransferDomain): ParsedTransferDomain { + return { + fio_domain: parseAscii(data.fio_domain, InvalidDataReason.INVALID_FIO_ADDRESS, 1, 62), + new_owner_fio_public_key: parseAscii(data.new_owner_fio_public_key, InvalidDataReason.INVALID_PUBLIC_KEY), + max_fee: parseUint64_str(data.max_fee, {}, InvalidDataReason.INVALID_MAX_FEE), + actor: parseNameString(data.actor, InvalidDataReason.INVALID_ACTOR), + tpid: parseAscii(data.tpid, InvalidDataReason.INVALID_TPID, 0, 20), + } +} + +export function parseRemoveAllNFT(data: RemoveAllNFT): ParsedRemoveAllNFT { + return { + fio_address: parseAscii(data.fio_address, InvalidDataReason.INVALID_FIO_ADDRESS, 3, 64), + max_fee: parseUint64_str(data.max_fee, {}, InvalidDataReason.INVALID_MAX_FEE), + actor: parseNameString(data.actor, InvalidDataReason.INVALID_ACTOR), + tpid: parseAscii(data.tpid, InvalidDataReason.INVALID_TPID, 0, 20), + } +} + +export function parseStakeFIO(data: StakeFIO): ParsedStakeFIO { + return { + amount: parseUint64_str(data.amount, {}, InvalidDataReason.INVALID_AMOUNT), + fio_address: parseAscii(data.fio_address, InvalidDataReason.INVALID_FIO_ADDRESS, 3, 64), + max_fee: parseUint64_str(data.max_fee, {}, InvalidDataReason.INVALID_MAX_FEE), + actor: parseNameString(data.actor, InvalidDataReason.INVALID_ACTOR), + tpid: parseAscii(data.tpid, InvalidDataReason.INVALID_TPID, 0, 20), + } +} + +export function parseUnstakeFIO(data: UnstakeFIO): ParsedUnstakeFIO { + return { + amount: parseUint64_str(data.amount, {}, InvalidDataReason.INVALID_AMOUNT), + fio_address: parseAscii(data.fio_address, InvalidDataReason.INVALID_FIO_ADDRESS, 3, 64), + max_fee: parseUint64_str(data.max_fee, {}, InvalidDataReason.INVALID_MAX_FEE), + actor: parseNameString(data.actor, InvalidDataReason.INVALID_ACTOR), + tpid: parseAscii(data.tpid, InvalidDataReason.INVALID_TPID, 0, 20), + } +} + +function parseProducers(a: Array): Array { + validate(1 <= a.length && a.length <= 30, InvalidDataReason.INCORRECT_NUMBER_OF_PRODUCERS) + return a.map( e => parseAscii(e, InvalidDataReason.INVALID_PRODUCER, 3, 64)) +} + +export function parseVoteOnBlockProducers(data: VoteOnBlockProducers): ParsedVoteOnBlockProducers { + return { + producers: parseProducers(data.producers), + fio_address: parseAscii(data.fio_address, InvalidDataReason.INVALID_FIO_ADDRESS, 3, 64), + max_fee: parseUint64_str(data.max_fee, {}, InvalidDataReason.INVALID_MAX_FEE), + actor: parseNameString(data.actor, InvalidDataReason.INVALID_ACTOR), + } +} + +export function parseProxyVotesToRegisteredProxy(data: ProxyVotesToRegisteredProxy): ParsedProxyVotesToRegisteredProxy { + return { + proxy: parseAscii(data.proxy, InvalidDataReason.INVALID_PROXY, 3, 64), + fio_address: parseAscii(data.fio_address, InvalidDataReason.INVALID_FIO_ADDRESS, 3, 64), + max_fee: parseUint64_str(data.max_fee, {}, InvalidDataReason.INVALID_MAX_FEE), + actor: parseNameString(data.actor, InvalidDataReason.INVALID_ACTOR), + } +} + +export function ParsedWrapDomain(data: WrapDomain): ParsedWrapDomain { + return { + fio_domain: parseAscii(data.fio_domain, InvalidDataReason.INVALID_FIO_ADDRESS, 1, 62), + chain_code: parseAscii(data.chain_code, InvalidDataReason.INVALID_CHAIN_CODE, 1, 10), + public_address: parseAscii(data.public_address, InvalidDataReason.INVALID_PUBLIC_ADDRESS, 1, 64), + max_oracle_fee: parseUint64_str(data.max_oracle_fee, {}, InvalidDataReason.INVALID_MAX_FEE), + max_fee: parseUint64_str(data.max_fee, {}, InvalidDataReason.INVALID_MAX_FEE), + actor: parseNameString(data.actor, InvalidDataReason.INVALID_ACTOR), + tpid: parseAscii(data.tpid, InvalidDataReason.INVALID_TPID, 0, 20), + } +} + +export function ParsedWrapTokens(data: WrapTokens): ParsedWrapTokens { + return { + amount: parseUint64_str(data.amount, {}, InvalidDataReason.INVALID_AMOUNT), + chain_code: parseAscii(data.chain_code, InvalidDataReason.INVALID_CHAIN_CODE, 1, 10), + public_address: parseAscii(data.public_address, InvalidDataReason.INVALID_PUBLIC_ADDRESS, 1, 64), + max_oracle_fee: parseUint64_str(data.max_oracle_fee, {}, InvalidDataReason.INVALID_MAX_FEE), + max_fee: parseUint64_str(data.max_fee, {}, InvalidDataReason.INVALID_MAX_FEE), + actor: parseNameString(data.actor, InvalidDataReason.INVALID_ACTOR), + tpid: parseAscii(data.tpid, InvalidDataReason.INVALID_TPID, 0, 20), + } +} diff --git a/ledgerjs-fio/src/utils/serialize.ts b/ledgerjs-fio/src/utils/serialize.ts index a1bbbf49..3bc9ed3f 100644 --- a/ledgerjs-fio/src/utils/serialize.ts +++ b/ledgerjs-fio/src/utils/serialize.ts @@ -36,6 +36,22 @@ export function uint32_to_buf(value: Uint32_t | Uint16_t | Uint8_t): Buffer { return data } +// This is thhe only LE function here +export function varuint32_to_buf(value: number) { + assert(isUint32(value), 'invalid uint32'); + let buffer = Buffer.from(""); + while (true) { + if (value >>> 7) { + buffer = Buffer.concat([buffer, uint8_to_buf((0x80 | (value & 0x7f)) as Uint8_t)]); + value = value >>> 7; + } else { + buffer = Buffer.concat([buffer, uint8_to_buf(value as Uint8_t)]); + break; + } + } + return buffer; +} + export function buf_to_uint32(data: Buffer): Uint32_t { assert(data.length === 4, "invalid uint32 buffer") @@ -61,8 +77,6 @@ export function buf_to_hex(data: Buffer): string { return data.toString("hex") } -// no buf_to_uint8 - export function path_to_buf(path: Array): Buffer { assert(isValidPath(path), "invalid bip32 path") @@ -70,7 +84,7 @@ export function path_to_buf(path: Array): Buffer { data.writeUInt8(path.length, 0) for (let i = 0; i < path.length; i++) { - data.writeUInt32BE(path[i], 1 + i * 4) + data.writeUInt32LE(path[i], 1 + i * 4) } return data } diff --git a/ledgerjs-fio/test/device-self-test/runTestsDevice.test.ts b/ledgerjs-fio/test/device-self-test/runTestsDevice.test.ts deleted file mode 100644 index e01b7ee9..00000000 --- a/ledgerjs-fio/test/device-self-test/runTestsDevice.test.ts +++ /dev/null @@ -1,18 +0,0 @@ -import type Fio from "../../src/fio" -import {getFio} from "../test_utils" - -describe("runTestsDevice", async () => { - let fio: Fio = {} as Fio - - beforeEach(async () => { - fio = await getFio() - }) - - afterEach(async () => { - await (fio as any).t.close() - }) - - it("Should run device tests", async () => { - await fio.runTests() - }) -}) diff --git a/ledgerjs-fio/test/integration/__fixtures__/getPublicKey.ts b/ledgerjs-fio/test/integration/__fixtures__/getPublicKey.ts deleted file mode 100644 index 5bf68325..00000000 --- a/ledgerjs-fio/test/integration/__fixtures__/getPublicKey.ts +++ /dev/null @@ -1,21 +0,0 @@ -export type TestCase = { - path: string, - expected: { publicKey: string} -} - -export const testsPublicKey: TestCase[] = [ - { - path: "44'/235'/0'/0/0", - expected: { - publicKey: - "04a9a222bc3b1a5a58ada17d10069b3961ebd0f917d4b2106031a061915ca9cc24a06941e0a4c0d5e266850ff980ad349ab8b027c93bf4aead1984168ad43e30ab", - }, - }, - { - path: "44'/235'/0'/0/2000", - expected: { - publicKey: - "0484e52dfea57b8f1787488a356374cd8e8515b8ad8db3dd4f9088d8e42ed2fb6d571e8894cccbdbf15e1bd84f8b4362f52d1b5b712b9775c0a51cdd5ee9a9e8ca", - }, - }, -] diff --git a/ledgerjs-fio/test/integration/getPublicKey.test.ts b/ledgerjs-fio/test/integration/getPublicKey.test.ts deleted file mode 100644 index d429a767..00000000 --- a/ledgerjs-fio/test/integration/getPublicKey.test.ts +++ /dev/null @@ -1,86 +0,0 @@ -import chai, {expect} from "chai" -import chaiAsPromised from 'chai-as-promised' - -import type Fio from "../../src/fio" -import {DeviceStatusError} from "../../src/fio" -import {str_to_path} from "../../src/utils/address" -import {getFio} from "../test_utils" -import type {TestCase} from "./__fixtures__/getPublicKey" -import {testsPublicKey} from "./__fixtures__/getPublicKey" - -chai.use(chaiAsPromised) - -import {Ecc} from '@fioprotocol/fiojs' - -describe("getPublicKey", async () => { - let fio: Fio = {} as Fio - - beforeEach(async () => { - fio = await getFio() - }) - - afterEach(async () => { - await (fio as any).t.close() - }) - - describe("Should successfully get a single extended public key", async () => { - const test = async (tests: TestCase[]) => { - for (const {path, expected} of tests) { - const response = await fio.getPublicKey( - {path: str_to_path(path), show_or_not: false} - ) - - expect(response.publicKeyHex).to.equal(expected.publicKey) - expect(Ecc.PublicKey(response.publicKeyWIF).toUncompressed().toBuffer().toString('hex')).to.equal(expected.publicKey) - } - } - - it('fio', async () => { - await test(testsPublicKey) - }) - }) - - describe("Should successfully show a single extended public key", async () => { - const test = async (tests: TestCase[]) => { - for (const {path, expected} of tests) { - const response = await fio.getPublicKey( - {path: str_to_path(path), show_or_not: true} - ) - - expect(response.publicKeyHex).to.equal(expected.publicKey) - } - } - - it('fio', async () => { - await test(testsPublicKey) - }) - }) - - describe("Should reject invalid paths", () => { - it('path shorter than 5 indexes', async () => { - const promise = fio.getPublicKey({path: str_to_path("44'/235'/0'/0"), show_or_not: false}) - await expect(promise).to.be.rejectedWith(DeviceStatusError, "Action rejected by Ledger's security policy") - }) - - it('path contains non-zero address', async () => { - const promise = fio.getPublicKey({path: str_to_path("44'/235'/1'/0/0"), show_or_not: false}) - await expect(promise).to.be.rejected - }) - - it('path contains non-hardened address', async () => { - const promise = fio.getPublicKey({path: str_to_path("44'/235'/0/0/0"), show_or_not: false}) - await expect(promise).to.be.rejected - }) - - it('path contains non-zero chain', async () => { - const promise = fio.getPublicKey({path: str_to_path("44'/235'/0'/1/0"), show_or_not: false}) - await expect(promise).to.be.rejected - }) - - it('path too long', async () => { - const promise = fio.getPublicKey({path: str_to_path("44'/235'/0'/0/0/0"), show_or_not: false}) - await expect(promise).to.be.rejected - }) - }) - -}) diff --git a/ledgerjs-fio/test/integration/getSerial.test.ts b/ledgerjs-fio/test/integration/getSerial.test.ts deleted file mode 100644 index 911e8004..00000000 --- a/ledgerjs-fio/test/integration/getSerial.test.ts +++ /dev/null @@ -1,21 +0,0 @@ -import {expect} from "chai" - -import type Fio from "../../src/fio" -import {getFio} from "../test_utils" - -describe("getSerial", async () => { - let fio: Fio = {} as Fio - - beforeEach(async () => { - fio = await getFio() - }) - - afterEach(async () => { - await (fio as any).t.close() - }) - - it("Should correctly get the serial number of the device", async () => { - const response = await fio.getSerial() - expect(response.serial.length).to.equal(14) - }) -}) diff --git a/ledgerjs-fio/test/integration/getVersion.test.ts b/ledgerjs-fio/test/integration/getVersion.test.ts deleted file mode 100644 index 74b1f434..00000000 --- a/ledgerjs-fio/test/integration/getVersion.test.ts +++ /dev/null @@ -1,25 +0,0 @@ -import {expect} from "chai" - -import type Fio from "../../src/fio" -import {getFio} from "../test_utils" - -describe("getVersion", async () => { - let fio: Fio = {} as Fio - - beforeEach(async () => { - fio = await getFio() - }) - - afterEach(async () => { - await (fio as any).t.close() - }) - - it("Should correctly get the semantic version of device", async () => { - const {version, compatibility} = await fio.getVersion() - - expect(version.major).to.equal(0) - expect(version.minor).to.equal(0) - expect(compatibility.isCompatible).to.be.true - expect(compatibility.recommendedVersion).to.be.null - }) -}) diff --git a/ledgerjs-fio/test/integration/signTransaction.test.ts b/ledgerjs-fio/test/integration/signTransaction.test.ts deleted file mode 100644 index 5502f603..00000000 --- a/ledgerjs-fio/test/integration/signTransaction.test.ts +++ /dev/null @@ -1,231 +0,0 @@ -import {expect} from "chai" -import {log} from "console" -import {type} from "os" -import type {HexString, Uint64_str} from "types/internal" -import {assert} from "utils/assert" - -import type {Fio} from "../../src/fio" -import {DeviceStatusError, HARDENED} from "../../src/fio" -import type {Transaction} from "../../src/types/public" -import {hex_to_buf, uint64_to_buf} from "../../src/utils/serialize" -import {getFio} from "../test_utils" - -// We initialize constants -const path = [44 + HARDENED, 235 + HARDENED, 0 + HARDENED, 0, 0] -const privateKeyDHex = "4d597899db76e87933e7c6841c2d661810f070bad20487ef20eb84e182695a3a" as HexString -const PrivateKey = require('@fioprotocol/fiojs/dist/ecc/key_private') -const privateKey = PrivateKey(hex_to_buf(privateKeyDHex)) -const publicKey = privateKey.toPublic() - -const otherPath = [44 + HARDENED, 235 + HARDENED, 0 + HARDENED, 0, 1] -const otherPrivateKeyDHex = "90835ae980cd10e9ca7df05d0e3b3c22e0aed0e75527511337f7c53a9d0c6c69" as HexString -const otherPrivateKey = PrivateKey(hex_to_buf(otherPrivateKeyDHex)) -const otherPublicKey = otherPrivateKey.toPublic() - -const {TextEncoder, TextDecoder} = require('text-encoding') -const fetch = require('node-fetch') -const {base64ToBinary, arrayToHex} = require('@fioprotocol/fiojs/dist/chain-numeric') -const Signature = require('@fioprotocol/fiojs/dist/ecc/signature') -const crypto = require("crypto") -var ser = require("@fioprotocol/fiojs/dist/chain-serialize") -const textDecoder = new TextDecoder() -const textEncoder = new TextEncoder() -const {JsSignatureProvider} = require('@fioprotocol/fiojs/dist/chain-jssig') - -// To do this we must perform asynchronous calls, initialized in before method -const httpEndpointTestnet = 'http://testnet.fioprotocol.io' -const httpEndpointMainnet = 'https://fio.greymass.com' -var networkInfo: any - - -// Serializes and signs transaction using fiojs -async function buildTxAndSignatureFioJs(network: string, tx: Transaction, pubkey: any) { - // We serialize the transaction - // Get the addaddress action type - const actionAddaddress = networkInfo[network].typesFioAddress.get('trnsfiopubky') - - // Serialize the actions[] "data" field (This example assumes a single action, though transactions may hold an array of actions.) - const buffer = new ser.SerialBuffer({textEncoder, textDecoder}) - actionAddaddress.serialize(buffer, tx.actions[0].data) - const serializedData = arrayToHex(buffer.asUint8Array()) - - // Get the actions parameter from the transaction and replace the data field with the serialized data field - var serializedAction = tx.actions[0] as any - serializedAction = { - ...serializedAction, - data: serializedData, - } - - const rawTransaction = { - ...tx, - max_net_usage_words: 0x00, - max_cpu_usage_ms: 0x00, - delay_sec: 0x00, - context_free_actions: [], - actions: [serializedAction], //Actions have to be an array - transaction_extensions: [], - } - - // Get the transaction action type - const txnaction = networkInfo[network].typesTransaction.get('transaction') - - // Serialize the transaction - const buffer2 = new ser.SerialBuffer({textEncoder, textDecoder}) - txnaction.serialize(buffer2, rawTransaction) - const serializedTransaction = buffer2.asUint8Array() - - //Lets compute hash in using Signature.sign - const msg = Buffer.concat([Buffer.from(networkInfo[network].chainId, "hex"), serializedTransaction, Buffer.allocUnsafe(32).fill(0)]) - const hash = crypto.createHash('sha256').update(msg).digest('hex') - - //Now using signatureProvider.sign - const signatureProvider = new JsSignatureProvider([PrivateKey.fromHex(privateKeyDHex).toString(), - PrivateKey.fromHex(otherPrivateKeyDHex).toString()]) - const requiredKeys = [pubkey.toString()] - const serializedContextFreeData = null - - const signedTxn = await signatureProvider.sign({ - chainId: networkInfo[network].chainId, - requiredKeys: requiredKeys, - serializedTransaction: serializedTransaction, - serializedContextFreeData: serializedContextFreeData, - }) - - return { - serializedTx: serializedTransaction, - fullMsg: msg, - hash: crypto.createHash('sha256').update(msg).digest('hex'), - signature: signedTxn.signatures[0], - } -} - -const basicTx: Transaction = { - expiration: "2021-08-28T12:50:36.686", - ref_block_num: 0x1122, - ref_block_prefix: 0x33445566, - context_free_actions: [], - actions: [{ - account: "fio.token", - name: "trnsfiopubky", - authorization: [{ - actor: "aftyershcu22", - permission: "active", - }], - data: { - payee_public_key: "FIO8PRe4WRZJj5mkem6qVGKyvNFgPsNnjNN6kPhh6EaCpzCVin5Jj", - amount: "20", - max_fee: 0x11223344, - tpid: "rewards@wallet", - actor: "aftyershcu22", - }, - }], - transaction_extensions: [], -} - -describe("signTransaction", async () => { - let fio: Fio = {} as Fio - - before(async () => { - const infoTestnet = await (await fetch(httpEndpointTestnet + '/v1/chain/get_info')).json() - const infoMainnet = await (await fetch(httpEndpointMainnet + '/v1/chain/get_info')).json() - - const abiFioAddressTestnet = await (await fetch(httpEndpointTestnet + '/v1/chain/get_abi', { - body: `{"account_name": "fio.token"}`, - method: 'POST', - })).json() - const abiMsigTestnet = await (await fetch(httpEndpointTestnet + '/v1/chain/get_abi', { - body: `{"account_name": "eosio.msig"}`, - method: 'POST', - })).json() - const abiFioAddressMainnet = await (await fetch(httpEndpointMainnet + '/v1/chain/get_abi', { - body: `{"account_name": "fio.token"}`, - method: 'POST', - })).json() - const abiMsigMainnet = await (await fetch(httpEndpointMainnet + '/v1/chain/get_abi', { - body: `{"account_name": "eosio.msig"}`, - method: 'POST', - })).json() - - // Get a Map of all the types from fio.address - const typesFioAddressTestnet = ser.getTypesFromAbi(ser.createInitialTypes(), abiFioAddressTestnet.abi) - const typesTransactionTestnet = ser.getTypesFromAbi(ser.createInitialTypes(), abiMsigTestnet.abi) - const typesFioAddressMainnet = ser.getTypesFromAbi(ser.createInitialTypes(), abiFioAddressMainnet.abi) - const typesTransactionMainnet = ser.getTypesFromAbi(ser.createInitialTypes(), abiMsigMainnet.abi) - networkInfo = { - "TESTNET": { - chainId: infoTestnet.chain_id, - typesFioAddress: typesFioAddressTestnet, - typesTransaction: typesTransactionTestnet, - }, - "MAINNET": { - chainId: infoMainnet.chain_id, - typesFioAddress: typesFioAddressMainnet, - typesTransaction: typesTransactionMainnet, - }, - } - - }) - - beforeEach(async () => { - fio = await getFio() - }) - - afterEach(async () => { - await (fio as any).t.close() - }) - - it("Sign testnet transaction", async () => { - const network = "TESTNET" - const tx = basicTx - - // Lets sign the transaction with fiojs - const {serializedTx, fullMsg, hash, signature} = await buildTxAndSignatureFioJs(network, tx, publicKey) - - // Lets sign the transaction with ledger - const chainId = networkInfo[network].chainId - const ledgerResponse = await fio.signTransaction({path, chainId, tx}) - const signatureLedger = Signature.fromHex(ledgerResponse.witness.witnessSignatureHex) - - expect(ledgerResponse.txHashHex).to.be.equal(hash) - expect(signatureLedger.verify(fullMsg, publicKey)).to.be.true - expect(signatureLedger.verify(fullMsg, otherPublicKey)).to.be.false - }) - - it("Sign mainnet transaction", async () => { - const network = "MAINNET" - const tx = basicTx - - // Lets sign the transaction with fiojs - const {serializedTx, fullMsg, hash, signature} = await buildTxAndSignatureFioJs(network, tx, otherPublicKey) - - // Lets sign the transaction with ledger - const chainId = networkInfo[network].chainId - const ledgerResponse = await fio.signTransaction({path: otherPath, chainId, tx}) - const signatureLedger = Signature.fromHex(ledgerResponse.witness.witnessSignatureHex) - - expect(ledgerResponse.txHashHex).to.be.equal(hash) - expect(signatureLedger.verify(fullMsg, otherPublicKey)).to.be.true - expect(signatureLedger.verify(fullMsg, publicKey)).to.be.false - }) - - it("Invalid transaction: actor dont match", async () => { - const network = "MAINNET" - const action = {...basicTx.actions[0], name: "name.error"} - const tx: Transaction = {...basicTx, actions: [action]} - - // Lets sign the transaction with ledger - const chainId = networkInfo[network].chainId - const promise = fio.signTransaction({path, chainId, tx}) - await expect(promise).to.be.rejected - }) - - it("Path rejected by ledger", async () => { - const network = "MAINNET" - const tx = basicTx - - // Lets sign the transaction with ledger - const chainId = networkInfo[network].chainId - const promise = fio.signTransaction({path: [44 + HARDENED, 235 + HARDENED, 0 + HARDENED, 1, 0], chainId, tx}) - await expect(promise).to.be.rejectedWith(DeviceStatusError, "Action rejected by Ledger's security policy") - }) -}) diff --git a/ledgerjs-fio/test/test_utils.ts b/ledgerjs-fio/test/test_utils.ts deleted file mode 100644 index 51872509..00000000 --- a/ledgerjs-fio/test/test_utils.ts +++ /dev/null @@ -1,16 +0,0 @@ -// @ts-ignore -import TransportNodeHid from "@ledgerhq/hw-transport-node-hid" - -import Fio from "../src/fio" - -export async function getTransport() { - return await TransportNodeHid.create(1000) -} - -export async function getFio() { - const transport = await getTransport() - - const fio = new Fio(transport); - (fio as any).t = transport - return fio -} diff --git a/ledgerjs-fio/test/tsconfig.json b/ledgerjs-fio/test/tsconfig.json deleted file mode 100644 index 2f8c6f0c..00000000 --- a/ledgerjs-fio/test/tsconfig.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "extends": "../tsconfig.base", - "compilerOptions": { - "lib": ["es2019"], - "outDir": "lib" - }, - "include": ["./**/*.ts", "../src/**/*.ts"] -} diff --git a/ledgerjs-fio/test/unit/parse.test.ts b/ledgerjs-fio/test/unit/parse.test.ts deleted file mode 100644 index ac7efeed..00000000 --- a/ledgerjs-fio/test/unit/parse.test.ts +++ /dev/null @@ -1,158 +0,0 @@ -import {expect} from "chai" - -import {InvalidDataReason} from "../../src/errors" -import type {Transaction} from "../../src/types/public" -import {parseTransaction} from "../../src/utils/parse" - -const chainId = "" //XXX - -const validTx: Transaction = { - expiration: "2021-08-28T12:50:36.686", - ref_block_num: 0x1122, - ref_block_prefix: 0x33445566, - context_free_actions: [], - actions: [{ - account: "fio.token", - name: "trnsfiopubky", - authorization: [{ - actor: "aftyershcu22", - permission: "active", - }], - data: { - payee_public_key: "FIO8PRe4WRZJj5mkem6qVGKyvNFgPsNnjNN6kPhh6EaCpzCVin5Jj", - amount: "20", - max_fee: 0x11223344, - tpid: "rewards@wallet", - actor: "aftyershcu22", - }, - }], - transaction_extensions: [], -} - -describe("parse", () => { - describe("parseTransaction", () => { - it("successfully parse valid transaction", () => { - expect(() => parseTransaction(chainId, validTx)).to.not.throw() - }) - - it("fail to parse incorrect expiration", () => { - const invalidExpiration = JSON.parse(JSON.stringify(validTx)) - invalidExpiration.expiration = null - expect(() => parseTransaction(chainId, invalidExpiration)) - .to.throw(InvalidDataReason.INVALID_EXPIRATION) - }) - - it("fail to parse incorrect ref_block_num", () => { - const invalidRefBlockNum = JSON.parse(JSON.stringify(validTx)) - invalidRefBlockNum.ref_block_num = null - expect(() => parseTransaction(chainId, invalidRefBlockNum)) - .to.throw(InvalidDataReason.INVALID_REF_BLOCK_NUM) - }) - - it("fail to parse incorrect ref_block_prefix", () => { - const invalidRefBlockPrefix = JSON.parse(JSON.stringify(validTx)) - invalidRefBlockPrefix.ref_block_prefix = null - expect(() => parseTransaction(chainId, invalidRefBlockPrefix)) - .to.throw(InvalidDataReason.INVALID_REF_BLOCK_PREFIX) - }) - - it("fail to parse when there are context free actions", () => { - const someContextFreeActions = JSON.parse(JSON.stringify(validTx)) - someContextFreeActions.context_free_actions = ["A", "B"] - expect(() => parseTransaction(chainId, someContextFreeActions)) - .to.throw(InvalidDataReason.CONTEXT_FREE_ACTIONS_NOT_SUPPORTED) - }) - - it("fail to parse when there are no actions", () => { - const noActions = JSON.parse(JSON.stringify(validTx)) - noActions.actions = [] - expect(() => parseTransaction(chainId, noActions)) - .to.throw(InvalidDataReason.MULTIPLE_ACTIONS_NOT_SUPPORTED) - }) - - it("fail to parse when there is more than one action", () => { - const moreThanOneAction = JSON.parse(JSON.stringify(validTx)) - moreThanOneAction.actions.push(moreThanOneAction.actions[0]) - expect(() => parseTransaction(chainId, moreThanOneAction)) - .to.throw(InvalidDataReason.MULTIPLE_ACTIONS_NOT_SUPPORTED) - }) - - it("fail to parse invalid account", () => { - const invalidAccount = JSON.parse(JSON.stringify(validTx)) - invalidAccount.actions[0].account = null - expect(() => parseTransaction(chainId, invalidAccount)) - .to.throw(InvalidDataReason.INVALID_ACCOUNT) - }) - - it("fail to parse invalid name", () => { - const invalidName = JSON.parse(JSON.stringify(validTx)) - invalidName.actions[0].name = null - expect(() => parseTransaction(chainId, invalidName)) - .to.throw(InvalidDataReason.INVALID_NAME) - }) - - it("fail to parse when there is no authorization", () => { - const noAuthorization = JSON.parse(JSON.stringify(validTx)) - noAuthorization.actions[0].authorization = [] - expect(() => parseTransaction(chainId, noAuthorization)) - .to.throw(InvalidDataReason.MULTIPLE_AUTHORIZATION_NOT_SUPPORTED) - }) - - it("fail to parse when there is more than one authorization", () => { - const moreThanOneAuthorization = JSON.parse(JSON.stringify(validTx)) - moreThanOneAuthorization.actions[0].authorization - .push(moreThanOneAuthorization.actions[0].authorization[0]) - expect(() => parseTransaction(chainId, moreThanOneAuthorization)) - .to.throw(InvalidDataReason.MULTIPLE_AUTHORIZATION_NOT_SUPPORTED) - }) - - it("fail to parse invalid actor", () => { - const invalidActor = JSON.parse(JSON.stringify(validTx)) - invalidActor.actions[0].authorization[0].actor = null - expect(() => parseTransaction(chainId, invalidActor)) - .to.throw(InvalidDataReason.INVALID_ACTOR) - }) - - it("fail to parse invalid permission", () => { - const invalidPermission = JSON.parse(JSON.stringify(validTx)) - invalidPermission.actions[0].authorization[0].permission = null - expect(() => parseTransaction(chainId, invalidPermission)) - .to.throw(InvalidDataReason.INVALID_PERMISSION) - }) - - it("fail to parse invalid payee public key", () => { - const invalidPayeePublicKey = JSON.parse(JSON.stringify(validTx)) - invalidPayeePublicKey.actions[0].data.payee_public_key = null - expect(() => parseTransaction(chainId, invalidPayeePublicKey)) - .to.throw(InvalidDataReason.INVALID_PAYEE_PUBKEY) - }) - - it("fail to parse invalid amount", () => { - const invalidAmount = JSON.parse(JSON.stringify(validTx)) - invalidAmount.actions[0].data.amount = null - expect(() => parseTransaction(chainId, invalidAmount)) - .to.throw(InvalidDataReason.INVALID_AMOUNT) - }) - - it("fail to parse invalid max fee", () => { - const invalidMaxFee = JSON.parse(JSON.stringify(validTx)) - invalidMaxFee.actions[0].data.max_fee = null - expect(() => parseTransaction(chainId, invalidMaxFee)) - .to.throw(InvalidDataReason.INVALID_MAX_FEE) - }) - - it("fail to parse invalid tpid", () => { - const invalidTpid = JSON.parse(JSON.stringify(validTx)) - invalidTpid.actions[0].data.tpid = null - expect(() => parseTransaction(chainId, invalidTpid)) - .to.throw(InvalidDataReason.INVALID_TPID) - }) - - it("fail to parse invalid actor in action data", () => { - const invalidActionDataActor = JSON.parse(JSON.stringify(validTx)) - invalidActionDataActor.actions[0].data.actor = null - expect(() => parseTransaction(chainId, invalidActionDataActor)) - .to.throw(InvalidDataReason.INVALID_ACTOR) - }) - }) -}) diff --git a/ledgerjs-fio/tsconfig.json b/ledgerjs-fio/tsconfig.json index c04bc8ec..3f8dad2b 100644 --- a/ledgerjs-fio/tsconfig.json +++ b/ledgerjs-fio/tsconfig.json @@ -1,4 +1,4 @@ { "extends": "./tsconfig.base", - "include": ["./**/*.ts"] + "include": ["src/**/*.ts"] } diff --git a/ledgerjs-fio/yarn.lock b/ledgerjs-fio/yarn.lock index c48e0c15..3d2710f0 100644 --- a/ledgerjs-fio/yarn.lock +++ b/ledgerjs-fio/yarn.lock @@ -40,7 +40,7 @@ "@fioprotocol/fiojs@^1.0.1": version "1.0.1" - resolved "https://registry.npmjs.org/@fioprotocol/fiojs/-/fiojs-1.0.1.tgz" + resolved "https://registry.yarnpkg.com/@fioprotocol/fiojs/-/fiojs-1.0.1.tgz#81779437603741bc4ca1c76d119b64c4157a3874" integrity sha512-+rxJ/ynUkox/DO3ihHPpAc//DDI+DQvrphLqwRKufw0atC3GKluGR2qMTeO45O0UjorvOIw6esuuG7NpbVUm8Q== dependencies: ajv "^6.10.2" diff --git a/src/bip44.c b/src/bip44.c index 5ffbb651..75f2b844 100644 --- a/src/bip44.c +++ b/src/bip44.c @@ -1,6 +1,5 @@ #include "common.h" #include "bip44.h" -#include "endian.h" static const uint32_t MAX_REASONABLE_ADDRESS = 1000; @@ -14,12 +13,13 @@ size_t bip44_parseFromWire(bip44_path_t* pathSpec, const uint8_t* dataBuffer, si // Ensure length is valid VALIDATE(length <= ARRAY_LEN(pathSpec->path), ERR_INVALID_DATA); VALIDATE(length * 4 + 1 <= dataSize, ERR_INVALID_DATA); + STATIC_ASSERT(sizeof(pathSpec->path[0]) == 4, "Incompatible path types."); pathSpec->length = length; size_t offset = 1; for (size_t i = 0; i < length; i++) { - pathSpec->path[i] = u4be_read(dataBuffer + offset); + memmove(&pathSpec->path[i], dataBuffer + offset, sizeof(pathSpec->path[i])); offset += 4; } return offset; @@ -81,7 +81,7 @@ size_t bip44_printToStr(const bip44_path_t* pathSpec, char* out, size_t outSize) { \ ASSERT(ptr <= end); \ STATIC_ASSERT(sizeof(end - ptr) == sizeof(size_t), "bad size_t size"); \ - size_t availableSize = (size_t)(end - ptr); \ + size_t availableSize = (size_t) (end - ptr); \ /* Note(ppershing): We do not bother checking return */ \ /* value of snprintf as it always returns 0. */ \ /* Go figure out ... */ \ diff --git a/src/decodeDH.c b/src/decodeDH.c new file mode 100644 index 00000000..7e1a28cf --- /dev/null +++ b/src/decodeDH.c @@ -0,0 +1,557 @@ +#include "state.h" +#include "securityPolicy.h" +#include "uiHelpers.h" +#include "uiScreens.h" +#include "getPublicKey.h" +#include "utils.h" +#include "eos_utils.h" + +static const int16_t DECODING_FINISHED_MAGIC = 23456; +static const uint16_t MAX_SEND_FIRST_MESSAGE = 200; +static ins_decode_context_t *ctx = &(instructionState.decodeContext); + +static inline void CHECK_STAGE(decode_stage_t expected) { + VALIDATE(ctx->stage == expected, ERR_INVALID_STATE); +} + +enum { + P2_NEWFUNDSREQ = 1, + P2_RECORDOBT = 2, +}; + +// we want to wipe out all confidental data on reject +static void dh_respond_with_user_reject() { + explicit_bzero(G_io_apdu_buffer, SIZEOF(G_io_apdu_buffer)); + explicit_bzero(ctx->buffer, SIZEOF(ctx->buffer)); + io_send_buf(ERR_REJECTED_BY_USER, NULL, 0); + ui_idle(); +} + +// ctx->ui_state is shared between the intertwined UI state machines below +// it should be set to this value at the beginning and after a UI state machine is finished +static int UI_STEP_NONE = 0; + +static void readStringWithLength(size_t *read, string_with_length_t **result) { + VALIDATE(ctx->bufferLen >= 1 + *read, ERR_INVALID_DATA); + *result = (string_with_length_t *) (ctx->buffer + *read); + *read += (*result)->length + 1; //+1 for actual length + VALIDATE(ctx->bufferLen >= *read, ERR_INVALID_DATA); + TRACE("%d, %d", (*result)->length, *read); +} + +static void readOptionalStringWithLength(size_t *read, string_with_length_t **result) { + VALIDATE(ctx->bufferLen >= 1 + *read, ERR_INVALID_DATA); + if (ctx->buffer[*read] == 1) { + *read += 1; // has memo or not + readStringWithLength(read, result); + } else { + VALIDATE(ctx->buffer[*read] == 0, ERR_INVALID_DATA); + *read += 1; // has memo or not + *result = NULL; + TRACE("Not present: %d", *read); + } +} + +// ============================== NEWFUNDSREQ state machine ============================== + +enum { + DECODE_NEWFUNDSREQ_MEMO_UI_STEP_MESSAGE1 = 200, + DECODE_NEWFUNDSREQ_MEMO_UI_STEP_MESSAGE2, + DECODE_NEWFUNDSREQ_MEMO_UI_STEP_PAYEE_PUBLIC_ADDRESS, + DECODE_NEWFUNDSREQ_MEMO_UI_STEP_AMOUNT, + DECODE_NEWFUNDSREQ_MEMO_UI_STEP_CHAIN_CODE, + DECODE_NEWFUNDSREQ_MEMO_UI_STEP_TOKEN_CODE, + DECODE_NEWFUNDSREQ_MEMO_UI_STEP_MEMO, + DECODE_NEWFUNDSREQ_MEMO_UI_STEP_CONFIRM, + DECODE_NEWFUNDSREQ_MEMO_UI_STEP_RESPOND, + DECODE_NEWFUNDSREQ_MEMO_UI_STEP_INVALID, +}; + +static void decodeNewfundsreqMemo_ui_runStep() { + TRACE("UI step %d", ctx->ui_step); + ui_callback_fn_t *this_fn = decodeNewfundsreqMemo_ui_runStep; + + UI_STEP_BEGIN(ctx->ui_step, this_fn); + + UI_STEP(DECODE_NEWFUNDSREQ_MEMO_UI_STEP_MESSAGE1) { + ui_displayPaginatedText("Decrypt content", "", this_fn); + } + UI_STEP(DECODE_NEWFUNDSREQ_MEMO_UI_STEP_MESSAGE2) { + ui_displayPaginatedText("Interpreting", "the message as Request funds", this_fn); + } + UI_STEP(DECODE_NEWFUNDSREQ_MEMO_UI_STEP_PAYEE_PUBLIC_ADDRESS) { + ui_displayAsciiBufferScreen("Payee public address", + ctx->parsedContent.payee_public_address->data, + ctx->parsedContent.payee_public_address->length, + this_fn); + } + UI_STEP(DECODE_NEWFUNDSREQ_MEMO_UI_STEP_AMOUNT) { + ui_displayAsciiBufferScreen("Amount", + ctx->parsedContent.amount->data, + ctx->parsedContent.amount->length, + this_fn); + } + UI_STEP(DECODE_NEWFUNDSREQ_MEMO_UI_STEP_CHAIN_CODE) { + ui_displayAsciiBufferScreen("Chain code", + ctx->parsedContent.chain_code->data, + ctx->parsedContent.chain_code->length, + this_fn); + } + UI_STEP(DECODE_NEWFUNDSREQ_MEMO_UI_STEP_TOKEN_CODE) { + ui_displayAsciiBufferScreen("Token code", + ctx->parsedContent.token_code->data, + ctx->parsedContent.token_code->length, + this_fn); + } + UI_STEP(DECODE_NEWFUNDSREQ_MEMO_UI_STEP_MEMO) { + ASSERT(ctx->parsedContent.memo != NULL); + ui_displayAsciiBufferScreen("Memo", + ctx->parsedContent.memo->data, + ctx->parsedContent.memo->length, + this_fn); + } + UI_STEP(DECODE_NEWFUNDSREQ_MEMO_UI_STEP_CONFIRM) { + ui_displayPrompt("Confirm", "response", this_fn, dh_respond_with_user_reject); + } + UI_STEP(DECODE_NEWFUNDSREQ_MEMO_UI_STEP_RESPOND) { + io_send_buf(SUCCESS, NULL, 0); + ui_displayBusy(); // needs to happen after I/O + ctx->stage = DECODE_STAGE_SEND_REST; + } + UI_STEP_END(DECODE_NEWFUNDSREQ_MEMO_UI_STEP_INVALID); +} + +enum { + DECODE_NEWFUNDSREQ_HASH_UI_STEP_MESSAGE1 = 250, + DECODE_NEWFUNDSREQ_HASH_UI_STEP_MESSAGE2, + DECODE_NEWFUNDSREQ_HASH_UI_STEP_PAYEE_PUBLIC_ADDRESS, + DECODE_NEWFUNDSREQ_HASH_UI_STEP_AMOUNT, + DECODE_NEWFUNDSREQ_HASH_UI_STEP_CHAIN_CODE, + DECODE_NEWFUNDSREQ_HASH_UI_STEP_TOKEN_CODE, + DECODE_NEWFUNDSREQ_HASH_UI_STEP_HASH, + DECODE_NEWFUNDSREQ_HASH_UI_STEP_OFFLINE_URL, + DECODE_NEWFUNDSREQ_HASH_UI_STEP_CONFIRM, + DECODE_NEWFUNDSREQ_HASH_UI_STEP_RESPOND, + DECODE_NEWFUNDSREQ_HASH_UI_STEP_INVALID, +}; + +static void decodeNewfundsreqHash_ui_runStep() { + TRACE("UI step %d", ctx->ui_step); + ui_callback_fn_t *this_fn = decodeNewfundsreqHash_ui_runStep; + + UI_STEP_BEGIN(ctx->ui_step, this_fn); + + UI_STEP(DECODE_NEWFUNDSREQ_HASH_UI_STEP_MESSAGE1) { + ui_displayPaginatedText("Decrypt content", "", this_fn); + } + UI_STEP(DECODE_NEWFUNDSREQ_HASH_UI_STEP_MESSAGE2) { + ui_displayPaginatedText("Interpreting", "the message as Request funds", this_fn); + } + UI_STEP(DECODE_NEWFUNDSREQ_HASH_UI_STEP_PAYEE_PUBLIC_ADDRESS) { + ui_displayAsciiBufferScreen("Payee public address", + ctx->parsedContent.payee_public_address->data, + ctx->parsedContent.payee_public_address->length, + this_fn); + } + UI_STEP(DECODE_NEWFUNDSREQ_HASH_UI_STEP_AMOUNT) { + ui_displayAsciiBufferScreen("Amount", + ctx->parsedContent.amount->data, + ctx->parsedContent.amount->length, + this_fn); + } + UI_STEP(DECODE_NEWFUNDSREQ_HASH_UI_STEP_CHAIN_CODE) { + ui_displayAsciiBufferScreen("Chain code", + ctx->parsedContent.chain_code->data, + ctx->parsedContent.chain_code->length, + this_fn); + } + UI_STEP(DECODE_NEWFUNDSREQ_HASH_UI_STEP_TOKEN_CODE) { + ui_displayAsciiBufferScreen("Token code", + ctx->parsedContent.token_code->data, + ctx->parsedContent.token_code->length, + this_fn); + } + UI_STEP(DECODE_NEWFUNDSREQ_HASH_UI_STEP_HASH) { + ASSERT(ctx->parsedContent.hash != NULL); + ui_displayAsciiBufferScreen("Hash", + ctx->parsedContent.hash->data, + ctx->parsedContent.hash->length, + this_fn); + } + UI_STEP(DECODE_NEWFUNDSREQ_HASH_UI_STEP_OFFLINE_URL) { + ASSERT(ctx->parsedContent.offline_url != NULL); + ui_displayAsciiBufferScreen("Offline URL", + ctx->parsedContent.offline_url->data, + ctx->parsedContent.offline_url->length, + this_fn); + } + UI_STEP(DECODE_NEWFUNDSREQ_HASH_UI_STEP_CONFIRM) { + ui_displayPrompt("Confirm", "response", this_fn, dh_respond_with_user_reject); + } + UI_STEP(DECODE_NEWFUNDSREQ_HASH_UI_STEP_RESPOND) { + io_send_buf(SUCCESS, NULL, 0); + ui_displayBusy(); // needs to happen after I/O + ctx->stage = DECODE_STAGE_SEND_REST; + } + UI_STEP_END(DECODE_NEWFUNDSREQ_HASH_UI_STEP_INVALID); +} + +// Parse newfundsreq data +static void decodeNewfundsreqUIFlow() { + ASSERT(ctx->ui_step == UI_STEP_NONE); // make sure no ui state machine is running + + explicit_bzero(&ctx->parsedContent, SIZEOF(ctx->parsedContent)); + size_t read = 0; + readStringWithLength(&read, &ctx->parsedContent.payee_public_address); + readStringWithLength(&read, &ctx->parsedContent.amount); + readStringWithLength(&read, &ctx->parsedContent.chain_code); + readStringWithLength(&read, &ctx->parsedContent.token_code); + readOptionalStringWithLength(&read, &ctx->parsedContent.memo); + readOptionalStringWithLength(&read, &ctx->parsedContent.hash); + readOptionalStringWithLength(&read, &ctx->parsedContent.offline_url); + VALIDATE(read == ctx->bufferLen, ERR_INVALID_DATA); + + if (ctx->parsedContent.memo != NULL && ctx->parsedContent.hash == NULL && + ctx->parsedContent.offline_url == NULL) { + ctx->ui_step = DECODE_NEWFUNDSREQ_MEMO_UI_STEP_MESSAGE1; + decodeNewfundsreqMemo_ui_runStep(); + } else if (ctx->parsedContent.memo == NULL && ctx->parsedContent.hash != NULL && + ctx->parsedContent.offline_url != NULL) { + ctx->ui_step = DECODE_NEWFUNDSREQ_HASH_UI_STEP_MESSAGE1; + decodeNewfundsreqHash_ui_runStep(); + + } else { + THROW(ERR_INVALID_DATA); + } +} + +// ============================== RECORDOBT state machine ============================== + +enum { + DECODE_RECORDOBT_MEMO_UI_STEP_MESSAGE1 = 300, + DECODE_RECORDOBT_MEMO_UI_STEP_MESSAGE2, + DECODE_RECORDOBT_MEMO_UI_STEP_PAYEE_PUBLIC_ADDRESS, + DECODE_RECORDOBT_MEMO_UI_STEP_PAYER_PUBLIC_ADDRESS, + DECODE_RECORDOBT_MEMO_UI_STEP_AMOUNT, + DECODE_RECORDOBT_MEMO_UI_STEP_CHAIN_CODE, + DECODE_RECORDOBT_MEMO_UI_STEP_TOKEN_CODE, + DECODE_RECORDOBT_MEMO_UI_STEP_STATUS, + DECODE_RECORDOBT_MEMO_UI_STEP_OBT_ID, + DECODE_RECORDOBT_MEMO_UI_STEP_MEMO, + DECODE_RECORDOBT_MEMO_UI_STEP_CONFIRM, + DECODE_RECORDOBT_MEMO_UI_STEP_RESPOND, + DECODE_RECORDOBT_MEMO_UI_STEP_INVALID, +}; + +static void decodeRecordobtMemo_ui_runStep() { + TRACE("UI step %d", ctx->ui_step); + ui_callback_fn_t *this_fn = decodeRecordobtMemo_ui_runStep; + + UI_STEP_BEGIN(ctx->ui_step, this_fn); + + UI_STEP(DECODE_RECORDOBT_MEMO_UI_STEP_MESSAGE1) { + ui_displayPaginatedText("Decrypt content", "", this_fn); + } + UI_STEP(DECODE_RECORDOBT_MEMO_UI_STEP_MESSAGE2) { + ui_displayPaginatedText("Interpreting", + "the message as Record other blockchain transaction metadata", + this_fn); + } + UI_STEP(DECODE_RECORDOBT_MEMO_UI_STEP_PAYEE_PUBLIC_ADDRESS) { + ui_displayAsciiBufferScreen("Payee public address", + ctx->parsedContent.payee_public_address->data, + ctx->parsedContent.payee_public_address->length, + this_fn); + } + UI_STEP(DECODE_RECORDOBT_MEMO_UI_STEP_PAYER_PUBLIC_ADDRESS) { + ui_displayAsciiBufferScreen("Payer public address", + ctx->parsedContent.payer_public_address->data, + ctx->parsedContent.payer_public_address->length, + this_fn); + } + UI_STEP(DECODE_RECORDOBT_MEMO_UI_STEP_AMOUNT) { + ui_displayAsciiBufferScreen("Amount", + ctx->parsedContent.amount->data, + ctx->parsedContent.amount->length, + this_fn); + } + UI_STEP(DECODE_RECORDOBT_MEMO_UI_STEP_CHAIN_CODE) { + ui_displayAsciiBufferScreen("Chain code", + ctx->parsedContent.chain_code->data, + ctx->parsedContent.chain_code->length, + this_fn); + } + UI_STEP(DECODE_RECORDOBT_MEMO_UI_STEP_TOKEN_CODE) { + ui_displayAsciiBufferScreen("Token code", + ctx->parsedContent.token_code->data, + ctx->parsedContent.token_code->length, + this_fn); + } + UI_STEP(DECODE_RECORDOBT_MEMO_UI_STEP_STATUS) { + ui_displayAsciiBufferScreen("Status", + ctx->parsedContent.status->data, + ctx->parsedContent.status->length, + this_fn); + } + UI_STEP(DECODE_RECORDOBT_MEMO_UI_STEP_OBT_ID) { + ui_displayAsciiBufferScreen("Obt ID", + ctx->parsedContent.obt_id->data, + ctx->parsedContent.obt_id->length, + this_fn); + } + UI_STEP(DECODE_RECORDOBT_MEMO_UI_STEP_MEMO) { + ASSERT(ctx->parsedContent.memo != NULL); + ui_displayAsciiBufferScreen("Memo", + ctx->parsedContent.memo->data, + ctx->parsedContent.memo->length, + this_fn); + } + UI_STEP(DECODE_RECORDOBT_MEMO_UI_STEP_CONFIRM) { + ui_displayPrompt("Confirm", "response", this_fn, dh_respond_with_user_reject); + } + UI_STEP(DECODE_RECORDOBT_MEMO_UI_STEP_RESPOND) { + io_send_buf(SUCCESS, NULL, 0); + ui_displayBusy(); // needs to happen after I/O + ctx->stage = DECODE_STAGE_SEND_REST; + } + UI_STEP_END(DECODE_RECORDOBT_MEMO_UI_STEP_INVALID); +} + +enum { + DECODE_RECORDOBT_HASH_UI_STEP_MESSAGE1 = 350, + DECODE_RECORDOBT_HASH_UI_STEP_MESSAGE2, + DECODE_RECORDOBT_HASH_UI_STEP_PAYEE_PUBLIC_ADDRESS, + DECODE_RECORDOBT_HASH_UI_STEP_PAYER_PUBLIC_ADDRESS, + DECODE_RECORDOBT_HASH_UI_STEP_AMOUNT, + DECODE_RECORDOBT_HASH_UI_STEP_CHAIN_CODE, + DECODE_RECORDOBT_HASH_UI_STEP_TOKEN_CODE, + DECODE_RECORDOBT_HASH_UI_STEP_STATUS, + DECODE_RECORDOBT_HASH_UI_STEP_OBT_ID, + DECODE_RECORDOBT_HASH_UI_STEP_HASH, + DECODE_RECORDOBT_HASH_UI_STEP_OFFLINE_URL, + DECODE_RECORDOBT_HASH_UI_STEP_CONFIRM, + DECODE_RECORDOBT_HASH_UI_STEP_RESPOND, + DECODE_RECORDOBT_HASH_UI_STEP_INVALID, +}; + +static void decodeRecordobtHash_ui_runStep() { + TRACE("UI step %d", ctx->ui_step); + ui_callback_fn_t *this_fn = decodeRecordobtHash_ui_runStep; + + UI_STEP_BEGIN(ctx->ui_step, this_fn); + + UI_STEP(DECODE_RECORDOBT_HASH_UI_STEP_MESSAGE1) { + ui_displayPaginatedText("Decrypt content", "", this_fn); + } + UI_STEP(DECODE_RECORDOBT_HASH_UI_STEP_MESSAGE2) { + ui_displayPaginatedText("Interpreting", + "the message as Record other blockchain transaction metadata", + this_fn); + } + UI_STEP(DECODE_RECORDOBT_HASH_UI_STEP_PAYEE_PUBLIC_ADDRESS) { + ui_displayAsciiBufferScreen("Payee public address", + ctx->parsedContent.payee_public_address->data, + ctx->parsedContent.payee_public_address->length, + this_fn); + } + UI_STEP(DECODE_RECORDOBT_HASH_UI_STEP_PAYER_PUBLIC_ADDRESS) { + ui_displayAsciiBufferScreen("Payer public address", + ctx->parsedContent.payer_public_address->data, + ctx->parsedContent.payer_public_address->length, + this_fn); + } + UI_STEP(DECODE_RECORDOBT_HASH_UI_STEP_AMOUNT) { + ui_displayAsciiBufferScreen("Amount", + ctx->parsedContent.amount->data, + ctx->parsedContent.amount->length, + this_fn); + } + UI_STEP(DECODE_RECORDOBT_HASH_UI_STEP_CHAIN_CODE) { + ui_displayAsciiBufferScreen("Chain code", + ctx->parsedContent.chain_code->data, + ctx->parsedContent.chain_code->length, + this_fn); + } + UI_STEP(DECODE_RECORDOBT_HASH_UI_STEP_TOKEN_CODE) { + ui_displayAsciiBufferScreen("Token code", + ctx->parsedContent.token_code->data, + ctx->parsedContent.token_code->length, + this_fn); + } + UI_STEP(DECODE_RECORDOBT_HASH_UI_STEP_STATUS) { + ui_displayAsciiBufferScreen("Status", + ctx->parsedContent.status->data, + ctx->parsedContent.status->length, + this_fn); + } + UI_STEP(DECODE_RECORDOBT_HASH_UI_STEP_OBT_ID) { + ui_displayAsciiBufferScreen("Obt ID", + ctx->parsedContent.obt_id->data, + ctx->parsedContent.obt_id->length, + this_fn); + } + UI_STEP(DECODE_RECORDOBT_HASH_UI_STEP_HASH) { + ASSERT(ctx->parsedContent.hash != NULL); + ui_displayAsciiBufferScreen("Hash", + ctx->parsedContent.hash->data, + ctx->parsedContent.hash->length, + this_fn); + } + UI_STEP(DECODE_RECORDOBT_HASH_UI_STEP_OFFLINE_URL) { + ASSERT(ctx->parsedContent.offline_url != NULL); + ui_displayAsciiBufferScreen("Offline URL", + ctx->parsedContent.offline_url->data, + ctx->parsedContent.offline_url->length, + this_fn); + } + UI_STEP(DECODE_RECORDOBT_HASH_UI_STEP_CONFIRM) { + ui_displayPrompt("Confirm", "response", this_fn, dh_respond_with_user_reject); + } + UI_STEP(DECODE_RECORDOBT_HASH_UI_STEP_RESPOND) { + io_send_buf(SUCCESS, NULL, 0); + ui_displayBusy(); // needs to happen after I/O + ctx->stage = DECODE_STAGE_SEND_REST; + } + UI_STEP_END(DECODE_RECORDOBT_HASH_UI_STEP_INVALID); +} + +// Parse newfundsreq data +static void decodeRecordobtUIFlow() { + ASSERT(ctx->ui_step == UI_STEP_NONE); // make sure no ui state machine is running + + explicit_bzero(&ctx->parsedContent, SIZEOF(ctx->parsedContent)); + size_t read = 0; + readStringWithLength(&read, &ctx->parsedContent.payer_public_address); + readStringWithLength(&read, &ctx->parsedContent.payee_public_address); + readStringWithLength(&read, &ctx->parsedContent.amount); + readStringWithLength(&read, &ctx->parsedContent.chain_code); + readStringWithLength(&read, &ctx->parsedContent.token_code); + readStringWithLength(&read, &ctx->parsedContent.status); + readStringWithLength(&read, &ctx->parsedContent.obt_id); + readOptionalStringWithLength(&read, &ctx->parsedContent.memo); + readOptionalStringWithLength(&read, &ctx->parsedContent.hash); + readOptionalStringWithLength(&read, &ctx->parsedContent.offline_url); + VALIDATE(read == ctx->bufferLen, ERR_INVALID_DATA); + + if (ctx->parsedContent.memo != NULL && ctx->parsedContent.hash == NULL && + ctx->parsedContent.offline_url == NULL) { + ctx->ui_step = DECODE_RECORDOBT_MEMO_UI_STEP_MESSAGE1; + decodeRecordobtMemo_ui_runStep(); + } else if (ctx->parsedContent.memo == NULL && ctx->parsedContent.hash != NULL && + ctx->parsedContent.offline_url != NULL) { + ctx->ui_step = DECODE_RECORDOBT_HASH_UI_STEP_MESSAGE1; + decodeRecordobtHash_ui_runStep(); + + } else { + THROW(ERR_INVALID_DATA); + } +} + +// ============================== MAIN HANDLER ============================== + +void decode_handleAPDU(uint8_t p1, + uint8_t p2, + uint8_t *wireDataBuffer, + size_t wireDataSize, + bool isNewCall) { + TRACE("P1 = 0x%x, P2 = 0x%x, isNewCall = %d", p1, p2, isNewCall); + + if (isNewCall) { + VALIDATE(p1 == DECODE_STAGE_RECEIVE_DATA, ERR_INVALID_STATE); + explicit_bzero(ctx, SIZEOF(*ctx)); + ctx->bufferLen = 0; + ctx->stage = DECODE_STAGE_RECEIVE_DATA; + } + + if (p1 == DECODE_STAGE_RECEIVE_DATA) { + VALIDATE(p2 == P2_UNUSED, ERR_INVALID_REQUEST_PARAMETERS); + CHECK_STAGE(DECODE_STAGE_RECEIVE_DATA); + + // we just append data to the buffer + VALIDATE(wireDataSize + ctx->bufferLen <= SIZEOF(ctx->buffer), ERR_DATA_TOO_LARGE); + memcpy(ctx->buffer + ctx->bufferLen, wireDataBuffer, wireDataSize); + ctx->bufferLen += wireDataSize; + TRACE("Extending buffer by %d to %d", (int) wireDataSize, (int) ctx->bufferLen); + + // respond ok + io_send_buf(SUCCESS, NULL, 0); + ui_displayBusy(); // needs to happen after I/O + return; + } else if (p1 == DECODE_STAGE_DECODE) { + CHECK_STAGE(DECODE_STAGE_RECEIVE_DATA); + ctx->stage = DECODE_STAGE_DECODE; + VALIDATE(p2 == P2_NEWFUNDSREQ || p2 == P2_RECORDOBT, ERR_INVALID_REQUEST_PARAMETERS); + + // parse other pubkey and derivation path + VALIDATE(wireDataSize >= PUBKEY_LENGTH + 1, ERR_INVALID_DATA); + { + cx_err_t err = cx_ecfp_init_public_key_no_throw(CX_CURVE_SECP256K1, + wireDataBuffer, + PUBKEY_LENGTH, + &ctx->otherPubKey); + VALIDATE(err == CX_OK, ERR_INVALID_DATA); + } + size_t parsedSize = bip44_parseFromWire(&ctx->pathSpec, + wireDataBuffer + PUBKEY_LENGTH, + wireDataSize - PUBKEY_LENGTH); + VALIDATE(parsedSize == wireDataSize - PUBKEY_LENGTH, ERR_INVALID_DATA); + + // Security policy for DH decode + ENSURE_NOT_DENIED(policyForDecodeDHDecode(&ctx->pathSpec)); + + // Decode DH buffer inplace + TRACE("Decoding DH"); + ASSERT(ctx->bufferLen <= SIZEOF(ctx->buffer)); + TRACE_BUFFER(ctx->buffer, ctx->bufferLen); + ctx->bufferLen = dh_decode(&ctx->pathSpec, &ctx->otherPubKey, ctx->buffer, ctx->bufferLen); + ctx->messageDecodedMagic = DECODING_FINISHED_MAGIC; + ctx->bufferSentLen = 0; + TRACE_BUFFER(ctx->buffer, ctx->bufferLen); + + // Call parsing function + // These functions set stage to DECODE_STAGE_SEND_REST on success + if (p2 == P2_NEWFUNDSREQ) { + decodeNewfundsreqUIFlow(); + return; + } else if (p2 == P2_RECORDOBT) { + decodeRecordobtUIFlow(); + return; + } + + THROW(ERR_INVALID_REQUEST_PARAMETERS); + } else if (p1 == DECODE_STAGE_SEND_REST) { + VALIDATE(p2 == P2_UNUSED, ERR_INVALID_REQUEST_PARAMETERS); + VALIDATE(wireDataSize == 0, ERR_INVALID_REQUEST_PARAMETERS); + + CHECK_STAGE(DECODE_STAGE_SEND_REST); + VALIDATE(ctx->messageDecodedMagic == DECODING_FINISHED_MAGIC, ERR_INVALID_STATE); + ASSERT(ctx->bufferLen <= SIZEOF(ctx->buffer)); + ASSERT(ctx->bufferSentLen <= ctx->bufferLen); + + uint16_t toSend = ctx->bufferLen - ctx->bufferSentLen; + uint16_t toSendTotal = ctx->bufferLen; + if (toSend > MAX_SEND_FIRST_MESSAGE) { + toSend = MAX_SEND_FIRST_MESSAGE; + } + + TRACE("Sent: %d, toSend: %d, Total %d", ctx->bufferSentLen, toSend, toSendTotal); + ASSERT(SIZEOF(G_io_apdu_buffer) >= SIZEOF(toSendTotal) + 1 + toSend); + memcpy(G_io_apdu_buffer, &toSendTotal, SIZEOF(toSendTotal)); + G_io_apdu_buffer[SIZEOF(toSendTotal)] = (uint8_t) toSend; + memmove(G_io_apdu_buffer + SIZEOF(toSendTotal) + 1, + ctx->buffer + ctx->bufferSentLen, + toSend); + io_send_buf(SUCCESS, G_io_apdu_buffer, SIZEOF(toSendTotal) + 1 + toSend); + // We finish the apdu sequence + ui_displayBusy(); // needs to happen after I/O + ctx->bufferSentLen += toSend; + + if (ctx->bufferSentLen == ctx->bufferLen) { + ctx->stage = DECODE_STAGE_NONE; + ui_idle(); // we are done with this tx + } + return; + } + + THROW(ERR_INVALID_REQUEST_PARAMETERS); +} diff --git a/src/decodeDH.h b/src/decodeDH.h new file mode 100644 index 00000000..7e68ba05 --- /dev/null +++ b/src/decodeDH.h @@ -0,0 +1,55 @@ +#ifndef H_FIO_APP_DECODE_DH +#define H_FIO_APP_DECODE_DH + +#include "handlers.h" +#include "bip44.h" +#include "keyDerivation.h" + +#define MAX_MESSAGE_LENGTH 324 + +typedef enum { + DECODE_STAGE_NONE = 0, + DECODE_STAGE_RECEIVE_DATA = 1, + DECODE_STAGE_DECODE = 2, + DECODE_STAGE_SEND_REST = 3, +} decode_stage_t; + +typedef struct { + uint8_t length; + uint8_t data[]; +} string_with_length_t; + +// These pointers will point to decoded message where strings are stored in string_with_length_t +// format +typedef struct { + string_with_length_t *payee_public_address; + string_with_length_t *payer_public_address; + string_with_length_t *amount; + string_with_length_t *chain_code; + string_with_length_t *token_code; + string_with_length_t *status; + string_with_length_t *obt_id; + string_with_length_t *memo; + string_with_length_t *hash; + string_with_length_t *offline_url; +} parsed_context_t; + +typedef struct { + decode_stage_t stage; + + bip44_path_t pathSpec; + public_key_t otherPubKey; + uint16_t bufferLen; + uint16_t bufferSentLen; + uint8_t buffer[MAX_MESSAGE_LENGTH]; + + uint16_t messageDecodedMagic; + + int ui_step; + + parsed_context_t parsedContent; +} ins_decode_context_t; + +handler_fn_t decode_handleAPDU; + +#endif // H_FIO_DECODE_DH diff --git a/src/diffieHellman.c b/src/diffieHellman.c new file mode 100644 index 00000000..667fd134 --- /dev/null +++ b/src/diffieHellman.c @@ -0,0 +1,377 @@ +#include "diffieHellman.h" +#include "os_math.h" + +//---------------------------- UTILS --------------------------------------- + +static const uint8_t BASE64[64] = {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', + 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', + 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', + 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', + '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '+', '/'}; + +static void base64EncBlock(uint8_t in[3], uint8_t out[4]) { + out[0] = BASE64[(in[0] / 0x04) & 0x3F]; + out[1] = BASE64[(in[0] * 0x10 + in[1] / 0x10) & 0x3F]; + out[2] = BASE64[(in[1] * 0x04 + in[2] / 0x40) & 0x3F]; + out[3] = BASE64[in[2] & 0x3F]; +} + +// Returns number of bytes written +// Move unencoded part of inBuffer to the beginning and sets inSize accordingly +static size_t base64EncWholeBlocks(uint8_t* inBuffer, + uint8_t* inSize, + uint8_t* outBuffer, + size_t outSize) { + uint8_t processedBlocks = 0; + while (1) { + // We cannot process whole block + if (*inSize < BASE64_IN_BLOCK_SIZE * (processedBlocks + 1)) { + // move unread inBuffer data to beginning and set new inSize + *inSize -= BASE64_IN_BLOCK_SIZE * processedBlocks; + memmove(inBuffer, inBuffer + BASE64_IN_BLOCK_SIZE * processedBlocks, *inSize); + break; + } + + // process one block, inBuffer + BASE64_IN_BLOCK_SIZE*processedBlocks and next two values + // exist + ASSERT(outSize >= BASE64_OUT_BLOCK_SIZE * (processedBlocks + 1)); + base64EncBlock(inBuffer + BASE64_IN_BLOCK_SIZE * processedBlocks, + outBuffer + BASE64_OUT_BLOCK_SIZE * processedBlocks); + processedBlocks++; + } + return BASE64_OUT_BLOCK_SIZE * processedBlocks; +} + +static size_t processDHOneBlockFromCache(dh_context_t* ctx, + const dh_aes_key_t* aes_key, + uint8_t* outBuffer, + size_t outSize) { + ASSERT(ctx->cacheLength == CX_AES_BLOCK_SIZE); + STATIC_ASSERT(SIZEOF(ctx->IV) == CX_AES_BLOCK_SIZE, "Incompatible IV size"); + + // We work in CBC mode + // 1. IV xor plaintext + for (size_t i = 0; i < CX_AES_BLOCK_SIZE; i++) { + ctx->cache[i] ^= ctx->IV[i]; + } + + // 2. encrypt the result to obtain cyphertext 3. use cyphertext as new IV + cx_err_t err = cx_aes_enc_block(&aes_key->aesKey, ctx->cache, ctx->IV); + ASSERT(err == CX_OK); + + // append cyphertext (not base64 encrypted) to hmac and clear cache + err = cx_hmac_update((cx_hmac_t*) &ctx->hmacCtx, ctx->IV, CX_AES_BLOCK_SIZE); + ASSERT(err == CX_OK); + explicit_bzero(ctx->cache, SIZEOF(ctx->cache)); + ctx->cacheLength = 0; + + // base64 encode + ASSERT(ctx->base64EncodingCacheLen < BASE64_IN_BLOCK_SIZE); + STATIC_ASSERT(SIZEOF(ctx->base64EncodingCache) >= BASE64_IN_BLOCK_SIZE + CX_AES_BLOCK_SIZE, + "Cache too small"); + memmove(ctx->base64EncodingCache + ctx->base64EncodingCacheLen, ctx->IV, CX_AES_BLOCK_SIZE); + ctx->base64EncodingCacheLen += CX_AES_BLOCK_SIZE; + return base64EncWholeBlocks(ctx->base64EncodingCache, + &ctx->base64EncodingCacheLen, + outBuffer, + outSize); +} + +//---------------------------- DH ENCODING --------------------------------------- + +__noinline_due_to_stack__ void dh_init_aes_key(dh_aes_key_t* dhKey, + const bip44_path_t* pathSpec, + const public_key_t* publicKey) { + TRACE_STACK_USAGE(); + private_key_t privateKey; + unsigned char basicSecret[32]; + unsigned char secret[SHA_512_SIZE]; + uint8_t K[SHA_512_SIZE]; + + TRACE("dh_init_aesKey"); + BEGIN_TRY { + TRY { + TRACE_STACK_USAGE(); + derivePrivateKey(pathSpec, &privateKey); + + // this is how it is done... + cx_err_t err = cx_ecdh_no_throw(&privateKey, + CX_ECDH_X, + publicKey->W, + publicKey->W_len, + basicSecret, + SIZEOF(basicSecret)); + ASSERT(err == CX_OK); + sha_512_hash(basicSecret, SIZEOF(basicSecret), secret, SIZEOF(secret)); + sha_512_hash(secret, SIZEOF(secret), K, SIZEOF(K)); + + // First DH_AES_SECRET_SIZE bytes are used to compute shared secret, then DH_KM_SIZE are + // used as Km for HMAC calculation + STATIC_ASSERT(SIZEOF(K) == DH_AES_SECRET_SIZE + DH_KM_SIZE, "Incompatible types"); + cx_aes_init_key_no_throw(K, DH_AES_SECRET_SIZE, &dhKey->aesKey); + STATIC_ASSERT(SIZEOF(dhKey->km) == DH_KM_SIZE, "Incompatible types"); + memmove(dhKey->km, K + DH_AES_SECRET_SIZE, DH_KM_SIZE); + dhKey->initialized_magic = DH_AES_KEY_INITIALIZED_MAGIC; + } + FINALLY { + explicit_bzero(&privateKey, sizeof(privateKey)); + explicit_bzero(basicSecret, SIZEOF(basicSecret)); + explicit_bzero(secret, SIZEOF(secret)); + explicit_bzero(K, SIZEOF(K)); + } + } + END_TRY; +} + +__noinline_due_to_stack__ size_t dh_encode_init(dh_context_t* ctx, + const dh_aes_key_t* aes_key, + const uint8_t* iv, + size_t ivSize, + uint8_t* outBuffer, + size_t outSize) { + TRACE_STACK_USAGE(); + TRACE("dh_encode_init"); + + ASSERT(ivSize == SIZEOF(ctx->IV)); + ASSERT(aes_key->initialized_magic == DH_AES_KEY_INITIALIZED_MAGIC); + + ctx->cacheLength = 0; + explicit_bzero(ctx->cache, SIZEOF(ctx->cache)); + ctx->base64EncodingCacheLen = 0; + explicit_bzero(ctx->base64EncodingCache, SIZEOF(ctx->base64EncodingCache)); + memcpy(ctx->IV, iv, SIZEOF(ctx->IV)); + + explicit_bzero(&ctx->hmacCtx, SIZEOF(ctx->hmacCtx)); + cx_err_t err = cx_hmac_sha256_init_no_throw(&ctx->hmacCtx, aes_key->km, SIZEOF(aes_key->km)); + ASSERT(err == CX_OK); + err = cx_hmac_update((cx_hmac_t*) &ctx->hmacCtx, iv, ivSize); + ASSERT(err == CX_OK); + + ctx->initialized_magic = HASH_CONTEXT_INITIALIZED_MAGIC; + + // Base64 We encode IV + STATIC_ASSERT(SIZEOF(ctx->base64EncodingCache) >= SIZEOF(ctx->IV), "Cache too small"); + memcpy(ctx->base64EncodingCache, ctx->IV, SIZEOF(ctx->IV)); + ctx->base64EncodingCacheLen = SIZEOF(ctx->IV); + return base64EncWholeBlocks(ctx->base64EncodingCache, + &ctx->base64EncodingCacheLen, + outBuffer, + outSize); +} + +__noinline_due_to_stack__ size_t dh_encode_append(dh_context_t* ctx, + const dh_aes_key_t* aes_key, + const uint8_t* inBuffer, + size_t inSize, + uint8_t* outBuffer, + size_t outSize) { + TRACE("dh_encode_append"); + TRACE_STACK_USAGE(); + + ASSERT(inSize < BUFFER_SIZE_PARANOIA); + ASSERT(ctx->initialized_magic == HASH_CONTEXT_INITIALIZED_MAGIC); + ASSERT(aes_key->initialized_magic == DH_AES_KEY_INITIALIZED_MAGIC); + ASSERT(ctx->cacheLength < CX_AES_BLOCK_SIZE); + STATIC_ASSERT(SIZEOF(ctx->cache) >= CX_AES_BLOCK_SIZE, "dh_context_t->cache too small"); + + size_t processedInput = 0; + size_t written = 0; + while (1) { + // fill ctx->buffer + size_t to_read = MIN(CX_AES_BLOCK_SIZE - ctx->cacheLength, inSize - processedInput); + memcpy(ctx->cache + ctx->cacheLength, inBuffer + processedInput, to_read); + ctx->cacheLength += to_read; + processedInput += to_read; + + // if block is only partially filled, we finish encoding, the data was read to cache + // this means that there was not enough input to fill the block + if (ctx->cacheLength < CX_AES_BLOCK_SIZE) { + TRACE("Block not full"); + break; + } + + written += processDHOneBlockFromCache(ctx, aes_key, outBuffer + written, outSize - written); + } + + TRACE("Leaving dh_encode_append, written: %d", (int) written); + return written; +} + +__noinline_due_to_stack__ size_t dh_encode_finalize(dh_context_t* ctx, + const dh_aes_key_t* aes_key, + uint8_t* outBuffer, + size_t outSize) { + TRACE("dh_encode_finalize"); + + ASSERT(ctx->initialized_magic == HASH_CONTEXT_INITIALIZED_MAGIC); + ASSERT(aes_key->initialized_magic == DH_AES_KEY_INITIALIZED_MAGIC); + ASSERT(ctx->cacheLength < CX_AES_BLOCK_SIZE); + TRACE("Cache length %d", (int) ctx->cacheLength); + TRACE_BUFFER(ctx->cache, ctx->cacheLength); + + // fill the last cache block with integers equal to number of elements missing + // if the next block is empty we create a block full of 0x10 (CX_AES_BLOCK_SIZE) + STATIC_ASSERT(SIZEOF(ctx->cache) >= CX_AES_BLOCK_SIZE, "dh_context_t->cache too small"); + uint8_t fillValue = CX_AES_BLOCK_SIZE - ctx->cacheLength; + for (size_t i = ctx->cacheLength; i < CX_AES_BLOCK_SIZE; i++) { + ctx->cache[i] = fillValue; + } + ctx->cacheLength = CX_AES_BLOCK_SIZE; + + uint8_t written = 0; + written += processDHOneBlockFromCache(ctx, aes_key, outBuffer + written, outSize - written); + + // finalize hmac and append base64 encode it and append to cyphertext + size_t hmacOutSize = SIZEOF(ctx->base64EncodingCache) - ctx->base64EncodingCacheLen; + cx_err_t err = cx_hmac_final((cx_hmac_t*) &ctx->hmacCtx, + ctx->base64EncodingCache + ctx->base64EncodingCacheLen, + &hmacOutSize); + ASSERT(err == CX_OK); + ASSERT(hmacOutSize == DH_HMAC_SIZE); + ctx->base64EncodingCacheLen += DH_HMAC_SIZE; + written += base64EncWholeBlocks(ctx->base64EncodingCache, + &ctx->base64EncodingCacheLen, + outBuffer + written, + outSize - written); + + // the last base64 encoding block + uint8_t lastBlock[3] = {0, 0, 0}; + switch (ctx->base64EncodingCacheLen) { + case 0: + break; + case 1: + ASSERT(outSize >= written + BASE64_OUT_BLOCK_SIZE); + lastBlock[0] = ctx->base64EncodingCache[0]; + base64EncBlock(lastBlock, outBuffer + written); + *(outBuffer + written + 2) = '='; + *(outBuffer + written + 3) = '='; + written += BASE64_OUT_BLOCK_SIZE; + break; + case 2: + ASSERT(outSize >= written + BASE64_OUT_BLOCK_SIZE); + lastBlock[0] = ctx->base64EncodingCache[0]; + lastBlock[1] = ctx->base64EncodingCache[1]; + base64EncBlock(lastBlock, outBuffer + written); + *(outBuffer + written + 3) = '='; + written += BASE64_OUT_BLOCK_SIZE; + break; + default: + ASSERT(false); + } + return written; +} + +__noinline_due_to_stack__ size_t dh_encode(bip44_path_t* pathSpec, + public_key_t* publicKey, + const uint8_t* iv, + size_t ivSize, + const uint8_t* inBuffer, + size_t inSize, + uint8_t* outBuffer, + size_t outSize) { + dh_aes_key_t key; + TRACE("dh_encode"); + + ASSERT(inSize < BUFFER_SIZE_PARANOIA); + + size_t written = 0; + + BEGIN_TRY { + TRY { + TRACE_STACK_USAGE(); + dh_init_aes_key(&key, pathSpec, publicKey); + + dh_context_t ctx; + written += + dh_encode_init(&ctx, &key, iv, ivSize, outBuffer + written, outSize - written); + TRACE("Init: written %d", written); + TRACE_BUFFER(outBuffer, written); + written += dh_encode_append(&ctx, + &key, + inBuffer, + inSize, + outBuffer + written, + outSize - written); + TRACE("Append: written %d", written); + TRACE_BUFFER(outBuffer, written); + written += dh_encode_finalize(&ctx, &key, outBuffer + written, outSize - written); + TRACE("Finalize: written %d", written); + TRACE_BUFFER(outBuffer, written); + } + FINALLY { + explicit_bzero(&key, sizeof(key)); + } + } + END_TRY; + + return written; +} + +__noinline_due_to_stack__ static void validateHmac(dh_aes_key_t* aes_key, + const uint8_t* buffer, + size_t inSize) { + VALIDATE(inSize >= DH_AES_IV_SIZE + CX_AES_BLOCK_SIZE + DH_HMAC_SIZE, ERR_INVALID_DATA); + + cx_hmac_sha256_t hmac; + cx_err_t err = cx_hmac_sha256_init_no_throw(&hmac, aes_key->km, SIZEOF(aes_key->km)); + ASSERT(err == CX_OK); + err = cx_hmac_update((cx_hmac_t*) &hmac, buffer, inSize - DH_HMAC_SIZE); + ASSERT(err == CX_OK); + uint8_t hmacBuf[DH_HMAC_SIZE]; + size_t outLen = SIZEOF(hmacBuf); + err = cx_hmac_final((cx_hmac_t*) &hmac, hmacBuf, &outLen); + ASSERT(err == CX_OK); + ASSERT(outLen == DH_HMAC_SIZE); + VALIDATE(!memcmp(hmacBuf, buffer + inSize - DH_HMAC_SIZE, DH_HMAC_SIZE), ERR_INVALID_HMAC); +} + +__noinline_due_to_stack__ size_t dh_decode(bip44_path_t* pathSpec, + public_key_t* publicKey, + uint8_t* buffer, + size_t inSize) { + VALIDATE(inSize >= DH_AES_IV_SIZE + CX_AES_BLOCK_SIZE + DH_HMAC_SIZE, ERR_INVALID_DATA); + VALIDATE(inSize % CX_AES_BLOCK_SIZE == 0, ERR_INVALID_DATA); + + size_t read = + DH_AES_IV_SIZE; // we do not decode IV, this also creates a buffer so we can decode inplace + size_t written = 0; + dh_aes_key_t aes_key; + BEGIN_TRY { + TRY { + dh_init_aes_key(&aes_key, pathSpec, publicKey); + + // validate HMAC + validateHmac(&aes_key, buffer, inSize); + TRACE("HMAC validation succesfull."); + + // initiate DH decryptions + uint8_t IV[CX_AES_BLOCK_SIZE]; + memcpy(IV, buffer, SIZEOF(IV)); + + for (; read < inSize - DH_HMAC_SIZE; read += CX_AES_BLOCK_SIZE) { + // 1. Decode next block + ASSERT(read - written == CX_AES_BLOCK_SIZE); + cx_err_t err = cx_aes_dec_block(&aes_key.aesKey, buffer + read, buffer + written); + ASSERT(err == CX_OK); + // 2. XOR with IV + for (size_t i = 0; i < CX_AES_BLOCK_SIZE; i++) { + buffer[written + i] ^= IV[i]; + } + // 3. Cyphertext is the new IV ... we do not care that we copy part of HMAC in last + // iteration here + memcpy(IV, buffer + read, CX_AES_BLOCK_SIZE); + written += CX_AES_BLOCK_SIZE; + } + } + FINALLY { + explicit_bzero(&aes_key, sizeof(aes_key)); + } + } + END_TRY; + + TRACE("Finishing decription, written:%d, lastCharacter:%d", written, buffer[written - 1]); + // Calculate resulting length based on the last decoded value + ASSERT(written != 0); + ASSERT(written >= buffer[written - 1]); + return written - buffer[written - 1]; +} diff --git a/src/diffieHellman.h b/src/diffieHellman.h new file mode 100644 index 00000000..4006ed2c --- /dev/null +++ b/src/diffieHellman.h @@ -0,0 +1,102 @@ +#ifndef H_FIO_DIFFIE_HELLMAN +#define H_FIO_DIFFIE_HELLMAN + +#include "common.h" +#include "ox_aes.h" +#include "exceptions.h" +#include "bip44.h" +#include "keyDerivation.h" +#include "hash.h" + +// This file provides functions for Diffie-Hellmann encoding and decoding + +// Note: We would like to make this static const but +// it does not play well with inline functions +enum { + DH_CONTEXT_INITIALIZED_MAGIC = 12345, + DH_AES_KEY_INITIALIZED_MAGIC = 12346, +}; + +#define DH_AES_IV_SIZE 16 +#define DH_KM_SIZE 32 +#define DH_AES_SECRET_SIZE 32 +#define DH_HMAC_SIZE 32 + +#define BASE64_IN_BLOCK_SIZE 3 +#define BASE64_OUT_BLOCK_SIZE 4 + +// Context does not contain secrets. hmacCtx contains half of SHA-512 hash, but this is of no use +// without aesKey. +typedef struct { + uint16_t initialized_magic; + uint8_t IV[DH_AES_IV_SIZE]; + uint8_t cacheLength; + uint8_t cache[CX_AES_BLOCK_SIZE]; + uint8_t base64EncodingCacheLen; + uint8_t base64EncodingCache[BASE64_IN_BLOCK_SIZE + DH_HMAC_SIZE]; + cx_hmac_sha256_t hmacCtx; +} dh_context_t; + +// Aes key is secret shared between us and the second party +typedef struct { + uint16_t initialized_magic; + cx_aes_key_t aesKey; + uint8_t km[DH_KM_SIZE]; +} dh_aes_key_t; + +// You may need to call multiple times if encryption spans multiple APDU's +// You may want to do something like +// APDU1 - dh_init_aes_key, dh_encode_init, dh_encode_append +// APDU2 - dh_init_aes_key, dh_encode_append +// APDU3 - dh_init_aes_key, dh_encode_append, dh_encode_finalize +// Do not forget to guarantee that dh_aes_key_t is zeroes at all times + +__noinline_due_to_stack__ void dh_init_aes_key(dh_aes_key_t* dhKey, + const bip44_path_t* pathSpec, + const public_key_t* publicKey); + +// Output data are base64 encrypted +__noinline_due_to_stack__ size_t dh_encode_init(dh_context_t* ctx, + const dh_aes_key_t* aes_key, + const uint8_t* iv, + size_t ivSize, + uint8_t* outBuffer, + size_t outSize); + +// Output data are base64 encrypted +__noinline_due_to_stack__ size_t dh_encode_append(dh_context_t* ctx, + const dh_aes_key_t* aes_key, + const uint8_t* inBuffer, + size_t inSize, + uint8_t* outBuffer, + size_t outSize); + +// Output data are base64 encrypted +__noinline_due_to_stack__ size_t dh_encode_finalize(dh_context_t* ctx, + const dh_aes_key_t* aes_key, + uint8_t* outBuffer, + size_t outSize); + +// Convenience function to make all in one step +// Output data are base64 encrypted +__noinline_due_to_stack__ size_t dh_encode(bip44_path_t* pathSpec, + public_key_t* publicKey, + const uint8_t* iv, + size_t ivSize, + const uint8_t* inBuffer, + size_t inSize, + uint8_t* outBuffer, + size_t outSize); + +// Inplace decoding function. +// Input data is NOT base64 encrypted +__noinline_due_to_stack__ size_t dh_decode(bip44_path_t* pathSpec, + public_key_t* publicKey, + uint8_t* buffer, + size_t inSize); + +#ifdef DEVEL +__noinline_due_to_stack__ void run_diffieHellman_test(); +#endif // DEVEL + +#endif diff --git a/src/diffieHellmann_test.c b/src/diffieHellmann_test.c new file mode 100644 index 00000000..76d7fd31 --- /dev/null +++ b/src/diffieHellmann_test.c @@ -0,0 +1,344 @@ +#ifdef DEVEL + +#include "diffieHellman.h" +#include "hexUtils.h" +#include "testUtils.h" +#include "utils.h" +#include "bip44.h" +#include "errors.h" +#include "state.h" + +#define HD HARDENED_BIP32 + +// The testcases here were generated using: +// To create shared secret (this creates SharedCipher instance): +// https://github.com/fioprotocol/fiojs/blob/10848a02983a4b5b7f185c90bc96fb78e9ab0a6f/src/encryption-fio.ts#L20 +// For encryption (this is method of SharedCypher): +// https://github.com/fioprotocol/fiojs/blob/10848a02983a4b5b7f185c90bc96fb78e9ab0a6f/src/encryption-fio.ts#L52 +// It was not very convenient to use higher level funtions for this purpose as they depend on fio +// serialization + +__noinline_due_to_stack__ static void pathSpec_init(bip44_path_t* pathSpec, + const uint32_t* pathArray, + uint32_t pathLength) { + pathSpec->length = pathLength; + memmove(pathSpec->path, pathArray, pathLength * 4); +} + +__noinline_due_to_stack__ static void run_dh_encode_tests() { + BEGIN_ASSERT_NOEXCEPT { + TRACE_STACK_USAGE(); + // initializing derivation paths + uint32_t path[] = {HD + 44, HD + 235, HD + 0, 0, 0}; + bip44_path_t pathSpec; + pathSpec_init(&pathSpec, path, 5); + bip44_PRINTF(&pathSpec); + PRINTF("\n"); + + public_key_t publicKey; + const uint8_t publicKeyBuffer[65] = { + 0x04, 0x84, 0xe5, 0x2d, 0xfe, 0xa5, 0x7b, 0x8f, 0x17, 0x87, 0x48, 0x8a, 0x35, + 0x63, 0x74, 0xcd, 0x8e, 0x85, 0x15, 0xb8, 0xad, 0x8d, 0xb3, 0xdd, 0x4f, 0x90, + 0x88, 0xd8, 0xe4, 0x2e, 0xd2, 0xfb, 0x6d, 0x57, 0x1e, 0x88, 0x94, 0xcc, 0xcb, + 0xdb, 0xf1, 0x5e, 0x1b, 0xd8, 0x4f, 0x8b, 0x43, 0x62, 0xf5, 0x2d, 0x1b, 0x5b, + 0x71, 0x2b, 0x97, 0x75, 0xc0, 0xa5, 0x1c, 0xdd, 0x5e, 0xe9, 0xa9, 0xe8, 0xca, + }; + size_t publicKeyLen = 65; + cx_ecfp_init_public_key_no_throw(CX_CURVE_SECP256K1, + publicKeyBuffer, + publicKeyLen, + &publicKey); + + const uint8_t IV[DH_AES_IV_SIZE] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}; + +#define TESTCASE(msgHex_, expectedEncMsg) \ + { \ + const char* msgHex = msgHex_; \ + uint8_t msg[50]; \ + size_t msgLen = decode_hex(msgHex, msg, SIZEOF(msg)); \ + uint8_t encMsg[200]; \ + size_t encMsgLength = dh_encode(&pathSpec, \ + &publicKey, \ + IV, \ + DH_AES_IV_SIZE, \ + msg, \ + msgLen, \ + encMsg, \ + SIZEOF(encMsg)); \ + TRACE_BUFFER(encMsg, encMsgLength); \ + ASSERT(encMsgLength == strlen(expectedEncMsg)); \ + EXPECT_EQ_BYTES(encMsg, expectedEncMsg, strlen(expectedEncMsg)); \ + } + TESTCASE("0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef", + "AAECAwQFBgcICQoLDA0OD5UItJL5bwZ8xy74x8JKwgcjEMTh02vWc3lY8KOgBVdtYLZLjoxzLYk/" + "bNN0yrwLMIgrbuurp69ygm5UsR1IqHBZdK332VerofQo9YrKJaxa"); + + TESTCASE("0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef00", + "AAECAwQFBgcICQoLDA0OD5UItJL5bwZ8xy74x8JKwgcjEMTh02vWc3lY8KOgBVdt+" + "TtaLr71hTLsLS3SHBH9tZDQWlmHQK+P2SYzQ+sdhafmlDwh0lRoLQvcTHRhnqIs"); + + TESTCASE("0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0011", + "AAECAwQFBgcICQoLDA0OD5UItJL5bwZ8xy74x8JKwgcjEMTh02vWc3lY8KOgBVdtK4jF9Qm7cnajL5RZX" + "hls84KwYlmS3RlCEKDlRUEHQagBOhItLt2SM8qj/Ut1+ZRs"); + + TESTCASE( + "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef00112233445566778899aa" + "bbccddee", + "AAECAwQFBgcICQoLDA0OD5UItJL5bwZ8xy74x8JKwgcjEMTh02vWc3lY8KOgBVdt+ZmX+" + "ip0JmWwHDXH1srrwvvRvUR5y4GetFISOg7GNW9AIi9/yM68OluB9kTy91Yp"); + + TESTCASE( + "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef00112233445566778899aa" + "bbccddeeff", + "AAECAwQFBgcICQoLDA0OD5UItJL5bwZ8xy74x8JKwgcjEMTh02vWc3lY8KOgBVdtYKY7MOUtuZP9tT9nugPNCr" + "7YlPVJKaxq3f1wdpcFl6Q6NsUlrR/ENJxpviFxirB7xjkXJmOSfLB1+nd3l+DBxA=="); + + TESTCASE("0123456789abcdef0123456789abcdef0123456789abcdef", + "AAECAwQFBgcICQoLDA0OD5UItJL5bwZ8xy74x8JKwgep9INSMYlu/SPdSUMhBnjaVsV/" + "Jx4eXIRvvwVVn9G3OUBpKtEm9+G1b3GYumJrYoc="); + +#undef TESTCASE + } + END_ASSERT_NOEXCEPT; +} + +__noinline_due_to_stack__ static void run_dh_encode_init_append_finalize_tests() { + BEGIN_ASSERT_NOEXCEPT { + TRACE_STACK_USAGE(); + + // initializing derivation paths + uint32_t path[] = {HD + 44, HD + 235, HD + 0, 0, 2000}; + bip44_path_t pathSpec; + pathSpec_init(&pathSpec, path, 5); + bip44_PRINTF(&pathSpec); + PRINTF("\n"); + + public_key_t publicKey; + { + const char* publicKeyHex = + "0484e52dfea57b8f1787488a356374cd8e8515b8ad8db3dd4f9088d8e42ed2fb6d571e8894cccbdbf1" + "5e1b" + "d84f8b4362f52d1b5b712b9775c0a51cdd5ee9a9e8ca"; + uint8_t publicKeyBuffer[65]; + size_t publicKeyLen = + decode_hex(publicKeyHex, publicKeyBuffer, SIZEOF(publicKeyBuffer)); + ASSERT(publicKeyLen == 65); + cx_ecfp_init_public_key_no_throw(CX_CURVE_SECP256K1, + publicKeyBuffer, + publicKeyLen, + &publicKey); + } + + const uint8_t IV[DH_AES_IV_SIZE] = + {100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100}; + + dh_aes_key_t key; + dh_init_aes_key(&key, &pathSpec, &publicKey); + + uint8_t inBuffer[50]; + uint8_t outBuffer[160]; + const char* inBufferHex = + "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef00112233445566778899aa" + "bbccddeeff"; + size_t inBufferLength = decode_hex(inBufferHex, inBuffer, SIZEOF(inBuffer)); + const char* expected = + "ZGRkZGRkZGRkZGRkZGRkZECnJe7JYjYZ/UIsDOe/" + "llUGwVFl+lJ3Qpxm5u0fLG9kxuEGaN18XnBMEu6iJXmhERjaQhHhN4L/" + "gZPs9AD9BNvPMXpd9H9EnR27den0hCjQqECg6QE5dZrTnSiZDLN/Yg=="; + + size_t outBufferLength = 0; + outBufferLength = dh_encode(&pathSpec, + &publicKey, + IV, + DH_AES_IV_SIZE, + inBuffer, + inBufferLength, + outBuffer, + SIZEOF(outBuffer)); + TRACE_BUFFER(outBuffer, outBufferLength); + ASSERT(outBufferLength == strlen(expected)); + EXPECT_EQ_BYTES(expected, outBuffer, outBufferLength); + + size_t read = 0; + size_t written = 0; + { + TRACE_STACK_USAGE(); + // due to memory limitations we reuse static tx data + dh_context_t* ctx = &instructionState.signTransactionContext.dhContext; + outBufferLength = + dh_encode_init(ctx, &key, IV, SIZEOF(IV), outBuffer, SIZEOF(outBuffer)); + ASSERT(outBufferLength == 20); + EXPECT_EQ_BYTES(expected + written, outBuffer, 20); + written += 20; // Cache 0b, 1b + + { + outBufferLength = + dh_encode_append(ctx, &key, inBuffer + read, 1, outBuffer, SIZEOF(outBuffer)); + ASSERT(outBufferLength == 0); + read += 1; // Cache 1b, 1b + } + { + outBufferLength = + dh_encode_append(ctx, &key, inBuffer + read, 14, outBuffer, SIZEOF(outBuffer)); + ASSERT(outBufferLength == 0); + read += 14; // Cache 15b, 1b + } + + outBufferLength = + dh_encode_append(ctx, &key, inBuffer + read, 18, outBuffer, SIZEOF(outBuffer)); + ASSERT(outBufferLength == 44); + EXPECT_EQ_BYTES(expected + written, outBuffer, 44); + read += 18, written += 44; // Cache 1b, 0b + + outBufferLength = + dh_encode_append(ctx, &key, inBuffer + read, 1, outBuffer, SIZEOF(outBuffer)); + ASSERT(outBufferLength == 0); + read += 1; // Cache 2b, 0b + + outBufferLength = + dh_encode_append(ctx, &key, inBuffer + read, 14, outBuffer, SIZEOF(outBuffer)); + ASSERT(outBufferLength == 20); + EXPECT_EQ_BYTES(expected + written, outBuffer, 20); + read += 14, written += 20; // Cache 0b, 1b + + outBufferLength = dh_encode_finalize(ctx, &key, outBuffer, SIZEOF(outBuffer)); + ASSERT(outBufferLength == 68); + EXPECT_EQ_BYTES(expected + written, outBuffer, 68); + written += 68; + + ASSERT(read == inBufferLength); + } + } + END_ASSERT_NOEXCEPT; +} + +__noinline_due_to_stack__ static void run_dh_decode_tests() { + BEGIN_ASSERT_NOEXCEPT { + TRACE_STACK_USAGE(); + // initializing derivation paths + uint32_t path[] = {HD + 44, HD + 235, HD + 0, 0, 2000}; + bip44_path_t pathSpec; + pathSpec_init(&pathSpec, path, 5); + bip44_PRINTF(&pathSpec); + PRINTF("\n"); + + public_key_t publicKey; + const char* publicKeyHex = + "04a9a222bc3b1a5a58ada17d10069b3961ebd0f917d4b2106031a061915ca9cc24a06941e0a4c0d5e2668" + "50ff980ad349ab8b027c93bf4aead1984168ad43e30ab"; + uint8_t publicKeyBuffer[65]; + size_t publicKeyLen = decode_hex(publicKeyHex, publicKeyBuffer, SIZEOF(publicKeyBuffer)); + ASSERT(publicKeyLen == 65); + cx_ecfp_init_public_key_no_throw(CX_CURVE_SECP256K1, + publicKeyBuffer, + publicKeyLen, + &publicKey); + + TRACE_STACK_USAGE(); + +#define TESTCASE(msgHex_, expectedDecMsgHex_) \ + { \ + const char* msgHex = msgHex_; \ + uint8_t msg[120]; \ + size_t msgLen = decode_hex(msgHex, msg, SIZEOF(msg)); \ + const char* expectedDecMsgHex = expectedDecMsgHex_; \ + uint8_t expectedDecMsg[100]; \ + size_t expectedMsgLen = \ + decode_hex(expectedDecMsgHex, expectedDecMsg, SIZEOF(expectedDecMsg)); \ + size_t decMsgLen = dh_decode(&pathSpec, &publicKey, msg, msgLen); \ + TRACE("Decoded mesage %d, %d", decMsgLen, expectedMsgLen); \ + ASSERT(decMsgLen == expectedMsgLen); \ + EXPECT_EQ_BYTES(msg, expectedDecMsg, decMsgLen); \ + } + TESTCASE( + "000102030405060708090a0b0c0d0e0f9508b492f96f067cc72ef8c7c24ac2072310c4e1d36bd6737958f0" + "a3a005576d60b64b8e8c732d893f6cd374cabc0b30882b6eebaba7af72826e54b11d48a8705974adf7d957" + "aba1f428f58aca25ac5a", + "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"); + + TESTCASE( + "000102030405060708090a0b0c0d0e0f9508b492f96f067cc72ef8c7c24ac2072310c4e1d36bd6737958f0" + "a3a005576df93b5a2ebef58532ec2d2dd21c11fdb590d05a598740af8fd9263343eb1d85a7e6943c21d254" + "682d0bdc4c74619ea22c", + "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef00"); + + TESTCASE( + "000102030405060708090a0b0c0d0e0f9508b492f96f067cc72ef8c7c24ac2072310c4e1d36bd6737958f0" + "a3a005576d2b88c5f509bb7276a32f94595e196cf382b0625992dd194210a0e545410741a8013a122d2edd" + "9233caa3fd4b75f9946c", + "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0011"); + + TESTCASE( + "000102030405060708090a0b0c0d0e0f9508b492f96f067cc72ef8c7c24ac2072310c4e1d36bd6737958f0" + "a3a005576df99997fa2a742665b01c35c7d6caebc2fbd1bd4479cb819eb452123a0ec6356f40222f7fc8ce" + "bc3a5b81f644f2f75629", + "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef00112233445566778899aa" + "bbccddee"); + + TESTCASE( + "000102030405060708090a0b0c0d0e0f9508b492f96f067cc72ef8c7c24ac2072310c4e1d36bd6737958f0" + "a3a005576d60a63b30e52db993fdb53f67ba03cd0abed894f54929ac6addfd7076970597a43a36c525ad1f" + "c4349c69be21718ab07bc639172663927cb075fa777797e0c1c4", + "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef00112233445566778899aa" + "bbccddeeff"); + + TESTCASE( + "000102030405060708090a0b0c0d0e0f9508b492f96f067cc72ef8c7c24ac207a9f4835231896efd23dd49" + "43210678da56c57f271e1e5c846fbf05559fd1b73940692ad126f7e1b56f7198ba626b6287", + "0123456789abcdef0123456789abcdef0123456789abcdef") + + TRACE_STACK_USAGE(); + +#undef TESTCASE + } + END_ASSERT_NOEXCEPT; +} + +__noinline_due_to_stack__ static void run_dh_decode_failed_hmac_tests() { + TRACE_STACK_USAGE(); + // initializing derivation paths + uint32_t path[] = {HD + 44, HD + 235, HD + 0, 0, 2000}; + bip44_path_t pathSpec; + pathSpec_init(&pathSpec, path, 5); + bip44_PRINTF(&pathSpec); + PRINTF("\n"); + + public_key_t publicKey; + const char* publicKeyHex = + "04a9a222bc3b1a5a58ada17d10069b3961ebd0f917d4b2106031a061915ca9cc24a06941e0a4c0d5e2668" + "50ff980ad349ab8b027c93bf4aead1984168ad43e30ab"; + uint8_t publicKeyBuffer[65]; + size_t publicKeyLen = decode_hex(publicKeyHex, publicKeyBuffer, SIZEOF(publicKeyBuffer)); + ASSERT(publicKeyLen == 65); + cx_ecfp_init_public_key_no_throw(CX_CURVE_SECP256K1, publicKeyBuffer, publicKeyLen, &publicKey); + + TRACE_STACK_USAGE(); + + //"000102030405060708090a0b0c0d0e0f9508b492f96f067cc72ef8c7c24ac2072310c4e1d36bd6737958f0a3a005576d60a63b30e52db993fdb53f67ba03cd0abed894f54929ac6addfd7076970597a43a36c525ad1fc4349c69be21718ab07bc639172663927cb075fa777797e0c1c4";we + // change first byte + const char* msgHex = + "100102030405060708090a0b0c0d0e0f9508b492f96f067cc72ef8c7c24ac2072310c4e1d36bd6737958f0a3a0" + "05576d60a63b30e52db993fdb53f67ba03cd0abed894f54929ac6addfd7076970597a43a36c525ad1fc4349c69" + "be21718ab07bc639172663927cb075fa777797e0c1c4"; + uint8_t msg[120]; + size_t msgLen = decode_hex(msgHex, msg, SIZEOF(msg)); + + EXPECT_THROWS(dh_decode(&pathSpec, &publicKey, msg, msgLen), ERR_INVALID_HMAC); +} + +__noinline_due_to_stack__ void run_diffieHellman_test() { + PRINTF("Running DH tests\n"); + PRINTF("If they fail, make sure you seeded your device with\n"); + PRINTF("12-word mnemonic: 11*abandon about\n"); + TRACE_STACK_USAGE(); + run_dh_encode_tests(); + TRACE_STACK_USAGE(); + run_dh_encode_init_append_finalize_tests(); + TRACE_STACK_USAGE(); + run_dh_decode_tests(); + TRACE_STACK_USAGE(); + run_dh_decode_failed_hmac_tests(); + TRACE_STACK_USAGE(); +} + +#endif // DEVEL diff --git a/src/endian.h b/src/endian.h deleted file mode 100644 index 4bed2d6a..00000000 --- a/src/endian.h +++ /dev/null @@ -1,51 +0,0 @@ -#ifndef H_FIO_APP_ENDIAN -#define H_FIO_APP_ENDIAN - -#include - -#include "assert.h" - -inline void u1be_write(uint8_t* outBuffer, uint8_t value) { - outBuffer[0] = value; -} - -inline void u2be_write(uint8_t* outBuffer, uint16_t value) { - u1be_write(outBuffer, value >> 8); - u1be_write(outBuffer + 1, value & 0xFF); -} - -inline void u4be_write(uint8_t* outBuffer, uint32_t value) { - u2be_write(outBuffer, value >> 16); - u2be_write(outBuffer + 2, value & 0xFFff); -} - -inline void u8be_write(uint8_t* outBuffer, uint64_t value) { - u4be_write(outBuffer, (value >> 32)); - u4be_write(outBuffer + 4, value & 0xFFffFFff); -} - -inline uint8_t u1be_read(const uint8_t* inBuffer) { - return inBuffer[0]; -} - -inline uint16_t u2be_read(const uint8_t* inBuffer) { - STATIC_ASSERT(sizeof(uint32_t) == sizeof(unsigned), "bad unsigned size"); - - // bitwise OR promotes unsigned types smaller than int to unsigned - return (uint16_t)(((uint32_t)(u1be_read(inBuffer) << 8)) | - ((uint32_t)(u1be_read(inBuffer + 1)))); -} - -inline uint32_t u4be_read(const uint8_t* inBuffer) { - return ((uint32_t) u2be_read(inBuffer) << 16) | (uint32_t)(u2be_read(inBuffer + 2)); -} - -inline uint64_t u8be_read(const uint8_t* inBuffer) { - return ((uint64_t) u4be_read(inBuffer) << 32u) | (uint64_t)(u4be_read(inBuffer + 4)); -} - -#ifdef DEVEL -void run_endian_test(); -#endif // DEVEL - -#endif // H_FIO_APP_ENDIAN diff --git a/src/endian_test.c b/src/endian_test.c deleted file mode 100644 index c2b9adcd..00000000 --- a/src/endian_test.c +++ /dev/null @@ -1,68 +0,0 @@ -#ifdef DEVEL - -#include "endian.h" -#include "testUtils.h" - -void run_read_test() { - const uint8_t* buffer = (uint8_t*) "\x47\x11\x22\x33\x44\x55\x66\x77\x88\x47"; - - EXPECT_EQ(u1be_read(buffer), 0x47); - EXPECT_EQ(u1be_read(buffer + 1), 0x11); - EXPECT_EQ(u1be_read(buffer + 2), 0x22); - - EXPECT_EQ(u2be_read(buffer), 0x4711); - EXPECT_EQ(u2be_read(buffer + 1), 0x1122); - EXPECT_EQ(u2be_read(buffer + 2), 0x2233); - - EXPECT_EQ(u4be_read(buffer), 0x47112233); - EXPECT_EQ(u4be_read(buffer + 1), 0x11223344); - EXPECT_EQ(u4be_read(buffer + 2), 0x22334455); - - EXPECT_EQ(u8be_read(buffer), 0x4711223344556677); - EXPECT_EQ(u8be_read(buffer + 1), 0x1122334455667788); - EXPECT_EQ(u8be_read(buffer + 2), 0x2233445566778847); -} - -void run_read_write_test() { - uint8_t buffer[10] = { - 0x44, // prefix - 0x47, - 0x47, - 0x47, - 0x47, - 0x47, - 0x47, - 0x47, - 0x47, - 0x77 // postfix - }; - - u1be_write(buffer + 1, 0x74); - EXPECT_EQ(u1be_read(buffer), 0x44); - EXPECT_EQ(u1be_read(buffer + 1), 0x74); - EXPECT_EQ(u1be_read(buffer + 2), 0x47); - - u2be_write(buffer + 1, 0x2345); - EXPECT_EQ(u1be_read(buffer), 0x44); - EXPECT_EQ(u2be_read(buffer + 1), 0x2345); - EXPECT_EQ(u1be_read(buffer + 3), 0x47); - - u4be_write(buffer + 1, 0x32547698); - EXPECT_EQ(u1be_read(buffer), 0x44); - EXPECT_EQ(u4be_read(buffer + 1), 0x32547698); - EXPECT_EQ(u1be_read(buffer + 5), 0x47); - - u8be_write(buffer + 1, 0xa0b1c2d300112233); - EXPECT_EQ(u1be_read(buffer), 0x44); - EXPECT_EQ(u8be_read(buffer + 1), 0xa0b1c2d300112233); - EXPECT_EQ(u1be_read(buffer + 9), 0x77); -} - -void run_endian_test() { - PRINTF("run_endian_test\n"); - - run_read_test(); - run_read_write_test(); -} - -#endif // DEVEL diff --git a/src/eos_utils.c b/src/eos_utils.c index 5052a51e..c1e0d52e 100644 --- a/src/eos_utils.c +++ b/src/eos_utils.c @@ -70,7 +70,7 @@ int ecdsa_der_to_sig(const uint8_t *der, uint8_t *sig) { /** * The nonce generated by internal library CX_RND_RFC6979 is not compatible * with EOS. So this is the way to generate nonve for EOS. - * Arguments (by rele): + * Arguments (by relatko): * - rnd - out * - h1 - hash, in * - x - private key, in @@ -167,6 +167,8 @@ unsigned char const BASE58ALPHABET[58] = { 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'}; +#define MAX_B58ENC_LENGTH 60 + bool b58enc(uint8_t *bin, uint32_t binsz, char *b58, uint32_t *b58sz) { int carry; uint32_t i, j, high, zcount = 0; @@ -175,8 +177,9 @@ bool b58enc(uint8_t *bin, uint32_t binsz, char *b58, uint32_t *b58sz) { while (zcount < binsz && !bin[zcount]) ++zcount; size = (binsz - zcount) * 138 / 100 + 1; - uint8_t buf[size]; - memset(buf, 0, size); + uint8_t buf[MAX_B58ENC_LENGTH]; + ASSERT(size <= MAX_B58ENC_LENGTH); + explicit_bzero(buf, sizeof(buf)); for (i = zcount, high = size - 1; i < binsz; ++i, high = j) { for (carry = bin[i], j = size - 1; (j > high) || carry; --j) { @@ -220,7 +223,7 @@ uint32_t compressed_public_key_to_wif(const uint8_t *publicKey, ASSERT(outLength >= 40); uint8_t temp[37]; - memset(temp, 0, sizeof(temp)); + explicit_bzero(temp, sizeof(temp)); memcpy(temp, publicKey, 33); uint8_t check[20]; @@ -229,7 +232,7 @@ uint32_t compressed_public_key_to_wif(const uint8_t *publicKey, cx_hash(&riprip.header, CX_LAST, temp, 33, check, sizeof(check)); memcpy(temp + 33, check, 4); - memset(out, 0, outLength); + explicit_bzero(out, outLength); out[0] = 'F'; out[1] = 'I'; out[2] = 'O'; diff --git a/src/errors.h b/src/errors.h index 7cdee3dc..6a0a3d3f 100644 --- a/src/errors.h +++ b/src/errors.h @@ -24,6 +24,8 @@ enum { ERR_INVALID_STATE = 0x6E06, // Some part of request data is invalid (includes not enough data) ERR_INVALID_DATA = 0x6E07, + // Command sequence not allowed by the device + ERR_INTEGRITY_CHECK_FAILED = 0x6E08, // User rejected the action ERR_REJECTED_BY_USER = 0x6E09, @@ -33,8 +35,8 @@ enum { // Pin screen ERR_DEVICE_LOCKED = 0x6E11, - // unsupported Shelley address type - ERR_UNSUPPORTED_ADDRESS_TYPE = 0x6E12, + // Invalid HMAC in DH decryption + ERR_INVALID_HMAC = 0x6E12, // end of errors which trigger automatic response _ERR_AUTORESPOND_END = 0x6E13, diff --git a/src/fio.c b/src/fio.c index 69e8de4a..6d960320 100644 --- a/src/fio.c +++ b/src/fio.c @@ -79,7 +79,7 @@ void name_to_string(name_t value, char *out, size_t size) { } // Wrapper -void uint8array_name_to_string(uint8_t *value, size_t valueSize, char *out, size_t outSize) { +void uint8array_name_to_string(const uint8_t *value, size_t valueSize, char *out, size_t outSize) { ASSERT(valueSize == NAME_VAR_LENGTH); name_t tmp; ASSERT(sizeof(tmp) >= valueSize); diff --git a/src/fio.h b/src/fio.h index c9362cad..d2802a72 100644 --- a/src/fio.h +++ b/src/fio.h @@ -27,9 +27,10 @@ action_type_t getActionTypeByContractAccountName(network_type_t network, typedef uint64_t name_t; #define NAME_STRING_MAX_LENGTH 14 void name_to_string(name_t value, char *out, size_t size); -void uint8array_name_to_string(uint8_t *value, size_t valueSize, char *out, size_t outSize); +void uint8array_name_to_string(const uint8_t *value, size_t valueSize, char *out, size_t outSize); #define MAX_WIF_PUBKEY_LENGTH 55 +#define PUBKEY_LENGTH 65 #define MAX_TPID_LENGTH 21 #define MAX_SINGLE_BYTE_LENGTH 127 diff --git a/src/getPublicKey.c b/src/getPublicKey.c index abdc561e..aa5357c1 100644 --- a/src/getPublicKey.c +++ b/src/getPublicKey.c @@ -14,24 +14,6 @@ static ins_get_key_context_t* ctx = &(instructionState.getKeyContext); // it should be set to this value at the beginning and after a UI state machine is finished static int UI_STEP_NONE = 0; -static inline void CHECK_STAGE(get_key_stage_t expected) { - VALIDATE(ctx->stage == expected, ERR_INVALID_STATE); -} - -static void advanceStage() { - TRACE("Advancing from stage: %d", ctx->stage); - - switch (ctx->stage) { - case GET_KEY_STAGE_INIT: - ctx->stage = GET_KEY_STAGE_NONE; - ui_idle(); // we are done with this key export - break; - - default: - ASSERT(false); - } -} - // ============================== Derivation and UI state machine ============================== enum { @@ -77,7 +59,7 @@ static void getPublicKey_ui_runStep() { TRACE("Export done."); - advanceStage(); + ui_idle(); // we are done with this key export } UI_STEP_END(GET_KEY_UI_STEP_INVALID); } @@ -128,10 +110,8 @@ void getPublicKey_handleAPDU(uint8_t p1, VALIDATE(p2 == P2_UNUSED, ERR_INVALID_REQUEST_PARAMETERS); explicit_bzero(ctx, SIZEOF(*ctx)); - ctx->stage = GET_KEY_STAGE_INIT; ctx->ui_step = UI_STEP_NONE; - CHECK_STAGE(GET_KEY_STAGE_INIT); ASSERT(wireDataSize < BUFFER_SIZE_PARANOIA); { @@ -141,6 +121,8 @@ void getPublicKey_handleAPDU(uint8_t p1, TRACE_BUFFER(wireDataBuffer, wireDataSize); size_t parsedSize = bip44_parseFromWire(&ctx->pathSpec, wireDataBuffer, wireDataSize); + BIP44_PRINTF(&ctx->pathSpec); + PRINTF("\n"); VALIDATE(parsedSize == wireDataSize, ERR_INVALID_DATA); } diff --git a/src/getPublicKey.h b/src/getPublicKey.h index 8c53d06f..35f36959 100644 --- a/src/getPublicKey.h +++ b/src/getPublicKey.h @@ -8,18 +8,12 @@ #define MAX_PUBLIC_KEYS 1000 -typedef enum { - GET_KEY_STAGE_NONE = 0, - GET_KEY_STAGE_INIT = 20, -} get_key_stage_t; - typedef enum { P1_SHOW_PUBKEY = 1, P1_DO_NOT_SHOW_PUBKEY = 2, } get_key_p1_t; typedef struct { - get_key_stage_t stage; get_key_p1_t show_or_not; bip44_path_t pathSpec; diff --git a/src/getSerial.c b/src/getSerial.c index c8c530df..eef53adf 100644 --- a/src/getSerial.c +++ b/src/getSerial.c @@ -4,6 +4,8 @@ #include "getSerial.h" #include "uiHelpers.h" +#define SERIAL_LENGTH 7 // if too short, exception 2 is thrown by os_serial + void getSerial_handleAPDU(uint8_t p1, uint8_t p2, uint8_t *wireDataBuffer MARK_UNUSED, @@ -18,7 +20,6 @@ void getSerial_handleAPDU(uint8_t p1, TRACE(); - const size_t SERIAL_LENGTH = 7; // if too short, exception 2 is thrown by os_serial uint8_t response[SERIAL_LENGTH]; size_t len = os_serial(response, SERIAL_LENGTH); ASSERT(len == SERIAL_LENGTH); diff --git a/src/handlers.c b/src/handlers.c index 8fed0165..d87d3eee 100644 --- a/src/handlers.c +++ b/src/handlers.c @@ -4,6 +4,7 @@ #include #include "handlers.h" +#include "decodeDH.h" #include "getVersion.h" #include "getSerial.h" #include "getPublicKey.h" @@ -28,6 +29,9 @@ handler_fn_t* lookupHandler(uint8_t ins) { // 0x2* - transaction related CASE(0x20, signTransaction_handleAPDU); + // 0x3* - transaction related + CASE(0x30, decode_handleAPDU); + #ifdef DEVEL // 0xF* - debug_mode related CASE(0xF0, handleRunTests); diff --git a/src/hash.h b/src/hash.h index 3a7a0560..141abb96 100644 --- a/src/hash.h +++ b/src/hash.h @@ -2,6 +2,7 @@ #define H_FIO_APP_HASH #include "common.h" +#include "lcx_sha512.h" // This file provides convenience functions for using firmware hashing api @@ -9,6 +10,7 @@ // it does not play well with inline functions enum { SHA_256_SIZE = 32, + SHA_512_SIZE = 64, }; enum { @@ -66,4 +68,55 @@ static __attribute__((always_inline, unused)) void sha_256_hash(const uint8_t* i sha_256_finalize(&ctx, outBuffer, outSize); } +typedef struct { + uint16_t initialized_magic; + cx_sha512_t cx_ctx; +} sha_512_context_t; + +static __attribute__((always_inline, unused)) void sha_512_init(sha_512_context_t* ctx) { + cx_sha512_init(&ctx->cx_ctx); + ctx->initialized_magic = HASH_CONTEXT_INITIALIZED_MAGIC; +} + +static __attribute__((always_inline, unused)) void sha_512_append(sha_512_context_t* ctx, + const uint8_t* inBuffer, + size_t inSize) { + ASSERT(ctx->initialized_magic == HASH_CONTEXT_INITIALIZED_MAGIC); + TRACE_BUFFER(inBuffer, inSize); + cx_hash(&ctx->cx_ctx.header, + 0, /* Do not output the hash, yet */ + inBuffer, + inSize, + NULL, + 0); +} + +static __attribute__((always_inline, unused)) void sha_512_finalize(sha_512_context_t* ctx, + uint8_t* outBuffer, + size_t outSize) { + ASSERT(ctx->initialized_magic == HASH_CONTEXT_INITIALIZED_MAGIC); + ASSERT(outSize == SHA_512_SIZE); + cx_hash(&ctx->cx_ctx.header, + CX_LAST, /* Output the hash */ + NULL, + 0, + outBuffer, + SHA_512_SIZE); +} + +/* Convenience function to make all in one step */ +static __attribute__((always_inline, unused)) void sha_512_hash(const uint8_t* inBuffer, + size_t inSize, + uint8_t* outBuffer, + size_t outSize) { + ASSERT(inSize < BUFFER_SIZE_PARANOIA); + ASSERT(outSize == SHA_512_SIZE); + sha_512_context_t ctx; + sha_512_init(&ctx); + /* Note: This could be done by single cx_hash call */ + /* But we don't really care */ + sha_512_append(&ctx, inBuffer, inSize); + sha_512_finalize(&ctx, outBuffer, outSize); +} + #endif // H_FIO_APP_HASH diff --git a/src/hexUtils.c b/src/hexUtils.c index 813d7235..85dfde0a 100644 --- a/src/hexUtils.c +++ b/src/hexUtils.c @@ -11,7 +11,7 @@ uint8_t hex_parseNibble(const char c) { uint8_t hex_parseNibblePair(const char* buffer) { uint8_t first = hex_parseNibble(buffer[0]); uint8_t second = hex_parseNibble(buffer[1]); - return (uint8_t)((first << 4) + second); + return (uint8_t) ((first << 4) + second); } size_t decode_hex(const char* inStr, uint8_t* outBuffer, size_t outMaxSize) { @@ -51,6 +51,8 @@ size_t encode_hex(const uint8_t* bytes, size_t bytesLength, char* out, size_t ou return 2 * bytesLength; } +#ifdef DEVEL + void test_hex_nibble_parsing() { struct { char nibble; @@ -83,7 +85,7 @@ void test_hex_nibble_parsing() { void test_hex_parsing() { struct { - char* hex; + const char* hex; uint8_t raw; } testVectors[] = { {"ff", 0xff}, @@ -102,7 +104,6 @@ void test_hex_parsing() { } } -#ifdef DEVEL void run_hex_test() { test_hex_nibble_parsing(); test_hex_parsing(); diff --git a/src/keyDerivation.c b/src/keyDerivation.c index 0215f99e..d6437829 100644 --- a/src/keyDerivation.c +++ b/src/keyDerivation.c @@ -6,13 +6,13 @@ #include "keyDerivation.h" #include "hash.h" #include "utils.h" -#include "endian.h" #include "fio.h" #include "securityPolicy.h" #define PRIVATE_KEY_SEED_LEN 32 -void derivePrivateKey(const bip44_path_t* pathSpec, private_key_t* privateKey) { +__noinline_due_to_stack__ void derivePrivateKey(const bip44_path_t* pathSpec, + private_key_t* privateKey) { ENSURE_NOT_DENIED(policyDerivePrivateKey(pathSpec)); // Sanity check @@ -42,7 +42,8 @@ void derivePrivateKey(const bip44_path_t* pathSpec, private_key_t* privateKey) { END_TRY; } -void derivePublicKey(const bip44_path_t* pathSpec, public_key_t* publicKey) { +__noinline_due_to_stack__ void derivePublicKey(const bip44_path_t* pathSpec, + public_key_t* publicKey) { private_key_t privateKey; BEGIN_TRY { TRY { diff --git a/src/keyDerivation.h b/src/keyDerivation.h index 7aa1f121..70106464 100644 --- a/src/keyDerivation.h +++ b/src/keyDerivation.h @@ -4,8 +4,8 @@ #include "common.h" #include "handlers.h" #include "bip44.h" +#include "utils.h" -#define PUBLIC_KEY_SIZE (32) #define CHAIN_CODE_SIZE (32) typedef cx_ecfp_private_key_t private_key_t; @@ -15,14 +15,14 @@ typedef struct { uint8_t code[CHAIN_CODE_SIZE]; } chain_code_t; -void derivePrivateKey(const bip44_path_t* pathSpec, - private_key_t* privateKey // output +__noinline_due_to_stack__ void derivePrivateKey(const bip44_path_t* pathSpec, + private_key_t* privateKey // output ); -void derivePublicKey(const bip44_path_t* pathSpec, public_key_t* out); +__noinline_due_to_stack__ void derivePublicKey(const bip44_path_t* pathSpec, public_key_t* out); #ifdef DEVEL -void run_key_derivation_test(); +__noinline_due_to_stack__ void run_key_derivation_test(); #endif // DEVEL #endif // H_FIO_APP_KEY_DERIVATION diff --git a/src/keyDerivation_test.c b/src/keyDerivation_test.c index 70f311fd..9ea3357d 100644 --- a/src/keyDerivation_test.c +++ b/src/keyDerivation_test.c @@ -45,11 +45,9 @@ void testPrivateKeyDerivation() { // about"? TESTCASE((HD + 44, HD + 235, HD + 0, 0, 0), - "4d597899db76e87933e7c6841c2d661810f070bad20487ef20eb84e182695a3a"); TESTCASE((HD + 44, HD + 235, HD + 0, 0, 2000), - "0762d870ba3a00625d02c8374dbcd33f1df4d8f1abbaa89387ab5c8afa533d90"); #undef TESTCASE @@ -105,7 +103,7 @@ void testPublicKeyDerivation() { #undef TESTCASE } -void run_key_derivation_test() { +__noinline_due_to_stack__ void run_key_derivation_test() { PRINTF("Running key derivation tests\n"); PRINTF("If they fail, make sure you seeded your device with\n"); PRINTF("12-word mnemonic: 11*abandon about\n"); diff --git a/src/main.c b/src/main.c index 16dabf37..142c7a2f 100644 --- a/src/main.c +++ b/src/main.c @@ -75,7 +75,6 @@ static void fio_main(void) { volatile size_t rx = 0; volatile size_t tx = 0; volatile uint8_t flags = 0; - unsigned int _rx; // Exchange APDUs until EXCEPTION_IO_RESET is thrown. for (;;) { @@ -91,9 +90,8 @@ static void fio_main(void) { TRY { rx = tx; tx = 0; // ensure no race in CATCH_OTHER if io_exchange throws an error - _rx = rx; - ASSERT(_rx < sizeof(G_io_apdu_buffer)); - rx = (unsigned int) io_exchange((uint8_t)(CHANNEL_APDU | flags), (uint16_t) rx); + ASSERT((unsigned int) rx < sizeof(G_io_apdu_buffer)); + rx = (unsigned int) io_exchange((uint8_t) (CHANNEL_APDU | flags), (uint16_t) rx); flags = 0; // We should be awaiting APDU @@ -155,6 +153,7 @@ static void fio_main(void) { // Note(ppershing): assertions should not auto-respond #ifdef RESET_ON_CRASH // Reset device + currentInstruction = INS_NONE; io_seproxyhal_se_reset(); #endif } @@ -167,6 +166,7 @@ static void fio_main(void) { PRINTF("Uncaught error 0x%x", (unsigned) e); #ifdef RESET_ON_CRASH // Reset device + currentInstruction = INS_NONE; io_seproxyhal_se_reset(); #endif } @@ -187,6 +187,7 @@ static void fio_main(void) { static void app_exit(void) { BEGIN_TRY_L(exit) { TRY_L(exit) { + currentInstruction = INS_NONE; os_sched_exit(-1); } FINALLY_L(exit) { diff --git a/src/runTests.c b/src/runTests.c index c45f122e..8465e11d 100644 --- a/src/runTests.c +++ b/src/runTests.c @@ -5,11 +5,14 @@ #include "hexUtils.h" #include "hash.h" #include "bip44.h" -#include "endian.h" #include "keyDerivation.h" #include "textUtils.h" #include "uiHelpers.h" #include "uiScreens.h" +#include "diffieHellman.h" +#include "signTransactionIntegrity.h" +#include "signTransactionCountedSection.h" +#include "utils.h" void handleRunTests(uint8_t p1 MARK_UNUSED, uint8_t p2 MARK_UNUSED, @@ -19,12 +22,16 @@ void handleRunTests(uint8_t p1 MARK_UNUSED, // Note: Make sure to have RESET_ON_CRASH flag disabled // as it interferes with tests verifying assertions BEGIN_ASSERT_NOEXCEPT { + TRACE_STACK_USAGE(); PRINTF("Running tests\n"); run_hex_test(); - run_endian_test(); run_textUtils_test(); run_bip44_test(); run_key_derivation_test(); + run_diffieHellman_test(); + run_integrityCheck_test(); + run_countedSection_test(); + TRACE_STACK_USAGE(); PRINTF("All tests done\n"); } END_ASSERT_NOEXCEPT; diff --git a/src/securityPolicy.c b/src/securityPolicy.c index 5c96d24b..85ac2273 100644 --- a/src/securityPolicy.c +++ b/src/securityPolicy.c @@ -39,38 +39,31 @@ security_policy_t policyForGetPublicKey(const bip44_path_t* pathSpec, get_key_p1 ALLOW(); } -security_policy_t policyForSignTxInit(network_type_t network) { - DENY_IF(network == NETWORK_UNKNOWN); - SHOW(); -} - -security_policy_t policyForSignTxHeader() { - SHOW(); -} +security_policy_t policyForSignTxInit(const bip44_path_t* pathSpec) { + DENY_UNLESS(bip44_hasValidFIOPrefix(pathSpec)); + DENY_UNLESS(bip44_containsAddress(pathSpec)); + DENY_IF(bip44_containsMoreThanAddress(pathSpec)); -security_policy_t policyForSignTxActionHeader(action_type_t action) { - DENY_IF(action == ACTION_TYPE_UNKNOWN); SHOW(); } -security_policy_t policyForSignTxActionAuthorization() { - SHOW(); +security_policy_t policyForSignTxDHEnd() { + PROMPT(); } -security_policy_t policyForSignTxActionData(char* validation_actor, char* data_actor) { - DENY_IF(strncmp(validation_actor, data_actor, NAME_STRING_MAX_LENGTH)) - SHOW(); +security_policy_t policyForSignTxFinish() { + PROMPT(); } -security_policy_t policyForSignTxWitness(const bip44_path_t* pathSpec) { +security_policy_t policyDerivePrivateKey(const bip44_path_t* pathSpec) { DENY_UNLESS(bip44_hasValidFIOPrefix(pathSpec)); DENY_UNLESS(bip44_containsAddress(pathSpec)); DENY_IF(bip44_containsMoreThanAddress(pathSpec)); - PROMPT(); + ALLOW(); } -security_policy_t policyDerivePrivateKey(const bip44_path_t* pathSpec) { +security_policy_t policyForDecodeDHDecode(const bip44_path_t* pathSpec) { DENY_UNLESS(bip44_hasValidFIOPrefix(pathSpec)); DENY_UNLESS(bip44_containsAddress(pathSpec)); DENY_IF(bip44_containsMoreThanAddress(pathSpec)); diff --git a/src/securityPolicy.h b/src/securityPolicy.h index 23c83d0d..d360a9c9 100644 --- a/src/securityPolicy.h +++ b/src/securityPolicy.h @@ -3,6 +3,7 @@ #include "bip44.h" #include "getPublicKey.h" +#include "signTransactionParse.h" typedef enum { POLICY_DENY = 1, @@ -10,19 +11,20 @@ typedef enum { POLICY_PROMPT_BEFORE_RESPONSE = 3, POLICY_PROMPT_WARN_UNUSUAL = 4, POLICY_SHOW_BEFORE_RESPONSE = 5, // Show on display but do not ask for explicit confirmation + POLICY_SHOW_BEFORE_RESPONSE_IF_NONEMPTY = 6, } security_policy_t; security_policy_t policyForGetPublicKey(const bip44_path_t* pathSpec, get_key_p1_t show_or_not); -security_policy_t policyForSignTxInit(network_type_t network); -security_policy_t policyForSignTxHeader(); -security_policy_t policyForSignTxActionHeader(action_type_t action); -security_policy_t policyForSignTxActionAuthorization(); -security_policy_t policyForSignTxActionData(char* validation_actor, char* data_actor); -security_policy_t policyForSignTxWitness(const bip44_path_t* pathSpec); +security_policy_t policyForSignTxInit(const bip44_path_t* pathSpec); security_policy_t policyDerivePrivateKey(const bip44_path_t* pathSpec); +security_policy_t policyForSignTxDHEnd(); +security_policy_t policyForSignTxFinish(); + +security_policy_t policyForDecodeDHDecode(const bip44_path_t* pathSpec); + static inline void ENSURE_NOT_DENIED(security_policy_t policy) { if (policy == POLICY_DENY) { THROW(ERR_REJECTED_BY_POLICY); diff --git a/src/signTransaction.c b/src/signTransaction.c index 00c6defb..f706e289 100644 --- a/src/signTransaction.c +++ b/src/signTransaction.c @@ -1,718 +1,971 @@ #include "common.h" #include "handlers.h" - +#include "eos_utils.h" #include "getSerial.h" #include "state.h" +#include "fio.h" #include "hash.h" -#include "endian.h" -#include "eos_utils.h" +#include "lcx_rng.h" #include "securityPolicy.h" +#include "signTransactionCountedSection.h" +#include "signTransactionIntegrity.h" +#include "signTransactionParse.h" #include "uiHelpers.h" #include "uiScreens.h" #include "textUtils.h" static ins_sign_transaction_context_t* ctx = &(instructionState.signTransactionContext); -typedef enum { - SIGN_STAGE_NONE = 0, - SIGN_STAGE_INIT = 23, - SIGN_STAGE_HEADER = 24, - SIGN_STAGE_ACTION_HEADER = 25, - SIGN_STAGE_ACTION_AUTHORIZATION = 26, - SIGN_STAGE_ACTION_DATA = 27, - SIGN_STAGE_WITNESS = 28, -} sign_tx_stage_t; - -// this is supposed to be called at the beginning of each APDU handler -static inline void CHECK_STAGE(sign_tx_stage_t expected) { - VALIDATE(ctx->stage == expected, ERR_INVALID_STATE); -} - -// advances the stage of the main state machine -static inline void advanceStage() { - TRACE("Advancing sign tx stage from: %d", ctx->stage); - - switch (ctx->stage) { - case SIGN_STAGE_INIT: - ctx->stage = SIGN_STAGE_HEADER; - break; - - case SIGN_STAGE_HEADER: - ctx->stage = SIGN_STAGE_ACTION_HEADER; - break; +// ============================== MISC ============================== - case SIGN_STAGE_ACTION_HEADER: - ctx->stage = SIGN_STAGE_ACTION_AUTHORIZATION; - break; - - case SIGN_STAGE_ACTION_AUTHORIZATION: - ctx->stage = SIGN_STAGE_ACTION_DATA; - break; +typedef enum { + VALUE_STORAGE_CHECK_NO = 0x00, + VALUE_STORAGE_CHECK_R1 = 0x10, + VALUE_STORAGE_CHECK_R2 = 0x20, + VALUE_STORAGE_CHECK_R3 = 0x30, + VALUE_STORAGE_CHECK_R1_DECODE_NAME = 0x40, +} tx_storage_check_t; - case SIGN_STAGE_ACTION_DATA: - ctx->stage = SIGN_STAGE_WITNESS; - break; +enum { + TX_STORAGE_INITIALIZED_MAGIC = 12345, +}; - case SIGN_STAGE_WITNESS: - ctx->stage = SIGN_STAGE_NONE; - ui_idle(); // we are done with this tx - break; +enum { + TX_INIT_WAS_CALLED_INITIALIZED_MAGIC = 12346, +}; - case SIGN_STAGE_NONE: - // advanceStage() not supposed to be called after tx processing is finished - ASSERT(false); - default: - ASSERT(false); +// Taken from EOS app. Needed to produce signatures. +static uint8_t const SECP256K1_N[] = { + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, + 0xba, 0xae, 0xdc, 0xe6, 0xaf, 0x48, 0xa0, 0x3b, 0xbf, 0xd2, 0x5e, 0x8c, 0xd0, 0x36, 0x41, 0x41}; + +// Uses ctx->dataToAppendToTx, ctx->dataToAppendToTxLen to extend hash +// If ctx->dhIsActive then, we extend hash with encrypted data and prepare resulting encrypted +// blocks to G_io_apdu_buffer, ctx->responseLength Variables (&ctx->wittnessPath, &ctx->otherPubkey, +// &ctx->dhContext) are needed for encryption +static void processShaAndPosibleDHAndPrepareResponse() { + if (ctx->dhIsActive) { + dh_aes_key_t aesKey; + BEGIN_TRY { + TRY { + // Compute AES key + dh_init_aes_key(&aesKey, &ctx->wittnessPath, &ctx->otherPubkey); + + // Encode message chunk + ctx->responseLength = dh_encode_append(&ctx->dhContext, + &aesKey, + ctx->dataToAppendToTx, + ctx->dataToAppendToTxLen, + G_io_apdu_buffer, + SIZEOF(G_io_apdu_buffer)); + sha_256_append(&ctx->hashContext, G_io_apdu_buffer, ctx->responseLength); + VALIDATE( + ctx->countedSectionDifference + ctx->responseLength >= ctx->dataToAppendToTxLen, + ERR_INVALID_STATE); + ctx->countedSectionDifference = + ctx->countedSectionDifference + ctx->responseLength - ctx->dataToAppendToTxLen; + TRACE("CS diff %d from:%d, %d", + (int) ctx->countedSectionDifference, + (int) ctx->responseLength, + (int) ctx->dataToAppendToTxLen); + } + FINALLY { + explicit_bzero(&aesKey, SIZEOF(aesKey)); + } + } + END_TRY; + } else { + sha_256_append(&ctx->hashContext, ctx->dataToAppendToTx, ctx->dataToAppendToTxLen); + ctx->responseLength = 0; } - - TRACE("Advancing sign tx stage to: %d", ctx->stage); } -void respondSuccessEmptyMsg() { - TRACE(); - io_send_buf(SUCCESS, NULL, 0); - ui_displayBusy(); // needs to happen after I/O +// Takes &ctx->wittnessPath and modifies ctx->value to be null terminated scting to display the +// pubkey +static void prepareOurPubkeyForDisplay() { + public_key_t wittnessPathPubkey; + explicit_bzero(&wittnessPathPubkey, SIZEOF(wittnessPathPubkey)); + derivePublicKey(&ctx->wittnessPath, &wittnessPathPubkey); + TRACE_BUFFER(wittnessPathPubkey.W, SIZEOF(wittnessPathPubkey.W)); + + uint32_t outlen = public_key_to_wif(wittnessPathPubkey.W, + SIZEOF(wittnessPathPubkey.W), + ctx->value, + SIZEOF(ctx->value)); + ASSERT(outlen < SIZEOF(ctx->value)); + ctx->value[outlen] = 0; } -// Taken from EOS app. Needed to produce signatures. -uint8_t const SECP256K1_N[] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xfe, 0xba, 0xae, 0xdc, 0xe6, 0xaf, 0x48, - 0xa0, 0x3b, 0xbf, 0xd2, 0x5e, 0x8c, 0xd0, 0x36, 0x41, 0x41}; - -// ============================== INIT ============================== +// Simple reusable UI step with one or no screens enum { - HANDLE_INIT_STEP_DISPLAY_DETAILS = 100, - HANDLE_INIT_STEP_RESPOND, - HANDLE_INIT_STEP_INVALID, + HANDLE_SIMPLE_STEP_DISPLAY_DETAILS = 100, + HANDLE_SIMPLE_STEP_RESPOND, + HANDLE_SIMPLE_STEP_INVALID, }; -static void signTx_handleInit_ui_runStep() { +static void signTx_ui_runStep_simple() { TRACE("UI step %d", ctx->ui_step); TRACE_STACK_USAGE(); - ui_callback_fn_t* this_fn = signTx_handleInit_ui_runStep; + ui_callback_fn_t* this_fn = signTx_ui_runStep_simple; UI_STEP_BEGIN(ctx->ui_step, this_fn); - UI_STEP(HANDLE_INIT_STEP_DISPLAY_DETAILS) { - switch (ctx->network) { -#define CASE(NETWORK, CHAIN_STRING) \ - case NETWORK: { \ - ui_displayPaginatedText("Chain", CHAIN_STRING, this_fn); \ - break; \ - } - CASE(NETWORK_MAINNET, "Mainnet"); - CASE(NETWORK_TESTNET, "Testnet"); -#undef CASE - default: - THROW(ERR_NOT_IMPLEMENTED); - } + UI_STEP(HANDLE_SIMPLE_STEP_DISPLAY_DETAILS) { + ui_displayPaginatedText(ctx->key, ctx->value, this_fn); } - UI_STEP(HANDLE_INIT_STEP_RESPOND) { - respondSuccessEmptyMsg(); - advanceStage(); + UI_STEP(HANDLE_SIMPLE_STEP_RESPOND) { + TRACE(); + io_send_buf(SUCCESS, G_io_apdu_buffer, ctx->responseLength); + ui_displayBusy(); // needs to happen after I/O } - UI_STEP_END(HANDLE_INIT_STEP_INVALID); + UI_STEP_END(HANDLE_SIMPLE_STEP_INVALID); } +// ============================== INIT ============================== + __noinline_due_to_stack__ void signTx_handleInitAPDU(uint8_t p2, - uint8_t* wireDataBuffer, - size_t wireDataSize) { + MARK_UNUSED_NO_DEVEL uint8_t* constDataBuffer, + size_t constSize, + uint8_t* varDataBuffer, + size_t varSize) { + // Sanity checks and trace buffers TRACE_STACK_USAGE(); { - // sanity checks - CHECK_STAGE(SIGN_STAGE_INIT); - VALIDATE(p2 == P2_UNUSED, ERR_INVALID_REQUEST_PARAMETERS); - ASSERT(wireDataSize < BUFFER_SIZE_PARANOIA); + TRACE_BUFFER(constDataBuffer, constSize); + TRACE_BUFFER(varDataBuffer, varSize); } + // Data format + VALIDATE(constSize == 0, ERR_INVALID_DATA); + struct { + uint8_t chainId[CHAIN_ID_LENGTH]; + uint8_t derivationPath[1 + sizeof(uint32_t) * + BIP44_MAX_PATH_ELEMENTS]; // 1 stands for number of + // derivation math elements + }* varData = (void*) varDataBuffer; + VALIDATE(varSize >= SIZEOF(varData->chainId), ERR_INVALID_DATA); + + // Parsing: network, ctx->wittnessPath, ctx->dataToAppendToTx, + network_type_t network = NETWORK_UNKNOWN; { - // parse data - TRACE_BUFFER(wireDataBuffer, wireDataSize); - - struct { - uint8_t chainId[32]; - }* wireData = (void*) wireDataBuffer; - - VALIDATE(SIZEOF(*wireData) == wireDataSize, ERR_INVALID_DATA); - - TRACE("SHA_256_init"); - sha_256_init(&ctx->hashContext); - sha_256_append(&ctx->hashContext, wireData->chainId, SIZEOF(wireData->chainId)); - - ctx->network = getNetworkByChainId(wireData->chainId, SIZEOF(wireData->chainId)); - TRACE("Network %d:", ctx->network); + network = getNetworkByChainId(varData->chainId, SIZEOF(varData->chainId)); + TRACE("Chain: %d", (int) network); + VALIDATE(network == NETWORK_MAINNET || network == NETWORK_TESTNET, ERR_INVALID_DATA); + + const size_t parsedSize = bip44_parseFromWire(&ctx->wittnessPath, + varData->derivationPath, + varSize - SIZEOF(varData->chainId)); + BIP44_PRINTF(&ctx->wittnessPath); + PRINTF("\n"); + VALIDATE(parsedSize == varSize - SIZEOF(varData->chainId), ERR_INVALID_DATA); + + STATIC_ASSERT(SIZEOF(ctx->dataToAppendToTx) >= SIZEOF(varData->chainId), + "Buffer too small"); + memcpy(ctx->dataToAppendToTx, varData->chainId, SIZEOF(varData->chainId)); + ctx->dataToAppendToTxLen = SIZEOF(varData->chainId); } - security_policy_t policy = policyForSignTxInit(ctx->network); - TRACE("Policy: %d", (int) policy); - ENSURE_NOT_DENIED(policy); + // Prepare display variables ctx->key, ctx->value { - // select UI steps - switch (policy) { -#define CASE(POLICY, UI_STEP) \ - case POLICY: { \ - ctx->ui_step = UI_STEP; \ - break; \ + TRACE_STACK_USAGE(); + snprintf(ctx->key, MAX_DISPLAY_KEY_LENGTH, "Chain"); + switch (network) { +#define CASE(NETWORK, CHAIN_STRING) \ + case NETWORK: { \ + snprintf(ctx->value, MAX_DISPLAY_VALUE_LENGTH, CHAIN_STRING); \ + break; \ } - CASE(POLICY_SHOW_BEFORE_RESPONSE, HANDLE_INIT_STEP_DISPLAY_DETAILS); -#undef CASE + CASE(NETWORK_MAINNET, "Mainnet"); + CASE(NETWORK_TESTNET, "Testnet"); default: THROW(ERR_NOT_IMPLEMENTED); +#undef CASE } } + // Reading data finished, from now on we use G_io_apdu_buffer for output - signTx_handleInit_ui_runStep(); -} + // Append data to hash and prepare response (none) + { + TRACE_STACK_USAGE(); + VALIDATE(!ctx->dhIsActive, ERR_INVALID_STATE); + VALIDATE(countedSectionProcess(&ctx->countedSections, ctx->dataToAppendToTxLen), + ERR_INVALID_DATA); + sha_256_append(&ctx->hashContext, ctx->dataToAppendToTx, ctx->dataToAppendToTxLen); -// ============================== HEADER ============================== -enum { - HANDLE_HEADER_STEP_EXPIRATION = 200, - HANDLE_HEADER_STEP_REF_BLOCK_NUM, - HANDLE_HEADER_STEP_REF_BLOCK_PREFIX, - HANDLE_HEADER_STEP_RESPOND, - HANDLE_HEADER_STEP_INVALID, -}; + ctx->responseLength = 0; + } -static void signTx_handleHeader_ui_runStep() { - TRACE("UI step %d", ctx->ui_step); - TRACE_STACK_USAGE(); - ui_callback_fn_t* this_fn = signTx_handleHeader_ui_runStep; + // Security policy + security_policy_t policy = POLICY_DENY; + { + policy = policyForSignTxInit(&ctx->wittnessPath); + TRACE("Policy: %d", (int) policy); + ENSURE_NOT_DENIED(policy); + // select UI step + if (policy == POLICY_SHOW_BEFORE_RESPONSE) { + ctx->ui_step = HANDLE_SIMPLE_STEP_DISPLAY_DETAILS; + } else { + THROW(ERR_NOT_IMPLEMENTED); + } + } - UI_STEP_BEGIN(ctx->ui_step, this_fn); + // Run ui step + signTx_ui_runStep_simple(); +} - /* UI_STEP(HANDLE_HEADER_STEP_EXPIRATION) { - ui_displayTimeScreen( - "Expiration", - ctx->expiration, - this_fn - ); - } +// ======================= APPEND CONST DATA =========================== - UI_STEP(HANDLE_HEADER_STEP_REF_BLOCK_NUM) { - ui_displayUint64Screen( - "Ref Block Num", - ctx->refBlockNum, - this_fn - ); - } +__noinline_due_to_stack__ void signTx_handleAppendConstDataAPDU( + uint8_t p2, + uint8_t* constDataBuffer, + size_t constSize, + MARK_UNUSED_NO_DEVEL uint8_t* varDataBuffer, + size_t varSize) { + // Sanity checks and trace buffers + TRACE_STACK_USAGE(); + { + VALIDATE(p2 == P2_UNUSED, ERR_INVALID_REQUEST_PARAMETERS); + TRACE_BUFFER(constDataBuffer, constSize); + TRACE_BUFFER(varDataBuffer, varSize); + } - UI_STEP(HANDLE_HEADER_STEP_REF_BLOCK_PREFIX) { - ui_displayUint64Screen( - "Ref Block Prefix", - ctx->refBlockPrefix, - this_fn - ); - }*/ + // Data format + struct { + uint8_t data[MAX_TX_APPEND_IN_SINGLE_APDU]; + }* constData = (void*) constDataBuffer; + VALIDATE(constSize < MAX_TX_APPEND_IN_SINGLE_APDU, ERR_INVALID_DATA); + VALIDATE(varSize == 0, ERR_INVALID_DATA); - UI_STEP(HANDLE_HEADER_STEP_RESPOND) { - respondSuccessEmptyMsg(); - advanceStage(); + // Parsing: ctx->dataToAppendToTx, ctx->dataToAppendToTxLen + // Preparing display variables ctx->key, ctx->value + { + memcpy(ctx->dataToAppendToTx, constData, constSize); + ctx->dataToAppendToTxLen = constSize; + ctx->key[0] = 0; + ctx->value[0] = 0; } + // Reading data finished, from now on we use G_io_apdu_buffer for output - UI_STEP_END(HANDLE_HEADER_STEP_INVALID); + // Append data to hash (with possible DH encryption) and prepare response + { + VALIDATE(countedSectionProcess(&ctx->countedSections, ctx->dataToAppendToTxLen), + ERR_INVALID_DATA); + processShaAndPosibleDHAndPrepareResponse(); + } + + // Run ui step + ctx->ui_step = HANDLE_SIMPLE_STEP_RESPOND; + signTx_ui_runStep_simple(); } -__noinline_due_to_stack__ void signTx_handleHeaderAPDU(uint8_t p2, - uint8_t* wireDataBuffer, - size_t wireDataSize) { +// ======================= SHOW MESSAGE =========================== + +__noinline_due_to_stack__ void signTx_handleShowMessageAPDU( + uint8_t p2, + uint8_t* constDataBuffer, + size_t constSize, + MARK_UNUSED_NO_DEVEL uint8_t* varDataBuffer, + size_t varSize) { + // Sanity checks and trace buffers TRACE_STACK_USAGE(); { - // sanity checks - CHECK_STAGE(SIGN_STAGE_HEADER); - VALIDATE(p2 == P2_UNUSED, ERR_INVALID_REQUEST_PARAMETERS); - ASSERT(wireDataSize < BUFFER_SIZE_PARANOIA); + TRACE_BUFFER(constDataBuffer, constSize); + TRACE_BUFFER(varDataBuffer, varSize); } + // Data format + struct { + uint8_t displayKeyLen; + uint8_t displayKey[MAX_DISPLAY_KEY_LENGTH]; + }* constData = (void*) constDataBuffer; + VALIDATE(constSize >= 1, ERR_INVALID_DATA); + VALIDATE(constData->displayKeyLen < MAX_DISPLAY_KEY_LENGTH - 1, ERR_INVALID_DATA); + VALIDATE(constSize >= 2 + constData->displayKeyLen, ERR_INVALID_DATA); + struct { + uint8_t displayValueLen; + uint8_t displayValue[MAX_DISPLAY_VALUE_LENGTH]; + }* constData2 = (void*) (constDataBuffer + 1 + constData->displayKeyLen); + VALIDATE(constData2->displayValueLen < MAX_DISPLAY_VALUE_LENGTH - 1, ERR_INVALID_DATA); + VALIDATE(constSize == 2 + constData->displayKeyLen + constData2->displayValueLen, + ERR_INVALID_DATA); + VALIDATE(varSize == 0, ERR_INVALID_DATA); + + // Parsing + // Prepare display variables ctx->key, ctx->value { - // parse data - TRACE_BUFFER(wireDataBuffer, wireDataSize); + STATIC_ASSERT(SIZEOF(ctx->key) >= SIZEOF(constData->displayKey), + "Display buffer too small"); + STATIC_ASSERT(SIZEOF(ctx->value) >= SIZEOF(constData2->displayValue), + "Display buffer too small"); + str_validateTextBuffer(constData->displayKey, constData->displayKeyLen); + str_validateTextBuffer(constData2->displayValue, constData2->displayValueLen); + memmove(ctx->key, constData->displayKey, constData->displayKeyLen); + ctx->key[constData->displayKeyLen] = 0; + memmove(ctx->value, constData2->displayValue, constData2->displayValueLen); + ctx->value[constData2->displayValueLen] = 0; + } + + // Reading data finished, from now on we use G_io_apdu_buffer for output + + // Append data to hash (none) and prepare response (none) + { ctx->responseLength = 0; } + + // Run ui step + ctx->ui_step = HANDLE_SIMPLE_STEP_DISPLAY_DETAILS; + signTx_ui_runStep_simple(); +} - struct { - uint8_t expiration[4]; - uint8_t refBlockNum[2]; - uint8_t refBlockPrefix[4]; - }* wireData = (void*) wireDataBuffer; +// ======================= APPEND DATA =========================== - VALIDATE(SIZEOF(*wireData) == wireDataSize, ERR_INVALID_DATA); +__noinline_due_to_stack__ void signTx_handleAppendDataAPDU(uint8_t p2, + uint8_t* constDataBuffer, + size_t constSize, + uint8_t* varDataBuffer, + size_t varSize) { + // Sanity checks and trace buffers + TRACE_STACK_USAGE(); + { + VALIDATE(p2 == P2_UNUSED, ERR_INVALID_REQUEST_PARAMETERS); + TRACE_BUFFER(constDataBuffer, constSize); + TRACE_BUFFER(varDataBuffer, varSize); + } - ctx->expiration = u4be_read(wireData->expiration); - sha_256_append(&ctx->hashContext, (uint8_t*) &ctx->expiration, sizeof(ctx->expiration)); + // Data format + struct { + uint8_t valueFormat; + uint8_t valueValidation; + uint8_t valueValidationArg1[8]; + uint8_t valueValidationArg2[8]; + uint8_t valuePolicyAndStorage; + uint8_t displayKeyLen; + uint8_t displayKey[MAX_DISPLAY_KEY_LENGTH]; + }* constData = (void*) constDataBuffer; + VALIDATE(constSize >= 20, ERR_INVALID_DATA); + VALIDATE(constData->displayKeyLen <= MAX_DISPLAY_KEY_LENGTH - 1, ERR_INVALID_DATA); + VALIDATE(constSize == 20 + constData->displayKeyLen, ERR_INVALID_DATA); + struct { + uint8_t value[MAX_TX_APPEND_IN_SINGLE_APDU]; + }* varData = (void*) varDataBuffer; + VALIDATE(varSize <= MAX_TX_APPEND_IN_SINGLE_APDU, ERR_INVALID_DATA); + + // Storage validation + { + tx_storage_check_t storage = constData->valuePolicyAndStorage & 0xF0; + TRACE("Storage request :%d, Stored length %d,%d,%d", + (int) storage / 0x10, + (int) ctx->storage.storedValueLen1, + (int) ctx->storage.storedValueLen2, + (int) ctx->storage.storedValueLen3); + TRACE("Initialized: %d", ctx->storage.initialized_magic); + switch (storage) { +#define CASE_STORAGE_EQUALS(n) \ + case VALUE_STORAGE_CHECK_R##n: { \ + ASSERT(ctx->storage.initialized_magic == TX_STORAGE_INITIALIZED_MAGIC); \ + ASSERT(ctx->storage.storedValueLen##n <= sizeof(ctx->storage.storedValue##n)); \ + VALIDATE(ctx->storage.storedValueLen##n == varSize, ERR_INVALID_DATA); \ + VALIDATE(!memcmp(ctx->storage.storedValue##n, varData->value, varSize), ERR_INVALID_DATA); \ + break; \ + } + CASE_STORAGE_EQUALS(1); + CASE_STORAGE_EQUALS(2); + CASE_STORAGE_EQUALS(3); + case VALUE_STORAGE_CHECK_R1_DECODE_NAME: { + ASSERT(ctx->storage.initialized_magic == TX_STORAGE_INITIALIZED_MAGIC); + ASSERT(ctx->storage.storedValueLen1 <= sizeof(ctx->storage.storedValue1)); + char buffer[14]; + uint8array_name_to_string(ctx->storage.storedValue1, + ctx->storage.storedValueLen1, + buffer, + SIZEOF(buffer)); + VALIDATE(varSize < SIZEOF(buffer), ERR_INVALID_DATA); + TRACE("%s", buffer); + TRACE("%s", varData->value); + TRACE("%d", varSize); + VALIDATE(buffer[varSize] == 0, ERR_INVALID_DATA); + VALIDATE(!memcmp(buffer, varData->value, varSize), ERR_INVALID_DATA); + break; + } + case VALUE_STORAGE_CHECK_NO: + break; + default: + THROW(ERR_INVALID_DATA); +#undef CASE_STORAGE_EQUALS + } + } - ctx->refBlockNum = u2be_read(wireData->refBlockNum); - sha_256_append(&ctx->hashContext, - (uint8_t*) &ctx->refBlockNum, - SIZEOF(wireData->refBlockNum)); + // Parsing ctx->dataToAppendToTx, ctx->dataToAppendToTxLen + // Prepare display variables ctx->key, ctx->value, policy + security_policy_t policy = POLICY_DENY; + { + str_validateTextBuffer(constData->displayKey, constData->displayKeyLen); + ASSERT(SIZEOF(ctx->key) >= constData->displayKeyLen + 1); + memcpy(ctx->key, constData->displayKey, constData->displayKeyLen); + ctx->key[constData->displayKeyLen] = 0; + + parseValueToDisplay(constData->valueFormat, + constData->valueValidation, + constData->valueValidationArg1, + constData->valueValidationArg2, + varData->value, + varSize, + ctx->value); + + ASSERT(SIZEOF(ctx->dataToAppendToTx) >= varSize); + memcpy(ctx->dataToAppendToTx, varData->value, varSize); + ctx->dataToAppendToTxLen = varSize; + + policy = constData->valuePolicyAndStorage & 0x0F; + } - ctx->refBlockPrefix = u4be_read(wireData->refBlockPrefix); - sha_256_append(&ctx->hashContext, (uint8_t*) &ctx->refBlockPrefix, sizeof(ctx->expiration)); + // Reading data finished, from now on we use G_io_apdu_buffer for output - uint8_t buf[4]; // max_net_usage_words, max_cpu_usage_ms, delay_sec, context_free_actions - explicit_bzero(buf, sizeof(buf)); // SIZEOF does no work for 4 - sha_256_append(&ctx->hashContext, buf, sizeof(buf)); + // Append data to hash (with possible DH encryption) and prepare response + { + VALIDATE(countedSectionProcess(&ctx->countedSections, varSize), ERR_INVALID_DATA); + processShaAndPosibleDHAndPrepareResponse(); } - security_policy_t policy = policyForSignTxHeader(); - TRACE("Policy: %d", (int) policy); - ENSURE_NOT_DENIED(policy); + // Policy { - // select UI steps + TRACE("Policy %d", (int) policy); switch (policy) { #define CASE(POLICY, UI_STEP) \ case POLICY: { \ ctx->ui_step = UI_STEP; \ break; \ } - CASE(POLICY_SHOW_BEFORE_RESPONSE, HANDLE_HEADER_STEP_RESPOND); -#undef CASE + CASE(POLICY_ALLOW_WITHOUT_PROMPT, HANDLE_SIMPLE_STEP_RESPOND); + CASE(POLICY_SHOW_BEFORE_RESPONSE, HANDLE_SIMPLE_STEP_DISPLAY_DETAILS); + CASE(POLICY_SHOW_BEFORE_RESPONSE_IF_NONEMPTY, + strnlen(ctx->value, SIZEOF(ctx->value)) == 0 ? HANDLE_SIMPLE_STEP_RESPOND + : HANDLE_SIMPLE_STEP_DISPLAY_DETAILS) default: THROW(ERR_NOT_IMPLEMENTED); +#undef CASE } } - signTx_handleHeader_ui_runStep(); + // Run ui step + signTx_ui_runStep_simple(); } -// ============================== ACTION HEADER ============================== +// ======================= START COUNTED SECTION =========================== -enum { - HANDLE_ACTION_HEADER_STEP_SHOW_TYPE = 300, - HANDLE_ACTION_HEADER_STEP_RESPOND, - HANDLE_ACTION_HEADER_STEP_INVALID, -}; - -static void signTx_handleActionHeader_ui_runStep() { - TRACE("UI step %d", ctx->ui_step); +__noinline_due_to_stack__ void signTx_handleStartCountedSectionAPDU(uint8_t p2, + uint8_t* constDataBuffer, + size_t constSize, + uint8_t* varDataBuffer, + size_t varSize) { + // Sanity checks and trace buffers TRACE_STACK_USAGE(); - ui_callback_fn_t* this_fn = signTx_handleActionHeader_ui_runStep; - - UI_STEP_BEGIN(ctx->ui_step, this_fn); + { + VALIDATE(p2 == P2_UNUSED, ERR_INVALID_REQUEST_PARAMETERS); + TRACE_BUFFER(constDataBuffer, constSize); + TRACE_BUFFER(varDataBuffer, varSize); + } - UI_STEP(HANDLE_ACTION_HEADER_STEP_SHOW_TYPE) { - switch (ctx->action_type) { -#define CASE(ACTION, STRING) \ - case ACTION: { \ - ui_displayPaginatedText("Action", STRING, this_fn); \ - break; \ + // Data format + struct { + uint8_t valueFormat; + uint8_t valueValidation; + uint8_t valueValidationArg1[8]; + uint8_t valueValidationArg2[8]; + }* constData = (void*) constDataBuffer; + VALIDATE(constSize == SIZEOF(*constData), ERR_INVALID_DATA); + struct { + uint8_t value[MAX_TX_APPEND_IN_SINGLE_APDU]; + }* varData = (void*) varDataBuffer; + VALIDATE(varSize <= MAX_TX_APPEND_IN_SINGLE_APDU, ERR_INVALID_DATA); + + // Parse data numberOfExpectedBytes, ctx->dataToAppendToTx, ctx->dataToAppendToTxLen + uint32_t numberOfExpectedBytes = 0; + { + uint64_t value = 0; + parseValueToUInt64(constData->valueFormat, + constData->valueValidation, + constData->valueValidationArg1, + constData->valueValidationArg2, + varData->value, + varSize, + &value); + VALIDATE(value <= UINT32_MAX, ERR_INVALID_DATA); // to fit into uint32_t + numberOfExpectedBytes = value; + + memcpy(ctx->dataToAppendToTx, varData->value, varSize); + ctx->dataToAppendToTxLen = varSize; } - CASE(ACTION_TYPE_TRNSFIOPUBKY, "Transfer FIO tokens"); -#undef CASE - default: - THROW(ERR_NOT_IMPLEMENTED); - } + + // Preparing display variables ctx->key, ctx->value + { + ctx->key[0] = 0; + ctx->value[0] = 0; } - UI_STEP(HANDLE_ACTION_HEADER_STEP_RESPOND) { - respondSuccessEmptyMsg(); - advanceStage(); + // Reading data finished, from now on we use G_io_apdu_buffer for output + + // Append data to hash (with possible DH encryption) and prepare response, begin counted section + { + // this data does not count towards new counted section but counts towards old ones + VALIDATE(countedSectionProcess(&ctx->countedSections, ctx->dataToAppendToTxLen), + ERR_INVALID_DATA); + VALIDATE(countedSectionBegin(&ctx->countedSections, numberOfExpectedBytes), + ERR_INVALID_DATA); + processShaAndPosibleDHAndPrepareResponse(); } - UI_STEP_END(HANDLE_ACTION_HEADER_STEP_INVALID); + // Run ui step + ctx->ui_step = HANDLE_SIMPLE_STEP_RESPOND; + signTx_ui_runStep_simple(); } -__noinline_due_to_stack__ void signTx_handleActionHeaderAPDU(uint8_t p2, - uint8_t* wireDataBuffer, - size_t wireDataSize) { +// ======================= END COUNTED SECTION =========================== + +__noinline_due_to_stack__ void signTx_handleEndCountedSectionAPDU( + uint8_t p2, + MARK_UNUSED_NO_DEVEL uint8_t* constDataBuffer, + size_t constSize, + MARK_UNUSED_NO_DEVEL uint8_t* varDataBuffer, + size_t varSize) { + // Sanity checks and trace buffers TRACE_STACK_USAGE(); { - // sanity checks - CHECK_STAGE(SIGN_STAGE_ACTION_HEADER); - VALIDATE(p2 == P2_UNUSED, ERR_INVALID_REQUEST_PARAMETERS); - ASSERT(wireDataSize < BUFFER_SIZE_PARANOIA); + TRACE_BUFFER(constDataBuffer, constSize); + TRACE_BUFFER(varDataBuffer, varSize); } + // Data format + VALIDATE(constSize == 0, ERR_INVALID_DATA); + VALIDATE(varSize == 0, ERR_INVALID_DATA); + + // Preparing display variables ctx->key, ctx->value { - // parse data - TRACE_BUFFER(wireDataBuffer, wireDataSize); + ctx->key[0] = 0; + ctx->value[0] = 0; + } - struct { - uint8_t contractAccountName[CONTRACT_ACCOUNT_NAME_LENGTH]; - }* wireData = (void*) wireDataBuffer; + // Reading data finished, from now on we use G_io_apdu_buffer for output - VALIDATE(SIZEOF(*wireData) == wireDataSize, ERR_INVALID_DATA); + // Apend data to hash (no data) and response (none) + { + // Counted section that started before DH encoding cannot end within DH encoding + if (ctx->dhIsActive) { + VALIDATE(ctx->dhCountedSectionEntryLevel < ctx->countedSections.currentLevel, + ERR_INVALID_STATE); + } + VALIDATE(countedSectionEnd(&ctx->countedSections), ERR_INVALID_DATA); + ctx->responseLength = 0; + } - uint8_t buf[1]; - buf[0] = 1; - sha_256_append(&ctx->hashContext, buf, SIZEOF(buf)); // one action - sha_256_append(&ctx->hashContext, (uint8_t*) wireData, SIZEOF(*wireData)); + // Run ui step + ctx->ui_step = HANDLE_SIMPLE_STEP_RESPOND; + signTx_ui_runStep_simple(); +} + +// ======================= STORE_VALUE =========================== - ctx->action_type = getActionTypeByContractAccountName(ctx->network, - wireData->contractAccountName, - CONTRACT_ACCOUNT_NAME_LENGTH); - TRACE("Action type %d:", ctx->action_type); +__noinline_due_to_stack__ void signTx_handleStoreValueAPDU( + uint8_t p2, + MARK_UNUSED_NO_DEVEL uint8_t* constDataBuffer, + size_t constSize, + uint8_t* varDataBuffer, + size_t varSize) { + // Sanity checks and trace buffers + TRACE_STACK_USAGE(); + { + VALIDATE(1 <= p2 && p2 <= 3, ERR_INVALID_REQUEST_PARAMETERS); // we have 3 registers + TRACE("Storing to %d", (int) p2); + TRACE_BUFFER(constDataBuffer, constSize); + TRACE_BUFFER(varDataBuffer, varSize); } - security_policy_t policy = policyForSignTxActionHeader(ctx->action_type); - TRACE("Policy: %d", (int) policy); - ENSURE_NOT_DENIED(policy); + // Data format + VALIDATE(constSize == 0, ERR_INVALID_DATA); + struct { + uint8_t value[MAX_TX_APPEND_IN_SINGLE_APDU]; + }* varData = (void*) varDataBuffer; + // varSize validated in Storage section + + // Storage { - // select UI steps - switch (policy) { -#define CASE(POLICY, UI_STEP) \ - case POLICY: { \ - ctx->ui_step = UI_STEP; \ - break; \ + switch (p2) { +#define CASE(n) \ + case n: { \ + ASSERT(ctx->storage.initialized_magic == TX_STORAGE_INITIALIZED_MAGIC); \ + VALIDATE(varSize <= sizeof(ctx->storage.storedValue##n), ERR_INVALID_DATA); \ + ctx->storage.storedValueLen##n = varSize; \ + memcpy(ctx->storage.storedValue##n, varData->value, varSize); \ + break; \ } - CASE(POLICY_SHOW_BEFORE_RESPONSE, HANDLE_ACTION_HEADER_STEP_SHOW_TYPE); -#undef CASE + CASE(1); + CASE(2); + CASE(3); default: THROW(ERR_NOT_IMPLEMENTED); +#undef CASE } } - signTx_handleActionHeader_ui_runStep(); -} + // Preparing display variables ctx->key, ctx->value + { + ctx->key[0] = 0; + ctx->value[0] = 0; + } -// ============================== ACTION AUTHORIZATION ============================== + // Reading data finished, from now on we use G_io_apdu_buffer for output + // Apend data to hash (no data) and response (no data) + { ctx->responseLength = 0; } + + // Run ui step + ctx->ui_step = HANDLE_SIMPLE_STEP_RESPOND; + signTx_ui_runStep_simple(); +} + +// ======================= START DH ENCODING =========================== enum { - HANDLE_ACTION_AUTHORIZATION_STEP_SHOW_ACTOR = 400, - HANDLE_ACTION_AUTHORIZATION_STEP_SHOW_PERMISSION, - HANDLE_ACTION_AUTHORIZATION_STEP_RESPOND, - HANDLE_ACTION_AUTHORIZATION_STEP_INVALID, + HANDLE_DH_START_STEP_DISPLAY_MESSAGE = 800, + HANDLE_DH_START_STEP_RESPOND, + HANDLE_DH_START_STEP_INVALID, }; -static void signTx_handleActionAuthorization_ui_runStep() { +static void signTx_handleDHStart_ui_runStep() { TRACE("UI step %d", ctx->ui_step); TRACE_STACK_USAGE(); - ui_callback_fn_t* this_fn = signTx_handleActionAuthorization_ui_runStep; + ui_callback_fn_t* this_fn = signTx_handleDHStart_ui_runStep; UI_STEP_BEGIN(ctx->ui_step, this_fn); - /* UI_STEP(HANDLE_ACTION_AUTHORIZATION_STEP_SHOW_ACTOR) { - ui_displayPaginatedText( - "Actor", - ctx->actionValidationActor, - this_fn - ); - } - - UI_STEP(HANDLE_ACTION_AUTHORIZATION_STEP_SHOW_PERMISSION) { - ui_displayPaginatedText( - "Permission", - ctx->actionValidationPermission, - this_fn - ); - }*/ + UI_STEP(HANDLE_DH_START_STEP_DISPLAY_MESSAGE) { + ui_displayPaginatedText("Encrypting", "content", this_fn); + } - UI_STEP(HANDLE_ACTION_AUTHORIZATION_STEP_RESPOND) { - respondSuccessEmptyMsg(); - advanceStage(); + UI_STEP(HANDLE_DH_START_STEP_RESPOND) { + io_send_buf(SUCCESS, G_io_apdu_buffer, ctx->responseLength); + ui_displayBusy(); // needs to happen after I/O } - UI_STEP_END(HANDLE_ACTION_AUTHORIZATION_STEP_INVALID); + UI_STEP_END(HANDLE_DH_START_STEP_INVALID); } -__noinline_due_to_stack__ void signTx_handleActionAuthorizationAPDU(uint8_t p2, - uint8_t* wireDataBuffer, - size_t wireDataSize) { +__noinline_due_to_stack__ void signTx_handleStartDHEncodingAPDU( + uint8_t p2, + MARK_UNUSED_NO_DEVEL uint8_t* constDataBuffer, + size_t constSize, + uint8_t* varDataBuffer, + size_t varSize) { + // Sanity checks and trace buffers TRACE_STACK_USAGE(); { - // sanity checks - CHECK_STAGE(SIGN_STAGE_ACTION_AUTHORIZATION); - VALIDATE(p2 == P2_UNUSED, ERR_INVALID_REQUEST_PARAMETERS); - ASSERT(wireDataSize < BUFFER_SIZE_PARANOIA); + TRACE_BUFFER(constDataBuffer, constSize); + TRACE_BUFFER(varDataBuffer, varSize); } - { - // parse data - TRACE_BUFFER(wireDataBuffer, wireDataSize); - - struct { - uint8_t actor[NAME_VAR_LENGTH]; - uint8_t permission[NAME_VAR_LENGTH]; - }* wireData = (void*) wireDataBuffer; - - VALIDATE(SIZEOF(*wireData) == wireDataSize, ERR_INVALID_DATA); + // Data format + VALIDATE(constSize == 0, ERR_INVALID_DATA); + struct { + uint8_t pubkey[PUBKEY_LENGTH]; + }* varData = (void*) varDataBuffer; + VALIDATE(varSize == PUBKEY_LENGTH, ERR_INVALID_DATA); - uint8_t buf[1]; - buf[0] = 1; - sha_256_append(&ctx->hashContext, buf, SIZEOF(buf)); // one authorization - sha_256_append(&ctx->hashContext, wireData->actor, SIZEOF(wireData->actor)); - sha_256_append(&ctx->hashContext, wireData->permission, SIZEOF(wireData->permission)); - - uint8array_name_to_string(wireData->actor, - NAME_VAR_LENGTH, - ctx->actionValidationActor, - NAME_STRING_MAX_LENGTH); - uint8array_name_to_string(wireData->permission, - NAME_VAR_LENGTH, - ctx->actionValidationPermission, - NAME_STRING_MAX_LENGTH); + // Parse data ctx->otherPubkey + { + cx_err_t err = cx_ecfp_init_public_key_no_throw(CX_CURVE_SECP256K1, + varData->pubkey, + SIZEOF(varData->pubkey), + &ctx->otherPubkey); + VALIDATE(err == CX_OK, ERR_INVALID_DATA); } - security_policy_t policy = policyForSignTxActionAuthorization(); - TRACE("Policy: %d", (int) policy); - ENSURE_NOT_DENIED(policy); + // Preparing display variables ctx->key, ctx->value { - // select UI steps - switch (policy) { -#define CASE(POLICY, UI_STEP) \ - case POLICY: { \ - ctx->ui_step = UI_STEP; \ - break; \ + TRACE_STACK_USAGE(); + snprintf(ctx->key, MAX_DISPLAY_KEY_LENGTH, "Their Public Key"); + uint32_t outlen = public_key_to_wif(ctx->otherPubkey.W, + SIZEOF(ctx->otherPubkey.W), + ctx->value, + SIZEOF(ctx->value)); + ASSERT(outlen < SIZEOF(ctx->value)); + ctx->value[outlen] = 0; } - CASE(POLICY_SHOW_BEFORE_RESPONSE, HANDLE_ACTION_AUTHORIZATION_STEP_RESPOND); -#undef CASE - default: - THROW(ERR_NOT_IMPLEMENTED); + + // Reading data finished, from now on we use G_io_apdu_buffer for output + + // Init DH Encoding + // Append encrypted data to hash and response + { + TRACE_STACK_USAGE(); + VALIDATE(!ctx->dhIsActive, ERR_INVALID_STATE); + + dh_aes_key_t aesKey; + BEGIN_TRY { + TRY { + TRACE_STACK_USAGE(); + // Compute AES key + dh_init_aes_key(&aesKey, &ctx->wittnessPath, &ctx->otherPubkey); + + // Generate IV + uint8_t IV[DH_AES_IV_SIZE]; + cx_rng_no_throw(IV, SIZEOF(IV)); + + // INIT dh context + STATIC_ASSERT(DH_AES_IV_SIZE == CX_AES_BLOCK_SIZE, "Unexpected IV length"); + ctx->dhCountedSectionEntryLevel = ctx->countedSections.currentLevel; + ctx->responseLength = dh_encode_init(&ctx->dhContext, + &aesKey, + IV, + SIZEOF(IV), + G_io_apdu_buffer, + SIZEOF(G_io_apdu_buffer)); + ASSERT(ctx->responseLength == 20); // first 5 blocks + ctx->countedSectionDifference = ctx->responseLength; + TRACE("CS diff %d", (int) ctx->responseLength); + } + FINALLY { + explicit_bzero(&aesKey, SIZEOF(aesKey)); + } } + END_TRY; + + sha_256_append(&ctx->hashContext, G_io_apdu_buffer, ctx->responseLength); + ctx->dhIsActive = true; } - signTx_handleActionAuthorization_ui_runStep(); + // Run ui step + ctx->ui_step = HANDLE_DH_START_STEP_DISPLAY_MESSAGE; + signTx_handleDHStart_ui_runStep(); } -// ============================== ACTION DATA ============================== +// ======================= END DH ENCODING =========================== enum { - HANDLE_ACTION_DATA_STEP_SHOW_PUBKEY = 400, - HANDLE_ACTION_DATA_STEP_SHOW_AMOUNT, - HANDLE_ACTION_DATA_STEP_SHOW_MAX_FEE, - HANDLE_ACTION_DATA_STEP_SHOW_TPID, - HANDLE_ACTION_DATA_STEP_RESPOND, - HANDLE_ACTION_DATA_STEP_INVALID, + HANDLE_DH_END_STEP_CONFIRM = 900, + HANDLE_DH_END_STEP_RESPOND, + HANDLE_DH_END_STEP_INVALID, }; -static void signTx_handleActionData_ui_runStep() { +static void signTx_handleDHEnd_ui_runStep() { TRACE("UI step %d", ctx->ui_step); TRACE_STACK_USAGE(); - ui_callback_fn_t* this_fn = signTx_handleActionData_ui_runStep; + ui_callback_fn_t* this_fn = signTx_handleDHEnd_ui_runStep; UI_STEP_BEGIN(ctx->ui_step, this_fn); - UI_STEP(HANDLE_ACTION_DATA_STEP_SHOW_PUBKEY) { - ui_displayPaginatedText("Payee Pubkey", ctx->pubkey, this_fn); + UI_STEP(HANDLE_DH_END_STEP_CONFIRM) { + ui_displayPrompt("Encrypt content?", "", this_fn, respond_with_user_reject); } - UI_STEP(HANDLE_ACTION_DATA_STEP_SHOW_AMOUNT) { - ui_displayFIOAmountScreen("Amount", ctx->amount, this_fn); + UI_STEP(HANDLE_DH_END_STEP_RESPOND) { + io_send_buf(SUCCESS, G_io_apdu_buffer, ctx->responseLength); + ui_displayBusy(); // needs to happen after I/O } - UI_STEP(HANDLE_ACTION_DATA_STEP_SHOW_MAX_FEE) { - ui_displayFIOAmountScreen("Max fee", ctx->maxFee, this_fn); - } + UI_STEP_END(HANDLE_DH_END_STEP_INVALID); +} - /* UI_STEP(HANDLE_ACTION_DATA_STEP_SHOW_TPID) { - ui_displayPaginatedText( - "Tpid", - ctx->tpid, - this_fn - ); - }*/ +__noinline_due_to_stack__ void signTx_handleEndDHEncodingAPDU( + uint8_t p2, + MARK_UNUSED_NO_DEVEL uint8_t* constDataBuffer, + size_t constSize, + MARK_UNUSED_NO_DEVEL uint8_t* varDataBuffer, + size_t varSize) { + // Sanity checks and trace buffers + TRACE_STACK_USAGE(); + { + VALIDATE(p2 == P2_UNUSED, ERR_INVALID_REQUEST_PARAMETERS); + TRACE_BUFFER(constDataBuffer, constSize); + TRACE_BUFFER(varDataBuffer, varSize); + } - UI_STEP(HANDLE_ACTION_DATA_STEP_RESPOND) { - respondSuccessEmptyMsg(); - advanceStage(); + // Data format + { + VALIDATE(constSize == 0, ERR_INVALID_DATA); + VALIDATE(varSize == 0, ERR_INVALID_DATA); } - UI_STEP_END(HANDLE_ACTION_DATA_STEP_INVALID); -} + // Preparing display variables ctx->key, ctx->value + { + snprintf(ctx->key, MAX_DISPLAY_KEY_LENGTH, "Our Public Key"); + prepareOurPubkeyForDisplay(); + } -__noinline_due_to_stack__ void signTx_handleActionDataAPDU(uint8_t p2, - uint8_t* wireDataBuffer, - size_t wireDataSize) { - TRACE_STACK_USAGE(); + // Reading data finished, from now on we use G_io_apdu_buffer for output { - // sanity checks - CHECK_STAGE(SIGN_STAGE_ACTION_DATA); + // Apend data to hash (final blocks of DH encryption) and prepare response + { + // To be sure that we are encoding correct DH data + VALIDATE(integrityCheckEvaluate(&ctx->integrity), ERR_INTEGRITY_CHECK_FAILED); + + VALIDATE(ctx->dhIsActive, ERR_INVALID_STATE); + // Counted section that started within DH encoding cannot end after DH encoding + VALIDATE(ctx->dhCountedSectionEntryLevel == ctx->countedSections.currentLevel, + ERR_INVALID_STATE); + + dh_aes_key_t aesKey; + BEGIN_TRY { + TRY { + // Compute AES key + dh_init_aes_key(&aesKey, &ctx->wittnessPath, &ctx->otherPubkey); + + ctx->responseLength = dh_encode_finalize(&ctx->dhContext, + &aesKey, + G_io_apdu_buffer, + SIZEOF(G_io_apdu_buffer)); + } + FINALLY { + explicit_bzero(&aesKey, SIZEOF(aesKey)); + } + } + END_TRY; - VALIDATE(p2 == P2_UNUSED, ERR_INVALID_REQUEST_PARAMETERS); - ASSERT(wireDataSize < BUFFER_SIZE_PARANOIA); - } - - { - // parse data - TRACE_BUFFER(wireDataBuffer, wireDataSize); - - struct { - uint8_t dataLength[1]; - uint8_t pubkeyLength[1]; - uint8_t pubkey[MAX_WIF_PUBKEY_LENGTH]; // null terminated, for convenience, we will use - // displayPaginatedText - }* wireData1 = (void*) wireDataBuffer; - const uint8_t expectedWireData1Length = - SIZEOF(*wireData1) - MAX_WIF_PUBKEY_LENGTH + wireData1->pubkeyLength[0] + 1; - - struct { - uint8_t amount[8]; - uint8_t maxFee[8]; - uint8_t actor[NAME_VAR_LENGTH]; - uint8_t tpidLength[1]; - uint8_t tpid[MAX_TPID_LENGTH]; // null terminated, for convenience, we will use - // displayPaginatedText - }* wireData2 = ((void*) wireDataBuffer) + expectedWireData1Length; - const uint8_t expectedWireData2Length = - SIZEOF(*wireData2) - MAX_TPID_LENGTH + wireData2->tpidLength[0] + 1; - - VALIDATE(expectedWireData1Length + expectedWireData2Length == wireDataSize, - ERR_INVALID_DATA); - VALIDATE(wireData1->dataLength[0] == wireDataSize - 3, - ERR_INVALID_DATA); //-1 for data length, -2 fo trailing 0's - VALIDATE(wireData1->dataLength[0] <= MAX_SINGLE_BYTE_LENGTH, ERR_INVALID_DATA); - VALIDATE(wireData1->pubkeyLength[0] < MAX_SINGLE_BYTE_LENGTH, - ERR_INVALID_DATA); // < for terminating 0 - VALIDATE(wireData1->pubkeyLength[0] < MAX_WIF_PUBKEY_LENGTH, - ERR_INVALID_DATA); // < for terminating 0 - str_validateNullTerminatedTextBuffer(wireData1->pubkey, wireData1->pubkeyLength[0]); - - VALIDATE(wireData2->tpidLength[0] < MAX_SINGLE_BYTE_LENGTH, - ERR_INVALID_DATA); // < for terminating 0 - VALIDATE(wireData2->tpidLength[0] < MAX_TPID_LENGTH, - ERR_INVALID_DATA); // < for terminating 0 - str_validateNullTerminatedTextBuffer(wireData2->tpid, wireData2->tpidLength[0]); - - ctx->pubkey = (char*) wireData1->pubkey; - ctx->amount = u8be_read(wireData2->amount); - ctx->maxFee = u8be_read(wireData2->maxFee); - uint8array_name_to_string(wireData2->actor, - SIZEOF(wireData2->actor), - ctx->actionDataActor, - NAME_STRING_MAX_LENGTH); - ctx->tpid = (char*) wireData2->tpid; - - sha_256_append(&ctx->hashContext, - (uint8_t*) wireData1->dataLength, - SIZEOF(wireData1->dataLength)); - sha_256_append(&ctx->hashContext, - (uint8_t*) wireData1->pubkeyLength, - SIZEOF(wireData1->pubkeyLength)); - sha_256_append(&ctx->hashContext, (uint8_t*) wireData1->pubkey, wireData1->pubkeyLength[0]); - - sha_256_append(&ctx->hashContext, (uint8_t*) &ctx->amount, SIZEOF(ctx->amount)); - sha_256_append(&ctx->hashContext, (uint8_t*) &ctx->maxFee, SIZEOF(ctx->maxFee)); - sha_256_append(&ctx->hashContext, (uint8_t*) wireData2->actor, SIZEOF(wireData2->actor)); - sha_256_append(&ctx->hashContext, - (uint8_t*) wireData2->tpidLength, - SIZEOF(wireData2->tpidLength)); - sha_256_append(&ctx->hashContext, (uint8_t*) wireData2->tpid, wireData2->tpidLength[0]); - } - - security_policy_t policy = - policyForSignTxActionData(ctx->actionValidationActor, ctx->actionDataActor); - TRACE("Policy: %d", (int) policy); - ENSURE_NOT_DENIED(policy); - { - // select UI steps - switch (policy) { -#define CASE(POLICY, UI_STEP) \ - case POLICY: { \ - ctx->ui_step = UI_STEP; \ - break; \ - } - CASE(POLICY_SHOW_BEFORE_RESPONSE, HANDLE_ACTION_DATA_STEP_SHOW_PUBKEY); -#undef CASE - default: + ctx->countedSectionDifference += ctx->responseLength; + TRACE("CS diff %d from:%d", + (int) ctx->countedSectionDifference, + (int) ctx->responseLength); + VALIDATE(countedSectionProcess(&ctx->countedSections, ctx->countedSectionDifference), + ERR_INVALID_STATE); + + sha_256_append(&ctx->hashContext, G_io_apdu_buffer, ctx->responseLength); + ctx->dhIsActive = false; + } + + // Security policy + { + security_policy_t policy = POLICY_DENY; + policy = policyForSignTxDHEnd(); + TRACE("Policy: %d", (int) policy); + ENSURE_NOT_DENIED(policy); + // select UI step + if (policy == POLICY_PROMPT_BEFORE_RESPONSE) { + ctx->ui_step = HANDLE_DH_END_STEP_CONFIRM; + } else { THROW(ERR_NOT_IMPLEMENTED); + } } } - signTx_handleActionData_ui_runStep(); + signTx_handleDHEnd_ui_runStep(); } -// ============================== WITNESS ============================== +// ============================== FINISH ============================== enum { - HANDLE_WITNESS_STEP_DISPLAY_DETAILS = 1000, - HANDLE_WITNESS_STEP_CONFIRM, - HANDLE_WITNESS_STEP_RESPOND, - HANDLE_WITNESS_STEP_INVALID, + HANDLE_FINISH_STEP_DISPLAY_DETAILS = 1000, + HANDLE_FINISH_STEP_CONFIRM, + HANDLE_FINISH_STEP_RESPOND, + HANDLE_FINISH_STEP_INVALID, }; -static void signTx_handleWitness_ui_runStep() { +static void signTx_handleFinish_ui_runStep() { TRACE("UI step %d", ctx->ui_step); TRACE_STACK_USAGE(); - ui_callback_fn_t* this_fn = signTx_handleWitness_ui_runStep; + ui_callback_fn_t* this_fn = signTx_handleFinish_ui_runStep; UI_STEP_BEGIN(ctx->ui_step, this_fn); - UI_STEP(HANDLE_WITNESS_STEP_DISPLAY_DETAILS) { - ui_displayPubkeyScreen("Sign with", &ctx->wittnessPathPubkey, this_fn); + UI_STEP(HANDLE_FINISH_STEP_DISPLAY_DETAILS) { + ui_displayPaginatedText(ctx->key, ctx->value, this_fn); } - UI_STEP(HANDLE_WITNESS_STEP_CONFIRM) { + UI_STEP(HANDLE_FINISH_STEP_CONFIRM) { ui_displayPrompt("Sign", "transaction?", this_fn, respond_with_user_reject); } - UI_STEP(HANDLE_WITNESS_STEP_RESPOND) { - io_send_buf(SUCCESS, G_io_apdu_buffer, 65 + 32); + UI_STEP(HANDLE_FINISH_STEP_RESPOND) { + io_send_buf(SUCCESS, G_io_apdu_buffer, PUBKEY_LENGTH + SHA_256_SIZE); ui_displayBusy(); // needs to happen after I/O - advanceStage(); + ui_idle(); // we are done with this tx } - UI_STEP_END(HANDLE_WITNESS_STEP_INVALID); + UI_STEP_END(HANDLE_FINISH_STEP_INVALID); } -__noinline_due_to_stack__ void signTx_handleWitnessAPDU(uint8_t p2, - uint8_t* wireDataBuffer, - size_t wireDataSize) { +__noinline_due_to_stack__ void signTx_handleFinishAPDU( + uint8_t p2, + MARK_UNUSED_NO_DEVEL uint8_t* constDataBuffer, + size_t constSize, + MARK_UNUSED_NO_DEVEL uint8_t* varDataBuffer, + size_t varSize) { + // Sanity checks and trace buffers TRACE_STACK_USAGE(); { - // sanity checks - CHECK_STAGE(SIGN_STAGE_WITNESS); VALIDATE(p2 == P2_UNUSED, ERR_INVALID_REQUEST_PARAMETERS); - ASSERT(wireDataSize < BUFFER_SIZE_PARANOIA); + TRACE_BUFFER(constDataBuffer, constSize); + TRACE_BUFFER(varDataBuffer, varSize); + } + + // Data format + { + VALIDATE(constSize == 0, ERR_INVALID_DATA); + VALIDATE(varSize == 0, ERR_INVALID_DATA); + } + + // Preparing display variables ctx->key, ctx->value + { + snprintf(ctx->key, MAX_DISPLAY_KEY_LENGTH, "Sign with"); + prepareOurPubkeyForDisplay(); } - explicit_bzero(&ctx->wittnessPath, SIZEOF(ctx->wittnessPath)); + // Reading data finished, from now on we use G_io_apdu_buffer for output + // Hash - this is the last call, we finalize it + counted sections + uint8_t hashBuf[SHA_256_SIZE]; + explicit_bzero(hashBuf, SIZEOF(hashBuf)); { - // parse - TRACE_BUFFER(wireDataBuffer, wireDataSize); + sha_256_finalize(&ctx->hashContext, hashBuf, SIZEOF(hashBuf)); + TRACE("SHA_256_finalize, resulting hash:"); + TRACE_BUFFER(hashBuf, SHA_256_SIZE); + } - size_t parsedSize = bip44_parseFromWire(&ctx->wittnessPath, wireDataBuffer, wireDataSize); - VALIDATE(parsedSize == wireDataSize, ERR_INVALID_DATA); + // This is the last call - we need to check integrity of the command sequence + just for good + // measures we finalize counted section + { + VALIDATE(!ctx->dhIsActive, ERR_INVALID_STATE); + VALIDATE(integrityCheckEvaluate(&ctx->integrity), ERR_INTEGRITY_CHECK_FAILED); + VALIDATE(countedSectionFinalize(&ctx->countedSections), ERR_INVALID_DATA); } + // Security policy security_policy_t policy = POLICY_DENY; { - // get policy - policy = policyForSignTxWitness(&ctx->wittnessPath); + policy = policyForSignTxFinish(); TRACE("Policy: %d", (int) policy); ENSURE_NOT_DENIED(policy); + // select UI step + if (policy == POLICY_PROMPT_BEFORE_RESPONSE) { + ctx->ui_step = HANDLE_FINISH_STEP_DISPLAY_DETAILS; + } else { + THROW(ERR_NOT_IMPLEMENTED); + } } - // Extension points - uint8_t buf[1]; - explicit_bzero(buf, SIZEOF(buf)); - sha_256_append(&ctx->hashContext, buf, SIZEOF(buf)); - - // We finish the hash appending a 32-byte empty buffer - uint8_t hashBuf[32]; - explicit_bzero(hashBuf, SIZEOF(hashBuf)); - sha_256_append(&ctx->hashContext, hashBuf, SIZEOF(hashBuf)); - - // we get the resulting hash - sha_256_finalize(&ctx->hashContext, hashBuf, SIZEOF(hashBuf)); - TRACE("SHA_256_finalize, resulting hash:"); - TRACE_BUFFER(hashBuf, 32); - - // We derive the private key + // Derive keys and sign the transaction, setup private_key_t privateKey; - derivePrivateKey(&ctx->wittnessPath, &privateKey); - TRACE("privateKey.d:"); - TRACE_BUFFER(privateKey.d, privateKey.d_len); - - // We want to show pubkey, thus we derive it - derivePublicKey(&ctx->wittnessPath, &ctx->wittnessPathPubkey); - TRACE_BUFFER(ctx->wittnessPathPubkey.W, SIZEOF(ctx->wittnessPathPubkey.W)); - - // We sign the hash - // Code producing signatures is taken from EOS app - uint8_t V[33]; - uint8_t K[32]; - int tries = 0; - - // Loop until a candidate matching the canonical signature is found - // Taken from EOS app - // We use G_io_apdu_buffer to save memory (and also to minimize changes to EOS code) - // The code produces the signature right where we need it for the respons + explicit_bzero(&privateKey, SIZEOF(privateKey)); BEGIN_TRY { TRY { + // We derive the private key + { + derivePrivateKey(&ctx->wittnessPath, &privateKey); + TRACE("privateKey.d:"); + TRACE_BUFFER(privateKey.d, privateKey.d_len); + } + + // We sign the hash + // Code producing signatures is taken from EOS app + uint8_t V[33]; + uint8_t K[32]; + int tries = 0; + + // Loop until a candidate matching the canonical signature is found + // Taken from EOS app + // We use G_io_apdu_buffer to save memory (and also to minimize changes to EOS code) + // The code produces the signature right where we need it for the respons explicit_bzero(G_io_apdu_buffer, SIZEOF(G_io_apdu_buffer)); for (;;) { if (tries == 0) { @@ -743,51 +996,38 @@ __noinline_due_to_stack__ void signTx_handleWitnessAPDU(uint8_t p2, } G_io_apdu_buffer[0] = 27 + 4 + (G_io_apdu_buffer[100] & 0x01); ecdsa_der_to_sig(G_io_apdu_buffer + 100, G_io_apdu_buffer + 1); - TRACE_BUFFER(G_io_apdu_buffer, 65); + TRACE_BUFFER(G_io_apdu_buffer, PUBKEY_LENGTH); if (check_canonical(G_io_apdu_buffer + 1)) { + TRACE("Try %d succesfull!", tries); break; } else { - TRACE( - "Try %d unsuccesfull! We will not get correct " - "signature!!!!!!!!!!!!!!!!!!!!!!!!!", - tries); + TRACE("Try %d unsuccesfull!", tries); tries++; } } } FINALLY { - memset(&privateKey, 0, sizeof(privateKey)); + explicit_bzero(&privateKey, sizeof(privateKey)); } } END_TRY; // We add hash to the response TRACE("ecdsa_der_to_sig_result:"); - TRACE_BUFFER(G_io_apdu_buffer, 65); - memcpy(G_io_apdu_buffer + 65, hashBuf, 32); + TRACE_BUFFER(G_io_apdu_buffer, PUBKEY_LENGTH); + memcpy(G_io_apdu_buffer + PUBKEY_LENGTH, hashBuf, SHA_256_SIZE); - { - // select UI steps - switch (policy) { -#define CASE(POLICY, UI_STEP) \ - case POLICY: { \ - ctx->ui_step = UI_STEP; \ - break; \ - } - CASE(POLICY_PROMPT_BEFORE_RESPONSE, HANDLE_WITNESS_STEP_DISPLAY_DETAILS); -#undef CASE - default: - THROW(ERR_NOT_IMPLEMENTED); - } - } - - signTx_handleWitness_ui_runStep(); + signTx_handleFinish_ui_runStep(); } // ============================== MAIN HANDLER ============================== -typedef void subhandler_fn_t(uint8_t p2, uint8_t* dataBuffer, size_t dataSize); +typedef void subhandler_fn_t(uint8_t p2, + uint8_t* constDataBuffer, + size_t constSize, + uint8_t* varDataBuffer, + size_t varSize); static subhandler_fn_t* lookup_subhandler(uint8_t p1) { switch (p1) { @@ -798,11 +1038,15 @@ static subhandler_fn_t* lookup_subhandler(uint8_t p1) { default: \ return HANDLER; CASE(0x01, signTx_handleInitAPDU); - CASE(0x02, signTx_handleHeaderAPDU); - CASE(0x03, signTx_handleActionHeaderAPDU); - CASE(0x04, signTx_handleActionAuthorizationAPDU); - CASE(0x05, signTx_handleActionDataAPDU); - CASE(0x10, signTx_handleWitnessAPDU); + CASE(0x02, signTx_handleAppendConstDataAPDU); + CASE(0x03, signTx_handleShowMessageAPDU); + CASE(0x04, signTx_handleAppendDataAPDU); + CASE(0x05, signTx_handleStartCountedSectionAPDU); + CASE(0x06, signTx_handleEndCountedSectionAPDU); + CASE(0x07, signTx_handleStoreValueAPDU); + CASE(0x08, signTx_handleStartDHEncodingAPDU); + CASE(0x09, signTx_handleEndDHEncodingAPDU); + CASE(0x10, signTx_handleFinishAPDU); DEFAULT(NULL) #undef CASE #undef DEFAULT @@ -815,13 +1059,41 @@ void signTransaction_handleAPDU(uint8_t p1, size_t wireDataSize, bool isNewCall) { TRACE("P1 = 0x%x, P2 = 0x%x, isNewCall = %d", p1, p2, isNewCall); + TRACE_STACK_USAGE(); if (isNewCall) { explicit_bzero(ctx, SIZEOF(*ctx)); - ctx->stage = SIGN_STAGE_INIT; + TRACE("SHA_256_init"); + sha_256_init(&ctx->hashContext); + TRACE("Integrity check init"); + integrityCheckInit(&ctx->integrity); + TRACE("Counted sections init"); + countedSectionInit(&ctx->countedSections); + TRACE("Storage init"); + explicit_bzero(&ctx->storage, SIZEOF(ctx->storage)); + ctx->storage.initialized_magic = TX_STORAGE_INITIALIZED_MAGIC; + TRACE("DH inactive"); + ctx->dhIsActive = false; + ctx->initWasCalledMagic = TX_INIT_WAS_CALLED_INITIALIZED_MAGIC; + } + VALIDATE(TX_INIT_WAS_CALLED_INITIALIZED_MAGIC, ERR_INVALID_DATA); + + // Parse APDU into const and non-const part + ASSERT(wireDataSize < BUFFER_SIZE_PARANOIA); + VALIDATE(wireDataSize >= 2, ERR_INVALID_DATA); + uint8_t constantDataLen = wireDataBuffer[0]; + uint8_t variableDataLen = wireDataBuffer[1]; + VALIDATE(wireDataSize >= (size_t) 2 + constantDataLen + variableDataLen, ERR_INVALID_DATA); + uint8_t* constantData = wireDataBuffer + 2; + uint8_t* variableData = constantData + constantDataLen; + + { + // Update integrity and transaction hash + integrityCheckProcessInstruction(&ctx->integrity, p1, p2, constantData, constantDataLen); } subhandler_fn_t* subhandler = lookup_subhandler(p1); VALIDATE(subhandler != NULL, ERR_INVALID_REQUEST_PARAMETERS); - subhandler(p2, wireDataBuffer, wireDataSize); + + subhandler(p2, constantData, constantDataLen, variableData, variableDataLen); } diff --git a/src/signTransaction.h b/src/signTransaction.h index aaa7ff40..8436a08d 100644 --- a/src/signTransaction.h +++ b/src/signTransaction.h @@ -1,44 +1,62 @@ #ifndef H_FIO_APP_SIGN_TRANSACTION #define H_FIO_APP_SIGN_TRANSACTION +#include "diffieHellman.h" #include "handlers.h" #include "hash.h" #include "fio.h" #include "keyDerivation.h" +#include "signTransactionIntegrity.h" +#include "signTransactionCountedSection.h" +#include handler_fn_t signTransaction_handleAPDU; -typedef struct { - sha_256_context_t hashContext; - int ui_step; - int stage; +#define MAX_DISPLAY_KEY_LENGTH 20 +#define MAX_DISPLAY_VALUE_LENGTH 220 - network_type_t network; - char actionValidationActor[NAME_STRING_MAX_LENGTH]; +#define MAX_TX_APPEND_IN_SINGLE_APDU 220 - // The following data is not needed at once. - // to be used in HEADER step - uint32_t expiration; - uint16_t refBlockNum; - uint32_t refBlockPrefix; +typedef struct { + uint32_t initialized_magic; - // only used in ACTION HEADER step - action_type_t action_type; + uint8_t storedValueLen1; + uint8_t storedValue1[8]; - // only used in ACTION_AUTHORIZATION step - char actionValidationPermission[NAME_STRING_MAX_LENGTH]; + uint8_t storedValueLen2; + uint8_t storedValue2[8]; - // only used in ACTION_DATA step - char *pubkey; - uint64_t amount; - uint64_t maxFee; - char actionDataActor[NAME_STRING_MAX_LENGTH]; - char *tpid; + uint8_t storedValueLen3; + uint8_t storedValue3[64]; +} tx_value_storage_t; - // only used in WITNESS step +typedef struct { + uint16_t initWasCalledMagic; bip44_path_t wittnessPath; - public_key_t wittnessPathPubkey; + sha_256_context_t hashContext; + tx_integrity_t integrity; + tx_counted_section_t countedSections; + tx_value_storage_t storage; + + // This is data before posible DH encoding + uint8_t dataToAppendToTxLen; + uint8_t dataToAppendToTx[MAX_TX_APPEND_IN_SINGLE_APDU]; + + // DH encryption variables + uint8_t dhIsActive; + uint8_t dhCountedSectionEntryLevel; + public_key_t otherPubkey; + dh_context_t dhContext; + // DH encoding decreases data length, we need to store the difference and add the value to + // counted section after we finish DH encoding + uint16_t countedSectionDifference; + + int ui_step; + uint8_t responseLength; // Response is in G_io_apdu_buffer + // Null terminated strings to display + char key[MAX_DISPLAY_KEY_LENGTH]; + char value[MAX_DISPLAY_VALUE_LENGTH]; } ins_sign_transaction_context_t; #endif // H_FIO_APP_SIGN_TRANSACTION diff --git a/src/signTransactionCountedSection.c b/src/signTransactionCountedSection.c new file mode 100644 index 00000000..bd284c85 --- /dev/null +++ b/src/signTransactionCountedSection.c @@ -0,0 +1,76 @@ +#include "signTransactionCountedSection.h" +#include "utils.h" + +enum { + TX_COUNTED_SECTION_INITIALIZED_MAGIC = 12345, +}; + +__noinline_due_to_stack__ void countedSectionInit(tx_counted_section_t *cs) { + explicit_bzero(cs, SIZEOF(*cs)); + cs->initialized_magic = TX_COUNTED_SECTION_INITIALIZED_MAGIC; +} + +__noinline_due_to_stack__ bool countedSectionBegin(tx_counted_section_t *cs, + uint32_t expectedLength) { + STATIC_ASSERT(ARRAY_LEN(cs->count) == MAX_NESTED_COUNTED_SECTIONS, + "Incorrect tx_counted_section_t count length"); + ASSERT(cs->initialized_magic == TX_COUNTED_SECTION_INITIALIZED_MAGIC); + + // too deep nesting + if (cs->currentLevel >= MAX_NESTED_COUNTED_SECTIONS) { + return false; + } + + cs->currentLevel++; + cs->count[cs->currentLevel - 1] = expectedLength; + return true; +} + +__noinline_due_to_stack__ bool countedSectionProcess(tx_counted_section_t *cs, + uint32_t expectedLength) { + STATIC_ASSERT(ARRAY_LEN(cs->count) == MAX_NESTED_COUNTED_SECTIONS, + "Incorrect tx_counted_section_t count length"); + ASSERT(cs->initialized_magic == TX_COUNTED_SECTION_INITIALIZED_MAGIC); + ASSERT(cs->currentLevel <= MAX_NESTED_COUNTED_SECTIONS); + + for (size_t i = 0; i < cs->currentLevel; i++) { + TRACE("Counted section %d/%d: We have %d, use %d.", + (int) (i + 1), + (int) cs->currentLevel, + (int) cs->count[i], + (int) expectedLength); + if (cs->count[i] < expectedLength) { + return false; + } + cs->count[i] -= expectedLength; + } + return true; +} + +__noinline_due_to_stack__ bool countedSectionEnd(tx_counted_section_t *cs) { + STATIC_ASSERT(ARRAY_LEN(cs->count) == MAX_NESTED_COUNTED_SECTIONS, + "Incorrect tx_counted_section_t count length"); + ASSERT(cs->initialized_magic == TX_COUNTED_SECTION_INITIALIZED_MAGIC); + ASSERT(cs->currentLevel <= MAX_NESTED_COUNTED_SECTIONS); + + // curentLevel == 0 we cannot exit counted section + if (cs->currentLevel == 0) { + return false; + } + + // Counted section mismatch + if (cs->count[cs->currentLevel - 1] != 0) { + return false; + } + + cs->currentLevel--; + return true; +} + +__noinline_due_to_stack__ bool countedSectionFinalize(tx_counted_section_t *cs) { + STATIC_ASSERT(ARRAY_LEN(cs->count) == MAX_NESTED_COUNTED_SECTIONS, + "Incorrect tx_counted_section_t count length"); + ASSERT(cs->initialized_magic == TX_COUNTED_SECTION_INITIALIZED_MAGIC); + + return (cs->currentLevel == 0); +} diff --git a/src/signTransactionCountedSection.h b/src/signTransactionCountedSection.h new file mode 100644 index 00000000..6b880abc --- /dev/null +++ b/src/signTransactionCountedSection.h @@ -0,0 +1,33 @@ +#ifndef H_FIO_APP_SIGN_COIUNTED_SECTION +#define H_FIO_APP_SIGN_COIUNTED_SECTION + +#include +#include +#include "utils.h" + +#define MAX_NESTED_COUNTED_SECTIONS 5 + +// currencLevel=1 strores value on count[0], etc... +typedef struct { + uint32_t initialized_magic; + uint32_t count[MAX_NESTED_COUNTED_SECTIONS]; + uint8_t currentLevel; +} tx_counted_section_t; + +__noinline_due_to_stack__ void countedSectionInit(tx_counted_section_t *cs); + +__noinline_due_to_stack__ bool countedSectionBegin(tx_counted_section_t *cs, + uint32_t expectedLength); + +__noinline_due_to_stack__ bool countedSectionProcess(tx_counted_section_t *cs, + uint32_t expectedLength); + +__noinline_due_to_stack__ bool countedSectionEnd(tx_counted_section_t *cs); + +__noinline_due_to_stack__ bool countedSectionFinalize(tx_counted_section_t *cs); + +#ifdef DEVEL +__noinline_due_to_stack__ void run_countedSection_test(); +#endif // DEVEL + +#endif // H_FIO_APP_SIGN_COIUNTED_SECTION diff --git a/src/signTransactionCountedSection_test.c b/src/signTransactionCountedSection_test.c new file mode 100644 index 00000000..c3fb80b9 --- /dev/null +++ b/src/signTransactionCountedSection_test.c @@ -0,0 +1,98 @@ +#ifdef DEVEL + +#include "signTransactionCountedSection.h" +#include "assert.h" + +static void tooMuchNesting_test() { + tx_counted_section_t cs; + countedSectionInit(&cs); + ASSERT(countedSectionBegin(&cs, 1000)); + ASSERT(countedSectionBegin(&cs, 1000)); + ASSERT(countedSectionBegin(&cs, 1000)); + ASSERT(countedSectionBegin(&cs, 1000)); + ASSERT(countedSectionBegin(&cs, 1000)); + ASSERT(!countedSectionBegin(&cs, 1000)); +} + +static void finalizeOnNonZeroLevel_test() { + tx_counted_section_t cs; + countedSectionInit(&cs); + ASSERT(countedSectionBegin(&cs, 0)); + ASSERT(!countedSectionFinalize(&cs)); +} + +static void endSectionOnZeroLevel_test() { + tx_counted_section_t cs; + countedSectionInit(&cs); + ASSERT(!countedSectionEnd(&cs)); +} + +static void underflowLevel0_test() { + tx_counted_section_t cs; + countedSectionInit(&cs); + ASSERT(countedSectionBegin(&cs, 1000)); + ASSERT(countedSectionProcess(&cs, 999)); + ASSERT(!countedSectionEnd(&cs)); +} + +static void overflowLevel0_test() { + tx_counted_section_t cs; + countedSectionInit(&cs); + ASSERT(countedSectionBegin(&cs, 1000)); + ASSERT(countedSectionProcess(&cs, 1000)); + ASSERT(!countedSectionProcess(&cs, 1)); +} + +static void overflowLevel0From2_test() { + tx_counted_section_t cs; + countedSectionInit(&cs); + ASSERT(countedSectionBegin(&cs, 1000)); + ASSERT(countedSectionProcess(&cs, 300)); + ASSERT(countedSectionBegin(&cs, 800)); + ASSERT(countedSectionProcess(&cs, 500)); + ASSERT(countedSectionBegin(&cs, 500)); + ASSERT(!countedSectionProcess(&cs, 250)); +} + +static void underflowLevel0From2_test() { + tx_counted_section_t cs; + countedSectionInit(&cs); + ASSERT(countedSectionBegin(&cs, 1000)); + ASSERT(countedSectionProcess(&cs, 100)); + ASSERT(countedSectionBegin(&cs, 800)); + ASSERT(countedSectionProcess(&cs, 300)); + ASSERT(countedSectionBegin(&cs, 500)); + ASSERT(countedSectionProcess(&cs, 250)); + ASSERT(countedSectionProcess(&cs, 250)); + ASSERT(countedSectionEnd(&cs)); + ASSERT(countedSectionEnd(&cs)); + ASSERT(!countedSectionEnd(&cs)); +} + +static void correct_test() { + tx_counted_section_t cs; + countedSectionInit(&cs); + ASSERT(countedSectionBegin(&cs, 1000)); + ASSERT(countedSectionProcess(&cs, 200)); + ASSERT(countedSectionBegin(&cs, 800)); + ASSERT(countedSectionProcess(&cs, 300)); + ASSERT(countedSectionBegin(&cs, 500)); + ASSERT(countedSectionProcess(&cs, 250)); + ASSERT(countedSectionProcess(&cs, 250)); + ASSERT(countedSectionEnd(&cs)); + ASSERT(countedSectionEnd(&cs)); + ASSERT(countedSectionEnd(&cs)); +} + +__noinline_due_to_stack__ void run_countedSection_test() { + tooMuchNesting_test(); + finalizeOnNonZeroLevel_test(); + endSectionOnZeroLevel_test(); + underflowLevel0_test(); + overflowLevel0_test(); + overflowLevel0From2_test(); + underflowLevel0From2_test(); + correct_test(); +} + +#endif \ No newline at end of file diff --git a/src/signTransactionIntegrity.c b/src/signTransactionIntegrity.c new file mode 100644 index 00000000..7438ad95 --- /dev/null +++ b/src/signTransactionIntegrity.c @@ -0,0 +1,355 @@ +#include "signTransactionIntegrity.h" +#include "state.h" +#include "hash.h" + +static const uint8_t allowedHashes[][SHA_256_SIZE] = { +#ifdef DEVEL + // Testing transaction template for signTransactionCommandsBasic.js + {0x8a, 0xe3, 0x7f, 0xe4, 0x95, 0x02, 0x7a, 0xc1, 0x09, 0xde, 0x2e, + 0xe3, 0xf7, 0x95, 0x39, 0x14, 0x0f, 0xd5, 0x6a, 0xa5, 0x6a, 0x50, + 0xd3, 0xe9, 0x96, 0x83, 0x0e, 0x03, 0x3e, 0xda, 0x36, 0x76}, + // Testing transaction template for signTransactionCommandsShowData.js + {0xe6, 0x61, 0x26, 0xce, 0x75, 0x57, 0xf1, 0x30, 0xca, 0x99, 0xd7, + 0xa3, 0x05, 0x1c, 0x81, 0x36, 0x80, 0xfa, 0x41, 0x02, 0xd7, 0x91, + 0x5c, 0xbd, 0x68, 0xe6, 0xe3, 0x61, 0xef, 0x85, 0x71, 0x03}, + // Testing transaction template for signTransactionCommandsCountedSection.js + {0x2c, 0x55, 0x0f, 0x1f, 0x21, 0x8d, 0x01, 0x3a, 0x02, 0x7d, 0x2b, + 0x98, 0xbe, 0xfd, 0x5b, 0x82, 0x31, 0xc5, 0x7d, 0xcf, 0xe3, 0x63, + 0x45, 0x6a, 0x6e, 0x9c, 0x9c, 0xcf, 0xb7, 0xa5, 0x3b, 0x30}, + // Testing transaction template for signTransactionCommandsStorage.js + {0x3c, 0xc2, 0xa2, 0x0d, 0xfb, 0x3b, 0xde, 0xf4, 0xdd, 0x17, 0xf9, + 0x97, 0x1c, 0xc8, 0x42, 0x1a, 0xc3, 0x9f, 0x6a, 0x63, 0x9d, 0x0d, + 0x5d, 0x9f, 0xb4, 0x24, 0xcf, 0x6b, 0xe5, 0x7c, 0x38, 0x29}, + // Testing transaction template for signTransactionCommandsDH.js (DH step, and FINISH step) + {0xad, 0x0e, 0xd3, 0xa2, 0x95, 0xd5, 0x2c, 0x97, 0xb3, 0xf5, 0xa6, + 0xc0, 0x66, 0xea, 0xe5, 0x5d, 0xbb, 0x71, 0xd1, 0x1f, 0x57, 0x69, + 0x35, 0x89, 0xd4, 0x3a, 0x5a, 0xf0, 0x3e, 0xed, 0xbf, 0x17}, + {0xf2, 0xab, 0x8e, 0xd1, 0x16, 0x0a, 0xc8, 0x3e, 0x67, 0x2c, 0xef, + 0xcd, 0x8f, 0x81, 0x42, 0x97, 0x60, 0x7d, 0x8a, 0x1e, 0xc8, 0x76, + 0x87, 0xe4, 0x3f, 0x6a, 0x92, 0x3d, 0x03, 0xa0, 0x8a, 0x16}, + {0x43, 0xd2, 0x0e, 0x07, 0x7a, 0xf1, 0x88, 0x9a, 0x21, 0x13, 0x09, + 0xa8, 0x8b, 0xfe, 0xa4, 0x6a, 0xad, 0x4e, 0x43, 0x84, 0xb2, 0x94, + 0xe6, 0x95, 0xe5, 0x5c, 0xc9, 0x8d, 0x95, 0x87, 0x3b, 0xf9}, + {0xc5, 0x1d, 0xb3, 0x6c, 0x7b, 0xca, 0x2b, 0xbd, 0xde, 0x28, 0x55, + 0x02, 0xed, 0xd1, 0x0a, 0x59, 0x2b, 0xe2, 0xfa, 0xb7, 0x3f, 0x9e, + 0x77, 0xca, 0x36, 0xd1, 0x33, 0x4e, 0x85, 0x78, 0x99, 0xcd}, + // Testing transaction template for signTransactionCommandsDHCountedSections.js (DH step, and + // FINISH step) + {0x32, 0x94, 0xcb, 0xbb, 0x52, 0x16, 0xfb, 0xe3, 0xff, 0xba, 0x8a, + 0x8f, 0xdd, 0x9d, 0xa6, 0x4b, 0x7d, 0x27, 0x8d, 0x88, 0x53, 0xd0, + 0xfe, 0x52, 0x96, 0x02, 0xed, 0x5d, 0x96, 0x86, 0x20, 0xf0}, + {0xa3, 0x70, 0x53, 0x1e, 0xf3, 0x3e, 0xbe, 0x29, 0x3c, 0xb7, 0xcd, + 0xd3, 0xe4, 0x2b, 0xe0, 0x19, 0xa0, 0xdf, 0xb1, 0x2c, 0x92, 0xa1, + 0x08, 0x6c, 0xd8, 0x0b, 0xd4, 0xc5, 0x37, 0xce, 0xd2, 0xea}, + {0x02, 0xf3, 0x2d, 0x9f, 0xa2, 0xfa, 0xec, 0x13, 0xda, 0x81, 0x64, + 0xbb, 0x66, 0xea, 0x0e, 0xff, 0xde, 0x09, 0x43, 0x50, 0xca, 0xba, + 0xd4, 0x6f, 0xbf, 0x94, 0xc5, 0x4d, 0x7c, 0x5c, 0xb3, 0x41}, +#endif + {0x72, 0x0b, 0x29, 0xb9, 0xb7, 0x06, 0xaa, 0xac, 0xdd, 0x35, 0xa7, + 0xae, 0xef, 0xde, 0x25, 0x59, 0x1a, 0x55, 0x46, 0x06, 0x16, 0x54, + 0x82, 0x78, 0x84, 0x16, 0x83, 0xe1, 0xf0, 0xd7, 0x98, 0x73}, + {0x72, 0x0b, 0x29, 0xb9, 0xb7, 0x06, 0xaa, 0xac, 0xdd, 0x35, 0xa7, + 0xae, 0xef, 0xde, 0x25, 0x59, 0x1a, 0x55, 0x46, 0x06, 0x16, 0x54, + 0x82, 0x78, 0x84, 0x16, 0x83, 0xe1, 0xf0, 0xd7, 0x98, 0x73}, + {0x72, 0x0b, 0x29, 0xb9, 0xb7, 0x06, 0xaa, 0xac, 0xdd, 0x35, 0xa7, + 0xae, 0xef, 0xde, 0x25, 0x59, 0x1a, 0x55, 0x46, 0x06, 0x16, 0x54, + 0x82, 0x78, 0x84, 0x16, 0x83, 0xe1, 0xf0, 0xd7, 0x98, 0x73}, + {0x72, 0x0b, 0x29, 0xb9, 0xb7, 0x06, 0xaa, 0xac, 0xdd, 0x35, 0xa7, + 0xae, 0xef, 0xde, 0x25, 0x59, 0x1a, 0x55, 0x46, 0x06, 0x16, 0x54, + 0x82, 0x78, 0x84, 0x16, 0x83, 0xe1, 0xf0, 0xd7, 0x98, 0x73}, + {0x04, 0x68, 0x6b, 0x09, 0xf5, 0x1d, 0x68, 0xb0, 0x8a, 0x0d, 0x0c, + 0x6f, 0xac, 0x1a, 0x53, 0x37, 0x05, 0xe4, 0x02, 0x8a, 0x86, 0xf0, + 0xc5, 0x2f, 0xb9, 0x2c, 0x2c, 0x09, 0xe1, 0x30, 0x09, 0x52}, + {0x23, 0x27, 0x7c, 0x5c, 0x25, 0x48, 0x1d, 0xa2, 0xa8, 0x97, 0xa5, + 0xf2, 0xb7, 0xa3, 0x66, 0x1e, 0x35, 0xd7, 0x89, 0x90, 0x61, 0xad, + 0x9b, 0x00, 0x91, 0xc2, 0x53, 0x30, 0xb2, 0x6b, 0x42, 0xca}, + {0x04, 0x68, 0x6b, 0x09, 0xf5, 0x1d, 0x68, 0xb0, 0x8a, 0x0d, 0x0c, + 0x6f, 0xac, 0x1a, 0x53, 0x37, 0x05, 0xe4, 0x02, 0x8a, 0x86, 0xf0, + 0xc5, 0x2f, 0xb9, 0x2c, 0x2c, 0x09, 0xe1, 0x30, 0x09, 0x52}, + {0x23, 0x27, 0x7c, 0x5c, 0x25, 0x48, 0x1d, 0xa2, 0xa8, 0x97, 0xa5, + 0xf2, 0xb7, 0xa3, 0x66, 0x1e, 0x35, 0xd7, 0x89, 0x90, 0x61, 0xad, + 0x9b, 0x00, 0x91, 0xc2, 0x53, 0x30, 0xb2, 0x6b, 0x42, 0xca}, + {0x04, 0x68, 0x6b, 0x09, 0xf5, 0x1d, 0x68, 0xb0, 0x8a, 0x0d, 0x0c, + 0x6f, 0xac, 0x1a, 0x53, 0x37, 0x05, 0xe4, 0x02, 0x8a, 0x86, 0xf0, + 0xc5, 0x2f, 0xb9, 0x2c, 0x2c, 0x09, 0xe1, 0x30, 0x09, 0x52}, + {0x23, 0x27, 0x7c, 0x5c, 0x25, 0x48, 0x1d, 0xa2, 0xa8, 0x97, 0xa5, + 0xf2, 0xb7, 0xa3, 0x66, 0x1e, 0x35, 0xd7, 0x89, 0x90, 0x61, 0xad, + 0x9b, 0x00, 0x91, 0xc2, 0x53, 0x30, 0xb2, 0x6b, 0x42, 0xca}, + {0x04, 0x68, 0x6b, 0x09, 0xf5, 0x1d, 0x68, 0xb0, 0x8a, 0x0d, 0x0c, + 0x6f, 0xac, 0x1a, 0x53, 0x37, 0x05, 0xe4, 0x02, 0x8a, 0x86, 0xf0, + 0xc5, 0x2f, 0xb9, 0x2c, 0x2c, 0x09, 0xe1, 0x30, 0x09, 0x52}, + {0x23, 0x27, 0x7c, 0x5c, 0x25, 0x48, 0x1d, 0xa2, 0xa8, 0x97, 0xa5, + 0xf2, 0xb7, 0xa3, 0x66, 0x1e, 0x35, 0xd7, 0x89, 0x90, 0x61, 0xad, + 0x9b, 0x00, 0x91, 0xc2, 0x53, 0x30, 0xb2, 0x6b, 0x42, 0xca}, + {0xb9, 0xb3, 0x6e, 0x49, 0xe5, 0xc2, 0xac, 0x9e, 0x27, 0xd7, 0xbf, + 0xd1, 0x6c, 0x33, 0xdb, 0xa4, 0x79, 0x36, 0xc3, 0x6f, 0xa2, 0xac, + 0x28, 0xdc, 0x9e, 0xd8, 0xa8, 0x5b, 0x67, 0x33, 0x6f, 0x44}, + {0x90, 0xd9, 0xdd, 0xf7, 0x0d, 0x88, 0x32, 0xc2, 0x8a, 0xb2, 0xa8, + 0xb2, 0xd5, 0xae, 0x08, 0x21, 0x54, 0xc6, 0xcf, 0x76, 0x4e, 0x77, + 0x5e, 0x22, 0xde, 0x34, 0x63, 0x10, 0x4b, 0x60, 0xd4, 0x73}, + {0xb9, 0xb3, 0x6e, 0x49, 0xe5, 0xc2, 0xac, 0x9e, 0x27, 0xd7, 0xbf, + 0xd1, 0x6c, 0x33, 0xdb, 0xa4, 0x79, 0x36, 0xc3, 0x6f, 0xa2, 0xac, + 0x28, 0xdc, 0x9e, 0xd8, 0xa8, 0x5b, 0x67, 0x33, 0x6f, 0x44}, + {0x90, 0xd9, 0xdd, 0xf7, 0x0d, 0x88, 0x32, 0xc2, 0x8a, 0xb2, 0xa8, + 0xb2, 0xd5, 0xae, 0x08, 0x21, 0x54, 0xc6, 0xcf, 0x76, 0x4e, 0x77, + 0x5e, 0x22, 0xde, 0x34, 0x63, 0x10, 0x4b, 0x60, 0xd4, 0x73}, + {0xb9, 0xb3, 0x6e, 0x49, 0xe5, 0xc2, 0xac, 0x9e, 0x27, 0xd7, 0xbf, + 0xd1, 0x6c, 0x33, 0xdb, 0xa4, 0x79, 0x36, 0xc3, 0x6f, 0xa2, 0xac, + 0x28, 0xdc, 0x9e, 0xd8, 0xa8, 0x5b, 0x67, 0x33, 0x6f, 0x44}, + {0x90, 0xd9, 0xdd, 0xf7, 0x0d, 0x88, 0x32, 0xc2, 0x8a, 0xb2, 0xa8, + 0xb2, 0xd5, 0xae, 0x08, 0x21, 0x54, 0xc6, 0xcf, 0x76, 0x4e, 0x77, + 0x5e, 0x22, 0xde, 0x34, 0x63, 0x10, 0x4b, 0x60, 0xd4, 0x73}, + {0xb9, 0xb3, 0x6e, 0x49, 0xe5, 0xc2, 0xac, 0x9e, 0x27, 0xd7, 0xbf, + 0xd1, 0x6c, 0x33, 0xdb, 0xa4, 0x79, 0x36, 0xc3, 0x6f, 0xa2, 0xac, + 0x28, 0xdc, 0x9e, 0xd8, 0xa8, 0x5b, 0x67, 0x33, 0x6f, 0x44}, + {0x90, 0xd9, 0xdd, 0xf7, 0x0d, 0x88, 0x32, 0xc2, 0x8a, 0xb2, 0xa8, + 0xb2, 0xd5, 0xae, 0x08, 0x21, 0x54, 0xc6, 0xcf, 0x76, 0x4e, 0x77, + 0x5e, 0x22, 0xde, 0x34, 0x63, 0x10, 0x4b, 0x60, 0xd4, 0x73}, + {0xab, 0x0f, 0x5c, 0xce, 0x2f, 0xaf, 0x6b, 0x90, 0x93, 0xf3, 0xb5, + 0xbe, 0xa9, 0x6a, 0x74, 0xa7, 0x70, 0xd2, 0x91, 0x68, 0xf7, 0x1f, + 0xe5, 0x3d, 0x19, 0x74, 0xf7, 0xa5, 0x10, 0x39, 0x63, 0xc1}, + {0x30, 0x73, 0x00, 0xed, 0x8d, 0x10, 0x65, 0x24, 0x7f, 0xa3, 0xdd, + 0x2a, 0x1b, 0x7c, 0x90, 0xa8, 0xb2, 0x6f, 0xaf, 0xad, 0xb6, 0xf7, + 0xa7, 0x5f, 0x91, 0x92, 0x97, 0xe5, 0xf1, 0xb1, 0x21, 0x96}, + {0x13, 0x02, 0x4a, 0xa0, 0xa0, 0xea, 0x70, 0xc8, 0x11, 0x52, 0x2d, + 0x67, 0x17, 0x41, 0xcd, 0x8c, 0x4e, 0xf6, 0x80, 0x31, 0x7c, 0x4d, + 0x5c, 0xa0, 0xf2, 0xfa, 0x3c, 0x4b, 0xb1, 0x85, 0xc5, 0xcd}, + {0x8e, 0x26, 0x84, 0x94, 0x40, 0xd8, 0xcd, 0xf9, 0xd0, 0x1a, 0x08, + 0x17, 0xaa, 0x0b, 0x57, 0x33, 0xf6, 0x48, 0xf0, 0x1f, 0xea, 0xfd, + 0x51, 0xb4, 0xac, 0x3d, 0x18, 0xad, 0x87, 0x3f, 0xb9, 0xa4}, + {0xf6, 0x9c, 0xe5, 0x0f, 0x3c, 0xdf, 0xa4, 0x1e, 0x00, 0x7e, 0xf3, + 0xb0, 0x29, 0xc4, 0x3b, 0xc7, 0x92, 0x3e, 0xb3, 0x78, 0x71, 0x7d, + 0xed, 0x96, 0x1c, 0x41, 0x5a, 0x4c, 0x82, 0x50, 0xc9, 0xa1}, + {0xe7, 0xa8, 0xd4, 0xed, 0x82, 0xd2, 0x60, 0x32, 0x54, 0x5a, 0xc2, + 0xc6, 0x73, 0x73, 0xfb, 0xf5, 0xfa, 0xa6, 0x8f, 0x2f, 0xb4, 0xb8, + 0x91, 0xe3, 0xe8, 0x11, 0x6a, 0xca, 0x08, 0xbf, 0x59, 0xe1}, + {0x26, 0xe5, 0x21, 0x0f, 0x8f, 0xc8, 0x77, 0x8e, 0xb7, 0x24, 0x97, + 0x32, 0x20, 0xa2, 0xbc, 0x85, 0xbe, 0x11, 0x10, 0xb8, 0x39, 0x8d, + 0xd2, 0x7e, 0x9d, 0x3a, 0xbc, 0xaf, 0x58, 0x1a, 0x48, 0x79}, + {0xe0, 0xa6, 0x06, 0xd1, 0x34, 0xb3, 0xbf, 0xfd, 0x72, 0x6f, 0x69, 0xf7, 0xd1, 0xa5, 0x68, 0x78, + 0xd8, 0xad, 0x15, 0x66, 0xd4, 0x1e, 0xdc, 0x30, 0x1d, 0xbe, 0xea, 0x09, 0x82, 0xf1, 0x3d, 0xb}, + {0xd6, 0xcc, 0x05, 0x60, 0xfd, 0xa9, 0x7d, 0x55, 0xb2, 0x49, 0x4e, + 0x2a, 0x59, 0x13, 0xe3, 0xe4, 0x3c, 0xf7, 0x3e, 0x5e, 0x28, 0x3d, + 0x15, 0xe4, 0x68, 0x2d, 0x23, 0x3e, 0x7c, 0x9b, 0x0b, 0x63}, + {0xb5, 0xf3, 0xed, 0x5f, 0x34, 0x48, 0x5d, 0xa3, 0xa4, 0x93, 0x10, + 0xf0, 0x09, 0x8d, 0xfb, 0x71, 0x34, 0x5e, 0x0f, 0x6a, 0xc8, 0x42, + 0x16, 0xc0, 0xe1, 0xb9, 0xed, 0x11, 0x09, 0x7c, 0x22, 0x30}, + {0x3b, 0x19, 0xb4, 0x63, 0xcd, 0xba, 0xd4, 0x75, 0x76, 0x78, 0x03, + 0x92, 0x17, 0xae, 0xd5, 0xea, 0x13, 0xe1, 0xe8, 0xab, 0xc8, 0xc8, + 0x35, 0x7b, 0x50, 0xc8, 0xef, 0x5c, 0x1c, 0x2e, 0xe1, 0x72}, + {0x39, 0x31, 0xa7, 0x1c, 0x07, 0x8e, 0x5e, 0x28, 0x20, 0x90, 0x3e, + 0x25, 0xe1, 0x81, 0x8f, 0xea, 0x46, 0xda, 0x16, 0xd9, 0xd2, 0x56, + 0xf3, 0x91, 0x7e, 0x5a, 0xe4, 0x5b, 0x94, 0x73, 0x45, 0xdf}, + {0xea, 0xa0, 0xae, 0x50, 0x58, 0x10, 0x80, 0x4b, 0x52, 0x1e, 0x91, + 0x0b, 0xc9, 0x64, 0xad, 0x73, 0x76, 0xd9, 0x37, 0xfa, 0x33, 0xab, + 0xcf, 0x1f, 0xf8, 0x71, 0x50, 0xf9, 0xba, 0xea, 0x4b, 0x2d}, + {0xeb, 0x12, 0x64, 0xc2, 0x90, 0xa6, 0x78, 0x09, 0xe1, 0x56, 0xdf, + 0x06, 0x15, 0xd6, 0x64, 0x7e, 0x47, 0xb9, 0x92, 0x95, 0x92, 0x2b, + 0x51, 0x40, 0xe8, 0xc9, 0x82, 0x7f, 0x68, 0x4f, 0xe6, 0xfc}, + {0x62, 0x62, 0x11, 0x4f, 0xad, 0x75, 0x96, 0x76, 0x7f, 0x65, 0x43, + 0xd0, 0x61, 0x91, 0x35, 0x1d, 0x6e, 0xbf, 0x64, 0xd6, 0x94, 0x1c, + 0x25, 0xbb, 0x59, 0xc1, 0x26, 0xe5, 0x94, 0xce, 0x89, 0xcf}, + {0x68, 0x4d, 0x19, 0x1b, 0xec, 0x18, 0x69, 0x3a, 0xc2, 0x2a, 0x79, + 0xe3, 0xbc, 0xe5, 0xa4, 0xc6, 0xe1, 0xa5, 0xb3, 0xfd, 0x6e, 0x04, + 0xb0, 0x33, 0xd4, 0x2f, 0xe6, 0x1b, 0x5d, 0x51, 0x7b, 0x80}, + {0xf7, 0xf1, 0xe3, 0xcc, 0xda, 0xbc, 0x21, 0x9c, 0xb7, 0xef, 0xbe, + 0x45, 0x6c, 0x87, 0xf3, 0x59, 0x76, 0xc9, 0x9c, 0x0d, 0xe9, 0xac, + 0x10, 0x93, 0x46, 0xda, 0x1f, 0x91, 0xd3, 0x78, 0x1b, 0x53}, + {0x04, 0x7d, 0x85, 0x04, 0xb6, 0xb9, 0x21, 0x51, 0x19, 0x7d, 0x20, + 0xc9, 0xe7, 0x9f, 0xc1, 0x81, 0x3e, 0xe4, 0xa0, 0xd5, 0xa2, 0x1d, + 0x3c, 0x36, 0x66, 0x89, 0x01, 0x1a, 0x71, 0xe9, 0x2a, 0x8a}, + {0x47, 0x75, 0xd1, 0x26, 0xa4, 0x4b, 0x48, 0x95, 0x2d, 0x84, 0x5e, + 0x43, 0x06, 0x7e, 0x6b, 0x13, 0x42, 0x6f, 0xdd, 0x77, 0x55, 0x25, + 0x9d, 0x6a, 0xfc, 0x7f, 0x83, 0xc0, 0x82, 0xc2, 0xeb, 0x4c}, + {0x52, 0x44, 0x21, 0x4f, 0x79, 0xf9, 0xba, 0x27, 0x9e, 0x34, 0xd4, + 0xfb, 0x35, 0x13, 0x7f, 0xc4, 0x06, 0xe6, 0xc7, 0x7d, 0x99, 0x51, + 0x7e, 0xd4, 0xd2, 0x7d, 0x8e, 0x97, 0xf8, 0x1c, 0x34, 0x54}, + {0xf8, 0x73, 0x29, 0xbd, 0xc7, 0x2d, 0xaf, 0x8d, 0xdb, 0xac, 0xac, + 0x28, 0xea, 0x24, 0x7a, 0xe1, 0x1a, 0x82, 0x97, 0x47, 0x4f, 0x9b, + 0x59, 0x86, 0xcb, 0x27, 0xe5, 0xf9, 0x99, 0x1d, 0xf1, 0x43}, + {0x2d, 0x26, 0x7c, 0x41, 0xf6, 0x32, 0x27, 0x91, 0x10, 0x76, 0x96, + 0x39, 0x57, 0x0f, 0xe3, 0xf5, 0x56, 0x9b, 0x81, 0xa3, 0x02, 0xc9, + 0x1d, 0x46, 0x95, 0x19, 0x0b, 0x26, 0x3b, 0x60, 0xf0, 0xe4}, + {0x2f, 0x1e, 0x4e, 0xa2, 0x81, 0x48, 0x5e, 0x01, 0x55, 0x1b, 0x4f, + 0x20, 0x56, 0x7b, 0x97, 0x27, 0xba, 0xae, 0xad, 0x60, 0x5f, 0xb6, + 0x83, 0xd7, 0x37, 0x4a, 0x0d, 0x06, 0xeb, 0xa0, 0xf8, 0xbb}, + {0xe4, 0x85, 0x22, 0x61, 0x22, 0x3b, 0xa3, 0x05, 0x42, 0xa0, 0xb6, + 0x0d, 0x73, 0xbf, 0xf9, 0xcd, 0x82, 0x6a, 0x9c, 0x9b, 0x74, 0x70, + 0x47, 0x5c, 0x61, 0x80, 0x31, 0x25, 0x46, 0xa9, 0x4f, 0x21}, + {0xf2, 0xef, 0xc6, 0x69, 0x8f, 0x05, 0x36, 0x14, 0x8b, 0x56, 0x1d, + 0x43, 0xb2, 0x22, 0xfb, 0x42, 0xb9, 0x1f, 0x8d, 0xd8, 0x83, 0x07, + 0xb7, 0xff, 0x87, 0x09, 0x47, 0xf1, 0xb8, 0x61, 0x52, 0xbb}, + {0x21, 0xfb, 0x21, 0x50, 0xd1, 0x7b, 0xa2, 0x06, 0x4b, 0xe7, 0x52, + 0xa8, 0x1f, 0xca, 0x68, 0xdf, 0x60, 0x62, 0x43, 0xeb, 0x75, 0x3c, + 0x56, 0x9d, 0x97, 0x10, 0xc4, 0x24, 0x20, 0xba, 0xf4, 0x4d}, + {0x10, 0x21, 0x24, 0x06, 0xf8, 0xec, 0xc1, 0x2b, 0x09, 0x46, 0x00, + 0x4c, 0x6c, 0x81, 0x01, 0x82, 0x67, 0xc8, 0x81, 0x68, 0x5a, 0x8a, + 0x57, 0x6a, 0x7e, 0xb1, 0xb1, 0xf7, 0x6a, 0x7b, 0x4b, 0xae}, + {0xb8, 0x19, 0x6b, 0x10, 0x79, 0x4b, 0x3f, 0xe1, 0x50, 0xb3, 0xa1, + 0xdb, 0x0f, 0x74, 0xd3, 0x82, 0xa1, 0x6c, 0xad, 0xdb, 0xb1, 0x0d, + 0xd0, 0x20, 0xc2, 0xad, 0x8e, 0x74, 0xbe, 0xb1, 0x9f, 0xb4}, + {0xa8, 0x1e, 0x4e, 0xc5, 0xa9, 0x1e, 0x6b, 0x4d, 0xe2, 0x33, 0x46, + 0x1f, 0xfd, 0xbf, 0x3c, 0x84, 0x77, 0x55, 0xcb, 0x1f, 0x64, 0xdd, + 0x17, 0xdc, 0xe6, 0x35, 0xb4, 0xb9, 0xe7, 0x7d, 0x27, 0xdc}, + {0x84, 0x95, 0x42, 0x84, 0x3c, 0x8b, 0x00, 0xd8, 0x9c, 0x2c, 0x17, + 0xa0, 0x72, 0x66, 0xf9, 0x15, 0x08, 0x0b, 0xc9, 0xf0, 0x48, 0x7c, + 0x01, 0x09, 0x15, 0x2e, 0x42, 0x7b, 0x70, 0x82, 0x0d, 0x7a}, + {0x72, 0x12, 0x3c, 0xb5, 0x28, 0xc5, 0x67, 0xc4, 0xe3, 0x45, 0x56, + 0x1f, 0xa9, 0x74, 0xe3, 0xcc, 0x87, 0x33, 0xbf, 0x9e, 0xe4, 0xc6, + 0x37, 0x0b, 0x8f, 0x77, 0x7c, 0xe3, 0xa3, 0xa1, 0x02, 0xa3}, + {0xbd, 0x92, 0x94, 0x84, 0x09, 0xaa, 0x7b, 0x8e, 0xc0, 0xed, 0x3a, + 0x07, 0x81, 0xa3, 0x71, 0x32, 0xec, 0x5d, 0xda, 0x02, 0x54, 0x3f, + 0xe7, 0x2c, 0xed, 0xb5, 0xe8, 0xc0, 0xb9, 0x5a, 0xdd, 0x38}, + {0xfd, 0x00, 0x10, 0x47, 0x1a, 0x47, 0xad, 0xd1, 0x5b, 0x01, 0x5d, + 0xcf, 0x12, 0xd4, 0xba, 0x20, 0x12, 0x7d, 0xd6, 0x6a, 0x99, 0x37, + 0xde, 0x57, 0x79, 0x6a, 0x30, 0x3f, 0xc3, 0x92, 0x45, 0x86}, + {0x4c, 0x3b, 0x0f, 0xe9, 0x89, 0x90, 0xd3, 0x01, 0xac, 0x21, 0x87, + 0x6f, 0x36, 0xf1, 0x3c, 0x74, 0xe0, 0xad, 0x9d, 0x6e, 0x2b, 0xb6, + 0x5a, 0x22, 0x64, 0x78, 0x04, 0xca, 0x15, 0xa1, 0x8c, 0xfc}, + {0xbf, 0xb9, 0x78, 0x51, 0x6e, 0x2d, 0x39, 0x0e, 0x60, 0x99, 0x18, + 0x16, 0x7b, 0x35, 0xe3, 0xea, 0xa5, 0x6c, 0x85, 0x10, 0x7a, 0x79, + 0x31, 0xe3, 0xc3, 0x72, 0x3d, 0x46, 0x4a, 0xb1, 0x40, 0x6a}, + {0x41, 0x5f, 0x45, 0x83, 0x7a, 0xb3, 0xbf, 0x54, 0x4c, 0x6a, 0xa0, + 0x99, 0x48, 0xfb, 0x93, 0x9a, 0xa9, 0x9f, 0x4e, 0x60, 0x61, 0x25, + 0xea, 0xa3, 0xe3, 0x3e, 0xca, 0x60, 0xde, 0xa9, 0xce, 0x8e}, + {0xfd, 0xa3, 0xe5, 0x8e, 0x32, 0x92, 0xb9, 0xa4, 0x6c, 0x17, 0x80, + 0x34, 0x87, 0xf8, 0xaf, 0xcd, 0xa8, 0xe5, 0x1e, 0x91, 0xbd, 0x2f, + 0x89, 0x8e, 0x1e, 0xe8, 0x30, 0x48, 0xa8, 0x8d, 0xd7, 0xbc}, + {0x9c, 0x08, 0x4d, 0x07, 0x8a, 0x16, 0x6f, 0x65, 0xca, 0xd8, 0x80, + 0x5a, 0x82, 0x6f, 0xe3, 0x28, 0x18, 0x13, 0x88, 0xee, 0xc4, 0xd7, + 0xaf, 0x2f, 0xda, 0x1b, 0xe9, 0xa0, 0xf3, 0x74, 0x01, 0x60}, + {0x22, 0x77, 0x67, 0x74, 0x9f, 0x04, 0xfd, 0xb0, 0x1b, 0x4a, 0x9e, + 0x87, 0xaa, 0x3c, 0x35, 0xa6, 0xc3, 0xf1, 0xb8, 0x62, 0xb1, 0xd9, + 0x12, 0x33, 0x43, 0x55, 0x2d, 0xe8, 0x25, 0x7d, 0x7c, 0xaa}, + {0x53, 0x8f, 0xc3, 0xe7, 0xcc, 0x10, 0x26, 0x04, 0x1c, 0xe7, 0x08, + 0xfd, 0x9a, 0xf0, 0xf8, 0x8a, 0x06, 0xc4, 0x62, 0x04, 0xa5, 0xd0, + 0x7c, 0xfd, 0xd4, 0x99, 0x30, 0xbd, 0x29, 0x98, 0x59, 0x8e}, + {0x23, 0xc9, 0xce, 0x25, 0xf6, 0x0a, 0xd3, 0x61, 0x65, 0x42, 0xcd, + 0x86, 0xb6, 0x76, 0x73, 0x47, 0x7f, 0xf2, 0x14, 0x45, 0x2b, 0x01, + 0x66, 0x96, 0x35, 0xed, 0x82, 0xf7, 0x1a, 0xf1, 0x5d, 0x30}, + {0xac, 0x34, 0x97, 0xb2, 0xd8, 0xeb, 0x94, 0xd3, 0x22, 0x46, 0x08, + 0x2e, 0x3f, 0x28, 0x09, 0xb3, 0x40, 0x1a, 0xf0, 0x8f, 0x7d, 0x30, + 0x1a, 0x83, 0xd7, 0x7b, 0xbc, 0x13, 0x7c, 0xa2, 0xde, 0x5c}, + {0x92, 0x80, 0x45, 0xf0, 0x68, 0xab, 0x62, 0x83, 0xfd, 0x9b, 0x55, + 0xaf, 0x83, 0xaf, 0x5f, 0x9f, 0x8b, 0x92, 0x4c, 0xb1, 0xb6, 0x2d, + 0x12, 0x1a, 0xe9, 0x46, 0xa0, 0x0f, 0x0f, 0xd5, 0x4c, 0x82}, + {0x54, 0xa0, 0xde, 0x88, 0x10, 0xbd, 0x6f, 0x67, 0x14, 0xfc, 0xd1, + 0x0d, 0x93, 0xb9, 0xe7, 0x07, 0x28, 0x14, 0x2d, 0xab, 0x50, 0x5c, + 0x12, 0x83, 0xdc, 0x87, 0xb5, 0x52, 0x6a, 0x02, 0xf9, 0x61}, + {0xf5, 0xd6, 0xf2, 0x37, 0xb4, 0x66, 0x56, 0xe3, 0xca, 0xba, 0xac, 0x01, 0x50, 0x4c, 0x97, 0xa6, + 0x2b, 0xb7, 0x14, 0x45, 0xb6, 0x54, 0x7c, 0x18, 0x29, 0xb7, 0xde, 0x4f, 0xf3, 0xae, 0xfd, 0x2}, + {0x81, 0x6f, 0x57, 0xd9, 0x7d, 0x97, 0x3f, 0xc6, 0x30, 0x61, 0x79, + 0x5b, 0x26, 0x2d, 0x57, 0x22, 0xe8, 0xe7, 0xdc, 0x8d, 0xbf, 0xb2, + 0xab, 0x51, 0x15, 0x4b, 0x7b, 0x57, 0x52, 0x70, 0xdc, 0x2d}, + {0xa9, 0xae, 0x65, 0x7f, 0x2c, 0x82, 0x95, 0x2b, 0xab, 0x45, 0x31, + 0x85, 0x43, 0xe4, 0x12, 0x59, 0x45, 0x4e, 0x2c, 0x10, 0x9c, 0x13, + 0xe6, 0xbe, 0x2a, 0x1e, 0x97, 0x0a, 0xce, 0xfa, 0xc6, 0x13}, + {0x0f, 0x32, 0x00, 0x3e, 0xa4, 0x48, 0xc1, 0xdf, 0x21, 0xe8, 0xf4, 0xec, 0x4e, 0xae, 0x7a, 0x68, + 0x36, 0x68, 0x0a, 0x20, 0xb5, 0xa0, 0xd5, 0x2c, 0xec, 0x26, 0x2c, 0x95, 0x04, 0x50, 0xf9, 0x7}, + {0x5a, 0x28, 0xc1, 0x55, 0xfe, 0x77, 0x53, 0x06, 0xe7, 0x97, 0xcd, + 0x1f, 0x65, 0xe5, 0xbe, 0xbe, 0x6a, 0x49, 0xdd, 0x0d, 0xce, 0x10, + 0x04, 0x10, 0xf2, 0xcb, 0xe0, 0xad, 0xa4, 0xd7, 0x0d, 0x66}, + {0x89, 0x16, 0x45, 0xa3, 0xad, 0x26, 0xe6, 0xdc, 0xc6, 0xb9, 0x44, + 0xb3, 0x74, 0x7c, 0x76, 0xe7, 0x0e, 0x56, 0xb8, 0x39, 0xe5, 0x75, + 0xe5, 0x48, 0x23, 0x32, 0x93, 0xb2, 0x7c, 0xbf, 0x44, 0xad}, + {0x0c, 0xf2, 0x4f, 0x0e, 0x34, 0xeb, 0x55, 0xae, 0xa2, 0x60, 0x55, + 0x46, 0xa3, 0x4e, 0x48, 0x0d, 0xb8, 0x34, 0x58, 0x2a, 0x80, 0x62, + 0xc3, 0x07, 0x65, 0x76, 0x65, 0x34, 0xe6, 0xe9, 0x45, 0x69}, + {0x80, 0x4e, 0x3b, 0x2d, 0xea, 0x0b, 0x2c, 0x7b, 0x06, 0xfb, 0x0c, + 0xb5, 0x63, 0xfc, 0x66, 0xf1, 0x0c, 0x95, 0xd0, 0x0e, 0x67, 0x65, + 0xa8, 0x98, 0xa3, 0xa8, 0xe0, 0x1e, 0xeb, 0x5e, 0x65, 0x3c}, + {0xa2, 0x12, 0x84, 0xf7, 0xd7, 0x4e, 0x24, 0x3b, 0xbd, 0x7c, 0x61, + 0x03, 0xbe, 0x8b, 0xeb, 0xeb, 0xde, 0x44, 0x09, 0xf2, 0x5c, 0xd2, + 0x08, 0x90, 0x1d, 0x03, 0xf2, 0xaf, 0xa3, 0x22, 0xbc, 0xb1}, + {0x85, 0xd6, 0x13, 0x4e, 0x7e, 0x0c, 0x78, 0x9c, 0x59, 0x8b, 0x42, + 0x3d, 0xa8, 0x57, 0x3e, 0x53, 0xb0, 0x82, 0xcb, 0xc9, 0x03, 0x01, + 0xe9, 0x62, 0xbd, 0x01, 0x55, 0x73, 0x40, 0xa0, 0xc6, 0xd9}, + {0xaf, 0xca, 0xde, 0x50, 0xca, 0xf1, 0x6f, 0x6c, 0x6e, 0x0e, 0xca, + 0x9b, 0xda, 0x54, 0x7d, 0x22, 0xa4, 0x04, 0x32, 0x17, 0x98, 0x63, + 0x24, 0x62, 0x37, 0xe4, 0x09, 0x7d, 0x02, 0x15, 0x48, 0xed}, + {0x7c, 0x77, 0x9d, 0x79, 0xd4, 0x5e, 0x49, 0x5a, 0xd4, 0xb9, 0x8d, + 0xf6, 0xb9, 0xb3, 0x4b, 0x44, 0x5e, 0xd3, 0x6a, 0x4a, 0x36, 0x9f, + 0x1f, 0xd7, 0x1a, 0x5b, 0xec, 0x19, 0x45, 0xd9, 0x6c, 0x39}, + {0x2e, 0x75, 0xa8, 0x74, 0x8b, 0xcf, 0xdd, 0x43, 0x2d, 0xb2, 0x58, + 0x1a, 0x20, 0xc1, 0x06, 0xcd, 0x76, 0x6a, 0x55, 0x6d, 0xac, 0x29, + 0x33, 0x62, 0x3e, 0x3f, 0x72, 0xf4, 0xaf, 0xf2, 0x1c, 0x20}, + {0x3a, 0xb8, 0xac, 0xce, 0x82, 0x3b, 0x31, 0xff, 0xf5, 0x4f, 0x18, + 0x95, 0x19, 0x82, 0xed, 0xec, 0x82, 0x76, 0xde, 0x4a, 0x91, 0x4c, + 0x97, 0xc8, 0x18, 0xc4, 0xaa, 0x90, 0x65, 0xae, 0x99, 0xc1}, + {0x2c, 0x03, 0x66, 0x3b, 0xa4, 0xa8, 0x16, 0xe1, 0xd5, 0x33, 0xed, + 0xc9, 0x53, 0xe4, 0xe0, 0xb2, 0xb5, 0xf1, 0x9f, 0xfa, 0x48, 0x61, + 0x62, 0xdc, 0xd2, 0x20, 0x6e, 0xc9, 0x46, 0x8c, 0xe2, 0xcb}, + {0x4a, 0xde, 0x67, 0x61, 0x5f, 0xa6, 0x74, 0x60, 0xa0, 0x70, 0x9b, + 0x9e, 0x81, 0x0f, 0x54, 0x76, 0xe8, 0x6a, 0xed, 0x5b, 0xaa, 0xbc, + 0x04, 0x96, 0xc1, 0x5d, 0xeb, 0x28, 0xf5, 0x7c, 0xa5, 0x25}, + {0xf8, 0x4d, 0xac, 0xa3, 0xb0, 0x93, 0xa7, 0x32, 0x47, 0x21, 0x4c, + 0x7e, 0xf1, 0xfb, 0x99, 0x0a, 0xb5, 0x4f, 0xf0, 0x6b, 0x9d, 0x3b, + 0x69, 0xac, 0x73, 0xd9, 0x91, 0xf9, 0xdf, 0x79, 0x54, 0x4c}, + {0x15, 0x20, 0xa0, 0x1b, 0x8c, 0x14, 0xc1, 0x46, 0x2c, 0xe2, 0xcb, + 0x55, 0x20, 0x7c, 0xef, 0xba, 0x6d, 0x77, 0x56, 0x5f, 0xec, 0xe1, + 0xbf, 0xe9, 0x0a, 0x60, 0xf9, 0xa2, 0xe1, 0x2d, 0x33, 0xf8}, + {0x97, 0xb8, 0xd1, 0xc4, 0x89, 0x18, 0x9b, 0xbc, 0xcb, 0xc6, 0xb1, 0x8e, 0x54, 0x0c, 0xba, 0x73, + 0x37, 0xd2, 0xe3, 0x8f, 0x04, 0x3e, 0x98, 0xad, 0xb9, 0x7e, 0x6d, 0xba, 0xaa, 0xae, 0xef, 0xa0} + +}; + +enum { + TX_INTEGRITY_HASH_INITIALIZED_MAGIC = 12345, +}; + +__noinline_due_to_stack__ void integrityCheckInit(tx_integrity_t *integrity) { + explicit_bzero(integrity, SIZEOF(*integrity)); + integrity->initialized_magic = TX_INTEGRITY_HASH_INITIALIZED_MAGIC; + + TRACE_BUFFER(&integrity->integrityHash, SIZEOF(integrity->integrityHash)); +} + +__noinline_due_to_stack__ void integrityCheckProcessInstruction(tx_integrity_t *integrity, + uint8_t p1, + uint8_t p2, + const uint8_t *constData, + uint8_t constDataLength) { + ASSERT(integrity->initialized_magic == TX_INTEGRITY_HASH_INITIALIZED_MAGIC); + sha_256_context_t ctx; + sha_256_init(&ctx); + sha_256_append(&ctx, integrity->integrityHash, SIZEOF(integrity->integrityHash)); + sha_256_append(&ctx, &p1, SIZEOF(p1)); + sha_256_append(&ctx, &p2, SIZEOF(p2)); + sha_256_append(&ctx, &constDataLength, SIZEOF(constDataLength)); + sha_256_append(&ctx, constData, constDataLength); + sha_256_finalize(&ctx, integrity->integrityHash, SIZEOF(integrity->integrityHash)); + + TRACE("p1: %02x. p2: %02x, constdata: %.*h", p1, p2, constDataLength, constData); + TRACE_BUFFER(&integrity->integrityHash, SIZEOF(integrity->integrityHash)); +} + +__noinline_due_to_stack__ bool _integrityCheckEvaluate( + tx_integrity_t *integrity, + const uint8_t (*allowedHashList)[SHA_256_SIZE], + uint16_t allowedHashListLength) { + PRINTF("Integrity check for: {"); + for (size_t i = 0; i < SIZEOF(integrity->integrityHash) - 1; i++) { + PRINTF("0x%02x, ", integrity->integrityHash[i]); + } + PRINTF("0x%x}\n", integrity->integrityHash[SIZEOF(integrity->integrityHash) - 1]); +#if defined(DEVEL) && defined(NO_INTEGRITY_CHECK) + TRACE("Integrity check skipped"); + return true; +#endif + ASSERT(integrity->initialized_magic == TX_INTEGRITY_HASH_INITIALIZED_MAGIC); + for (uint16_t i = 0; i < allowedHashListLength; i++) { + STATIC_ASSERT(SIZEOF(allowedHashList[i]) == SIZEOF(integrity->integrityHash), + "Incompatible hashes."); + if (memcmp(integrity->integrityHash, allowedHashList[i], SIZEOF(allowedHashList[i])) == 0) { + TRACE("Integrity check passed"); + return true; + } + } + + TRACE("Integrity check failed"); + return false; +} + +__noinline_due_to_stack__ bool integrityCheckEvaluate(tx_integrity_t *integrity) { + return _integrityCheckEvaluate(integrity, allowedHashes, ARRAY_LEN(allowedHashes)); +} diff --git a/src/signTransactionIntegrity.h b/src/signTransactionIntegrity.h new file mode 100644 index 00000000..87d1e744 --- /dev/null +++ b/src/signTransactionIntegrity.h @@ -0,0 +1,32 @@ +#ifndef H_FIO_APP_SIGN_TRANSACTION_INTEGRITY +#define H_FIO_APP_SIGN_TRANSACTION_INTEGRITY + +#include +#include +#include "hash.h" + +typedef struct { + uint16_t initialized_magic; + uint8_t integrityHash[SHA_256_SIZE]; +} tx_integrity_t; + +__noinline_due_to_stack__ void integrityCheckInit(tx_integrity_t *integrity); + +__noinline_due_to_stack__ void integrityCheckProcessInstruction(tx_integrity_t *integrity, + uint8_t p1, + uint8_t p2, + const uint8_t *constData, + uint8_t constDataLength); + +__noinline_due_to_stack__ bool integrityCheckEvaluate(tx_integrity_t *integrity); + +#ifdef DEVEL +#include "hash.h" +__noinline_due_to_stack__ bool _integrityCheckEvaluate(tx_integrity_t *integrity, + const uint8_t (*allowedHashes)[SHA_256_SIZE], + uint16_t allowedHashesLength); + +__noinline_due_to_stack__ void run_integrityCheck_test(); +#endif // DEVEL + +#endif // H_FIO_APP_SIGN_TRANSACTION_INTEGRITY diff --git a/src/signTransactionIntegrity_test.c b/src/signTransactionIntegrity_test.c new file mode 100644 index 00000000..bc83e34f --- /dev/null +++ b/src/signTransactionIntegrity_test.c @@ -0,0 +1,91 @@ +#ifdef DEVEL + +#include "signTransactionIntegrity.h" +#include "hash.h" +#include "hexUtils.h" + +static const char* allowedHashesHex[] = { + "3732fb4f90aff701bbadb8a95b95d1e0ed2a60cf445a1d849fa79340c8d340a9", +}; +static uint8_t allowedHashes[ARRAY_LEN(allowedHashesHex)][SHA_256_SIZE]; + +static void run1() { + tx_integrity_t integrity; + integrityCheckInit(&integrity); + const uint8_t data1[] = {3, 4}; + integrityCheckProcessInstruction(&integrity, 1, 2, data1, SIZEOF(data1)); + const uint8_t data2[] = {}; + integrityCheckProcessInstruction(&integrity, 5, 6, data2, SIZEOF(data2)); + ASSERT(_integrityCheckEvaluate(&integrity, allowedHashes, ARRAY_LEN(allowedHashes))); +} + +// modified p1 +static void run2() { + tx_integrity_t integrity; + integrityCheckInit(&integrity); + const uint8_t data1[] = {3, 4}; + integrityCheckProcessInstruction(&integrity, 2, 2, data1, SIZEOF(data1)); + const uint8_t data2[] = {}; + integrityCheckProcessInstruction(&integrity, 5, 6, data2, SIZEOF(data2)); + ASSERT(!_integrityCheckEvaluate(&integrity, allowedHashes, ARRAY_LEN(allowedHashes))); +} + +// modified p2 +static void run3() { + tx_integrity_t integrity; + integrityCheckInit(&integrity); + const uint8_t data1[] = {3, 4}; + integrityCheckProcessInstruction(&integrity, 1, 3, data1, SIZEOF(data1)); + const uint8_t data2[] = {}; + integrityCheckProcessInstruction(&integrity, 5, 6, data2, SIZEOF(data2)); + ASSERT(!_integrityCheckEvaluate(&integrity, allowedHashes, ARRAY_LEN(allowedHashes))); +} + +// modified data +static void run4() { + tx_integrity_t integrity; + integrityCheckInit(&integrity); + const uint8_t data1[] = {3}; + integrityCheckProcessInstruction(&integrity, 1, 2, data1, SIZEOF(data1)); + const uint8_t data2[] = {}; + integrityCheckProcessInstruction(&integrity, 5, 6, data2, SIZEOF(data2)); + ASSERT(!_integrityCheckEvaluate(&integrity, allowedHashes, ARRAY_LEN(allowedHashes))); +} + +// swapped instructions +static void run5() { + tx_integrity_t integrity; + integrityCheckInit(&integrity); + const uint8_t data1[] = {3, 4}; + const uint8_t data2[] = {}; + integrityCheckProcessInstruction(&integrity, 5, 6, data2, SIZEOF(data2)); + integrityCheckProcessInstruction(&integrity, 1, 2, data1, SIZEOF(data1)); + ASSERT(!_integrityCheckEvaluate(&integrity, allowedHashes, ARRAY_LEN(allowedHashes))); +} + +// Less instruction and second, correc use +static void run6() { + tx_integrity_t integrity; + integrityCheckInit(&integrity); + const uint8_t data1[] = {3, 4}; + integrityCheckProcessInstruction(&integrity, 1, 2, data1, SIZEOF(data1)); + ASSERT(!_integrityCheckEvaluate(&integrity, allowedHashes, ARRAY_LEN(allowedHashes))); + run1(); +} + +__noinline_due_to_stack__ void run_integrityCheck_test() { + // decode hex + for (size_t i = 0; i < ARRAY_LEN(allowedHashes); i++) { + decode_hex(allowedHashesHex[i], allowedHashes[i], SIZEOF(allowedHashes[i])); + } + + // run tests + run1(); + run2(); + run3(); + run4(); + run5(); + run6(); +} + +#endif // DEVEL \ No newline at end of file diff --git a/src/signTransactionParse.c b/src/signTransactionParse.c new file mode 100644 index 00000000..29bb4177 --- /dev/null +++ b/src/signTransactionParse.c @@ -0,0 +1,324 @@ +#include "common.h" +#include "signTransactionParse.h" +#include "hexUtils.h" +#include "textUtils.h" +#include "fio.h" + +static bool isNumberType(value_format_t format) { + return (format >= 0x10 && format < 0x20); +} + +// Returns number of bytes read +// Based on: +// https://github.com/fioprotocol/fiojs/blob/10848a02983a4b5b7f185c90bc96fb78e9ab0a6f/src/chain-serialize.ts#L259 +// As of my understanding, allowed values are between 0 and UINT32_MAX +static uint8_t getNumberFromVarUInt(const uint8_t *value, uint8_t valueLen, uint64_t *number) { + ASSERT(number != NULL); + uint8_t bitShift = 0; + uint8_t readPosition = 0; + *number = 0; + + while (true) { + VALIDATE(readPosition < valueLen, ERR_INVALID_DATA); + uint8_t nextByte = value[readPosition]; + *number |= ((uint64_t) (nextByte & 0x7f)) << bitShift; + bitShift += 7; + readPosition++; + TRACE("readPosition: %d, nextByte:%d, Value read: %d,%d", + (int) readPosition, + (int) nextByte, + (int) ((*number) / 0x100000000), + (int) *(number)); + if (!(nextByte & 0x80)) { + break; + } + VALIDATE(readPosition < 9, + ERR_INVALID_DATA); // if we read more than 9 values we will owerflow uint64 + } + + TRACE("VarUInt conversion: Value read: %d,%d, Number of bytes: %d", + (int) ((*number) / 0x100000000), + (int) *(number), + (int) readPosition); + + return readPosition; +} + +//-------------------- STRING PARSING AND DISPLAYING FUNCTIONS ---------------------- + +static void displayBufferShowAsHex(const uint8_t *value, + uint8_t valueLen, + char display[MAX_DISPLAY_VALUE_LENGTH]) { + VALIDATE(valueLen * 2 < MAX_DISPLAY_VALUE_LENGTH, ERR_INVALID_DATA); + size_t outlen = encode_hex(value, valueLen, display, MAX_DISPLAY_VALUE_LENGTH); + ASSERT(outlen < MAX_DISPLAY_VALUE_LENGTH); + display[outlen] = 0; +} + +static void displayASCIIString(const uint8_t *value, + uint8_t valueLen, + char display[MAX_DISPLAY_VALUE_LENGTH]) { + VALIDATE(valueLen < MAX_DISPLAY_VALUE_LENGTH, ERR_INVALID_DATA); + str_validateTextBuffer(value, valueLen); + memcpy(display, value, valueLen); + display[valueLen] = 0; +} + +static void displayName(const uint8_t *value, + uint8_t valueLen, + char display[MAX_DISPLAY_VALUE_LENGTH]) { + VALIDATE(valueLen == NAME_VAR_LENGTH, ERR_INVALID_DATA); + uint8array_name_to_string(value, + valueLen, + display, + MAX_DISPLAY_VALUE_LENGTH); // null terminated, no return vallue +} + +static void displayASCIIStringWithLength(const uint8_t *value, + uint8_t valueLen, + char display[MAX_DISPLAY_VALUE_LENGTH]) { + uint64_t strLen = 0; + uint8_t strLenLen = getNumberFromVarUInt(value, valueLen, &strLen); + VALIDATE(strLen < MAX_DISPLAY_VALUE_LENGTH, ERR_INVALID_DATA); + VALIDATE(valueLen == strLenLen + strLen, ERR_INVALID_DATA); + str_validateTextBuffer(value + strLenLen, strLen); + memcpy(display, value + strLenLen, strLen); + display[strLen] = 0; +} + +static void displayMemoHash(const uint8_t *value, + uint8_t valueLen, + char display[MAX_DISPLAY_VALUE_LENGTH]) { + // data format: + // hasMemo(0x00/0x01), if yes then memolength (1b, < 127) and memo + // then hash and offline url in the same manner + // Either memo is present, or both hash and offline url. + TRACE_BUFFER(value, valueLen); + VALIDATE(valueLen >= 1, ERR_INVALID_DATA); + if (value[0] == 1) { // has memo + VALIDATE(valueLen >= 2, + ERR_INVALID_DATA); // this also checks that memo has length at least 1 + size_t memoLen = value[1]; + VALIDATE(memoLen < 127, ERR_INVALID_DATA); + VALIDATE(valueLen == memoLen + 4, + ERR_INVALID_DATA); // has memo, memo length, memo, no hash, no url + VALIDATE(value[2 + memoLen] == 0, ERR_INVALID_DATA); // no hash + VALIDATE(value[3 + memoLen] == 0, ERR_INVALID_DATA); // no offline_url + } else if (value[0] == 0) { // no memo + TRACE("No memo"); + VALIDATE(valueLen >= 3, ERR_INVALID_DATA); + VALIDATE(value[1] == 1, ERR_INVALID_DATA); // has hash + size_t hashLen = value[2]; + VALIDATE(hashLen < 127, ERR_INVALID_DATA); + VALIDATE(valueLen >= hashLen + 5, ERR_INVALID_DATA); + VALIDATE(value[hashLen + 3] == 1, ERR_INVALID_DATA); // has url + size_t urlLen = value[hashLen + 4]; + VALIDATE(urlLen < 127, ERR_INVALID_DATA); + VALIDATE(valueLen == hashLen + urlLen + 5, ERR_INVALID_DATA); + } else { + VALIDATE(false, ERR_INVALID_DATA); + } + // These data are not meant to e displayed at themoement + snprintf(display, MAX_DISPLAY_VALUE_LENGTH, "NOT IMPLEMENTED"); +} + +static void displayChainCodeTokenCodePublicAddr(const uint8_t *value, + uint8_t valueLen, + char display[MAX_DISPLAY_VALUE_LENGTH]) { + // Format: token code lenth (varUINT), token code, chain code length(varUINT), chain code, + // publicAddrLen (varUINT), publicAddr + TRACE_BUFFER(value, valueLen); + VALIDATE(valueLen >= 1, ERR_INVALID_DATA); + size_t tokenCodeLen = value[0]; // always just one byte as it needs to be <=10 + VALIDATE(1 <= tokenCodeLen && tokenCodeLen <= 10, ERR_INVALID_DATA); + VALIDATE(valueLen >= tokenCodeLen + 2, ERR_INVALID_DATA); + size_t chainCodeLen = value[tokenCodeLen + 1]; // always just one byte as it needs to be <=10 + VALIDATE(1 <= chainCodeLen && chainCodeLen <= 10, ERR_INVALID_DATA); + VALIDATE(valueLen >= tokenCodeLen + chainCodeLen + 3, ERR_INVALID_DATA); + uint64_t publicAddrLen = 0; + size_t publicAddrLenLen = getNumberFromVarUInt(value + tokenCodeLen + chainCodeLen + 2, + valueLen - (tokenCodeLen + chainCodeLen + 2), + &publicAddrLen); + size_t publicAddrStart = tokenCodeLen + chainCodeLen + 2 + publicAddrLenLen; + VALIDATE(1 <= publicAddrLen && publicAddrLen <= 128, ERR_INVALID_DATA); + VALIDATE(valueLen == publicAddrStart + publicAddrLen, ERR_INVALID_DATA); + + str_validateTextBuffer(value + 1, tokenCodeLen); + str_validateTextBuffer(value + tokenCodeLen + 2, chainCodeLen); + str_validateTextBuffer(value + publicAddrStart, publicAddrLen); + + // prepare to display + ASSERT(tokenCodeLen + 1 + chainCodeLen + 1 + publicAddrLen < MAX_DISPLAY_VALUE_LENGTH); + snprintf(display, + MAX_DISPLAY_VALUE_LENGTH, + "%.*s:%.*s:%.*s", + (int) chainCodeLen, + value + tokenCodeLen + 2, + (int) tokenCodeLen, + value + 1, + (int) publicAddrLen, + value + publicAddrStart); +} + +//-------------------- NUMBER PARSING FUNCTIONS ---------------------- + +static void parseUInt64(const uint8_t *value, uint8_t valueLen, uint64_t *number) { + VALIDATE(valueLen == sizeof(*number), ERR_INVALID_DATA); + memcpy(number, value, sizeof(*number)); +} + +static void parseVarUInt32(const uint8_t *value, uint8_t valueLen, uint64_t *number) { + uint8_t read = getNumberFromVarUInt(value, valueLen, number); + VALIDATE(read == valueLen, ERR_INVALID_DATA); + VALIDATE(*number <= UINT32_MAX, ERR_INVALID_DATA); +} + +//-------------------- NUMBER VALIDATING FUNCTIONS ---------------------- + +static void validateNumber(value_buffer_validation_t validation, + uint64_t arg1, + uint64_t arg2, + uint64_t number) { + if (validation == VALUE_VALIDATION_NUMBER) { + VALIDATE(arg1 <= number && number <= arg2, ERR_INVALID_DATA); + } +} + +//-------------------- NUMBER DISPLAYING FUNCTIONS ---------------------- + +static void displayFioAmount(uint64_t amount, char display[MAX_DISPLAY_VALUE_LENGTH]) { + size_t outlen = str_formatFIOAmount(amount, display, MAX_DISPLAY_VALUE_LENGTH); + ASSERT(outlen < MAX_DISPLAY_VALUE_LENGTH); + display[outlen] = 0; +} + +static void displayNumber(uint64_t number, char display[MAX_DISPLAY_VALUE_LENGTH]) { + size_t outlen = str_formatUint64(number, display, MAX_DISPLAY_VALUE_LENGTH); + ASSERT(outlen < MAX_DISPLAY_VALUE_LENGTH); + display[outlen] = 0; +} + +//-------------------- BUFFER VALIDATION ---------------------- + +void bufferValidation(value_format_t format, + value_buffer_validation_t validation, + uint64_t arg1, + uint64_t arg2, + MARK_UNUSED const uint8_t *value, + uint8_t valueLen) { + // buffer validation + switch (validation) { +#define CASE(VALIDATION, condition) \ + case VALIDATION: { \ + VALIDATE(condition, ERR_INVALID_DATA); \ + break; \ + } + CASE(VALUE_VALIDATION_NONE, arg1 == 0 && arg2 == 0); + CASE(VALUE_VALIDATION_INBUFFER_LENGTH, arg1 <= valueLen && arg2 >= valueLen); + CASE(VALUE_VALIDATION_NUMBER, + isNumberType(format)); // number validation implies number type + default: + THROW(ERR_INVALID_DATA); +#undef CASE + } +} + +//-------------------- MAIN FUNCITONS ---------------------- + +void parseValueToUInt64(value_format_t format, + value_buffer_validation_t validation, + uint8_t argument1[8], + uint8_t argument2[8], + const uint8_t *value, + uint8_t valueLen, + uint64_t *number) { + uint64_t arg1 = 0; + uint64_t arg2 = 0; + memcpy(&arg1, argument1, 8); + memcpy(&arg2, argument2, 8); + + bufferValidation(format, validation, arg1, arg2, value, valueLen); + + switch (format) { + case VALUE_FORMAT_FIO_AMOUNT: { + parseUInt64(value, valueLen, number); + validateNumber(validation, arg1, arg2, *number); + break; + } + case VALUE_FORMAT_UINT64: { + parseUInt64(value, valueLen, number); + validateNumber(validation, arg1, arg2, *number); + break; + } + case VALUE_FORMAT_VARUINT32: { + parseVarUInt32(value, valueLen, number); + validateNumber(validation, arg1, arg2, *number); + break; + } + default: + THROW(ERR_INVALID_DATA); +#undef CASE + } +} + +void parseValueToDisplay(value_format_t format, + value_buffer_validation_t validation, + uint8_t argument1[8], + uint8_t argument2[8], + const uint8_t *value, + uint8_t valueLen, + char display[MAX_DISPLAY_VALUE_LENGTH]) { + uint64_t arg1 = 0; + uint64_t arg2 = 0; + memcpy(&arg1, argument1, 8); + memcpy(&arg2, argument2, 8); + + bufferValidation(format, validation, arg1, arg2, value, valueLen); + + switch (format) { + case VALUE_FORMAT_BUFFER_SHOW_AS_HEX: + displayBufferShowAsHex(value, valueLen, display); + break; + case VALUE_FORMAT_ASCII_STRING: + displayASCIIString(value, valueLen, display); + break; + case VALUE_FORMAT_NAME: + displayName(value, valueLen, display); + break; + case VALUE_FORMAT_ASCII_STRING_WITH_LENGTH: + displayASCIIStringWithLength(value, valueLen, display); + break; + case VALUE_FORMAT_FIO_AMOUNT: { + uint64_t amount; + parseUInt64(value, valueLen, &amount); + validateNumber(validation, arg1, arg2, amount); + displayFioAmount(amount, display); + break; + } + case VALUE_FORMAT_UINT64: { + uint64_t number; + parseUInt64(value, valueLen, &number); + validateNumber(validation, arg1, arg2, number); + displayNumber(number, display); + break; + } + case VALUE_FORMAT_VARUINT32: { + uint64_t number; + parseVarUInt32(value, valueLen, &number); + validateNumber(validation, arg1, arg2, number); + displayNumber(number, display); + break; + } + case VALUE_FORMAT_MEMO_HASH: { + displayMemoHash(value, valueLen, display); + break; + } + case VALUE_FORMAT_CHAIN_CODE_TOKEN_CODE_PUBLIC_ADDR: { + displayChainCodeTokenCodePublicAddr(value, valueLen, display); + break; + } + default: + THROW(ERR_INVALID_DATA); +#undef CASE + } +} diff --git a/src/signTransactionParse.h b/src/signTransactionParse.h new file mode 100644 index 00000000..e25793ec --- /dev/null +++ b/src/signTransactionParse.h @@ -0,0 +1,49 @@ +#ifndef H_FIO_APP_SIGN_TRANSACTION_PARSE +#define H_FIO_APP_SIGN_TRANSACTION_PARSE +#include +#include "signTransaction.h" + +typedef enum { + VALUE_FORMAT_UNKNOWN = 0x00, + + // String types + VALUE_FORMAT_BUFFER_SHOW_AS_HEX = 0x01, + VALUE_FORMAT_ASCII_STRING = 0x02, + VALUE_FORMAT_NAME = 0x03, + VALUE_FORMAT_ASCII_STRING_WITH_LENGTH = 0x04, + + // Number + VALUE_FORMAT_FIO_AMOUNT = 0x10, + VALUE_FORMAT_UINT64 = 0x14, + VALUE_FORMAT_VARUINT32 = 0x17, + + // Special + VALUE_FORMAT_MEMO_HASH = 0x20, + VALUE_FORMAT_CHAIN_CODE_TOKEN_CODE_PUBLIC_ADDR = 0x21, +} value_format_t; + +typedef enum { + VALUE_VALIDATION_UNKNOWN = 0, + VALUE_VALIDATION_NONE = 1, + VALUE_VALIDATION_INBUFFER_LENGTH = 2, + + VALUE_VALIDATION_NUMBER = 3, +} value_buffer_validation_t; + +void parseValueToDisplay(value_format_t format, + value_buffer_validation_t validation, + uint8_t argument1[8], + uint8_t argument2[8], + const uint8_t *value, + uint8_t valueLen, + char display[MAX_DISPLAY_VALUE_LENGTH]); + +void parseValueToUInt64(value_format_t format, + value_buffer_validation_t validation, + uint8_t argument1[8], + uint8_t argument2[8], + const uint8_t *value, + uint8_t valueLen, + uint64_t *number); + +#endif // H_FIO_APP_SIGN_TRANSACTION_PARSE diff --git a/src/state.h b/src/state.h index 035c5983..cfb2e9a2 100644 --- a/src/state.h +++ b/src/state.h @@ -1,6 +1,7 @@ #ifndef H_FIO_APP_STATE #define H_FIO_APP_STATE +#include "decodeDH.h" #include "getVersion.h" #include "getPublicKey.h" #include "signTransaction.h" @@ -14,6 +15,7 @@ typedef union { // Here should go states of all instructions ins_get_key_context_t getKeyContext; ins_sign_transaction_context_t signTransactionContext; + ins_decode_context_t decodeContext; } instructionState_t; // Note(instructions are uint8_t but we have a special INS_NONE value diff --git a/src/textUtils.c b/src/textUtils.c index b00ba70d..3a4c2f86 100644 --- a/src/textUtils.c +++ b/src/textUtils.c @@ -37,7 +37,7 @@ size_t str_formatFIOAmount(uint64_t amount, char* out, size_t outSize) { // Size without terminating character STATIC_ASSERT(sizeof(ptr - scratchBuffer) == sizeof(size_t), "bad size_t size"); - size_t rawSize = (size_t)(ptr - scratchBuffer); + size_t rawSize = (size_t) (ptr - scratchBuffer); const char* suffix = " FIO"; const size_t suffixLength = strlen(suffix); @@ -76,7 +76,7 @@ size_t str_formatUint64(uint64_t number, char* out, size_t outSize) { // Size without terminating character STATIC_ASSERT(sizeof(ptr - scratchBuffer) == sizeof(size_t), "bad size_t size"); - size_t rawSize = (size_t)(ptr - scratchBuffer); + size_t rawSize = (size_t) (ptr - scratchBuffer); if (rawSize + 1 > outSize) { THROW(ERR_DATA_TOO_LARGE); diff --git a/src/uiHelpers.c b/src/uiHelpers.c index 3a94fe50..1192b5b6 100644 --- a/src/uiHelpers.c +++ b/src/uiHelpers.c @@ -187,8 +187,6 @@ void ui_displayPaginatedText(const char* headerStr, uiCallback_init(&ctx->callback, callback, NULL); ctx->initMagic = INIT_MAGIC_PAGINATED_TEXT; - TRACE("setting timeout"); - TRACE("done"); ASSERT(io_state == IO_EXPECT_NONE || io_state == IO_EXPECT_UI); io_state = IO_EXPECT_UI; @@ -202,6 +200,7 @@ void ui_displayPaginatedText(const char* headerStr, } void respond_with_user_reject() { + explicit_bzero(G_io_apdu_buffer, SIZEOF(G_io_apdu_buffer)); io_send_buf(ERR_REJECTED_BY_USER, NULL, 0); ui_idle(); } diff --git a/src/uiScreens.c b/src/uiScreens.c index b324372e..da61af6f 100644 --- a/src/uiScreens.c +++ b/src/uiScreens.c @@ -40,7 +40,7 @@ __noinline_due_to_stack__ void ui_displayHexBufferScreen(const char* screenHeade ASSERT(strlen(screenHeader) > 0); ASSERT(strlen(screenHeader) < BUFFER_SIZE_PARANOIA); ASSERT(bufferSize > 0); - ASSERT(bufferSize <= 65); // this is used for hashes, and pubkeys, they are all smaller + ASSERT(bufferSize <= PUBKEY_LENGTH); // This is the longest thing we plan to display char bufferHex[2 * 65 + 1]; explicit_bzero(bufferHex, SIZEOF(bufferHex)); @@ -65,3 +65,20 @@ __noinline_due_to_stack__ void ui_displayPubkeyScreen(const char* screenHeader, ui_displayPaginatedText(screenHeader, buffer, callback); } + +__noinline_due_to_stack__ void ui_displayAsciiBufferScreen(const char* screenHeader, + const uint8_t* buffer, + size_t bufferSize, + ui_callback_fn_t callback) { + str_validateTextBuffer(buffer, bufferSize); + ASSERT(strlen(screenHeader) > 0); + ASSERT(strlen(screenHeader) < BUFFER_SIZE_PARANOIA); + ASSERT(bufferSize > 0); + char buffer2[200]; + ASSERT(bufferSize < SIZEOF(buffer2)); + explicit_bzero(buffer2, SIZEOF(buffer2)); + memcpy(buffer2, buffer, bufferSize); + buffer2[bufferSize] = 0; + + ui_displayPaginatedText(screenHeader, buffer2, callback); +} diff --git a/src/uiScreens.h b/src/uiScreens.h index a44b1e2f..f8c2b387 100644 --- a/src/uiScreens.h +++ b/src/uiScreens.h @@ -26,6 +26,11 @@ __noinline_due_to_stack__ void ui_displayPubkeyScreen(const char* screenHeader, const public_key_t* pubkey, ui_callback_fn_t callback); +__noinline_due_to_stack__ void ui_displayAsciiBufferScreen(const char* screenHeader, + const uint8_t* buffer, + size_t bufferSize, + ui_callback_fn_t callback); + #ifdef DEVEL void run_uiScreens_test(); #endif // DEVEL diff --git a/src/utils.h b/src/utils.h index 83cb37aa..1124e405 100644 --- a/src/utils.h +++ b/src/utils.h @@ -5,9 +5,9 @@ // Does not compile if x is pointer of some kind // See http://zubplot.blogspot.com/2015/01/gcc-is-wonderful-better-arraysize-macro.html -#define ARRAY_NOT_A_PTR(x) \ - (sizeof(__typeof__( \ - int[1 - 2 * !!__builtin_types_compatible_p(__typeof__(x), __typeof__(&x[0]))])) * \ +#define ARRAY_NOT_A_PTR(x) \ + (sizeof(__typeof__(int[1 - 2 * !!__builtin_types_compatible_p(__typeof__(x), \ + __typeof__(&x[0]))])) * \ 0) // Safe array length, does not compile if you accidentally supply a pointer @@ -50,6 +50,11 @@ // Note: unused removes unused warning but does not warn if you suddenly // start using such variable. deprecated deals with that. #define MARK_UNUSED __attribute__((unused, deprecated)) +#ifdef DEVEL +#define MARK_UNUSED_NO_DEVEL +#else +#define MARK_UNUSED_NO_DEVEL __attribute__((unused, deprecated)) +#endif // Note: inlining can increase stack memory usage // where we really do not want it diff --git a/submodules/template.sh b/submodules/template.sh new file mode 100755 index 00000000..8f0e7206 --- /dev/null +++ b/submodules/template.sh @@ -0,0 +1,60 @@ +#!/usr/bin/env bash +#******************************************************************************* +# (c) 2018 Zondax GmbH +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +#******************************************************************************* + +if [ -z "$APPNAME" ] +then + echo "This script has not been configured correctly" + exit 1 +fi + +# check python 3 has been installed +if ! command -v python3 &>/dev/null; then + echo Python 3 is not installed + exit +fi + +python3 -m ledgerblue.loadApp -h &>/dev/null; +if [ $? -ne 0 ]; then + echo + echo "ERR: ledgerblue pip package not found." + echo "please install using 'pip install ledgerblue'" + echo + exit +fi + +TMP_HEX_DIR=$(mktemp -d -t ci-XXXXXXXXXX) +mkdir -p ${TMP_HEX_DIR}/bin +BIN_HEX_FILE=${TMP_HEX_DIR}/bin/app.hex +echo -e "${APPHEX}" > ${BIN_HEX_FILE} + +case "$1" in + 'load') + cd "$TMP_HEX_DIR" || exit + python3 -m ledgerblue.loadApp --appFlags 0x200 --delete ${LOAD_PARAMS} --path ${APPPATH} --path "44'/1'" + ;; + 'delete') + python3 -m ledgerblue.deleteApp ${DELETE_PARAMS} + ;; + 'version') + echo "v${APPVERSION}" + ;; + *) + echo "Zondax Installer [$APPNAME-$APPVERSION] [Warning: use only for test/demo apps]" + echo " load - Load $APPNAME app" + echo " delete - Delete $APPNAME app" + echo " version - Show $APPNAME app version" +esac diff --git a/test-integration/decodeMessage.js b/test-integration/decodeMessage.js new file mode 100644 index 00000000..b0da1113 --- /dev/null +++ b/test-integration/decodeMessage.js @@ -0,0 +1,149 @@ +import { testStart, testStep, testEnd, getScriptName, getSpeculosDefaultConf } from "./speculos-common.js" +import { getTransport } from "./speculos-transport.js" +import { getButtonsAndSnapshots } from "./speculos-buttons-and-snapshots.js" +import { Fio, DeviceStatusError, HARDENED } from "ledgerjs-hw-app-fio" +import { fileURLToPath } from 'url'; +import { Ecc } from '@fioprotocol/fiojs' +import assert from 'assert/strict' +import { createSharedCipher } from "@fioprotocol/fiojs/dist/encryption-fio.js"; + +const PrivateKey = Ecc.PrivateKey; + +const scriptName = getScriptName(fileURLToPath(import.meta.url)); +testStart(scriptName); + +const speculosConf = getSpeculosDefaultConf(); +const transport = await getTransport(speculosConf); +const app = new Fio(transport); +const device = getButtonsAndSnapshots(scriptName, speculosConf); + +await device.makeStartingScreenshot(); + + +const content1 = { + payee_public_address: "Payee public address", + amount: "Amount 100", + chain_code: "BTC1", + token_code: "BTC2", + memo: "My memo", + hash: undefined, + offline_url: undefined, +} + +const content2 = { + payee_public_address: "Payee public address", + amount: "Amount 100", + chain_code: "BTC1", + token_code: "BTC2", + memo: undefined, + hash: "My hash", + offline_url: "Offline URL", +} + +const content3 = { + payee_public_address: "Payee public address", + payer_public_address: "Payer public address", + amount: "Amount 100", + chain_code: "BTC1", + token_code: "BTC2", + status: "Status", + obt_id: "Obt ID", + memo: "My memo", + hash: undefined, + offline_url: undefined, +} + +const content4 = { + payee_public_address: "Payee public address is very long, long, long", + payer_public_address: "Payer public address is very long, long, long", + amount: "Amount 100", + chain_code: "BTC1", + token_code: "BTC2", + status: "Status", + obt_id: "Obt ID", + memo: undefined, + hash: "My hash is quite long too, too, too", + offline_url: "Offline URL is quite long too, too", +} + +const content5 = { + payee_public_address: "Payee public address", + amount: "Amount 100", + chain_code: "BTC1", + token_code: "BTC2", + memo: "My memo", + hash: "My hash", + offline_url: "Offline URL", +} + +const path = [44 + HARDENED, 235 + HARDENED, 0 + HARDENED, 0, 0] +const privateKeyDHex = "4d597899db76e87933e7c6841c2d661810f070bad20487ef20eb84e182695a3a" +const privateKey = PrivateKey(Buffer.from(privateKeyDHex, "hex")) + +const otherPath = [44 + HARDENED, 235 + HARDENED, 0 + HARDENED, 0, 1] +const otherPrivateKeyDHex = "90835ae980cd10e9ca7df05d0e3b3c22e0aed0e75527511337f7c53a9d0c6c69" +const otherPrivateKey = PrivateKey(Buffer.from(otherPrivateKeyDHex,"hex")) +const otherPublicKey = otherPrivateKey.toPublic() + +const sharedCipher = createSharedCipher({privateKey: privateKey.toBuffer(), publicKey: otherPublicKey.toString()}) +const encryptedContent1 = sharedCipher.encrypt('new_funds_content', content1) +const encryptedContent2 = sharedCipher.encrypt('new_funds_content', content2) +const encryptedContent3 = sharedCipher.encrypt('record_obt_data_content', content3) +const encryptedContent4 = sharedCipher.encrypt('record_obt_data_content', content4) +const encryptedContent5 = sharedCipher.encrypt('new_funds_content', content5) + +testStep(" - - -", "await app.decodeMessage() - newfundsreq memo"); +{ + const decodeMessagePromise = app.decodeMessage({path: path, publicKeyHex: otherPublicKey.toUncompressed().toBuffer().toString("hex"), + message: encryptedContent1, context: "newfundsreq"}); + await device.review([1, 1, 1, 1, 1, 1, 1], "Review decode message"); + const decodeMessageResponse = await decodeMessagePromise; + assert.equal(decodeMessageResponse.message.toString("hex"), "145061796565207075626c696320616464726573730a416d6f756e74203130300442544331044254433201074d79206d656d6f0000") +} + +testStep(" - - -", "await app.decodeMessage() - newfundsreq hash"); +{ + const decodeMessagePromise = app.decodeMessage({path: path, publicKeyHex: otherPublicKey.toUncompressed().toBuffer().toString("hex"), + message: encryptedContent2, context: "newfundsreq"}); + await device.review([1, 1, 1, 1, 1, 1, 1, 1], "Review decode message"); + const decodeMessageResponse = await decodeMessagePromise; + assert.equal(decodeMessageResponse.message.toString("hex"), "145061796565207075626c696320616464726573730a416d6f756e7420313030044254433104425443320001074d792068617368010b4f66666c696e652055524c") +} + +testStep(" - - -", "await app.decodeMessage() - recordobt memo"); +{ + const decodeMessagePromise = app.decodeMessage({path: path, publicKeyHex: otherPublicKey.toUncompressed().toBuffer().toString("hex"), + message: encryptedContent3, context: "recordobt"}); + await device.review([1, 2, 1, 1, 1, 1, 1, 1, 1, 1], "Review decode message"); + const decodeMessageResponse = await decodeMessagePromise; + assert.equal(decodeMessageResponse.message.toString("hex"), "145061796572207075626c69632061646472657373145061796565207075626c696320616464726573730a416d6f756e74203130300442544331044254433206537461747573064f627420494401074d79206d656d6f0000") +} + +testStep(" - - -", "await app.decodeMessage() - recordobt hash"); +{ + console.log(encryptedContent4) + const decodeMessagePromise = app.decodeMessage({path: path, publicKeyHex: otherPublicKey.toUncompressed().toBuffer().toString("hex"), + message: encryptedContent4, context: "recordobt"}); + await device.review([1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1], "Review decode message"); + const decodeMessageResponse = await decodeMessagePromise; + assert.equal(decodeMessageResponse.message.toString("hex"), "2d5061796572207075626c696320616464726573732069732076657279206c6f6e672c206c6f6e672c206c6f6e672d5061796565207075626c696320616464726573732069732076657279206c6f6e672c206c6f6e672c206c6f6e670a416d6f756e74203130300442544331044254433206537461747573064f62742049440001234d792068617368206973207175697465206c6f6e6720746f6f2c20746f6f2c20746f6f01224f66666c696e652055524c206973207175697465206c6f6e6720746f6f2c20746f6f") +} + +testStep(" - - -", "await app.decodeMessage() - newfundsreq invalid both memo and hash"); +{ + const decodeMessagePromise = app.decodeMessage({path: path, publicKeyHex: otherPublicKey.toUncompressed().toBuffer().toString("hex"), + message: encryptedContent5, context: "newfundsreq"}); + await assert.rejects(decodeMessagePromise, DeviceStatusError); +} + +testStep(" - - -", "await app.decodeMessage() - newfundsreq rejected by user"); +{ + const decodeMessagePromise = app.decodeMessage({path: path, publicKeyHex: otherPublicKey.toUncompressed().toBuffer().toString("hex"), + message: encryptedContent1, context: "newfundsreq"}); + await device.reviewReject([1, 1, 1, 1, 1, 1, 1], "Review decode message"); + await assert.rejects(decodeMessagePromise, DeviceStatusError); +} + +await transport.close() +testEnd(scriptName); +process.stdin.pause() \ No newline at end of file diff --git a/test-integration/getPublicKey.js b/test-integration/getPublicKey.js new file mode 100644 index 00000000..d2607a7f --- /dev/null +++ b/test-integration/getPublicKey.js @@ -0,0 +1,94 @@ +import { testStart, testStep, testEnd, getScriptName, getSpeculosDefaultConf } from "./speculos-common.js" +import { getTransport } from "./speculos-transport.js" +import { getButtonsAndSnapshots } from "./speculos-buttons-and-snapshots.js" +import { Fio, DeviceStatusError, InvalidData, HARDENED } from "ledgerjs-hw-app-fio" +import { fileURLToPath } from 'url'; +import { Ecc } from '@fioprotocol/fiojs' +import assert from 'assert/strict' + +const scriptName = getScriptName(fileURLToPath(import.meta.url)); +testStart(scriptName); + +const speculosConf = getSpeculosDefaultConf(); +const transport = await getTransport(speculosConf); +const app = new Fio(transport); +const device = getButtonsAndSnapshots(scriptName, speculosConf); + +await device.makeStartingScreenshot(); + +const path = [44 + HARDENED, 235 + HARDENED, 0 + HARDENED, 0, 0] +const pubKey = "04a9a222bc3b1a5a58ada17d10069b3961ebd0f917d4b2106031a061915ca9cc24a06941e0a4c0d5e266850ff980ad349ab8b027c93bf4aead1984168ad43e30ab" + +testStep(" - - -", "await app.getPublicKey() path:"+path+" do not show"); +const getPubkeyPromise = app.getPublicKey({path: path, show_or_not: false}); +const getPubkeyResponse = await getPubkeyPromise; +assert.equal(getPubkeyResponse.publicKeyHex, pubKey) +assert.equal(Ecc.PublicKey(getPubkeyResponse.publicKeyWIF).toUncompressed().toBuffer().toString('hex'), pubKey) + +testStep(" - - -", "await app.getPublicKey() path:"+path+" show"); +const getPubkeyPromise2 = app.getPublicKey({path: path, show_or_not: true}); +await device.review([2,], "Review pubkey"); +const getPubkeyResponse2 = await getPubkeyPromise2; +assert.equal(getPubkeyResponse2.publicKeyHex, pubKey) +assert.equal(Ecc.PublicKey(getPubkeyResponse2.publicKeyWIF).toUncompressed().toBuffer().toString('hex'), pubKey) + +{ + testStep(" - - -", "await app.getPublicKey() show reject"); + const getPubkeyPromise2 = app.getPublicKey({path: path, show_or_not: true}); + await device.reviewReject([2,], "Review pubkey"); + await assert.rejects(getPubkeyPromise2, DeviceStatusError, "Action rejected by user"); +} + +const path2 = [44 + HARDENED, 235 + HARDENED, 0 + HARDENED, 0, 2000] +const pubKey2 = "0484e52dfea57b8f1787488a356374cd8e8515b8ad8db3dd4f9088d8e42ed2fb6d571e8894cccbdbf15e1bd84f8b4362f52d1b5b712b9775c0a51cdd5ee9a9e8ca" + +testStep(" - - -", "await app.getPublicKey() path:"+path2+" do not show"); +const getPubkeyPromise3 = app.getPublicKey({path: path2, show_or_not: false}); +await device.review([1, 1, 2,], "Review pubkey"); +const getPubkeyResponse3 = await getPubkeyPromise3; +assert.equal(getPubkeyResponse3.publicKeyHex, pubKey2) +assert.equal(Ecc.PublicKey(getPubkeyResponse3.publicKeyWIF).toUncompressed().toBuffer().toString('hex'), pubKey2) + +testStep(" - - -", "await app.getPublicKey() path:"+path2+" show"); +const getPubkeyPromise4 = app.getPublicKey({path: path2, show_or_not: true}); +await device.review([1, 1, 2,], "Review pubkey"); +const getPubkeyResponse4 = await getPubkeyPromise4; +assert.equal(getPubkeyResponse4.publicKeyHex, pubKey2) +assert.equal(Ecc.PublicKey(getPubkeyResponse4.publicKeyWIF).toUncompressed().toBuffer().toString('hex'), pubKey2) + + +testStep(" - - -", "Should reject invalid paths."); + +testStep(" - - -", "path shorter than 5 indexes"); +const promise1 = app.getPublicKey({path: [44 + HARDENED, 235 + HARDENED, 0 + HARDENED, 0], show_or_not: false}); +await assert.rejects(promise1, DeviceStatusError, "Action rejected by Ledger's security policy"); + +testStep(" - - -", "path contains non-zero address"); +const promise2 = app.getPublicKey({path: [44 + HARDENED, 235 + HARDENED, 1 + HARDENED, 0, 0], show_or_not: false}) +await assert.rejects(promise2, DeviceStatusError, "Action rejected by Ledger's security policy"); + +testStep(" - - -", "path contains non-hardened address"); +const promise3 = app.getPublicKey({path: [44 + HARDENED, 235 + HARDENED, 0 , 0, 0], show_or_not: false}) +await assert.rejects(promise3, DeviceStatusError, "Action rejected by Ledger's security policy"); + +testStep(" - - -", "path contains non-zero chain"); +const promise4 = app.getPublicKey({path: [44 + HARDENED, 235 + HARDENED, 0 + HARDENED, 1, 0], show_or_not: false}) +await assert.rejects(promise4, DeviceStatusError, "Action rejected by Ledger's security policy"); + +testStep(" - - -", "path too long"); +const promise5 = app.getPublicKey({path: [44 + HARDENED, 235 + HARDENED, 0 + HARDENED, 0, 0, 0], show_or_not: false}) +await assert.rejects(promise5, InvalidData, "invalid path"); //js parser does not allow this + +testStep(" - - -", "path too long via direct APDU send."); +//we circumnavigate JS parser to validate that ledger itself handles this case correctly +const promise6 = app._send({ins: 0x10, + p1:0x02, + p2:0x00, + data:Buffer.from("068000002c800000eb80000000000000000000000000000000)", "hex"), + expectedResponseLength: 0 +}); +await assert.rejects(promise6, DeviceStatusError, "Action rejected by Ledger's security policy"); + +await transport.close() +testEnd(scriptName); +process.stdin.pause() \ No newline at end of file diff --git a/test-integration/getSerial.js b/test-integration/getSerial.js new file mode 100644 index 00000000..8f1efcc9 --- /dev/null +++ b/test-integration/getSerial.js @@ -0,0 +1,24 @@ +import { testStart, testStep, testEnd, getScriptName, getSpeculosDefaultConf } from "./speculos-common.js"; +import {getTransport} from "./speculos-transport.js" +import { getButtonsAndSnapshots } from "./speculos-buttons-and-snapshots.js"; +import { Fio } from "ledgerjs-hw-app-fio" +import { fileURLToPath } from 'url'; +import assert from 'assert/strict'; + +const scriptName = getScriptName(fileURLToPath(import.meta.url)); +testStart(scriptName); + +const speculosConf = getSpeculosDefaultConf(); +const transport = await getTransport(speculosConf); +const app = new Fio(transport); +const device = getButtonsAndSnapshots(scriptName, speculosConf); + +await device.makeStartingScreenshot(); + +testStep(" - - -", "await app.getSerial()"); +const response = await app.getSerial(); +assert.equal(response.serial.length, 14) + +await transport.close() +testEnd(scriptName); +process.stdin.pause() diff --git a/test-integration/getVersion.js b/test-integration/getVersion.js new file mode 100644 index 00000000..7bfc2a57 --- /dev/null +++ b/test-integration/getVersion.js @@ -0,0 +1,28 @@ +import { testStart, testStep, testEnd, getScriptName, getSpeculosDefaultConf } from "./speculos-common.js"; +import {getTransport} from "./speculos-transport.js" +import { getButtonsAndSnapshots } from "./speculos-buttons-and-snapshots.js"; +import { Fio } from "ledgerjs-hw-app-fio" +import { fileURLToPath } from 'url'; +import assert from 'assert/strict'; + +const scriptName = getScriptName(fileURLToPath(import.meta.url)); +testStart(scriptName); + +const speculosConf = getSpeculosDefaultConf(); +const transport = await getTransport(speculosConf); +const app = new Fio(transport); +const device = getButtonsAndSnapshots(scriptName, speculosConf); + +await device.makeStartingScreenshot(); + +testStep(" - - -", "await app.runTests()"); +const {version, compatibility} = await app.getVersion(); +assert.equal(version.major, parseInt(process.env.APPVERSION_M)) +assert.equal(version.minor, parseInt(process.env.APPVERSION_N)) +assert.equal(version.patch, parseInt(process.env.APPVERSION_P)) +assert.equal(compatibility.isCompatible, true) +assert.equal(compatibility.recommendedVersion, null) + +await transport.close() +testEnd(scriptName); +process.stdin.pause() \ No newline at end of file diff --git a/test-integration/package.json b/test-integration/package.json new file mode 100644 index 00000000..db8754a9 --- /dev/null +++ b/test-integration/package.json @@ -0,0 +1,21 @@ +{ + "name": "ledger-fio-integration-tests", + "version": "1.0.0", + "description": "", + "license": "Apache-2.0", + "type": "module", + "dependencies": { + "@fioprotocol/fiojs": "^1.0.1", + "@ledgerhq/hw-transport": "^5.12.0", + "@ledgerhq/hw-transport-node-hid": "^6.27.1", + "@ledgerhq/hw-transport-node-speculos": "^6.20.0", + "crypto": "^1.0.1", + "ledgerjs-hw-app-fio": "../ledgerjs-fio/", + "node-fetch": "^3.2.4", + "text-encoding": "^0.7.0", + "url": "^0.11.0" + }, + "devDependencies": { + "elliptic": "^6.5.3" + } +} diff --git a/test-integration/runUnitTests.js b/test-integration/runUnitTests.js new file mode 100644 index 00000000..7409b9b2 --- /dev/null +++ b/test-integration/runUnitTests.js @@ -0,0 +1,22 @@ +import { testStart, testStep, testEnd, getScriptName, getSpeculosDefaultConf } from "./speculos-common.js"; +import { getButtonsAndSnapshots } from "./speculos-buttons-and-snapshots.js"; +import { Fio } from "ledgerjs-hw-app-fio" +import { fileURLToPath } from 'url'; +import { getTransport } from "./speculos-transport.js"; + +const scriptName = getScriptName(fileURLToPath(import.meta.url)); +testStart(scriptName); + +const speculosConf = getSpeculosDefaultConf(); +const transport = await getTransport(speculosConf) +const app = new Fio(transport); +const device = getButtonsAndSnapshots(scriptName, speculosConf); + +await device.makeStartingScreenshot(); + +testStep(" - - -", "await app.runTests()"); +await app.runTests(); + +await transport.close() +testEnd(scriptName); +process.stdin.pause() \ No newline at end of file diff --git a/test-integration/signTransactionAddaddress.js b/test-integration/signTransactionAddaddress.js new file mode 100644 index 00000000..9751b1e7 --- /dev/null +++ b/test-integration/signTransactionAddaddress.js @@ -0,0 +1,435 @@ +import { testStart, testStep, testEnd, getScriptName, getSpeculosDefaultConf } from "./speculos-common.js" +import { getTransport } from "./speculos-transport.js" +import { getButtonsAndSnapshots } from "./speculos-buttons-and-snapshots.js" +import { Fio, DeviceStatusError, HARDENED } from "ledgerjs-hw-app-fio" +import { fileURLToPath } from 'url'; +import assert from 'assert/strict'; +import fetch from "node-fetch" +import crypto from "crypto" + +import textenc from "text-encoding" +const TextEncoder = textenc.TextEncoder; +const TextDecoder = textenc.TextDecoder; + +import fiojs from '@fioprotocol/fiojs' +const ser = fiojs.Serialize; +const Ecc = fiojs.Ecc +const PrivateKey = Ecc.PrivateKey; +const Signature = Ecc.Signature; +const arrayToHex = fiojs.Numeric.arrayToHex; +import { JsSignatureProvider } from "@fioprotocol/fiojs/dist/chain-jssig.js" + +//import {base64ToBinary, arrayToHex} from "@fioprotocol/fiojs/dist/chain-numeric" + + + +// We initialize chain constantsconstants +const textDecoder = new TextDecoder() +const textEncoder = new TextEncoder() + +const httpEndpointTestnet = 'http://testnet.fioprotocol.io' +const httpEndpointMainnet = 'https://fio.greymass.com' + +const infoTestnet = await (await fetch(httpEndpointTestnet + '/v1/chain/get_info')).json() +const infoMainnet = await (await fetch(httpEndpointMainnet + '/v1/chain/get_info')).json() + +const abiFioAddressTestnet = await (await fetch(httpEndpointTestnet + '/v1/chain/get_abi', { + body: `{"account_name": "fio.token"}`, + method: 'POST', +})).json() +const abiMsigTestnet = await (await fetch(httpEndpointTestnet + '/v1/chain/get_abi', { + body: `{"account_name": "eosio.msig"}`, + method: 'POST', +})).json() +const abiFioAddressMainnet = await (await fetch(httpEndpointMainnet + '/v1/chain/get_abi', { + body: `{"account_name": "fio.token"}`, + method: 'POST', +})).json() +const abiMsigMainnet = await (await fetch(httpEndpointMainnet + '/v1/chain/get_abi', { + body: `{"account_name": "eosio.msig"}`, + method: 'POST', +})).json() +const abiAddressMainnet = await (await fetch(httpEndpointMainnet + '/v1/chain/get_abi', { + body: `{"account_name": "fio.address"}`, + method: 'POST', +})).json() +const abiAddressTestnet = await (await fetch(httpEndpointTestnet + '/v1/chain/get_abi', { + body: `{"account_name": "fio.address"}`, + method: 'POST', +})).json() + +// Get a Map of all the types from fio.address +const typesFioAddressTestnet = ser.getTypesFromAbi(ser.createInitialTypes(), abiFioAddressTestnet.abi) +const typesTransactionTestnet = ser.getTypesFromAbi(ser.createInitialTypes(), abiMsigTestnet.abi) +const typesFioAddressMainnet = ser.getTypesFromAbi(ser.createInitialTypes(), abiFioAddressMainnet.abi) +const typesTransactionMainnet = ser.getTypesFromAbi(ser.createInitialTypes(), abiMsigMainnet.abi) +const typesTransaction2Mainnet = ser.getTypesFromAbi(ser.createInitialTypes(), abiAddressMainnet.abi) +const typesTransaction2Testnet = ser.getTypesFromAbi(ser.createInitialTypes(), abiAddressTestnet.abi) + +const networkInfo = { + "TESTNET": { + chainId: infoTestnet.chain_id, + typesFioAddress: typesFioAddressTestnet, + typesTransaction: typesTransactionTestnet, + typesTransaction2: typesTransaction2Testnet, + }, + "MAINNET": { + chainId: infoMainnet.chain_id, + typesFioAddress: typesFioAddressMainnet, + typesTransaction: typesTransactionMainnet, + typesTransaction2: typesTransaction2Mainnet, + }, +} + + + + +// Serializes and signs transaction using fiojs +async function buildTxAndSignatureFioJs(network, tx, pubkey) { + // We serialize the transaction + // Get the addaddress action type + const actionAddaddress = networkInfo[network].typesTransaction2.get('addaddress') + + // Serialize the actions[] "data" field (This example assumes a single action, though transactions may hold an array of actions.) + const buffer = new ser.SerialBuffer({textEncoder, textDecoder}) + actionAddaddress.serialize(buffer, tx.actions[0].data) + const serializedData = arrayToHex(buffer.asUint8Array()) + + // Get the actions parameter from the transaction and replace the data field with the serialized data field + let serializedAction = tx.actions[0] + serializedAction = { + ...serializedAction, + data: serializedData, + } + + const rawTransaction = { + ...tx, + max_net_usage_words: 0x00, + max_cpu_usage_ms: 0x00, + delay_sec: 0x00, + context_free_actions: [], + actions: [serializedAction], //Actions have to be an array + transaction_extensions: [], + } + + // Get the transaction action type + const txnaction = networkInfo[network].typesTransaction.get('transaction') + + // Serialize the transaction + const buffer2 = new ser.SerialBuffer({textEncoder, textDecoder}) + txnaction.serialize(buffer2, rawTransaction) + const serializedTransaction = buffer2.asUint8Array() + + + + //Lets compute hash in using Signature.sign + const msg = Buffer.concat([Buffer.from(networkInfo[network].chainId, "hex"), serializedTransaction, Buffer.allocUnsafe(32).fill(0)]) + const hash = crypto.createHash('sha256').update(msg).digest('hex') + + + + //Now using signatureProvider.sign + const signatureProvider = new JsSignatureProvider([ + PrivateKey.fromHex(privateKeyDHex).toString(), + PrivateKey.fromHex(otherPrivateKeyDHex).toString() + ]); + const requiredKeys = [pubkey.toString()] + const serializedContextFreeData = null + + const signedTxn = await signatureProvider.sign({ + chainId: networkInfo[network].chainId, + requiredKeys: requiredKeys, + serializedTransaction: serializedTransaction, + serializedContextFreeData: serializedContextFreeData, + }) + + return { + serializedTx: serializedTransaction, + fullMsg: msg, + hash: crypto.createHash('sha256').update(msg).digest('hex'), + signature: signedTxn.signatures[0], + } +} + + +const path = [44 + HARDENED, 235 + HARDENED, 0 + HARDENED, 0, 0] +const privateKeyDHex = "4d597899db76e87933e7c6841c2d661810f070bad20487ef20eb84e182695a3a" +const privateKey = PrivateKey(Buffer.from(privateKeyDHex, "hex")) +//const privateKey = PrivateKey(hex_to_buf(privateKeyDHex)) +const publicKey = privateKey.toPublic() + +const otherPath = [44 + HARDENED, 235 + HARDENED, 0 + HARDENED, 0, 1] +const otherPrivateKeyDHex = "90835ae980cd10e9ca7df05d0e3b3c22e0aed0e75527511337f7c53a9d0c6c69" +//const otherPrivateKey = PrivateKey(hex_to_buf(otherPrivateKeyDHex)) +const otherPrivateKey = PrivateKey(Buffer.from(otherPrivateKeyDHex,"hex")) +const otherPublicKey = otherPrivateKey.toPublic() + +const basicTx = { + expiration: "2021-08-28T12:50:36.686", + ref_block_num: 0x1122, + ref_block_prefix: 0x33445566, + context_free_actions: [], + actions: [{ + account: "fio.address", + name: "addaddress", + authorization: [{ + actor: "aftyershcu22", + permission: "active", + }], + data: { + fio_address: "FIO8PRe4WRZJj5mkem6qVGKyvNFgPsNnjNN6kPhh6EaCpzCVin5Jj", + public_addresses: [ + { + public_address: "My payer public address", + chain_code: "BTC", + token_code: "BTC", + }, + ], + max_fee: 0x11223344, + tpid: "rewards@wallet", + actor: "aftyershcu22", + }, + }], + transaction_extensions: [], +} + +const scriptName = getScriptName(fileURLToPath(import.meta.url)); +testStart(scriptName); + +const speculosConf = getSpeculosDefaultConf(); +const transport = await getTransport(speculosConf); +const app = new Fio(transport); +const device = getButtonsAndSnapshots(scriptName, speculosConf); + +await device.makeStartingScreenshot(); + + +//Important, we need all the testcases to validate presence of corresponding integrity hash +testStep(" - - -", "Sign testnet transaction"); +{ + const network = "TESTNET" + const tx = basicTx + + // Lets sign the transaction with fiojs + const {serializedTx, fullMsg, hash, signature} = await buildTxAndSignatureFioJs(network, tx, publicKey) + console.log("Full message:") + console.log(fullMsg.toString("hex")); + + // Lets sign the transaction with ledger + const chainId = networkInfo[network].chainId + const ledgerPromise = app.signTransaction({path, chainId, tx}) + await device.review([1, 1, 2, 1, 1, 2], "Review sign"); + const ledgerResponse = await ledgerPromise; + const signatureLedger = Signature.fromHex(ledgerResponse.witness.witnessSignatureHex) + + assert.equal(ledgerResponse.txHashHex, hash); + assert.equal(signatureLedger.verify(fullMsg, publicKey), true); + assert.equal(signatureLedger.verify(fullMsg, otherPublicKey), false); +} + +//Important, we need all the testcases to validate presence of corresponding integrity hash +testStep(" - - -", "Sign mainnet transaction - two addresses"); +{ + const network = "MAINNET" + const tx = { + ...basicTx, + actions: [{ + ...basicTx.actions[0], + data: { + ...basicTx.actions[0].data, + public_addresses: [ + { + public_address: "My payer public address", + chain_code: "BTC", + token_code: "BTC", + }, + { + public_address: "Second payer public address", + chain_code: "BTC", + token_code: "BTC2", + }, + + ], + } + }] + } + + // Lets sign the transaction with fiojs + const {serializedTx, fullMsg, hash, signature} = await buildTxAndSignatureFioJs(network, tx, publicKey) + console.log("Full message:") + console.log(fullMsg.toString("hex")); + + // Lets sign the transaction with ledger + const chainId = networkInfo[network].chainId + const ledgerPromise = app.signTransaction({path, chainId, tx}) + await device.review([1, 1, 2, 1, 1, 1, 2], "Review sign"); + const ledgerResponse = await ledgerPromise; + const signatureLedger = Signature.fromHex(ledgerResponse.witness.witnessSignatureHex) + + assert.equal(ledgerResponse.txHashHex, hash); + assert.equal(signatureLedger.verify(fullMsg, publicKey), true); + assert.equal(signatureLedger.verify(fullMsg, otherPublicKey), false); +} + +//Important, we need all the testcases to validate presence of corresponding integrity hash +testStep(" - - -", "Sign mainnet transaction - three addresses"); +{ + const network = "MAINNET" + const tx = { + ...basicTx, + actions: [{ + ...basicTx.actions[0], + data: { + ...basicTx.actions[0].data, + public_addresses: [ + { + public_address: "My payer public address", + chain_code: "BTC", + token_code: "BTC", + }, + { + public_address: "S", + chain_code: "BTC", + token_code: "BTC", + }, + { + public_address: "Third payer public address", + chain_code: "BTC", + token_code: "BTC", + }, + ], + } + }] + } + + // Lets sign the transaction with fiojs + const {serializedTx, fullMsg, hash, signature} = await buildTxAndSignatureFioJs(network, tx, publicKey) + console.log("Full message:") + console.log(fullMsg.toString("hex")); + + // Lets sign the transaction with ledger + const chainId = networkInfo[network].chainId + const ledgerPromise = app.signTransaction({path, chainId, tx}) + await device.review([1, 1, 2, 1, 1, 1, 1, 2], "Review sign"); + const ledgerResponse = await ledgerPromise; + const signatureLedger = Signature.fromHex(ledgerResponse.witness.witnessSignatureHex) + + assert.equal(ledgerResponse.txHashHex, hash); + assert.equal(signatureLedger.verify(fullMsg, publicKey), true); + assert.equal(signatureLedger.verify(fullMsg, otherPublicKey), false); +} + +//Important, we need all the testcases to validate presence of corresponding integrity hash +testStep(" - - -", "Sign mainnet transaction - four addresses"); +{ + const network = "MAINNET" + const tx = { + ...basicTx, + actions: [{ + ...basicTx.actions[0], + data: { + ...basicTx.actions[0].data, + public_addresses: [ + { + public_address: "My payer public address", + chain_code: "BTC", + token_code: "BTC", + }, + { + public_address: "Second payer public address", + chain_code: "BTC", + token_code: "BTC", + }, + { + public_address: "Third payer public address", + chain_code: "BTC", + token_code: "BTC", + }, + { + public_address: "Fourth payer public address", + chain_code: "BTC", + token_code: "BTC", + }, + ], + } + }] + } + + // Lets sign the transaction with fiojs + const {serializedTx, fullMsg, hash, signature} = await buildTxAndSignatureFioJs(network, tx, publicKey) + console.log("Full message:") + console.log(fullMsg.toString("hex")); + + // Lets sign the transaction with ledger + const chainId = networkInfo[network].chainId + const ledgerPromise = app.signTransaction({path, chainId, tx}) + await device.review([1, 1, 2, 1, 1, 1, 1, 1, 2], "Review sign"); + const ledgerResponse = await ledgerPromise; + const signatureLedger = Signature.fromHex(ledgerResponse.witness.witnessSignatureHex) + + assert.equal(ledgerResponse.txHashHex, hash); + assert.equal(signatureLedger.verify(fullMsg, publicKey), true); + assert.equal(signatureLedger.verify(fullMsg, otherPublicKey), false); +} + +//Important, we need all the testcases to validate presence of corresponding integrity hash +testStep(" - - -", "Sign mainnet transaction - five addresses"); +{ + const network = "MAINNET" + const tx = { + ...basicTx, + actions: [{ + ...basicTx.actions[0], + data: { + ...basicTx.actions[0].data, + public_addresses: [ + { + public_address: "My payer public address", + chain_code: "BTC", + token_code: "BTC", + }, + { + public_address: "Second payer public address", + chain_code: "BTC", + token_code: "BTC", + }, + { + public_address: "Third payer public address", + chain_code: "BTC", + token_code: "BTC", + }, + { + public_address: "Fourth payer public address", + chain_code: "BTC", + token_code: "BTC", + }, + { + public_address: "Fifth payer public address", + chain_code: "BTC", + token_code: "BTC", + }, + ], + } + }] + } + + // Lets sign the transaction with fiojs + const {serializedTx, fullMsg, hash, signature} = await buildTxAndSignatureFioJs(network, tx, publicKey) + console.log("Full message:") + console.log(fullMsg.toString("hex")); + + // Lets sign the transaction with ledger + const chainId = networkInfo[network].chainId + const ledgerPromise = app.signTransaction({path, chainId, tx}) + await device.review([1, 1, 2, 1, 1, 1, 1, 1, 1, 2], "Review sign"); + const ledgerResponse = await ledgerPromise; + const signatureLedger = Signature.fromHex(ledgerResponse.witness.witnessSignatureHex) + + assert.equal(ledgerResponse.txHashHex, hash); + assert.equal(signatureLedger.verify(fullMsg, publicKey), true); + assert.equal(signatureLedger.verify(fullMsg, otherPublicKey), false); +} + +await transport.close() +testEnd(scriptName); +process.stdin.pause() \ No newline at end of file diff --git a/test-integration/signTransactionAddnft.js b/test-integration/signTransactionAddnft.js new file mode 100644 index 00000000..0456171c --- /dev/null +++ b/test-integration/signTransactionAddnft.js @@ -0,0 +1,341 @@ +import { testStart, testStep, testEnd, getScriptName, getSpeculosDefaultConf } from "./speculos-common.js" +import { getTransport } from "./speculos-transport.js" +import { getButtonsAndSnapshots } from "./speculos-buttons-and-snapshots.js" +import { Fio, DeviceStatusError, HARDENED } from "ledgerjs-hw-app-fio" +import { fileURLToPath } from 'url'; +import assert from 'assert/strict'; +import fetch from "node-fetch" +import crypto from "crypto" + +import textenc from "text-encoding" +const TextEncoder = textenc.TextEncoder; +const TextDecoder = textenc.TextDecoder; + +import fiojs from '@fioprotocol/fiojs' +const ser = fiojs.Serialize; +const Ecc = fiojs.Ecc +const PrivateKey = Ecc.PrivateKey; +const Signature = Ecc.Signature; +const arrayToHex = fiojs.Numeric.arrayToHex; +import { JsSignatureProvider } from "@fioprotocol/fiojs/dist/chain-jssig.js" + +//import {base64ToBinary, arrayToHex} from "@fioprotocol/fiojs/dist/chain-numeric" + + + +// We initialize chain constantsconstants +const textDecoder = new TextDecoder() +const textEncoder = new TextEncoder() + +const httpEndpointTestnet = 'http://testnet.fioprotocol.io' +const httpEndpointMainnet = 'https://fio.greymass.com' + +const infoTestnet = await (await fetch(httpEndpointTestnet + '/v1/chain/get_info')).json() +const infoMainnet = await (await fetch(httpEndpointMainnet + '/v1/chain/get_info')).json() + +const abiFioAddressTestnet = await (await fetch(httpEndpointTestnet + '/v1/chain/get_abi', { + body: `{"account_name": "fio.token"}`, + method: 'POST', +})).json() +const abiMsigTestnet = await (await fetch(httpEndpointTestnet + '/v1/chain/get_abi', { + body: `{"account_name": "eosio.msig"}`, + method: 'POST', +})).json() +const abiFioAddressMainnet = await (await fetch(httpEndpointMainnet + '/v1/chain/get_abi', { + body: `{"account_name": "fio.token"}`, + method: 'POST', +})).json() +const abiMsigMainnet = await (await fetch(httpEndpointMainnet + '/v1/chain/get_abi', { + body: `{"account_name": "eosio.msig"}`, + method: 'POST', +})).json() +const abiAddressMainnet = await (await fetch(httpEndpointMainnet + '/v1/chain/get_abi', { + body: `{"account_name": "fio.address"}`, + method: 'POST', +})).json() +const abiAddressTestnet = await (await fetch(httpEndpointTestnet + '/v1/chain/get_abi', { + body: `{"account_name": "fio.address"}`, + method: 'POST', +})).json() + +// Get a Map of all the types from fio.address +const typesFioAddressTestnet = ser.getTypesFromAbi(ser.createInitialTypes(), abiFioAddressTestnet.abi) +const typesTransactionTestnet = ser.getTypesFromAbi(ser.createInitialTypes(), abiMsigTestnet.abi) +const typesFioAddressMainnet = ser.getTypesFromAbi(ser.createInitialTypes(), abiFioAddressMainnet.abi) +const typesTransactionMainnet = ser.getTypesFromAbi(ser.createInitialTypes(), abiMsigMainnet.abi) +const typesTransaction2Mainnet = ser.getTypesFromAbi(ser.createInitialTypes(), abiAddressMainnet.abi) +const typesTransaction2Testnet = ser.getTypesFromAbi(ser.createInitialTypes(), abiAddressTestnet.abi) + +const networkInfo = { + "TESTNET": { + chainId: infoTestnet.chain_id, + typesFioAddress: typesFioAddressTestnet, + typesTransaction: typesTransactionTestnet, + typesTransaction2: typesTransaction2Testnet, + }, + "MAINNET": { + chainId: infoMainnet.chain_id, + typesFioAddress: typesFioAddressMainnet, + typesTransaction: typesTransactionMainnet, + typesTransaction2: typesTransaction2Mainnet, + }, +} + + + + +// Serializes and signs transaction using fiojs +async function buildTxAndSignatureFioJs(network, tx, pubkey) { + // We serialize the transaction + // Get the addnft action type + const actionAddnft = networkInfo[network].typesTransaction2.get('addnft') + + // Serialize the actions[] "data" field (This example assumes a single action, though transactions may hold an array of actions.) + const buffer = new ser.SerialBuffer({textEncoder, textDecoder}) + actionAddnft.serialize(buffer, tx.actions[0].data) + const serializedData = arrayToHex(buffer.asUint8Array()) + + // Get the actions parameter from the transaction and replace the data field with the serialized data field + let serializedAction = tx.actions[0] + serializedAction = { + ...serializedAction, + data: serializedData, + } + + const rawTransaction = { + ...tx, + max_net_usage_words: 0x00, + max_cpu_usage_ms: 0x00, + delay_sec: 0x00, + context_free_actions: [], + actions: [serializedAction], //Actions have to be an array + transaction_extensions: [], + } + + // Get the transaction action type + const txnaction = networkInfo[network].typesTransaction.get('transaction') + + // Serialize the transaction + const buffer2 = new ser.SerialBuffer({textEncoder, textDecoder}) + txnaction.serialize(buffer2, rawTransaction) + const serializedTransaction = buffer2.asUint8Array() + + + + //Lets compute hash in using Signature.sign + const msg = Buffer.concat([Buffer.from(networkInfo[network].chainId, "hex"), serializedTransaction, Buffer.allocUnsafe(32).fill(0)]) + const hash = crypto.createHash('sha256').update(msg).digest('hex') + + + + //Now using signatureProvider.sign + const signatureProvider = new JsSignatureProvider([ + PrivateKey.fromHex(privateKeyDHex).toString(), + PrivateKey.fromHex(otherPrivateKeyDHex).toString() + ]); + const requiredKeys = [pubkey.toString()] + const serializedContextFreeData = null + + const signedTxn = await signatureProvider.sign({ + chainId: networkInfo[network].chainId, + requiredKeys: requiredKeys, + serializedTransaction: serializedTransaction, + serializedContextFreeData: serializedContextFreeData, + }) + + return { + serializedTx: serializedTransaction, + fullMsg: msg, + hash: crypto.createHash('sha256').update(msg).digest('hex'), + signature: signedTxn.signatures[0], + } +} + + +const path = [44 + HARDENED, 235 + HARDENED, 0 + HARDENED, 0, 0] +const privateKeyDHex = "4d597899db76e87933e7c6841c2d661810f070bad20487ef20eb84e182695a3a" +const privateKey = PrivateKey(Buffer.from(privateKeyDHex, "hex")) +//const privateKey = PrivateKey(hex_to_buf(privateKeyDHex)) +const publicKey = privateKey.toPublic() + +const otherPath = [44 + HARDENED, 235 + HARDENED, 0 + HARDENED, 0, 1] +const otherPrivateKeyDHex = "90835ae980cd10e9ca7df05d0e3b3c22e0aed0e75527511337f7c53a9d0c6c69" +//const otherPrivateKey = PrivateKey(hex_to_buf(otherPrivateKeyDHex)) +const otherPrivateKey = PrivateKey(Buffer.from(otherPrivateKeyDHex,"hex")) +const otherPublicKey = otherPrivateKey.toPublic() + +const basicTx = { + expiration: "2021-08-28T12:50:36.686", + ref_block_num: 0x1122, + ref_block_prefix: 0x33445566, + context_free_actions: [], + actions: [{ + account: "fio.address", + name: "addnft", + authorization: [{ + actor: "aftyershcu22", + permission: "active", + }], + data: { + fio_address: "FIO8PRe4WRZJj5mkem6qVGKyvNFgPsNnjNN6kPhh6EaCpzCVin5Jj", + nfts: [ + { + chain_code: "BTC", + contract_address: "Contract address", + token_id: "Token1", + url: "My URL", + hash: "My hash", + metadata: "My metadata", + }, + ], + max_fee: 0x11223344, + tpid: "rewards@wallet", + actor: "aftyershcu22", + }, + }], + transaction_extensions: [], +} + +const scriptName = getScriptName(fileURLToPath(import.meta.url)); +testStart(scriptName); + +const speculosConf = getSpeculosDefaultConf(); +const transport = await getTransport(speculosConf); +const app = new Fio(transport); +const device = getButtonsAndSnapshots(scriptName, speculosConf); + +await device.makeStartingScreenshot(); + + +//Important, we need all the testcases to validate presence of corresponding integrity hash +testStep(" - - -", "Sign testnet transaction"); +{ + const network = "TESTNET" + const tx = basicTx + + // Lets sign the transaction with fiojs + const {serializedTx, fullMsg, hash, signature} = await buildTxAndSignatureFioJs(network, tx, publicKey) + console.log("Full message:") + console.log(fullMsg.toString("hex")); + + // Lets sign the transaction with ledger + const chainId = networkInfo[network].chainId + const ledgerPromise = app.signTransaction({path, chainId, tx}) + await device.review([1, 1, 2, 1, 1, 1, 1, 1, 2], "Review sign"); + const ledgerResponse = await ledgerPromise; + const signatureLedger = Signature.fromHex(ledgerResponse.witness.witnessSignatureHex) + + assert.equal(ledgerResponse.txHashHex, hash); + assert.equal(signatureLedger.verify(fullMsg, publicKey), true); + assert.equal(signatureLedger.verify(fullMsg, otherPublicKey), false); +} + +//Important, we need all the testcases to validate presence of corresponding integrity hash +testStep(" - - -", "Sign mainnet transaction - two addresses"); +{ + const network = "MAINNET" + const tx = { + ...basicTx, + actions: [{ + ...basicTx.actions[0], + data: { + ...basicTx.actions[0].data, + nfts: [ + { + chain_code: "BTC", + contract_address: "Contract address", + token_id: "Token1", + url: "My URL", + hash: "My hash", + metadata: "My metadata", + }, + { + chain_code: "BTC2", + contract_address: "Contract address2", + token_id: "Token2", + url: "My URL2", + hash: "My hash2", + metadata: "My metadata2", + }, + ], + } + }] + } + + // Lets sign the transaction with fiojs + const {serializedTx, fullMsg, hash, signature} = await buildTxAndSignatureFioJs(network, tx, publicKey) + console.log("Full message:") + console.log(fullMsg.toString("hex")); + + // Lets sign the transaction with ledger + const chainId = networkInfo[network].chainId + const ledgerPromise = app.signTransaction({path, chainId, tx}) + await device.review([1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2], "Review sign"); + const ledgerResponse = await ledgerPromise; + const signatureLedger = Signature.fromHex(ledgerResponse.witness.witnessSignatureHex) + + assert.equal(ledgerResponse.txHashHex, hash); + assert.equal(signatureLedger.verify(fullMsg, publicKey), true); + assert.equal(signatureLedger.verify(fullMsg, otherPublicKey), false); +} + +//Important, we need all the testcases to validate presence of corresponding integrity hash +testStep(" - - -", "Sign mainnet transaction - three addresses"); +{ + const network = "MAINNET" + const tx = { + ...basicTx, + actions: [{ + ...basicTx.actions[0], + data: { + ...basicTx.actions[0].data, + nfts: [ + { + chain_code: "BTC", + contract_address: "Contract address", + token_id: "Token1", + url: "My URL", + hash: "My hash", + metadata: "My metadata", + }, + { + chain_code: "BTC2", + contract_address: "Contract address2", + token_id: "Token2", + url: "My URL2", + hash: "My hash2", + metadata: "My metadata2", + }, + { + chain_code: "BTC3", + contract_address: "Contract address3 and it is very long so we really try long strings too", + token_id: "Token3", + url: "My URL3", + hash: "My hash3", + metadata: "My metadata3", + }, + ], + } + }] + } + + // Lets sign the transaction with fiojs + const {serializedTx, fullMsg, hash, signature} = await buildTxAndSignatureFioJs(network, tx, publicKey) + console.log("Full message:") + console.log(fullMsg.toString("hex")); + + // Lets sign the transaction with ledger + const chainId = networkInfo[network].chainId + const ledgerPromise = app.signTransaction({path, chainId, tx}) + await device.review([1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 2], "Review sign"); + const ledgerResponse = await ledgerPromise; + const signatureLedger = Signature.fromHex(ledgerResponse.witness.witnessSignatureHex) + + assert.equal(ledgerResponse.txHashHex, hash); + assert.equal(signatureLedger.verify(fullMsg, publicKey), true); + assert.equal(signatureLedger.verify(fullMsg, otherPublicKey), false); +} + +await transport.close() +testEnd(scriptName); +process.stdin.pause() \ No newline at end of file diff --git a/test-integration/signTransactionCommandsBasic.js b/test-integration/signTransactionCommandsBasic.js new file mode 100644 index 00000000..28f34920 --- /dev/null +++ b/test-integration/signTransactionCommandsBasic.js @@ -0,0 +1,209 @@ +import { testStart, testStep, testEnd, getScriptName, getSpeculosDefaultConf, getAPDUDataBuffer, sleep } from "./speculos-common.js" +import { getTransport } from "./speculos-transport.js" +import { getButtonsAndSnapshots } from "./speculos-buttons-and-snapshots.js" +import { fileURLToPath } from 'url'; +import assert from 'assert/strict'; +import PublicKey from '@fioprotocol/fiojs/dist/ecc/key_public.js'; +import crypto from "crypto" +import Signature from '@fioprotocol/fiojs/dist/ecc/signature.js'; + +const scriptName = getScriptName(fileURLToPath(import.meta.url)); +testStart(scriptName); + +const speculosConf = getSpeculosDefaultConf(); +const transport = await getTransport(speculosConf); +const device = getButtonsAndSnapshots(scriptName, speculosConf); + +//We will use 44'/235'/0'/0/0 in this test +const publicKeyHex = "04a9a222bc3b1a5a58ada17d10069b3961ebd0f917d4b2106031a061915ca9cc24a06941e0a4c0d5e266850ff980ad349ab8b027c93bf4aead1984168ad43e30ab"; +const publicKey = PublicKey(Buffer.from(publicKeyHex,"hex")) + +//this validates errors: +function err(errno) { + return (err) => { + assert.strictEqual(err.name, 'TransportStatusError'); + assert.strictEqual(err.statusCode, errno); + return true; + } +} + +await device.makeStartingScreenshot(); + +console.log("This test requires app in DEVEL mode.") + +//This test is not completely standardized +//!!!!!! - indicates places where test may reasonably break as Speculos sometimes does not react to every buttonpress. + +//------------------------------------------------------------------------------------- +testStep(" - - -", "Sign minimal fake devel transaction containing INIT, APPEND_CONST_DATA, SHOW_MESSAGE, FINISH instructions - testnet"); +{ + //INIT chainId=b20901380af44ef59c5918439a1f9a41d83669020319a80574b804a5f95cbd7e path=44'/235'/0'/0/0 + const buffer11 = getAPDUDataBuffer("", "b20901380af44ef59c5918439a1f9a41d83669020319a80574b804a5f95cbd7e052c000080eb000080000000800000000000000000"); + console.log(buffer11.toString("hex")) + const promise11 = transport.send(215, 0x20, 0x01, 0, buffer11); + await device.curlScreenShot(); + device.curlButton("both", "Confirm chain"); //!!!!!! + const response11 = await promise11; + assert.equal(response11.toString("hex"), "9000"); + + //Append "0102030405" to transaction + const buffer12 = getAPDUDataBuffer("0102030405", ""); + const promise12 = transport.send(215, 0x20, 0x02, 0, buffer12); + const response12 = await promise12; + assert.equal(response12.toString("hex"), "9000"); + + //Show "Test Key" "Test Value" to transaction hex: 0854657374204b6579, 0a546573742056616c7565 (total length 0x14) + const buffer13 = getAPDUDataBuffer("0854657374204b65790a546573742056616c7565", ""); + const promise13 = transport.send(215, 0x20, 0x03, 0, buffer13); + await device.curlScreenShot(); + device.curlButton("both", "Confirm message"); //!!!!!! + const response13 = await promise13; + assert.equal(response13.toString("hex"), "9000"); + + //Finish + const buffer14 = getAPDUDataBuffer("", ""); + const promise14 = transport.send(215, 0x20, 0x10, 0, buffer14); + await device.curlScreenShot(); + await device.curlButtonAndScreenshot("both", "Confirm sign with"); + await device.curlButtonAndScreenshot("right", "Confirm sign with"); + const response14 = await promise14; + + //The signed message should contain chainId + 0102030405 + const msg1 = Buffer.from("b20901380af44ef59c5918439a1f9a41d83669020319a80574b804a5f95cbd7e"+"0102030405", "hex"); + const hash1 = crypto.createHash('sha256').update(msg1).digest('hex') + const ledgerSignature1 = Signature.fromHex(response14.slice(0, 65)); + assert.equal(response14.slice(65,65+32).toString("hex"), hash1); + assert.equal(response14.slice(65+32,65+32+4).toString("hex"), "9000"); + assert.equal(ledgerSignature1.verify(msg1, publicKey), true); +} +//------------------------------------------------------------------------------------- +testStep(" - - -", "Sign minimal fake devel transaction containing INIT, APPEND_CONST_DATA, SHOW_MESSAGE, FINISH instructions - mainnet"); +{ + //INIT chainId=21dcae42c0182200e93f954a074011f9048a7624c6fe81d3c9541a614a88bd1c + const buffer11 = getAPDUDataBuffer("", "21dcae42c0182200e93f954a074011f9048a7624c6fe81d3c9541a614a88bd1c052c000080eb000080000000800000000000000000"); + const promise11 = transport.send(215, 0x20, 0x01, 0, buffer11); + await device.curlScreenShot(); + device.curlButton("both", "Confirm chain"); //!!!!!! + const response11 = await promise11; + assert.equal(response11.toString("hex"), "9000"); + + //Append "0102030405" to transaction + const buffer12 = getAPDUDataBuffer("0102030405", ""); + const promise12 = transport.send(215, 0x20, 0x02, 0, buffer12); + const response12 = await promise12; + assert.equal(response12.toString("hex"), "9000"); + + //Show "Test Key" "Test Value" to transaction hex: 0854657374204b6579, 0a546573742056616c7565 (total length 0x14) + const buffer13 = getAPDUDataBuffer("0854657374204b65790a546573742056616c7565", ""); + const promise13 = transport.send(215, 0x20, 0x03, 0, buffer13); + await device.curlScreenShot(); + device.curlButton("both", "Confirm message"); //!!!!!! + const response13 = await promise13; + assert.equal(response13.toString("hex"), "9000"); + + //Finish + const buffer14 = getAPDUDataBuffer("", ""); + const promise14 = transport.send(215, 0x20, 0x10, 0, buffer14); + await device.curlScreenShot(); + await device.curlButtonAndScreenshot("both", "Confirm sign with"); + await device.curlButtonAndScreenshot("right", "Confirm sign with"); + const response14 = await promise14; + + //The signed message should contain chainId + 0102030405 + const msg1 = Buffer.from("21dcae42c0182200e93f954a074011f9048a7624c6fe81d3c9541a614a88bd1c0102030405", "hex"); + const hash1 = crypto.createHash('sha256').update(msg1).digest('hex') + const ledgerSignature1 = Signature.fromHex(response14.slice(0, 65)); + assert.equal(response14.slice(65,65+32).toString("hex"), hash1); + assert.equal(response14.slice(65+32,65+32+4).toString("hex"), "9000"); + assert.equal(ledgerSignature1.verify(msg1, publicKey), true); +} +//------------------------------------------------------------------------------------- +testStep(" - - -", "One byte constant data difference should cause integrity validation error (Test Value->Uest Value)"); +{ + //INIT chainId=b20901380af44ef59c5918439a1f9a41d83669020319a80574b804a5f95cbd7e + const buffer11 = getAPDUDataBuffer("", "b20901380af44ef59c5918439a1f9a41d83669020319a80574b804a5f95cbd7e052c000080eb000080000000800000000000000000"); + const promise11 = transport.send(215, 0x20, 0x01, 0, buffer11); + await device.curlScreenShot(); + device.curlButton("both", "Confirm chain"); //!!!!!! + const response11 = await promise11; + assert.equal(response11.toString("hex"), "9000"); + + //Append "0102030405" to transaction + const buffer12 = getAPDUDataBuffer("0102030405", ""); + const promise12 = transport.send(215, 0x20, 0x02, 0, buffer12); + const response12 = await promise12; + assert.equal(response12.toString("hex"), "9000"); + + //Show "Test Key" "Test Walue" to transaction hex: 0854657374204b6579, 0a55(54)6573742056616c7565 (total length 0x14) + const buffer13 = getAPDUDataBuffer("0854657374204b65790a556573742056616c7565", ""); + const promise13 = transport.send(215, 0x20, 0x03, 0, buffer13); + await device.curlScreenShot(); + device.curlButton("both", "Confirm message"); //!!!!!! + const response13 = await promise13; + assert.equal(response13.toString("hex"), "9000"); + + //Finish path=44'/235'/0'/0/0 + const buffer14 = getAPDUDataBuffer("", ""); + const promise14 = transport.send(215, 0x20, 0x10, 0, buffer14); + await assert.rejects(promise14, err(0x6e08)); + + await device.makeStartingScreenshot(); +} +//------------------------------------------------------------------------------------- +testStep(" - - -", "Incorrect chain should result in immediate failure"); +{ + //INIT chainId=b20901380af44ef59c5918439a1f9a41d83669020319a80574b804a5f95cbd7f incorrect chain - last bit + const buffer11 = getAPDUDataBuffer("", "b20901380af44ef59c5918439a1f9a41d83669020319a80574b804a5f95cbd7f052c000080eb000080000000800000000000000000"); + const promise11 = transport.send(215, 0x20, 0x01, 0, buffer11); + await assert.rejects(promise11, err(0x6e07)); +} +//------------------------------------------------------------------------------------- +testStep(" - - -", "Incorrect lengths should lead to failure"); +{ + //INIT chainId=21dcae42c0182200e93f954a074011f9048a7624c6fe81d3c9541a614a88bd1c + const buffer11 = getAPDUDataBuffer("", "21dcae42c0182200e93f954a074011f9048a7624c6fe81d3c9541a614a88bd1c052c000080eb000080000000800000000000000000"); + const promise11 = transport.send(215, 0x20, 0x01, 0, buffer11); + await device.curlScreenShot(); + device.curlButton("both", "Confirm chain"); //!!!!!! + const response11 = await promise11; + assert.equal(response11.toString("hex"), "9000"); + + //Append "0102030405(06)" to transaction + const buffer12 = Buffer.from("0501010203040506", "hex"); + const promise12 = transport.send(215, 0x20, 0x02, 0, buffer12); + await assert.rejects(promise12, err(0x6e07)); + + await device.makeStartingScreenshot(); +} +//------------------------------------------------------------------------------------- +testStep(" - - -", "Non ASCII character in message"); +{ + //INIT chainId=b20901380af44ef59c5918439a1f9a41d83669020319a80574b804a5f95cbd7e + const buffer11 = getAPDUDataBuffer("", "b20901380af44ef59c5918439a1f9a41d83669020319a80574b804a5f95cbd7e052c000080eb000080000000800000000000000000"); + const promise11 = transport.send(215, 0x20, 0x01, 0, buffer11); + await device.curlScreenShot(); + device.curlButton("both", "Confirm chain"); //!!!!!! + const response11 = await promise11; + assert.equal(response11.toString("hex"), "9000"); + + //Show "Test Key" "Test Val_e" to transaction hex: 0854657374204b6579, 0a546573742056616c(00)65 + const buffer13 = getAPDUDataBuffer("0854657374204b65790a546573742056616c0065", ""); + const promise13 = transport.send(215, 0x20, 0x03, 0, buffer13); + await assert.rejects(promise13, err(0x6e07)); + + await device.makeStartingScreenshot(); +} +//------------------------------------------------------------------------------------- +testStep(" - - -", "incorrect path should result in failure"); +{ + //INIT chainId=21dcae42c0182200e93f954a074011f9048a7624c6fe81d3c9541a614a88bd1c + const buffer11 = getAPDUDataBuffer("", "21dcae42c0182200e93f954a074011f9048a7624c6fe81d3c9541a614a88bd1c058000002c800000ec800000000000000000000000"); + const promise11 = transport.send(215, 0x20, 0x01, 0, buffer11); + await assert.rejects(promise11, err(0x6e10)); +} +//------------------------------------------------------------------------------------- + + +await transport.close(); +testEnd(scriptName); +process.stdin.pause(); \ No newline at end of file diff --git a/test-integration/signTransactionCommandsCountedSection.js b/test-integration/signTransactionCommandsCountedSection.js new file mode 100644 index 00000000..6ce9f4ff --- /dev/null +++ b/test-integration/signTransactionCommandsCountedSection.js @@ -0,0 +1,310 @@ +import { testStart, testStep, testEnd, getScriptName, getSpeculosDefaultConf, getAPDUDataBuffer } from "./speculos-common.js" +import { getTransport } from "./speculos-transport.js" +import { getButtonsAndSnapshots } from "./speculos-buttons-and-snapshots.js" +import { fileURLToPath } from 'url'; +import assert from 'assert/strict'; +import PublicKey from '@fioprotocol/fiojs/dist/ecc/key_public.js'; +import crypto from "crypto" +import Signature from '@fioprotocol/fiojs/dist/ecc/signature.js'; + +const scriptName = getScriptName(fileURLToPath(import.meta.url)); +testStart(scriptName); + +const speculosConf = getSpeculosDefaultConf(); +const transport = await getTransport(speculosConf); +const device = getButtonsAndSnapshots(scriptName, speculosConf); + +//We will use 44'/235'/0'/0/0 in this test +const publicKeyHex = "04a9a222bc3b1a5a58ada17d10069b3961ebd0f917d4b2106031a061915ca9cc24a06941e0a4c0d5e266850ff980ad349ab8b027c93bf4aead1984168ad43e30ab"; +const publicKey = PublicKey(Buffer.from(publicKeyHex,"hex")) + +//this validates errors: +function err(errno) { + return (err) => { + assert.strictEqual(err.name, 'TransportStatusError'); + assert.strictEqual(err.statusCode, errno); + return true; + } +} + +await device.makeStartingScreenshot(); + +console.log("This test requires app in DEVEL mode.") + +//This test is not completely standardized +//!!!!!! - indicates places where test may reasonably break as Speculos sometimes does not react to every buttonpress. + +//------------------------------------------------------------------------------------- +testStep(" - - -", "Sign minimal fake devel transaction cotaining COUNTED_SECTION instructions"); +{ + //INIT chainId=b20901380af44ef59c5918439a1f9a41d83669020319a80574b804a5f95cbd7e path=44'/235'/0'/0/0 + const buffer11 = getAPDUDataBuffer("", "b20901380af44ef59c5918439a1f9a41d83669020319a80574b804a5f95cbd7e052c000080eb000080000000800000000000000000"); + const promise11 = transport.send(215, 0x20, 0x01, 0, buffer11); + await device.curlScreenShot(); + device.curlButton("both", "Confirm chain"); //!!!!!! + const response11 = await promise11; + assert.equal(response11.toString("hex"), "9000"); + + //START_COUNTED_SECTION 17-varuint32, 01-no validation, 0000000000000000-min, 0800000000000000-max + const buffer12 = getAPDUDataBuffer("170100000000000000000000000000000000", "8001"); // value - 128 + const promise12 = transport.send(215, 0x20, 0x05, 0, buffer12); + const response12 = await promise12; + assert.equal(response12.toString("hex"), "9000"); + + //Append to transaction (32 bytes) + const buffer13 = getAPDUDataBuffer("0000000000000000000000000000000000000000000000000000000000000000", ""); + const promise13 = transport.send(215, 0x20, 0x02, 0, buffer13); + const response13 = await promise13; + assert.equal(response13.toString("hex"), "9000"); + + //START_COUNTED_SECTION 17-varuint32, 01-no validation, 0000000000000000-min, 0800000000000000-max + const buffer14 = getAPDUDataBuffer("170100000000000000000000000000000000", "40"); // value - 64 + const promise14 = transport.send(215, 0x20, 0x05, 0, buffer14); + const response14 = await promise14; + assert.equal(response14.toString("hex"), "9000"); + + //START_COUNTED_SECTION 17-varuint32, 01-no validation, 0000000000000000-min, 0800000000000000-max + const buffer15 = getAPDUDataBuffer("170100000000000000000000000000000000", "20"); // value - 32 + const promise15 = transport.send(215, 0x20, 0x05, 0, buffer15); + const response15 = await promise15; + assert.equal(response15.toString("hex"), "9000"); + + //Append to transaction (32 bytes) + const buffer16 = getAPDUDataBuffer("0000000000000000000000000000000000000000000000000000000000000000", ""); + const promise16 = transport.send(215, 0x20, 0x02, 0, buffer16); + const response16 = await promise16; + assert.equal(response16.toString("hex"), "9000"); + + //END_COUNTED_SECTION + const buffer17 = getAPDUDataBuffer("", ""); + const promise17 = transport.send(215, 0x20, 0x06, 0, buffer17); + const response17 = await promise17; + assert.equal(response17.toString("hex"), "9000"); + + //Append to transaction (31 bytes) + const buffer18 = getAPDUDataBuffer("00000000000000000000000000000000000000000000000000000000000000", ""); + const promise18 = transport.send(215, 0x20, 0x02, 0, buffer18); + const response18 = await promise18; + assert.equal(response18.toString("hex"), "9000"); + + //END_COUNTED_SECTION + const buffer19 = getAPDUDataBuffer("", ""); + const promise19 = transport.send(215, 0x20, 0x06, 0, buffer19); + const response19 = await promise19; + assert.equal(response19.toString("hex"), "9000"); + + //Append to transaction (31 bytes) + const buffer20 = getAPDUDataBuffer("00000000000000000000000000000000000000000000000000000000000000", ""); + const promise20 = transport.send(215, 0x20, 0x02, 0, buffer20); + const response20 = await promise20; + assert.equal(response20.toString("hex"), "9000"); + + //END_COUNTED_SECTION + const buffer21 = getAPDUDataBuffer("", ""); + const promise21 = transport.send(215, 0x20, 0x06, 0, buffer21); + const response21 = await promise21; + assert.equal(response21.toString("hex"), "9000"); + + //Finish + const buffer99 = getAPDUDataBuffer("", ""); + const promise99 = transport.send(215, 0x20, 0x10, 0, buffer99); + await device.curlScreenShot(); + await device.curlButtonAndScreenshot("both", "Confirm sign with"); + await device.curlButtonAndScreenshot("right", "Confirm sign with"); + const response99 = await promise99; + + //The signed message should contain chainId + 0102030405 + const msg1 = Buffer.from("b20901380af44ef59c5918439a1f9a41d83669020319a80574b804a5f95cbd7e" + + "8001" + + "0000000000000000000000000000000000000000000000000000000000000000" + + "40" + + "20" + + "0000000000000000000000000000000000000000000000000000000000000000" + + "00000000000000000000000000000000000000000000000000000000000000" + + "00000000000000000000000000000000000000000000000000000000000000" + , "hex"); + const hash1 = crypto.createHash('sha256').update(msg1).digest('hex') + const ledgerSignature1 = Signature.fromHex(response99.slice(0, 65)); + assert.equal(response99.slice(65,65+32).toString("hex"), hash1); + assert.equal(response99.slice(65+32,65+32+4).toString("hex"), "9000"); + assert.equal(ledgerSignature1.verify(msg1, publicKey), true); +} +//------------------------------------------------------------------------------------- +testStep(" - - -", "Validation failure"); +{ + //INIT chainId=b20901380af44ef59c5918439a1f9a41d83669020319a80574b804a5f95cbd7e + const buffer11 = getAPDUDataBuffer("", "b20901380af44ef59c5918439a1f9a41d83669020319a80574b804a5f95cbd7e052c000080eb000080000000800000000000000000"); + const promise11 = transport.send(215, 0x20, 0x01, 0, buffer11); + await device.curlScreenShot(); + device.curlButton("both", "Confirm chain"); //!!!!!! + const response11 = await promise11; + assert.equal(response11.toString("hex"), "9000"); + + //START_COUNTED_SECTION 17-varuint32, 03-number validation, 0000000000000000-min, 0800000000000000-max + const buffer12 = getAPDUDataBuffer("170300000000000000007f00000000000000", "8001"); // value - 128, 127 is max + const promise12 = transport.send(215, 0x20, 0x05, 0, buffer12); + await assert.rejects(promise12, err(0x6e07)); + + await device.makeStartingScreenshot(); +} +//------------------------------------------------------------------------------------- +testStep(" - - -", "VarInt32 incorrect format"); +{ + //INIT chainId=b20901380af44ef59c5918439a1f9a41d83669020319a80574b804a5f95cbd7e + const buffer11 = getAPDUDataBuffer("", "b20901380af44ef59c5918439a1f9a41d83669020319a80574b804a5f95cbd7e052c000080eb000080000000800000000000000000"); + const promise11 = transport.send(215, 0x20, 0x01, 0, buffer11); + await device.curlScreenShot(); + device.curlButton("both", "Confirm chain"); //!!!!!! + const response11 = await promise11; + assert.equal(response11.toString("hex"), "9000"); + + //START_COUNTED_SECTION 17-varuint32, 01-no validation, 0000000000000000-min, 0000000000000000-max + const buffer12 = getAPDUDataBuffer("170100000000000000000000000000000000", "8080"); + const promise12 = transport.send(215, 0x20, 0x05, 0, buffer12); + await assert.rejects(promise12, err(0x6e07)); + + await device.makeStartingScreenshot(); +} +//------------------------------------------------------------------------------------- +testStep(" - - -", "VarInt32 too many bytes"); +{ + //INIT chainId=b20901380af44ef59c5918439a1f9a41d83669020319a80574b804a5f95cbd7e + const buffer11 = getAPDUDataBuffer("", "b20901380af44ef59c5918439a1f9a41d83669020319a80574b804a5f95cbd7e052c000080eb000080000000800000000000000000"); + const promise11 = transport.send(215, 0x20, 0x01, 0, buffer11); + await device.curlScreenShot(); + device.curlButton("both", "Confirm chain"); //!!!!!! + const response11 = await promise11; + assert.equal(response11.toString("hex"), "9000"); + + //START_COUNTED_SECTION 17-varuint32, 01-no validation, 0000000000000000-min, 0000000000000000-max + const buffer12 = getAPDUDataBuffer("170100000000000000000000000000000000", "808080808080808001"); //more than 9 bytes + const promise12 = transport.send(215, 0x20, 0x05, 0, buffer12); + await assert.rejects(promise12, err(0x6e07)); + + await device.makeStartingScreenshot(); +} +//------------------------------------------------------------------------------------- +testStep(" - - -", "Too big for UInt32"); +{ + //INIT chainId=b20901380af44ef59c5918439a1f9a41d83669020319a80574b804a5f95cbd7e + const buffer11 = getAPDUDataBuffer("", "b20901380af44ef59c5918439a1f9a41d83669020319a80574b804a5f95cbd7e052c000080eb000080000000800000000000000000"); + const promise11 = transport.send(215, 0x20, 0x01, 0, buffer11); + await device.curlScreenShot(); + device.curlButton("both", "Confirm chain"); //!!!!!! + const response11 = await promise11; + assert.equal(response11.toString("hex"), "9000"); + + //START_COUNTED_SECTION 17-varuint32, 01-no validation, 0000000000000000-min, 0000000000000000-max + const buffer12 = getAPDUDataBuffer("170100000000000000000000000000000000", "8080808080808001"); + const promise12 = transport.send(215, 0x20, 0x05, 0, buffer12); + await assert.rejects(promise12, err(0x6e07)); + + await device.makeStartingScreenshot(); +} +//------------------------------------------------------------------------------------- +testStep(" - - -", "too much nesting"); +{ + //INIT chainId=b20901380af44ef59c5918439a1f9a41d83669020319a80574b804a5f95cbd7e + const buffer11 = getAPDUDataBuffer("", "b20901380af44ef59c5918439a1f9a41d83669020319a80574b804a5f95cbd7e052c000080eb000080000000800000000000000000"); + const promise11 = transport.send(215, 0x20, 0x01, 0, buffer11); + await device.curlScreenShot(); + device.curlButton("both", "Confirm chain"); //!!!!!! + const response11 = await promise11; + assert.equal(response11.toString("hex"), "9000"); + + { + //START_COUNTED_SECTION 17-varuint32, 01-no validation, 0000000000000000-min, 0800000000000000-max + const buffer12 = getAPDUDataBuffer("170100000000000000000000000000000000", "8001"); // value - 128 + const promise12 = transport.send(215, 0x20, 0x05, 0, buffer12); + const response12 = await promise12; + assert.equal(response12.toString("hex"), "9000"); + } + + { + //START_COUNTED_SECTION 17-varuint32, 01-no validation, 0000000000000000-min, 0800000000000000-max + const buffer12 = getAPDUDataBuffer("170100000000000000000000000000000000", "8001"); // value - 128 + const promise12 = transport.send(215, 0x20, 0x05, 0, buffer12); + const response12 = await promise12; + assert.equal(response12.toString("hex"), "9000"); + } + + { + //START_COUNTED_SECTION 17-varuint32, 01-no validation, 0000000000000000-min, 0800000000000000-max + const buffer12 = getAPDUDataBuffer("170100000000000000000000000000000000", "8001"); // value - 128 + const promise12 = transport.send(215, 0x20, 0x05, 0, buffer12); + const response12 = await promise12; + assert.equal(response12.toString("hex"), "9000"); + } + + { + //START_COUNTED_SECTION 17-varuint32, 01-no validation, 0000000000000000-min, 0800000000000000-max + const buffer12 = getAPDUDataBuffer("170100000000000000000000000000000000", "8001"); // value - 128 + const promise12 = transport.send(215, 0x20, 0x05, 0, buffer12); + const response12 = await promise12; + assert.equal(response12.toString("hex"), "9000"); + } + + { + //START_COUNTED_SECTION 17-varuint32, 01-no validation, 0000000000000000-min, 0800000000000000-max + const buffer12 = getAPDUDataBuffer("170100000000000000000000000000000000", "8001"); // value - 128 + const promise12 = transport.send(215, 0x20, 0x05, 0, buffer12); + const response12 = await promise12; + assert.equal(response12.toString("hex"), "9000"); + } + + { + //START_COUNTED_SECTION 17-varuint32, 01-no validation, 0000000000000000-min, 0800000000000000-max + const buffer12 = getAPDUDataBuffer("170100000000000000000000000000000000", "8001"); // value - 128 + const promise12 = transport.send(215, 0x20, 0x05, 0, buffer12); + await assert.rejects(promise12, err(0x6e07)); + await device.makeStartingScreenshot(); + } +} +//------------------------------------------------------------------------------------- +testStep(" - - -", "Unexpected end counted section"); +{ + //INIT chainId=b20901380af44ef59c5918439a1f9a41d83669020319a80574b804a5f95cbd7e + const buffer11 = getAPDUDataBuffer("", "b20901380af44ef59c5918439a1f9a41d83669020319a80574b804a5f95cbd7e052c000080eb000080000000800000000000000000"); + const promise11 = transport.send(215, 0x20, 0x01, 0, buffer11); + await device.curlScreenShot(); + device.curlButton("both", "Confirm chain"); //!!!!!! + const response11 = await promise11; + assert.equal(response11.toString("hex"), "9000"); + + //END_COUNTED_SECTION + const buffer12 = getAPDUDataBuffer("", ""); + const promise12 = transport.send(215, 0x20, 0x06, 0, buffer12); + await assert.rejects(promise12, err(0x6e07)); + + await device.makeStartingScreenshot(); +} + +//------------------------------------------------------------------------------------- +testStep(" - - -", "Length mismatch"); +{ + //INIT chainId=b20901380af44ef59c5918439a1f9a41d83669020319a80574b804a5f95cbd7e + const buffer11 = getAPDUDataBuffer("", "b20901380af44ef59c5918439a1f9a41d83669020319a80574b804a5f95cbd7e052c000080eb000080000000800000000000000000"); + const promise11 = transport.send(215, 0x20, 0x01, 0, buffer11); + await device.curlScreenShot(); + device.curlButton("both", "Confirm chain"); //!!!!!! + const response11 = await promise11; + assert.equal(response11.toString("hex"), "9000"); + + //START_COUNTED_SECTION 17-varuint32, 01-no validation, 0000000000000000-min, 0800000000000000-max + const buffer12 = getAPDUDataBuffer("170100000000000000000000000000000000", "8001"); // value - 128 + const promise12 = transport.send(215, 0x20, 0x05, 0, buffer12); + const response12 = await promise12; + assert.equal(response12.toString("hex"), "9000"); + + //END_COUNTED_SECTION + const buffer13 = getAPDUDataBuffer("", ""); + const promise13 = transport.send(215, 0x20, 0x06, 0, buffer13); + await assert.rejects(promise13, err(0x6e07)); + + await device.makeStartingScreenshot(); +} + +await transport.close(); +testEnd(scriptName); +process.stdin.pause(); + diff --git a/test-integration/signTransactionCommandsDH.js b/test-integration/signTransactionCommandsDH.js new file mode 100644 index 00000000..67cb9b13 --- /dev/null +++ b/test-integration/signTransactionCommandsDH.js @@ -0,0 +1,278 @@ +import { testStart, testStep, testEnd, getScriptName, getSpeculosDefaultConf, getAPDUDataBuffer, sleep } from "./speculos-common.js" +import { getTransport } from "./speculos-transport.js" +import { getButtonsAndSnapshots } from "./speculos-buttons-and-snapshots.js" +import { fileURLToPath } from 'url'; +import assert from 'assert/strict'; +import PrivateKey from '@fioprotocol/fiojs/dist/ecc/key_private.js'; +import PublicKey from '@fioprotocol/fiojs/dist/ecc/key_public.js'; +import { checkEncrypt } from "@fioprotocol/fiojs/dist/encryption-check.js" +import crypto from "crypto" +import Signature from '@fioprotocol/fiojs/dist/ecc/signature.js'; + +const scriptName = getScriptName(fileURLToPath(import.meta.url)); +testStart(scriptName); + +const speculosConf = getSpeculosDefaultConf(); +const transport = await getTransport(speculosConf); +const device = getButtonsAndSnapshots(scriptName, speculosConf); + +//We will use 44'/235'/0'/0/0 in this test +const publicKeyHex = "04a9a222bc3b1a5a58ada17d10069b3961ebd0f917d4b2106031a061915ca9cc24a06941e0a4c0d5e266850ff980ad349ab8b027c93bf4aead1984168ad43e30ab"; +const publicKey = PublicKey(Buffer.from(publicKeyHex,"hex")) + +//this validates errors: +function err(errno) { + return (err) => { + assert.strictEqual(err.name, 'TransportStatusError'); + assert.strictEqual(err.statusCode, errno); + return true; + } +} + +await device.makeStartingScreenshot(); + +console.log("This test requires app in DEVEL mode.") + +//This test is not completely standardized +//!!!!!! - indicates places where test may reasonably break as Speculos sometimes does not react to every buttonpress. + +//------------------------------------------------------------------------------------- +testStep(" - - -", "Sign minimal devel DH tranaction"); +{ + //INIT chainId=b20901380af44ef59c5918439a1f9a41d83669020319a80574b804a5f95cbd7e path=44'/235'/0'/0/0 + const buffer11 = getAPDUDataBuffer("", "b20901380af44ef59c5918439a1f9a41d83669020319a80574b804a5f95cbd7e052c000080eb000080000000800000000000000000"); + console.log(buffer11.toString("hex")) + const promise11 = transport.send(215, 0x20, 0x01, 0, buffer11); + await device.curlScreenShot(); + device.curlButton("both", "Confirm chain"); //!!!!!! + const response11 = await promise11; + assert.equal(response11.toString("hex"), "9000"); + + const otherPublicKey = "0484e52dfea57b8f1787488a356374cd8e8515b8ad8db3dd4f9088d8e42ed2fb6d571e8894cccbdbf15e1bd84f8b4362f52d1b5b712b9775c0a51cdd5ee9a9e8ca"; + //START DH encryption //this is 9ubkey for path=44'/235'/0'/0/2000 + const buffer12 = getAPDUDataBuffer("", otherPublicKey); + const promise12 = transport.send(215, 0x20, 0x08, 0, buffer12); + await device.curlScreenShot(); + device.curlButton("both", "message"); + const response12 = await promise12; + assert.equal(response12.slice(-2).toString("hex"), "9000"); + let dhEncodedMsg = response12.slice(0, -2).toString("hex"); + + //Append "0102030405" to transaction + const buffer13 = getAPDUDataBuffer("0102030405", ""); + const promise13 = transport.send(215, 0x20, 0x02, 0, buffer13); + const response13 = await promise13; + assert.equal(response13.slice(-2).toString("hex"), "9000"); + dhEncodedMsg += response13.slice(0, -2).toString("hex"); + + //SHOW DATA 02-string, 01-no validation, 0000000000000000-min, 0000000000000000-max, 05-policy, Key = "String" (06537472696e67) + const buffer14 = getAPDUDataBuffer("0201000000000000000000000000000000000506537472696e67", "4e69636520616e64206c6f6e67206c6f6e67206c6f6e67206c6f6e6720737472696e67"); + const promise14 = transport.send(215, 0x20, 0x04, 0, buffer14); + await device.curlScreenShot(); + device.curlButton("both", "Confirm message"); //!!!!!! + const response14 = await promise14; + assert.equal(response14.slice(-2).toString("hex"), "9000"); + dhEncodedMsg += response14.slice(0, -2).toString("hex"); + + //END DH ENCRYPTION + const buffer15 = getAPDUDataBuffer("", ""); + const promise15 = transport.send(215, 0x20, 0x09, 0, buffer15); + await device.curlScreenShot(); + device.curlButton("right", "Confirm create shared secret"); //!!!!!! + const response15 = await promise15; + assert.equal(response15.slice(-2).toString("hex"), "9000"); + dhEncodedMsg += response15.slice(0, -2).toString("hex"); + + // Validate DH encoded secret + const privateKey = PrivateKey(Buffer.from("4d597899db76e87933e7c6841c2d661810f070bad20487ef20eb84e182695a3a", "hex")) + const sharedSecret = privateKey.getSharedSecret(PublicKey(Buffer.from(otherPublicKey, "hex"))); + const IV = Buffer.from(Buffer.from(dhEncodedMsg, "hex").toString(), "base64").slice(0, 16); + const msg = Buffer.from("0102030405" + "4e69636520616e64206c6f6e67206c6f6e67206c6f6e67206c6f6e6720737472696e67", "hex"); + const encrypt = checkEncrypt(sharedSecret, Buffer.from(msg, "hex"), IV); + assert.equal(encrypt.toString("base64"), Buffer.from(dhEncodedMsg, "hex").toString()); + + // Finish + const buffer16 = getAPDUDataBuffer("", ""); + const promise16 = transport.send(215, 0x20, 0x10, 0, buffer16); + await device.curlScreenShot(); + await device.curlButtonAndScreenshot("both", "Our Path"); + await device.curlButtonAndScreenshot("right", "Confirm sign with"); + const response16 = await promise16; + + //The signed message should contain chainId + dhEncodedMsg + const msg1 = Buffer.from("b20901380af44ef59c5918439a1f9a41d83669020319a80574b804a5f95cbd7e"+dhEncodedMsg, "hex"); + const hash1 = crypto.createHash('sha256').update(msg1).digest('hex') + const ledgerSignature1 = Signature.fromHex(response16.slice(0, 65)); + assert.equal(response16.slice(65,65+32).toString("hex"), hash1); + assert.equal(response16.slice(65+32,65+32+4).toString("hex"), "9000"); + assert.equal(ledgerSignature1.verify(msg1, publicKey), true); +} +//------------------------------------------------------------------------------------- +testStep(" - - -", "Ending DH encoding without beggining it does not work"); +{ + //INIT chainId=b20901380af44ef59c5918439a1f9a41d83669020319a80574b804a5f95cbd7e path=44'/235'/0'/0/0 + const buffer11 = getAPDUDataBuffer("", "b20901380af44ef59c5918439a1f9a41d83669020319a80574b804a5f95cbd7e052c000080eb000080000000800000000000000000"); + console.log(buffer11.toString("hex")) + const promise11 = transport.send(215, 0x20, 0x01, 0, buffer11); + await device.curlScreenShot(); + device.curlButton("both", "Confirm chain"); //!!!!!! + const response11 = await promise11; + assert.equal(response11.toString("hex"), "9000"); + + //END DH ENCRYPTION + const buffer15 = getAPDUDataBuffer("", ""); + const promise15 = transport.send(215, 0x20, 0x09, 0, buffer15); + await assert.rejects(promise15, err(0x6e06)); + + await device.makeStartingScreenshot(); +} +//------------------------------------------------------------------------------------- +testStep(" - - -", "Nested DH encryption disallowed"); +{ + //INIT chainId=b20901380af44ef59c5918439a1f9a41d83669020319a80574b804a5f95cbd7e path=44'/235'/0'/0/0 + const buffer11 = getAPDUDataBuffer("", "b20901380af44ef59c5918439a1f9a41d83669020319a80574b804a5f95cbd7e052c000080eb000080000000800000000000000000"); + console.log(buffer11.toString("hex")) + const promise11 = transport.send(215, 0x20, 0x01, 0, buffer11); + await device.curlScreenShot(); + device.curlButton("both", "Confirm chain"); //!!!!!! + const response11 = await promise11; + assert.equal(response11.toString("hex"), "9000"); + + const otherPublicKey = "0484e52dfea57b8f1787488a356374cd8e8515b8ad8db3dd4f9088d8e42ed2fb6d571e8894cccbdbf15e1bd84f8b4362f52d1b5b712b9775c0a51cdd5ee9a9e8ca"; + //START DH encryption //this is 9ubkey for path=44'/235'/0'/0/2000 + const buffer12 = getAPDUDataBuffer("", otherPublicKey); + const promise12 = transport.send(215, 0x20, 0x08, 0, buffer12); + await device.curlScreenShot(); + device.curlButton("both", "message"); + const response12 = await promise12; + assert.equal(response12.slice(-2).toString("hex"), "9000"); + + //START DH encryption //this is 9ubkey for path=44'/235'/0'/0/2000 + const buffer13 = getAPDUDataBuffer("", otherPublicKey); + const promise13 = transport.send(215, 0x20, 0x08, 0, buffer13); + await assert.rejects(promise13, err(0x6e06)); +} +//------------------------------------------------------------------------------------- +testStep(" - - -", "You can restart DH encryption. You cannot finish the transaction without finishind DH encoding"); +{ + //INIT chainId=b20901380af44ef59c5918439a1f9a41d83669020319a80574b804a5f95cbd7e path=44'/235'/0'/0/0 + const buffer11 = getAPDUDataBuffer("", "b20901380af44ef59c5918439a1f9a41d83669020319a80574b804a5f95cbd7e052c000080eb000080000000800000000000000000"); + console.log(buffer11.toString("hex")) + const promise11 = transport.send(215, 0x20, 0x01, 0, buffer11); + await device.curlScreenShot(); + device.curlButton("both", "Confirm chain"); //!!!!!! + const response11 = await promise11; + assert.equal(response11.toString("hex"), "9000"); + + const otherPublicKey = "0484e52dfea57b8f1787488a356374cd8e8515b8ad8db3dd4f9088d8e42ed2fb6d571e8894cccbdbf15e1bd84f8b4362f52d1b5b712b9775c0a51cdd5ee9a9e8ca"; + //START DH encryption //this is 9ubkey for path=44'/235'/0'/0/2000 + const buffer12 = getAPDUDataBuffer("", otherPublicKey); + const promise12 = transport.send(215, 0x20, 0x08, 0, buffer12); + await device.curlScreenShot(); + device.curlButton("both", "message"); + const response12 = await promise12; + assert.equal(response12.slice(-2).toString("hex"), "9000"); + + //END DH ENCRYPTION + const buffer13 = getAPDUDataBuffer("", ""); + const promise13 = transport.send(215, 0x20, 0x09, 0, buffer13); + await device.curlScreenShot(); + device.curlButton("right", "Confirm create shared secret"); //!!!!!! + const response13 = await promise13; + assert.equal(response13.slice(-2).toString("hex"), "9000"); + + //START DH encryption //this is 9ubkey for path=44'/235'/0'/0/2000 + const buffer14 = getAPDUDataBuffer("", otherPublicKey); + const promise14 = transport.send(215, 0x20, 0x08, 0, buffer14); + await device.curlScreenShot(); + device.curlButton("both", "message"); + const response14 = await promise14; + assert.equal(response14.slice(-2).toString("hex"), "9000"); + + // Finish + const buffer16 = getAPDUDataBuffer("", ""); + const promise16 = transport.send(215, 0x20, 0x10, 0, buffer16); + await assert.rejects(promise16, err(0x6e06)); + + await device.makeStartingScreenshot(); +} +//------------------------------------------------------------------------------------- +testStep(" - - -", "If you reject DH encryption it fails imediately, without exposing last blocks"); +{ + //INIT chainId=b20901380af44ef59c5918439a1f9a41d83669020319a80574b804a5f95cbd7e path=44'/235'/0'/0/0 + const buffer11 = getAPDUDataBuffer("", "b20901380af44ef59c5918439a1f9a41d83669020319a80574b804a5f95cbd7e052c000080eb000080000000800000000000000000"); + console.log(buffer11.toString("hex")) + const promise11 = transport.send(215, 0x20, 0x01, 0, buffer11); + await device.curlScreenShot(); + device.curlButton("both", "Confirm chain"); //!!!!!! + const response11 = await promise11; + assert.equal(response11.toString("hex"), "9000"); + + const otherPublicKey = "0484e52dfea57b8f1787488a356374cd8e8515b8ad8db3dd4f9088d8e42ed2fb6d571e8894cccbdbf15e1bd84f8b4362f52d1b5b712b9775c0a51cdd5ee9a9e8ca"; + //START DH encryption //this is 9ubkey for path=44'/235'/0'/0/2000 + const buffer12 = getAPDUDataBuffer("", otherPublicKey); + const promise12 = transport.send(215, 0x20, 0x08, 0, buffer12); + await device.curlScreenShot(); + device.curlButton("both", "message"); + const response12 = await promise12; + assert.equal(response12.slice(-2).toString("hex"), "9000"); + + //END DH ENCRYPTION + const buffer13 = getAPDUDataBuffer("", ""); + const promise13 = transport.send(215, 0x20, 0x09, 0, buffer13); + await device.curlScreenShot(); + device.curlButton("left", "Reject create shared secret"); //!!!!!! + await assert.rejects(promise13, err(0x6e09)); + + await device.makeStartingScreenshot(); +} +//------------------------------------------------------------------------------------- +testStep(" - - -", "Modifying anything within DH block should lead to integrity check failure"); +{ + //INIT chainId=b20901380af44ef59c5918439a1f9a41d83669020319a80574b804a5f95cbd7e path=44'/235'/0'/0/0 + const buffer11 = getAPDUDataBuffer("", "b20901380af44ef59c5918439a1f9a41d83669020319a80574b804a5f95cbd7e052c000080eb000080000000800000000000000000"); + console.log(buffer11.toString("hex")) + const promise11 = transport.send(215, 0x20, 0x01, 0, buffer11); + await device.curlScreenShot(); + device.curlButton("both", "Confirm chain"); //!!!!!! + const response11 = await promise11; + assert.equal(response11.toString("hex"), "9000"); + + const otherPublicKey = "0484e52dfea57b8f1787488a356374cd8e8515b8ad8db3dd4f9088d8e42ed2fb6d571e8894cccbdbf15e1bd84f8b4362f52d1b5b712b9775c0a51cdd5ee9a9e8ca"; + //START DH encryption //this is 9ubkey for path=44'/235'/0'/0/2000 + const buffer12 = getAPDUDataBuffer("", otherPublicKey); + const promise12 = transport.send(215, 0x20, 0x08, 0, buffer12); + await device.curlScreenShot(); + device.curlButton("both", "message"); + const response12 = await promise12; + assert.equal(response12.slice(-2).toString("hex"), "9000"); + let dhEncodedMsg = response12.slice(0, -2).toString("hex"); + + //Append "0102030406" to transaction - this should be 0102030405 + const buffer13 = getAPDUDataBuffer("0102030406", ""); + const promise13 = transport.send(215, 0x20, 0x02, 0, buffer13); + const response13 = await promise13; + assert.equal(response13.slice(-2).toString("hex"), "9000"); + dhEncodedMsg += response13.slice(0, -2).toString("hex"); + + //SHOW DATA 02-string, 01-no validation, 0000000000000000-min, 0000000000000000-max, 05-policy, Key = "String" (06537472696e67) + const buffer14 = getAPDUDataBuffer("0201000000000000000000000000000000000506537472696e67", "4e69636520616e64206c6f6e67206c6f6e67206c6f6e67206c6f6e6720737472696e67"); + const promise14 = transport.send(215, 0x20, 0x04, 0, buffer14); + await device.curlScreenShot(); + device.curlButton("both", "Confirm message"); //!!!!!! + const response14 = await promise14; + assert.equal(response14.slice(-2).toString("hex"), "9000"); + dhEncodedMsg += response14.slice(0, -2).toString("hex"); + + //END DH ENCRYPTION + const buffer15 = getAPDUDataBuffer("", ""); + const promise15 = transport.send(215, 0x20, 0x09, 0, buffer15); + await assert.rejects(promise15, err(0x6e08)); + + await device.makeStartingScreenshot(); +} +//------------------------------------------------------------------------------------- + +await transport.close(); +testEnd(scriptName); +process.stdin.pause(); \ No newline at end of file diff --git a/test-integration/signTransactionCommandsDHAndCountedSections.js b/test-integration/signTransactionCommandsDHAndCountedSections.js new file mode 100644 index 00000000..642666d5 --- /dev/null +++ b/test-integration/signTransactionCommandsDHAndCountedSections.js @@ -0,0 +1,212 @@ +import { testStart, testStep, testEnd, getScriptName, getSpeculosDefaultConf, getAPDUDataBuffer, sleep } from "./speculos-common.js" +import { getTransport } from "./speculos-transport.js" +import { getButtonsAndSnapshots } from "./speculos-buttons-and-snapshots.js" +import { fileURLToPath } from 'url'; +import assert from 'assert/strict'; +import PrivateKey from '@fioprotocol/fiojs/dist/ecc/key_private.js'; +import PublicKey from '@fioprotocol/fiojs/dist/ecc/key_public.js'; +import { checkEncrypt } from "@fioprotocol/fiojs/dist/encryption-check.js" +import crypto from "crypto" +import Signature from '@fioprotocol/fiojs/dist/ecc/signature.js'; + +const scriptName = getScriptName(fileURLToPath(import.meta.url)); +testStart(scriptName); + +const speculosConf = getSpeculosDefaultConf(); +const transport = await getTransport(speculosConf); +const device = getButtonsAndSnapshots(scriptName, speculosConf); + +//We will use 44'/235'/0'/0/0 in this test +const publicKeyHex = "04a9a222bc3b1a5a58ada17d10069b3961ebd0f917d4b2106031a061915ca9cc24a06941e0a4c0d5e266850ff980ad349ab8b027c93bf4aead1984168ad43e30ab"; +const publicKey = PublicKey(Buffer.from(publicKeyHex,"hex")) + +//this validates errors: +function err(errno) { + return (err) => { + assert.strictEqual(err.name, 'TransportStatusError'); + assert.strictEqual(err.statusCode, errno); + return true; + } +} + +await device.makeStartingScreenshot(); + +console.log("This test requires app in DEVEL mode.") + +//This test is not completely standardized +//!!!!!! - indicates places where test may reasonably break as Speculos sometimes does not react to every buttonpress. + +//------------------------------------------------------------------------------------- +testStep(" - - -", "Sign minimal devel DH tranaction"); +{ + //INIT chainId=b20901380af44ef59c5918439a1f9a41d83669020319a80574b804a5f95cbd7e path=44'/235'/0'/0/0 + const buffer11 = getAPDUDataBuffer("", "b20901380af44ef59c5918439a1f9a41d83669020319a80574b804a5f95cbd7e052c000080eb000080000000800000000000000000"); + console.log(buffer11.toString("hex")) + const promise11 = transport.send(215, 0x20, 0x01, 0, buffer11); + await device.curlScreenShot(); + device.curlButton("both", "Confirm chain"); //!!!!!! + const response11 = await promise11; + assert.equal(response11.toString("hex"), "9000"); + + { + //START_COUNTED_SECTION 17-varuint32, 01-no validation, 0000000000000000-min, 0800000000000000-max + const buffer12 = getAPDUDataBuffer("170100000000000000000000000000000000", "58"); // value - 88 ...4 blocks (4*16)/3=21.3.. 22*4=44 + const promise12 = transport.send(215, 0x20, 0x05, 0, buffer12); + const response12 = await promise12; + assert.equal(response12.toString("hex"), "9000"); + } + + const otherPublicKey = "0484e52dfea57b8f1787488a356374cd8e8515b8ad8db3dd4f9088d8e42ed2fb6d571e8894cccbdbf15e1bd84f8b4362f52d1b5b712b9775c0a51cdd5ee9a9e8ca"; + //START DH encryption //this is 9ubkey for path=44'/235'/0'/0/2000 + const buffer12 = getAPDUDataBuffer("", otherPublicKey); + const promise12 = transport.send(215, 0x20, 0x08, 0, buffer12); + await device.curlScreenShot(); + device.curlButton("both", "message"); + const response12 = await promise12; + assert.equal(response12.slice(-2).toString("hex"), "9000"); + let dhEncodedMsg = response12.slice(0, -2).toString("hex"); + + { + //START_COUNTED_SECTION 17-varuint32, 01-no validation, 0000000000000000-min, 0800000000000000-max + const buffer12 = getAPDUDataBuffer("170100000000000000000000000000000000", "05"); // value - 5 + const promise12 = transport.send(215, 0x20, 0x05, 0, buffer12); + const response12 = await promise12; + assert.equal(response12.slice(-2).toString("hex"), "9000"); + dhEncodedMsg += response12.slice(0, -2).toString("hex"); + } + + //Append "0102030405" to transaction + const buffer13 = getAPDUDataBuffer("0102030405", ""); + const promise13 = transport.send(215, 0x20, 0x02, 0, buffer13); + const response13 = await promise13; + assert.equal(response13.slice(-2).toString("hex"), "9000"); + dhEncodedMsg += response13.slice(0, -2).toString("hex"); + + { + //END_COUNTED_SECTION + const buffer17 = getAPDUDataBuffer("", ""); + const promise17 = transport.send(215, 0x20, 0x06, 0, buffer17); + const response17 = await promise17; + assert.equal(response17.slice(-2).toString("hex"), "9000"); + dhEncodedMsg += response17.slice(0, -2).toString("hex"); + } + + //END DH ENCRYPTION + const buffer15 = getAPDUDataBuffer("", ""); + const promise15 = transport.send(215, 0x20, 0x09, 0, buffer15); + await device.curlScreenShot(); + device.curlButton("right", "Confirm create shared secret"); //!!!!!! + const response15 = await promise15; + assert.equal(response15.slice(-2).toString("hex"), "9000"); + dhEncodedMsg += response15.slice(0, -2).toString("hex"); + + // Validate DH encoded secret + const privateKey = PrivateKey(Buffer.from("4d597899db76e87933e7c6841c2d661810f070bad20487ef20eb84e182695a3a", "hex")) + const sharedSecret = privateKey.getSharedSecret(PublicKey(Buffer.from(otherPublicKey, "hex"))); + const IV = Buffer.from(Buffer.from(dhEncodedMsg, "hex").toString(), "base64").slice(0, 16); + const msg = Buffer.from("05"+"0102030405", "hex"); + const encrypt = checkEncrypt(sharedSecret, Buffer.from(msg, "hex"), IV); + assert.equal(encrypt.toString("base64"), Buffer.from(dhEncodedMsg, "hex").toString()); + + { + //END_COUNTED_SECTION + const buffer17 = getAPDUDataBuffer("", ""); + const promise17 = transport.send(215, 0x20, 0x06, 0, buffer17); + const response17 = await promise17; + assert.equal(response17.toString("hex"), "9000"); + } + + // Finish + const buffer16 = getAPDUDataBuffer("", ""); + const promise16 = transport.send(215, 0x20, 0x10, 0, buffer16); + await device.curlScreenShot(); + await device.curlButtonAndScreenshot("both", "Our Path"); + await device.curlButtonAndScreenshot("right", "Confirm sign with"); + const response16 = await promise16; + + //The signed message should contain chainId + "40"+dhEncodedMsg + const msg1 = Buffer.from("b20901380af44ef59c5918439a1f9a41d83669020319a80574b804a5f95cbd7e"+"58"+dhEncodedMsg, "hex"); + const hash1 = crypto.createHash('sha256').update(msg1).digest('hex') + const ledgerSignature1 = Signature.fromHex(response16.slice(0, 65)); + assert.equal(response16.slice(65,65+32).toString("hex"), hash1); + assert.equal(response16.slice(65+32,65+32+4).toString("hex"), "9000"); + assert.equal(ledgerSignature1.verify(msg1, publicKey), true); +} +//------------------------------------------------------------------------------------- +testStep(" - - -", "You cannt just end counted section within DH encription without starting it"); +{ + //INIT chainId=b20901380af44ef59c5918439a1f9a41d83669020319a80574b804a5f95cbd7e path=44'/235'/0'/0/0 + const buffer11 = getAPDUDataBuffer("", "b20901380af44ef59c5918439a1f9a41d83669020319a80574b804a5f95cbd7e052c000080eb000080000000800000000000000000"); + console.log(buffer11.toString("hex")) + const promise11 = transport.send(215, 0x20, 0x01, 0, buffer11); + await device.curlScreenShot(); + device.curlButton("both", "Confirm chain"); //!!!!!! + const response11 = await promise11; + assert.equal(response11.toString("hex"), "9000"); + + { + //START_COUNTED_SECTION 17-varuint32, 01-no validation, 0000000000000000-min, 0800000000000000-max + const buffer12 = getAPDUDataBuffer("170100000000000000000000000000000000", "40"); // value - 64 (16b IV, 1DH block, 32b HMAC) + const promise12 = transport.send(215, 0x20, 0x05, 0, buffer12); + const response12 = await promise12; + assert.equal(response12.toString("hex"), "9000"); + } + + const otherPublicKey = "0484e52dfea57b8f1787488a356374cd8e8515b8ad8db3dd4f9088d8e42ed2fb6d571e8894cccbdbf15e1bd84f8b4362f52d1b5b712b9775c0a51cdd5ee9a9e8ca"; + //START DH encryption //this is 9ubkey for path=44'/235'/0'/0/2000 + const buffer12 = getAPDUDataBuffer("", otherPublicKey); + const promise12 = transport.send(215, 0x20, 0x08, 0, buffer12); + await device.curlScreenShot(); + device.curlButton("both", "message"); + const response12 = await promise12; + assert.equal(response12.slice(-2).toString("hex"), "9000"); + + //END_COUNTED_SECTION + const buffer17 = getAPDUDataBuffer("", ""); + const promise17 = transport.send(215, 0x20, 0x06, 0, buffer17); + await assert.rejects(promise17, err(0x6e06)); + + await device.makeStartingScreenshot(); +} +//------------------------------------------------------------------------------------- +testStep(" - - -", "Counted section from within DH encoding mus be finished"); +{ + //INIT chainId=b20901380af44ef59c5918439a1f9a41d83669020319a80574b804a5f95cbd7e path=44'/235'/0'/0/0 + const buffer11 = getAPDUDataBuffer("", "b20901380af44ef59c5918439a1f9a41d83669020319a80574b804a5f95cbd7e052c000080eb000080000000800000000000000000"); + console.log(buffer11.toString("hex")) + const promise11 = transport.send(215, 0x20, 0x01, 0, buffer11); + await device.curlScreenShot(); + device.curlButton("both", "Confirm chain"); //!!!!!! + const response11 = await promise11; + assert.equal(response11.toString("hex"), "9000"); + + const otherPublicKey = "0484e52dfea57b8f1787488a356374cd8e8515b8ad8db3dd4f9088d8e42ed2fb6d571e8894cccbdbf15e1bd84f8b4362f52d1b5b712b9775c0a51cdd5ee9a9e8ca"; + //START DH encryption //this is 9ubkey for path=44'/235'/0'/0/2000 + const buffer12 = getAPDUDataBuffer("", otherPublicKey); + const promise12 = transport.send(215, 0x20, 0x08, 0, buffer12); + await device.curlScreenShot(); + device.curlButton("both", "message"); + const response12 = await promise12; + assert.equal(response12.slice(-2).toString("hex"), "9000"); + + { + //START_COUNTED_SECTION 17-varuint32, 01-no validation, 0000000000000000-min, 0800000000000000-max + const buffer12 = getAPDUDataBuffer("170100000000000000000000000000000000", "05"); // value - 5 + const promise12 = transport.send(215, 0x20, 0x05, 0, buffer12); + const response12 = await promise12; + assert.equal(response12.slice(-2).toString("hex"), "9000"); + } + + //END DH ENCRYPTION + const buffer15 = getAPDUDataBuffer("", ""); + const promise15 = transport.send(215, 0x20, 0x09, 0, buffer15); + await assert.rejects(promise15, err(0x6e06)); + + await device.makeStartingScreenshot(); +} +//------------------------------------------------------------------------------------- + + +await transport.close(); +testEnd(scriptName); +process.stdin.pause(); \ No newline at end of file diff --git a/test-integration/signTransactionCommandsShowData.js b/test-integration/signTransactionCommandsShowData.js new file mode 100644 index 00000000..e5d982a8 --- /dev/null +++ b/test-integration/signTransactionCommandsShowData.js @@ -0,0 +1,317 @@ +import { testStart, testStep, testEnd, getScriptName, getSpeculosDefaultConf, getAPDUDataBuffer } from "./speculos-common.js" +import { getTransport } from "./speculos-transport.js" +import { getButtonsAndSnapshots } from "./speculos-buttons-and-snapshots.js" +import { fileURLToPath } from 'url'; +import assert from 'assert/strict'; +import PublicKey from '@fioprotocol/fiojs/dist/ecc/key_public.js'; +import crypto from "crypto" +import Signature from '@fioprotocol/fiojs/dist/ecc/signature.js'; + +const scriptName = getScriptName(fileURLToPath(import.meta.url)); +testStart(scriptName); + +const speculosConf = getSpeculosDefaultConf(); +const transport = await getTransport(speculosConf); +const device = getButtonsAndSnapshots(scriptName, speculosConf); + +//We will use 44'/235'/0'/0/0 in this test +const publicKeyHex = "04a9a222bc3b1a5a58ada17d10069b3961ebd0f917d4b2106031a061915ca9cc24a06941e0a4c0d5e266850ff980ad349ab8b027c93bf4aead1984168ad43e30ab"; +const publicKey = PublicKey(Buffer.from(publicKeyHex,"hex")) + +//this validates errors: +function err(errno) { + return (err) => { + assert.strictEqual(err.name, 'TransportStatusError'); + assert.strictEqual(err.statusCode, errno); + return true; + } +} + +await device.makeStartingScreenshot(); + +console.log("This test requires app in DEVEL mode.") + +//This test is not completely standardized +//!!!!!! - indicates places where test may reasonably break as Speculos sometimes does not react to every buttonpress. + +//------------------------------------------------------------------------------------- +testStep(" - - -", "Sign minimal fake devel transaction containing SHOW_DATA instructions - testnet"); +{ + //INIT chainId=b20901380af44ef59c5918439a1f9a41d83669020319a80574b804a5f95cbd7e path=44'/235'/0'/0/0 + const buffer11 = getAPDUDataBuffer("", "b20901380af44ef59c5918439a1f9a41d83669020319a80574b804a5f95cbd7e052c000080eb000080000000800000000000000000"); + const promise11 = transport.send(215, 0x20, 0x01, 0, buffer11); + await device.curlScreenShot(); + device.curlButton("both", "Confirm chain"); //!!!!!! + const response11 = await promise11; + assert.equal(response11.toString("hex"), "9000"); + + //SHOW DATA 01-hexstring, 02-validate length, 0000000000000000-min, 0800000000000000-max, 05-policy, Key = "HexString" (09486578537472696e67) + const buffer12 = getAPDUDataBuffer("0102000000000000000008000000000000000509486578537472696e67", "0011223344556677"); + const promise12 = transport.send(215, 0x20, 0x04, 0, buffer12); + await device.curlScreenShot(); + device.curlButton("both", "Confirm message"); //!!!!!! + const response12 = await promise12; + assert.equal(response12.toString("hex"), "9000"); + + //SHOW DATA 02-string, 01-no validation, 0000000000000000-min, 0000000000000000-max, 05-policy, Key = "String" (06537472696e67) + const buffer13 = getAPDUDataBuffer("0201000000000000000000000000000000000506537472696e67", "4e69636520616e64206c6f6e67206c6f6e67206c6f6e67206c6f6e6720737472696e67"); + const promise13 = transport.send(215, 0x20, 0x04, 0, buffer13); + await device.curlScreenShot(); + device.curlButton("both", "Confirm message"); //!!!!!! + const response13 = await promise13; + assert.equal(response13.toString("hex"), "9000"); + + //SHOW DATA 03-name, 01-no validation, 0000000000000000-min, 0000000000000000-max, 05-policy, Key = "NameString" (0a4e616d65537472696e67) Shows: "fio.token" + const buffer14 = getAPDUDataBuffer("030100000000000000000000000000000000050a4e616d65537472696e67", "0000980ad20ca85b"); + const promise14 = transport.send(215, 0x20, 0x04, 0, buffer14); + await device.curlScreenShot(); + device.curlButton("both", "Confirm message"); //!!!!!! + const response14 = await promise14; + assert.equal(response14.toString("hex"), "9000"); + + //SHOW DATA 10-amount, 01-no validation, 0000000000000000-min, 0000000000000000-max, 05-policy, Key = "Amount" (06416d6f756e74) + const buffer15 = getAPDUDataBuffer("1001000000000000000000000000000000000506416d6f756e74", "0100000000000000"); + const promise15 = transport.send(215, 0x20, 0x04, 0, buffer15); + await device.curlScreenShot(); + device.curlButton("both", "Confirm message"); //!!!!!! + const response15 = await promise15; + assert.equal(response15.toString("hex"), "9000"); + + //SHOW DATA 14-uint64, 01-no validation, 0000000000000000-min, 0000000000000000-max, 05-policy, Key = "Number" (064e756d626572) + const buffer16 = getAPDUDataBuffer("14010000000000000000000000000000000005064e756d626572", "0200000000000000"); + const promise16 = transport.send(215, 0x20, 0x04, 0, buffer16); + await device.curlScreenShot(); + device.curlButton("both", "Confirm message"); //!!!!!! + const response16 = await promise16; + assert.equal(response16.toString("hex"), "9000"); + + //This is to test do not show policy + //SHOW DATA 14-uint64, 01-no validation, 0000000000000000-min, 0000000000000000-max, 02-policy, Key = "Number" (064e756d626572) + const buffer17 = getAPDUDataBuffer("14010000000000000000000000000000000002064e756d626572", "0300000000000000"); + const promise17 = transport.send(215, 0x20, 0x04, 0, buffer17); + const response17 = await promise17; + assert.equal(response17.toString("hex"), "9000"); + + //Finish + const buffer19 = getAPDUDataBuffer("", ""); + const promise19 = transport.send(215, 0x20, 0x10, 0, buffer19); + await device.curlScreenShot(); + await device.curlButtonAndScreenshot("both", "Confirm sign with"); + await device.curlButtonAndScreenshot("right", "Confirm sign with"); + const response19 = await promise19; + + //The signed message should contain chainId + 0102030405 + const msg1 = Buffer.from("b20901380af44ef59c5918439a1f9a41d83669020319a80574b804a5f95cbd7e" + + "0011223344556677" + + "4e69636520616e64206c6f6e67206c6f6e67206c6f6e67206c6f6e6720737472696e67" + + "0000980ad20ca85b" + + "0100000000000000" + + "0200000000000000" + + "0300000000000000" + , "hex"); + const hash1 = crypto.createHash('sha256').update(msg1).digest('hex') + const ledgerSignature1 = Signature.fromHex(response19.slice(0, 65)); + assert.equal(response19.slice(65,65+32).toString("hex"), hash1); + assert.equal(response19.slice(65+32,65+32+4).toString("hex"), "9000"); + assert.equal(ledgerSignature1.verify(msg1, publicKey), true); +} +//------------------------------------------------------------------------------------- +testStep(" - - -", "Unknown data type leads to failure"); +{ + //INIT chainId=b20901380af44ef59c5918439a1f9a41d83669020319a80574b804a5f95cbd7e + const buffer11 = getAPDUDataBuffer("", "b20901380af44ef59c5918439a1f9a41d83669020319a80574b804a5f95cbd7e052c000080eb000080000000800000000000000000"); + const promise11 = transport.send(215, 0x20, 0x01, 0, buffer11); + await device.curlScreenShot(); + device.curlButton("both", "Confirm chain"); //!!!!!! + const response11 = await promise11; + assert.equal(response11.toString("hex"), "9000"); + + //SHOW DATA 00-unknown, 02-validate length, 0000000000000000-min, 0800000000000000-max, 05-policy, Key = "HexString" (09486578537472696e67) + const buffer12 = getAPDUDataBuffer("0002000000000000000008000000000000000509486578537472696e67", "0011223344556677"); + const promise12 = transport.send(215, 0x20, 0x04, 0, buffer12); + await assert.rejects(promise12, err(0x6e07)); + + await device.makeStartingScreenshot(); +} +//------------------------------------------------------------------------------------- +testStep(" - - -", "Buffer does not pass length validation"); +{ + //INIT chainId=b20901380af44ef59c5918439a1f9a41d83669020319a80574b804a5f95cbd7e + const buffer11 = getAPDUDataBuffer("", "b20901380af44ef59c5918439a1f9a41d83669020319a80574b804a5f95cbd7e052c000080eb000080000000800000000000000000"); + const promise11 = transport.send(215, 0x20, 0x01, 0, buffer11); + await device.curlScreenShot(); + device.curlButton("both", "Confirm chain"); //!!!!!! + const response11 = await promise11; + assert.equal(response11.toString("hex"), "9000"); + + //SHOW DATA 01-hexstring, 02-validate length, 0000000000000000-min, 0800000000000000-max, 05-policy, Key = "HexString" (09486578537472696e67) + const buffer12 = getAPDUDataBuffer("0102000000000000000008000000000000000509486578537472696e67", "001122334455667788"); + const promise12 = transport.send(215, 0x20, 0x04, 0, buffer12); + await assert.rejects(promise12, err(0x6e07)); + + await device.makeStartingScreenshot(); +} +//------------------------------------------------------------------------------------- +testStep(" - - -", "Key length does not match"); +{ + //INIT chainId=b20901380af44ef59c5918439a1f9a41d83669020319a80574b804a5f95cbd7e + const buffer11 = getAPDUDataBuffer("", "b20901380af44ef59c5918439a1f9a41d83669020319a80574b804a5f95cbd7e052c000080eb000080000000800000000000000000"); + const promise11 = transport.send(215, 0x20, 0x01, 0, buffer11); + await device.curlScreenShot(); + device.curlButton("both", "Confirm chain"); //!!!!!! + const response11 = await promise11; + assert.equal(response11.toString("hex"), "9000"); + + //SHOW DATA 01-hexstring, 02-validate length, 0000000000000000-min, 0800000000000000-max, 05-policy, Key = "HexString" 08(09)486578537472696e67 + const buffer12 = getAPDUDataBuffer("0102000000000000000008000000000000000508486578537472696e67", "0011223344556677"); + const promise12 = transport.send(215, 0x20, 0x04, 0, buffer12); + await assert.rejects(promise12, err(0x6e07)); + + await device.makeStartingScreenshot(); +} +//------------------------------------------------------------------------------------- +testStep(" - - -", "Key contains invalid symbols"); +{ + //INIT chainId=b20901380af44ef59c5918439a1f9a41d83669020319a80574b804a5f95cbd7e + const buffer11 = getAPDUDataBuffer("", "b20901380af44ef59c5918439a1f9a41d83669020319a80574b804a5f95cbd7e052c000080eb000080000000800000000000000000"); + const promise11 = transport.send(215, 0x20, 0x01, 0, buffer11); + await device.curlScreenShot(); + device.curlButton("both", "Confirm chain"); //!!!!!! + const response11 = await promise11; + assert.equal(response11.toString("hex"), "9000"); + + //SHOW DATA 01-hexstring, 02-validate length, 0000000000000000-min, 0800000000000000-max, 05-policy, Key = "?exString" 0900(48)6578537472696e67 + const buffer12 = getAPDUDataBuffer("0102000000000000000008000000000000000509ff6578537472696e67", "0011223344556677"); + const promise12 = transport.send(215, 0x20, 0x04, 0, buffer12); + await assert.rejects(promise12, err(0x6e07)); + + await device.makeStartingScreenshot(); +} +//------------------------------------------------------------------------------------- +testStep(" - - -", "Key too long"); +{ + //INIT chainId=b20901380af44ef59c5918439a1f9a41d83669020319a80574b804a5f95cbd7e + const buffer11 = getAPDUDataBuffer("", "b20901380af44ef59c5918439a1f9a41d83669020319a80574b804a5f95cbd7e052c000080eb000080000000800000000000000000"); + const promise11 = transport.send(215, 0x20, 0x01, 0, buffer11); + await device.curlScreenShot(); + device.curlButton("both", "Confirm chain"); //!!!!!! + const response11 = await promise11; + assert.equal(response11.toString("hex"), "9000"); + + //SHOW DATA 01-hexstring, 02-validate length, 0000000000000000-min, 0800000000000000-max, 05-policy, Key = "01234567890123456789" + const buffer12 = getAPDUDataBuffer("01020000000000000000080000000000000005143031323334353637383930313233343536373839", "0011223344556677"); + const promise12 = transport.send(215, 0x20, 0x04, 0, buffer12); + await assert.rejects(promise12, err(0x6e07)); + + await device.makeStartingScreenshot(); +} +//------------------------------------------------------------------------------------- +testStep(" - - -", "String value contains non readable characters"); +{ + //INIT chainId=b20901380af44ef59c5918439a1f9a41d83669020319a80574b804a5f95cbd7e + const buffer11 = getAPDUDataBuffer("", "b20901380af44ef59c5918439a1f9a41d83669020319a80574b804a5f95cbd7e052c000080eb000080000000800000000000000000"); + const promise11 = transport.send(215, 0x20, 0x01, 0, buffer11); + await device.curlScreenShot(); + device.curlButton("both", "Confirm chain"); //!!!!!! + const response11 = await promise11; + assert.equal(response11.toString("hex"), "9000"); + + //SHOW DATA 02-string, 01-no validation, 0000000000000000-min, 0000000000000000-max, 05-policy, Key = "String" (06537472696e67) + const buffer13 = getAPDUDataBuffer("0201000000000000000000000000000000000506537472696e67", "4eff636520616e64206c6f6e67206c6f6e67206c6f6e67206c6f6e6720737472696e67"); + const promise13 = transport.send(215, 0x20, 0x04, 0, buffer13); + await assert.rejects(promise13, err(0x6e07)); + + await device.makeStartingScreenshot(); +} +//------------------------------------------------------------------------------------- +testStep(" - - -", "Name string has incorrect length"); +{ + //INIT chainId=b20901380af44ef59c5918439a1f9a41d83669020319a80574b804a5f95cbd7e + const buffer11 = getAPDUDataBuffer("", "b20901380af44ef59c5918439a1f9a41d83669020319a80574b804a5f95cbd7e052c000080eb000080000000800000000000000000"); + const promise11 = transport.send(215, 0x20, 0x01, 0, buffer11); + await device.curlScreenShot(); + device.curlButton("both", "Confirm chain"); //!!!!!! + const response11 = await promise11; + assert.equal(response11.toString("hex"), "9000"); + + //SHOW DATA 03-name, 01-no validation, 0000000000000000-min, 0000000000000000-max, 05-policy, Key = "NameString" (0a4e616d65537472696e67) Shows: "fio.token" + const buffer14 = getAPDUDataBuffer("030100000000000000000000000000000000050a4e616d65537472696e67", "00980ad20ca85b"); + const promise14 = transport.send(215, 0x20, 0x04, 0, buffer14); + await assert.rejects(promise14, err(0x6e07)); + + await device.makeStartingScreenshot(); +} +//------------------------------------------------------------------------------------- +testStep(" - - -", "Amount incorrect length"); +{ + //INIT chainId=b20901380af44ef59c5918439a1f9a41d83669020319a80574b804a5f95cbd7e + const buffer11 = getAPDUDataBuffer("", "b20901380af44ef59c5918439a1f9a41d83669020319a80574b804a5f95cbd7e052c000080eb000080000000800000000000000000"); + const promise11 = transport.send(215, 0x20, 0x01, 0, buffer11); + await device.curlScreenShot(); + device.curlButton("both", "Confirm chain"); //!!!!!! + const response11 = await promise11; + assert.equal(response11.toString("hex"), "9000"); + + //SHOW DATA 10-amount, 01-no validation, 0000000000000000-min, 0000000000000000-max, 05-policy, Key = "Amount" (06416d6f756e74) + const buffer15 = getAPDUDataBuffer("1001000000000000000000000000000000000506416d6f756e74", "010000000000000000"); + const promise15 = transport.send(215, 0x20, 0x04, 0, buffer15); + await assert.rejects(promise15, err(0x6e07)); + + await device.makeStartingScreenshot(); +} +//------------------------------------------------------------------------------------- +testStep(" - - -", "UInt64 incorrect length"); +{ + //INIT chainId=b20901380af44ef59c5918439a1f9a41d83669020319a80574b804a5f95cbd7e + const buffer11 = getAPDUDataBuffer("", "b20901380af44ef59c5918439a1f9a41d83669020319a80574b804a5f95cbd7e052c000080eb000080000000800000000000000000"); + const promise11 = transport.send(215, 0x20, 0x01, 0, buffer11); + await device.curlScreenShot(); + device.curlButton("both", "Confirm chain"); //!!!!!! + const response11 = await promise11; + assert.equal(response11.toString("hex"), "9000"); + + //SHOW DATA 14-uint64, 01-no validation, 0000000000000000-min, 0000000000000000-max, 05-policy, Key = "Number" (064e756d626572) + const buffer16 = getAPDUDataBuffer("14010000000000000000000000000000000005064e756d626572", "02000000000000"); + const promise16 = transport.send(215, 0x20, 0x04, 0, buffer16); + await assert.rejects(promise16, err(0x6e07)); + + await device.makeStartingScreenshot(); +} +//------------------------------------------------------------------------------------- +testStep(" - - -", "Policy show if not empty empty check"); +{ + //INIT chainId=b20901380af44ef59c5918439a1f9a41d83669020319a80574b804a5f95cbd7e + const buffer11 = getAPDUDataBuffer("", "b20901380af44ef59c5918439a1f9a41d83669020319a80574b804a5f95cbd7e052c000080eb000080000000800000000000000000"); + const promise11 = transport.send(215, 0x20, 0x01, 0, buffer11); + await device.curlScreenShot(); + device.curlButton("both", "Confirm chain"); //!!!!!! + const response11 = await promise11; + assert.equal(response11.toString("hex"), "9000"); + + //SHOW DATA 02-string, 01-no validation, 0000000000000000-min, 0000000000000000-max, 06-policy, Key = "String" (06537472696e67) + const buffer16 = getAPDUDataBuffer("0201000000000000000000000000000000000606537472696e67", ""); + const promise16 = transport.send(215, 0x20, 0x04, 0, buffer16); + const response16 = await promise16; + assert.equal(response16.toString("hex"), "9000"); + + //SHOW DATA 02-string, 01-no validation, 0000000000000000-min, 0000000000000000-max, 06-policy, Key = "String" (06537472696e67) + const buffer17 = getAPDUDataBuffer("0201000000000000000000000000000000000606537472696e67", "53"); + const promise17 = transport.send(215, 0x20, 0x04, 0, buffer17); + await device.curlScreenShot(); + device.curlButton("both", "Comfirm String"); + const response17 = await promise17; + assert.equal(response17.toString("hex"), "9000"); + + //SHOW DATA 02-string, 01-no validation, 0000000000000000-min, 0000000000000000-max, 06-policy, Key = "String" (06537472696e67) + const buffer18 = getAPDUDataBuffer("0201000000000000000000000000000000000606537472696e67", "ff"); + const promise18 = transport.send(215, 0x20, 0x04, 0, buffer18); + await assert.rejects(promise18, err(0x6e07)); + + await device.makeStartingScreenshot(); +} +//------------------------------------------------------------------------------------- + + +await transport.close(); +testEnd(scriptName); +process.stdin.pause(); \ No newline at end of file diff --git a/test-integration/signTransactionCommandsStorage.js b/test-integration/signTransactionCommandsStorage.js new file mode 100644 index 00000000..57318324 --- /dev/null +++ b/test-integration/signTransactionCommandsStorage.js @@ -0,0 +1,169 @@ +import { testStart, testStep, testEnd, getScriptName, getSpeculosDefaultConf, getAPDUDataBuffer } from "./speculos-common.js" +import { getTransport } from "./speculos-transport.js" +import { getButtonsAndSnapshots } from "./speculos-buttons-and-snapshots.js" +import { fileURLToPath } from 'url'; +import assert from 'assert/strict'; +import PublicKey from '@fioprotocol/fiojs/dist/ecc/key_public.js'; +import crypto from "crypto" +import Signature from '@fioprotocol/fiojs/dist/ecc/signature.js'; + +const scriptName = getScriptName(fileURLToPath(import.meta.url)); +testStart(scriptName); + +const speculosConf = getSpeculosDefaultConf(); +const transport = await getTransport(speculosConf); +const device = getButtonsAndSnapshots(scriptName, speculosConf); + +//We will use 44'/235'/0'/0/0 in this test +const publicKeyHex = "04a9a222bc3b1a5a58ada17d10069b3961ebd0f917d4b2106031a061915ca9cc24a06941e0a4c0d5e266850ff980ad349ab8b027c93bf4aead1984168ad43e30ab"; +const publicKey = PublicKey(Buffer.from(publicKeyHex,"hex")) + +//this validates errors: +function err(errno) { + return (err) => { + assert.strictEqual(err.name, 'TransportStatusError'); + assert.strictEqual(err.statusCode, errno); + return true; + } +} + +await device.makeStartingScreenshot(); + +console.log("This test requires app in DEVEL mode.") + +//This test is not completely standardized +//!!!!!! - indicates places where test may reasonably break as Speculos sometimes does not react to every buttonpress. + +//------------------------------------------------------------------------------------- +testStep(" - - -", "Sign transaction using storage"); +{ + //INIT chainId=b20901380af44ef59c5918439a1f9a41d83669020319a80574b804a5f95cbd7e path=44'/235'/0'/0/0 + const buffer11 = getAPDUDataBuffer("", "b20901380af44ef59c5918439a1f9a41d83669020319a80574b804a5f95cbd7e052c000080eb000080000000800000000000000000"); + console.log(buffer11.toString("hex")) + const promise11 = transport.send(215, 0x20, 0x01, 0, buffer11); + await device.curlScreenShot(); + device.curlButton("both", "Confirm chain"); //!!!!!! + const response11 = await promise11; + assert.equal(response11.toString("hex"), "9000"); + + //Store data to register1 + const buffer12 = getAPDUDataBuffer("", "001122334455"); + const promise12 = transport.send(215, 0x20, 0x07, 0x01, buffer12); + const response12 = await promise12; + assert.equal(response12.toString("hex"), "9000"); + + //Store data to register3 + const buffer13 = getAPDUDataBuffer("", "00112233445566778899aa"); + const promise13 = transport.send(215, 0x20, 0x07, 0x03, buffer13); + const response13 = await promise13; + assert.equal(response13.toString("hex"), "9000"); + + //SHOW DATA 01-hexstring, 01-no validation, 0000000000000000-min, 0000000000000000-max, 15-policy, Key = "HexString" (09486578537472696e67) + const buffer14 = getAPDUDataBuffer("0101000000000000000000000000000000001509486578537472696e67", "001122334455"); + const promise14 = transport.send(215, 0x20, 0x04, 0, buffer14); + await device.curlScreenShot(); + device.curlButton("both", "Confirm message"); //!!!!!! + const response14 = await promise14; + assert.equal(response14.toString("hex"), "9000"); + + //SHOW DATA 02-hexstring, 01-no validation, 0000000000000000-min, 0000000000000000-max, 35-policy, Key = "HexString" (09486578537472696e67) + const buffer15 = getAPDUDataBuffer("0101000000000000000000000000000000003509486578537472696e67", "00112233445566778899aa"); + const promise15 = transport.send(215, 0x20, 0x04, 0, buffer15); + await device.curlScreenShot(); + device.curlButton("both", "Confirm message"); //!!!!!! + const response15 = await promise15; + assert.equal(response15.toString("hex"), "9000"); + + //Finish + const buffer19 = getAPDUDataBuffer("", ""); + const promise19 = transport.send(215, 0x20, 0x10, 0, buffer19); + await device.curlScreenShot(); + await device.curlButtonAndScreenshot("both", "Confirm sign with"); + await device.curlButtonAndScreenshot("right", "Confirm sign with"); + const response19 = await promise19; + + //The signed message should contain chainId + 0102030405 + const msg1 = Buffer.from("b20901380af44ef59c5918439a1f9a41d83669020319a80574b804a5f95cbd7e" + +"001122334455" + +"00112233445566778899aa", "hex"); + const hash1 = crypto.createHash('sha256').update(msg1).digest('hex') + const ledgerSignature1 = Signature.fromHex(response19.slice(0, 65)); + assert.equal(response19.slice(65,65+32).toString("hex"), hash1); + assert.equal(response19.slice(65+32,65+32+4).toString("hex"), "9000"); + assert.equal(ledgerSignature1.verify(msg1, publicKey), true); +} +//------------------------------------------------------------------------------------- +testStep(" - - -", "Storing too long data"); +{ + //INIT chainId=b20901380af44ef59c5918439a1f9a41d83669020319a80574b804a5f95cbd7e path=44'/235'/0'/0/0 + const buffer11 = getAPDUDataBuffer("", "b20901380af44ef59c5918439a1f9a41d83669020319a80574b804a5f95cbd7e052c000080eb000080000000800000000000000000"); + console.log(buffer11.toString("hex")) + const promise11 = transport.send(215, 0x20, 0x01, 0, buffer11); + await device.curlScreenShot(); + device.curlButton("both", "Confirm chain"); //!!!!!! + const response11 = await promise11; + assert.equal(response11.toString("hex"), "9000"); + + //Store data to register1 + const buffer12 = getAPDUDataBuffer("", "00112233445566778899"); + const promise12 = transport.send(215, 0x20, 0x07, 0x01, buffer12); + await assert.rejects(promise12, err(0x6e07)); + + await device.makeStartingScreenshot(); +} +//------------------------------------------------------------------------------------- +testStep(" - - -", "Data do not match"); +{ + //INIT chainId=b20901380af44ef59c5918439a1f9a41d83669020319a80574b804a5f95cbd7e path=44'/235'/0'/0/0 + const buffer11 = getAPDUDataBuffer("", "b20901380af44ef59c5918439a1f9a41d83669020319a80574b804a5f95cbd7e052c000080eb000080000000800000000000000000"); + console.log(buffer11.toString("hex")) + const promise11 = transport.send(215, 0x20, 0x01, 0, buffer11); + await device.curlScreenShot(); + device.curlButton("both", "Confirm chain"); //!!!!!! + const response11 = await promise11; + assert.equal(response11.toString("hex"), "9000"); + + //Store data to register1 + const buffer12 = getAPDUDataBuffer("", "001122334455"); + const promise12 = transport.send(215, 0x20, 0x07, 0x01, buffer12); + const response12 = await promise12; + assert.equal(response12.toString("hex"), "9000"); + + //SHOW DATA 01-hexstring, 01-no validation, 0000000000000000-min, 0000000000000000-max, 15-policy, Key = "HexString" (09486578537472696e67) + const buffer14 = getAPDUDataBuffer("0101000000000000000000000000000000001509486578537472696e67", "001122334456"); + const promise14 = transport.send(215, 0x20, 0x04, 0, buffer14); + await assert.rejects(promise14, err(0x6e07)); + + await device.makeStartingScreenshot(); +} +//------------------------------------------------------------------------------------- +testStep(" - - -", "Data do not match using name conversion"); +{ + //INIT chainId=b20901380af44ef59c5918439a1f9a41d83669020319a80574b804a5f95cbd7e path=44'/235'/0'/0/0 + const buffer11 = getAPDUDataBuffer("", "b20901380af44ef59c5918439a1f9a41d83669020319a80574b804a5f95cbd7e052c000080eb000080000000800000000000000000"); + console.log(buffer11.toString("hex")) + const promise11 = transport.send(215, 0x20, 0x01, 0, buffer11); + await device.curlScreenShot(); + device.curlButton("both", "Confirm chain"); //!!!!!! + const response11 = await promise11; + assert.equal(response11.toString("hex"), "9000"); + + //Store data to register1 + const buffer12 = getAPDUDataBuffer("", "0011223344556677"); + const promise12 = transport.send(215, 0x20, 0x07, 0x01, buffer12); + const response12 = await promise12; + assert.equal(response12.toString("hex"), "9000"); + + //SHOW DATA 02-string, 01-no validation, 0000000000000000-min, 0000000000000000-max, 45-policy, Key = "HexString" (09486578537472696e67) + const buffer14 = getAPDUDataBuffer("0201000000000000000000000000000000004509486578537472696e67", "0011223344556677"); + const promise14 = transport.send(215, 0x20, 0x04, 0, buffer14); + await assert.rejects(promise14, err(0x6e07)); + + await device.makeStartingScreenshot(); +} + + +await transport.close(); +testEnd(scriptName); +process.stdin.pause(); + diff --git a/test-integration/signTransactionNewfundsreq.js b/test-integration/signTransactionNewfundsreq.js new file mode 100644 index 00000000..8e413b98 --- /dev/null +++ b/test-integration/signTransactionNewfundsreq.js @@ -0,0 +1,287 @@ +import { testStart, testStep, testEnd, getScriptName, getSpeculosDefaultConf } from "./speculos-common.js" +import { getTransport } from "./speculos-transport.js" +import { getButtonsAndSnapshots } from "./speculos-buttons-and-snapshots.js" +import { Fio, DeviceStatusError, HARDENED } from "ledgerjs-hw-app-fio" +import { fileURLToPath } from 'url'; +import assert from 'assert/strict'; +import fetch from "node-fetch" +import crypto from "crypto" + +import textenc from "text-encoding" +const TextEncoder = textenc.TextEncoder; +const TextDecoder = textenc.TextDecoder; + +import fiojs from '@fioprotocol/fiojs' +const ser = fiojs.Serialize; +const Ecc = fiojs.Ecc +const PrivateKey = Ecc.PrivateKey; +const PublicKey = Ecc.PublicKey; +const Signature = Ecc.Signature; +const arrayToHex = fiojs.Numeric.arrayToHex; +import { createSharedCipher } from "@fioprotocol/fiojs/dist/encryption-fio.js"; +import { checkDecrypt } from "@fioprotocol/fiojs/dist/encryption-check.js"; + +//import {base64ToBinary, arrayToHex} from "@fioprotocol/fiojs/dist/chain-numeric" + + + +// We initialize chain constantsconstants +const textDecoder = new TextDecoder() +const textEncoder = new TextEncoder() + +const httpEndpointTestnet = 'http://testnet.fioprotocol.io' +const httpEndpointMainnet = 'https://fio.greymass.com' + +const infoTestnet = await (await fetch(httpEndpointTestnet + '/v1/chain/get_info')).json() +const infoMainnet = await (await fetch(httpEndpointMainnet + '/v1/chain/get_info')).json() + +const abiFioAddressTestnet = await (await fetch(httpEndpointTestnet + '/v1/chain/get_abi', { + body: `{"account_name": "fio.token"}`, + method: 'POST', +})).json() +const abiMsigTestnet = await (await fetch(httpEndpointTestnet + '/v1/chain/get_abi', { + body: `{"account_name": "eosio.msig"}`, + method: 'POST', +})).json() +const abiFioAddressMainnet = await (await fetch(httpEndpointMainnet + '/v1/chain/get_abi', { + body: `{"account_name": "fio.token"}`, + method: 'POST', +})).json() +const abiMsigMainnet = await (await fetch(httpEndpointMainnet + '/v1/chain/get_abi', { + body: `{"account_name": "eosio.msig"}`, + method: 'POST', +})).json() +const abiReqobtMainnet = await (await fetch(httpEndpointMainnet + '/v1/chain/get_abi', { + body: `{"account_name": "fio.reqobt"}`, + method: 'POST', +})).json() +const abiReqobtTestnet = await (await fetch(httpEndpointTestnet + '/v1/chain/get_abi', { + body: `{"account_name": "fio.reqobt"}`, + method: 'POST', +})).json() + +// Get a Map of all the types from fio.address +const typesFioAddressTestnet = ser.getTypesFromAbi(ser.createInitialTypes(), abiFioAddressTestnet.abi) +const typesTransactionTestnet = ser.getTypesFromAbi(ser.createInitialTypes(), abiMsigTestnet.abi) +const typesFioAddressMainnet = ser.getTypesFromAbi(ser.createInitialTypes(), abiFioAddressMainnet.abi) +const typesTransactionMainnet = ser.getTypesFromAbi(ser.createInitialTypes(), abiMsigMainnet.abi) +const typesTransaction2Mainnet = ser.getTypesFromAbi(ser.createInitialTypes(), abiReqobtMainnet.abi) +const typesTransaction2Testnet = ser.getTypesFromAbi(ser.createInitialTypes(), abiReqobtTestnet.abi) + +const networkInfo = { + "TESTNET": { + chainId: infoTestnet.chain_id, + typesFioAddress: typesFioAddressTestnet, + typesTransaction: typesTransactionTestnet, + typesTransaction2: typesTransaction2Testnet, + }, + "MAINNET": { + chainId: infoMainnet.chain_id, + typesFioAddress: typesFioAddressMainnet, + typesTransaction: typesTransactionMainnet, + typesTransaction2: typesTransaction2Mainnet, + }, +} + +const path = [44 + HARDENED, 235 + HARDENED, 0 + HARDENED, 0, 0] +const privateKeyDHex = "4d597899db76e87933e7c6841c2d661810f070bad20487ef20eb84e182695a3a" +const privateKey = PrivateKey(Buffer.from(privateKeyDHex, "hex")) +const publicKey = privateKey.toPublic() + +const otherPath = [44 + HARDENED, 235 + HARDENED, 0 + HARDENED, 0, 1] +const otherPrivateKeyDHex = "90835ae980cd10e9ca7df05d0e3b3c22e0aed0e75527511337f7c53a9d0c6c69" +const otherPrivateKey = PrivateKey(Buffer.from(otherPrivateKeyDHex,"hex")) +const otherPublicKey = otherPrivateKey.toPublic() + + +//------------------- TWO TRANSACTIONS ------------------------------------------------ + +const txMemo = { + expiration: "2021-08-28T12:50:36.686", + ref_block_num: 0x1122, + ref_block_prefix: 0x33445566, + context_free_actions: [], + actions: [{ + account: "fio.reqobt", + name: "newfundsreq", + authorization: [{ + actor: "aftyershcu22", + permission: "active", + }], + data: { + payer_fio_address: "My payer address", + payee_fio_address: "My payee address", + max_fee: 0x11223344, + tpid: "rewards@wallet", + actor: "aftyershcu22", + + other_public_key: otherPublicKey.toUncompressed().toBuffer().toString("hex"), + payee_public_address: "My payee public address", + amount: "amount 1000", + chain_code: "BTC", + token_code: "BTC", + memo: "I have memo", + }, + }], +} + +const txHash = { + expiration: "2021-08-28T12:50:36.686", + ref_block_num: 0x1122, + ref_block_prefix: 0x33445566, + context_free_actions: [], + actions: [{ + account: "fio.reqobt", + name: "newfundsreq", + authorization: [{ + actor: "aftyershcu22", + permission: "active", + }], + data: { + payer_fio_address: "My payer address", + payee_fio_address: "My payee address", + max_fee: 0x11223344, + tpid: "rewards@wallet", + actor: "aftyershcu22", + + other_public_key: otherPublicKey.toUncompressed().toBuffer().toString("hex"), + payee_public_address: "My payee public address", + amount: "amount 1000", + chain_code: "BTC", + token_code: "BTC", +// memo: "", + hash: "I have hash", + offline_url: "I have url", + }, + }], +} + +//------------------- SERIALIZE TRANSACTION ------------------------------------------------ + +async function buildTxUsingFioJs(network, tx, iv) { + const content = { + payee_public_address: tx.actions[0].data.payee_public_address, + amount: tx.actions[0].data.amount, + chain_code: tx.actions[0].data.chain_code, + token_code: tx.actions[0].data.token_code, + memo: tx.actions[0].data.memo, + hash: tx.actions[0].data.hash, + offline_url: tx.actions[0].data.offline_url, + } + + const pk = PublicKey(Buffer.from(tx.actions[0].data.other_public_key, "hex")).toString() + const sharedCipher = createSharedCipher({privateKey: privateKey.toBuffer(), publicKey: pk}) + const encryptedContent = sharedCipher.encrypt('new_funds_content', content, iv) + + const data = { + payer_fio_address: tx.actions[0].data.payer_fio_address, + payee_fio_address: tx.actions[0].data.payee_fio_address, + content: encryptedContent, + max_fee: tx.actions[0].data.max_fee, + tpid: tx.actions[0].data.tpid, + actor: tx.actions[0].data.actor, + } + + const actionAddress = networkInfo[network].typesTransaction2.get('newfundsreq') + const buffer = new ser.SerialBuffer({textEncoder, textDecoder}) + actionAddress.serialize(buffer, data) + const serializedData = arrayToHex(buffer.asUint8Array()) + + let serializedAction = tx.actions[0] + serializedAction = { + ...serializedAction, + data: serializedData, + } + + const rawTransaction = { + ...tx, + max_net_usage_words: 0x00, + max_cpu_usage_ms: 0x00, + delay_sec: 0x00, + context_free_actions: [], + actions: [serializedAction], //Actions have to be an array + transaction_extensions: [], + } + + const txTransaction = networkInfo[network].typesTransaction.get('transaction') + const buffer2 = new ser.SerialBuffer({textEncoder, textDecoder}) + txTransaction.serialize(buffer2, rawTransaction) + const serializedTransaction = buffer2.asUint8Array() + + return {tx: Buffer.from(serializedTransaction), enc: encryptedContent} +} + + +//---------------------------TESTS--------------------------------------------------------- + +const scriptName = getScriptName(fileURLToPath(import.meta.url)); +testStart(scriptName); + +const speculosConf = getSpeculosDefaultConf(); +const transport = await getTransport(speculosConf); +const app = new Fio(transport); +const device = getButtonsAndSnapshots(scriptName, speculosConf); + +await device.makeStartingScreenshot(); + +async function runTxTest(network, tx, review1, review2) { + // Lets sign the transaction with ledger + const chainId = networkInfo[network].chainId + const ledgerPromise = app.signTransaction({path, chainId, tx}) + await device.review2(review1, review2, "Review sign"); + const ledgerResponse = await ledgerPromise; + console.log(ledgerResponse) + + const iv = Buffer.from(ledgerResponse.dhEncryptedData, "base64").slice(0, 16) + + const pair = await buildTxUsingFioJs(network, tx, iv) + const serTx = pair.tx + const encContent = pair.enc + console.log("Serialized tx + encoded conent:") + console.log(serTx.toString("hex")) + console.log(encContent) + + const pk = PublicKey(Buffer.from(tx.actions[0].data.other_public_key, "hex")).toString() + const sharedCipher = createSharedCipher({privateKey: privateKey.toBuffer(), publicKey: pk}) + const plaintextFio = checkDecrypt(sharedCipher.sharedSecret, Buffer.from(encContent, "base64")) + const plaintextLedger = checkDecrypt(sharedCipher.sharedSecret, Buffer.from(ledgerResponse.dhEncryptedData, "base64")) + console.log(Buffer.from(plaintextFio).toString("hex")) + console.log(Buffer.from(plaintextLedger).toString("hex")) + assert.equal(Buffer.from(plaintextFio).toString("hex"), Buffer.from(plaintextLedger).toString("hex")) + + const fullMsg = Buffer.concat([Buffer.from(networkInfo[network].chainId, "hex"), serTx, Buffer.allocUnsafe(32).fill(0)]) + console.log(fullMsg.toString("hex")) + const hash = crypto.createHash('sha256').update(fullMsg).digest('hex') + assert.equal(ledgerResponse.txHashHex, hash); + + const signatureLedger = Signature.fromHex(ledgerResponse.witness.witnessSignatureHex) + assert.equal(signatureLedger.verify(fullMsg, publicKey), true); + assert.equal(signatureLedger.verify(fullMsg, otherPublicKey), false); +} + +const longSequence = [1, 1, 1, 1, 1, 1, 1, 1, 1]; +const secondSequence = [1, 2] + +testStep(" - - -", "Sign testnet transaction - memo"); +{ + await runTxTest("TESTNET", txMemo, longSequence, secondSequence) +} + +testStep(" - - -", "Sign testnet mainnet - memo"); +{ + await runTxTest("MAINNET", txMemo, longSequence, secondSequence) +} + +testStep(" - - -", "Sign testnet transaction - hash"); +{ + await runTxTest("TESTNET", txHash, longSequence, secondSequence) +} + +testStep(" - - -", "Sign testnet mainnet - hash"); +{ + await runTxTest("MAINNET", txHash, longSequence, secondSequence) +} + +await transport.close() +testEnd(scriptName); +process.stdin.pause(); \ No newline at end of file diff --git a/test-integration/signTransactionOtherEosio.js b/test-integration/signTransactionOtherEosio.js new file mode 100644 index 00000000..318284f5 --- /dev/null +++ b/test-integration/signTransactionOtherEosio.js @@ -0,0 +1,299 @@ +import { testStart, testStep, testEnd, getScriptName, getSpeculosDefaultConf } from "./speculos-common.js" +import { getTransport } from "./speculos-transport.js" +import { getButtonsAndSnapshots } from "./speculos-buttons-and-snapshots.js" +import { Fio, DeviceStatusError, HARDENED } from "ledgerjs-hw-app-fio" +import { fileURLToPath } from 'url'; +import assert from 'assert/strict'; +import fetch from "node-fetch" +import crypto from "crypto" + +import textenc from "text-encoding" +const TextEncoder = textenc.TextEncoder; +const TextDecoder = textenc.TextDecoder; + +import fiojs from '@fioprotocol/fiojs' +const ser = fiojs.Serialize; +const Ecc = fiojs.Ecc +const PrivateKey = Ecc.PrivateKey; +const Signature = Ecc.Signature; +const arrayToHex = fiojs.Numeric.arrayToHex; +import { JsSignatureProvider } from "@fioprotocol/fiojs/dist/chain-jssig.js" + +//import {base64ToBinary, arrayToHex} from "@fioprotocol/fiojs/dist/chain-numeric" + + + +// We initialize chain constantsconstants +const textDecoder = new TextDecoder() +const textEncoder = new TextEncoder() + +const httpEndpointTestnet = 'http://testnet.fioprotocol.io' +const httpEndpointMainnet = 'https://fio.greymass.com' + +const infoTestnet = await (await fetch(httpEndpointTestnet + '/v1/chain/get_info')).json() +const infoMainnet = await (await fetch(httpEndpointMainnet + '/v1/chain/get_info')).json() + +const abiFioAddressTestnet = await (await fetch(httpEndpointTestnet + '/v1/chain/get_abi', { + body: `{"account_name": "fio.token"}`, + method: 'POST', +})).json() +const abiMsigTestnet = await (await fetch(httpEndpointTestnet + '/v1/chain/get_abi', { + body: `{"account_name": "eosio.msig"}`, + method: 'POST', +})).json() +const abiFioAddressMainnet = await (await fetch(httpEndpointMainnet + '/v1/chain/get_abi', { + body: `{"account_name": "fio.token"}`, + method: 'POST', +})).json() +const abiMsigMainnet = await (await fetch(httpEndpointMainnet + '/v1/chain/get_abi', { + body: `{"account_name": "eosio.msig"}`, + method: 'POST', +})).json() +const abiAddressMainnet = await (await fetch(httpEndpointMainnet + '/v1/chain/get_abi', { + body: `{"account_name": "eosio"}`, + method: 'POST', +})).json() +const abiAddressTestnet = await (await fetch(httpEndpointTestnet + '/v1/chain/get_abi', { + body: `{"account_name": "eosio"}`, + method: 'POST', +})).json() + +// Get a Map of all the types from fio.address +const typesFioAddressTestnet = ser.getTypesFromAbi(ser.createInitialTypes(), abiFioAddressTestnet.abi) +const typesTransactionTestnet = ser.getTypesFromAbi(ser.createInitialTypes(), abiMsigTestnet.abi) +const typesFioAddressMainnet = ser.getTypesFromAbi(ser.createInitialTypes(), abiFioAddressMainnet.abi) +const typesTransactionMainnet = ser.getTypesFromAbi(ser.createInitialTypes(), abiMsigMainnet.abi) +const typesTransaction2Mainnet = ser.getTypesFromAbi(ser.createInitialTypes(), abiAddressMainnet.abi) +const typesTransaction2Testnet = ser.getTypesFromAbi(ser.createInitialTypes(), abiAddressTestnet.abi) + +const networkInfo = { + "TESTNET": { + chainId: infoTestnet.chain_id, + typesFioAddress: typesFioAddressTestnet, + typesTransaction: typesTransactionTestnet, + typesTransaction2: typesTransaction2Testnet, + }, + "MAINNET": { + chainId: infoMainnet.chain_id, + typesFioAddress: typesFioAddressMainnet, + typesTransaction: typesTransactionMainnet, + typesTransaction2: typesTransaction2Mainnet, + }, +} + + + + +// Serializes and signs transaction using fiojs +async function buildTxAndSignatureFioJs(network, tx, txtype, pubkey) { + // We serialize the transaction + // Get the action type + const actionType = networkInfo[network].typesTransaction2.get(txtype) + + // Serialize the actions[] "data" field (This example assumes a single action, though transactions may hold an array of actions.) + const buffer = new ser.SerialBuffer({textEncoder, textDecoder}) + actionType.serialize(buffer, tx.actions[0].data) + const serializedData = arrayToHex(buffer.asUint8Array()) + + // Get the actions parameter from the transaction and replace the data field with the serialized data field + let serializedAction = tx.actions[0] + serializedAction = { + ...serializedAction, + data: serializedData, + } + + const rawTransaction = { + ...tx, + max_net_usage_words: 0x00, + max_cpu_usage_ms: 0x00, + delay_sec: 0x00, + context_free_actions: [], + actions: [serializedAction], //Actions have to be an array + transaction_extensions: [], + } + + // Get the transaction action type + const txnaction = networkInfo[network].typesTransaction.get('transaction') + + // Serialize the transaction + const buffer2 = new ser.SerialBuffer({textEncoder, textDecoder}) + txnaction.serialize(buffer2, rawTransaction) + const serializedTransaction = buffer2.asUint8Array() + + + + //Lets compute hash in using Signature.sign + const msg = Buffer.concat([Buffer.from(networkInfo[network].chainId, "hex"), serializedTransaction, Buffer.allocUnsafe(32).fill(0)]) + const hash = crypto.createHash('sha256').update(msg).digest('hex') + + + + //Now using signatureProvider.sign + const signatureProvider = new JsSignatureProvider([ + PrivateKey.fromHex(privateKeyDHex).toString(), + PrivateKey.fromHex(otherPrivateKeyDHex).toString() + ]); + const requiredKeys = [pubkey.toString()] + const serializedContextFreeData = null + + const signedTxn = await signatureProvider.sign({ + chainId: networkInfo[network].chainId, + requiredKeys: requiredKeys, + serializedTransaction: serializedTransaction, + serializedContextFreeData: serializedContextFreeData, + }) + + return { + serializedTx: serializedTransaction, + fullMsg: msg, + hash: crypto.createHash('sha256').update(msg).digest('hex'), + signature: signedTxn.signatures[0], + } +} + + +const path = [44 + HARDENED, 235 + HARDENED, 0 + HARDENED, 0, 0] +const privateKeyDHex = "4d597899db76e87933e7c6841c2d661810f070bad20487ef20eb84e182695a3a" +const privateKey = PrivateKey(Buffer.from(privateKeyDHex, "hex")) +//const privateKey = PrivateKey(hex_to_buf(privateKeyDHex)) +const publicKey = privateKey.toPublic() + +const otherPath = [44 + HARDENED, 235 + HARDENED, 0 + HARDENED, 0, 1] +const otherPrivateKeyDHex = "90835ae980cd10e9ca7df05d0e3b3c22e0aed0e75527511337f7c53a9d0c6c69" +//const otherPrivateKey = PrivateKey(hex_to_buf(otherPrivateKeyDHex)) +const otherPrivateKey = PrivateKey(Buffer.from(otherPrivateKeyDHex,"hex")) +const otherPublicKey = otherPrivateKey.toPublic() + +const basicTx = { + expiration: "2021-08-28T12:50:36.686", + ref_block_num: 0x1122, + ref_block_prefix: 0x33445566, + context_free_actions: [], + transaction_extensions: [], +} + +const scriptName = getScriptName(fileURLToPath(import.meta.url)); +testStart(scriptName); + +const speculosConf = getSpeculosDefaultConf(); +const transport = await getTransport(speculosConf); +const app = new Fio(transport); +const device = getButtonsAndSnapshots(scriptName, speculosConf); + +await device.makeStartingScreenshot(); + + +async function test(i) { + testStep(" - - -", "Sign testnet transaction - voteproducer "+ i +" producers"); + { + const network = "TESTNET" + const tx = { + ...basicTx, + actions: [{ + account: "eosio", + name: "voteproducer", + authorization: [{ + actor: "aftyershcu22", + permission: "active", + }], + data: { + producers: [...Array(i).keys()].map(k => "Pr. " + (k+1)), + fio_address: "FIO8PRe4WRZJj5mkem6qVGKyvNFgPsNnjNN6kPhh6EaCpzCVin5Jj", + max_fee: 0x11223344, + actor: "aftyershcu22", + }, + }], + + } + // Lets sign the transaction with fiojs + const {serializedTx, fullMsg, hash, signature} = await buildTxAndSignatureFioJs(network, tx, tx.actions[0].name, publicKey) + console.log("Full message:") + console.log(fullMsg.toString("hex")); + + // Lets sign the transaction with ledger + const chainId = networkInfo[network].chainId + const ledgerPromise = app.signTransaction({path, chainId, tx}) + await device.review([1, 1, ...[...Array(i)].map(k => 1), 2, 1, 2], "Review sign"); + const ledgerResponse = await ledgerPromise; + const signatureLedger = Signature.fromHex(ledgerResponse.witness.witnessSignatureHex) + + assert.equal(ledgerResponse.txHashHex, hash); + assert.equal(signatureLedger.verify(fullMsg, publicKey), true); + assert.equal(signatureLedger.verify(fullMsg, otherPublicKey), false); + } +} + +//We need all tests so that final integrity hashes are in the logs and we can take them all +await test(1); +await test(2); +await test(3); +await test(4); +await test(5); +await test(6); +await test(7); +await test(8); +await test(9); +await test(10); +await test(11); +await test(12); +await test(13); +await test(14); +await test(15); +await test(16); +await test(17); +await test(18); +await test(19); +await test(20); +await test(21); +await test(22); +await test(23); +await test(24); +await test(25); +await test(26); +await test(27); +await test(28); +await test(29); +await test(30); + +testStep(" - - -", "Sign mainnet transaction - voteproxy"); +{ + const network = "MAINNET" + const tx = { + ...basicTx, + actions: [{ + account: "eosio", + name: "voteproxy", + authorization: [{ + actor: "aftyershcu22", + permission: "active", + }], + data: { + proxy: "Proxy", + fio_address: "FIO8PRe4WRZJj5mkem6qVGKyvNFgPsNnjNN6kPhh6EaCpzCVin5Jj", + max_fee: 0x11223344, + actor: "aftyershcu22", + }, + }], + + } + + // Lets sign the transaction with fiojs + const {serializedTx, fullMsg, hash, signature} = await buildTxAndSignatureFioJs(network, tx, tx.actions[0].name, publicKey) + console.log("Full message:") + console.log(fullMsg.toString("hex")); + + // Lets sign the transaction with ledger + const chainId = networkInfo[network].chainId + const ledgerPromise = app.signTransaction({path, chainId, tx}) + await device.review([1, 1, 1, 2, 1, 2], "Review sign"); + const ledgerResponse = await ledgerPromise; + const signatureLedger = Signature.fromHex(ledgerResponse.witness.witnessSignatureHex) + + assert.equal(ledgerResponse.txHashHex, hash); + assert.equal(signatureLedger.verify(fullMsg, publicKey), true); + assert.equal(signatureLedger.verify(fullMsg, otherPublicKey), false); +} + +await transport.close() +testEnd(scriptName); +process.stdin.pause() \ No newline at end of file diff --git a/test-integration/signTransactionOtherFioAddress.js b/test-integration/signTransactionOtherFioAddress.js new file mode 100644 index 00000000..1f80447a --- /dev/null +++ b/test-integration/signTransactionOtherFioAddress.js @@ -0,0 +1,576 @@ +import { testStart, testStep, testEnd, getScriptName, getSpeculosDefaultConf } from "./speculos-common.js" +import { getTransport } from "./speculos-transport.js" +import { getButtonsAndSnapshots } from "./speculos-buttons-and-snapshots.js" +import { Fio, DeviceStatusError, HARDENED } from "ledgerjs-hw-app-fio" +import { fileURLToPath } from 'url'; +import assert from 'assert/strict'; +import fetch from "node-fetch" +import crypto from "crypto" + +import textenc from "text-encoding" +const TextEncoder = textenc.TextEncoder; +const TextDecoder = textenc.TextDecoder; + +import fiojs from '@fioprotocol/fiojs' +const ser = fiojs.Serialize; +const Ecc = fiojs.Ecc +const PrivateKey = Ecc.PrivateKey; +const Signature = Ecc.Signature; +const arrayToHex = fiojs.Numeric.arrayToHex; +import { JsSignatureProvider } from "@fioprotocol/fiojs/dist/chain-jssig.js" + +//import {base64ToBinary, arrayToHex} from "@fioprotocol/fiojs/dist/chain-numeric" + + + +// We initialize chain constantsconstants +const textDecoder = new TextDecoder() +const textEncoder = new TextEncoder() + +const httpEndpointTestnet = 'http://testnet.fioprotocol.io' +const httpEndpointMainnet = 'https://fio.greymass.com' + +const infoTestnet = await (await fetch(httpEndpointTestnet + '/v1/chain/get_info')).json() +const infoMainnet = await (await fetch(httpEndpointMainnet + '/v1/chain/get_info')).json() + +const abiFioAddressTestnet = await (await fetch(httpEndpointTestnet + '/v1/chain/get_abi', { + body: `{"account_name": "fio.token"}`, + method: 'POST', +})).json() +const abiMsigTestnet = await (await fetch(httpEndpointTestnet + '/v1/chain/get_abi', { + body: `{"account_name": "eosio.msig"}`, + method: 'POST', +})).json() +const abiFioAddressMainnet = await (await fetch(httpEndpointMainnet + '/v1/chain/get_abi', { + body: `{"account_name": "fio.token"}`, + method: 'POST', +})).json() +const abiMsigMainnet = await (await fetch(httpEndpointMainnet + '/v1/chain/get_abi', { + body: `{"account_name": "eosio.msig"}`, + method: 'POST', +})).json() +const abiAddressMainnet = await (await fetch(httpEndpointMainnet + '/v1/chain/get_abi', { + body: `{"account_name": "fio.address"}`, + method: 'POST', +})).json() +const abiAddressTestnet = await (await fetch(httpEndpointTestnet + '/v1/chain/get_abi', { + body: `{"account_name": "fio.address"}`, + method: 'POST', +})).json() + +// Get a Map of all the types from fio.address +const typesFioAddressTestnet = ser.getTypesFromAbi(ser.createInitialTypes(), abiFioAddressTestnet.abi) +const typesTransactionTestnet = ser.getTypesFromAbi(ser.createInitialTypes(), abiMsigTestnet.abi) +const typesFioAddressMainnet = ser.getTypesFromAbi(ser.createInitialTypes(), abiFioAddressMainnet.abi) +const typesTransactionMainnet = ser.getTypesFromAbi(ser.createInitialTypes(), abiMsigMainnet.abi) +const typesTransaction2Mainnet = ser.getTypesFromAbi(ser.createInitialTypes(), abiAddressMainnet.abi) +const typesTransaction2Testnet = ser.getTypesFromAbi(ser.createInitialTypes(), abiAddressTestnet.abi) + +const networkInfo = { + "TESTNET": { + chainId: infoTestnet.chain_id, + typesFioAddress: typesFioAddressTestnet, + typesTransaction: typesTransactionTestnet, + typesTransaction2: typesTransaction2Testnet, + }, + "MAINNET": { + chainId: infoMainnet.chain_id, + typesFioAddress: typesFioAddressMainnet, + typesTransaction: typesTransactionMainnet, + typesTransaction2: typesTransaction2Mainnet, + }, +} + + + + +// Serializes and signs transaction using fiojs +async function buildTxAndSignatureFioJs(network, tx, txtype, pubkey) { + // We serialize the transaction + // Get the action type + const actionType = networkInfo[network].typesTransaction2.get(txtype) + + // Serialize the actions[] "data" field (This example assumes a single action, though transactions may hold an array of actions.) + const buffer = new ser.SerialBuffer({textEncoder, textDecoder}) + actionType.serialize(buffer, tx.actions[0].data) + const serializedData = arrayToHex(buffer.asUint8Array()) + + // Get the actions parameter from the transaction and replace the data field with the serialized data field + let serializedAction = tx.actions[0] + serializedAction = { + ...serializedAction, + data: serializedData, + } + + const rawTransaction = { + ...tx, + max_net_usage_words: 0x00, + max_cpu_usage_ms: 0x00, + delay_sec: 0x00, + context_free_actions: [], + actions: [serializedAction], //Actions have to be an array + transaction_extensions: [], + } + + // Get the transaction action type + const txnaction = networkInfo[network].typesTransaction.get('transaction') + + // Serialize the transaction + const buffer2 = new ser.SerialBuffer({textEncoder, textDecoder}) + txnaction.serialize(buffer2, rawTransaction) + const serializedTransaction = buffer2.asUint8Array() + + + + //Lets compute hash in using Signature.sign + const msg = Buffer.concat([Buffer.from(networkInfo[network].chainId, "hex"), serializedTransaction, Buffer.allocUnsafe(32).fill(0)]) + const hash = crypto.createHash('sha256').update(msg).digest('hex') + + + + //Now using signatureProvider.sign + const signatureProvider = new JsSignatureProvider([ + PrivateKey.fromHex(privateKeyDHex).toString(), + PrivateKey.fromHex(otherPrivateKeyDHex).toString() + ]); + const requiredKeys = [pubkey.toString()] + const serializedContextFreeData = null + + const signedTxn = await signatureProvider.sign({ + chainId: networkInfo[network].chainId, + requiredKeys: requiredKeys, + serializedTransaction: serializedTransaction, + serializedContextFreeData: serializedContextFreeData, + }) + + return { + serializedTx: serializedTransaction, + fullMsg: msg, + hash: crypto.createHash('sha256').update(msg).digest('hex'), + signature: signedTxn.signatures[0], + } +} + + +const path = [44 + HARDENED, 235 + HARDENED, 0 + HARDENED, 0, 0] +const privateKeyDHex = "4d597899db76e87933e7c6841c2d661810f070bad20487ef20eb84e182695a3a" +const privateKey = PrivateKey(Buffer.from(privateKeyDHex, "hex")) +//const privateKey = PrivateKey(hex_to_buf(privateKeyDHex)) +const publicKey = privateKey.toPublic() + +const otherPath = [44 + HARDENED, 235 + HARDENED, 0 + HARDENED, 0, 1] +const otherPrivateKeyDHex = "90835ae980cd10e9ca7df05d0e3b3c22e0aed0e75527511337f7c53a9d0c6c69" +//const otherPrivateKey = PrivateKey(hex_to_buf(otherPrivateKeyDHex)) +const otherPrivateKey = PrivateKey(Buffer.from(otherPrivateKeyDHex,"hex")) +const otherPublicKey = otherPrivateKey.toPublic() + +const basicTx = { + expiration: "2021-08-28T12:50:36.686", + ref_block_num: 0x1122, + ref_block_prefix: 0x33445566, + context_free_actions: [], + transaction_extensions: [], +} + +const scriptName = getScriptName(fileURLToPath(import.meta.url)); +testStart(scriptName); + +const speculosConf = getSpeculosDefaultConf(); +const transport = await getTransport(speculosConf); +const app = new Fio(transport); +const device = getButtonsAndSnapshots(scriptName, speculosConf); + +await device.makeStartingScreenshot(); + + +testStep(" - - -", "Sign testnet transaction - remalladdr"); +{ + const network = "TESTNET" + const tx = { + ...basicTx, + actions: [{ + account: "fio.address", + name: "remalladdr", + authorization: [{ + actor: "aftyershcu22", + permission: "active", + }], + data: { + fio_address: "FIO8PRe4WRZJj5mkem6qVGKyvNFgPsNnjNN6kPhh6EaCpzCVin5Jj", + max_fee: 0x11223344, + tpid: "rewards@wallet", + actor: "aftyershcu22", + }, + }], + + } + + // Lets sign the transaction with fiojs + const {serializedTx, fullMsg, hash, signature} = await buildTxAndSignatureFioJs(network, tx, tx.actions[0].name, publicKey) + console.log("Full message:") + console.log(fullMsg.toString("hex")); + + // Lets sign the transaction with ledger + const chainId = networkInfo[network].chainId + const ledgerPromise = app.signTransaction({path, chainId, tx}) + await device.review([1, 1, 2, 1, 2], "Review sign"); + const ledgerResponse = await ledgerPromise; + const signatureLedger = Signature.fromHex(ledgerResponse.witness.witnessSignatureHex) + + assert.equal(ledgerResponse.txHashHex, hash); + assert.equal(signatureLedger.verify(fullMsg, publicKey), true); + assert.equal(signatureLedger.verify(fullMsg, otherPublicKey), false); +} + +testStep(" - - -", "Sign testnet transaction - addbundles"); +{ + const network = "TESTNET" + const tx = { + ...basicTx, + actions: [{ + account: "fio.address", + name: "addbundles", + authorization: [{ + actor: "aftyershcu22", + permission: "active", + }], + data: { + fio_address: "FIO8PRe4WRZJj5mkem6qVGKyvNFgPsNnjNN6kPhh6EaCpzCVin5Jj", + bundle_sets: 0x33223344, + max_fee: 0x11223344, + tpid: "rewards@wallet", + actor: "aftyershcu22", + }, + }], + } + + // Lets sign the transaction with fiojs + const {serializedTx, fullMsg, hash, signature} = await buildTxAndSignatureFioJs(network, tx, tx.actions[0].name, publicKey) + console.log("Full message:") + console.log(fullMsg.toString("hex")); + + // Lets sign the transaction with ledger + const chainId = networkInfo[network].chainId + const ledgerPromise = app.signTransaction({path, chainId, tx}) + await device.review([1, 1, 2, 1, 1, 2], "Review sign"); + const ledgerResponse = await ledgerPromise; + const signatureLedger = Signature.fromHex(ledgerResponse.witness.witnessSignatureHex) + + assert.equal(ledgerResponse.txHashHex, hash); + assert.equal(signatureLedger.verify(fullMsg, publicKey), true); + assert.equal(signatureLedger.verify(fullMsg, otherPublicKey), false); +} + +testStep(" - - -", "Sign testnet transaction - regaddress"); +{ + const network = "TESTNET" + const tx = { + ...basicTx, + actions: [{ + account: "fio.address", + name: "regaddress", + authorization: [{ + actor: "aftyershcu22", + permission: "active", + }], + data: { + fio_address: "FIO8PRe4WRZJj5mkem6qVGKyvNFgPsNnjNN6kPhh6EaCpzCVin5Jj", + owner_fio_public_key: "My FIO Public Key", + max_fee: 0x11223344, + tpid: "rewards@wallet", + actor: "aftyershcu22", + }, + }], + } + + // Lets sign the transaction with fiojs + const {serializedTx, fullMsg, hash, signature} = await buildTxAndSignatureFioJs(network, tx, tx.actions[0].name, publicKey) + console.log("Full message:") + console.log(fullMsg.toString("hex")); + + // Lets sign the transaction with ledger + const chainId = networkInfo[network].chainId + const ledgerPromise = app.signTransaction({path, chainId, tx}) + await device.review([1, 1, 2, 1, 1, 2], "Review sign"); + const ledgerResponse = await ledgerPromise; + const signatureLedger = Signature.fromHex(ledgerResponse.witness.witnessSignatureHex) + + assert.equal(ledgerResponse.txHashHex, hash); + assert.equal(signatureLedger.verify(fullMsg, publicKey), true); + assert.equal(signatureLedger.verify(fullMsg, otherPublicKey), false); +} + +testStep(" - - -", "Sign testnet transaction - xferaddress"); +{ + const network = "TESTNET" + const tx = { + ...basicTx, + actions: [{ + account: "fio.address", + name: "xferaddress", + authorization: [{ + actor: "aftyershcu22", + permission: "active", + }], + data: { + fio_address: "FIO8PRe4WRZJj5mkem6qVGKyvNFgPsNnjNN6kPhh6EaCpzCVin5Jj", + new_owner_fio_public_key: "My FIO Public Key", + max_fee: 0x11223344, + tpid: "rewards@wallet", + actor: "aftyershcu22", + }, + }], + } + + // Lets sign the transaction with fiojs + const {serializedTx, fullMsg, hash, signature} = await buildTxAndSignatureFioJs(network, tx, tx.actions[0].name, publicKey) + console.log("Full message:") + console.log(fullMsg.toString("hex")); + + // Lets sign the transaction with ledger + const chainId = networkInfo[network].chainId + const ledgerPromise = app.signTransaction({path, chainId, tx}) + await device.review([1, 1, 2, 1, 1, 2], "Review sign"); + const ledgerResponse = await ledgerPromise; + const signatureLedger = Signature.fromHex(ledgerResponse.witness.witnessSignatureHex) + + assert.equal(ledgerResponse.txHashHex, hash); + assert.equal(signatureLedger.verify(fullMsg, publicKey), true); + assert.equal(signatureLedger.verify(fullMsg, otherPublicKey), false); +} + +testStep(" - - -", "Sign mainnet transaction - regdomain"); +{ + const network = "MAINNET" + const tx = { + ...basicTx, + actions: [{ + account: "fio.address", + name: "regdomain", + authorization: [{ + actor: "aftyershcu22", + permission: "active", + }], + data: { + fio_domain: "FIO DOMAIN", + owner_fio_public_key: "My FIO Public Key", + max_fee: 0x11223344, + tpid: "rewards@wallet", + actor: "aftyershcu22", + }, + }], + } + + // Lets sign the transaction with fiojs + const {serializedTx, fullMsg, hash, signature} = await buildTxAndSignatureFioJs(network, tx, tx.actions[0].name, publicKey) + console.log("Full message:") + console.log(fullMsg.toString("hex")); + + // Lets sign the transaction with ledger + const chainId = networkInfo[network].chainId + const ledgerPromise = app.signTransaction({path, chainId, tx}) + await device.review([1, 1, 1, 1, 1, 2], "Review sign"); + const ledgerResponse = await ledgerPromise; + const signatureLedger = Signature.fromHex(ledgerResponse.witness.witnessSignatureHex) + + assert.equal(ledgerResponse.txHashHex, hash); + assert.equal(signatureLedger.verify(fullMsg, publicKey), true); + assert.equal(signatureLedger.verify(fullMsg, otherPublicKey), false); +} + +testStep(" - - -", "Sign mainnet transaction - renewdomain"); +{ + const network = "MAINNET" + const tx = { + ...basicTx, + actions: [{ + account: "fio.address", + name: "renewdomain", + authorization: [{ + actor: "aftyershcu22", + permission: "active", + }], + data: { + fio_domain: "FIO DOMAIN", + max_fee: 0x11223344, + tpid: "rewards@wallet", + actor: "aftyershcu22", + }, + }], + } + + // Lets sign the transaction with fiojs + const {serializedTx, fullMsg, hash, signature} = await buildTxAndSignatureFioJs(network, tx, tx.actions[0].name, publicKey) + console.log("Full message:") + console.log(fullMsg.toString("hex")); + + // Lets sign the transaction with ledger + const chainId = networkInfo[network].chainId + const ledgerPromise = app.signTransaction({path, chainId, tx}) + await device.review([1, 1, 1, 1, 2], "Review sign"); + const ledgerResponse = await ledgerPromise; + const signatureLedger = Signature.fromHex(ledgerResponse.witness.witnessSignatureHex) + + assert.equal(ledgerResponse.txHashHex, hash); + assert.equal(signatureLedger.verify(fullMsg, publicKey), true); + assert.equal(signatureLedger.verify(fullMsg, otherPublicKey), false); +} + +testStep(" - - -", "Sign mainnet transaction - setdomainpub true"); +{ + const network = "MAINNET" + const tx = { + ...basicTx, + actions: [{ + account: "fio.address", + name: "setdomainpub", + authorization: [{ + actor: "aftyershcu22", + permission: "active", + }], + data: { + fio_domain: "FIO DOMAIN", + is_public: 0x01, + max_fee: 0x11223344, + tpid: "rewards@wallet", + actor: "aftyershcu22", + }, + }], + } + + // Lets sign the transaction with fiojs + const {serializedTx, fullMsg, hash, signature} = await buildTxAndSignatureFioJs(network, tx, tx.actions[0].name, publicKey) + console.log("Full message:") + console.log(fullMsg.toString("hex")); + + // Lets sign the transaction with ledger + const chainId = networkInfo[network].chainId + const ledgerPromise = app.signTransaction({path, chainId, tx}) + await device.review([1, 1, 1, 1, 1, 2], "Review sign"); + const ledgerResponse = await ledgerPromise; + const signatureLedger = Signature.fromHex(ledgerResponse.witness.witnessSignatureHex) + + assert.equal(ledgerResponse.txHashHex, hash); + assert.equal(signatureLedger.verify(fullMsg, publicKey), true); + assert.equal(signatureLedger.verify(fullMsg, otherPublicKey), false); +} + +testStep(" - - -", "Sign testnet transaction - setdomainpub false"); +{ + const network = "TESTNET" + const tx = { + ...basicTx, + actions: [{ + account: "fio.address", + name: "setdomainpub", + authorization: [{ + actor: "aftyershcu22", + permission: "active", + }], + data: { + fio_domain: "FIO DOMAIN", + is_public: 0x00, + max_fee: 0x11223344, + tpid: "rewards@wallet", + actor: "aftyershcu22", + }, + }], + } + + // Lets sign the transaction with fiojs + const {serializedTx, fullMsg, hash, signature} = await buildTxAndSignatureFioJs(network, tx, tx.actions[0].name, publicKey) + console.log("Full message:") + console.log(fullMsg.toString("hex")); + + // Lets sign the transaction with ledger + const chainId = networkInfo[network].chainId + const ledgerPromise = app.signTransaction({path, chainId, tx}) + await device.review([1, 1, 1, 1, 1, 2], "Review sign"); + const ledgerResponse = await ledgerPromise; + const signatureLedger = Signature.fromHex(ledgerResponse.witness.witnessSignatureHex) + + assert.equal(ledgerResponse.txHashHex, hash); + assert.equal(signatureLedger.verify(fullMsg, publicKey), true); + assert.equal(signatureLedger.verify(fullMsg, otherPublicKey), false); +} + +testStep(" - - -", "Sign testnet transaction - xferdomain"); +{ + const network = "TESTNET" + const tx = { + ...basicTx, + actions: [{ + account: "fio.address", + name: "xferdomain", + authorization: [{ + actor: "aftyershcu22", + permission: "active", + }], + data: { + fio_domain: "FIO DOMAIN", + new_owner_fio_public_key: "My FIO Public Key", + max_fee: 0x11223344, + tpid: "rewards@wallet", + actor: "aftyershcu22", + }, + }], + } + + // Lets sign the transaction with fiojs + const {serializedTx, fullMsg, hash, signature} = await buildTxAndSignatureFioJs(network, tx, tx.actions[0].name, publicKey) + console.log("Full message:") + console.log(fullMsg.toString("hex")); + + // Lets sign the transaction with ledger + const chainId = networkInfo[network].chainId + const ledgerPromise = app.signTransaction({path, chainId, tx}) + await device.review([1, 1, 1, 1, 1, 2], "Review sign"); + const ledgerResponse = await ledgerPromise; + const signatureLedger = Signature.fromHex(ledgerResponse.witness.witnessSignatureHex) + + assert.equal(ledgerResponse.txHashHex, hash); + assert.equal(signatureLedger.verify(fullMsg, publicKey), true); + assert.equal(signatureLedger.verify(fullMsg, otherPublicKey), false); +} + +testStep(" - - -", "Sign testnet transaction - remallnfts"); +{ + const network = "TESTNET" + const tx = { + ...basicTx, + actions: [{ + account: "fio.address", + name: "remallnfts", + authorization: [{ + actor: "aftyershcu22", + permission: "active", + }], + data: { + fio_address: "FIO8PRe4WRZJj5mkem6qVGKyvNFgPsNnjNN6kPhh6EaCpzCVin5Jj", + max_fee: 0x11223344, + tpid: "rewards@wallet", + actor: "aftyershcu22", + }, + }], + } + + // Lets sign the transaction with fiojs + const {serializedTx, fullMsg, hash, signature} = await buildTxAndSignatureFioJs(network, tx, tx.actions[0].name, publicKey) + console.log("Full message:") + console.log(fullMsg.toString("hex")); + + // Lets sign the transaction with ledger + const chainId = networkInfo[network].chainId + const ledgerPromise = app.signTransaction({path, chainId, tx}) + await device.review([1, 1, 2, 1, 2], "Review sign"); + const ledgerResponse = await ledgerPromise; + const signatureLedger = Signature.fromHex(ledgerResponse.witness.witnessSignatureHex) + + assert.equal(ledgerResponse.txHashHex, hash); + assert.equal(signatureLedger.verify(fullMsg, publicKey), true); + assert.equal(signatureLedger.verify(fullMsg, otherPublicKey), false); +} + +await transport.close() +testEnd(scriptName); +process.stdin.pause() \ No newline at end of file diff --git a/test-integration/signTransactionOtherFioOracle.js b/test-integration/signTransactionOtherFioOracle.js new file mode 100644 index 00000000..c4da42c9 --- /dev/null +++ b/test-integration/signTransactionOtherFioOracle.js @@ -0,0 +1,264 @@ +import { testStart, testStep, testEnd, getScriptName, getSpeculosDefaultConf } from "./speculos-common.js" +import { getTransport } from "./speculos-transport.js" +import { getButtonsAndSnapshots } from "./speculos-buttons-and-snapshots.js" +import { Fio, DeviceStatusError, HARDENED } from "ledgerjs-hw-app-fio" +import { fileURLToPath } from 'url'; +import assert from 'assert/strict'; +import fetch from "node-fetch" +import crypto from "crypto" + +import textenc from "text-encoding" +const TextEncoder = textenc.TextEncoder; +const TextDecoder = textenc.TextDecoder; + +import fiojs from '@fioprotocol/fiojs' +const ser = fiojs.Serialize; +const Ecc = fiojs.Ecc +const PrivateKey = Ecc.PrivateKey; +const Signature = Ecc.Signature; +const arrayToHex = fiojs.Numeric.arrayToHex; +import { JsSignatureProvider } from "@fioprotocol/fiojs/dist/chain-jssig.js" + + +// We initialize chain constantsconstants +const textDecoder = new TextDecoder() +const textEncoder = new TextEncoder() + +const httpEndpointTestnet = 'http://testnet.fioprotocol.io' +const httpEndpointMainnet = 'https://fio.greymass.com' + +const infoTestnet = await (await fetch(httpEndpointTestnet + '/v1/chain/get_info')).json() +const infoMainnet = await (await fetch(httpEndpointMainnet + '/v1/chain/get_info')).json() + +const abiFioAddressTestnet = await (await fetch(httpEndpointTestnet + '/v1/chain/get_abi', { + body: `{"account_name": "fio.token"}`, + method: 'POST', +})).json() +const abiMsigTestnet = await (await fetch(httpEndpointTestnet + '/v1/chain/get_abi', { + body: `{"account_name": "eosio.msig"}`, + method: 'POST', +})).json() +const abiFioAddressMainnet = await (await fetch(httpEndpointMainnet + '/v1/chain/get_abi', { + body: `{"account_name": "fio.token"}`, + method: 'POST', +})).json() +const abiMsigMainnet = await (await fetch(httpEndpointMainnet + '/v1/chain/get_abi', { + body: `{"account_name": "eosio.msig"}`, + method: 'POST', +})).json() +const abiOracleMainnet = await (await fetch(httpEndpointMainnet + '/v1/chain/get_abi', { + body: `{"account_name": "fio.oracle"}`, + method: 'POST', +})).json() +const abiOracleTestnet = await (await fetch(httpEndpointTestnet + '/v1/chain/get_abi', { + body: `{"account_name": "fio.oracle"}`, + method: 'POST', +})).json() + +// Get a Map of all the types from fio.address +const typesFioAddressTestnet = ser.getTypesFromAbi(ser.createInitialTypes(), abiFioAddressTestnet.abi) +const typesTransactionTestnet = ser.getTypesFromAbi(ser.createInitialTypes(), abiMsigTestnet.abi) +const typesFioAddressMainnet = ser.getTypesFromAbi(ser.createInitialTypes(), abiFioAddressMainnet.abi) +const typesTransactionMainnet = ser.getTypesFromAbi(ser.createInitialTypes(), abiMsigMainnet.abi) +const typesTransaction2Mainnet = ser.getTypesFromAbi(ser.createInitialTypes(), abiOracleMainnet.abi) +const typesTransaction2Testnet = ser.getTypesFromAbi(ser.createInitialTypes(), abiOracleTestnet.abi) + +console.log(typesTransaction2Mainnet.get('wrapdomain')); +console.log(typesTransaction2Mainnet.get('wraptokens')); + +const networkInfo = { + "TESTNET": { + chainId: infoTestnet.chain_id, + typesFioAddress: typesFioAddressTestnet, + typesTransaction: typesTransactionTestnet, + typesTransaction2: typesTransaction2Testnet, + }, + "MAINNET": { + chainId: infoMainnet.chain_id, + typesFioAddress: typesFioAddressMainnet, + typesTransaction: typesTransactionMainnet, + typesTransaction2: typesTransaction2Mainnet, + }, +} + + + + +// Serializes and signs transaction using fiojs +async function buildTxAndSignatureFioJs(network, tx, txtype, pubkey) { + // We serialize the transaction + // Get the action type + const actionType = networkInfo[network].typesTransaction2.get(txtype) + + // Serialize the actions[] "data" field (This example assumes a single action, though transactions may hold an array of actions.) + const buffer = new ser.SerialBuffer({textEncoder, textDecoder}) + actionType.serialize(buffer, tx.actions[0].data) + const serializedData = arrayToHex(buffer.asUint8Array()) + + // Get the actions parameter from the transaction and replace the data field with the serialized data field + let serializedAction = tx.actions[0] + serializedAction = { + ...serializedAction, + data: serializedData, + } + + const rawTransaction = { + ...tx, + max_net_usage_words: 0x00, + max_cpu_usage_ms: 0x00, + delay_sec: 0x00, + context_free_actions: [], + actions: [serializedAction], //Actions have to be an array + transaction_extensions: [], + } + + // Get the transaction action type + const txnaction = networkInfo[network].typesTransaction.get('transaction') + + // Serialize the transaction + const buffer2 = new ser.SerialBuffer({textEncoder, textDecoder}) + txnaction.serialize(buffer2, rawTransaction) + const serializedTransaction = buffer2.asUint8Array() + + //Lets compute hash in using Signature.sign + const msg = Buffer.concat([Buffer.from(networkInfo[network].chainId, "hex"), serializedTransaction, Buffer.allocUnsafe(32).fill(0)]) + const hash = crypto.createHash('sha256').update(msg).digest('hex') + + //Now using signatureProvider.sign + const signatureProvider = new JsSignatureProvider([ + PrivateKey.fromHex(privateKeyDHex).toString(), + PrivateKey.fromHex(otherPrivateKeyDHex).toString() + ]); + const requiredKeys = [pubkey.toString()] + const serializedContextFreeData = null + + const signedTxn = await signatureProvider.sign({ + chainId: networkInfo[network].chainId, + requiredKeys: requiredKeys, + serializedTransaction: serializedTransaction, + serializedContextFreeData: serializedContextFreeData, + }) + + return { + serializedTx: serializedTransaction, + fullMsg: msg, + hash: crypto.createHash('sha256').update(msg).digest('hex'), + signature: signedTxn.signatures[0], + } +} + + +const path = [44 + HARDENED, 235 + HARDENED, 0 + HARDENED, 0, 0] +const privateKeyDHex = "4d597899db76e87933e7c6841c2d661810f070bad20487ef20eb84e182695a3a" +const privateKey = PrivateKey(Buffer.from(privateKeyDHex, "hex")) +const publicKey = privateKey.toPublic() + +const otherPath = [44 + HARDENED, 235 + HARDENED, 0 + HARDENED, 0, 1] +const otherPrivateKeyDHex = "90835ae980cd10e9ca7df05d0e3b3c22e0aed0e75527511337f7c53a9d0c6c69" +const otherPrivateKey = PrivateKey(Buffer.from(otherPrivateKeyDHex,"hex")) +const otherPublicKey = otherPrivateKey.toPublic() + +const basicTx = { + expiration: "2021-08-28T12:50:36.686", + ref_block_num: 0x1122, + ref_block_prefix: 0x33445566, + context_free_actions: [], + transaction_extensions: [], +} + +const scriptName = getScriptName(fileURLToPath(import.meta.url)); +testStart(scriptName); + +const speculosConf = getSpeculosDefaultConf(); +const transport = await getTransport(speculosConf); +const app = new Fio(transport); +const device = getButtonsAndSnapshots(scriptName, speculosConf); + +await device.makeStartingScreenshot(); + + +testStep(" - - -", "Sign testnet transaction - wrapdomain"); +{ + const network = "TESTNET" + const tx = { + ...basicTx, + actions: [{ + account: "fio.oracle", + name: "wrapdomain", + authorization: [{ + actor: "aftyershcu22", + permission: "active", + }], + data: { + fio_domain: "Test domain", + chain_code: "Chain", + public_address: "My address", + max_oracle_fee: 0x44223344, + max_fee: 0x11223344, + tpid: "rewards@wallet", + actor: "aftyershcu22", + }, + }], + } + + // Lets sign the transaction with fiojs + const {serializedTx, fullMsg, hash, signature} = await buildTxAndSignatureFioJs(network, tx, tx.actions[0].name, publicKey) + console.log("Full message:") + console.log(fullMsg.toString("hex")); + + // Lets sign the transaction with ledger + const chainId = networkInfo[network].chainId + const ledgerPromise = app.signTransaction({path, chainId, tx}) + await device.review([1, 1, 1, 1, 1, 1, 1, 2], "Review sign"); + const ledgerResponse = await ledgerPromise; + const signatureLedger = Signature.fromHex(ledgerResponse.witness.witnessSignatureHex) + + assert.equal(ledgerResponse.txHashHex, hash); + assert.equal(signatureLedger.verify(fullMsg, publicKey), true); + assert.equal(signatureLedger.verify(fullMsg, otherPublicKey), false); +} + +testStep(" - - -", "Sign mainnet transaction - wraptokens"); +{ + const network = "MAINNET" + const tx = { + ...basicTx, + actions: [{ + account: "fio.oracle", + name: "wraptokens", + authorization: [{ + actor: "aftyershcu22", + permission: "active", + }], + data: { + amount: "1234567890123", + chain_code: "Chain", + public_address: "My address", + max_oracle_fee: 0x44223344, + max_fee: 0x11223344, + tpid: "rewards@wallet", + actor: "aftyershcu22", + }, + }], + } + + // Lets sign the transaction with fiojs + const {serializedTx, fullMsg, hash, signature} = await buildTxAndSignatureFioJs(network, tx, tx.actions[0].name, publicKey) + console.log("Full message:") + console.log(fullMsg.toString("hex")); + + // Lets sign the transaction with ledger + const chainId = networkInfo[network].chainId + const ledgerPromise = app.signTransaction({path, chainId, tx}) + await device.review([1, 1, 1, 1, 1, 1, 1, 2], "Review sign"); + const ledgerResponse = await ledgerPromise; + const signatureLedger = Signature.fromHex(ledgerResponse.witness.witnessSignatureHex) + + assert.equal(ledgerResponse.txHashHex, hash); + assert.equal(signatureLedger.verify(fullMsg, publicKey), true); + assert.equal(signatureLedger.verify(fullMsg, otherPublicKey), false); +} + +await transport.close() +testEnd(scriptName); +process.stdin.pause() \ No newline at end of file diff --git a/test-integration/signTransactionOtherFioReqobt.js b/test-integration/signTransactionOtherFioReqobt.js new file mode 100644 index 00000000..f466ebee --- /dev/null +++ b/test-integration/signTransactionOtherFioReqobt.js @@ -0,0 +1,266 @@ +import { testStart, testStep, testEnd, getScriptName, getSpeculosDefaultConf } from "./speculos-common.js" +import { getTransport } from "./speculos-transport.js" +import { getButtonsAndSnapshots } from "./speculos-buttons-and-snapshots.js" +import { Fio, DeviceStatusError, HARDENED } from "ledgerjs-hw-app-fio" +import { fileURLToPath } from 'url'; +import assert from 'assert/strict'; +import fetch from "node-fetch" +import crypto from "crypto" + +import textenc from "text-encoding" +const TextEncoder = textenc.TextEncoder; +const TextDecoder = textenc.TextDecoder; + +import fiojs from '@fioprotocol/fiojs' +const ser = fiojs.Serialize; +const Ecc = fiojs.Ecc +const PrivateKey = Ecc.PrivateKey; +const Signature = Ecc.Signature; +const arrayToHex = fiojs.Numeric.arrayToHex; +import { JsSignatureProvider } from "@fioprotocol/fiojs/dist/chain-jssig.js" + +//import {base64ToBinary, arrayToHex} from "@fioprotocol/fiojs/dist/chain-numeric" + + + +// We initialize chain constantsconstants +const textDecoder = new TextDecoder() +const textEncoder = new TextEncoder() + +const httpEndpointTestnet = 'http://testnet.fioprotocol.io' +const httpEndpointMainnet = 'https://fio.greymass.com' + +const infoTestnet = await (await fetch(httpEndpointTestnet + '/v1/chain/get_info')).json() +const infoMainnet = await (await fetch(httpEndpointMainnet + '/v1/chain/get_info')).json() + +const abiFioAddressTestnet = await (await fetch(httpEndpointTestnet + '/v1/chain/get_abi', { + body: `{"account_name": "fio.token"}`, + method: 'POST', +})).json() +const abiMsigTestnet = await (await fetch(httpEndpointTestnet + '/v1/chain/get_abi', { + body: `{"account_name": "eosio.msig"}`, + method: 'POST', +})).json() +const abiFioAddressMainnet = await (await fetch(httpEndpointMainnet + '/v1/chain/get_abi', { + body: `{"account_name": "fio.token"}`, + method: 'POST', +})).json() +const abiMsigMainnet = await (await fetch(httpEndpointMainnet + '/v1/chain/get_abi', { + body: `{"account_name": "eosio.msig"}`, + method: 'POST', +})).json() +const abiReqobtMainnet = await (await fetch(httpEndpointMainnet + '/v1/chain/get_abi', { + body: `{"account_name": "fio.reqobt"}`, + method: 'POST', +})).json() +const abiReqobtTestnet = await (await fetch(httpEndpointTestnet + '/v1/chain/get_abi', { + body: `{"account_name": "fio.reqobt"}`, + method: 'POST', +})).json() + +// Get a Map of all the types from fio.address +const typesFioAddressTestnet = ser.getTypesFromAbi(ser.createInitialTypes(), abiFioAddressTestnet.abi) +const typesTransactionTestnet = ser.getTypesFromAbi(ser.createInitialTypes(), abiMsigTestnet.abi) +const typesFioAddressMainnet = ser.getTypesFromAbi(ser.createInitialTypes(), abiFioAddressMainnet.abi) +const typesTransactionMainnet = ser.getTypesFromAbi(ser.createInitialTypes(), abiMsigMainnet.abi) +const typesTransaction2Mainnet = ser.getTypesFromAbi(ser.createInitialTypes(), abiReqobtMainnet.abi) +const typesTransaction2Testnet = ser.getTypesFromAbi(ser.createInitialTypes(), abiReqobtTestnet.abi) + +const networkInfo = { + "TESTNET": { + chainId: infoTestnet.chain_id, + typesFioAddress: typesFioAddressTestnet, + typesTransaction: typesTransactionTestnet, + typesTransaction2: typesTransaction2Testnet, + }, + "MAINNET": { + chainId: infoMainnet.chain_id, + typesFioAddress: typesFioAddressMainnet, + typesTransaction: typesTransactionMainnet, + typesTransaction2: typesTransaction2Mainnet, + }, +} + + + + +// Serializes and signs transaction using fiojs +async function buildTxAndSignatureFioJs(network, tx, txtype, pubkey) { + // We serialize the transaction + // Get the action type + const actionType = networkInfo[network].typesTransaction2.get(txtype) + + // Serialize the actions[] "data" field (This example assumes a single action, though transactions may hold an array of actions.) + const buffer = new ser.SerialBuffer({textEncoder, textDecoder}) + actionType.serialize(buffer, tx.actions[0].data) + const serializedData = arrayToHex(buffer.asUint8Array()) + + // Get the actions parameter from the transaction and replace the data field with the serialized data field + let serializedAction = tx.actions[0] + serializedAction = { + ...serializedAction, + data: serializedData, + } + + const rawTransaction = { + ...tx, + max_net_usage_words: 0x00, + max_cpu_usage_ms: 0x00, + delay_sec: 0x00, + context_free_actions: [], + actions: [serializedAction], //Actions have to be an array + transaction_extensions: [], + } + + // Get the transaction action type + const txnaction = networkInfo[network].typesTransaction.get('transaction') + + // Serialize the transaction + const buffer2 = new ser.SerialBuffer({textEncoder, textDecoder}) + txnaction.serialize(buffer2, rawTransaction) + const serializedTransaction = buffer2.asUint8Array() + + + + //Lets compute hash in using Signature.sign + const msg = Buffer.concat([Buffer.from(networkInfo[network].chainId, "hex"), serializedTransaction, Buffer.allocUnsafe(32).fill(0)]) + const hash = crypto.createHash('sha256').update(msg).digest('hex') + + + + //Now using signatureProvider.sign + const signatureProvider = new JsSignatureProvider([ + PrivateKey.fromHex(privateKeyDHex).toString(), + PrivateKey.fromHex(otherPrivateKeyDHex).toString() + ]); + const requiredKeys = [pubkey.toString()] + const serializedContextFreeData = null + + const signedTxn = await signatureProvider.sign({ + chainId: networkInfo[network].chainId, + requiredKeys: requiredKeys, + serializedTransaction: serializedTransaction, + serializedContextFreeData: serializedContextFreeData, + }) + + return { + serializedTx: serializedTransaction, + fullMsg: msg, + hash: crypto.createHash('sha256').update(msg).digest('hex'), + signature: signedTxn.signatures[0], + } +} + + +const path = [44 + HARDENED, 235 + HARDENED, 0 + HARDENED, 0, 0] +const privateKeyDHex = "4d597899db76e87933e7c6841c2d661810f070bad20487ef20eb84e182695a3a" +const privateKey = PrivateKey(Buffer.from(privateKeyDHex, "hex")) +//const privateKey = PrivateKey(hex_to_buf(privateKeyDHex)) +const publicKey = privateKey.toPublic() + +const otherPath = [44 + HARDENED, 235 + HARDENED, 0 + HARDENED, 0, 1] +const otherPrivateKeyDHex = "90835ae980cd10e9ca7df05d0e3b3c22e0aed0e75527511337f7c53a9d0c6c69" +//const otherPrivateKey = PrivateKey(hex_to_buf(otherPrivateKeyDHex)) +const otherPrivateKey = PrivateKey(Buffer.from(otherPrivateKeyDHex,"hex")) +const otherPublicKey = otherPrivateKey.toPublic() + +const basicTx = { + expiration: "2021-08-28T12:50:36.686", + ref_block_num: 0x1122, + ref_block_prefix: 0x33445566, + context_free_actions: [], + transaction_extensions: [], +} + +const scriptName = getScriptName(fileURLToPath(import.meta.url)); +testStart(scriptName); + +const speculosConf = getSpeculosDefaultConf(); +const transport = await getTransport(speculosConf); +const app = new Fio(transport); +const device = getButtonsAndSnapshots(scriptName, speculosConf); + +await device.makeStartingScreenshot(); + + +testStep(" - - -", "Sign testnet transaction - cancalefndreq"); +{ + const network = "TESTNET" + const tx = { + ...basicTx, + actions: [{ + account: "fio.reqobt", + name: "cancelfndreq", + authorization: [{ + actor: "aftyershcu22", + permission: "active", + }], + data: { + fio_request_id: "Fio request ID", + max_fee: 0x11223344, + tpid: "rewards@wallet", + actor: "aftyershcu22", + }, + }], + + } + + // Lets sign the transaction with fiojs + const {serializedTx, fullMsg, hash, signature} = await buildTxAndSignatureFioJs(network, tx, tx.actions[0].name, publicKey) + console.log("Full message:") + console.log(fullMsg.toString("hex")); + + // Lets sign the transaction with ledger + const chainId = networkInfo[network].chainId + const ledgerPromise = app.signTransaction({path, chainId, tx}) + await device.review([1, 1, 1, 1, 2], "Review sign"); + const ledgerResponse = await ledgerPromise; + const signatureLedger = Signature.fromHex(ledgerResponse.witness.witnessSignatureHex) + + assert.equal(ledgerResponse.txHashHex, hash); + assert.equal(signatureLedger.verify(fullMsg, publicKey), true); + assert.equal(signatureLedger.verify(fullMsg, otherPublicKey), false); +} + +testStep(" - - -", "Sign mainnet transaction - crejectfndreq"); +{ + const network = "MAINNET" + const tx = { + ...basicTx, + actions: [{ + account: "fio.reqobt", + name: "rejectfndreq", + authorization: [{ + actor: "aftyershcu22", + permission: "active", + }], + data: { + fio_request_id: "Fio request ID", + max_fee: 0x11223344, + tpid: "rewards@wallet", + actor: "aftyershcu22", + }, + }], + + } + + // Lets sign the transaction with fiojs + const {serializedTx, fullMsg, hash, signature} = await buildTxAndSignatureFioJs(network, tx, tx.actions[0].name, publicKey) + console.log("Full message:") + console.log(fullMsg.toString("hex")); + + // Lets sign the transaction with ledger + const chainId = networkInfo[network].chainId + const ledgerPromise = app.signTransaction({path, chainId, tx}) + await device.review([1, 1, 1, 1, 2], "Review sign"); + const ledgerResponse = await ledgerPromise; + const signatureLedger = Signature.fromHex(ledgerResponse.witness.witnessSignatureHex) + + assert.equal(ledgerResponse.txHashHex, hash); + assert.equal(signatureLedger.verify(fullMsg, publicKey), true); + assert.equal(signatureLedger.verify(fullMsg, otherPublicKey), false); +} + +await transport.close() +testEnd(scriptName); +process.stdin.pause() \ No newline at end of file diff --git a/test-integration/signTransactionOtherFioStaking.js b/test-integration/signTransactionOtherFioStaking.js new file mode 100644 index 00000000..868648b8 --- /dev/null +++ b/test-integration/signTransactionOtherFioStaking.js @@ -0,0 +1,269 @@ +import { testStart, testStep, testEnd, getScriptName, getSpeculosDefaultConf } from "./speculos-common.js" +import { getTransport } from "./speculos-transport.js" +import { getButtonsAndSnapshots } from "./speculos-buttons-and-snapshots.js" +import { Fio, DeviceStatusError, HARDENED } from "ledgerjs-hw-app-fio" +import { fileURLToPath } from 'url'; +import assert from 'assert/strict'; +import fetch from "node-fetch" +import crypto from "crypto" + +import textenc from "text-encoding" +const TextEncoder = textenc.TextEncoder; +const TextDecoder = textenc.TextDecoder; + +import fiojs from '@fioprotocol/fiojs' +const ser = fiojs.Serialize; +const Ecc = fiojs.Ecc +const PrivateKey = Ecc.PrivateKey; +const Signature = Ecc.Signature; +const arrayToHex = fiojs.Numeric.arrayToHex; +import { JsSignatureProvider } from "@fioprotocol/fiojs/dist/chain-jssig.js" + +//import {base64ToBinary, arrayToHex} from "@fioprotocol/fiojs/dist/chain-numeric" + + + +// We initialize chain constantsconstants +const textDecoder = new TextDecoder() +const textEncoder = new TextEncoder() + +const httpEndpointTestnet = 'http://testnet.fioprotocol.io' +const httpEndpointMainnet = 'https://fio.greymass.com' + +const infoTestnet = await (await fetch(httpEndpointTestnet + '/v1/chain/get_info')).json() +const infoMainnet = await (await fetch(httpEndpointMainnet + '/v1/chain/get_info')).json() + +const abiFioAddressTestnet = await (await fetch(httpEndpointTestnet + '/v1/chain/get_abi', { + body: `{"account_name": "fio.token"}`, + method: 'POST', +})).json() +const abiMsigTestnet = await (await fetch(httpEndpointTestnet + '/v1/chain/get_abi', { + body: `{"account_name": "eosio.msig"}`, + method: 'POST', +})).json() +const abiFioAddressMainnet = await (await fetch(httpEndpointMainnet + '/v1/chain/get_abi', { + body: `{"account_name": "fio.token"}`, + method: 'POST', +})).json() +const abiMsigMainnet = await (await fetch(httpEndpointMainnet + '/v1/chain/get_abi', { + body: `{"account_name": "eosio.msig"}`, + method: 'POST', +})).json() +const abiAddressMainnet = await (await fetch(httpEndpointMainnet + '/v1/chain/get_abi', { + body: `{"account_name": "fio.staking"}`, + method: 'POST', +})).json() +const abiAddressTestnet = await (await fetch(httpEndpointTestnet + '/v1/chain/get_abi', { + body: `{"account_name": "fio.staking"}`, + method: 'POST', +})).json() + +// Get a Map of all the types from fio.address +const typesFioAddressTestnet = ser.getTypesFromAbi(ser.createInitialTypes(), abiFioAddressTestnet.abi) +const typesTransactionTestnet = ser.getTypesFromAbi(ser.createInitialTypes(), abiMsigTestnet.abi) +const typesFioAddressMainnet = ser.getTypesFromAbi(ser.createInitialTypes(), abiFioAddressMainnet.abi) +const typesTransactionMainnet = ser.getTypesFromAbi(ser.createInitialTypes(), abiMsigMainnet.abi) +const typesTransaction2Mainnet = ser.getTypesFromAbi(ser.createInitialTypes(), abiAddressMainnet.abi) +const typesTransaction2Testnet = ser.getTypesFromAbi(ser.createInitialTypes(), abiAddressTestnet.abi) + +const networkInfo = { + "TESTNET": { + chainId: infoTestnet.chain_id, + typesFioAddress: typesFioAddressTestnet, + typesTransaction: typesTransactionTestnet, + typesTransaction2: typesTransaction2Testnet, + }, + "MAINNET": { + chainId: infoMainnet.chain_id, + typesFioAddress: typesFioAddressMainnet, + typesTransaction: typesTransactionMainnet, + typesTransaction2: typesTransaction2Mainnet, + }, +} + + + + +// Serializes and signs transaction using fiojs +async function buildTxAndSignatureFioJs(network, tx, txtype, pubkey) { + // We serialize the transaction + // Get the action type + const actionType = networkInfo[network].typesTransaction2.get(txtype) + + // Serialize the actions[] "data" field (This example assumes a single action, though transactions may hold an array of actions.) + const buffer = new ser.SerialBuffer({textEncoder, textDecoder}) + actionType.serialize(buffer, tx.actions[0].data) + const serializedData = arrayToHex(buffer.asUint8Array()) + + // Get the actions parameter from the transaction and replace the data field with the serialized data field + let serializedAction = tx.actions[0] + serializedAction = { + ...serializedAction, + data: serializedData, + } + + const rawTransaction = { + ...tx, + max_net_usage_words: 0x00, + max_cpu_usage_ms: 0x00, + delay_sec: 0x00, + context_free_actions: [], + actions: [serializedAction], //Actions have to be an array + transaction_extensions: [], + } + + // Get the transaction action type + const txnaction = networkInfo[network].typesTransaction.get('transaction') + + // Serialize the transaction + const buffer2 = new ser.SerialBuffer({textEncoder, textDecoder}) + txnaction.serialize(buffer2, rawTransaction) + const serializedTransaction = buffer2.asUint8Array() + + + + //Lets compute hash in using Signature.sign + const msg = Buffer.concat([Buffer.from(networkInfo[network].chainId, "hex"), serializedTransaction, Buffer.allocUnsafe(32).fill(0)]) + const hash = crypto.createHash('sha256').update(msg).digest('hex') + + + + //Now using signatureProvider.sign + const signatureProvider = new JsSignatureProvider([ + PrivateKey.fromHex(privateKeyDHex).toString(), + PrivateKey.fromHex(otherPrivateKeyDHex).toString() + ]); + const requiredKeys = [pubkey.toString()] + const serializedContextFreeData = null + + const signedTxn = await signatureProvider.sign({ + chainId: networkInfo[network].chainId, + requiredKeys: requiredKeys, + serializedTransaction: serializedTransaction, + serializedContextFreeData: serializedContextFreeData, + }) + + return { + serializedTx: serializedTransaction, + fullMsg: msg, + hash: crypto.createHash('sha256').update(msg).digest('hex'), + signature: signedTxn.signatures[0], + } +} + + +const path = [44 + HARDENED, 235 + HARDENED, 0 + HARDENED, 0, 0] +const privateKeyDHex = "4d597899db76e87933e7c6841c2d661810f070bad20487ef20eb84e182695a3a" +const privateKey = PrivateKey(Buffer.from(privateKeyDHex, "hex")) +//const privateKey = PrivateKey(hex_to_buf(privateKeyDHex)) +const publicKey = privateKey.toPublic() + +const otherPath = [44 + HARDENED, 235 + HARDENED, 0 + HARDENED, 0, 1] +const otherPrivateKeyDHex = "90835ae980cd10e9ca7df05d0e3b3c22e0aed0e75527511337f7c53a9d0c6c69" +//const otherPrivateKey = PrivateKey(hex_to_buf(otherPrivateKeyDHex)) +const otherPrivateKey = PrivateKey(Buffer.from(otherPrivateKeyDHex,"hex")) +const otherPublicKey = otherPrivateKey.toPublic() + +const basicTx = { + expiration: "2021-08-28T12:50:36.686", + ref_block_num: 0x1122, + ref_block_prefix: 0x33445566, + context_free_actions: [], + transaction_extensions: [], +} + +const scriptName = getScriptName(fileURLToPath(import.meta.url)); +testStart(scriptName); + +const speculosConf = getSpeculosDefaultConf(); +const transport = await getTransport(speculosConf); +const app = new Fio(transport); +const device = getButtonsAndSnapshots(scriptName, speculosConf); + +await device.makeStartingScreenshot(); + + +testStep(" - - -", "Sign testnet transaction - stakefio"); +{ + const network = "TESTNET" + const tx = { + ...basicTx, + actions: [{ + account: "fio.staking", + name: "stakefio", + authorization: [{ + actor: "aftyershcu22", + permission: "active", + }], + data: { + amount: 0x44, + fio_address: "FIO8PRe4WRZJj5mkem6qVGKyvNFgPsNnjNN6kPhh6EaCpzCVin5Jj", + max_fee: 0x11223344, + tpid: "rewards@wallet", + actor: "aftyershcu22", + }, + }], + + } + + // Lets sign the transaction with fiojs + const {serializedTx, fullMsg, hash, signature} = await buildTxAndSignatureFioJs(network, tx, tx.actions[0].name, publicKey) + console.log("Full message:") + console.log(fullMsg.toString("hex")); + + // Lets sign the transaction with ledger + const chainId = networkInfo[network].chainId + const ledgerPromise = app.signTransaction({path, chainId, tx}) + await device.review([1, 1, 2, 1, 1, 2], "Review sign"); + const ledgerResponse = await ledgerPromise; + const signatureLedger = Signature.fromHex(ledgerResponse.witness.witnessSignatureHex) + + assert.equal(ledgerResponse.txHashHex, hash); + assert.equal(signatureLedger.verify(fullMsg, publicKey), true); + assert.equal(signatureLedger.verify(fullMsg, otherPublicKey), false); +} + +testStep(" - - -", "Sign mainnet transaction - unstakefio"); +{ + const network = "MAINNET" + const tx = { + ...basicTx, + actions: [{ + account: "fio.staking", + name: "unstakefio", + authorization: [{ + actor: "aftyershcu22", + permission: "active", + }], + data: { + amount: 0x44, + fio_address: "FIO8PRe4WRZJj5mkem6qVGKyvNFgPsNnjNN6kPhh6EaCpzCVin5Jj", + max_fee: 0x11223344, + tpid: "rewards@wallet", + actor: "aftyershcu22", + }, + }], + + } + + // Lets sign the transaction with fiojs + const {serializedTx, fullMsg, hash, signature} = await buildTxAndSignatureFioJs(network, tx, tx.actions[0].name, publicKey) + console.log("Full message:") + console.log(fullMsg.toString("hex")); + + // Lets sign the transaction with ledger + const chainId = networkInfo[network].chainId + const ledgerPromise = app.signTransaction({path, chainId, tx}) + await device.review([1, 1, 2, 1, 1, 2], "Review sign"); + const ledgerResponse = await ledgerPromise; + const signatureLedger = Signature.fromHex(ledgerResponse.witness.witnessSignatureHex) + + assert.equal(ledgerResponse.txHashHex, hash); + assert.equal(signatureLedger.verify(fullMsg, publicKey), true); + assert.equal(signatureLedger.verify(fullMsg, otherPublicKey), false); +} + + +await transport.close() +testEnd(scriptName); +process.stdin.pause() \ No newline at end of file diff --git a/test-integration/signTransactionRecordobt.js b/test-integration/signTransactionRecordobt.js new file mode 100644 index 00000000..1e62aa89 --- /dev/null +++ b/test-integration/signTransactionRecordobt.js @@ -0,0 +1,308 @@ +import { testStart, testStep, testEnd, getScriptName, getSpeculosDefaultConf } from "./speculos-common.js" +import { getTransport } from "./speculos-transport.js" +import { getButtonsAndSnapshots } from "./speculos-buttons-and-snapshots.js" +import { Fio, DeviceStatusError, HARDENED } from "ledgerjs-hw-app-fio" +import { fileURLToPath } from 'url'; +import assert from 'assert/strict'; +import fetch from "node-fetch" +import crypto from "crypto" + +import textenc from "text-encoding" +const TextEncoder = textenc.TextEncoder; +const TextDecoder = textenc.TextDecoder; + +import fiojs from '@fioprotocol/fiojs' +const ser = fiojs.Serialize; +const Ecc = fiojs.Ecc +const PrivateKey = Ecc.PrivateKey; +const PublicKey = Ecc.PublicKey; +const Signature = Ecc.Signature; +const arrayToHex = fiojs.Numeric.arrayToHex; +import { JsSignatureProvider } from "@fioprotocol/fiojs/dist/chain-jssig.js" +import { createSharedCipher } from "@fioprotocol/fiojs/dist/encryption-fio.js"; +import { checkDecrypt } from "@fioprotocol/fiojs/dist/encryption-check.js"; + +//import {base64ToBinary, arrayToHex} from "@fioprotocol/fiojs/dist/chain-numeric" + + + +// We initialize chain constantsconstants +const textDecoder = new TextDecoder() +const textEncoder = new TextEncoder() + +const httpEndpointTestnet = 'http://testnet.fioprotocol.io' +const httpEndpointMainnet = 'https://fio.greymass.com' + +const infoTestnet = await (await fetch(httpEndpointTestnet + '/v1/chain/get_info')).json() +const infoMainnet = await (await fetch(httpEndpointMainnet + '/v1/chain/get_info')).json() + +const abiFioAddressTestnet = await (await fetch(httpEndpointTestnet + '/v1/chain/get_abi', { + body: `{"account_name": "fio.token"}`, + method: 'POST', +})).json() +const abiMsigTestnet = await (await fetch(httpEndpointTestnet + '/v1/chain/get_abi', { + body: `{"account_name": "eosio.msig"}`, + method: 'POST', +})).json() +const abiFioAddressMainnet = await (await fetch(httpEndpointMainnet + '/v1/chain/get_abi', { + body: `{"account_name": "fio.token"}`, + method: 'POST', +})).json() +const abiMsigMainnet = await (await fetch(httpEndpointMainnet + '/v1/chain/get_abi', { + body: `{"account_name": "eosio.msig"}`, + method: 'POST', +})).json() +const abiReqobtMainnet = await (await fetch(httpEndpointMainnet + '/v1/chain/get_abi', { + body: `{"account_name": "fio.reqobt"}`, + method: 'POST', +})).json() +const abiReqobtTestnet = await (await fetch(httpEndpointTestnet + '/v1/chain/get_abi', { + body: `{"account_name": "fio.reqobt"}`, + method: 'POST', +})).json() + +// Get a Map of all the types from fio.address +const typesFioAddressTestnet = ser.getTypesFromAbi(ser.createInitialTypes(), abiFioAddressTestnet.abi) +const typesTransactionTestnet = ser.getTypesFromAbi(ser.createInitialTypes(), abiMsigTestnet.abi) +const typesFioAddressMainnet = ser.getTypesFromAbi(ser.createInitialTypes(), abiFioAddressMainnet.abi) +const typesTransactionMainnet = ser.getTypesFromAbi(ser.createInitialTypes(), abiMsigMainnet.abi) +const typesTransaction2Mainnet = ser.getTypesFromAbi(ser.createInitialTypes(), abiReqobtMainnet.abi) +const typesTransaction2Testnet = ser.getTypesFromAbi(ser.createInitialTypes(), abiReqobtTestnet.abi) + +/*console.log(typesFioAddressMainnet) +console.log(typesFioAddressMainnet) +console.log(typesTransactionMainnet) +console.log(typesTransaction2Mainnet) +console.log(typesTransaction2Mainnet.get('recordobt'))*/ + + +const networkInfo = { + "TESTNET": { + chainId: infoTestnet.chain_id, + typesFioAddress: typesFioAddressTestnet, + typesTransaction: typesTransactionTestnet, + typesTransaction2: typesTransaction2Testnet, + }, + "MAINNET": { + chainId: infoMainnet.chain_id, + typesFioAddress: typesFioAddressMainnet, + typesTransaction: typesTransactionMainnet, + typesTransaction2: typesTransaction2Mainnet, + }, +} + +const path = [44 + HARDENED, 235 + HARDENED, 0 + HARDENED, 0, 0] +const privateKeyDHex = "4d597899db76e87933e7c6841c2d661810f070bad20487ef20eb84e182695a3a" +const privateKey = PrivateKey(Buffer.from(privateKeyDHex, "hex")) +const publicKey = privateKey.toPublic() + +const otherPath = [44 + HARDENED, 235 + HARDENED, 0 + HARDENED, 0, 1] +const otherPrivateKeyDHex = "90835ae980cd10e9ca7df05d0e3b3c22e0aed0e75527511337f7c53a9d0c6c69" +const otherPrivateKey = PrivateKey(Buffer.from(otherPrivateKeyDHex,"hex")) +const otherPublicKey = otherPrivateKey.toPublic() + + +//------------------- TWO TRANSACTIONS ------------------------------------------------ + +const txMemo = { + expiration: "2021-08-28T12:50:36.686", + ref_block_num: 0x1122, + ref_block_prefix: 0x33445566, + context_free_actions: [], + actions: [{ + account: "fio.reqobt", + name: "recordobt", + authorization: [{ + actor: "aftyershcu22", + permission: "active", + }], + data: { + fio_request_id: "Fio request ID", + payer_fio_address: "My payer address", + payee_fio_address: "My payee address", + max_fee: 0x11223344, + tpid: "rewards@wallet", + actor: "aftyershcu22", + + other_public_key: otherPublicKey.toUncompressed().toBuffer().toString("hex"), + payer_public_address: "My payer public address", + payee_public_address: "My payee public address", + amount: "amount 1000", + chain_code: "BTC", + token_code: "BTC", + status: "status", + obt_id: "obt ID", + memo: "I have memo", + }, + }], +} + +const txHash = { + expiration: "2021-08-28T12:50:36.686", + ref_block_num: 0x1122, + ref_block_prefix: 0x33445566, + context_free_actions: [], + actions: [{ + account: "fio.reqobt", + name: "recordobt", + authorization: [{ + actor: "aftyershcu22", + permission: "active", + }], + data: { + fio_request_id: "", + payer_fio_address: "My payer address", + payee_fio_address: "My payee address", + max_fee: 0x11223344, + tpid: "rewards@wallet", + actor: "aftyershcu22", + + other_public_key: otherPublicKey.toUncompressed().toBuffer().toString("hex"), + payer_public_address: "My payer public address", + payee_public_address: "My payee public address", + amount: "amount 1000", + chain_code: "BTC", + token_code: "BTC", + status: "status", + obt_id: "obt ID", + hash: "I have hash", + offline_url: "I have url", + }, + }], +} + +//------------------- SERIALIZE TRANSACTION ------------------------------------------------ + +async function buildTxUsingFioJs(network, tx, iv) { + const content = { + payer_public_address: tx.actions[0].data.payer_public_address, + payee_public_address: tx.actions[0].data.payee_public_address, + amount: tx.actions[0].data.amount, + chain_code: tx.actions[0].data.chain_code, + token_code: tx.actions[0].data.token_code, + status: tx.actions[0].data.status, + obt_id: tx.actions[0].data.obt_id, + memo: tx.actions[0].data.memo, + hash: tx.actions[0].data.hash, + offline_url: tx.actions[0].data.offline_url, + } + + const pk = PublicKey(Buffer.from(tx.actions[0].data.other_public_key, "hex")).toString() + const sharedCipher = createSharedCipher({privateKey: privateKey.toBuffer(), publicKey: pk}) + const encryptedContent = sharedCipher.encrypt('record_obt_data_content', content, iv) + + const data = { + fio_request_id: tx.actions[0].data.fio_request_id, + payer_fio_address: tx.actions[0].data.payer_fio_address, + payee_fio_address: tx.actions[0].data.payee_fio_address, + content: encryptedContent, + max_fee: tx.actions[0].data.max_fee, + tpid: tx.actions[0].data.tpid, + actor: tx.actions[0].data.actor, + } + + const actionAddress = networkInfo[network].typesTransaction2.get('recordobt') + const buffer = new ser.SerialBuffer({textEncoder, textDecoder}) + actionAddress.serialize(buffer, data) + const serializedData = arrayToHex(buffer.asUint8Array()) + + let serializedAction = tx.actions[0] + serializedAction = { + ...serializedAction, + data: serializedData, + } + + const rawTransaction = { + ...tx, + max_net_usage_words: 0x00, + max_cpu_usage_ms: 0x00, + delay_sec: 0x00, + context_free_actions: [], + actions: [serializedAction], //Actions have to be an array + transaction_extensions: [], + } + + const txTransaction = networkInfo[network].typesTransaction.get('transaction') + const buffer2 = new ser.SerialBuffer({textEncoder, textDecoder}) + txTransaction.serialize(buffer2, rawTransaction) + const serializedTransaction = buffer2.asUint8Array() + + return {tx: Buffer.from(serializedTransaction), enc: encryptedContent} +} + + +//---------------------------TESTS--------------------------------------------------------- + +const scriptName = getScriptName(fileURLToPath(import.meta.url)); +testStart(scriptName); + +const speculosConf = getSpeculosDefaultConf(); +const transport = await getTransport(speculosConf); +const app = new Fio(transport); +const device = getButtonsAndSnapshots(scriptName, speculosConf); + +await device.makeStartingScreenshot(); + +async function runTxTest(network, tx, review1, review2) { + // Lets sign the transaction with ledger + const chainId = networkInfo[network].chainId + const ledgerPromise = app.signTransaction({path, chainId, tx}) + await device.review2(review1, review2, "Review sign"); + const ledgerResponse = await ledgerPromise; + console.log(ledgerResponse) + + const iv = Buffer.from(ledgerResponse.dhEncryptedData, "base64").slice(0, 16) + + const pair = await buildTxUsingFioJs(network, tx, iv) + const serTx = pair.tx + const encContent = pair.enc + console.log("Test data:") + console.log(tx) + console.log(serTx.toString("hex")) + console.log(encContent) + + const pk = PublicKey(Buffer.from(tx.actions[0].data.other_public_key, "hex")).toString() + const sharedCipher = createSharedCipher({privateKey: privateKey.toBuffer(), publicKey: pk}) + const plaintextFio = checkDecrypt(sharedCipher.sharedSecret, Buffer.from(encContent, "base64")) + const plaintextLedger = checkDecrypt(sharedCipher.sharedSecret, Buffer.from(ledgerResponse.dhEncryptedData, "base64")) + console.log(Buffer.from(plaintextFio).toString("hex")) + console.log(Buffer.from(plaintextLedger).toString("hex")) + assert.equal(Buffer.from(plaintextFio).toString("hex"), Buffer.from(plaintextLedger).toString("hex")) + + const fullMsg = Buffer.concat([Buffer.from(networkInfo[network].chainId, "hex"), serTx, Buffer.allocUnsafe(32).fill(0)]) + console.log(fullMsg.toString("hex")) + const hash = crypto.createHash('sha256').update(fullMsg).digest('hex') + assert.equal(ledgerResponse.txHashHex, hash); + + const signatureLedger = Signature.fromHex(ledgerResponse.witness.witnessSignatureHex) + assert.equal(signatureLedger.verify(fullMsg, publicKey), true); + assert.equal(signatureLedger.verify(fullMsg, otherPublicKey), false); +} + +const longSequence = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]; +const longSequenceHash = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]; //has empty fio_request_id +const secondSequence = [1, 2] + +testStep(" - - -", "Sign testnet transaction - memo"); +{ + await runTxTest("TESTNET", txMemo, longSequence, secondSequence) +} + +testStep(" - - -", "Sign testnet mainnet - memo"); +{ + await runTxTest("MAINNET", txMemo, longSequence, secondSequence) +} + +testStep(" - - -", "Sign testnet transaction - hash"); +{ + await runTxTest("TESTNET", txHash, longSequenceHash, secondSequence) +} + +testStep(" - - -", "Sign testnet mainnet - hash"); +{ + await runTxTest("MAINNET", txHash, longSequenceHash, secondSequence) +} + +await transport.close() +testEnd(scriptName); +process.stdin.pause(); diff --git a/test-integration/signTransactionRemaddress.js b/test-integration/signTransactionRemaddress.js new file mode 100644 index 00000000..00bb43e7 --- /dev/null +++ b/test-integration/signTransactionRemaddress.js @@ -0,0 +1,435 @@ +import { testStart, testStep, testEnd, getScriptName, getSpeculosDefaultConf } from "./speculos-common.js" +import { getTransport } from "./speculos-transport.js" +import { getButtonsAndSnapshots } from "./speculos-buttons-and-snapshots.js" +import { Fio, DeviceStatusError, HARDENED } from "ledgerjs-hw-app-fio" +import { fileURLToPath } from 'url'; +import assert from 'assert/strict'; +import fetch from "node-fetch" +import crypto from "crypto" + +import textenc from "text-encoding" +const TextEncoder = textenc.TextEncoder; +const TextDecoder = textenc.TextDecoder; + +import fiojs from '@fioprotocol/fiojs' +const ser = fiojs.Serialize; +const Ecc = fiojs.Ecc +const PrivateKey = Ecc.PrivateKey; +const Signature = Ecc.Signature; +const arrayToHex = fiojs.Numeric.arrayToHex; +import { JsSignatureProvider } from "@fioprotocol/fiojs/dist/chain-jssig.js" + +//import {base64ToBinary, arrayToHex} from "@fioprotocol/fiojs/dist/chain-numeric" + + + +// We initialize chain constantsconstants +const textDecoder = new TextDecoder() +const textEncoder = new TextEncoder() + +const httpEndpointTestnet = 'http://testnet.fioprotocol.io' +const httpEndpointMainnet = 'https://fio.greymass.com' + +const infoTestnet = await (await fetch(httpEndpointTestnet + '/v1/chain/get_info')).json() +const infoMainnet = await (await fetch(httpEndpointMainnet + '/v1/chain/get_info')).json() + +const abiFioAddressTestnet = await (await fetch(httpEndpointTestnet + '/v1/chain/get_abi', { + body: `{"account_name": "fio.token"}`, + method: 'POST', +})).json() +const abiMsigTestnet = await (await fetch(httpEndpointTestnet + '/v1/chain/get_abi', { + body: `{"account_name": "eosio.msig"}`, + method: 'POST', +})).json() +const abiFioAddressMainnet = await (await fetch(httpEndpointMainnet + '/v1/chain/get_abi', { + body: `{"account_name": "fio.token"}`, + method: 'POST', +})).json() +const abiMsigMainnet = await (await fetch(httpEndpointMainnet + '/v1/chain/get_abi', { + body: `{"account_name": "eosio.msig"}`, + method: 'POST', +})).json() +const abiAddressMainnet = await (await fetch(httpEndpointMainnet + '/v1/chain/get_abi', { + body: `{"account_name": "fio.address"}`, + method: 'POST', +})).json() +const abiAddressTestnet = await (await fetch(httpEndpointTestnet + '/v1/chain/get_abi', { + body: `{"account_name": "fio.address"}`, + method: 'POST', +})).json() + +// Get a Map of all the types from fio.address +const typesFioAddressTestnet = ser.getTypesFromAbi(ser.createInitialTypes(), abiFioAddressTestnet.abi) +const typesTransactionTestnet = ser.getTypesFromAbi(ser.createInitialTypes(), abiMsigTestnet.abi) +const typesFioAddressMainnet = ser.getTypesFromAbi(ser.createInitialTypes(), abiFioAddressMainnet.abi) +const typesTransactionMainnet = ser.getTypesFromAbi(ser.createInitialTypes(), abiMsigMainnet.abi) +const typesTransaction2Mainnet = ser.getTypesFromAbi(ser.createInitialTypes(), abiAddressMainnet.abi) +const typesTransaction2Testnet = ser.getTypesFromAbi(ser.createInitialTypes(), abiAddressTestnet.abi) + +const networkInfo = { + "TESTNET": { + chainId: infoTestnet.chain_id, + typesFioAddress: typesFioAddressTestnet, + typesTransaction: typesTransactionTestnet, + typesTransaction2: typesTransaction2Testnet, + }, + "MAINNET": { + chainId: infoMainnet.chain_id, + typesFioAddress: typesFioAddressMainnet, + typesTransaction: typesTransactionMainnet, + typesTransaction2: typesTransaction2Mainnet, + }, +} + + + + +// Serializes and signs transaction using fiojs +async function buildTxAndSignatureFioJs(network, tx, pubkey) { + // We serialize the transaction + // Get the remaddress action type + const actionRemaddress = networkInfo[network].typesTransaction2.get('remaddress') + + // Serialize the actions[] "data" field (This example assumes a single action, though transactions may hold an array of actions.) + const buffer = new ser.SerialBuffer({textEncoder, textDecoder}) + actionRemaddress.serialize(buffer, tx.actions[0].data) + const serializedData = arrayToHex(buffer.asUint8Array()) + + // Get the actions parameter from the transaction and replace the data field with the serialized data field + let serializedAction = tx.actions[0] + serializedAction = { + ...serializedAction, + data: serializedData, + } + + const rawTransaction = { + ...tx, + max_net_usage_words: 0x00, + max_cpu_usage_ms: 0x00, + delay_sec: 0x00, + context_free_actions: [], + actions: [serializedAction], //Actions have to be an array + transaction_extensions: [], + } + + // Get the transaction action type + const txnaction = networkInfo[network].typesTransaction.get('transaction') + + // Serialize the transaction + const buffer2 = new ser.SerialBuffer({textEncoder, textDecoder}) + txnaction.serialize(buffer2, rawTransaction) + const serializedTransaction = buffer2.asUint8Array() + + + + //Lets compute hash in using Signature.sign + const msg = Buffer.concat([Buffer.from(networkInfo[network].chainId, "hex"), serializedTransaction, Buffer.allocUnsafe(32).fill(0)]) + const hash = crypto.createHash('sha256').update(msg).digest('hex') + + + + //Now using signatureProvider.sign + const signatureProvider = new JsSignatureProvider([ + PrivateKey.fromHex(privateKeyDHex).toString(), + PrivateKey.fromHex(otherPrivateKeyDHex).toString() + ]); + const requiredKeys = [pubkey.toString()] + const serializedContextFreeData = null + + const signedTxn = await signatureProvider.sign({ + chainId: networkInfo[network].chainId, + requiredKeys: requiredKeys, + serializedTransaction: serializedTransaction, + serializedContextFreeData: serializedContextFreeData, + }) + + return { + serializedTx: serializedTransaction, + fullMsg: msg, + hash: crypto.createHash('sha256').update(msg).digest('hex'), + signature: signedTxn.signatures[0], + } +} + + +const path = [44 + HARDENED, 235 + HARDENED, 0 + HARDENED, 0, 0] +const privateKeyDHex = "4d597899db76e87933e7c6841c2d661810f070bad20487ef20eb84e182695a3a" +const privateKey = PrivateKey(Buffer.from(privateKeyDHex, "hex")) +//const privateKey = PrivateKey(hex_to_buf(privateKeyDHex)) +const publicKey = privateKey.toPublic() + +const otherPath = [44 + HARDENED, 235 + HARDENED, 0 + HARDENED, 0, 1] +const otherPrivateKeyDHex = "90835ae980cd10e9ca7df05d0e3b3c22e0aed0e75527511337f7c53a9d0c6c69" +//const otherPrivateKey = PrivateKey(hex_to_buf(otherPrivateKeyDHex)) +const otherPrivateKey = PrivateKey(Buffer.from(otherPrivateKeyDHex,"hex")) +const otherPublicKey = otherPrivateKey.toPublic() + +const basicTx = { + expiration: "2021-08-28T12:50:36.686", + ref_block_num: 0x1122, + ref_block_prefix: 0x33445566, + context_free_actions: [], + actions: [{ + account: "fio.address", + name: "remaddress", + authorization: [{ + actor: "aftyershcu22", + permission: "active", + }], + data: { + fio_address: "FIO8PRe4WRZJj5mkem6qVGKyvNFgPsNnjNN6kPhh6EaCpzCVin5Jj", + public_addresses: [ + { + public_address: "My payer public address", + chain_code: "BTC", + token_code: "BTC", + }, + ], + max_fee: 0x11223344, + tpid: "rewards@wallet", + actor: "aftyershcu22", + }, + }], + transaction_extensions: [], +} + +const scriptName = getScriptName(fileURLToPath(import.meta.url)); +testStart(scriptName); + +const speculosConf = getSpeculosDefaultConf(); +const transport = await getTransport(speculosConf); +const app = new Fio(transport); +const device = getButtonsAndSnapshots(scriptName, speculosConf); + +await device.makeStartingScreenshot(); + + +//Important, we need all the testcases to validate presence of corresponding integrity hash +testStep(" - - -", "Sign testnet transaction"); +{ + const network = "TESTNET" + const tx = basicTx + + // Lets sign the transaction with fiojs + const {serializedTx, fullMsg, hash, signature} = await buildTxAndSignatureFioJs(network, tx, publicKey) + console.log("Full message:") + console.log(fullMsg.toString("hex")); + + // Lets sign the transaction with ledger + const chainId = networkInfo[network].chainId + const ledgerPromise = app.signTransaction({path, chainId, tx}) + await device.review([1, 1, 2, 1, 1, 2], "Review sign"); + const ledgerResponse = await ledgerPromise; + const signatureLedger = Signature.fromHex(ledgerResponse.witness.witnessSignatureHex) + + assert.equal(ledgerResponse.txHashHex, hash); + assert.equal(signatureLedger.verify(fullMsg, publicKey), true); + assert.equal(signatureLedger.verify(fullMsg, otherPublicKey), false); +} + +//Important, we need all the testcases to validate presence of corresponding integrity hash +testStep(" - - -", "Sign mainnet transaction - two addresses"); +{ + const network = "MAINNET" + const tx = { + ...basicTx, + actions: [{ + ...basicTx.actions[0], + data: { + ...basicTx.actions[0].data, + public_addresses: [ + { + public_address: "My payer public address", + chain_code: "BTC", + token_code: "BTC", + }, + { + public_address: "Second payer public address", + chain_code: "BTC", + token_code: "BTC", + }, + + ], + } + }] + } + + // Lets sign the transaction with fiojs + const {serializedTx, fullMsg, hash, signature} = await buildTxAndSignatureFioJs(network, tx, publicKey) + console.log("Full message:") + console.log(fullMsg.toString("hex")); + + // Lets sign the transaction with ledger + const chainId = networkInfo[network].chainId + const ledgerPromise = app.signTransaction({path, chainId, tx}) + await device.review([1, 1, 2, 1, 1, 1, 2], "Review sign"); + const ledgerResponse = await ledgerPromise; + const signatureLedger = Signature.fromHex(ledgerResponse.witness.witnessSignatureHex) + + assert.equal(ledgerResponse.txHashHex, hash); + assert.equal(signatureLedger.verify(fullMsg, publicKey), true); + assert.equal(signatureLedger.verify(fullMsg, otherPublicKey), false); +} + +//Important, we need all the testcases to validate presence of corresponding integrity hash +testStep(" - - -", "Sign mainnet transaction - three addresses"); +{ + const network = "MAINNET" + const tx = { + ...basicTx, + actions: [{ + ...basicTx.actions[0], + data: { + ...basicTx.actions[0].data, + public_addresses: [ + { + public_address: "My payer public address", + chain_code: "BTC", + token_code: "BTC", + }, + { + public_address: "Second payer public address", + chain_code: "BTC", + token_code: "BTC", + }, + { + public_address: "Third payer public address", + chain_code: "BTC", + token_code: "BTC", + }, + ], + } + }] + } + + // Lets sign the transaction with fiojs + const {serializedTx, fullMsg, hash, signature} = await buildTxAndSignatureFioJs(network, tx, publicKey) + console.log("Full message:") + console.log(fullMsg.toString("hex")); + + // Lets sign the transaction with ledger + const chainId = networkInfo[network].chainId + const ledgerPromise = app.signTransaction({path, chainId, tx}) + await device.review([1, 1, 2, 1, 1, 1, 1, 2], "Review sign"); + const ledgerResponse = await ledgerPromise; + const signatureLedger = Signature.fromHex(ledgerResponse.witness.witnessSignatureHex) + + assert.equal(ledgerResponse.txHashHex, hash); + assert.equal(signatureLedger.verify(fullMsg, publicKey), true); + assert.equal(signatureLedger.verify(fullMsg, otherPublicKey), false); +} + +//Important, we need all the testcases to validate presence of corresponding integrity hash +testStep(" - - -", "Sign mainnet transaction - four addresses"); +{ + const network = "MAINNET" + const tx = { + ...basicTx, + actions: [{ + ...basicTx.actions[0], + data: { + ...basicTx.actions[0].data, + public_addresses: [ + { + public_address: "My payer public address", + chain_code: "BTC", + token_code: "BTC", + }, + { + public_address: "Second payer public address", + chain_code: "BTC", + token_code: "BTC", + }, + { + public_address: "Third payer public address", + chain_code: "BTC", + token_code: "BTC", + }, + { + public_address: "Fourth payer public address", + chain_code: "BTC", + token_code: "BTC", + }, + ], + } + }] + } + + // Lets sign the transaction with fiojs + const {serializedTx, fullMsg, hash, signature} = await buildTxAndSignatureFioJs(network, tx, publicKey) + console.log("Full message:") + console.log(fullMsg.toString("hex")); + + // Lets sign the transaction with ledger + const chainId = networkInfo[network].chainId + const ledgerPromise = app.signTransaction({path, chainId, tx}) + await device.review([1, 1, 2, 1, 1, 1, 1, 1, 2], "Review sign"); + const ledgerResponse = await ledgerPromise; + const signatureLedger = Signature.fromHex(ledgerResponse.witness.witnessSignatureHex) + + assert.equal(ledgerResponse.txHashHex, hash); + assert.equal(signatureLedger.verify(fullMsg, publicKey), true); + assert.equal(signatureLedger.verify(fullMsg, otherPublicKey), false); +} + +//Important, we need all the testcases to validate presence of corresponding integrity hash +testStep(" - - -", "Sign mainnet transaction - five addresses"); +{ + const network = "MAINNET" + const tx = { + ...basicTx, + actions: [{ + ...basicTx.actions[0], + data: { + ...basicTx.actions[0].data, + public_addresses: [ + { + public_address: "My payer public address", + chain_code: "BTC", + token_code: "BTC", + }, + { + public_address: "Second payer public address", + chain_code: "BTC", + token_code: "BTC", + }, + { + public_address: "Third payer public address", + chain_code: "BTC", + token_code: "BTC", + }, + { + public_address: "Fourth payer public address", + chain_code: "BTC", + token_code: "BTC", + }, + { + public_address: "Fifth payer public address", + chain_code: "BTC", + token_code: "BTC2", + }, + ], + } + }] + } + + // Lets sign the transaction with fiojs + const {serializedTx, fullMsg, hash, signature} = await buildTxAndSignatureFioJs(network, tx, publicKey) + console.log("Full message:") + console.log(fullMsg.toString("hex")); + + // Lets sign the transaction with ledger + const chainId = networkInfo[network].chainId + const ledgerPromise = app.signTransaction({path, chainId, tx}) + await device.review([1, 1, 2, 1, 1, 1, 1, 1, 1, 2], "Review sign"); + const ledgerResponse = await ledgerPromise; + const signatureLedger = Signature.fromHex(ledgerResponse.witness.witnessSignatureHex) + + assert.equal(ledgerResponse.txHashHex, hash); + assert.equal(signatureLedger.verify(fullMsg, publicKey), true); + assert.equal(signatureLedger.verify(fullMsg, otherPublicKey), false); +} + +await transport.close() +testEnd(scriptName); +process.stdin.pause() \ No newline at end of file diff --git a/test-integration/signTransactionRemnft.js b/test-integration/signTransactionRemnft.js new file mode 100644 index 00000000..b1ff569b --- /dev/null +++ b/test-integration/signTransactionRemnft.js @@ -0,0 +1,323 @@ +import { testStart, testStep, testEnd, getScriptName, getSpeculosDefaultConf } from "./speculos-common.js" +import { getTransport } from "./speculos-transport.js" +import { getButtonsAndSnapshots } from "./speculos-buttons-and-snapshots.js" +import { Fio, DeviceStatusError, HARDENED } from "ledgerjs-hw-app-fio" +import { fileURLToPath } from 'url'; +import assert from 'assert/strict'; +import fetch from "node-fetch" +import crypto from "crypto" + +import textenc from "text-encoding" +const TextEncoder = textenc.TextEncoder; +const TextDecoder = textenc.TextDecoder; + +import fiojs from '@fioprotocol/fiojs' +const ser = fiojs.Serialize; +const Ecc = fiojs.Ecc +const PrivateKey = Ecc.PrivateKey; +const Signature = Ecc.Signature; +const arrayToHex = fiojs.Numeric.arrayToHex; +import { JsSignatureProvider } from "@fioprotocol/fiojs/dist/chain-jssig.js" + +//import {base64ToBinary, arrayToHex} from "@fioprotocol/fiojs/dist/chain-numeric" + + + +// We initialize chain constantsconstants +const textDecoder = new TextDecoder() +const textEncoder = new TextEncoder() + +const httpEndpointTestnet = 'http://testnet.fioprotocol.io' +const httpEndpointMainnet = 'https://fio.greymass.com' + +const infoTestnet = await (await fetch(httpEndpointTestnet + '/v1/chain/get_info')).json() +const infoMainnet = await (await fetch(httpEndpointMainnet + '/v1/chain/get_info')).json() + +const abiFioAddressTestnet = await (await fetch(httpEndpointTestnet + '/v1/chain/get_abi', { + body: `{"account_name": "fio.token"}`, + method: 'POST', +})).json() +const abiMsigTestnet = await (await fetch(httpEndpointTestnet + '/v1/chain/get_abi', { + body: `{"account_name": "eosio.msig"}`, + method: 'POST', +})).json() +const abiFioAddressMainnet = await (await fetch(httpEndpointMainnet + '/v1/chain/get_abi', { + body: `{"account_name": "fio.token"}`, + method: 'POST', +})).json() +const abiMsigMainnet = await (await fetch(httpEndpointMainnet + '/v1/chain/get_abi', { + body: `{"account_name": "eosio.msig"}`, + method: 'POST', +})).json() +const abiAddressMainnet = await (await fetch(httpEndpointMainnet + '/v1/chain/get_abi', { + body: `{"account_name": "fio.address"}`, + method: 'POST', +})).json() +const abiAddressTestnet = await (await fetch(httpEndpointTestnet + '/v1/chain/get_abi', { + body: `{"account_name": "fio.address"}`, + method: 'POST', +})).json() + +// Get a Map of all the types from fio.address +const typesFioAddressTestnet = ser.getTypesFromAbi(ser.createInitialTypes(), abiFioAddressTestnet.abi) +const typesTransactionTestnet = ser.getTypesFromAbi(ser.createInitialTypes(), abiMsigTestnet.abi) +const typesFioAddressMainnet = ser.getTypesFromAbi(ser.createInitialTypes(), abiFioAddressMainnet.abi) +const typesTransactionMainnet = ser.getTypesFromAbi(ser.createInitialTypes(), abiMsigMainnet.abi) +const typesTransaction2Mainnet = ser.getTypesFromAbi(ser.createInitialTypes(), abiAddressMainnet.abi) +const typesTransaction2Testnet = ser.getTypesFromAbi(ser.createInitialTypes(), abiAddressTestnet.abi) + +const networkInfo = { + "TESTNET": { + chainId: infoTestnet.chain_id, + typesFioAddress: typesFioAddressTestnet, + typesTransaction: typesTransactionTestnet, + typesTransaction2: typesTransaction2Testnet, + }, + "MAINNET": { + chainId: infoMainnet.chain_id, + typesFioAddress: typesFioAddressMainnet, + typesTransaction: typesTransactionMainnet, + typesTransaction2: typesTransaction2Mainnet, + }, +} + + + + +// Serializes and signs transaction using fiojs +async function buildTxAndSignatureFioJs(network, tx, pubkey) { + // We serialize the transaction + // Get the remnft action type + const actionRemnft = networkInfo[network].typesTransaction2.get('remnft') + + // Serialize the actions[] "data" field (This example assumes a single action, though transactions may hold an array of actions.) + const buffer = new ser.SerialBuffer({textEncoder, textDecoder}) + actionRemnft.serialize(buffer, tx.actions[0].data) + const serializedData = arrayToHex(buffer.asUint8Array()) + + // Get the actions parameter from the transaction and replace the data field with the serialized data field + let serializedAction = tx.actions[0] + serializedAction = { + ...serializedAction, + data: serializedData, + } + + const rawTransaction = { + ...tx, + max_net_usage_words: 0x00, + max_cpu_usage_ms: 0x00, + delay_sec: 0x00, + context_free_actions: [], + actions: [serializedAction], //Actions have to be an array + transaction_extensions: [], + } + + // Get the transaction action type + const txnaction = networkInfo[network].typesTransaction.get('transaction') + + // Serialize the transaction + const buffer2 = new ser.SerialBuffer({textEncoder, textDecoder}) + txnaction.serialize(buffer2, rawTransaction) + const serializedTransaction = buffer2.asUint8Array() + + + + //Lets compute hash in using Signature.sign + const msg = Buffer.concat([Buffer.from(networkInfo[network].chainId, "hex"), serializedTransaction, Buffer.allocUnsafe(32).fill(0)]) + const hash = crypto.createHash('sha256').update(msg).digest('hex') + + + + //Now using signatureProvider.sign + const signatureProvider = new JsSignatureProvider([ + PrivateKey.fromHex(privateKeyDHex).toString(), + PrivateKey.fromHex(otherPrivateKeyDHex).toString() + ]); + const requiredKeys = [pubkey.toString()] + const serializedContextFreeData = null + + const signedTxn = await signatureProvider.sign({ + chainId: networkInfo[network].chainId, + requiredKeys: requiredKeys, + serializedTransaction: serializedTransaction, + serializedContextFreeData: serializedContextFreeData, + }) + + return { + serializedTx: serializedTransaction, + fullMsg: msg, + hash: crypto.createHash('sha256').update(msg).digest('hex'), + signature: signedTxn.signatures[0], + } +} + + +const path = [44 + HARDENED, 235 + HARDENED, 0 + HARDENED, 0, 0] +const privateKeyDHex = "4d597899db76e87933e7c6841c2d661810f070bad20487ef20eb84e182695a3a" +const privateKey = PrivateKey(Buffer.from(privateKeyDHex, "hex")) +//const privateKey = PrivateKey(hex_to_buf(privateKeyDHex)) +const publicKey = privateKey.toPublic() + +const otherPath = [44 + HARDENED, 235 + HARDENED, 0 + HARDENED, 0, 1] +const otherPrivateKeyDHex = "90835ae980cd10e9ca7df05d0e3b3c22e0aed0e75527511337f7c53a9d0c6c69" +//const otherPrivateKey = PrivateKey(hex_to_buf(otherPrivateKeyDHex)) +const otherPrivateKey = PrivateKey(Buffer.from(otherPrivateKeyDHex,"hex")) +const otherPublicKey = otherPrivateKey.toPublic() + +const basicTx = { + expiration: "2021-08-28T12:50:36.686", + ref_block_num: 0x1122, + ref_block_prefix: 0x33445566, + context_free_actions: [], + actions: [{ + account: "fio.address", + name: "remnft", + authorization: [{ + actor: "aftyershcu22", + permission: "active", + }], + data: { + fio_address: "FIO8PRe4WRZJj5mkem6qVGKyvNFgPsNnjNN6kPhh6EaCpzCVin5Jj", + nfts: [ + { + chain_code: "BTC", + contract_address: "Contract address", + token_id: "Token1", + }, + ], + max_fee: 0x11223344, + tpid: "rewards@wallet", + actor: "aftyershcu22", + }, + }], + transaction_extensions: [], +} + +const scriptName = getScriptName(fileURLToPath(import.meta.url)); +testStart(scriptName); + +const speculosConf = getSpeculosDefaultConf(); +const transport = await getTransport(speculosConf); +const app = new Fio(transport); +const device = getButtonsAndSnapshots(scriptName, speculosConf); + +await device.makeStartingScreenshot(); + + +//Important, we need all the testcases to validate presence of corresponding integrity hash +testStep(" - - -", "Sign testnet transaction"); +{ + const network = "TESTNET" + const tx = basicTx + + // Lets sign the transaction with fiojs + const {serializedTx, fullMsg, hash, signature} = await buildTxAndSignatureFioJs(network, tx, publicKey) + console.log("Full message:") + console.log(fullMsg.toString("hex")); + + // Lets sign the transaction with ledger + const chainId = networkInfo[network].chainId + const ledgerPromise = app.signTransaction({path, chainId, tx}) + await device.review([1, 1, 2, 1, 1, 1, 1, 1, 2], "Review sign"); + const ledgerResponse = await ledgerPromise; + const signatureLedger = Signature.fromHex(ledgerResponse.witness.witnessSignatureHex) + + assert.equal(ledgerResponse.txHashHex, hash); + assert.equal(signatureLedger.verify(fullMsg, publicKey), true); + assert.equal(signatureLedger.verify(fullMsg, otherPublicKey), false); +} + +//Important, we need all the testcases to validate presence of corresponding integrity hash +testStep(" - - -", "Sign mainnet transaction - two addresses"); +{ + const network = "MAINNET" + const tx = { + ...basicTx, + actions: [{ + ...basicTx.actions[0], + data: { + ...basicTx.actions[0].data, + nfts: [ + { + chain_code: "BTC", + contract_address: "Contract address", + token_id: "Token1", + }, + { + chain_code: "BTC2", + contract_address: "Contract address2", + token_id: "Token2", + }, + ], + } + }] + } + + // Lets sign the transaction with fiojs + const {serializedTx, fullMsg, hash, signature} = await buildTxAndSignatureFioJs(network, tx, publicKey) + console.log("Full message:") + console.log(fullMsg.toString("hex")); + + // Lets sign the transaction with ledger + const chainId = networkInfo[network].chainId + const ledgerPromise = app.signTransaction({path, chainId, tx}) + await device.review([1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2], "Review sign"); + const ledgerResponse = await ledgerPromise; + const signatureLedger = Signature.fromHex(ledgerResponse.witness.witnessSignatureHex) + + assert.equal(ledgerResponse.txHashHex, hash); + assert.equal(signatureLedger.verify(fullMsg, publicKey), true); + assert.equal(signatureLedger.verify(fullMsg, otherPublicKey), false); +} + +//Important, we need all the testcases to validate presence of corresponding integrity hash +testStep(" - - -", "Sign mainnet transaction - three addresses"); +{ + const network = "MAINNET" + const tx = { + ...basicTx, + actions: [{ + ...basicTx.actions[0], + data: { + ...basicTx.actions[0].data, + nfts: [ + { + chain_code: "BTC", + contract_address: "Contract address", + token_id: "Token1", + }, + { + chain_code: "BTC2", + contract_address: "Contract address2", + token_id: "Token2", + }, + { + chain_code: "BTC3", + contract_address: "Contract address3", + token_id: "Token3", + }, + ], + } + }] + } + + // Lets sign the transaction with fiojs + const {serializedTx, fullMsg, hash, signature} = await buildTxAndSignatureFioJs(network, tx, publicKey) + console.log("Full message:") + console.log(fullMsg.toString("hex")); + + // Lets sign the transaction with ledger + const chainId = networkInfo[network].chainId + const ledgerPromise = app.signTransaction({path, chainId, tx}) + await device.review([1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2], "Review sign"); + const ledgerResponse = await ledgerPromise; + const signatureLedger = Signature.fromHex(ledgerResponse.witness.witnessSignatureHex) + + assert.equal(ledgerResponse.txHashHex, hash); + assert.equal(signatureLedger.verify(fullMsg, publicKey), true); + assert.equal(signatureLedger.verify(fullMsg, otherPublicKey), false); +} + +await transport.close() +testEnd(scriptName); +process.stdin.pause() \ No newline at end of file diff --git a/test-integration/signTransactionTrnsfiopubky.js b/test-integration/signTransactionTrnsfiopubky.js new file mode 100644 index 00000000..2d47e42a --- /dev/null +++ b/test-integration/signTransactionTrnsfiopubky.js @@ -0,0 +1,316 @@ +import { testStart, testStep, testEnd, getScriptName, getSpeculosDefaultConf } from "./speculos-common.js" +import { getTransport } from "./speculos-transport.js" +import { getButtonsAndSnapshots } from "./speculos-buttons-and-snapshots.js" +import { Fio, DeviceStatusError, HARDENED } from "ledgerjs-hw-app-fio" +import { fileURLToPath } from 'url'; +import assert from 'assert/strict'; +import fetch from "node-fetch" +import crypto from "crypto" + +import textenc from "text-encoding" +const TextEncoder = textenc.TextEncoder; +const TextDecoder = textenc.TextDecoder; + +import fiojs from '@fioprotocol/fiojs' +const ser = fiojs.Serialize; +const Ecc = fiojs.Ecc +const PrivateKey = Ecc.PrivateKey; +const Signature = Ecc.Signature; +const arrayToHex = fiojs.Numeric.arrayToHex; +import { JsSignatureProvider } from "@fioprotocol/fiojs/dist/chain-jssig.js" + +//import {base64ToBinary, arrayToHex} from "@fioprotocol/fiojs/dist/chain-numeric" + + + +// We initialize chain constantsconstants +const textDecoder = new TextDecoder() +const textEncoder = new TextEncoder() + +const httpEndpointTestnet = 'http://testnet.fioprotocol.io' +const httpEndpointMainnet = 'https://fio.greymass.com' + +const infoTestnet = await (await fetch(httpEndpointTestnet + '/v1/chain/get_info')).json() +const infoMainnet = await (await fetch(httpEndpointMainnet + '/v1/chain/get_info')).json() + +const abiFioAddressTestnet = await (await fetch(httpEndpointTestnet + '/v1/chain/get_abi', { + body: `{"account_name": "fio.token"}`, + method: 'POST', +})).json() +const abiMsigTestnet = await (await fetch(httpEndpointTestnet + '/v1/chain/get_abi', { + body: `{"account_name": "eosio.msig"}`, + method: 'POST', +})).json() +const abiFioAddressMainnet = await (await fetch(httpEndpointMainnet + '/v1/chain/get_abi', { + body: `{"account_name": "fio.token"}`, + method: 'POST', +})).json() +const abiMsigMainnet = await (await fetch(httpEndpointMainnet + '/v1/chain/get_abi', { + body: `{"account_name": "eosio.msig"}`, + method: 'POST', +})).json() + +// Get a Map of all the types from fio.address +const typesFioAddressTestnet = ser.getTypesFromAbi(ser.createInitialTypes(), abiFioAddressTestnet.abi) +const typesTransactionTestnet = ser.getTypesFromAbi(ser.createInitialTypes(), abiMsigTestnet.abi) +const typesFioAddressMainnet = ser.getTypesFromAbi(ser.createInitialTypes(), abiFioAddressMainnet.abi) +const typesTransactionMainnet = ser.getTypesFromAbi(ser.createInitialTypes(), abiMsigMainnet.abi) +const networkInfo = { + "TESTNET": { + chainId: infoTestnet.chain_id, + typesFioAddress: typesFioAddressTestnet, + typesTransaction: typesTransactionTestnet, + }, + "MAINNET": { + chainId: infoMainnet.chain_id, + typesFioAddress: typesFioAddressMainnet, + typesTransaction: typesTransactionMainnet, + }, +} + + + + +// Serializes and signs transaction using fiojs +async function buildTxAndSignatureFioJs(network, tx, pubkey) { + // We serialize the transaction + // Get the addaddress action type + const actionAddaddress = networkInfo[network].typesFioAddress.get('trnsfiopubky') + + // Serialize the actions[] "data" field (This example assumes a single action, though transactions may hold an array of actions.) + const buffer = new ser.SerialBuffer({textEncoder, textDecoder}) + actionAddaddress.serialize(buffer, tx.actions[0].data) + const serializedData = arrayToHex(buffer.asUint8Array()) + + // Get the actions parameter from the transaction and replace the data field with the serialized data field + let serializedAction = tx.actions[0] + serializedAction = { + ...serializedAction, + data: serializedData, + } + + const rawTransaction = { + ...tx, + max_net_usage_words: 0x00, + max_cpu_usage_ms: 0x00, + delay_sec: 0x00, + context_free_actions: [], + actions: [serializedAction], //Actions have to be an array + transaction_extensions: [], + } + + // Get the transaction action type + const txnaction = networkInfo[network].typesTransaction.get('transaction') + + // Serialize the transaction + const buffer2 = new ser.SerialBuffer({textEncoder, textDecoder}) + txnaction.serialize(buffer2, rawTransaction) + const serializedTransaction = buffer2.asUint8Array() + + + + //Lets compute hash in using Signature.sign + const msg = Buffer.concat([Buffer.from(networkInfo[network].chainId, "hex"), serializedTransaction, Buffer.allocUnsafe(32).fill(0)]) + const hash = crypto.createHash('sha256').update(msg).digest('hex') + + + + //Now using signatureProvider.sign + const signatureProvider = new JsSignatureProvider([ + PrivateKey.fromHex(privateKeyDHex).toString(), + PrivateKey.fromHex(otherPrivateKeyDHex).toString() + ]); + const requiredKeys = [pubkey.toString()] + const serializedContextFreeData = null + + const signedTxn = await signatureProvider.sign({ + chainId: networkInfo[network].chainId, + requiredKeys: requiredKeys, + serializedTransaction: serializedTransaction, + serializedContextFreeData: serializedContextFreeData, + }) + + return { + serializedTx: serializedTransaction, + fullMsg: msg, + hash: crypto.createHash('sha256').update(msg).digest('hex'), + signature: signedTxn.signatures[0], + } +} + + +const path = [44 + HARDENED, 235 + HARDENED, 0 + HARDENED, 0, 0] +const privateKeyDHex = "4d597899db76e87933e7c6841c2d661810f070bad20487ef20eb84e182695a3a" +const privateKey = PrivateKey(Buffer.from(privateKeyDHex, "hex")) +//const privateKey = PrivateKey(hex_to_buf(privateKeyDHex)) +const publicKey = privateKey.toPublic() + +const otherPath = [44 + HARDENED, 235 + HARDENED, 0 + HARDENED, 0, 1] +const otherPrivateKeyDHex = "90835ae980cd10e9ca7df05d0e3b3c22e0aed0e75527511337f7c53a9d0c6c69" +//const otherPrivateKey = PrivateKey(hex_to_buf(otherPrivateKeyDHex)) +const otherPrivateKey = PrivateKey(Buffer.from(otherPrivateKeyDHex,"hex")) +const otherPublicKey = otherPrivateKey.toPublic() + +const basicTx = { + expiration: "2021-08-28T12:50:36.686", + ref_block_num: 0x1122, + ref_block_prefix: 0x33445566, + context_free_actions: [], + actions: [{ + account: "fio.token", + name: "trnsfiopubky", + authorization: [{ + actor: "aftyershcu22", + permission: "active", + }], + data: { + payee_public_key: "FIO8PRe4WRZJj5mkem6qVGKyvNFgPsNnjNN6kPhh6EaCpzCVin5Jj", + amount: "20", + max_fee: 0x11223344, + tpid: "rewards@wallet", + actor: "aftyershcu22", + }, + }], + transaction_extensions: [], +} + + +const scriptName = getScriptName(fileURLToPath(import.meta.url)); +testStart(scriptName); + +const speculosConf = getSpeculosDefaultConf(); +const transport = await getTransport(speculosConf); +const app = new Fio(transport); +const device = getButtonsAndSnapshots(scriptName, speculosConf); + +await device.makeStartingScreenshot(); + + +testStep(" - - -", "Sign testnet transaction"); +{ + const network = "TESTNET" + const tx = basicTx + + // Lets sign the transaction with fiojs + const {serializedTx, fullMsg, hash, signature} = await buildTxAndSignatureFioJs(network, tx, publicKey) + console.log("Full message:") + console.log(fullMsg.toString("hex")); + + // Lets sign the transaction with ledger + const chainId = networkInfo[network].chainId + const ledgerPromise = app.signTransaction({path, chainId, tx}) + await device.review([1, 1, 2, 1, 1, 2], "Review sign"); + const ledgerResponse = await ledgerPromise; + const signatureLedger = Signature.fromHex(ledgerResponse.witness.witnessSignatureHex) + + assert.equal(ledgerResponse.txHashHex, hash); + assert.equal(signatureLedger.verify(fullMsg, publicKey), true); + assert.equal(signatureLedger.verify(fullMsg, otherPublicKey), false); +} + +testStep(" - - -", "Sign mainnet transaction"); +{ + const network = "MAINNET" + const tx = basicTx + + // Lets sign the transaction with fiojs + const {serializedTx, fullMsg, hash, signature} = await buildTxAndSignatureFioJs(network, tx, publicKey) + + // Lets sign the transaction with ledger + const chainId = networkInfo[network].chainId + const ledgerPromise = app.signTransaction({path, chainId, tx}) + await device.review([1, 1, 2, 1, 1, 2], "Review sign"); + const ledgerResponse = await ledgerPromise; + const signatureLedger = Signature.fromHex(ledgerResponse.witness.witnessSignatureHex) + + assert.equal(ledgerResponse.txHashHex, hash); + assert.equal(signatureLedger.verify(fullMsg, publicKey), true); + assert.equal(signatureLedger.verify(fullMsg, otherPublicKey), false); +} + + +testStep(" - - -", "Invalid transaction: actor dont match"); +{ + const network = "MAINNET" + const action = {...basicTx.actions[0], name: "name.error"} + const tx = {...basicTx, actions: [action]} + + // Lets sign the transaction with ledger + const chainId = networkInfo[network].chainId + const promise = app.signTransaction({path, chainId, tx}) + await assert.rejects(promise); +} + +testStep(" - - -", "Invalid derivation path"); +{ + const network = "MAINNET" + const tx = basicTx + + // Lets sign the transaction with ledger + const chainId = networkInfo[network].chainId + const promise = app.signTransaction({path: [44 + HARDENED, 235 + HARDENED, 0 + HARDENED, 1, 0], chainId, tx}) + const assertPromise = assert.rejects(promise, DeviceStatusError, "Action rejected by Ledger's security policy"); + await assertPromise; +} + +testStep(" - - -", "Sign transaction reject"); +{ + const network = "TESTNET" + const tx = basicTx + + // Lets sign the transaction with fiojs + const {serializedTx, fullMsg, hash, signature} = await buildTxAndSignatureFioJs(network, tx, publicKey) + console.log("Full message:") + console.log(fullMsg.toString("hex")); + + // Lets sign the transaction with ledger + const chainId = networkInfo[network].chainId + const ledgerPromise = app.signTransaction({path, chainId, tx}) + await device.reviewReject([1, 1, 2, 1, 1, 2], "Review sign"); + await assert.rejects(ledgerPromise, DeviceStatusError, "Action rejected by user"); +} + +testStep(" - - -", "Sign mainnet transaction - large values"); +{ + const network = "MAINNET" + const tx = { + expiration: "2021-08-28T12:50:36.686", + ref_block_num: 0x1122, + ref_block_prefix: 0x33445566, + context_free_actions: [], + actions: [{ + account: "fio.token", + name: "trnsfiopubky", + authorization: [{ + actor: "aftyershcu22", + permission: "active", + }], + data: { + payee_public_key: "FIO8PRe4WRZJj5mkem6qVGKyvNFgPsNnjNN6kPhh6EaCpzCVin5Jj", + amount: BigInt("0x7F223344556677"), + max_fee: "27340676326057591", + tpid: "rewards@wallet", + actor: "aftyershcu22", + }, + }], + transaction_extensions: [], + } + + // Lets sign the transaction with fiojs + const {serializedTx, fullMsg, hash, signature} = await buildTxAndSignatureFioJs(network, tx, publicKey) + + // Lets sign the transaction with ledger + const chainId = networkInfo[network].chainId + const ledgerPromise = app.signTransaction({path, chainId, tx}) + await device.review([1, 1, 2, 1, 1, 2], "Review sign"); + const ledgerResponse = await ledgerPromise; + const signatureLedger = Signature.fromHex(ledgerResponse.witness.witnessSignatureHex) + + assert.equal(ledgerResponse.txHashHex, hash); + assert.equal(signatureLedger.verify(fullMsg, publicKey), true); + assert.equal(signatureLedger.verify(fullMsg, otherPublicKey), false); +} + +await transport.close() +testEnd(scriptName); +process.stdin.pause() \ No newline at end of file diff --git a/test-integration/snapshots/decodeMessage/nanos.01.png b/test-integration/snapshots/decodeMessage/nanos.01.png new file mode 100644 index 00000000..a0f9b734 Binary files /dev/null and b/test-integration/snapshots/decodeMessage/nanos.01.png differ diff --git a/test-integration/snapshots/decodeMessage/nanos.02.png b/test-integration/snapshots/decodeMessage/nanos.02.png new file mode 100644 index 00000000..4a84ea79 Binary files /dev/null and b/test-integration/snapshots/decodeMessage/nanos.02.png differ diff --git a/test-integration/snapshots/decodeMessage/nanos.03.png b/test-integration/snapshots/decodeMessage/nanos.03.png new file mode 100644 index 00000000..20641a16 Binary files /dev/null and b/test-integration/snapshots/decodeMessage/nanos.03.png differ diff --git a/test-integration/snapshots/decodeMessage/nanos.04.png b/test-integration/snapshots/decodeMessage/nanos.04.png new file mode 100644 index 00000000..7cbf9471 Binary files /dev/null and b/test-integration/snapshots/decodeMessage/nanos.04.png differ diff --git a/test-integration/snapshots/decodeMessage/nanos.05.png b/test-integration/snapshots/decodeMessage/nanos.05.png new file mode 100644 index 00000000..e4da8444 Binary files /dev/null and b/test-integration/snapshots/decodeMessage/nanos.05.png differ diff --git a/test-integration/snapshots/decodeMessage/nanos.06.png b/test-integration/snapshots/decodeMessage/nanos.06.png new file mode 100644 index 00000000..355c272a Binary files /dev/null and b/test-integration/snapshots/decodeMessage/nanos.06.png differ diff --git a/test-integration/snapshots/decodeMessage/nanos.07.png b/test-integration/snapshots/decodeMessage/nanos.07.png new file mode 100644 index 00000000..e3087cbe Binary files /dev/null and b/test-integration/snapshots/decodeMessage/nanos.07.png differ diff --git a/test-integration/snapshots/decodeMessage/nanos.08.png b/test-integration/snapshots/decodeMessage/nanos.08.png new file mode 100644 index 00000000..0a6229c9 Binary files /dev/null and b/test-integration/snapshots/decodeMessage/nanos.08.png differ diff --git a/test-integration/snapshots/decodeMessage/nanos.09.png b/test-integration/snapshots/decodeMessage/nanos.09.png new file mode 100644 index 00000000..8d806ca2 Binary files /dev/null and b/test-integration/snapshots/decodeMessage/nanos.09.png differ diff --git a/test-integration/snapshots/decodeMessage/nanos.10.png b/test-integration/snapshots/decodeMessage/nanos.10.png new file mode 100644 index 00000000..a0f9b734 Binary files /dev/null and b/test-integration/snapshots/decodeMessage/nanos.10.png differ diff --git a/test-integration/snapshots/decodeMessage/nanos.11.png b/test-integration/snapshots/decodeMessage/nanos.11.png new file mode 100644 index 00000000..4a84ea79 Binary files /dev/null and b/test-integration/snapshots/decodeMessage/nanos.11.png differ diff --git a/test-integration/snapshots/decodeMessage/nanos.12.png b/test-integration/snapshots/decodeMessage/nanos.12.png new file mode 100644 index 00000000..20641a16 Binary files /dev/null and b/test-integration/snapshots/decodeMessage/nanos.12.png differ diff --git a/test-integration/snapshots/decodeMessage/nanos.13.png b/test-integration/snapshots/decodeMessage/nanos.13.png new file mode 100644 index 00000000..7cbf9471 Binary files /dev/null and b/test-integration/snapshots/decodeMessage/nanos.13.png differ diff --git a/test-integration/snapshots/decodeMessage/nanos.14.png b/test-integration/snapshots/decodeMessage/nanos.14.png new file mode 100644 index 00000000..e4da8444 Binary files /dev/null and b/test-integration/snapshots/decodeMessage/nanos.14.png differ diff --git a/test-integration/snapshots/decodeMessage/nanos.15.png b/test-integration/snapshots/decodeMessage/nanos.15.png new file mode 100644 index 00000000..355c272a Binary files /dev/null and b/test-integration/snapshots/decodeMessage/nanos.15.png differ diff --git a/test-integration/snapshots/decodeMessage/nanos.16.png b/test-integration/snapshots/decodeMessage/nanos.16.png new file mode 100644 index 00000000..e3087cbe Binary files /dev/null and b/test-integration/snapshots/decodeMessage/nanos.16.png differ diff --git a/test-integration/snapshots/decodeMessage/nanos.17.png b/test-integration/snapshots/decodeMessage/nanos.17.png new file mode 100644 index 00000000..10c21272 Binary files /dev/null and b/test-integration/snapshots/decodeMessage/nanos.17.png differ diff --git a/test-integration/snapshots/decodeMessage/nanos.18.png b/test-integration/snapshots/decodeMessage/nanos.18.png new file mode 100644 index 00000000..22b41df9 Binary files /dev/null and b/test-integration/snapshots/decodeMessage/nanos.18.png differ diff --git a/test-integration/snapshots/decodeMessage/nanos.19.png b/test-integration/snapshots/decodeMessage/nanos.19.png new file mode 100644 index 00000000..8d806ca2 Binary files /dev/null and b/test-integration/snapshots/decodeMessage/nanos.19.png differ diff --git a/test-integration/snapshots/decodeMessage/nanos.20.png b/test-integration/snapshots/decodeMessage/nanos.20.png new file mode 100644 index 00000000..a0f9b734 Binary files /dev/null and b/test-integration/snapshots/decodeMessage/nanos.20.png differ diff --git a/test-integration/snapshots/decodeMessage/nanos.21.png b/test-integration/snapshots/decodeMessage/nanos.21.png new file mode 100644 index 00000000..4a84ea79 Binary files /dev/null and b/test-integration/snapshots/decodeMessage/nanos.21.png differ diff --git a/test-integration/snapshots/decodeMessage/nanos.22.png b/test-integration/snapshots/decodeMessage/nanos.22.png new file mode 100644 index 00000000..20641a16 Binary files /dev/null and b/test-integration/snapshots/decodeMessage/nanos.22.png differ diff --git a/test-integration/snapshots/decodeMessage/nanos.23.png b/test-integration/snapshots/decodeMessage/nanos.23.png new file mode 100644 index 00000000..7cbf9471 Binary files /dev/null and b/test-integration/snapshots/decodeMessage/nanos.23.png differ diff --git a/test-integration/snapshots/decodeMessage/nanos.24.png b/test-integration/snapshots/decodeMessage/nanos.24.png new file mode 100644 index 00000000..f855df8f Binary files /dev/null and b/test-integration/snapshots/decodeMessage/nanos.24.png differ diff --git a/test-integration/snapshots/decodeMessage/nanos.25.png b/test-integration/snapshots/decodeMessage/nanos.25.png new file mode 100644 index 00000000..e4da8444 Binary files /dev/null and b/test-integration/snapshots/decodeMessage/nanos.25.png differ diff --git a/test-integration/snapshots/decodeMessage/nanos.26.png b/test-integration/snapshots/decodeMessage/nanos.26.png new file mode 100644 index 00000000..355c272a Binary files /dev/null and b/test-integration/snapshots/decodeMessage/nanos.26.png differ diff --git a/test-integration/snapshots/decodeMessage/nanos.27.png b/test-integration/snapshots/decodeMessage/nanos.27.png new file mode 100644 index 00000000..e3087cbe Binary files /dev/null and b/test-integration/snapshots/decodeMessage/nanos.27.png differ diff --git a/test-integration/snapshots/decodeMessage/nanos.28.png b/test-integration/snapshots/decodeMessage/nanos.28.png new file mode 100644 index 00000000..47045550 Binary files /dev/null and b/test-integration/snapshots/decodeMessage/nanos.28.png differ diff --git a/test-integration/snapshots/decodeMessage/nanos.29.png b/test-integration/snapshots/decodeMessage/nanos.29.png new file mode 100644 index 00000000..4622c002 Binary files /dev/null and b/test-integration/snapshots/decodeMessage/nanos.29.png differ diff --git a/test-integration/snapshots/decodeMessage/nanos.30.png b/test-integration/snapshots/decodeMessage/nanos.30.png new file mode 100644 index 00000000..0a6229c9 Binary files /dev/null and b/test-integration/snapshots/decodeMessage/nanos.30.png differ diff --git a/test-integration/snapshots/decodeMessage/nanos.31.png b/test-integration/snapshots/decodeMessage/nanos.31.png new file mode 100644 index 00000000..8d806ca2 Binary files /dev/null and b/test-integration/snapshots/decodeMessage/nanos.31.png differ diff --git a/test-integration/snapshots/decodeMessage/nanos.32.png b/test-integration/snapshots/decodeMessage/nanos.32.png new file mode 100644 index 00000000..a0f9b734 Binary files /dev/null and b/test-integration/snapshots/decodeMessage/nanos.32.png differ diff --git a/test-integration/snapshots/decodeMessage/nanos.33.png b/test-integration/snapshots/decodeMessage/nanos.33.png new file mode 100644 index 00000000..4a84ea79 Binary files /dev/null and b/test-integration/snapshots/decodeMessage/nanos.33.png differ diff --git a/test-integration/snapshots/decodeMessage/nanos.34.png b/test-integration/snapshots/decodeMessage/nanos.34.png new file mode 100644 index 00000000..20641a16 Binary files /dev/null and b/test-integration/snapshots/decodeMessage/nanos.34.png differ diff --git a/test-integration/snapshots/decodeMessage/nanos.35.png b/test-integration/snapshots/decodeMessage/nanos.35.png new file mode 100644 index 00000000..7cbf9471 Binary files /dev/null and b/test-integration/snapshots/decodeMessage/nanos.35.png differ diff --git a/test-integration/snapshots/decodeMessage/nanos.36.png b/test-integration/snapshots/decodeMessage/nanos.36.png new file mode 100644 index 00000000..f855df8f Binary files /dev/null and b/test-integration/snapshots/decodeMessage/nanos.36.png differ diff --git a/test-integration/snapshots/decodeMessage/nanos.37.png b/test-integration/snapshots/decodeMessage/nanos.37.png new file mode 100644 index 00000000..e4da8444 Binary files /dev/null and b/test-integration/snapshots/decodeMessage/nanos.37.png differ diff --git a/test-integration/snapshots/decodeMessage/nanos.38.png b/test-integration/snapshots/decodeMessage/nanos.38.png new file mode 100644 index 00000000..355c272a Binary files /dev/null and b/test-integration/snapshots/decodeMessage/nanos.38.png differ diff --git a/test-integration/snapshots/decodeMessage/nanos.39.png b/test-integration/snapshots/decodeMessage/nanos.39.png new file mode 100644 index 00000000..e3087cbe Binary files /dev/null and b/test-integration/snapshots/decodeMessage/nanos.39.png differ diff --git a/test-integration/snapshots/decodeMessage/nanos.40.png b/test-integration/snapshots/decodeMessage/nanos.40.png new file mode 100644 index 00000000..47045550 Binary files /dev/null and b/test-integration/snapshots/decodeMessage/nanos.40.png differ diff --git a/test-integration/snapshots/decodeMessage/nanos.41.png b/test-integration/snapshots/decodeMessage/nanos.41.png new file mode 100644 index 00000000..4622c002 Binary files /dev/null and b/test-integration/snapshots/decodeMessage/nanos.41.png differ diff --git a/test-integration/snapshots/decodeMessage/nanos.42.png b/test-integration/snapshots/decodeMessage/nanos.42.png new file mode 100644 index 00000000..066aed0d Binary files /dev/null and b/test-integration/snapshots/decodeMessage/nanos.42.png differ diff --git a/test-integration/snapshots/decodeMessage/nanos.43.png b/test-integration/snapshots/decodeMessage/nanos.43.png new file mode 100644 index 00000000..e55ef587 Binary files /dev/null and b/test-integration/snapshots/decodeMessage/nanos.43.png differ diff --git a/test-integration/snapshots/decodeMessage/nanos.44.png b/test-integration/snapshots/decodeMessage/nanos.44.png new file mode 100644 index 00000000..8d806ca2 Binary files /dev/null and b/test-integration/snapshots/decodeMessage/nanos.44.png differ diff --git a/test-integration/snapshots/decodeMessage/nanos.45.png b/test-integration/snapshots/decodeMessage/nanos.45.png new file mode 100644 index 00000000..a0f9b734 Binary files /dev/null and b/test-integration/snapshots/decodeMessage/nanos.45.png differ diff --git a/test-integration/snapshots/decodeMessage/nanos.46.png b/test-integration/snapshots/decodeMessage/nanos.46.png new file mode 100644 index 00000000..4a84ea79 Binary files /dev/null and b/test-integration/snapshots/decodeMessage/nanos.46.png differ diff --git a/test-integration/snapshots/decodeMessage/nanos.47.png b/test-integration/snapshots/decodeMessage/nanos.47.png new file mode 100644 index 00000000..20641a16 Binary files /dev/null and b/test-integration/snapshots/decodeMessage/nanos.47.png differ diff --git a/test-integration/snapshots/decodeMessage/nanos.48.png b/test-integration/snapshots/decodeMessage/nanos.48.png new file mode 100644 index 00000000..7cbf9471 Binary files /dev/null and b/test-integration/snapshots/decodeMessage/nanos.48.png differ diff --git a/test-integration/snapshots/decodeMessage/nanos.49.png b/test-integration/snapshots/decodeMessage/nanos.49.png new file mode 100644 index 00000000..e4da8444 Binary files /dev/null and b/test-integration/snapshots/decodeMessage/nanos.49.png differ diff --git a/test-integration/snapshots/decodeMessage/nanos.50.png b/test-integration/snapshots/decodeMessage/nanos.50.png new file mode 100644 index 00000000..355c272a Binary files /dev/null and b/test-integration/snapshots/decodeMessage/nanos.50.png differ diff --git a/test-integration/snapshots/decodeMessage/nanos.51.png b/test-integration/snapshots/decodeMessage/nanos.51.png new file mode 100644 index 00000000..e3087cbe Binary files /dev/null and b/test-integration/snapshots/decodeMessage/nanos.51.png differ diff --git a/test-integration/snapshots/decodeMessage/nanos.52.png b/test-integration/snapshots/decodeMessage/nanos.52.png new file mode 100644 index 00000000..0a6229c9 Binary files /dev/null and b/test-integration/snapshots/decodeMessage/nanos.52.png differ diff --git a/test-integration/snapshots/decodeMessage/nanos.53.png b/test-integration/snapshots/decodeMessage/nanos.53.png new file mode 100644 index 00000000..8d806ca2 Binary files /dev/null and b/test-integration/snapshots/decodeMessage/nanos.53.png differ diff --git a/test-integration/snapshots/decodeMessage/nanos.54.png b/test-integration/snapshots/decodeMessage/nanos.54.png new file mode 100644 index 00000000..a0f9b734 Binary files /dev/null and b/test-integration/snapshots/decodeMessage/nanos.54.png differ diff --git a/test-integration/snapshots/decodeMessage/nanosp.01.png b/test-integration/snapshots/decodeMessage/nanosp.01.png new file mode 100644 index 00000000..a7a87405 Binary files /dev/null and b/test-integration/snapshots/decodeMessage/nanosp.01.png differ diff --git a/test-integration/snapshots/decodeMessage/nanosp.02.png b/test-integration/snapshots/decodeMessage/nanosp.02.png new file mode 100644 index 00000000..d2f0dd67 Binary files /dev/null and b/test-integration/snapshots/decodeMessage/nanosp.02.png differ diff --git a/test-integration/snapshots/decodeMessage/nanosp.03.png b/test-integration/snapshots/decodeMessage/nanosp.03.png new file mode 100644 index 00000000..a1a25bcc Binary files /dev/null and b/test-integration/snapshots/decodeMessage/nanosp.03.png differ diff --git a/test-integration/snapshots/decodeMessage/nanosp.04.png b/test-integration/snapshots/decodeMessage/nanosp.04.png new file mode 100644 index 00000000..1c8a714f Binary files /dev/null and b/test-integration/snapshots/decodeMessage/nanosp.04.png differ diff --git a/test-integration/snapshots/decodeMessage/nanosp.05.png b/test-integration/snapshots/decodeMessage/nanosp.05.png new file mode 100644 index 00000000..14b19bdf Binary files /dev/null and b/test-integration/snapshots/decodeMessage/nanosp.05.png differ diff --git a/test-integration/snapshots/decodeMessage/nanosp.06.png b/test-integration/snapshots/decodeMessage/nanosp.06.png new file mode 100644 index 00000000..e23183a4 Binary files /dev/null and b/test-integration/snapshots/decodeMessage/nanosp.06.png differ diff --git a/test-integration/snapshots/decodeMessage/nanosp.07.png b/test-integration/snapshots/decodeMessage/nanosp.07.png new file mode 100644 index 00000000..56eff548 Binary files /dev/null and b/test-integration/snapshots/decodeMessage/nanosp.07.png differ diff --git a/test-integration/snapshots/decodeMessage/nanosp.08.png b/test-integration/snapshots/decodeMessage/nanosp.08.png new file mode 100644 index 00000000..8a50d7e0 Binary files /dev/null and b/test-integration/snapshots/decodeMessage/nanosp.08.png differ diff --git a/test-integration/snapshots/decodeMessage/nanosp.09.png b/test-integration/snapshots/decodeMessage/nanosp.09.png new file mode 100644 index 00000000..0966b381 Binary files /dev/null and b/test-integration/snapshots/decodeMessage/nanosp.09.png differ diff --git a/test-integration/snapshots/decodeMessage/nanosp.10.png b/test-integration/snapshots/decodeMessage/nanosp.10.png new file mode 100644 index 00000000..a7a87405 Binary files /dev/null and b/test-integration/snapshots/decodeMessage/nanosp.10.png differ diff --git a/test-integration/snapshots/decodeMessage/nanosp.11.png b/test-integration/snapshots/decodeMessage/nanosp.11.png new file mode 100644 index 00000000..d2f0dd67 Binary files /dev/null and b/test-integration/snapshots/decodeMessage/nanosp.11.png differ diff --git a/test-integration/snapshots/decodeMessage/nanosp.12.png b/test-integration/snapshots/decodeMessage/nanosp.12.png new file mode 100644 index 00000000..a1a25bcc Binary files /dev/null and b/test-integration/snapshots/decodeMessage/nanosp.12.png differ diff --git a/test-integration/snapshots/decodeMessage/nanosp.13.png b/test-integration/snapshots/decodeMessage/nanosp.13.png new file mode 100644 index 00000000..1c8a714f Binary files /dev/null and b/test-integration/snapshots/decodeMessage/nanosp.13.png differ diff --git a/test-integration/snapshots/decodeMessage/nanosp.14.png b/test-integration/snapshots/decodeMessage/nanosp.14.png new file mode 100644 index 00000000..14b19bdf Binary files /dev/null and b/test-integration/snapshots/decodeMessage/nanosp.14.png differ diff --git a/test-integration/snapshots/decodeMessage/nanosp.15.png b/test-integration/snapshots/decodeMessage/nanosp.15.png new file mode 100644 index 00000000..e23183a4 Binary files /dev/null and b/test-integration/snapshots/decodeMessage/nanosp.15.png differ diff --git a/test-integration/snapshots/decodeMessage/nanosp.16.png b/test-integration/snapshots/decodeMessage/nanosp.16.png new file mode 100644 index 00000000..56eff548 Binary files /dev/null and b/test-integration/snapshots/decodeMessage/nanosp.16.png differ diff --git a/test-integration/snapshots/decodeMessage/nanosp.17.png b/test-integration/snapshots/decodeMessage/nanosp.17.png new file mode 100644 index 00000000..5854c8c5 Binary files /dev/null and b/test-integration/snapshots/decodeMessage/nanosp.17.png differ diff --git a/test-integration/snapshots/decodeMessage/nanosp.18.png b/test-integration/snapshots/decodeMessage/nanosp.18.png new file mode 100644 index 00000000..8ffe94b0 Binary files /dev/null and b/test-integration/snapshots/decodeMessage/nanosp.18.png differ diff --git a/test-integration/snapshots/decodeMessage/nanosp.19.png b/test-integration/snapshots/decodeMessage/nanosp.19.png new file mode 100644 index 00000000..0966b381 Binary files /dev/null and b/test-integration/snapshots/decodeMessage/nanosp.19.png differ diff --git a/test-integration/snapshots/decodeMessage/nanosp.20.png b/test-integration/snapshots/decodeMessage/nanosp.20.png new file mode 100644 index 00000000..a7a87405 Binary files /dev/null and b/test-integration/snapshots/decodeMessage/nanosp.20.png differ diff --git a/test-integration/snapshots/decodeMessage/nanosp.21.png b/test-integration/snapshots/decodeMessage/nanosp.21.png new file mode 100644 index 00000000..d2f0dd67 Binary files /dev/null and b/test-integration/snapshots/decodeMessage/nanosp.21.png differ diff --git a/test-integration/snapshots/decodeMessage/nanosp.22.png b/test-integration/snapshots/decodeMessage/nanosp.22.png new file mode 100644 index 00000000..63ca3308 Binary files /dev/null and b/test-integration/snapshots/decodeMessage/nanosp.22.png differ diff --git a/test-integration/snapshots/decodeMessage/nanosp.23.png b/test-integration/snapshots/decodeMessage/nanosp.23.png new file mode 100644 index 00000000..6f75fc20 Binary files /dev/null and b/test-integration/snapshots/decodeMessage/nanosp.23.png differ diff --git a/test-integration/snapshots/decodeMessage/nanosp.24.png b/test-integration/snapshots/decodeMessage/nanosp.24.png new file mode 100644 index 00000000..1c8a714f Binary files /dev/null and b/test-integration/snapshots/decodeMessage/nanosp.24.png differ diff --git a/test-integration/snapshots/decodeMessage/nanosp.25.png b/test-integration/snapshots/decodeMessage/nanosp.25.png new file mode 100644 index 00000000..50781aad Binary files /dev/null and b/test-integration/snapshots/decodeMessage/nanosp.25.png differ diff --git a/test-integration/snapshots/decodeMessage/nanosp.26.png b/test-integration/snapshots/decodeMessage/nanosp.26.png new file mode 100644 index 00000000..14b19bdf Binary files /dev/null and b/test-integration/snapshots/decodeMessage/nanosp.26.png differ diff --git a/test-integration/snapshots/decodeMessage/nanosp.27.png b/test-integration/snapshots/decodeMessage/nanosp.27.png new file mode 100644 index 00000000..e23183a4 Binary files /dev/null and b/test-integration/snapshots/decodeMessage/nanosp.27.png differ diff --git a/test-integration/snapshots/decodeMessage/nanosp.28.png b/test-integration/snapshots/decodeMessage/nanosp.28.png new file mode 100644 index 00000000..56eff548 Binary files /dev/null and b/test-integration/snapshots/decodeMessage/nanosp.28.png differ diff --git a/test-integration/snapshots/decodeMessage/nanosp.29.png b/test-integration/snapshots/decodeMessage/nanosp.29.png new file mode 100644 index 00000000..9fbc447c Binary files /dev/null and b/test-integration/snapshots/decodeMessage/nanosp.29.png differ diff --git a/test-integration/snapshots/decodeMessage/nanosp.30.png b/test-integration/snapshots/decodeMessage/nanosp.30.png new file mode 100644 index 00000000..6fb64278 Binary files /dev/null and b/test-integration/snapshots/decodeMessage/nanosp.30.png differ diff --git a/test-integration/snapshots/decodeMessage/nanosp.31.png b/test-integration/snapshots/decodeMessage/nanosp.31.png new file mode 100644 index 00000000..8a50d7e0 Binary files /dev/null and b/test-integration/snapshots/decodeMessage/nanosp.31.png differ diff --git a/test-integration/snapshots/decodeMessage/nanosp.32.png b/test-integration/snapshots/decodeMessage/nanosp.32.png new file mode 100644 index 00000000..0966b381 Binary files /dev/null and b/test-integration/snapshots/decodeMessage/nanosp.32.png differ diff --git a/test-integration/snapshots/decodeMessage/nanosp.33.png b/test-integration/snapshots/decodeMessage/nanosp.33.png new file mode 100644 index 00000000..a7a87405 Binary files /dev/null and b/test-integration/snapshots/decodeMessage/nanosp.33.png differ diff --git a/test-integration/snapshots/decodeMessage/nanosp.34.png b/test-integration/snapshots/decodeMessage/nanosp.34.png new file mode 100644 index 00000000..d2f0dd67 Binary files /dev/null and b/test-integration/snapshots/decodeMessage/nanosp.34.png differ diff --git a/test-integration/snapshots/decodeMessage/nanosp.35.png b/test-integration/snapshots/decodeMessage/nanosp.35.png new file mode 100644 index 00000000..63ca3308 Binary files /dev/null and b/test-integration/snapshots/decodeMessage/nanosp.35.png differ diff --git a/test-integration/snapshots/decodeMessage/nanosp.36.png b/test-integration/snapshots/decodeMessage/nanosp.36.png new file mode 100644 index 00000000..6f75fc20 Binary files /dev/null and b/test-integration/snapshots/decodeMessage/nanosp.36.png differ diff --git a/test-integration/snapshots/decodeMessage/nanosp.37.png b/test-integration/snapshots/decodeMessage/nanosp.37.png new file mode 100644 index 00000000..8b705272 Binary files /dev/null and b/test-integration/snapshots/decodeMessage/nanosp.37.png differ diff --git a/test-integration/snapshots/decodeMessage/nanosp.38.png b/test-integration/snapshots/decodeMessage/nanosp.38.png new file mode 100644 index 00000000..05aa18f8 Binary files /dev/null and b/test-integration/snapshots/decodeMessage/nanosp.38.png differ diff --git a/test-integration/snapshots/decodeMessage/nanosp.39.png b/test-integration/snapshots/decodeMessage/nanosp.39.png new file mode 100644 index 00000000..14b19bdf Binary files /dev/null and b/test-integration/snapshots/decodeMessage/nanosp.39.png differ diff --git a/test-integration/snapshots/decodeMessage/nanosp.40.png b/test-integration/snapshots/decodeMessage/nanosp.40.png new file mode 100644 index 00000000..e23183a4 Binary files /dev/null and b/test-integration/snapshots/decodeMessage/nanosp.40.png differ diff --git a/test-integration/snapshots/decodeMessage/nanosp.41.png b/test-integration/snapshots/decodeMessage/nanosp.41.png new file mode 100644 index 00000000..56eff548 Binary files /dev/null and b/test-integration/snapshots/decodeMessage/nanosp.41.png differ diff --git a/test-integration/snapshots/decodeMessage/nanosp.42.png b/test-integration/snapshots/decodeMessage/nanosp.42.png new file mode 100644 index 00000000..9fbc447c Binary files /dev/null and b/test-integration/snapshots/decodeMessage/nanosp.42.png differ diff --git a/test-integration/snapshots/decodeMessage/nanosp.43.png b/test-integration/snapshots/decodeMessage/nanosp.43.png new file mode 100644 index 00000000..6fb64278 Binary files /dev/null and b/test-integration/snapshots/decodeMessage/nanosp.43.png differ diff --git a/test-integration/snapshots/decodeMessage/nanosp.44.png b/test-integration/snapshots/decodeMessage/nanosp.44.png new file mode 100644 index 00000000..5a9a698b Binary files /dev/null and b/test-integration/snapshots/decodeMessage/nanosp.44.png differ diff --git a/test-integration/snapshots/decodeMessage/nanosp.45.png b/test-integration/snapshots/decodeMessage/nanosp.45.png new file mode 100644 index 00000000..0f9f76e5 Binary files /dev/null and b/test-integration/snapshots/decodeMessage/nanosp.45.png differ diff --git a/test-integration/snapshots/decodeMessage/nanosp.46.png b/test-integration/snapshots/decodeMessage/nanosp.46.png new file mode 100644 index 00000000..0966b381 Binary files /dev/null and b/test-integration/snapshots/decodeMessage/nanosp.46.png differ diff --git a/test-integration/snapshots/decodeMessage/nanosp.47.png b/test-integration/snapshots/decodeMessage/nanosp.47.png new file mode 100644 index 00000000..a7a87405 Binary files /dev/null and b/test-integration/snapshots/decodeMessage/nanosp.47.png differ diff --git a/test-integration/snapshots/decodeMessage/nanosp.48.png b/test-integration/snapshots/decodeMessage/nanosp.48.png new file mode 100644 index 00000000..d2f0dd67 Binary files /dev/null and b/test-integration/snapshots/decodeMessage/nanosp.48.png differ diff --git a/test-integration/snapshots/decodeMessage/nanosp.49.png b/test-integration/snapshots/decodeMessage/nanosp.49.png new file mode 100644 index 00000000..a1a25bcc Binary files /dev/null and b/test-integration/snapshots/decodeMessage/nanosp.49.png differ diff --git a/test-integration/snapshots/decodeMessage/nanosp.50.png b/test-integration/snapshots/decodeMessage/nanosp.50.png new file mode 100644 index 00000000..1c8a714f Binary files /dev/null and b/test-integration/snapshots/decodeMessage/nanosp.50.png differ diff --git a/test-integration/snapshots/decodeMessage/nanosp.51.png b/test-integration/snapshots/decodeMessage/nanosp.51.png new file mode 100644 index 00000000..14b19bdf Binary files /dev/null and b/test-integration/snapshots/decodeMessage/nanosp.51.png differ diff --git a/test-integration/snapshots/decodeMessage/nanosp.52.png b/test-integration/snapshots/decodeMessage/nanosp.52.png new file mode 100644 index 00000000..e23183a4 Binary files /dev/null and b/test-integration/snapshots/decodeMessage/nanosp.52.png differ diff --git a/test-integration/snapshots/decodeMessage/nanosp.53.png b/test-integration/snapshots/decodeMessage/nanosp.53.png new file mode 100644 index 00000000..56eff548 Binary files /dev/null and b/test-integration/snapshots/decodeMessage/nanosp.53.png differ diff --git a/test-integration/snapshots/decodeMessage/nanosp.54.png b/test-integration/snapshots/decodeMessage/nanosp.54.png new file mode 100644 index 00000000..8a50d7e0 Binary files /dev/null and b/test-integration/snapshots/decodeMessage/nanosp.54.png differ diff --git a/test-integration/snapshots/decodeMessage/nanosp.55.png b/test-integration/snapshots/decodeMessage/nanosp.55.png new file mode 100644 index 00000000..0966b381 Binary files /dev/null and b/test-integration/snapshots/decodeMessage/nanosp.55.png differ diff --git a/test-integration/snapshots/decodeMessage/nanosp.56.png b/test-integration/snapshots/decodeMessage/nanosp.56.png new file mode 100644 index 00000000..cbdc0a71 Binary files /dev/null and b/test-integration/snapshots/decodeMessage/nanosp.56.png differ diff --git a/test-integration/snapshots/decodeMessage/nanosp.57.png b/test-integration/snapshots/decodeMessage/nanosp.57.png new file mode 100644 index 00000000..a7a87405 Binary files /dev/null and b/test-integration/snapshots/decodeMessage/nanosp.57.png differ diff --git a/test-integration/snapshots/decodeMessage/nanox.01.png b/test-integration/snapshots/decodeMessage/nanox.01.png new file mode 100644 index 00000000..c843773c Binary files /dev/null and b/test-integration/snapshots/decodeMessage/nanox.01.png differ diff --git a/test-integration/snapshots/decodeMessage/nanox.02.png b/test-integration/snapshots/decodeMessage/nanox.02.png new file mode 100644 index 00000000..89232403 Binary files /dev/null and b/test-integration/snapshots/decodeMessage/nanox.02.png differ diff --git a/test-integration/snapshots/decodeMessage/nanox.03.png b/test-integration/snapshots/decodeMessage/nanox.03.png new file mode 100644 index 00000000..a64aac08 Binary files /dev/null and b/test-integration/snapshots/decodeMessage/nanox.03.png differ diff --git a/test-integration/snapshots/decodeMessage/nanox.04.png b/test-integration/snapshots/decodeMessage/nanox.04.png new file mode 100644 index 00000000..dbe6f3f7 Binary files /dev/null and b/test-integration/snapshots/decodeMessage/nanox.04.png differ diff --git a/test-integration/snapshots/decodeMessage/nanox.05.png b/test-integration/snapshots/decodeMessage/nanox.05.png new file mode 100644 index 00000000..94384bb3 Binary files /dev/null and b/test-integration/snapshots/decodeMessage/nanox.05.png differ diff --git a/test-integration/snapshots/decodeMessage/nanox.06.png b/test-integration/snapshots/decodeMessage/nanox.06.png new file mode 100644 index 00000000..e23183a4 Binary files /dev/null and b/test-integration/snapshots/decodeMessage/nanox.06.png differ diff --git a/test-integration/snapshots/decodeMessage/nanox.07.png b/test-integration/snapshots/decodeMessage/nanox.07.png new file mode 100644 index 00000000..56eff548 Binary files /dev/null and b/test-integration/snapshots/decodeMessage/nanox.07.png differ diff --git a/test-integration/snapshots/decodeMessage/nanox.08.png b/test-integration/snapshots/decodeMessage/nanox.08.png new file mode 100644 index 00000000..8a50d7e0 Binary files /dev/null and b/test-integration/snapshots/decodeMessage/nanox.08.png differ diff --git a/test-integration/snapshots/decodeMessage/nanox.09.png b/test-integration/snapshots/decodeMessage/nanox.09.png new file mode 100644 index 00000000..0966b381 Binary files /dev/null and b/test-integration/snapshots/decodeMessage/nanox.09.png differ diff --git a/test-integration/snapshots/decodeMessage/nanox.10.png b/test-integration/snapshots/decodeMessage/nanox.10.png new file mode 100644 index 00000000..c843773c Binary files /dev/null and b/test-integration/snapshots/decodeMessage/nanox.10.png differ diff --git a/test-integration/snapshots/decodeMessage/nanox.11.png b/test-integration/snapshots/decodeMessage/nanox.11.png new file mode 100644 index 00000000..89232403 Binary files /dev/null and b/test-integration/snapshots/decodeMessage/nanox.11.png differ diff --git a/test-integration/snapshots/decodeMessage/nanox.12.png b/test-integration/snapshots/decodeMessage/nanox.12.png new file mode 100644 index 00000000..a64aac08 Binary files /dev/null and b/test-integration/snapshots/decodeMessage/nanox.12.png differ diff --git a/test-integration/snapshots/decodeMessage/nanox.13.png b/test-integration/snapshots/decodeMessage/nanox.13.png new file mode 100644 index 00000000..dbe6f3f7 Binary files /dev/null and b/test-integration/snapshots/decodeMessage/nanox.13.png differ diff --git a/test-integration/snapshots/decodeMessage/nanox.14.png b/test-integration/snapshots/decodeMessage/nanox.14.png new file mode 100644 index 00000000..94384bb3 Binary files /dev/null and b/test-integration/snapshots/decodeMessage/nanox.14.png differ diff --git a/test-integration/snapshots/decodeMessage/nanox.15.png b/test-integration/snapshots/decodeMessage/nanox.15.png new file mode 100644 index 00000000..e23183a4 Binary files /dev/null and b/test-integration/snapshots/decodeMessage/nanox.15.png differ diff --git a/test-integration/snapshots/decodeMessage/nanox.16.png b/test-integration/snapshots/decodeMessage/nanox.16.png new file mode 100644 index 00000000..56eff548 Binary files /dev/null and b/test-integration/snapshots/decodeMessage/nanox.16.png differ diff --git a/test-integration/snapshots/decodeMessage/nanox.17.png b/test-integration/snapshots/decodeMessage/nanox.17.png new file mode 100644 index 00000000..5854c8c5 Binary files /dev/null and b/test-integration/snapshots/decodeMessage/nanox.17.png differ diff --git a/test-integration/snapshots/decodeMessage/nanox.18.png b/test-integration/snapshots/decodeMessage/nanox.18.png new file mode 100644 index 00000000..8ffe94b0 Binary files /dev/null and b/test-integration/snapshots/decodeMessage/nanox.18.png differ diff --git a/test-integration/snapshots/decodeMessage/nanox.19.png b/test-integration/snapshots/decodeMessage/nanox.19.png new file mode 100644 index 00000000..0966b381 Binary files /dev/null and b/test-integration/snapshots/decodeMessage/nanox.19.png differ diff --git a/test-integration/snapshots/decodeMessage/nanox.20.png b/test-integration/snapshots/decodeMessage/nanox.20.png new file mode 100644 index 00000000..c843773c Binary files /dev/null and b/test-integration/snapshots/decodeMessage/nanox.20.png differ diff --git a/test-integration/snapshots/decodeMessage/nanox.21.png b/test-integration/snapshots/decodeMessage/nanox.21.png new file mode 100644 index 00000000..89232403 Binary files /dev/null and b/test-integration/snapshots/decodeMessage/nanox.21.png differ diff --git a/test-integration/snapshots/decodeMessage/nanox.22.png b/test-integration/snapshots/decodeMessage/nanox.22.png new file mode 100644 index 00000000..eb63da2d Binary files /dev/null and b/test-integration/snapshots/decodeMessage/nanox.22.png differ diff --git a/test-integration/snapshots/decodeMessage/nanox.23.png b/test-integration/snapshots/decodeMessage/nanox.23.png new file mode 100644 index 00000000..5d91b1e4 Binary files /dev/null and b/test-integration/snapshots/decodeMessage/nanox.23.png differ diff --git a/test-integration/snapshots/decodeMessage/nanox.24.png b/test-integration/snapshots/decodeMessage/nanox.24.png new file mode 100644 index 00000000..dbe6f3f7 Binary files /dev/null and b/test-integration/snapshots/decodeMessage/nanox.24.png differ diff --git a/test-integration/snapshots/decodeMessage/nanox.25.png b/test-integration/snapshots/decodeMessage/nanox.25.png new file mode 100644 index 00000000..a27c581c Binary files /dev/null and b/test-integration/snapshots/decodeMessage/nanox.25.png differ diff --git a/test-integration/snapshots/decodeMessage/nanox.26.png b/test-integration/snapshots/decodeMessage/nanox.26.png new file mode 100644 index 00000000..94384bb3 Binary files /dev/null and b/test-integration/snapshots/decodeMessage/nanox.26.png differ diff --git a/test-integration/snapshots/decodeMessage/nanox.27.png b/test-integration/snapshots/decodeMessage/nanox.27.png new file mode 100644 index 00000000..e23183a4 Binary files /dev/null and b/test-integration/snapshots/decodeMessage/nanox.27.png differ diff --git a/test-integration/snapshots/decodeMessage/nanox.28.png b/test-integration/snapshots/decodeMessage/nanox.28.png new file mode 100644 index 00000000..56eff548 Binary files /dev/null and b/test-integration/snapshots/decodeMessage/nanox.28.png differ diff --git a/test-integration/snapshots/decodeMessage/nanox.29.png b/test-integration/snapshots/decodeMessage/nanox.29.png new file mode 100644 index 00000000..9fbc447c Binary files /dev/null and b/test-integration/snapshots/decodeMessage/nanox.29.png differ diff --git a/test-integration/snapshots/decodeMessage/nanox.30.png b/test-integration/snapshots/decodeMessage/nanox.30.png new file mode 100644 index 00000000..dc6bcf5b Binary files /dev/null and b/test-integration/snapshots/decodeMessage/nanox.30.png differ diff --git a/test-integration/snapshots/decodeMessage/nanox.31.png b/test-integration/snapshots/decodeMessage/nanox.31.png new file mode 100644 index 00000000..8a50d7e0 Binary files /dev/null and b/test-integration/snapshots/decodeMessage/nanox.31.png differ diff --git a/test-integration/snapshots/decodeMessage/nanox.32.png b/test-integration/snapshots/decodeMessage/nanox.32.png new file mode 100644 index 00000000..0966b381 Binary files /dev/null and b/test-integration/snapshots/decodeMessage/nanox.32.png differ diff --git a/test-integration/snapshots/decodeMessage/nanox.33.png b/test-integration/snapshots/decodeMessage/nanox.33.png new file mode 100644 index 00000000..c843773c Binary files /dev/null and b/test-integration/snapshots/decodeMessage/nanox.33.png differ diff --git a/test-integration/snapshots/decodeMessage/nanox.34.png b/test-integration/snapshots/decodeMessage/nanox.34.png new file mode 100644 index 00000000..89232403 Binary files /dev/null and b/test-integration/snapshots/decodeMessage/nanox.34.png differ diff --git a/test-integration/snapshots/decodeMessage/nanox.35.png b/test-integration/snapshots/decodeMessage/nanox.35.png new file mode 100644 index 00000000..eb63da2d Binary files /dev/null and b/test-integration/snapshots/decodeMessage/nanox.35.png differ diff --git a/test-integration/snapshots/decodeMessage/nanox.36.png b/test-integration/snapshots/decodeMessage/nanox.36.png new file mode 100644 index 00000000..5d91b1e4 Binary files /dev/null and b/test-integration/snapshots/decodeMessage/nanox.36.png differ diff --git a/test-integration/snapshots/decodeMessage/nanox.37.png b/test-integration/snapshots/decodeMessage/nanox.37.png new file mode 100644 index 00000000..7624fa47 Binary files /dev/null and b/test-integration/snapshots/decodeMessage/nanox.37.png differ diff --git a/test-integration/snapshots/decodeMessage/nanox.38.png b/test-integration/snapshots/decodeMessage/nanox.38.png new file mode 100644 index 00000000..759abef5 Binary files /dev/null and b/test-integration/snapshots/decodeMessage/nanox.38.png differ diff --git a/test-integration/snapshots/decodeMessage/nanox.39.png b/test-integration/snapshots/decodeMessage/nanox.39.png new file mode 100644 index 00000000..94384bb3 Binary files /dev/null and b/test-integration/snapshots/decodeMessage/nanox.39.png differ diff --git a/test-integration/snapshots/decodeMessage/nanox.40.png b/test-integration/snapshots/decodeMessage/nanox.40.png new file mode 100644 index 00000000..e23183a4 Binary files /dev/null and b/test-integration/snapshots/decodeMessage/nanox.40.png differ diff --git a/test-integration/snapshots/decodeMessage/nanox.41.png b/test-integration/snapshots/decodeMessage/nanox.41.png new file mode 100644 index 00000000..56eff548 Binary files /dev/null and b/test-integration/snapshots/decodeMessage/nanox.41.png differ diff --git a/test-integration/snapshots/decodeMessage/nanox.42.png b/test-integration/snapshots/decodeMessage/nanox.42.png new file mode 100644 index 00000000..9fbc447c Binary files /dev/null and b/test-integration/snapshots/decodeMessage/nanox.42.png differ diff --git a/test-integration/snapshots/decodeMessage/nanox.43.png b/test-integration/snapshots/decodeMessage/nanox.43.png new file mode 100644 index 00000000..dc6bcf5b Binary files /dev/null and b/test-integration/snapshots/decodeMessage/nanox.43.png differ diff --git a/test-integration/snapshots/decodeMessage/nanox.44.png b/test-integration/snapshots/decodeMessage/nanox.44.png new file mode 100644 index 00000000..d9bc6a61 Binary files /dev/null and b/test-integration/snapshots/decodeMessage/nanox.44.png differ diff --git a/test-integration/snapshots/decodeMessage/nanox.45.png b/test-integration/snapshots/decodeMessage/nanox.45.png new file mode 100644 index 00000000..ae332bd6 Binary files /dev/null and b/test-integration/snapshots/decodeMessage/nanox.45.png differ diff --git a/test-integration/snapshots/decodeMessage/nanox.46.png b/test-integration/snapshots/decodeMessage/nanox.46.png new file mode 100644 index 00000000..0966b381 Binary files /dev/null and b/test-integration/snapshots/decodeMessage/nanox.46.png differ diff --git a/test-integration/snapshots/decodeMessage/nanox.47.png b/test-integration/snapshots/decodeMessage/nanox.47.png new file mode 100644 index 00000000..c843773c Binary files /dev/null and b/test-integration/snapshots/decodeMessage/nanox.47.png differ diff --git a/test-integration/snapshots/decodeMessage/nanox.48.png b/test-integration/snapshots/decodeMessage/nanox.48.png new file mode 100644 index 00000000..89232403 Binary files /dev/null and b/test-integration/snapshots/decodeMessage/nanox.48.png differ diff --git a/test-integration/snapshots/decodeMessage/nanox.49.png b/test-integration/snapshots/decodeMessage/nanox.49.png new file mode 100644 index 00000000..a64aac08 Binary files /dev/null and b/test-integration/snapshots/decodeMessage/nanox.49.png differ diff --git a/test-integration/snapshots/decodeMessage/nanox.50.png b/test-integration/snapshots/decodeMessage/nanox.50.png new file mode 100644 index 00000000..dbe6f3f7 Binary files /dev/null and b/test-integration/snapshots/decodeMessage/nanox.50.png differ diff --git a/test-integration/snapshots/decodeMessage/nanox.51.png b/test-integration/snapshots/decodeMessage/nanox.51.png new file mode 100644 index 00000000..94384bb3 Binary files /dev/null and b/test-integration/snapshots/decodeMessage/nanox.51.png differ diff --git a/test-integration/snapshots/decodeMessage/nanox.52.png b/test-integration/snapshots/decodeMessage/nanox.52.png new file mode 100644 index 00000000..e23183a4 Binary files /dev/null and b/test-integration/snapshots/decodeMessage/nanox.52.png differ diff --git a/test-integration/snapshots/decodeMessage/nanox.53.png b/test-integration/snapshots/decodeMessage/nanox.53.png new file mode 100644 index 00000000..56eff548 Binary files /dev/null and b/test-integration/snapshots/decodeMessage/nanox.53.png differ diff --git a/test-integration/snapshots/decodeMessage/nanox.54.png b/test-integration/snapshots/decodeMessage/nanox.54.png new file mode 100644 index 00000000..8a50d7e0 Binary files /dev/null and b/test-integration/snapshots/decodeMessage/nanox.54.png differ diff --git a/test-integration/snapshots/decodeMessage/nanox.55.png b/test-integration/snapshots/decodeMessage/nanox.55.png new file mode 100644 index 00000000..0966b381 Binary files /dev/null and b/test-integration/snapshots/decodeMessage/nanox.55.png differ diff --git a/test-integration/snapshots/decodeMessage/nanox.56.png b/test-integration/snapshots/decodeMessage/nanox.56.png new file mode 100644 index 00000000..348d43dc Binary files /dev/null and b/test-integration/snapshots/decodeMessage/nanox.56.png differ diff --git a/test-integration/snapshots/decodeMessage/nanox.57.png b/test-integration/snapshots/decodeMessage/nanox.57.png new file mode 100644 index 00000000..c843773c Binary files /dev/null and b/test-integration/snapshots/decodeMessage/nanox.57.png differ diff --git a/test-integration/snapshots/getPublicKey/nanos.01.png b/test-integration/snapshots/getPublicKey/nanos.01.png new file mode 100644 index 00000000..a0f9b734 Binary files /dev/null and b/test-integration/snapshots/getPublicKey/nanos.01.png differ diff --git a/test-integration/snapshots/getPublicKey/nanos.02.png b/test-integration/snapshots/getPublicKey/nanos.02.png new file mode 100644 index 00000000..1a084c53 Binary files /dev/null and b/test-integration/snapshots/getPublicKey/nanos.02.png differ diff --git a/test-integration/snapshots/getPublicKey/nanos.03.png b/test-integration/snapshots/getPublicKey/nanos.03.png new file mode 100644 index 00000000..5b958799 Binary files /dev/null and b/test-integration/snapshots/getPublicKey/nanos.03.png differ diff --git a/test-integration/snapshots/getPublicKey/nanos.04.png b/test-integration/snapshots/getPublicKey/nanos.04.png new file mode 100644 index 00000000..a0f9b734 Binary files /dev/null and b/test-integration/snapshots/getPublicKey/nanos.04.png differ diff --git a/test-integration/snapshots/getPublicKey/nanos.05.png b/test-integration/snapshots/getPublicKey/nanos.05.png new file mode 100644 index 00000000..1a084c53 Binary files /dev/null and b/test-integration/snapshots/getPublicKey/nanos.05.png differ diff --git a/test-integration/snapshots/getPublicKey/nanos.06.png b/test-integration/snapshots/getPublicKey/nanos.06.png new file mode 100644 index 00000000..5b958799 Binary files /dev/null and b/test-integration/snapshots/getPublicKey/nanos.06.png differ diff --git a/test-integration/snapshots/getPublicKey/nanos.07.png b/test-integration/snapshots/getPublicKey/nanos.07.png new file mode 100644 index 00000000..a0f9b734 Binary files /dev/null and b/test-integration/snapshots/getPublicKey/nanos.07.png differ diff --git a/test-integration/snapshots/getPublicKey/nanos.08.png b/test-integration/snapshots/getPublicKey/nanos.08.png new file mode 100644 index 00000000..591d4b3a Binary files /dev/null and b/test-integration/snapshots/getPublicKey/nanos.08.png differ diff --git a/test-integration/snapshots/getPublicKey/nanos.09.png b/test-integration/snapshots/getPublicKey/nanos.09.png new file mode 100644 index 00000000..a7471593 Binary files /dev/null and b/test-integration/snapshots/getPublicKey/nanos.09.png differ diff --git a/test-integration/snapshots/getPublicKey/nanos.10.png b/test-integration/snapshots/getPublicKey/nanos.10.png new file mode 100644 index 00000000..69c83c78 Binary files /dev/null and b/test-integration/snapshots/getPublicKey/nanos.10.png differ diff --git a/test-integration/snapshots/getPublicKey/nanos.11.png b/test-integration/snapshots/getPublicKey/nanos.11.png new file mode 100644 index 00000000..5b958799 Binary files /dev/null and b/test-integration/snapshots/getPublicKey/nanos.11.png differ diff --git a/test-integration/snapshots/getPublicKey/nanos.12.png b/test-integration/snapshots/getPublicKey/nanos.12.png new file mode 100644 index 00000000..a0f9b734 Binary files /dev/null and b/test-integration/snapshots/getPublicKey/nanos.12.png differ diff --git a/test-integration/snapshots/getPublicKey/nanos.13.png b/test-integration/snapshots/getPublicKey/nanos.13.png new file mode 100644 index 00000000..591d4b3a Binary files /dev/null and b/test-integration/snapshots/getPublicKey/nanos.13.png differ diff --git a/test-integration/snapshots/getPublicKey/nanos.14.png b/test-integration/snapshots/getPublicKey/nanos.14.png new file mode 100644 index 00000000..a7471593 Binary files /dev/null and b/test-integration/snapshots/getPublicKey/nanos.14.png differ diff --git a/test-integration/snapshots/getPublicKey/nanos.15.png b/test-integration/snapshots/getPublicKey/nanos.15.png new file mode 100644 index 00000000..69c83c78 Binary files /dev/null and b/test-integration/snapshots/getPublicKey/nanos.15.png differ diff --git a/test-integration/snapshots/getPublicKey/nanos.16.png b/test-integration/snapshots/getPublicKey/nanos.16.png new file mode 100644 index 00000000..5b958799 Binary files /dev/null and b/test-integration/snapshots/getPublicKey/nanos.16.png differ diff --git a/test-integration/snapshots/getPublicKey/nanos.17.png b/test-integration/snapshots/getPublicKey/nanos.17.png new file mode 100644 index 00000000..a0f9b734 Binary files /dev/null and b/test-integration/snapshots/getPublicKey/nanos.17.png differ diff --git a/test-integration/snapshots/getPublicKey/nanosp.01.png b/test-integration/snapshots/getPublicKey/nanosp.01.png new file mode 100644 index 00000000..a7a87405 Binary files /dev/null and b/test-integration/snapshots/getPublicKey/nanosp.01.png differ diff --git a/test-integration/snapshots/getPublicKey/nanosp.02.png b/test-integration/snapshots/getPublicKey/nanosp.02.png new file mode 100644 index 00000000..8ec94d88 Binary files /dev/null and b/test-integration/snapshots/getPublicKey/nanosp.02.png differ diff --git a/test-integration/snapshots/getPublicKey/nanosp.03.png b/test-integration/snapshots/getPublicKey/nanosp.03.png new file mode 100644 index 00000000..50907ccb Binary files /dev/null and b/test-integration/snapshots/getPublicKey/nanosp.03.png differ diff --git a/test-integration/snapshots/getPublicKey/nanosp.04.png b/test-integration/snapshots/getPublicKey/nanosp.04.png new file mode 100644 index 00000000..09ddad6f Binary files /dev/null and b/test-integration/snapshots/getPublicKey/nanosp.04.png differ diff --git a/test-integration/snapshots/getPublicKey/nanosp.05.png b/test-integration/snapshots/getPublicKey/nanosp.05.png new file mode 100644 index 00000000..a7a87405 Binary files /dev/null and b/test-integration/snapshots/getPublicKey/nanosp.05.png differ diff --git a/test-integration/snapshots/getPublicKey/nanosp.06.png b/test-integration/snapshots/getPublicKey/nanosp.06.png new file mode 100644 index 00000000..8ec94d88 Binary files /dev/null and b/test-integration/snapshots/getPublicKey/nanosp.06.png differ diff --git a/test-integration/snapshots/getPublicKey/nanosp.07.png b/test-integration/snapshots/getPublicKey/nanosp.07.png new file mode 100644 index 00000000..50907ccb Binary files /dev/null and b/test-integration/snapshots/getPublicKey/nanosp.07.png differ diff --git a/test-integration/snapshots/getPublicKey/nanosp.08.png b/test-integration/snapshots/getPublicKey/nanosp.08.png new file mode 100644 index 00000000..09ddad6f Binary files /dev/null and b/test-integration/snapshots/getPublicKey/nanosp.08.png differ diff --git a/test-integration/snapshots/getPublicKey/nanosp.09.png b/test-integration/snapshots/getPublicKey/nanosp.09.png new file mode 100644 index 00000000..cbdc0a71 Binary files /dev/null and b/test-integration/snapshots/getPublicKey/nanosp.09.png differ diff --git a/test-integration/snapshots/getPublicKey/nanosp.10.png b/test-integration/snapshots/getPublicKey/nanosp.10.png new file mode 100644 index 00000000..a7a87405 Binary files /dev/null and b/test-integration/snapshots/getPublicKey/nanosp.10.png differ diff --git a/test-integration/snapshots/getPublicKey/nanosp.11.png b/test-integration/snapshots/getPublicKey/nanosp.11.png new file mode 100644 index 00000000..6500f61d Binary files /dev/null and b/test-integration/snapshots/getPublicKey/nanosp.11.png differ diff --git a/test-integration/snapshots/getPublicKey/nanosp.12.png b/test-integration/snapshots/getPublicKey/nanosp.12.png new file mode 100644 index 00000000..93dcd8f2 Binary files /dev/null and b/test-integration/snapshots/getPublicKey/nanosp.12.png differ diff --git a/test-integration/snapshots/getPublicKey/nanosp.13.png b/test-integration/snapshots/getPublicKey/nanosp.13.png new file mode 100644 index 00000000..d83595e4 Binary files /dev/null and b/test-integration/snapshots/getPublicKey/nanosp.13.png differ diff --git a/test-integration/snapshots/getPublicKey/nanosp.14.png b/test-integration/snapshots/getPublicKey/nanosp.14.png new file mode 100644 index 00000000..759123d3 Binary files /dev/null and b/test-integration/snapshots/getPublicKey/nanosp.14.png differ diff --git a/test-integration/snapshots/getPublicKey/nanosp.15.png b/test-integration/snapshots/getPublicKey/nanosp.15.png new file mode 100644 index 00000000..09ddad6f Binary files /dev/null and b/test-integration/snapshots/getPublicKey/nanosp.15.png differ diff --git a/test-integration/snapshots/getPublicKey/nanosp.16.png b/test-integration/snapshots/getPublicKey/nanosp.16.png new file mode 100644 index 00000000..a7a87405 Binary files /dev/null and b/test-integration/snapshots/getPublicKey/nanosp.16.png differ diff --git a/test-integration/snapshots/getPublicKey/nanosp.17.png b/test-integration/snapshots/getPublicKey/nanosp.17.png new file mode 100644 index 00000000..6500f61d Binary files /dev/null and b/test-integration/snapshots/getPublicKey/nanosp.17.png differ diff --git a/test-integration/snapshots/getPublicKey/nanosp.18.png b/test-integration/snapshots/getPublicKey/nanosp.18.png new file mode 100644 index 00000000..93dcd8f2 Binary files /dev/null and b/test-integration/snapshots/getPublicKey/nanosp.18.png differ diff --git a/test-integration/snapshots/getPublicKey/nanosp.19.png b/test-integration/snapshots/getPublicKey/nanosp.19.png new file mode 100644 index 00000000..d83595e4 Binary files /dev/null and b/test-integration/snapshots/getPublicKey/nanosp.19.png differ diff --git a/test-integration/snapshots/getPublicKey/nanosp.20.png b/test-integration/snapshots/getPublicKey/nanosp.20.png new file mode 100644 index 00000000..759123d3 Binary files /dev/null and b/test-integration/snapshots/getPublicKey/nanosp.20.png differ diff --git a/test-integration/snapshots/getPublicKey/nanosp.21.png b/test-integration/snapshots/getPublicKey/nanosp.21.png new file mode 100644 index 00000000..09ddad6f Binary files /dev/null and b/test-integration/snapshots/getPublicKey/nanosp.21.png differ diff --git a/test-integration/snapshots/getPublicKey/nanosp.22.png b/test-integration/snapshots/getPublicKey/nanosp.22.png new file mode 100644 index 00000000..a7a87405 Binary files /dev/null and b/test-integration/snapshots/getPublicKey/nanosp.22.png differ diff --git a/test-integration/snapshots/getPublicKey/nanox.01.png b/test-integration/snapshots/getPublicKey/nanox.01.png new file mode 100644 index 00000000..c843773c Binary files /dev/null and b/test-integration/snapshots/getPublicKey/nanox.01.png differ diff --git a/test-integration/snapshots/getPublicKey/nanox.02.png b/test-integration/snapshots/getPublicKey/nanox.02.png new file mode 100644 index 00000000..8a51e7d7 Binary files /dev/null and b/test-integration/snapshots/getPublicKey/nanox.02.png differ diff --git a/test-integration/snapshots/getPublicKey/nanox.03.png b/test-integration/snapshots/getPublicKey/nanox.03.png new file mode 100644 index 00000000..411eb315 Binary files /dev/null and b/test-integration/snapshots/getPublicKey/nanox.03.png differ diff --git a/test-integration/snapshots/getPublicKey/nanox.04.png b/test-integration/snapshots/getPublicKey/nanox.04.png new file mode 100644 index 00000000..936a20ed Binary files /dev/null and b/test-integration/snapshots/getPublicKey/nanox.04.png differ diff --git a/test-integration/snapshots/getPublicKey/nanox.05.png b/test-integration/snapshots/getPublicKey/nanox.05.png new file mode 100644 index 00000000..c843773c Binary files /dev/null and b/test-integration/snapshots/getPublicKey/nanox.05.png differ diff --git a/test-integration/snapshots/getPublicKey/nanox.06.png b/test-integration/snapshots/getPublicKey/nanox.06.png new file mode 100644 index 00000000..8a51e7d7 Binary files /dev/null and b/test-integration/snapshots/getPublicKey/nanox.06.png differ diff --git a/test-integration/snapshots/getPublicKey/nanox.07.png b/test-integration/snapshots/getPublicKey/nanox.07.png new file mode 100644 index 00000000..411eb315 Binary files /dev/null and b/test-integration/snapshots/getPublicKey/nanox.07.png differ diff --git a/test-integration/snapshots/getPublicKey/nanox.08.png b/test-integration/snapshots/getPublicKey/nanox.08.png new file mode 100644 index 00000000..936a20ed Binary files /dev/null and b/test-integration/snapshots/getPublicKey/nanox.08.png differ diff --git a/test-integration/snapshots/getPublicKey/nanox.09.png b/test-integration/snapshots/getPublicKey/nanox.09.png new file mode 100644 index 00000000..348d43dc Binary files /dev/null and b/test-integration/snapshots/getPublicKey/nanox.09.png differ diff --git a/test-integration/snapshots/getPublicKey/nanox.10.png b/test-integration/snapshots/getPublicKey/nanox.10.png new file mode 100644 index 00000000..c843773c Binary files /dev/null and b/test-integration/snapshots/getPublicKey/nanox.10.png differ diff --git a/test-integration/snapshots/getPublicKey/nanox.11.png b/test-integration/snapshots/getPublicKey/nanox.11.png new file mode 100644 index 00000000..6500f61d Binary files /dev/null and b/test-integration/snapshots/getPublicKey/nanox.11.png differ diff --git a/test-integration/snapshots/getPublicKey/nanox.12.png b/test-integration/snapshots/getPublicKey/nanox.12.png new file mode 100644 index 00000000..81d7ae04 Binary files /dev/null and b/test-integration/snapshots/getPublicKey/nanox.12.png differ diff --git a/test-integration/snapshots/getPublicKey/nanox.13.png b/test-integration/snapshots/getPublicKey/nanox.13.png new file mode 100644 index 00000000..da1533ee Binary files /dev/null and b/test-integration/snapshots/getPublicKey/nanox.13.png differ diff --git a/test-integration/snapshots/getPublicKey/nanox.14.png b/test-integration/snapshots/getPublicKey/nanox.14.png new file mode 100644 index 00000000..7c6e3c34 Binary files /dev/null and b/test-integration/snapshots/getPublicKey/nanox.14.png differ diff --git a/test-integration/snapshots/getPublicKey/nanox.15.png b/test-integration/snapshots/getPublicKey/nanox.15.png new file mode 100644 index 00000000..936a20ed Binary files /dev/null and b/test-integration/snapshots/getPublicKey/nanox.15.png differ diff --git a/test-integration/snapshots/getPublicKey/nanox.16.png b/test-integration/snapshots/getPublicKey/nanox.16.png new file mode 100644 index 00000000..c843773c Binary files /dev/null and b/test-integration/snapshots/getPublicKey/nanox.16.png differ diff --git a/test-integration/snapshots/getPublicKey/nanox.17.png b/test-integration/snapshots/getPublicKey/nanox.17.png new file mode 100644 index 00000000..6500f61d Binary files /dev/null and b/test-integration/snapshots/getPublicKey/nanox.17.png differ diff --git a/test-integration/snapshots/getPublicKey/nanox.18.png b/test-integration/snapshots/getPublicKey/nanox.18.png new file mode 100644 index 00000000..81d7ae04 Binary files /dev/null and b/test-integration/snapshots/getPublicKey/nanox.18.png differ diff --git a/test-integration/snapshots/getPublicKey/nanox.19.png b/test-integration/snapshots/getPublicKey/nanox.19.png new file mode 100644 index 00000000..da1533ee Binary files /dev/null and b/test-integration/snapshots/getPublicKey/nanox.19.png differ diff --git a/test-integration/snapshots/getPublicKey/nanox.20.png b/test-integration/snapshots/getPublicKey/nanox.20.png new file mode 100644 index 00000000..7c6e3c34 Binary files /dev/null and b/test-integration/snapshots/getPublicKey/nanox.20.png differ diff --git a/test-integration/snapshots/getPublicKey/nanox.21.png b/test-integration/snapshots/getPublicKey/nanox.21.png new file mode 100644 index 00000000..936a20ed Binary files /dev/null and b/test-integration/snapshots/getPublicKey/nanox.21.png differ diff --git a/test-integration/snapshots/getPublicKey/nanox.22.png b/test-integration/snapshots/getPublicKey/nanox.22.png new file mode 100644 index 00000000..c843773c Binary files /dev/null and b/test-integration/snapshots/getPublicKey/nanox.22.png differ diff --git a/test-integration/snapshots/getSerial/nanos.01.png b/test-integration/snapshots/getSerial/nanos.01.png new file mode 100644 index 00000000..a0f9b734 Binary files /dev/null and b/test-integration/snapshots/getSerial/nanos.01.png differ diff --git a/test-integration/snapshots/getSerial/nanosp.01.png b/test-integration/snapshots/getSerial/nanosp.01.png new file mode 100644 index 00000000..a7a87405 Binary files /dev/null and b/test-integration/snapshots/getSerial/nanosp.01.png differ diff --git a/test-integration/snapshots/getSerial/nanox.01.png b/test-integration/snapshots/getSerial/nanox.01.png new file mode 100644 index 00000000..c843773c Binary files /dev/null and b/test-integration/snapshots/getSerial/nanox.01.png differ diff --git a/test-integration/snapshots/getVersion/nanos.01.png b/test-integration/snapshots/getVersion/nanos.01.png new file mode 100644 index 00000000..a0f9b734 Binary files /dev/null and b/test-integration/snapshots/getVersion/nanos.01.png differ diff --git a/test-integration/snapshots/getVersion/nanox.01.png b/test-integration/snapshots/getVersion/nanox.01.png new file mode 100644 index 00000000..a7a87405 Binary files /dev/null and b/test-integration/snapshots/getVersion/nanox.01.png differ diff --git a/test-integration/snapshots/runUnitTests/nanos.01.png b/test-integration/snapshots/runUnitTests/nanos.01.png new file mode 100644 index 00000000..a0f9b734 Binary files /dev/null and b/test-integration/snapshots/runUnitTests/nanos.01.png differ diff --git a/test-integration/snapshots/runUnitTests/nanox.01.png b/test-integration/snapshots/runUnitTests/nanox.01.png new file mode 100644 index 00000000..07872435 Binary files /dev/null and b/test-integration/snapshots/runUnitTests/nanox.01.png differ diff --git a/test-integration/snapshots/signTransactionAddaddress/nanos.01.png b/test-integration/snapshots/signTransactionAddaddress/nanos.01.png new file mode 100644 index 00000000..a0f9b734 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddaddress/nanos.01.png differ diff --git a/test-integration/snapshots/signTransactionAddaddress/nanos.02.png b/test-integration/snapshots/signTransactionAddaddress/nanos.02.png new file mode 100644 index 00000000..076a821e Binary files /dev/null and b/test-integration/snapshots/signTransactionAddaddress/nanos.02.png differ diff --git a/test-integration/snapshots/signTransactionAddaddress/nanos.03.png b/test-integration/snapshots/signTransactionAddaddress/nanos.03.png new file mode 100644 index 00000000..c7d6308e Binary files /dev/null and b/test-integration/snapshots/signTransactionAddaddress/nanos.03.png differ diff --git a/test-integration/snapshots/signTransactionAddaddress/nanos.04.png b/test-integration/snapshots/signTransactionAddaddress/nanos.04.png new file mode 100644 index 00000000..961c0c11 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddaddress/nanos.04.png differ diff --git a/test-integration/snapshots/signTransactionAddaddress/nanos.05.png b/test-integration/snapshots/signTransactionAddaddress/nanos.05.png new file mode 100644 index 00000000..715b32c5 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddaddress/nanos.05.png differ diff --git a/test-integration/snapshots/signTransactionAddaddress/nanos.06.png b/test-integration/snapshots/signTransactionAddaddress/nanos.06.png new file mode 100644 index 00000000..b42d7b08 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddaddress/nanos.06.png differ diff --git a/test-integration/snapshots/signTransactionAddaddress/nanos.07.png b/test-integration/snapshots/signTransactionAddaddress/nanos.07.png new file mode 100644 index 00000000..d1eac39e Binary files /dev/null and b/test-integration/snapshots/signTransactionAddaddress/nanos.07.png differ diff --git a/test-integration/snapshots/signTransactionAddaddress/nanos.08.png b/test-integration/snapshots/signTransactionAddaddress/nanos.08.png new file mode 100644 index 00000000..c9de0604 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddaddress/nanos.08.png differ diff --git a/test-integration/snapshots/signTransactionAddaddress/nanos.09.png b/test-integration/snapshots/signTransactionAddaddress/nanos.09.png new file mode 100644 index 00000000..a0f9b734 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddaddress/nanos.09.png differ diff --git a/test-integration/snapshots/signTransactionAddaddress/nanos.10.png b/test-integration/snapshots/signTransactionAddaddress/nanos.10.png new file mode 100644 index 00000000..06140342 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddaddress/nanos.10.png differ diff --git a/test-integration/snapshots/signTransactionAddaddress/nanos.11.png b/test-integration/snapshots/signTransactionAddaddress/nanos.11.png new file mode 100644 index 00000000..c7d6308e Binary files /dev/null and b/test-integration/snapshots/signTransactionAddaddress/nanos.11.png differ diff --git a/test-integration/snapshots/signTransactionAddaddress/nanos.12.png b/test-integration/snapshots/signTransactionAddaddress/nanos.12.png new file mode 100644 index 00000000..961c0c11 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddaddress/nanos.12.png differ diff --git a/test-integration/snapshots/signTransactionAddaddress/nanos.13.png b/test-integration/snapshots/signTransactionAddaddress/nanos.13.png new file mode 100644 index 00000000..715b32c5 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddaddress/nanos.13.png differ diff --git a/test-integration/snapshots/signTransactionAddaddress/nanos.14.png b/test-integration/snapshots/signTransactionAddaddress/nanos.14.png new file mode 100644 index 00000000..dc0ecaf2 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddaddress/nanos.14.png differ diff --git a/test-integration/snapshots/signTransactionAddaddress/nanos.15.png b/test-integration/snapshots/signTransactionAddaddress/nanos.15.png new file mode 100644 index 00000000..b42d7b08 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddaddress/nanos.15.png differ diff --git a/test-integration/snapshots/signTransactionAddaddress/nanos.16.png b/test-integration/snapshots/signTransactionAddaddress/nanos.16.png new file mode 100644 index 00000000..d1eac39e Binary files /dev/null and b/test-integration/snapshots/signTransactionAddaddress/nanos.16.png differ diff --git a/test-integration/snapshots/signTransactionAddaddress/nanos.17.png b/test-integration/snapshots/signTransactionAddaddress/nanos.17.png new file mode 100644 index 00000000..c9de0604 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddaddress/nanos.17.png differ diff --git a/test-integration/snapshots/signTransactionAddaddress/nanos.18.png b/test-integration/snapshots/signTransactionAddaddress/nanos.18.png new file mode 100644 index 00000000..a0f9b734 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddaddress/nanos.18.png differ diff --git a/test-integration/snapshots/signTransactionAddaddress/nanos.19.png b/test-integration/snapshots/signTransactionAddaddress/nanos.19.png new file mode 100644 index 00000000..06140342 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddaddress/nanos.19.png differ diff --git a/test-integration/snapshots/signTransactionAddaddress/nanos.20.png b/test-integration/snapshots/signTransactionAddaddress/nanos.20.png new file mode 100644 index 00000000..c7d6308e Binary files /dev/null and b/test-integration/snapshots/signTransactionAddaddress/nanos.20.png differ diff --git a/test-integration/snapshots/signTransactionAddaddress/nanos.21.png b/test-integration/snapshots/signTransactionAddaddress/nanos.21.png new file mode 100644 index 00000000..961c0c11 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddaddress/nanos.21.png differ diff --git a/test-integration/snapshots/signTransactionAddaddress/nanos.22.png b/test-integration/snapshots/signTransactionAddaddress/nanos.22.png new file mode 100644 index 00000000..715b32c5 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddaddress/nanos.22.png differ diff --git a/test-integration/snapshots/signTransactionAddaddress/nanos.23.png b/test-integration/snapshots/signTransactionAddaddress/nanos.23.png new file mode 100644 index 00000000..55508dc7 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddaddress/nanos.23.png differ diff --git a/test-integration/snapshots/signTransactionAddaddress/nanos.24.png b/test-integration/snapshots/signTransactionAddaddress/nanos.24.png new file mode 100644 index 00000000..d8ba46d5 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddaddress/nanos.24.png differ diff --git a/test-integration/snapshots/signTransactionAddaddress/nanos.25.png b/test-integration/snapshots/signTransactionAddaddress/nanos.25.png new file mode 100644 index 00000000..b42d7b08 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddaddress/nanos.25.png differ diff --git a/test-integration/snapshots/signTransactionAddaddress/nanos.26.png b/test-integration/snapshots/signTransactionAddaddress/nanos.26.png new file mode 100644 index 00000000..d1eac39e Binary files /dev/null and b/test-integration/snapshots/signTransactionAddaddress/nanos.26.png differ diff --git a/test-integration/snapshots/signTransactionAddaddress/nanos.27.png b/test-integration/snapshots/signTransactionAddaddress/nanos.27.png new file mode 100644 index 00000000..c9de0604 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddaddress/nanos.27.png differ diff --git a/test-integration/snapshots/signTransactionAddaddress/nanos.28.png b/test-integration/snapshots/signTransactionAddaddress/nanos.28.png new file mode 100644 index 00000000..a0f9b734 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddaddress/nanos.28.png differ diff --git a/test-integration/snapshots/signTransactionAddaddress/nanos.29.png b/test-integration/snapshots/signTransactionAddaddress/nanos.29.png new file mode 100644 index 00000000..06140342 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddaddress/nanos.29.png differ diff --git a/test-integration/snapshots/signTransactionAddaddress/nanos.30.png b/test-integration/snapshots/signTransactionAddaddress/nanos.30.png new file mode 100644 index 00000000..c7d6308e Binary files /dev/null and b/test-integration/snapshots/signTransactionAddaddress/nanos.30.png differ diff --git a/test-integration/snapshots/signTransactionAddaddress/nanos.31.png b/test-integration/snapshots/signTransactionAddaddress/nanos.31.png new file mode 100644 index 00000000..961c0c11 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddaddress/nanos.31.png differ diff --git a/test-integration/snapshots/signTransactionAddaddress/nanos.32.png b/test-integration/snapshots/signTransactionAddaddress/nanos.32.png new file mode 100644 index 00000000..715b32c5 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddaddress/nanos.32.png differ diff --git a/test-integration/snapshots/signTransactionAddaddress/nanos.33.png b/test-integration/snapshots/signTransactionAddaddress/nanos.33.png new file mode 100644 index 00000000..2186765f Binary files /dev/null and b/test-integration/snapshots/signTransactionAddaddress/nanos.33.png differ diff --git a/test-integration/snapshots/signTransactionAddaddress/nanos.34.png b/test-integration/snapshots/signTransactionAddaddress/nanos.34.png new file mode 100644 index 00000000..d8ba46d5 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddaddress/nanos.34.png differ diff --git a/test-integration/snapshots/signTransactionAddaddress/nanos.35.png b/test-integration/snapshots/signTransactionAddaddress/nanos.35.png new file mode 100644 index 00000000..1a791b10 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddaddress/nanos.35.png differ diff --git a/test-integration/snapshots/signTransactionAddaddress/nanos.36.png b/test-integration/snapshots/signTransactionAddaddress/nanos.36.png new file mode 100644 index 00000000..b42d7b08 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddaddress/nanos.36.png differ diff --git a/test-integration/snapshots/signTransactionAddaddress/nanos.37.png b/test-integration/snapshots/signTransactionAddaddress/nanos.37.png new file mode 100644 index 00000000..d1eac39e Binary files /dev/null and b/test-integration/snapshots/signTransactionAddaddress/nanos.37.png differ diff --git a/test-integration/snapshots/signTransactionAddaddress/nanos.38.png b/test-integration/snapshots/signTransactionAddaddress/nanos.38.png new file mode 100644 index 00000000..c9de0604 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddaddress/nanos.38.png differ diff --git a/test-integration/snapshots/signTransactionAddaddress/nanos.39.png b/test-integration/snapshots/signTransactionAddaddress/nanos.39.png new file mode 100644 index 00000000..a0f9b734 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddaddress/nanos.39.png differ diff --git a/test-integration/snapshots/signTransactionAddaddress/nanos.40.png b/test-integration/snapshots/signTransactionAddaddress/nanos.40.png new file mode 100644 index 00000000..06140342 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddaddress/nanos.40.png differ diff --git a/test-integration/snapshots/signTransactionAddaddress/nanos.41.png b/test-integration/snapshots/signTransactionAddaddress/nanos.41.png new file mode 100644 index 00000000..c7d6308e Binary files /dev/null and b/test-integration/snapshots/signTransactionAddaddress/nanos.41.png differ diff --git a/test-integration/snapshots/signTransactionAddaddress/nanos.42.png b/test-integration/snapshots/signTransactionAddaddress/nanos.42.png new file mode 100644 index 00000000..961c0c11 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddaddress/nanos.42.png differ diff --git a/test-integration/snapshots/signTransactionAddaddress/nanos.43.png b/test-integration/snapshots/signTransactionAddaddress/nanos.43.png new file mode 100644 index 00000000..715b32c5 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddaddress/nanos.43.png differ diff --git a/test-integration/snapshots/signTransactionAddaddress/nanos.44.png b/test-integration/snapshots/signTransactionAddaddress/nanos.44.png new file mode 100644 index 00000000..2186765f Binary files /dev/null and b/test-integration/snapshots/signTransactionAddaddress/nanos.44.png differ diff --git a/test-integration/snapshots/signTransactionAddaddress/nanos.45.png b/test-integration/snapshots/signTransactionAddaddress/nanos.45.png new file mode 100644 index 00000000..d8ba46d5 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddaddress/nanos.45.png differ diff --git a/test-integration/snapshots/signTransactionAddaddress/nanos.46.png b/test-integration/snapshots/signTransactionAddaddress/nanos.46.png new file mode 100644 index 00000000..1a791b10 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddaddress/nanos.46.png differ diff --git a/test-integration/snapshots/signTransactionAddaddress/nanos.47.png b/test-integration/snapshots/signTransactionAddaddress/nanos.47.png new file mode 100644 index 00000000..45727216 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddaddress/nanos.47.png differ diff --git a/test-integration/snapshots/signTransactionAddaddress/nanos.48.png b/test-integration/snapshots/signTransactionAddaddress/nanos.48.png new file mode 100644 index 00000000..b42d7b08 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddaddress/nanos.48.png differ diff --git a/test-integration/snapshots/signTransactionAddaddress/nanos.49.png b/test-integration/snapshots/signTransactionAddaddress/nanos.49.png new file mode 100644 index 00000000..d1eac39e Binary files /dev/null and b/test-integration/snapshots/signTransactionAddaddress/nanos.49.png differ diff --git a/test-integration/snapshots/signTransactionAddaddress/nanos.50.png b/test-integration/snapshots/signTransactionAddaddress/nanos.50.png new file mode 100644 index 00000000..c9de0604 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddaddress/nanos.50.png differ diff --git a/test-integration/snapshots/signTransactionAddaddress/nanos.51.png b/test-integration/snapshots/signTransactionAddaddress/nanos.51.png new file mode 100644 index 00000000..a0f9b734 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddaddress/nanos.51.png differ diff --git a/test-integration/snapshots/signTransactionAddaddress/nanosp.01.png b/test-integration/snapshots/signTransactionAddaddress/nanosp.01.png new file mode 100644 index 00000000..a7a87405 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddaddress/nanosp.01.png differ diff --git a/test-integration/snapshots/signTransactionAddaddress/nanosp.02.png b/test-integration/snapshots/signTransactionAddaddress/nanosp.02.png new file mode 100644 index 00000000..ada3168c Binary files /dev/null and b/test-integration/snapshots/signTransactionAddaddress/nanosp.02.png differ diff --git a/test-integration/snapshots/signTransactionAddaddress/nanosp.03.png b/test-integration/snapshots/signTransactionAddaddress/nanosp.03.png new file mode 100644 index 00000000..4b5bc3ab Binary files /dev/null and b/test-integration/snapshots/signTransactionAddaddress/nanosp.03.png differ diff --git a/test-integration/snapshots/signTransactionAddaddress/nanosp.04.png b/test-integration/snapshots/signTransactionAddaddress/nanosp.04.png new file mode 100644 index 00000000..c1dd7f06 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddaddress/nanosp.04.png differ diff --git a/test-integration/snapshots/signTransactionAddaddress/nanosp.05.png b/test-integration/snapshots/signTransactionAddaddress/nanosp.05.png new file mode 100644 index 00000000..f9daa857 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddaddress/nanosp.05.png differ diff --git a/test-integration/snapshots/signTransactionAddaddress/nanosp.06.png b/test-integration/snapshots/signTransactionAddaddress/nanosp.06.png new file mode 100644 index 00000000..07574cbb Binary files /dev/null and b/test-integration/snapshots/signTransactionAddaddress/nanosp.06.png differ diff --git a/test-integration/snapshots/signTransactionAddaddress/nanosp.07.png b/test-integration/snapshots/signTransactionAddaddress/nanosp.07.png new file mode 100644 index 00000000..34e5ceab Binary files /dev/null and b/test-integration/snapshots/signTransactionAddaddress/nanosp.07.png differ diff --git a/test-integration/snapshots/signTransactionAddaddress/nanosp.08.png b/test-integration/snapshots/signTransactionAddaddress/nanosp.08.png new file mode 100644 index 00000000..6f7fe29c Binary files /dev/null and b/test-integration/snapshots/signTransactionAddaddress/nanosp.08.png differ diff --git a/test-integration/snapshots/signTransactionAddaddress/nanosp.09.png b/test-integration/snapshots/signTransactionAddaddress/nanosp.09.png new file mode 100644 index 00000000..8ac15c6d Binary files /dev/null and b/test-integration/snapshots/signTransactionAddaddress/nanosp.09.png differ diff --git a/test-integration/snapshots/signTransactionAddaddress/nanosp.10.png b/test-integration/snapshots/signTransactionAddaddress/nanosp.10.png new file mode 100644 index 00000000..525864b4 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddaddress/nanosp.10.png differ diff --git a/test-integration/snapshots/signTransactionAddaddress/nanosp.11.png b/test-integration/snapshots/signTransactionAddaddress/nanosp.11.png new file mode 100644 index 00000000..a7a87405 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddaddress/nanosp.11.png differ diff --git a/test-integration/snapshots/signTransactionAddaddress/nanosp.12.png b/test-integration/snapshots/signTransactionAddaddress/nanosp.12.png new file mode 100644 index 00000000..8e0d2a37 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddaddress/nanosp.12.png differ diff --git a/test-integration/snapshots/signTransactionAddaddress/nanosp.13.png b/test-integration/snapshots/signTransactionAddaddress/nanosp.13.png new file mode 100644 index 00000000..4b5bc3ab Binary files /dev/null and b/test-integration/snapshots/signTransactionAddaddress/nanosp.13.png differ diff --git a/test-integration/snapshots/signTransactionAddaddress/nanosp.14.png b/test-integration/snapshots/signTransactionAddaddress/nanosp.14.png new file mode 100644 index 00000000..c1dd7f06 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddaddress/nanosp.14.png differ diff --git a/test-integration/snapshots/signTransactionAddaddress/nanosp.15.png b/test-integration/snapshots/signTransactionAddaddress/nanosp.15.png new file mode 100644 index 00000000..f9daa857 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddaddress/nanosp.15.png differ diff --git a/test-integration/snapshots/signTransactionAddaddress/nanosp.16.png b/test-integration/snapshots/signTransactionAddaddress/nanosp.16.png new file mode 100644 index 00000000..07574cbb Binary files /dev/null and b/test-integration/snapshots/signTransactionAddaddress/nanosp.16.png differ diff --git a/test-integration/snapshots/signTransactionAddaddress/nanosp.17.png b/test-integration/snapshots/signTransactionAddaddress/nanosp.17.png new file mode 100644 index 00000000..7de90fc3 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddaddress/nanosp.17.png differ diff --git a/test-integration/snapshots/signTransactionAddaddress/nanosp.18.png b/test-integration/snapshots/signTransactionAddaddress/nanosp.18.png new file mode 100644 index 00000000..34e5ceab Binary files /dev/null and b/test-integration/snapshots/signTransactionAddaddress/nanosp.18.png differ diff --git a/test-integration/snapshots/signTransactionAddaddress/nanosp.19.png b/test-integration/snapshots/signTransactionAddaddress/nanosp.19.png new file mode 100644 index 00000000..6f7fe29c Binary files /dev/null and b/test-integration/snapshots/signTransactionAddaddress/nanosp.19.png differ diff --git a/test-integration/snapshots/signTransactionAddaddress/nanosp.20.png b/test-integration/snapshots/signTransactionAddaddress/nanosp.20.png new file mode 100644 index 00000000..8ac15c6d Binary files /dev/null and b/test-integration/snapshots/signTransactionAddaddress/nanosp.20.png differ diff --git a/test-integration/snapshots/signTransactionAddaddress/nanosp.21.png b/test-integration/snapshots/signTransactionAddaddress/nanosp.21.png new file mode 100644 index 00000000..525864b4 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddaddress/nanosp.21.png differ diff --git a/test-integration/snapshots/signTransactionAddaddress/nanosp.22.png b/test-integration/snapshots/signTransactionAddaddress/nanosp.22.png new file mode 100644 index 00000000..a7a87405 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddaddress/nanosp.22.png differ diff --git a/test-integration/snapshots/signTransactionAddaddress/nanosp.23.png b/test-integration/snapshots/signTransactionAddaddress/nanosp.23.png new file mode 100644 index 00000000..8e0d2a37 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddaddress/nanosp.23.png differ diff --git a/test-integration/snapshots/signTransactionAddaddress/nanosp.24.png b/test-integration/snapshots/signTransactionAddaddress/nanosp.24.png new file mode 100644 index 00000000..4b5bc3ab Binary files /dev/null and b/test-integration/snapshots/signTransactionAddaddress/nanosp.24.png differ diff --git a/test-integration/snapshots/signTransactionAddaddress/nanosp.25.png b/test-integration/snapshots/signTransactionAddaddress/nanosp.25.png new file mode 100644 index 00000000..c1dd7f06 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddaddress/nanosp.25.png differ diff --git a/test-integration/snapshots/signTransactionAddaddress/nanosp.26.png b/test-integration/snapshots/signTransactionAddaddress/nanosp.26.png new file mode 100644 index 00000000..f9daa857 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddaddress/nanosp.26.png differ diff --git a/test-integration/snapshots/signTransactionAddaddress/nanosp.27.png b/test-integration/snapshots/signTransactionAddaddress/nanosp.27.png new file mode 100644 index 00000000..07574cbb Binary files /dev/null and b/test-integration/snapshots/signTransactionAddaddress/nanosp.27.png differ diff --git a/test-integration/snapshots/signTransactionAddaddress/nanosp.28.png b/test-integration/snapshots/signTransactionAddaddress/nanosp.28.png new file mode 100644 index 00000000..6f2ed5c1 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddaddress/nanosp.28.png differ diff --git a/test-integration/snapshots/signTransactionAddaddress/nanosp.29.png b/test-integration/snapshots/signTransactionAddaddress/nanosp.29.png new file mode 100644 index 00000000..9dd74af9 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddaddress/nanosp.29.png differ diff --git a/test-integration/snapshots/signTransactionAddaddress/nanosp.30.png b/test-integration/snapshots/signTransactionAddaddress/nanosp.30.png new file mode 100644 index 00000000..34e5ceab Binary files /dev/null and b/test-integration/snapshots/signTransactionAddaddress/nanosp.30.png differ diff --git a/test-integration/snapshots/signTransactionAddaddress/nanosp.31.png b/test-integration/snapshots/signTransactionAddaddress/nanosp.31.png new file mode 100644 index 00000000..6f7fe29c Binary files /dev/null and b/test-integration/snapshots/signTransactionAddaddress/nanosp.31.png differ diff --git a/test-integration/snapshots/signTransactionAddaddress/nanosp.32.png b/test-integration/snapshots/signTransactionAddaddress/nanosp.32.png new file mode 100644 index 00000000..8ac15c6d Binary files /dev/null and b/test-integration/snapshots/signTransactionAddaddress/nanosp.32.png differ diff --git a/test-integration/snapshots/signTransactionAddaddress/nanosp.33.png b/test-integration/snapshots/signTransactionAddaddress/nanosp.33.png new file mode 100644 index 00000000..525864b4 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddaddress/nanosp.33.png differ diff --git a/test-integration/snapshots/signTransactionAddaddress/nanosp.34.png b/test-integration/snapshots/signTransactionAddaddress/nanosp.34.png new file mode 100644 index 00000000..a7a87405 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddaddress/nanosp.34.png differ diff --git a/test-integration/snapshots/signTransactionAddaddress/nanosp.35.png b/test-integration/snapshots/signTransactionAddaddress/nanosp.35.png new file mode 100644 index 00000000..8e0d2a37 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddaddress/nanosp.35.png differ diff --git a/test-integration/snapshots/signTransactionAddaddress/nanosp.36.png b/test-integration/snapshots/signTransactionAddaddress/nanosp.36.png new file mode 100644 index 00000000..4b5bc3ab Binary files /dev/null and b/test-integration/snapshots/signTransactionAddaddress/nanosp.36.png differ diff --git a/test-integration/snapshots/signTransactionAddaddress/nanosp.37.png b/test-integration/snapshots/signTransactionAddaddress/nanosp.37.png new file mode 100644 index 00000000..c1dd7f06 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddaddress/nanosp.37.png differ diff --git a/test-integration/snapshots/signTransactionAddaddress/nanosp.38.png b/test-integration/snapshots/signTransactionAddaddress/nanosp.38.png new file mode 100644 index 00000000..f9daa857 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddaddress/nanosp.38.png differ diff --git a/test-integration/snapshots/signTransactionAddaddress/nanosp.39.png b/test-integration/snapshots/signTransactionAddaddress/nanosp.39.png new file mode 100644 index 00000000..07574cbb Binary files /dev/null and b/test-integration/snapshots/signTransactionAddaddress/nanosp.39.png differ diff --git a/test-integration/snapshots/signTransactionAddaddress/nanosp.40.png b/test-integration/snapshots/signTransactionAddaddress/nanosp.40.png new file mode 100644 index 00000000..5ebc4ffd Binary files /dev/null and b/test-integration/snapshots/signTransactionAddaddress/nanosp.40.png differ diff --git a/test-integration/snapshots/signTransactionAddaddress/nanosp.41.png b/test-integration/snapshots/signTransactionAddaddress/nanosp.41.png new file mode 100644 index 00000000..9dd74af9 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddaddress/nanosp.41.png differ diff --git a/test-integration/snapshots/signTransactionAddaddress/nanosp.42.png b/test-integration/snapshots/signTransactionAddaddress/nanosp.42.png new file mode 100644 index 00000000..85bc4b28 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddaddress/nanosp.42.png differ diff --git a/test-integration/snapshots/signTransactionAddaddress/nanosp.43.png b/test-integration/snapshots/signTransactionAddaddress/nanosp.43.png new file mode 100644 index 00000000..34e5ceab Binary files /dev/null and b/test-integration/snapshots/signTransactionAddaddress/nanosp.43.png differ diff --git a/test-integration/snapshots/signTransactionAddaddress/nanosp.44.png b/test-integration/snapshots/signTransactionAddaddress/nanosp.44.png new file mode 100644 index 00000000..6f7fe29c Binary files /dev/null and b/test-integration/snapshots/signTransactionAddaddress/nanosp.44.png differ diff --git a/test-integration/snapshots/signTransactionAddaddress/nanosp.45.png b/test-integration/snapshots/signTransactionAddaddress/nanosp.45.png new file mode 100644 index 00000000..8ac15c6d Binary files /dev/null and b/test-integration/snapshots/signTransactionAddaddress/nanosp.45.png differ diff --git a/test-integration/snapshots/signTransactionAddaddress/nanosp.46.png b/test-integration/snapshots/signTransactionAddaddress/nanosp.46.png new file mode 100644 index 00000000..525864b4 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddaddress/nanosp.46.png differ diff --git a/test-integration/snapshots/signTransactionAddaddress/nanosp.47.png b/test-integration/snapshots/signTransactionAddaddress/nanosp.47.png new file mode 100644 index 00000000..a7a87405 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddaddress/nanosp.47.png differ diff --git a/test-integration/snapshots/signTransactionAddaddress/nanosp.48.png b/test-integration/snapshots/signTransactionAddaddress/nanosp.48.png new file mode 100644 index 00000000..8e0d2a37 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddaddress/nanosp.48.png differ diff --git a/test-integration/snapshots/signTransactionAddaddress/nanosp.49.png b/test-integration/snapshots/signTransactionAddaddress/nanosp.49.png new file mode 100644 index 00000000..4b5bc3ab Binary files /dev/null and b/test-integration/snapshots/signTransactionAddaddress/nanosp.49.png differ diff --git a/test-integration/snapshots/signTransactionAddaddress/nanosp.50.png b/test-integration/snapshots/signTransactionAddaddress/nanosp.50.png new file mode 100644 index 00000000..c1dd7f06 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddaddress/nanosp.50.png differ diff --git a/test-integration/snapshots/signTransactionAddaddress/nanosp.51.png b/test-integration/snapshots/signTransactionAddaddress/nanosp.51.png new file mode 100644 index 00000000..f9daa857 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddaddress/nanosp.51.png differ diff --git a/test-integration/snapshots/signTransactionAddaddress/nanosp.52.png b/test-integration/snapshots/signTransactionAddaddress/nanosp.52.png new file mode 100644 index 00000000..07574cbb Binary files /dev/null and b/test-integration/snapshots/signTransactionAddaddress/nanosp.52.png differ diff --git a/test-integration/snapshots/signTransactionAddaddress/nanosp.53.png b/test-integration/snapshots/signTransactionAddaddress/nanosp.53.png new file mode 100644 index 00000000..5ebc4ffd Binary files /dev/null and b/test-integration/snapshots/signTransactionAddaddress/nanosp.53.png differ diff --git a/test-integration/snapshots/signTransactionAddaddress/nanosp.54.png b/test-integration/snapshots/signTransactionAddaddress/nanosp.54.png new file mode 100644 index 00000000..9dd74af9 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddaddress/nanosp.54.png differ diff --git a/test-integration/snapshots/signTransactionAddaddress/nanosp.55.png b/test-integration/snapshots/signTransactionAddaddress/nanosp.55.png new file mode 100644 index 00000000..85bc4b28 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddaddress/nanosp.55.png differ diff --git a/test-integration/snapshots/signTransactionAddaddress/nanosp.56.png b/test-integration/snapshots/signTransactionAddaddress/nanosp.56.png new file mode 100644 index 00000000..57361d73 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddaddress/nanosp.56.png differ diff --git a/test-integration/snapshots/signTransactionAddaddress/nanosp.57.png b/test-integration/snapshots/signTransactionAddaddress/nanosp.57.png new file mode 100644 index 00000000..34e5ceab Binary files /dev/null and b/test-integration/snapshots/signTransactionAddaddress/nanosp.57.png differ diff --git a/test-integration/snapshots/signTransactionAddaddress/nanosp.58.png b/test-integration/snapshots/signTransactionAddaddress/nanosp.58.png new file mode 100644 index 00000000..6f7fe29c Binary files /dev/null and b/test-integration/snapshots/signTransactionAddaddress/nanosp.58.png differ diff --git a/test-integration/snapshots/signTransactionAddaddress/nanosp.59.png b/test-integration/snapshots/signTransactionAddaddress/nanosp.59.png new file mode 100644 index 00000000..8ac15c6d Binary files /dev/null and b/test-integration/snapshots/signTransactionAddaddress/nanosp.59.png differ diff --git a/test-integration/snapshots/signTransactionAddaddress/nanosp.60.png b/test-integration/snapshots/signTransactionAddaddress/nanosp.60.png new file mode 100644 index 00000000..525864b4 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddaddress/nanosp.60.png differ diff --git a/test-integration/snapshots/signTransactionAddaddress/nanosp.61.png b/test-integration/snapshots/signTransactionAddaddress/nanosp.61.png new file mode 100644 index 00000000..a7a87405 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddaddress/nanosp.61.png differ diff --git a/test-integration/snapshots/signTransactionAddaddress/nanox.01.png b/test-integration/snapshots/signTransactionAddaddress/nanox.01.png new file mode 100644 index 00000000..c843773c Binary files /dev/null and b/test-integration/snapshots/signTransactionAddaddress/nanox.01.png differ diff --git a/test-integration/snapshots/signTransactionAddaddress/nanox.02.png b/test-integration/snapshots/signTransactionAddaddress/nanox.02.png new file mode 100644 index 00000000..ada3168c Binary files /dev/null and b/test-integration/snapshots/signTransactionAddaddress/nanox.02.png differ diff --git a/test-integration/snapshots/signTransactionAddaddress/nanox.03.png b/test-integration/snapshots/signTransactionAddaddress/nanox.03.png new file mode 100644 index 00000000..7d8c81e3 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddaddress/nanox.03.png differ diff --git a/test-integration/snapshots/signTransactionAddaddress/nanox.04.png b/test-integration/snapshots/signTransactionAddaddress/nanox.04.png new file mode 100644 index 00000000..c90cc3d9 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddaddress/nanox.04.png differ diff --git a/test-integration/snapshots/signTransactionAddaddress/nanox.05.png b/test-integration/snapshots/signTransactionAddaddress/nanox.05.png new file mode 100644 index 00000000..432c6913 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddaddress/nanox.05.png differ diff --git a/test-integration/snapshots/signTransactionAddaddress/nanox.06.png b/test-integration/snapshots/signTransactionAddaddress/nanox.06.png new file mode 100644 index 00000000..335e8e79 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddaddress/nanox.06.png differ diff --git a/test-integration/snapshots/signTransactionAddaddress/nanox.07.png b/test-integration/snapshots/signTransactionAddaddress/nanox.07.png new file mode 100644 index 00000000..34e5ceab Binary files /dev/null and b/test-integration/snapshots/signTransactionAddaddress/nanox.07.png differ diff --git a/test-integration/snapshots/signTransactionAddaddress/nanox.08.png b/test-integration/snapshots/signTransactionAddaddress/nanox.08.png new file mode 100644 index 00000000..4b4b7f83 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddaddress/nanox.08.png differ diff --git a/test-integration/snapshots/signTransactionAddaddress/nanox.09.png b/test-integration/snapshots/signTransactionAddaddress/nanox.09.png new file mode 100644 index 00000000..5d0997ef Binary files /dev/null and b/test-integration/snapshots/signTransactionAddaddress/nanox.09.png differ diff --git a/test-integration/snapshots/signTransactionAddaddress/nanox.10.png b/test-integration/snapshots/signTransactionAddaddress/nanox.10.png new file mode 100644 index 00000000..2f8f58e6 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddaddress/nanox.10.png differ diff --git a/test-integration/snapshots/signTransactionAddaddress/nanox.11.png b/test-integration/snapshots/signTransactionAddaddress/nanox.11.png new file mode 100644 index 00000000..c843773c Binary files /dev/null and b/test-integration/snapshots/signTransactionAddaddress/nanox.11.png differ diff --git a/test-integration/snapshots/signTransactionAddaddress/nanox.12.png b/test-integration/snapshots/signTransactionAddaddress/nanox.12.png new file mode 100644 index 00000000..8e0d2a37 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddaddress/nanox.12.png differ diff --git a/test-integration/snapshots/signTransactionAddaddress/nanox.13.png b/test-integration/snapshots/signTransactionAddaddress/nanox.13.png new file mode 100644 index 00000000..7d8c81e3 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddaddress/nanox.13.png differ diff --git a/test-integration/snapshots/signTransactionAddaddress/nanox.14.png b/test-integration/snapshots/signTransactionAddaddress/nanox.14.png new file mode 100644 index 00000000..c90cc3d9 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddaddress/nanox.14.png differ diff --git a/test-integration/snapshots/signTransactionAddaddress/nanox.15.png b/test-integration/snapshots/signTransactionAddaddress/nanox.15.png new file mode 100644 index 00000000..432c6913 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddaddress/nanox.15.png differ diff --git a/test-integration/snapshots/signTransactionAddaddress/nanox.16.png b/test-integration/snapshots/signTransactionAddaddress/nanox.16.png new file mode 100644 index 00000000..335e8e79 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddaddress/nanox.16.png differ diff --git a/test-integration/snapshots/signTransactionAddaddress/nanox.17.png b/test-integration/snapshots/signTransactionAddaddress/nanox.17.png new file mode 100644 index 00000000..3898b521 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddaddress/nanox.17.png differ diff --git a/test-integration/snapshots/signTransactionAddaddress/nanox.18.png b/test-integration/snapshots/signTransactionAddaddress/nanox.18.png new file mode 100644 index 00000000..34e5ceab Binary files /dev/null and b/test-integration/snapshots/signTransactionAddaddress/nanox.18.png differ diff --git a/test-integration/snapshots/signTransactionAddaddress/nanox.19.png b/test-integration/snapshots/signTransactionAddaddress/nanox.19.png new file mode 100644 index 00000000..4b4b7f83 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddaddress/nanox.19.png differ diff --git a/test-integration/snapshots/signTransactionAddaddress/nanox.20.png b/test-integration/snapshots/signTransactionAddaddress/nanox.20.png new file mode 100644 index 00000000..5d0997ef Binary files /dev/null and b/test-integration/snapshots/signTransactionAddaddress/nanox.20.png differ diff --git a/test-integration/snapshots/signTransactionAddaddress/nanox.21.png b/test-integration/snapshots/signTransactionAddaddress/nanox.21.png new file mode 100644 index 00000000..2f8f58e6 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddaddress/nanox.21.png differ diff --git a/test-integration/snapshots/signTransactionAddaddress/nanox.22.png b/test-integration/snapshots/signTransactionAddaddress/nanox.22.png new file mode 100644 index 00000000..c843773c Binary files /dev/null and b/test-integration/snapshots/signTransactionAddaddress/nanox.22.png differ diff --git a/test-integration/snapshots/signTransactionAddaddress/nanox.23.png b/test-integration/snapshots/signTransactionAddaddress/nanox.23.png new file mode 100644 index 00000000..8e0d2a37 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddaddress/nanox.23.png differ diff --git a/test-integration/snapshots/signTransactionAddaddress/nanox.24.png b/test-integration/snapshots/signTransactionAddaddress/nanox.24.png new file mode 100644 index 00000000..7d8c81e3 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddaddress/nanox.24.png differ diff --git a/test-integration/snapshots/signTransactionAddaddress/nanox.25.png b/test-integration/snapshots/signTransactionAddaddress/nanox.25.png new file mode 100644 index 00000000..c90cc3d9 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddaddress/nanox.25.png differ diff --git a/test-integration/snapshots/signTransactionAddaddress/nanox.26.png b/test-integration/snapshots/signTransactionAddaddress/nanox.26.png new file mode 100644 index 00000000..432c6913 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddaddress/nanox.26.png differ diff --git a/test-integration/snapshots/signTransactionAddaddress/nanox.27.png b/test-integration/snapshots/signTransactionAddaddress/nanox.27.png new file mode 100644 index 00000000..335e8e79 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddaddress/nanox.27.png differ diff --git a/test-integration/snapshots/signTransactionAddaddress/nanox.28.png b/test-integration/snapshots/signTransactionAddaddress/nanox.28.png new file mode 100644 index 00000000..06cd83b0 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddaddress/nanox.28.png differ diff --git a/test-integration/snapshots/signTransactionAddaddress/nanox.29.png b/test-integration/snapshots/signTransactionAddaddress/nanox.29.png new file mode 100644 index 00000000..997b97fb Binary files /dev/null and b/test-integration/snapshots/signTransactionAddaddress/nanox.29.png differ diff --git a/test-integration/snapshots/signTransactionAddaddress/nanox.30.png b/test-integration/snapshots/signTransactionAddaddress/nanox.30.png new file mode 100644 index 00000000..34e5ceab Binary files /dev/null and b/test-integration/snapshots/signTransactionAddaddress/nanox.30.png differ diff --git a/test-integration/snapshots/signTransactionAddaddress/nanox.31.png b/test-integration/snapshots/signTransactionAddaddress/nanox.31.png new file mode 100644 index 00000000..4b4b7f83 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddaddress/nanox.31.png differ diff --git a/test-integration/snapshots/signTransactionAddaddress/nanox.32.png b/test-integration/snapshots/signTransactionAddaddress/nanox.32.png new file mode 100644 index 00000000..5d0997ef Binary files /dev/null and b/test-integration/snapshots/signTransactionAddaddress/nanox.32.png differ diff --git a/test-integration/snapshots/signTransactionAddaddress/nanox.33.png b/test-integration/snapshots/signTransactionAddaddress/nanox.33.png new file mode 100644 index 00000000..2f8f58e6 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddaddress/nanox.33.png differ diff --git a/test-integration/snapshots/signTransactionAddaddress/nanox.34.png b/test-integration/snapshots/signTransactionAddaddress/nanox.34.png new file mode 100644 index 00000000..c843773c Binary files /dev/null and b/test-integration/snapshots/signTransactionAddaddress/nanox.34.png differ diff --git a/test-integration/snapshots/signTransactionAddaddress/nanox.35.png b/test-integration/snapshots/signTransactionAddaddress/nanox.35.png new file mode 100644 index 00000000..8e0d2a37 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddaddress/nanox.35.png differ diff --git a/test-integration/snapshots/signTransactionAddaddress/nanox.36.png b/test-integration/snapshots/signTransactionAddaddress/nanox.36.png new file mode 100644 index 00000000..7d8c81e3 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddaddress/nanox.36.png differ diff --git a/test-integration/snapshots/signTransactionAddaddress/nanox.37.png b/test-integration/snapshots/signTransactionAddaddress/nanox.37.png new file mode 100644 index 00000000..c90cc3d9 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddaddress/nanox.37.png differ diff --git a/test-integration/snapshots/signTransactionAddaddress/nanox.38.png b/test-integration/snapshots/signTransactionAddaddress/nanox.38.png new file mode 100644 index 00000000..432c6913 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddaddress/nanox.38.png differ diff --git a/test-integration/snapshots/signTransactionAddaddress/nanox.39.png b/test-integration/snapshots/signTransactionAddaddress/nanox.39.png new file mode 100644 index 00000000..335e8e79 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddaddress/nanox.39.png differ diff --git a/test-integration/snapshots/signTransactionAddaddress/nanox.40.png b/test-integration/snapshots/signTransactionAddaddress/nanox.40.png new file mode 100644 index 00000000..24d42318 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddaddress/nanox.40.png differ diff --git a/test-integration/snapshots/signTransactionAddaddress/nanox.41.png b/test-integration/snapshots/signTransactionAddaddress/nanox.41.png new file mode 100644 index 00000000..997b97fb Binary files /dev/null and b/test-integration/snapshots/signTransactionAddaddress/nanox.41.png differ diff --git a/test-integration/snapshots/signTransactionAddaddress/nanox.42.png b/test-integration/snapshots/signTransactionAddaddress/nanox.42.png new file mode 100644 index 00000000..8325832e Binary files /dev/null and b/test-integration/snapshots/signTransactionAddaddress/nanox.42.png differ diff --git a/test-integration/snapshots/signTransactionAddaddress/nanox.43.png b/test-integration/snapshots/signTransactionAddaddress/nanox.43.png new file mode 100644 index 00000000..34e5ceab Binary files /dev/null and b/test-integration/snapshots/signTransactionAddaddress/nanox.43.png differ diff --git a/test-integration/snapshots/signTransactionAddaddress/nanox.44.png b/test-integration/snapshots/signTransactionAddaddress/nanox.44.png new file mode 100644 index 00000000..4b4b7f83 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddaddress/nanox.44.png differ diff --git a/test-integration/snapshots/signTransactionAddaddress/nanox.45.png b/test-integration/snapshots/signTransactionAddaddress/nanox.45.png new file mode 100644 index 00000000..5d0997ef Binary files /dev/null and b/test-integration/snapshots/signTransactionAddaddress/nanox.45.png differ diff --git a/test-integration/snapshots/signTransactionAddaddress/nanox.46.png b/test-integration/snapshots/signTransactionAddaddress/nanox.46.png new file mode 100644 index 00000000..2f8f58e6 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddaddress/nanox.46.png differ diff --git a/test-integration/snapshots/signTransactionAddaddress/nanox.47.png b/test-integration/snapshots/signTransactionAddaddress/nanox.47.png new file mode 100644 index 00000000..c843773c Binary files /dev/null and b/test-integration/snapshots/signTransactionAddaddress/nanox.47.png differ diff --git a/test-integration/snapshots/signTransactionAddaddress/nanox.48.png b/test-integration/snapshots/signTransactionAddaddress/nanox.48.png new file mode 100644 index 00000000..8e0d2a37 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddaddress/nanox.48.png differ diff --git a/test-integration/snapshots/signTransactionAddaddress/nanox.49.png b/test-integration/snapshots/signTransactionAddaddress/nanox.49.png new file mode 100644 index 00000000..7d8c81e3 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddaddress/nanox.49.png differ diff --git a/test-integration/snapshots/signTransactionAddaddress/nanox.50.png b/test-integration/snapshots/signTransactionAddaddress/nanox.50.png new file mode 100644 index 00000000..c90cc3d9 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddaddress/nanox.50.png differ diff --git a/test-integration/snapshots/signTransactionAddaddress/nanox.51.png b/test-integration/snapshots/signTransactionAddaddress/nanox.51.png new file mode 100644 index 00000000..432c6913 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddaddress/nanox.51.png differ diff --git a/test-integration/snapshots/signTransactionAddaddress/nanox.52.png b/test-integration/snapshots/signTransactionAddaddress/nanox.52.png new file mode 100644 index 00000000..335e8e79 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddaddress/nanox.52.png differ diff --git a/test-integration/snapshots/signTransactionAddaddress/nanox.53.png b/test-integration/snapshots/signTransactionAddaddress/nanox.53.png new file mode 100644 index 00000000..24d42318 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddaddress/nanox.53.png differ diff --git a/test-integration/snapshots/signTransactionAddaddress/nanox.54.png b/test-integration/snapshots/signTransactionAddaddress/nanox.54.png new file mode 100644 index 00000000..997b97fb Binary files /dev/null and b/test-integration/snapshots/signTransactionAddaddress/nanox.54.png differ diff --git a/test-integration/snapshots/signTransactionAddaddress/nanox.55.png b/test-integration/snapshots/signTransactionAddaddress/nanox.55.png new file mode 100644 index 00000000..8325832e Binary files /dev/null and b/test-integration/snapshots/signTransactionAddaddress/nanox.55.png differ diff --git a/test-integration/snapshots/signTransactionAddaddress/nanox.56.png b/test-integration/snapshots/signTransactionAddaddress/nanox.56.png new file mode 100644 index 00000000..73150ce0 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddaddress/nanox.56.png differ diff --git a/test-integration/snapshots/signTransactionAddaddress/nanox.57.png b/test-integration/snapshots/signTransactionAddaddress/nanox.57.png new file mode 100644 index 00000000..34e5ceab Binary files /dev/null and b/test-integration/snapshots/signTransactionAddaddress/nanox.57.png differ diff --git a/test-integration/snapshots/signTransactionAddaddress/nanox.58.png b/test-integration/snapshots/signTransactionAddaddress/nanox.58.png new file mode 100644 index 00000000..4b4b7f83 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddaddress/nanox.58.png differ diff --git a/test-integration/snapshots/signTransactionAddaddress/nanox.59.png b/test-integration/snapshots/signTransactionAddaddress/nanox.59.png new file mode 100644 index 00000000..5d0997ef Binary files /dev/null and b/test-integration/snapshots/signTransactionAddaddress/nanox.59.png differ diff --git a/test-integration/snapshots/signTransactionAddaddress/nanox.60.png b/test-integration/snapshots/signTransactionAddaddress/nanox.60.png new file mode 100644 index 00000000..2f8f58e6 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddaddress/nanox.60.png differ diff --git a/test-integration/snapshots/signTransactionAddaddress/nanox.61.png b/test-integration/snapshots/signTransactionAddaddress/nanox.61.png new file mode 100644 index 00000000..c843773c Binary files /dev/null and b/test-integration/snapshots/signTransactionAddaddress/nanox.61.png differ diff --git a/test-integration/snapshots/signTransactionAddnft/nanos.01.png b/test-integration/snapshots/signTransactionAddnft/nanos.01.png new file mode 100644 index 00000000..a0f9b734 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddnft/nanos.01.png differ diff --git a/test-integration/snapshots/signTransactionAddnft/nanos.02.png b/test-integration/snapshots/signTransactionAddnft/nanos.02.png new file mode 100644 index 00000000..076a821e Binary files /dev/null and b/test-integration/snapshots/signTransactionAddnft/nanos.02.png differ diff --git a/test-integration/snapshots/signTransactionAddnft/nanos.03.png b/test-integration/snapshots/signTransactionAddnft/nanos.03.png new file mode 100644 index 00000000..878cf2d5 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddnft/nanos.03.png differ diff --git a/test-integration/snapshots/signTransactionAddnft/nanos.04.png b/test-integration/snapshots/signTransactionAddnft/nanos.04.png new file mode 100644 index 00000000..961c0c11 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddnft/nanos.04.png differ diff --git a/test-integration/snapshots/signTransactionAddnft/nanos.05.png b/test-integration/snapshots/signTransactionAddnft/nanos.05.png new file mode 100644 index 00000000..3408c80d Binary files /dev/null and b/test-integration/snapshots/signTransactionAddnft/nanos.05.png differ diff --git a/test-integration/snapshots/signTransactionAddnft/nanos.06.png b/test-integration/snapshots/signTransactionAddnft/nanos.06.png new file mode 100644 index 00000000..5ad55e09 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddnft/nanos.06.png differ diff --git a/test-integration/snapshots/signTransactionAddnft/nanos.07.png b/test-integration/snapshots/signTransactionAddnft/nanos.07.png new file mode 100644 index 00000000..b7c85496 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddnft/nanos.07.png differ diff --git a/test-integration/snapshots/signTransactionAddnft/nanos.08.png b/test-integration/snapshots/signTransactionAddnft/nanos.08.png new file mode 100644 index 00000000..afef6551 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddnft/nanos.08.png differ diff --git a/test-integration/snapshots/signTransactionAddnft/nanos.09.png b/test-integration/snapshots/signTransactionAddnft/nanos.09.png new file mode 100644 index 00000000..b42d7b08 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddnft/nanos.09.png differ diff --git a/test-integration/snapshots/signTransactionAddnft/nanos.10.png b/test-integration/snapshots/signTransactionAddnft/nanos.10.png new file mode 100644 index 00000000..d1eac39e Binary files /dev/null and b/test-integration/snapshots/signTransactionAddnft/nanos.10.png differ diff --git a/test-integration/snapshots/signTransactionAddnft/nanos.11.png b/test-integration/snapshots/signTransactionAddnft/nanos.11.png new file mode 100644 index 00000000..c9de0604 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddnft/nanos.11.png differ diff --git a/test-integration/snapshots/signTransactionAddnft/nanos.12.png b/test-integration/snapshots/signTransactionAddnft/nanos.12.png new file mode 100644 index 00000000..a0f9b734 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddnft/nanos.12.png differ diff --git a/test-integration/snapshots/signTransactionAddnft/nanos.13.png b/test-integration/snapshots/signTransactionAddnft/nanos.13.png new file mode 100644 index 00000000..06140342 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddnft/nanos.13.png differ diff --git a/test-integration/snapshots/signTransactionAddnft/nanos.14.png b/test-integration/snapshots/signTransactionAddnft/nanos.14.png new file mode 100644 index 00000000..878cf2d5 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddnft/nanos.14.png differ diff --git a/test-integration/snapshots/signTransactionAddnft/nanos.15.png b/test-integration/snapshots/signTransactionAddnft/nanos.15.png new file mode 100644 index 00000000..961c0c11 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddnft/nanos.15.png differ diff --git a/test-integration/snapshots/signTransactionAddnft/nanos.16.png b/test-integration/snapshots/signTransactionAddnft/nanos.16.png new file mode 100644 index 00000000..3408c80d Binary files /dev/null and b/test-integration/snapshots/signTransactionAddnft/nanos.16.png differ diff --git a/test-integration/snapshots/signTransactionAddnft/nanos.17.png b/test-integration/snapshots/signTransactionAddnft/nanos.17.png new file mode 100644 index 00000000..5ad55e09 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddnft/nanos.17.png differ diff --git a/test-integration/snapshots/signTransactionAddnft/nanos.18.png b/test-integration/snapshots/signTransactionAddnft/nanos.18.png new file mode 100644 index 00000000..b7c85496 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddnft/nanos.18.png differ diff --git a/test-integration/snapshots/signTransactionAddnft/nanos.19.png b/test-integration/snapshots/signTransactionAddnft/nanos.19.png new file mode 100644 index 00000000..afef6551 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddnft/nanos.19.png differ diff --git a/test-integration/snapshots/signTransactionAddnft/nanos.20.png b/test-integration/snapshots/signTransactionAddnft/nanos.20.png new file mode 100644 index 00000000..448e15cb Binary files /dev/null and b/test-integration/snapshots/signTransactionAddnft/nanos.20.png differ diff --git a/test-integration/snapshots/signTransactionAddnft/nanos.21.png b/test-integration/snapshots/signTransactionAddnft/nanos.21.png new file mode 100644 index 00000000..48bd8f6b Binary files /dev/null and b/test-integration/snapshots/signTransactionAddnft/nanos.21.png differ diff --git a/test-integration/snapshots/signTransactionAddnft/nanos.22.png b/test-integration/snapshots/signTransactionAddnft/nanos.22.png new file mode 100644 index 00000000..bd19cd61 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddnft/nanos.22.png differ diff --git a/test-integration/snapshots/signTransactionAddnft/nanos.23.png b/test-integration/snapshots/signTransactionAddnft/nanos.23.png new file mode 100644 index 00000000..226d954b Binary files /dev/null and b/test-integration/snapshots/signTransactionAddnft/nanos.23.png differ diff --git a/test-integration/snapshots/signTransactionAddnft/nanos.24.png b/test-integration/snapshots/signTransactionAddnft/nanos.24.png new file mode 100644 index 00000000..b42d7b08 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddnft/nanos.24.png differ diff --git a/test-integration/snapshots/signTransactionAddnft/nanos.25.png b/test-integration/snapshots/signTransactionAddnft/nanos.25.png new file mode 100644 index 00000000..d1eac39e Binary files /dev/null and b/test-integration/snapshots/signTransactionAddnft/nanos.25.png differ diff --git a/test-integration/snapshots/signTransactionAddnft/nanos.26.png b/test-integration/snapshots/signTransactionAddnft/nanos.26.png new file mode 100644 index 00000000..c9de0604 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddnft/nanos.26.png differ diff --git a/test-integration/snapshots/signTransactionAddnft/nanos.27.png b/test-integration/snapshots/signTransactionAddnft/nanos.27.png new file mode 100644 index 00000000..a0f9b734 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddnft/nanos.27.png differ diff --git a/test-integration/snapshots/signTransactionAddnft/nanos.28.png b/test-integration/snapshots/signTransactionAddnft/nanos.28.png new file mode 100644 index 00000000..06140342 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddnft/nanos.28.png differ diff --git a/test-integration/snapshots/signTransactionAddnft/nanos.29.png b/test-integration/snapshots/signTransactionAddnft/nanos.29.png new file mode 100644 index 00000000..878cf2d5 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddnft/nanos.29.png differ diff --git a/test-integration/snapshots/signTransactionAddnft/nanos.30.png b/test-integration/snapshots/signTransactionAddnft/nanos.30.png new file mode 100644 index 00000000..961c0c11 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddnft/nanos.30.png differ diff --git a/test-integration/snapshots/signTransactionAddnft/nanos.31.png b/test-integration/snapshots/signTransactionAddnft/nanos.31.png new file mode 100644 index 00000000..3408c80d Binary files /dev/null and b/test-integration/snapshots/signTransactionAddnft/nanos.31.png differ diff --git a/test-integration/snapshots/signTransactionAddnft/nanos.32.png b/test-integration/snapshots/signTransactionAddnft/nanos.32.png new file mode 100644 index 00000000..5ad55e09 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddnft/nanos.32.png differ diff --git a/test-integration/snapshots/signTransactionAddnft/nanos.33.png b/test-integration/snapshots/signTransactionAddnft/nanos.33.png new file mode 100644 index 00000000..b7c85496 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddnft/nanos.33.png differ diff --git a/test-integration/snapshots/signTransactionAddnft/nanos.34.png b/test-integration/snapshots/signTransactionAddnft/nanos.34.png new file mode 100644 index 00000000..afef6551 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddnft/nanos.34.png differ diff --git a/test-integration/snapshots/signTransactionAddnft/nanos.35.png b/test-integration/snapshots/signTransactionAddnft/nanos.35.png new file mode 100644 index 00000000..448e15cb Binary files /dev/null and b/test-integration/snapshots/signTransactionAddnft/nanos.35.png differ diff --git a/test-integration/snapshots/signTransactionAddnft/nanos.36.png b/test-integration/snapshots/signTransactionAddnft/nanos.36.png new file mode 100644 index 00000000..48bd8f6b Binary files /dev/null and b/test-integration/snapshots/signTransactionAddnft/nanos.36.png differ diff --git a/test-integration/snapshots/signTransactionAddnft/nanos.37.png b/test-integration/snapshots/signTransactionAddnft/nanos.37.png new file mode 100644 index 00000000..bd19cd61 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddnft/nanos.37.png differ diff --git a/test-integration/snapshots/signTransactionAddnft/nanos.38.png b/test-integration/snapshots/signTransactionAddnft/nanos.38.png new file mode 100644 index 00000000..226d954b Binary files /dev/null and b/test-integration/snapshots/signTransactionAddnft/nanos.38.png differ diff --git a/test-integration/snapshots/signTransactionAddnft/nanos.39.png b/test-integration/snapshots/signTransactionAddnft/nanos.39.png new file mode 100644 index 00000000..a3a5f8f9 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddnft/nanos.39.png differ diff --git a/test-integration/snapshots/signTransactionAddnft/nanos.40.png b/test-integration/snapshots/signTransactionAddnft/nanos.40.png new file mode 100644 index 00000000..3522021d Binary files /dev/null and b/test-integration/snapshots/signTransactionAddnft/nanos.40.png differ diff --git a/test-integration/snapshots/signTransactionAddnft/nanos.41.png b/test-integration/snapshots/signTransactionAddnft/nanos.41.png new file mode 100644 index 00000000..b9b73169 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddnft/nanos.41.png differ diff --git a/test-integration/snapshots/signTransactionAddnft/nanos.42.png b/test-integration/snapshots/signTransactionAddnft/nanos.42.png new file mode 100644 index 00000000..d04d159d Binary files /dev/null and b/test-integration/snapshots/signTransactionAddnft/nanos.42.png differ diff --git a/test-integration/snapshots/signTransactionAddnft/nanos.43.png b/test-integration/snapshots/signTransactionAddnft/nanos.43.png new file mode 100644 index 00000000..b42d7b08 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddnft/nanos.43.png differ diff --git a/test-integration/snapshots/signTransactionAddnft/nanos.44.png b/test-integration/snapshots/signTransactionAddnft/nanos.44.png new file mode 100644 index 00000000..d1eac39e Binary files /dev/null and b/test-integration/snapshots/signTransactionAddnft/nanos.44.png differ diff --git a/test-integration/snapshots/signTransactionAddnft/nanos.45.png b/test-integration/snapshots/signTransactionAddnft/nanos.45.png new file mode 100644 index 00000000..c9de0604 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddnft/nanos.45.png differ diff --git a/test-integration/snapshots/signTransactionAddnft/nanos.46.png b/test-integration/snapshots/signTransactionAddnft/nanos.46.png new file mode 100644 index 00000000..a0f9b734 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddnft/nanos.46.png differ diff --git a/test-integration/snapshots/signTransactionAddnft/nanosp.01.png b/test-integration/snapshots/signTransactionAddnft/nanosp.01.png new file mode 100644 index 00000000..a7a87405 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddnft/nanosp.01.png differ diff --git a/test-integration/snapshots/signTransactionAddnft/nanosp.02.png b/test-integration/snapshots/signTransactionAddnft/nanosp.02.png new file mode 100644 index 00000000..ada3168c Binary files /dev/null and b/test-integration/snapshots/signTransactionAddnft/nanosp.02.png differ diff --git a/test-integration/snapshots/signTransactionAddnft/nanosp.03.png b/test-integration/snapshots/signTransactionAddnft/nanosp.03.png new file mode 100644 index 00000000..59e91efe Binary files /dev/null and b/test-integration/snapshots/signTransactionAddnft/nanosp.03.png differ diff --git a/test-integration/snapshots/signTransactionAddnft/nanosp.04.png b/test-integration/snapshots/signTransactionAddnft/nanosp.04.png new file mode 100644 index 00000000..c1dd7f06 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddnft/nanosp.04.png differ diff --git a/test-integration/snapshots/signTransactionAddnft/nanosp.05.png b/test-integration/snapshots/signTransactionAddnft/nanosp.05.png new file mode 100644 index 00000000..f9daa857 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddnft/nanosp.05.png differ diff --git a/test-integration/snapshots/signTransactionAddnft/nanosp.06.png b/test-integration/snapshots/signTransactionAddnft/nanosp.06.png new file mode 100644 index 00000000..3a4a3270 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddnft/nanosp.06.png differ diff --git a/test-integration/snapshots/signTransactionAddnft/nanosp.07.png b/test-integration/snapshots/signTransactionAddnft/nanosp.07.png new file mode 100644 index 00000000..d3fc7747 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddnft/nanosp.07.png differ diff --git a/test-integration/snapshots/signTransactionAddnft/nanosp.08.png b/test-integration/snapshots/signTransactionAddnft/nanosp.08.png new file mode 100644 index 00000000..928e1056 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddnft/nanosp.08.png differ diff --git a/test-integration/snapshots/signTransactionAddnft/nanosp.09.png b/test-integration/snapshots/signTransactionAddnft/nanosp.09.png new file mode 100644 index 00000000..c3ac3fd8 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddnft/nanosp.09.png differ diff --git a/test-integration/snapshots/signTransactionAddnft/nanosp.10.png b/test-integration/snapshots/signTransactionAddnft/nanosp.10.png new file mode 100644 index 00000000..34e5ceab Binary files /dev/null and b/test-integration/snapshots/signTransactionAddnft/nanosp.10.png differ diff --git a/test-integration/snapshots/signTransactionAddnft/nanosp.11.png b/test-integration/snapshots/signTransactionAddnft/nanosp.11.png new file mode 100644 index 00000000..6f7fe29c Binary files /dev/null and b/test-integration/snapshots/signTransactionAddnft/nanosp.11.png differ diff --git a/test-integration/snapshots/signTransactionAddnft/nanosp.12.png b/test-integration/snapshots/signTransactionAddnft/nanosp.12.png new file mode 100644 index 00000000..8ac15c6d Binary files /dev/null and b/test-integration/snapshots/signTransactionAddnft/nanosp.12.png differ diff --git a/test-integration/snapshots/signTransactionAddnft/nanosp.13.png b/test-integration/snapshots/signTransactionAddnft/nanosp.13.png new file mode 100644 index 00000000..525864b4 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddnft/nanosp.13.png differ diff --git a/test-integration/snapshots/signTransactionAddnft/nanosp.14.png b/test-integration/snapshots/signTransactionAddnft/nanosp.14.png new file mode 100644 index 00000000..a7a87405 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddnft/nanosp.14.png differ diff --git a/test-integration/snapshots/signTransactionAddnft/nanosp.15.png b/test-integration/snapshots/signTransactionAddnft/nanosp.15.png new file mode 100644 index 00000000..8e0d2a37 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddnft/nanosp.15.png differ diff --git a/test-integration/snapshots/signTransactionAddnft/nanosp.16.png b/test-integration/snapshots/signTransactionAddnft/nanosp.16.png new file mode 100644 index 00000000..59e91efe Binary files /dev/null and b/test-integration/snapshots/signTransactionAddnft/nanosp.16.png differ diff --git a/test-integration/snapshots/signTransactionAddnft/nanosp.17.png b/test-integration/snapshots/signTransactionAddnft/nanosp.17.png new file mode 100644 index 00000000..c1dd7f06 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddnft/nanosp.17.png differ diff --git a/test-integration/snapshots/signTransactionAddnft/nanosp.18.png b/test-integration/snapshots/signTransactionAddnft/nanosp.18.png new file mode 100644 index 00000000..f9daa857 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddnft/nanosp.18.png differ diff --git a/test-integration/snapshots/signTransactionAddnft/nanosp.19.png b/test-integration/snapshots/signTransactionAddnft/nanosp.19.png new file mode 100644 index 00000000..3a4a3270 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddnft/nanosp.19.png differ diff --git a/test-integration/snapshots/signTransactionAddnft/nanosp.20.png b/test-integration/snapshots/signTransactionAddnft/nanosp.20.png new file mode 100644 index 00000000..d3fc7747 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddnft/nanosp.20.png differ diff --git a/test-integration/snapshots/signTransactionAddnft/nanosp.21.png b/test-integration/snapshots/signTransactionAddnft/nanosp.21.png new file mode 100644 index 00000000..928e1056 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddnft/nanosp.21.png differ diff --git a/test-integration/snapshots/signTransactionAddnft/nanosp.22.png b/test-integration/snapshots/signTransactionAddnft/nanosp.22.png new file mode 100644 index 00000000..c3ac3fd8 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddnft/nanosp.22.png differ diff --git a/test-integration/snapshots/signTransactionAddnft/nanosp.23.png b/test-integration/snapshots/signTransactionAddnft/nanosp.23.png new file mode 100644 index 00000000..bbcd093d Binary files /dev/null and b/test-integration/snapshots/signTransactionAddnft/nanosp.23.png differ diff --git a/test-integration/snapshots/signTransactionAddnft/nanosp.24.png b/test-integration/snapshots/signTransactionAddnft/nanosp.24.png new file mode 100644 index 00000000..0816ce82 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddnft/nanosp.24.png differ diff --git a/test-integration/snapshots/signTransactionAddnft/nanosp.25.png b/test-integration/snapshots/signTransactionAddnft/nanosp.25.png new file mode 100644 index 00000000..e17bdfa9 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddnft/nanosp.25.png differ diff --git a/test-integration/snapshots/signTransactionAddnft/nanosp.26.png b/test-integration/snapshots/signTransactionAddnft/nanosp.26.png new file mode 100644 index 00000000..174e77ab Binary files /dev/null and b/test-integration/snapshots/signTransactionAddnft/nanosp.26.png differ diff --git a/test-integration/snapshots/signTransactionAddnft/nanosp.27.png b/test-integration/snapshots/signTransactionAddnft/nanosp.27.png new file mode 100644 index 00000000..34e5ceab Binary files /dev/null and b/test-integration/snapshots/signTransactionAddnft/nanosp.27.png differ diff --git a/test-integration/snapshots/signTransactionAddnft/nanosp.28.png b/test-integration/snapshots/signTransactionAddnft/nanosp.28.png new file mode 100644 index 00000000..6f7fe29c Binary files /dev/null and b/test-integration/snapshots/signTransactionAddnft/nanosp.28.png differ diff --git a/test-integration/snapshots/signTransactionAddnft/nanosp.29.png b/test-integration/snapshots/signTransactionAddnft/nanosp.29.png new file mode 100644 index 00000000..8ac15c6d Binary files /dev/null and b/test-integration/snapshots/signTransactionAddnft/nanosp.29.png differ diff --git a/test-integration/snapshots/signTransactionAddnft/nanosp.30.png b/test-integration/snapshots/signTransactionAddnft/nanosp.30.png new file mode 100644 index 00000000..525864b4 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddnft/nanosp.30.png differ diff --git a/test-integration/snapshots/signTransactionAddnft/nanosp.31.png b/test-integration/snapshots/signTransactionAddnft/nanosp.31.png new file mode 100644 index 00000000..a7a87405 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddnft/nanosp.31.png differ diff --git a/test-integration/snapshots/signTransactionAddnft/nanosp.32.png b/test-integration/snapshots/signTransactionAddnft/nanosp.32.png new file mode 100644 index 00000000..8e0d2a37 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddnft/nanosp.32.png differ diff --git a/test-integration/snapshots/signTransactionAddnft/nanosp.33.png b/test-integration/snapshots/signTransactionAddnft/nanosp.33.png new file mode 100644 index 00000000..59e91efe Binary files /dev/null and b/test-integration/snapshots/signTransactionAddnft/nanosp.33.png differ diff --git a/test-integration/snapshots/signTransactionAddnft/nanosp.34.png b/test-integration/snapshots/signTransactionAddnft/nanosp.34.png new file mode 100644 index 00000000..c1dd7f06 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddnft/nanosp.34.png differ diff --git a/test-integration/snapshots/signTransactionAddnft/nanosp.35.png b/test-integration/snapshots/signTransactionAddnft/nanosp.35.png new file mode 100644 index 00000000..f9daa857 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddnft/nanosp.35.png differ diff --git a/test-integration/snapshots/signTransactionAddnft/nanosp.36.png b/test-integration/snapshots/signTransactionAddnft/nanosp.36.png new file mode 100644 index 00000000..3a4a3270 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddnft/nanosp.36.png differ diff --git a/test-integration/snapshots/signTransactionAddnft/nanosp.37.png b/test-integration/snapshots/signTransactionAddnft/nanosp.37.png new file mode 100644 index 00000000..d3fc7747 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddnft/nanosp.37.png differ diff --git a/test-integration/snapshots/signTransactionAddnft/nanosp.38.png b/test-integration/snapshots/signTransactionAddnft/nanosp.38.png new file mode 100644 index 00000000..928e1056 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddnft/nanosp.38.png differ diff --git a/test-integration/snapshots/signTransactionAddnft/nanosp.39.png b/test-integration/snapshots/signTransactionAddnft/nanosp.39.png new file mode 100644 index 00000000..c3ac3fd8 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddnft/nanosp.39.png differ diff --git a/test-integration/snapshots/signTransactionAddnft/nanosp.40.png b/test-integration/snapshots/signTransactionAddnft/nanosp.40.png new file mode 100644 index 00000000..bbcd093d Binary files /dev/null and b/test-integration/snapshots/signTransactionAddnft/nanosp.40.png differ diff --git a/test-integration/snapshots/signTransactionAddnft/nanosp.41.png b/test-integration/snapshots/signTransactionAddnft/nanosp.41.png new file mode 100644 index 00000000..0816ce82 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddnft/nanosp.41.png differ diff --git a/test-integration/snapshots/signTransactionAddnft/nanosp.42.png b/test-integration/snapshots/signTransactionAddnft/nanosp.42.png new file mode 100644 index 00000000..e17bdfa9 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddnft/nanosp.42.png differ diff --git a/test-integration/snapshots/signTransactionAddnft/nanosp.43.png b/test-integration/snapshots/signTransactionAddnft/nanosp.43.png new file mode 100644 index 00000000..174e77ab Binary files /dev/null and b/test-integration/snapshots/signTransactionAddnft/nanosp.43.png differ diff --git a/test-integration/snapshots/signTransactionAddnft/nanosp.44.png b/test-integration/snapshots/signTransactionAddnft/nanosp.44.png new file mode 100644 index 00000000..ca5570e4 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddnft/nanosp.44.png differ diff --git a/test-integration/snapshots/signTransactionAddnft/nanosp.45.png b/test-integration/snapshots/signTransactionAddnft/nanosp.45.png new file mode 100644 index 00000000..aed1a686 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddnft/nanosp.45.png differ diff --git a/test-integration/snapshots/signTransactionAddnft/nanosp.46.png b/test-integration/snapshots/signTransactionAddnft/nanosp.46.png new file mode 100644 index 00000000..dbef48d4 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddnft/nanosp.46.png differ diff --git a/test-integration/snapshots/signTransactionAddnft/nanosp.47.png b/test-integration/snapshots/signTransactionAddnft/nanosp.47.png new file mode 100644 index 00000000..360b7921 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddnft/nanosp.47.png differ diff --git a/test-integration/snapshots/signTransactionAddnft/nanosp.48.png b/test-integration/snapshots/signTransactionAddnft/nanosp.48.png new file mode 100644 index 00000000..557725c6 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddnft/nanosp.48.png differ diff --git a/test-integration/snapshots/signTransactionAddnft/nanosp.49.png b/test-integration/snapshots/signTransactionAddnft/nanosp.49.png new file mode 100644 index 00000000..34e5ceab Binary files /dev/null and b/test-integration/snapshots/signTransactionAddnft/nanosp.49.png differ diff --git a/test-integration/snapshots/signTransactionAddnft/nanosp.50.png b/test-integration/snapshots/signTransactionAddnft/nanosp.50.png new file mode 100644 index 00000000..6f7fe29c Binary files /dev/null and b/test-integration/snapshots/signTransactionAddnft/nanosp.50.png differ diff --git a/test-integration/snapshots/signTransactionAddnft/nanosp.51.png b/test-integration/snapshots/signTransactionAddnft/nanosp.51.png new file mode 100644 index 00000000..8ac15c6d Binary files /dev/null and b/test-integration/snapshots/signTransactionAddnft/nanosp.51.png differ diff --git a/test-integration/snapshots/signTransactionAddnft/nanosp.52.png b/test-integration/snapshots/signTransactionAddnft/nanosp.52.png new file mode 100644 index 00000000..525864b4 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddnft/nanosp.52.png differ diff --git a/test-integration/snapshots/signTransactionAddnft/nanosp.53.png b/test-integration/snapshots/signTransactionAddnft/nanosp.53.png new file mode 100644 index 00000000..a7a87405 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddnft/nanosp.53.png differ diff --git a/test-integration/snapshots/signTransactionAddnft/nanox.01.png b/test-integration/snapshots/signTransactionAddnft/nanox.01.png new file mode 100644 index 00000000..c843773c Binary files /dev/null and b/test-integration/snapshots/signTransactionAddnft/nanox.01.png differ diff --git a/test-integration/snapshots/signTransactionAddnft/nanox.02.png b/test-integration/snapshots/signTransactionAddnft/nanox.02.png new file mode 100644 index 00000000..ada3168c Binary files /dev/null and b/test-integration/snapshots/signTransactionAddnft/nanox.02.png differ diff --git a/test-integration/snapshots/signTransactionAddnft/nanox.03.png b/test-integration/snapshots/signTransactionAddnft/nanox.03.png new file mode 100644 index 00000000..59e91efe Binary files /dev/null and b/test-integration/snapshots/signTransactionAddnft/nanox.03.png differ diff --git a/test-integration/snapshots/signTransactionAddnft/nanox.04.png b/test-integration/snapshots/signTransactionAddnft/nanox.04.png new file mode 100644 index 00000000..c90cc3d9 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddnft/nanox.04.png differ diff --git a/test-integration/snapshots/signTransactionAddnft/nanox.05.png b/test-integration/snapshots/signTransactionAddnft/nanox.05.png new file mode 100644 index 00000000..432c6913 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddnft/nanox.05.png differ diff --git a/test-integration/snapshots/signTransactionAddnft/nanox.06.png b/test-integration/snapshots/signTransactionAddnft/nanox.06.png new file mode 100644 index 00000000..272e4d1b Binary files /dev/null and b/test-integration/snapshots/signTransactionAddnft/nanox.06.png differ diff --git a/test-integration/snapshots/signTransactionAddnft/nanox.07.png b/test-integration/snapshots/signTransactionAddnft/nanox.07.png new file mode 100644 index 00000000..d3fc7747 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddnft/nanox.07.png differ diff --git a/test-integration/snapshots/signTransactionAddnft/nanox.08.png b/test-integration/snapshots/signTransactionAddnft/nanox.08.png new file mode 100644 index 00000000..2f9e9a54 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddnft/nanox.08.png differ diff --git a/test-integration/snapshots/signTransactionAddnft/nanox.09.png b/test-integration/snapshots/signTransactionAddnft/nanox.09.png new file mode 100644 index 00000000..c3ac3fd8 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddnft/nanox.09.png differ diff --git a/test-integration/snapshots/signTransactionAddnft/nanox.10.png b/test-integration/snapshots/signTransactionAddnft/nanox.10.png new file mode 100644 index 00000000..34e5ceab Binary files /dev/null and b/test-integration/snapshots/signTransactionAddnft/nanox.10.png differ diff --git a/test-integration/snapshots/signTransactionAddnft/nanox.11.png b/test-integration/snapshots/signTransactionAddnft/nanox.11.png new file mode 100644 index 00000000..4b4b7f83 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddnft/nanox.11.png differ diff --git a/test-integration/snapshots/signTransactionAddnft/nanox.12.png b/test-integration/snapshots/signTransactionAddnft/nanox.12.png new file mode 100644 index 00000000..5d0997ef Binary files /dev/null and b/test-integration/snapshots/signTransactionAddnft/nanox.12.png differ diff --git a/test-integration/snapshots/signTransactionAddnft/nanox.13.png b/test-integration/snapshots/signTransactionAddnft/nanox.13.png new file mode 100644 index 00000000..2f8f58e6 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddnft/nanox.13.png differ diff --git a/test-integration/snapshots/signTransactionAddnft/nanox.14.png b/test-integration/snapshots/signTransactionAddnft/nanox.14.png new file mode 100644 index 00000000..c843773c Binary files /dev/null and b/test-integration/snapshots/signTransactionAddnft/nanox.14.png differ diff --git a/test-integration/snapshots/signTransactionAddnft/nanox.15.png b/test-integration/snapshots/signTransactionAddnft/nanox.15.png new file mode 100644 index 00000000..8e0d2a37 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddnft/nanox.15.png differ diff --git a/test-integration/snapshots/signTransactionAddnft/nanox.16.png b/test-integration/snapshots/signTransactionAddnft/nanox.16.png new file mode 100644 index 00000000..59e91efe Binary files /dev/null and b/test-integration/snapshots/signTransactionAddnft/nanox.16.png differ diff --git a/test-integration/snapshots/signTransactionAddnft/nanox.17.png b/test-integration/snapshots/signTransactionAddnft/nanox.17.png new file mode 100644 index 00000000..c90cc3d9 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddnft/nanox.17.png differ diff --git a/test-integration/snapshots/signTransactionAddnft/nanox.18.png b/test-integration/snapshots/signTransactionAddnft/nanox.18.png new file mode 100644 index 00000000..432c6913 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddnft/nanox.18.png differ diff --git a/test-integration/snapshots/signTransactionAddnft/nanox.19.png b/test-integration/snapshots/signTransactionAddnft/nanox.19.png new file mode 100644 index 00000000..272e4d1b Binary files /dev/null and b/test-integration/snapshots/signTransactionAddnft/nanox.19.png differ diff --git a/test-integration/snapshots/signTransactionAddnft/nanox.20.png b/test-integration/snapshots/signTransactionAddnft/nanox.20.png new file mode 100644 index 00000000..d3fc7747 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddnft/nanox.20.png differ diff --git a/test-integration/snapshots/signTransactionAddnft/nanox.21.png b/test-integration/snapshots/signTransactionAddnft/nanox.21.png new file mode 100644 index 00000000..2f9e9a54 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddnft/nanox.21.png differ diff --git a/test-integration/snapshots/signTransactionAddnft/nanox.22.png b/test-integration/snapshots/signTransactionAddnft/nanox.22.png new file mode 100644 index 00000000..c3ac3fd8 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddnft/nanox.22.png differ diff --git a/test-integration/snapshots/signTransactionAddnft/nanox.23.png b/test-integration/snapshots/signTransactionAddnft/nanox.23.png new file mode 100644 index 00000000..c52915e3 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddnft/nanox.23.png differ diff --git a/test-integration/snapshots/signTransactionAddnft/nanox.24.png b/test-integration/snapshots/signTransactionAddnft/nanox.24.png new file mode 100644 index 00000000..0816ce82 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddnft/nanox.24.png differ diff --git a/test-integration/snapshots/signTransactionAddnft/nanox.25.png b/test-integration/snapshots/signTransactionAddnft/nanox.25.png new file mode 100644 index 00000000..9b9ae3db Binary files /dev/null and b/test-integration/snapshots/signTransactionAddnft/nanox.25.png differ diff --git a/test-integration/snapshots/signTransactionAddnft/nanox.26.png b/test-integration/snapshots/signTransactionAddnft/nanox.26.png new file mode 100644 index 00000000..174e77ab Binary files /dev/null and b/test-integration/snapshots/signTransactionAddnft/nanox.26.png differ diff --git a/test-integration/snapshots/signTransactionAddnft/nanox.27.png b/test-integration/snapshots/signTransactionAddnft/nanox.27.png new file mode 100644 index 00000000..34e5ceab Binary files /dev/null and b/test-integration/snapshots/signTransactionAddnft/nanox.27.png differ diff --git a/test-integration/snapshots/signTransactionAddnft/nanox.28.png b/test-integration/snapshots/signTransactionAddnft/nanox.28.png new file mode 100644 index 00000000..4b4b7f83 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddnft/nanox.28.png differ diff --git a/test-integration/snapshots/signTransactionAddnft/nanox.29.png b/test-integration/snapshots/signTransactionAddnft/nanox.29.png new file mode 100644 index 00000000..5d0997ef Binary files /dev/null and b/test-integration/snapshots/signTransactionAddnft/nanox.29.png differ diff --git a/test-integration/snapshots/signTransactionAddnft/nanox.30.png b/test-integration/snapshots/signTransactionAddnft/nanox.30.png new file mode 100644 index 00000000..2f8f58e6 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddnft/nanox.30.png differ diff --git a/test-integration/snapshots/signTransactionAddnft/nanox.31.png b/test-integration/snapshots/signTransactionAddnft/nanox.31.png new file mode 100644 index 00000000..c843773c Binary files /dev/null and b/test-integration/snapshots/signTransactionAddnft/nanox.31.png differ diff --git a/test-integration/snapshots/signTransactionAddnft/nanox.32.png b/test-integration/snapshots/signTransactionAddnft/nanox.32.png new file mode 100644 index 00000000..8e0d2a37 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddnft/nanox.32.png differ diff --git a/test-integration/snapshots/signTransactionAddnft/nanox.33.png b/test-integration/snapshots/signTransactionAddnft/nanox.33.png new file mode 100644 index 00000000..59e91efe Binary files /dev/null and b/test-integration/snapshots/signTransactionAddnft/nanox.33.png differ diff --git a/test-integration/snapshots/signTransactionAddnft/nanox.34.png b/test-integration/snapshots/signTransactionAddnft/nanox.34.png new file mode 100644 index 00000000..c90cc3d9 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddnft/nanox.34.png differ diff --git a/test-integration/snapshots/signTransactionAddnft/nanox.35.png b/test-integration/snapshots/signTransactionAddnft/nanox.35.png new file mode 100644 index 00000000..432c6913 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddnft/nanox.35.png differ diff --git a/test-integration/snapshots/signTransactionAddnft/nanox.36.png b/test-integration/snapshots/signTransactionAddnft/nanox.36.png new file mode 100644 index 00000000..272e4d1b Binary files /dev/null and b/test-integration/snapshots/signTransactionAddnft/nanox.36.png differ diff --git a/test-integration/snapshots/signTransactionAddnft/nanox.37.png b/test-integration/snapshots/signTransactionAddnft/nanox.37.png new file mode 100644 index 00000000..d3fc7747 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddnft/nanox.37.png differ diff --git a/test-integration/snapshots/signTransactionAddnft/nanox.38.png b/test-integration/snapshots/signTransactionAddnft/nanox.38.png new file mode 100644 index 00000000..2f9e9a54 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddnft/nanox.38.png differ diff --git a/test-integration/snapshots/signTransactionAddnft/nanox.39.png b/test-integration/snapshots/signTransactionAddnft/nanox.39.png new file mode 100644 index 00000000..c3ac3fd8 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddnft/nanox.39.png differ diff --git a/test-integration/snapshots/signTransactionAddnft/nanox.40.png b/test-integration/snapshots/signTransactionAddnft/nanox.40.png new file mode 100644 index 00000000..c52915e3 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddnft/nanox.40.png differ diff --git a/test-integration/snapshots/signTransactionAddnft/nanox.41.png b/test-integration/snapshots/signTransactionAddnft/nanox.41.png new file mode 100644 index 00000000..0816ce82 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddnft/nanox.41.png differ diff --git a/test-integration/snapshots/signTransactionAddnft/nanox.42.png b/test-integration/snapshots/signTransactionAddnft/nanox.42.png new file mode 100644 index 00000000..9b9ae3db Binary files /dev/null and b/test-integration/snapshots/signTransactionAddnft/nanox.42.png differ diff --git a/test-integration/snapshots/signTransactionAddnft/nanox.43.png b/test-integration/snapshots/signTransactionAddnft/nanox.43.png new file mode 100644 index 00000000..174e77ab Binary files /dev/null and b/test-integration/snapshots/signTransactionAddnft/nanox.43.png differ diff --git a/test-integration/snapshots/signTransactionAddnft/nanox.44.png b/test-integration/snapshots/signTransactionAddnft/nanox.44.png new file mode 100644 index 00000000..b1caf4f0 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddnft/nanox.44.png differ diff --git a/test-integration/snapshots/signTransactionAddnft/nanox.45.png b/test-integration/snapshots/signTransactionAddnft/nanox.45.png new file mode 100644 index 00000000..aed1a686 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddnft/nanox.45.png differ diff --git a/test-integration/snapshots/signTransactionAddnft/nanox.46.png b/test-integration/snapshots/signTransactionAddnft/nanox.46.png new file mode 100644 index 00000000..94c5ed4a Binary files /dev/null and b/test-integration/snapshots/signTransactionAddnft/nanox.46.png differ diff --git a/test-integration/snapshots/signTransactionAddnft/nanox.47.png b/test-integration/snapshots/signTransactionAddnft/nanox.47.png new file mode 100644 index 00000000..36e2d17e Binary files /dev/null and b/test-integration/snapshots/signTransactionAddnft/nanox.47.png differ diff --git a/test-integration/snapshots/signTransactionAddnft/nanox.48.png b/test-integration/snapshots/signTransactionAddnft/nanox.48.png new file mode 100644 index 00000000..557725c6 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddnft/nanox.48.png differ diff --git a/test-integration/snapshots/signTransactionAddnft/nanox.49.png b/test-integration/snapshots/signTransactionAddnft/nanox.49.png new file mode 100644 index 00000000..34e5ceab Binary files /dev/null and b/test-integration/snapshots/signTransactionAddnft/nanox.49.png differ diff --git a/test-integration/snapshots/signTransactionAddnft/nanox.50.png b/test-integration/snapshots/signTransactionAddnft/nanox.50.png new file mode 100644 index 00000000..4b4b7f83 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddnft/nanox.50.png differ diff --git a/test-integration/snapshots/signTransactionAddnft/nanox.51.png b/test-integration/snapshots/signTransactionAddnft/nanox.51.png new file mode 100644 index 00000000..5d0997ef Binary files /dev/null and b/test-integration/snapshots/signTransactionAddnft/nanox.51.png differ diff --git a/test-integration/snapshots/signTransactionAddnft/nanox.52.png b/test-integration/snapshots/signTransactionAddnft/nanox.52.png new file mode 100644 index 00000000..2f8f58e6 Binary files /dev/null and b/test-integration/snapshots/signTransactionAddnft/nanox.52.png differ diff --git a/test-integration/snapshots/signTransactionAddnft/nanox.53.png b/test-integration/snapshots/signTransactionAddnft/nanox.53.png new file mode 100644 index 00000000..c843773c Binary files /dev/null and b/test-integration/snapshots/signTransactionAddnft/nanox.53.png differ diff --git a/test-integration/snapshots/signTransactionCommandsBasic/nanos.01.png b/test-integration/snapshots/signTransactionCommandsBasic/nanos.01.png new file mode 100644 index 00000000..a0f9b734 Binary files /dev/null and b/test-integration/snapshots/signTransactionCommandsBasic/nanos.01.png differ diff --git a/test-integration/snapshots/signTransactionCommandsBasic/nanos.02.png b/test-integration/snapshots/signTransactionCommandsBasic/nanos.02.png new file mode 100644 index 00000000..076a821e Binary files /dev/null and b/test-integration/snapshots/signTransactionCommandsBasic/nanos.02.png differ diff --git a/test-integration/snapshots/signTransactionCommandsBasic/nanos.03.png b/test-integration/snapshots/signTransactionCommandsBasic/nanos.03.png new file mode 100644 index 00000000..ecc4489f Binary files /dev/null and b/test-integration/snapshots/signTransactionCommandsBasic/nanos.03.png differ diff --git a/test-integration/snapshots/signTransactionCommandsBasic/nanos.04.png b/test-integration/snapshots/signTransactionCommandsBasic/nanos.04.png new file mode 100644 index 00000000..d1eac39e Binary files /dev/null and b/test-integration/snapshots/signTransactionCommandsBasic/nanos.04.png differ diff --git a/test-integration/snapshots/signTransactionCommandsBasic/nanos.05.png b/test-integration/snapshots/signTransactionCommandsBasic/nanos.05.png new file mode 100644 index 00000000..c9de0604 Binary files /dev/null and b/test-integration/snapshots/signTransactionCommandsBasic/nanos.05.png differ diff --git a/test-integration/snapshots/signTransactionCommandsBasic/nanos.06.png b/test-integration/snapshots/signTransactionCommandsBasic/nanos.06.png new file mode 100644 index 00000000..a0f9b734 Binary files /dev/null and b/test-integration/snapshots/signTransactionCommandsBasic/nanos.06.png differ diff --git a/test-integration/snapshots/signTransactionCommandsBasic/nanos.07.png b/test-integration/snapshots/signTransactionCommandsBasic/nanos.07.png new file mode 100644 index 00000000..06140342 Binary files /dev/null and b/test-integration/snapshots/signTransactionCommandsBasic/nanos.07.png differ diff --git a/test-integration/snapshots/signTransactionCommandsBasic/nanos.08.png b/test-integration/snapshots/signTransactionCommandsBasic/nanos.08.png new file mode 100644 index 00000000..ecc4489f Binary files /dev/null and b/test-integration/snapshots/signTransactionCommandsBasic/nanos.08.png differ diff --git a/test-integration/snapshots/signTransactionCommandsBasic/nanos.09.png b/test-integration/snapshots/signTransactionCommandsBasic/nanos.09.png new file mode 100644 index 00000000..d1eac39e Binary files /dev/null and b/test-integration/snapshots/signTransactionCommandsBasic/nanos.09.png differ diff --git a/test-integration/snapshots/signTransactionCommandsBasic/nanos.10.png b/test-integration/snapshots/signTransactionCommandsBasic/nanos.10.png new file mode 100644 index 00000000..c9de0604 Binary files /dev/null and b/test-integration/snapshots/signTransactionCommandsBasic/nanos.10.png differ diff --git a/test-integration/snapshots/signTransactionCommandsBasic/nanos.11.png b/test-integration/snapshots/signTransactionCommandsBasic/nanos.11.png new file mode 100644 index 00000000..a0f9b734 Binary files /dev/null and b/test-integration/snapshots/signTransactionCommandsBasic/nanos.11.png differ diff --git a/test-integration/snapshots/signTransactionCommandsBasic/nanos.12.png b/test-integration/snapshots/signTransactionCommandsBasic/nanos.12.png new file mode 100644 index 00000000..076a821e Binary files /dev/null and b/test-integration/snapshots/signTransactionCommandsBasic/nanos.12.png differ diff --git a/test-integration/snapshots/signTransactionCommandsBasic/nanos.13.png b/test-integration/snapshots/signTransactionCommandsBasic/nanos.13.png new file mode 100644 index 00000000..1380610c Binary files /dev/null and b/test-integration/snapshots/signTransactionCommandsBasic/nanos.13.png differ diff --git a/test-integration/snapshots/signTransactionCommandsBasic/nanos.14.png b/test-integration/snapshots/signTransactionCommandsBasic/nanos.14.png new file mode 100644 index 00000000..a0f9b734 Binary files /dev/null and b/test-integration/snapshots/signTransactionCommandsBasic/nanos.14.png differ diff --git a/test-integration/snapshots/signTransactionCommandsBasic/nanos.15.png b/test-integration/snapshots/signTransactionCommandsBasic/nanos.15.png new file mode 100644 index 00000000..06140342 Binary files /dev/null and b/test-integration/snapshots/signTransactionCommandsBasic/nanos.15.png differ diff --git a/test-integration/snapshots/signTransactionCommandsBasic/nanos.16.png b/test-integration/snapshots/signTransactionCommandsBasic/nanos.16.png new file mode 100644 index 00000000..a0f9b734 Binary files /dev/null and b/test-integration/snapshots/signTransactionCommandsBasic/nanos.16.png differ diff --git a/test-integration/snapshots/signTransactionCommandsBasic/nanos.17.png b/test-integration/snapshots/signTransactionCommandsBasic/nanos.17.png new file mode 100644 index 00000000..076a821e Binary files /dev/null and b/test-integration/snapshots/signTransactionCommandsBasic/nanos.17.png differ diff --git a/test-integration/snapshots/signTransactionCommandsBasic/nanos.18.png b/test-integration/snapshots/signTransactionCommandsBasic/nanos.18.png new file mode 100644 index 00000000..a0f9b734 Binary files /dev/null and b/test-integration/snapshots/signTransactionCommandsBasic/nanos.18.png differ diff --git a/test-integration/snapshots/signTransactionCommandsCountedSection/nanos.01.png b/test-integration/snapshots/signTransactionCommandsCountedSection/nanos.01.png new file mode 100644 index 00000000..a0f9b734 Binary files /dev/null and b/test-integration/snapshots/signTransactionCommandsCountedSection/nanos.01.png differ diff --git a/test-integration/snapshots/signTransactionCommandsCountedSection/nanos.02.png b/test-integration/snapshots/signTransactionCommandsCountedSection/nanos.02.png new file mode 100644 index 00000000..076a821e Binary files /dev/null and b/test-integration/snapshots/signTransactionCommandsCountedSection/nanos.02.png differ diff --git a/test-integration/snapshots/signTransactionCommandsCountedSection/nanos.03.png b/test-integration/snapshots/signTransactionCommandsCountedSection/nanos.03.png new file mode 100644 index 00000000..d1eac39e Binary files /dev/null and b/test-integration/snapshots/signTransactionCommandsCountedSection/nanos.03.png differ diff --git a/test-integration/snapshots/signTransactionCommandsCountedSection/nanos.04.png b/test-integration/snapshots/signTransactionCommandsCountedSection/nanos.04.png new file mode 100644 index 00000000..c9de0604 Binary files /dev/null and b/test-integration/snapshots/signTransactionCommandsCountedSection/nanos.04.png differ diff --git a/test-integration/snapshots/signTransactionCommandsCountedSection/nanos.05.png b/test-integration/snapshots/signTransactionCommandsCountedSection/nanos.05.png new file mode 100644 index 00000000..a0f9b734 Binary files /dev/null and b/test-integration/snapshots/signTransactionCommandsCountedSection/nanos.05.png differ diff --git a/test-integration/snapshots/signTransactionCommandsCountedSection/nanos.06.png b/test-integration/snapshots/signTransactionCommandsCountedSection/nanos.06.png new file mode 100644 index 00000000..076a821e Binary files /dev/null and b/test-integration/snapshots/signTransactionCommandsCountedSection/nanos.06.png differ diff --git a/test-integration/snapshots/signTransactionCommandsCountedSection/nanos.07.png b/test-integration/snapshots/signTransactionCommandsCountedSection/nanos.07.png new file mode 100644 index 00000000..a0f9b734 Binary files /dev/null and b/test-integration/snapshots/signTransactionCommandsCountedSection/nanos.07.png differ diff --git a/test-integration/snapshots/signTransactionCommandsCountedSection/nanos.08.png b/test-integration/snapshots/signTransactionCommandsCountedSection/nanos.08.png new file mode 100644 index 00000000..076a821e Binary files /dev/null and b/test-integration/snapshots/signTransactionCommandsCountedSection/nanos.08.png differ diff --git a/test-integration/snapshots/signTransactionCommandsCountedSection/nanos.09.png b/test-integration/snapshots/signTransactionCommandsCountedSection/nanos.09.png new file mode 100644 index 00000000..a0f9b734 Binary files /dev/null and b/test-integration/snapshots/signTransactionCommandsCountedSection/nanos.09.png differ diff --git a/test-integration/snapshots/signTransactionCommandsCountedSection/nanos.10.png b/test-integration/snapshots/signTransactionCommandsCountedSection/nanos.10.png new file mode 100644 index 00000000..076a821e Binary files /dev/null and b/test-integration/snapshots/signTransactionCommandsCountedSection/nanos.10.png differ diff --git a/test-integration/snapshots/signTransactionCommandsCountedSection/nanos.11.png b/test-integration/snapshots/signTransactionCommandsCountedSection/nanos.11.png new file mode 100644 index 00000000..a0f9b734 Binary files /dev/null and b/test-integration/snapshots/signTransactionCommandsCountedSection/nanos.11.png differ diff --git a/test-integration/snapshots/signTransactionCommandsCountedSection/nanos.12.png b/test-integration/snapshots/signTransactionCommandsCountedSection/nanos.12.png new file mode 100644 index 00000000..076a821e Binary files /dev/null and b/test-integration/snapshots/signTransactionCommandsCountedSection/nanos.12.png differ diff --git a/test-integration/snapshots/signTransactionCommandsCountedSection/nanos.13.png b/test-integration/snapshots/signTransactionCommandsCountedSection/nanos.13.png new file mode 100644 index 00000000..a0f9b734 Binary files /dev/null and b/test-integration/snapshots/signTransactionCommandsCountedSection/nanos.13.png differ diff --git a/test-integration/snapshots/signTransactionCommandsCountedSection/nanos.14.png b/test-integration/snapshots/signTransactionCommandsCountedSection/nanos.14.png new file mode 100644 index 00000000..076a821e Binary files /dev/null and b/test-integration/snapshots/signTransactionCommandsCountedSection/nanos.14.png differ diff --git a/test-integration/snapshots/signTransactionCommandsCountedSection/nanos.15.png b/test-integration/snapshots/signTransactionCommandsCountedSection/nanos.15.png new file mode 100644 index 00000000..a0f9b734 Binary files /dev/null and b/test-integration/snapshots/signTransactionCommandsCountedSection/nanos.15.png differ diff --git a/test-integration/snapshots/signTransactionCommandsCountedSection/nanos.16.png b/test-integration/snapshots/signTransactionCommandsCountedSection/nanos.16.png new file mode 100644 index 00000000..076a821e Binary files /dev/null and b/test-integration/snapshots/signTransactionCommandsCountedSection/nanos.16.png differ diff --git a/test-integration/snapshots/signTransactionCommandsCountedSection/nanos.17.png b/test-integration/snapshots/signTransactionCommandsCountedSection/nanos.17.png new file mode 100644 index 00000000..a0f9b734 Binary files /dev/null and b/test-integration/snapshots/signTransactionCommandsCountedSection/nanos.17.png differ diff --git a/test-integration/snapshots/signTransactionCommandsCountedSection/nanos.18.png b/test-integration/snapshots/signTransactionCommandsCountedSection/nanos.18.png new file mode 100644 index 00000000..076a821e Binary files /dev/null and b/test-integration/snapshots/signTransactionCommandsCountedSection/nanos.18.png differ diff --git a/test-integration/snapshots/signTransactionCommandsCountedSection/nanos.19.png b/test-integration/snapshots/signTransactionCommandsCountedSection/nanos.19.png new file mode 100644 index 00000000..a0f9b734 Binary files /dev/null and b/test-integration/snapshots/signTransactionCommandsCountedSection/nanos.19.png differ diff --git a/test-integration/snapshots/signTransactionCommandsDH/nanos.01.png b/test-integration/snapshots/signTransactionCommandsDH/nanos.01.png new file mode 100644 index 00000000..a0f9b734 Binary files /dev/null and b/test-integration/snapshots/signTransactionCommandsDH/nanos.01.png differ diff --git a/test-integration/snapshots/signTransactionCommandsDH/nanos.02.png b/test-integration/snapshots/signTransactionCommandsDH/nanos.02.png new file mode 100644 index 00000000..076a821e Binary files /dev/null and b/test-integration/snapshots/signTransactionCommandsDH/nanos.02.png differ diff --git a/test-integration/snapshots/signTransactionCommandsDH/nanos.03.png b/test-integration/snapshots/signTransactionCommandsDH/nanos.03.png new file mode 100644 index 00000000..577884a2 Binary files /dev/null and b/test-integration/snapshots/signTransactionCommandsDH/nanos.03.png differ diff --git a/test-integration/snapshots/signTransactionCommandsDH/nanos.04.png b/test-integration/snapshots/signTransactionCommandsDH/nanos.04.png new file mode 100644 index 00000000..109df490 Binary files /dev/null and b/test-integration/snapshots/signTransactionCommandsDH/nanos.04.png differ diff --git a/test-integration/snapshots/signTransactionCommandsDH/nanos.05.png b/test-integration/snapshots/signTransactionCommandsDH/nanos.05.png new file mode 100644 index 00000000..152ad82f Binary files /dev/null and b/test-integration/snapshots/signTransactionCommandsDH/nanos.05.png differ diff --git a/test-integration/snapshots/signTransactionCommandsDH/nanos.06.png b/test-integration/snapshots/signTransactionCommandsDH/nanos.06.png new file mode 100644 index 00000000..d1eac39e Binary files /dev/null and b/test-integration/snapshots/signTransactionCommandsDH/nanos.06.png differ diff --git a/test-integration/snapshots/signTransactionCommandsDH/nanos.07.png b/test-integration/snapshots/signTransactionCommandsDH/nanos.07.png new file mode 100644 index 00000000..c9de0604 Binary files /dev/null and b/test-integration/snapshots/signTransactionCommandsDH/nanos.07.png differ diff --git a/test-integration/snapshots/signTransactionCommandsDH/nanos.08.png b/test-integration/snapshots/signTransactionCommandsDH/nanos.08.png new file mode 100644 index 00000000..a0f9b734 Binary files /dev/null and b/test-integration/snapshots/signTransactionCommandsDH/nanos.08.png differ diff --git a/test-integration/snapshots/signTransactionCommandsDH/nanos.09.png b/test-integration/snapshots/signTransactionCommandsDH/nanos.09.png new file mode 100644 index 00000000..076a821e Binary files /dev/null and b/test-integration/snapshots/signTransactionCommandsDH/nanos.09.png differ diff --git a/test-integration/snapshots/signTransactionCommandsDH/nanos.10.png b/test-integration/snapshots/signTransactionCommandsDH/nanos.10.png new file mode 100644 index 00000000..a0f9b734 Binary files /dev/null and b/test-integration/snapshots/signTransactionCommandsDH/nanos.10.png differ diff --git a/test-integration/snapshots/signTransactionCommandsDH/nanos.11.png b/test-integration/snapshots/signTransactionCommandsDH/nanos.11.png new file mode 100644 index 00000000..076a821e Binary files /dev/null and b/test-integration/snapshots/signTransactionCommandsDH/nanos.11.png differ diff --git a/test-integration/snapshots/signTransactionCommandsDH/nanos.12.png b/test-integration/snapshots/signTransactionCommandsDH/nanos.12.png new file mode 100644 index 00000000..577884a2 Binary files /dev/null and b/test-integration/snapshots/signTransactionCommandsDH/nanos.12.png differ diff --git a/test-integration/snapshots/signTransactionCommandsDH/nanos.13.png b/test-integration/snapshots/signTransactionCommandsDH/nanos.13.png new file mode 100644 index 00000000..076a821e Binary files /dev/null and b/test-integration/snapshots/signTransactionCommandsDH/nanos.13.png differ diff --git a/test-integration/snapshots/signTransactionCommandsDH/nanos.14.png b/test-integration/snapshots/signTransactionCommandsDH/nanos.14.png new file mode 100644 index 00000000..577884a2 Binary files /dev/null and b/test-integration/snapshots/signTransactionCommandsDH/nanos.14.png differ diff --git a/test-integration/snapshots/signTransactionCommandsDH/nanos.15.png b/test-integration/snapshots/signTransactionCommandsDH/nanos.15.png new file mode 100644 index 00000000..152ad82f Binary files /dev/null and b/test-integration/snapshots/signTransactionCommandsDH/nanos.15.png differ diff --git a/test-integration/snapshots/signTransactionCommandsDH/nanos.16.png b/test-integration/snapshots/signTransactionCommandsDH/nanos.16.png new file mode 100644 index 00000000..577884a2 Binary files /dev/null and b/test-integration/snapshots/signTransactionCommandsDH/nanos.16.png differ diff --git a/test-integration/snapshots/signTransactionCommandsDH/nanos.17.png b/test-integration/snapshots/signTransactionCommandsDH/nanos.17.png new file mode 100644 index 00000000..a0f9b734 Binary files /dev/null and b/test-integration/snapshots/signTransactionCommandsDH/nanos.17.png differ diff --git a/test-integration/snapshots/signTransactionCommandsDH/nanos.18.png b/test-integration/snapshots/signTransactionCommandsDH/nanos.18.png new file mode 100644 index 00000000..076a821e Binary files /dev/null and b/test-integration/snapshots/signTransactionCommandsDH/nanos.18.png differ diff --git a/test-integration/snapshots/signTransactionCommandsDH/nanos.19.png b/test-integration/snapshots/signTransactionCommandsDH/nanos.19.png new file mode 100644 index 00000000..577884a2 Binary files /dev/null and b/test-integration/snapshots/signTransactionCommandsDH/nanos.19.png differ diff --git a/test-integration/snapshots/signTransactionCommandsDH/nanos.20.png b/test-integration/snapshots/signTransactionCommandsDH/nanos.20.png new file mode 100644 index 00000000..152ad82f Binary files /dev/null and b/test-integration/snapshots/signTransactionCommandsDH/nanos.20.png differ diff --git a/test-integration/snapshots/signTransactionCommandsDH/nanos.21.png b/test-integration/snapshots/signTransactionCommandsDH/nanos.21.png new file mode 100644 index 00000000..a0f9b734 Binary files /dev/null and b/test-integration/snapshots/signTransactionCommandsDH/nanos.21.png differ diff --git a/test-integration/snapshots/signTransactionCommandsDH/nanos.22.png b/test-integration/snapshots/signTransactionCommandsDH/nanos.22.png new file mode 100644 index 00000000..076a821e Binary files /dev/null and b/test-integration/snapshots/signTransactionCommandsDH/nanos.22.png differ diff --git a/test-integration/snapshots/signTransactionCommandsDH/nanos.23.png b/test-integration/snapshots/signTransactionCommandsDH/nanos.23.png new file mode 100644 index 00000000..577884a2 Binary files /dev/null and b/test-integration/snapshots/signTransactionCommandsDH/nanos.23.png differ diff --git a/test-integration/snapshots/signTransactionCommandsDH/nanos.24.png b/test-integration/snapshots/signTransactionCommandsDH/nanos.24.png new file mode 100644 index 00000000..109df490 Binary files /dev/null and b/test-integration/snapshots/signTransactionCommandsDH/nanos.24.png differ diff --git a/test-integration/snapshots/signTransactionCommandsDH/nanos.25.png b/test-integration/snapshots/signTransactionCommandsDH/nanos.25.png new file mode 100644 index 00000000..a0f9b734 Binary files /dev/null and b/test-integration/snapshots/signTransactionCommandsDH/nanos.25.png differ diff --git a/test-integration/snapshots/signTransactionCommandsDHAndCountedSections/nanos.01.png b/test-integration/snapshots/signTransactionCommandsDHAndCountedSections/nanos.01.png new file mode 100644 index 00000000..a0f9b734 Binary files /dev/null and b/test-integration/snapshots/signTransactionCommandsDHAndCountedSections/nanos.01.png differ diff --git a/test-integration/snapshots/signTransactionCommandsDHAndCountedSections/nanos.02.png b/test-integration/snapshots/signTransactionCommandsDHAndCountedSections/nanos.02.png new file mode 100644 index 00000000..076a821e Binary files /dev/null and b/test-integration/snapshots/signTransactionCommandsDHAndCountedSections/nanos.02.png differ diff --git a/test-integration/snapshots/signTransactionCommandsDHAndCountedSections/nanos.03.png b/test-integration/snapshots/signTransactionCommandsDHAndCountedSections/nanos.03.png new file mode 100644 index 00000000..577884a2 Binary files /dev/null and b/test-integration/snapshots/signTransactionCommandsDHAndCountedSections/nanos.03.png differ diff --git a/test-integration/snapshots/signTransactionCommandsDHAndCountedSections/nanos.04.png b/test-integration/snapshots/signTransactionCommandsDHAndCountedSections/nanos.04.png new file mode 100644 index 00000000..152ad82f Binary files /dev/null and b/test-integration/snapshots/signTransactionCommandsDHAndCountedSections/nanos.04.png differ diff --git a/test-integration/snapshots/signTransactionCommandsDHAndCountedSections/nanos.05.png b/test-integration/snapshots/signTransactionCommandsDHAndCountedSections/nanos.05.png new file mode 100644 index 00000000..d1eac39e Binary files /dev/null and b/test-integration/snapshots/signTransactionCommandsDHAndCountedSections/nanos.05.png differ diff --git a/test-integration/snapshots/signTransactionCommandsDHAndCountedSections/nanos.06.png b/test-integration/snapshots/signTransactionCommandsDHAndCountedSections/nanos.06.png new file mode 100644 index 00000000..c9de0604 Binary files /dev/null and b/test-integration/snapshots/signTransactionCommandsDHAndCountedSections/nanos.06.png differ diff --git a/test-integration/snapshots/signTransactionCommandsDHAndCountedSections/nanos.07.png b/test-integration/snapshots/signTransactionCommandsDHAndCountedSections/nanos.07.png new file mode 100644 index 00000000..a0f9b734 Binary files /dev/null and b/test-integration/snapshots/signTransactionCommandsDHAndCountedSections/nanos.07.png differ diff --git a/test-integration/snapshots/signTransactionCommandsDHAndCountedSections/nanos.08.png b/test-integration/snapshots/signTransactionCommandsDHAndCountedSections/nanos.08.png new file mode 100644 index 00000000..076a821e Binary files /dev/null and b/test-integration/snapshots/signTransactionCommandsDHAndCountedSections/nanos.08.png differ diff --git a/test-integration/snapshots/signTransactionCommandsDHAndCountedSections/nanos.09.png b/test-integration/snapshots/signTransactionCommandsDHAndCountedSections/nanos.09.png new file mode 100644 index 00000000..577884a2 Binary files /dev/null and b/test-integration/snapshots/signTransactionCommandsDHAndCountedSections/nanos.09.png differ diff --git a/test-integration/snapshots/signTransactionCommandsDHAndCountedSections/nanos.10.png b/test-integration/snapshots/signTransactionCommandsDHAndCountedSections/nanos.10.png new file mode 100644 index 00000000..a0f9b734 Binary files /dev/null and b/test-integration/snapshots/signTransactionCommandsDHAndCountedSections/nanos.10.png differ diff --git a/test-integration/snapshots/signTransactionCommandsDHAndCountedSections/nanos.11.png b/test-integration/snapshots/signTransactionCommandsDHAndCountedSections/nanos.11.png new file mode 100644 index 00000000..076a821e Binary files /dev/null and b/test-integration/snapshots/signTransactionCommandsDHAndCountedSections/nanos.11.png differ diff --git a/test-integration/snapshots/signTransactionCommandsDHAndCountedSections/nanos.12.png b/test-integration/snapshots/signTransactionCommandsDHAndCountedSections/nanos.12.png new file mode 100644 index 00000000..577884a2 Binary files /dev/null and b/test-integration/snapshots/signTransactionCommandsDHAndCountedSections/nanos.12.png differ diff --git a/test-integration/snapshots/signTransactionCommandsDHAndCountedSections/nanos.13.png b/test-integration/snapshots/signTransactionCommandsDHAndCountedSections/nanos.13.png new file mode 100644 index 00000000..a0f9b734 Binary files /dev/null and b/test-integration/snapshots/signTransactionCommandsDHAndCountedSections/nanos.13.png differ diff --git a/test-integration/snapshots/signTransactionCommandsShowData/nanos.01.png b/test-integration/snapshots/signTransactionCommandsShowData/nanos.01.png new file mode 100644 index 00000000..a0f9b734 Binary files /dev/null and b/test-integration/snapshots/signTransactionCommandsShowData/nanos.01.png differ diff --git a/test-integration/snapshots/signTransactionCommandsShowData/nanos.02.png b/test-integration/snapshots/signTransactionCommandsShowData/nanos.02.png new file mode 100644 index 00000000..076a821e Binary files /dev/null and b/test-integration/snapshots/signTransactionCommandsShowData/nanos.02.png differ diff --git a/test-integration/snapshots/signTransactionCommandsShowData/nanos.03.png b/test-integration/snapshots/signTransactionCommandsShowData/nanos.03.png new file mode 100644 index 00000000..dd2e8c6f Binary files /dev/null and b/test-integration/snapshots/signTransactionCommandsShowData/nanos.03.png differ diff --git a/test-integration/snapshots/signTransactionCommandsShowData/nanos.04.png b/test-integration/snapshots/signTransactionCommandsShowData/nanos.04.png new file mode 100644 index 00000000..109df490 Binary files /dev/null and b/test-integration/snapshots/signTransactionCommandsShowData/nanos.04.png differ diff --git a/test-integration/snapshots/signTransactionCommandsShowData/nanos.05.png b/test-integration/snapshots/signTransactionCommandsShowData/nanos.05.png new file mode 100644 index 00000000..cdd828fc Binary files /dev/null and b/test-integration/snapshots/signTransactionCommandsShowData/nanos.05.png differ diff --git a/test-integration/snapshots/signTransactionCommandsShowData/nanos.06.png b/test-integration/snapshots/signTransactionCommandsShowData/nanos.06.png new file mode 100644 index 00000000..5f8a762f Binary files /dev/null and b/test-integration/snapshots/signTransactionCommandsShowData/nanos.06.png differ diff --git a/test-integration/snapshots/signTransactionCommandsShowData/nanos.07.png b/test-integration/snapshots/signTransactionCommandsShowData/nanos.07.png new file mode 100644 index 00000000..775f50d8 Binary files /dev/null and b/test-integration/snapshots/signTransactionCommandsShowData/nanos.07.png differ diff --git a/test-integration/snapshots/signTransactionCommandsShowData/nanos.08.png b/test-integration/snapshots/signTransactionCommandsShowData/nanos.08.png new file mode 100644 index 00000000..d1eac39e Binary files /dev/null and b/test-integration/snapshots/signTransactionCommandsShowData/nanos.08.png differ diff --git a/test-integration/snapshots/signTransactionCommandsShowData/nanos.09.png b/test-integration/snapshots/signTransactionCommandsShowData/nanos.09.png new file mode 100644 index 00000000..c9de0604 Binary files /dev/null and b/test-integration/snapshots/signTransactionCommandsShowData/nanos.09.png differ diff --git a/test-integration/snapshots/signTransactionCommandsShowData/nanos.10.png b/test-integration/snapshots/signTransactionCommandsShowData/nanos.10.png new file mode 100644 index 00000000..a0f9b734 Binary files /dev/null and b/test-integration/snapshots/signTransactionCommandsShowData/nanos.10.png differ diff --git a/test-integration/snapshots/signTransactionCommandsShowData/nanos.11.png b/test-integration/snapshots/signTransactionCommandsShowData/nanos.11.png new file mode 100644 index 00000000..076a821e Binary files /dev/null and b/test-integration/snapshots/signTransactionCommandsShowData/nanos.11.png differ diff --git a/test-integration/snapshots/signTransactionCommandsShowData/nanos.12.png b/test-integration/snapshots/signTransactionCommandsShowData/nanos.12.png new file mode 100644 index 00000000..a0f9b734 Binary files /dev/null and b/test-integration/snapshots/signTransactionCommandsShowData/nanos.12.png differ diff --git a/test-integration/snapshots/signTransactionCommandsShowData/nanos.13.png b/test-integration/snapshots/signTransactionCommandsShowData/nanos.13.png new file mode 100644 index 00000000..076a821e Binary files /dev/null and b/test-integration/snapshots/signTransactionCommandsShowData/nanos.13.png differ diff --git a/test-integration/snapshots/signTransactionCommandsShowData/nanos.14.png b/test-integration/snapshots/signTransactionCommandsShowData/nanos.14.png new file mode 100644 index 00000000..a0f9b734 Binary files /dev/null and b/test-integration/snapshots/signTransactionCommandsShowData/nanos.14.png differ diff --git a/test-integration/snapshots/signTransactionCommandsShowData/nanos.15.png b/test-integration/snapshots/signTransactionCommandsShowData/nanos.15.png new file mode 100644 index 00000000..076a821e Binary files /dev/null and b/test-integration/snapshots/signTransactionCommandsShowData/nanos.15.png differ diff --git a/test-integration/snapshots/signTransactionCommandsShowData/nanos.16.png b/test-integration/snapshots/signTransactionCommandsShowData/nanos.16.png new file mode 100644 index 00000000..a0f9b734 Binary files /dev/null and b/test-integration/snapshots/signTransactionCommandsShowData/nanos.16.png differ diff --git a/test-integration/snapshots/signTransactionCommandsShowData/nanos.17.png b/test-integration/snapshots/signTransactionCommandsShowData/nanos.17.png new file mode 100644 index 00000000..076a821e Binary files /dev/null and b/test-integration/snapshots/signTransactionCommandsShowData/nanos.17.png differ diff --git a/test-integration/snapshots/signTransactionCommandsShowData/nanos.18.png b/test-integration/snapshots/signTransactionCommandsShowData/nanos.18.png new file mode 100644 index 00000000..a0f9b734 Binary files /dev/null and b/test-integration/snapshots/signTransactionCommandsShowData/nanos.18.png differ diff --git a/test-integration/snapshots/signTransactionCommandsShowData/nanos.19.png b/test-integration/snapshots/signTransactionCommandsShowData/nanos.19.png new file mode 100644 index 00000000..076a821e Binary files /dev/null and b/test-integration/snapshots/signTransactionCommandsShowData/nanos.19.png differ diff --git a/test-integration/snapshots/signTransactionCommandsShowData/nanos.20.png b/test-integration/snapshots/signTransactionCommandsShowData/nanos.20.png new file mode 100644 index 00000000..a0f9b734 Binary files /dev/null and b/test-integration/snapshots/signTransactionCommandsShowData/nanos.20.png differ diff --git a/test-integration/snapshots/signTransactionCommandsShowData/nanos.21.png b/test-integration/snapshots/signTransactionCommandsShowData/nanos.21.png new file mode 100644 index 00000000..076a821e Binary files /dev/null and b/test-integration/snapshots/signTransactionCommandsShowData/nanos.21.png differ diff --git a/test-integration/snapshots/signTransactionCommandsShowData/nanos.22.png b/test-integration/snapshots/signTransactionCommandsShowData/nanos.22.png new file mode 100644 index 00000000..a0f9b734 Binary files /dev/null and b/test-integration/snapshots/signTransactionCommandsShowData/nanos.22.png differ diff --git a/test-integration/snapshots/signTransactionCommandsShowData/nanos.23.png b/test-integration/snapshots/signTransactionCommandsShowData/nanos.23.png new file mode 100644 index 00000000..076a821e Binary files /dev/null and b/test-integration/snapshots/signTransactionCommandsShowData/nanos.23.png differ diff --git a/test-integration/snapshots/signTransactionCommandsShowData/nanos.24.png b/test-integration/snapshots/signTransactionCommandsShowData/nanos.24.png new file mode 100644 index 00000000..a0f9b734 Binary files /dev/null and b/test-integration/snapshots/signTransactionCommandsShowData/nanos.24.png differ diff --git a/test-integration/snapshots/signTransactionCommandsShowData/nanos.25.png b/test-integration/snapshots/signTransactionCommandsShowData/nanos.25.png new file mode 100644 index 00000000..076a821e Binary files /dev/null and b/test-integration/snapshots/signTransactionCommandsShowData/nanos.25.png differ diff --git a/test-integration/snapshots/signTransactionCommandsShowData/nanos.26.png b/test-integration/snapshots/signTransactionCommandsShowData/nanos.26.png new file mode 100644 index 00000000..a0f9b734 Binary files /dev/null and b/test-integration/snapshots/signTransactionCommandsShowData/nanos.26.png differ diff --git a/test-integration/snapshots/signTransactionCommandsShowData/nanos.27.png b/test-integration/snapshots/signTransactionCommandsShowData/nanos.27.png new file mode 100644 index 00000000..076a821e Binary files /dev/null and b/test-integration/snapshots/signTransactionCommandsShowData/nanos.27.png differ diff --git a/test-integration/snapshots/signTransactionCommandsShowData/nanos.28.png b/test-integration/snapshots/signTransactionCommandsShowData/nanos.28.png new file mode 100644 index 00000000..a0f9b734 Binary files /dev/null and b/test-integration/snapshots/signTransactionCommandsShowData/nanos.28.png differ diff --git a/test-integration/snapshots/signTransactionCommandsShowData/nanos.29.png b/test-integration/snapshots/signTransactionCommandsShowData/nanos.29.png new file mode 100644 index 00000000..076a821e Binary files /dev/null and b/test-integration/snapshots/signTransactionCommandsShowData/nanos.29.png differ diff --git a/test-integration/snapshots/signTransactionCommandsShowData/nanos.30.png b/test-integration/snapshots/signTransactionCommandsShowData/nanos.30.png new file mode 100644 index 00000000..e1c757e7 Binary files /dev/null and b/test-integration/snapshots/signTransactionCommandsShowData/nanos.30.png differ diff --git a/test-integration/snapshots/signTransactionCommandsShowData/nanos.31.png b/test-integration/snapshots/signTransactionCommandsShowData/nanos.31.png new file mode 100644 index 00000000..a0f9b734 Binary files /dev/null and b/test-integration/snapshots/signTransactionCommandsShowData/nanos.31.png differ diff --git a/test-integration/snapshots/signTransactionCommandsStorage/nanos.01.png b/test-integration/snapshots/signTransactionCommandsStorage/nanos.01.png new file mode 100644 index 00000000..a0f9b734 Binary files /dev/null and b/test-integration/snapshots/signTransactionCommandsStorage/nanos.01.png differ diff --git a/test-integration/snapshots/signTransactionCommandsStorage/nanos.02.png b/test-integration/snapshots/signTransactionCommandsStorage/nanos.02.png new file mode 100644 index 00000000..076a821e Binary files /dev/null and b/test-integration/snapshots/signTransactionCommandsStorage/nanos.02.png differ diff --git a/test-integration/snapshots/signTransactionCommandsStorage/nanos.03.png b/test-integration/snapshots/signTransactionCommandsStorage/nanos.03.png new file mode 100644 index 00000000..f1b57688 Binary files /dev/null and b/test-integration/snapshots/signTransactionCommandsStorage/nanos.03.png differ diff --git a/test-integration/snapshots/signTransactionCommandsStorage/nanos.04.png b/test-integration/snapshots/signTransactionCommandsStorage/nanos.04.png new file mode 100644 index 00000000..5929bb69 Binary files /dev/null and b/test-integration/snapshots/signTransactionCommandsStorage/nanos.04.png differ diff --git a/test-integration/snapshots/signTransactionCommandsStorage/nanos.05.png b/test-integration/snapshots/signTransactionCommandsStorage/nanos.05.png new file mode 100644 index 00000000..d1eac39e Binary files /dev/null and b/test-integration/snapshots/signTransactionCommandsStorage/nanos.05.png differ diff --git a/test-integration/snapshots/signTransactionCommandsStorage/nanos.06.png b/test-integration/snapshots/signTransactionCommandsStorage/nanos.06.png new file mode 100644 index 00000000..c9de0604 Binary files /dev/null and b/test-integration/snapshots/signTransactionCommandsStorage/nanos.06.png differ diff --git a/test-integration/snapshots/signTransactionCommandsStorage/nanos.07.png b/test-integration/snapshots/signTransactionCommandsStorage/nanos.07.png new file mode 100644 index 00000000..a0f9b734 Binary files /dev/null and b/test-integration/snapshots/signTransactionCommandsStorage/nanos.07.png differ diff --git a/test-integration/snapshots/signTransactionCommandsStorage/nanos.08.png b/test-integration/snapshots/signTransactionCommandsStorage/nanos.08.png new file mode 100644 index 00000000..076a821e Binary files /dev/null and b/test-integration/snapshots/signTransactionCommandsStorage/nanos.08.png differ diff --git a/test-integration/snapshots/signTransactionCommandsStorage/nanos.09.png b/test-integration/snapshots/signTransactionCommandsStorage/nanos.09.png new file mode 100644 index 00000000..a0f9b734 Binary files /dev/null and b/test-integration/snapshots/signTransactionCommandsStorage/nanos.09.png differ diff --git a/test-integration/snapshots/signTransactionCommandsStorage/nanos.10.png b/test-integration/snapshots/signTransactionCommandsStorage/nanos.10.png new file mode 100644 index 00000000..076a821e Binary files /dev/null and b/test-integration/snapshots/signTransactionCommandsStorage/nanos.10.png differ diff --git a/test-integration/snapshots/signTransactionCommandsStorage/nanos.11.png b/test-integration/snapshots/signTransactionCommandsStorage/nanos.11.png new file mode 100644 index 00000000..a0f9b734 Binary files /dev/null and b/test-integration/snapshots/signTransactionCommandsStorage/nanos.11.png differ diff --git a/test-integration/snapshots/signTransactionCommandsStorage/nanos.12.png b/test-integration/snapshots/signTransactionCommandsStorage/nanos.12.png new file mode 100644 index 00000000..076a821e Binary files /dev/null and b/test-integration/snapshots/signTransactionCommandsStorage/nanos.12.png differ diff --git a/test-integration/snapshots/signTransactionCommandsStorage/nanos.13.png b/test-integration/snapshots/signTransactionCommandsStorage/nanos.13.png new file mode 100644 index 00000000..a0f9b734 Binary files /dev/null and b/test-integration/snapshots/signTransactionCommandsStorage/nanos.13.png differ diff --git a/test-integration/snapshots/signTransactionNewfundsreq/nanos.01.png b/test-integration/snapshots/signTransactionNewfundsreq/nanos.01.png new file mode 100644 index 00000000..a0f9b734 Binary files /dev/null and b/test-integration/snapshots/signTransactionNewfundsreq/nanos.01.png differ diff --git a/test-integration/snapshots/signTransactionNewfundsreq/nanos.02.png b/test-integration/snapshots/signTransactionNewfundsreq/nanos.02.png new file mode 100644 index 00000000..076a821e Binary files /dev/null and b/test-integration/snapshots/signTransactionNewfundsreq/nanos.02.png differ diff --git a/test-integration/snapshots/signTransactionNewfundsreq/nanos.03.png b/test-integration/snapshots/signTransactionNewfundsreq/nanos.03.png new file mode 100644 index 00000000..f6f4aeaa Binary files /dev/null and b/test-integration/snapshots/signTransactionNewfundsreq/nanos.03.png differ diff --git a/test-integration/snapshots/signTransactionNewfundsreq/nanos.04.png b/test-integration/snapshots/signTransactionNewfundsreq/nanos.04.png new file mode 100644 index 00000000..9e446398 Binary files /dev/null and b/test-integration/snapshots/signTransactionNewfundsreq/nanos.04.png differ diff --git a/test-integration/snapshots/signTransactionNewfundsreq/nanos.05.png b/test-integration/snapshots/signTransactionNewfundsreq/nanos.05.png new file mode 100644 index 00000000..ecf1f505 Binary files /dev/null and b/test-integration/snapshots/signTransactionNewfundsreq/nanos.05.png differ diff --git a/test-integration/snapshots/signTransactionNewfundsreq/nanos.06.png b/test-integration/snapshots/signTransactionNewfundsreq/nanos.06.png new file mode 100644 index 00000000..577884a2 Binary files /dev/null and b/test-integration/snapshots/signTransactionNewfundsreq/nanos.06.png differ diff --git a/test-integration/snapshots/signTransactionNewfundsreq/nanos.07.png b/test-integration/snapshots/signTransactionNewfundsreq/nanos.07.png new file mode 100644 index 00000000..c1b2ff76 Binary files /dev/null and b/test-integration/snapshots/signTransactionNewfundsreq/nanos.07.png differ diff --git a/test-integration/snapshots/signTransactionNewfundsreq/nanos.08.png b/test-integration/snapshots/signTransactionNewfundsreq/nanos.08.png new file mode 100644 index 00000000..119eb22f Binary files /dev/null and b/test-integration/snapshots/signTransactionNewfundsreq/nanos.08.png differ diff --git a/test-integration/snapshots/signTransactionNewfundsreq/nanos.09.png b/test-integration/snapshots/signTransactionNewfundsreq/nanos.09.png new file mode 100644 index 00000000..5ad55e09 Binary files /dev/null and b/test-integration/snapshots/signTransactionNewfundsreq/nanos.09.png differ diff --git a/test-integration/snapshots/signTransactionNewfundsreq/nanos.10.png b/test-integration/snapshots/signTransactionNewfundsreq/nanos.10.png new file mode 100644 index 00000000..fadc23a1 Binary files /dev/null and b/test-integration/snapshots/signTransactionNewfundsreq/nanos.10.png differ diff --git a/test-integration/snapshots/signTransactionNewfundsreq/nanos.11.png b/test-integration/snapshots/signTransactionNewfundsreq/nanos.11.png new file mode 100644 index 00000000..152ad82f Binary files /dev/null and b/test-integration/snapshots/signTransactionNewfundsreq/nanos.11.png differ diff --git a/test-integration/snapshots/signTransactionNewfundsreq/nanos.12.png b/test-integration/snapshots/signTransactionNewfundsreq/nanos.12.png new file mode 100644 index 00000000..b42d7b08 Binary files /dev/null and b/test-integration/snapshots/signTransactionNewfundsreq/nanos.12.png differ diff --git a/test-integration/snapshots/signTransactionNewfundsreq/nanos.13.png b/test-integration/snapshots/signTransactionNewfundsreq/nanos.13.png new file mode 100644 index 00000000..d1eac39e Binary files /dev/null and b/test-integration/snapshots/signTransactionNewfundsreq/nanos.13.png differ diff --git a/test-integration/snapshots/signTransactionNewfundsreq/nanos.14.png b/test-integration/snapshots/signTransactionNewfundsreq/nanos.14.png new file mode 100644 index 00000000..c9de0604 Binary files /dev/null and b/test-integration/snapshots/signTransactionNewfundsreq/nanos.14.png differ diff --git a/test-integration/snapshots/signTransactionNewfundsreq/nanos.15.png b/test-integration/snapshots/signTransactionNewfundsreq/nanos.15.png new file mode 100644 index 00000000..a0f9b734 Binary files /dev/null and b/test-integration/snapshots/signTransactionNewfundsreq/nanos.15.png differ diff --git a/test-integration/snapshots/signTransactionNewfundsreq/nanos.16.png b/test-integration/snapshots/signTransactionNewfundsreq/nanos.16.png new file mode 100644 index 00000000..06140342 Binary files /dev/null and b/test-integration/snapshots/signTransactionNewfundsreq/nanos.16.png differ diff --git a/test-integration/snapshots/signTransactionNewfundsreq/nanos.17.png b/test-integration/snapshots/signTransactionNewfundsreq/nanos.17.png new file mode 100644 index 00000000..f6f4aeaa Binary files /dev/null and b/test-integration/snapshots/signTransactionNewfundsreq/nanos.17.png differ diff --git a/test-integration/snapshots/signTransactionNewfundsreq/nanos.18.png b/test-integration/snapshots/signTransactionNewfundsreq/nanos.18.png new file mode 100644 index 00000000..9e446398 Binary files /dev/null and b/test-integration/snapshots/signTransactionNewfundsreq/nanos.18.png differ diff --git a/test-integration/snapshots/signTransactionNewfundsreq/nanos.19.png b/test-integration/snapshots/signTransactionNewfundsreq/nanos.19.png new file mode 100644 index 00000000..ecf1f505 Binary files /dev/null and b/test-integration/snapshots/signTransactionNewfundsreq/nanos.19.png differ diff --git a/test-integration/snapshots/signTransactionNewfundsreq/nanos.20.png b/test-integration/snapshots/signTransactionNewfundsreq/nanos.20.png new file mode 100644 index 00000000..577884a2 Binary files /dev/null and b/test-integration/snapshots/signTransactionNewfundsreq/nanos.20.png differ diff --git a/test-integration/snapshots/signTransactionNewfundsreq/nanos.21.png b/test-integration/snapshots/signTransactionNewfundsreq/nanos.21.png new file mode 100644 index 00000000..c1b2ff76 Binary files /dev/null and b/test-integration/snapshots/signTransactionNewfundsreq/nanos.21.png differ diff --git a/test-integration/snapshots/signTransactionNewfundsreq/nanos.22.png b/test-integration/snapshots/signTransactionNewfundsreq/nanos.22.png new file mode 100644 index 00000000..119eb22f Binary files /dev/null and b/test-integration/snapshots/signTransactionNewfundsreq/nanos.22.png differ diff --git a/test-integration/snapshots/signTransactionNewfundsreq/nanos.23.png b/test-integration/snapshots/signTransactionNewfundsreq/nanos.23.png new file mode 100644 index 00000000..5ad55e09 Binary files /dev/null and b/test-integration/snapshots/signTransactionNewfundsreq/nanos.23.png differ diff --git a/test-integration/snapshots/signTransactionNewfundsreq/nanos.24.png b/test-integration/snapshots/signTransactionNewfundsreq/nanos.24.png new file mode 100644 index 00000000..fadc23a1 Binary files /dev/null and b/test-integration/snapshots/signTransactionNewfundsreq/nanos.24.png differ diff --git a/test-integration/snapshots/signTransactionNewfundsreq/nanos.25.png b/test-integration/snapshots/signTransactionNewfundsreq/nanos.25.png new file mode 100644 index 00000000..152ad82f Binary files /dev/null and b/test-integration/snapshots/signTransactionNewfundsreq/nanos.25.png differ diff --git a/test-integration/snapshots/signTransactionNewfundsreq/nanos.26.png b/test-integration/snapshots/signTransactionNewfundsreq/nanos.26.png new file mode 100644 index 00000000..b42d7b08 Binary files /dev/null and b/test-integration/snapshots/signTransactionNewfundsreq/nanos.26.png differ diff --git a/test-integration/snapshots/signTransactionNewfundsreq/nanos.27.png b/test-integration/snapshots/signTransactionNewfundsreq/nanos.27.png new file mode 100644 index 00000000..d1eac39e Binary files /dev/null and b/test-integration/snapshots/signTransactionNewfundsreq/nanos.27.png differ diff --git a/test-integration/snapshots/signTransactionNewfundsreq/nanos.28.png b/test-integration/snapshots/signTransactionNewfundsreq/nanos.28.png new file mode 100644 index 00000000..c9de0604 Binary files /dev/null and b/test-integration/snapshots/signTransactionNewfundsreq/nanos.28.png differ diff --git a/test-integration/snapshots/signTransactionNewfundsreq/nanos.29.png b/test-integration/snapshots/signTransactionNewfundsreq/nanos.29.png new file mode 100644 index 00000000..a0f9b734 Binary files /dev/null and b/test-integration/snapshots/signTransactionNewfundsreq/nanos.29.png differ diff --git a/test-integration/snapshots/signTransactionNewfundsreq/nanos.30.png b/test-integration/snapshots/signTransactionNewfundsreq/nanos.30.png new file mode 100644 index 00000000..076a821e Binary files /dev/null and b/test-integration/snapshots/signTransactionNewfundsreq/nanos.30.png differ diff --git a/test-integration/snapshots/signTransactionNewfundsreq/nanos.31.png b/test-integration/snapshots/signTransactionNewfundsreq/nanos.31.png new file mode 100644 index 00000000..f6f4aeaa Binary files /dev/null and b/test-integration/snapshots/signTransactionNewfundsreq/nanos.31.png differ diff --git a/test-integration/snapshots/signTransactionNewfundsreq/nanos.32.png b/test-integration/snapshots/signTransactionNewfundsreq/nanos.32.png new file mode 100644 index 00000000..9e446398 Binary files /dev/null and b/test-integration/snapshots/signTransactionNewfundsreq/nanos.32.png differ diff --git a/test-integration/snapshots/signTransactionNewfundsreq/nanos.33.png b/test-integration/snapshots/signTransactionNewfundsreq/nanos.33.png new file mode 100644 index 00000000..ecf1f505 Binary files /dev/null and b/test-integration/snapshots/signTransactionNewfundsreq/nanos.33.png differ diff --git a/test-integration/snapshots/signTransactionNewfundsreq/nanos.34.png b/test-integration/snapshots/signTransactionNewfundsreq/nanos.34.png new file mode 100644 index 00000000..577884a2 Binary files /dev/null and b/test-integration/snapshots/signTransactionNewfundsreq/nanos.34.png differ diff --git a/test-integration/snapshots/signTransactionNewfundsreq/nanos.35.png b/test-integration/snapshots/signTransactionNewfundsreq/nanos.35.png new file mode 100644 index 00000000..c1b2ff76 Binary files /dev/null and b/test-integration/snapshots/signTransactionNewfundsreq/nanos.35.png differ diff --git a/test-integration/snapshots/signTransactionNewfundsreq/nanos.36.png b/test-integration/snapshots/signTransactionNewfundsreq/nanos.36.png new file mode 100644 index 00000000..119eb22f Binary files /dev/null and b/test-integration/snapshots/signTransactionNewfundsreq/nanos.36.png differ diff --git a/test-integration/snapshots/signTransactionNewfundsreq/nanos.37.png b/test-integration/snapshots/signTransactionNewfundsreq/nanos.37.png new file mode 100644 index 00000000..5ad55e09 Binary files /dev/null and b/test-integration/snapshots/signTransactionNewfundsreq/nanos.37.png differ diff --git a/test-integration/snapshots/signTransactionNewfundsreq/nanos.38.png b/test-integration/snapshots/signTransactionNewfundsreq/nanos.38.png new file mode 100644 index 00000000..fadc23a1 Binary files /dev/null and b/test-integration/snapshots/signTransactionNewfundsreq/nanos.38.png differ diff --git a/test-integration/snapshots/signTransactionNewfundsreq/nanos.39.png b/test-integration/snapshots/signTransactionNewfundsreq/nanos.39.png new file mode 100644 index 00000000..152ad82f Binary files /dev/null and b/test-integration/snapshots/signTransactionNewfundsreq/nanos.39.png differ diff --git a/test-integration/snapshots/signTransactionNewfundsreq/nanos.40.png b/test-integration/snapshots/signTransactionNewfundsreq/nanos.40.png new file mode 100644 index 00000000..b42d7b08 Binary files /dev/null and b/test-integration/snapshots/signTransactionNewfundsreq/nanos.40.png differ diff --git a/test-integration/snapshots/signTransactionNewfundsreq/nanos.41.png b/test-integration/snapshots/signTransactionNewfundsreq/nanos.41.png new file mode 100644 index 00000000..d1eac39e Binary files /dev/null and b/test-integration/snapshots/signTransactionNewfundsreq/nanos.41.png differ diff --git a/test-integration/snapshots/signTransactionNewfundsreq/nanos.42.png b/test-integration/snapshots/signTransactionNewfundsreq/nanos.42.png new file mode 100644 index 00000000..c9de0604 Binary files /dev/null and b/test-integration/snapshots/signTransactionNewfundsreq/nanos.42.png differ diff --git a/test-integration/snapshots/signTransactionNewfundsreq/nanos.43.png b/test-integration/snapshots/signTransactionNewfundsreq/nanos.43.png new file mode 100644 index 00000000..a0f9b734 Binary files /dev/null and b/test-integration/snapshots/signTransactionNewfundsreq/nanos.43.png differ diff --git a/test-integration/snapshots/signTransactionNewfundsreq/nanos.44.png b/test-integration/snapshots/signTransactionNewfundsreq/nanos.44.png new file mode 100644 index 00000000..06140342 Binary files /dev/null and b/test-integration/snapshots/signTransactionNewfundsreq/nanos.44.png differ diff --git a/test-integration/snapshots/signTransactionNewfundsreq/nanos.45.png b/test-integration/snapshots/signTransactionNewfundsreq/nanos.45.png new file mode 100644 index 00000000..f6f4aeaa Binary files /dev/null and b/test-integration/snapshots/signTransactionNewfundsreq/nanos.45.png differ diff --git a/test-integration/snapshots/signTransactionNewfundsreq/nanos.46.png b/test-integration/snapshots/signTransactionNewfundsreq/nanos.46.png new file mode 100644 index 00000000..9e446398 Binary files /dev/null and b/test-integration/snapshots/signTransactionNewfundsreq/nanos.46.png differ diff --git a/test-integration/snapshots/signTransactionNewfundsreq/nanos.47.png b/test-integration/snapshots/signTransactionNewfundsreq/nanos.47.png new file mode 100644 index 00000000..ecf1f505 Binary files /dev/null and b/test-integration/snapshots/signTransactionNewfundsreq/nanos.47.png differ diff --git a/test-integration/snapshots/signTransactionNewfundsreq/nanos.48.png b/test-integration/snapshots/signTransactionNewfundsreq/nanos.48.png new file mode 100644 index 00000000..577884a2 Binary files /dev/null and b/test-integration/snapshots/signTransactionNewfundsreq/nanos.48.png differ diff --git a/test-integration/snapshots/signTransactionNewfundsreq/nanos.49.png b/test-integration/snapshots/signTransactionNewfundsreq/nanos.49.png new file mode 100644 index 00000000..c1b2ff76 Binary files /dev/null and b/test-integration/snapshots/signTransactionNewfundsreq/nanos.49.png differ diff --git a/test-integration/snapshots/signTransactionNewfundsreq/nanos.50.png b/test-integration/snapshots/signTransactionNewfundsreq/nanos.50.png new file mode 100644 index 00000000..119eb22f Binary files /dev/null and b/test-integration/snapshots/signTransactionNewfundsreq/nanos.50.png differ diff --git a/test-integration/snapshots/signTransactionNewfundsreq/nanos.51.png b/test-integration/snapshots/signTransactionNewfundsreq/nanos.51.png new file mode 100644 index 00000000..5ad55e09 Binary files /dev/null and b/test-integration/snapshots/signTransactionNewfundsreq/nanos.51.png differ diff --git a/test-integration/snapshots/signTransactionNewfundsreq/nanos.52.png b/test-integration/snapshots/signTransactionNewfundsreq/nanos.52.png new file mode 100644 index 00000000..fadc23a1 Binary files /dev/null and b/test-integration/snapshots/signTransactionNewfundsreq/nanos.52.png differ diff --git a/test-integration/snapshots/signTransactionNewfundsreq/nanos.53.png b/test-integration/snapshots/signTransactionNewfundsreq/nanos.53.png new file mode 100644 index 00000000..152ad82f Binary files /dev/null and b/test-integration/snapshots/signTransactionNewfundsreq/nanos.53.png differ diff --git a/test-integration/snapshots/signTransactionNewfundsreq/nanos.54.png b/test-integration/snapshots/signTransactionNewfundsreq/nanos.54.png new file mode 100644 index 00000000..b42d7b08 Binary files /dev/null and b/test-integration/snapshots/signTransactionNewfundsreq/nanos.54.png differ diff --git a/test-integration/snapshots/signTransactionNewfundsreq/nanos.55.png b/test-integration/snapshots/signTransactionNewfundsreq/nanos.55.png new file mode 100644 index 00000000..d1eac39e Binary files /dev/null and b/test-integration/snapshots/signTransactionNewfundsreq/nanos.55.png differ diff --git a/test-integration/snapshots/signTransactionNewfundsreq/nanos.56.png b/test-integration/snapshots/signTransactionNewfundsreq/nanos.56.png new file mode 100644 index 00000000..c9de0604 Binary files /dev/null and b/test-integration/snapshots/signTransactionNewfundsreq/nanos.56.png differ diff --git a/test-integration/snapshots/signTransactionNewfundsreq/nanos.57.png b/test-integration/snapshots/signTransactionNewfundsreq/nanos.57.png new file mode 100644 index 00000000..a0f9b734 Binary files /dev/null and b/test-integration/snapshots/signTransactionNewfundsreq/nanos.57.png differ diff --git a/test-integration/snapshots/signTransactionNewfundsreq/nanosp.01.png b/test-integration/snapshots/signTransactionNewfundsreq/nanosp.01.png new file mode 100644 index 00000000..a7a87405 Binary files /dev/null and b/test-integration/snapshots/signTransactionNewfundsreq/nanosp.01.png differ diff --git a/test-integration/snapshots/signTransactionNewfundsreq/nanosp.02.png b/test-integration/snapshots/signTransactionNewfundsreq/nanosp.02.png new file mode 100644 index 00000000..ada3168c Binary files /dev/null and b/test-integration/snapshots/signTransactionNewfundsreq/nanosp.02.png differ diff --git a/test-integration/snapshots/signTransactionNewfundsreq/nanosp.03.png b/test-integration/snapshots/signTransactionNewfundsreq/nanosp.03.png new file mode 100644 index 00000000..ff8a2bbd Binary files /dev/null and b/test-integration/snapshots/signTransactionNewfundsreq/nanosp.03.png differ diff --git a/test-integration/snapshots/signTransactionNewfundsreq/nanosp.04.png b/test-integration/snapshots/signTransactionNewfundsreq/nanosp.04.png new file mode 100644 index 00000000..865f0bcd Binary files /dev/null and b/test-integration/snapshots/signTransactionNewfundsreq/nanosp.04.png differ diff --git a/test-integration/snapshots/signTransactionNewfundsreq/nanosp.05.png b/test-integration/snapshots/signTransactionNewfundsreq/nanosp.05.png new file mode 100644 index 00000000..c2bb4e70 Binary files /dev/null and b/test-integration/snapshots/signTransactionNewfundsreq/nanosp.05.png differ diff --git a/test-integration/snapshots/signTransactionNewfundsreq/nanosp.06.png b/test-integration/snapshots/signTransactionNewfundsreq/nanosp.06.png new file mode 100644 index 00000000..bb9b991d Binary files /dev/null and b/test-integration/snapshots/signTransactionNewfundsreq/nanosp.06.png differ diff --git a/test-integration/snapshots/signTransactionNewfundsreq/nanosp.07.png b/test-integration/snapshots/signTransactionNewfundsreq/nanosp.07.png new file mode 100644 index 00000000..8be05678 Binary files /dev/null and b/test-integration/snapshots/signTransactionNewfundsreq/nanosp.07.png differ diff --git a/test-integration/snapshots/signTransactionNewfundsreq/nanosp.08.png b/test-integration/snapshots/signTransactionNewfundsreq/nanosp.08.png new file mode 100644 index 00000000..53a92bd8 Binary files /dev/null and b/test-integration/snapshots/signTransactionNewfundsreq/nanosp.08.png differ diff --git a/test-integration/snapshots/signTransactionNewfundsreq/nanosp.09.png b/test-integration/snapshots/signTransactionNewfundsreq/nanosp.09.png new file mode 100644 index 00000000..d3fc7747 Binary files /dev/null and b/test-integration/snapshots/signTransactionNewfundsreq/nanosp.09.png differ diff --git a/test-integration/snapshots/signTransactionNewfundsreq/nanosp.10.png b/test-integration/snapshots/signTransactionNewfundsreq/nanosp.10.png new file mode 100644 index 00000000..48f9d314 Binary files /dev/null and b/test-integration/snapshots/signTransactionNewfundsreq/nanosp.10.png differ diff --git a/test-integration/snapshots/signTransactionNewfundsreq/nanosp.11.png b/test-integration/snapshots/signTransactionNewfundsreq/nanosp.11.png new file mode 100644 index 00000000..4bd0b0ea Binary files /dev/null and b/test-integration/snapshots/signTransactionNewfundsreq/nanosp.11.png differ diff --git a/test-integration/snapshots/signTransactionNewfundsreq/nanosp.12.png b/test-integration/snapshots/signTransactionNewfundsreq/nanosp.12.png new file mode 100644 index 00000000..34e5ceab Binary files /dev/null and b/test-integration/snapshots/signTransactionNewfundsreq/nanosp.12.png differ diff --git a/test-integration/snapshots/signTransactionNewfundsreq/nanosp.13.png b/test-integration/snapshots/signTransactionNewfundsreq/nanosp.13.png new file mode 100644 index 00000000..6f7fe29c Binary files /dev/null and b/test-integration/snapshots/signTransactionNewfundsreq/nanosp.13.png differ diff --git a/test-integration/snapshots/signTransactionNewfundsreq/nanosp.14.png b/test-integration/snapshots/signTransactionNewfundsreq/nanosp.14.png new file mode 100644 index 00000000..8ac15c6d Binary files /dev/null and b/test-integration/snapshots/signTransactionNewfundsreq/nanosp.14.png differ diff --git a/test-integration/snapshots/signTransactionNewfundsreq/nanosp.15.png b/test-integration/snapshots/signTransactionNewfundsreq/nanosp.15.png new file mode 100644 index 00000000..525864b4 Binary files /dev/null and b/test-integration/snapshots/signTransactionNewfundsreq/nanosp.15.png differ diff --git a/test-integration/snapshots/signTransactionNewfundsreq/nanosp.16.png b/test-integration/snapshots/signTransactionNewfundsreq/nanosp.16.png new file mode 100644 index 00000000..a7a87405 Binary files /dev/null and b/test-integration/snapshots/signTransactionNewfundsreq/nanosp.16.png differ diff --git a/test-integration/snapshots/signTransactionNewfundsreq/nanosp.17.png b/test-integration/snapshots/signTransactionNewfundsreq/nanosp.17.png new file mode 100644 index 00000000..8e0d2a37 Binary files /dev/null and b/test-integration/snapshots/signTransactionNewfundsreq/nanosp.17.png differ diff --git a/test-integration/snapshots/signTransactionNewfundsreq/nanosp.18.png b/test-integration/snapshots/signTransactionNewfundsreq/nanosp.18.png new file mode 100644 index 00000000..ff8a2bbd Binary files /dev/null and b/test-integration/snapshots/signTransactionNewfundsreq/nanosp.18.png differ diff --git a/test-integration/snapshots/signTransactionNewfundsreq/nanosp.19.png b/test-integration/snapshots/signTransactionNewfundsreq/nanosp.19.png new file mode 100644 index 00000000..865f0bcd Binary files /dev/null and b/test-integration/snapshots/signTransactionNewfundsreq/nanosp.19.png differ diff --git a/test-integration/snapshots/signTransactionNewfundsreq/nanosp.20.png b/test-integration/snapshots/signTransactionNewfundsreq/nanosp.20.png new file mode 100644 index 00000000..c2bb4e70 Binary files /dev/null and b/test-integration/snapshots/signTransactionNewfundsreq/nanosp.20.png differ diff --git a/test-integration/snapshots/signTransactionNewfundsreq/nanosp.21.png b/test-integration/snapshots/signTransactionNewfundsreq/nanosp.21.png new file mode 100644 index 00000000..bb9b991d Binary files /dev/null and b/test-integration/snapshots/signTransactionNewfundsreq/nanosp.21.png differ diff --git a/test-integration/snapshots/signTransactionNewfundsreq/nanosp.22.png b/test-integration/snapshots/signTransactionNewfundsreq/nanosp.22.png new file mode 100644 index 00000000..8be05678 Binary files /dev/null and b/test-integration/snapshots/signTransactionNewfundsreq/nanosp.22.png differ diff --git a/test-integration/snapshots/signTransactionNewfundsreq/nanosp.23.png b/test-integration/snapshots/signTransactionNewfundsreq/nanosp.23.png new file mode 100644 index 00000000..53a92bd8 Binary files /dev/null and b/test-integration/snapshots/signTransactionNewfundsreq/nanosp.23.png differ diff --git a/test-integration/snapshots/signTransactionNewfundsreq/nanosp.24.png b/test-integration/snapshots/signTransactionNewfundsreq/nanosp.24.png new file mode 100644 index 00000000..d3fc7747 Binary files /dev/null and b/test-integration/snapshots/signTransactionNewfundsreq/nanosp.24.png differ diff --git a/test-integration/snapshots/signTransactionNewfundsreq/nanosp.25.png b/test-integration/snapshots/signTransactionNewfundsreq/nanosp.25.png new file mode 100644 index 00000000..48f9d314 Binary files /dev/null and b/test-integration/snapshots/signTransactionNewfundsreq/nanosp.25.png differ diff --git a/test-integration/snapshots/signTransactionNewfundsreq/nanosp.26.png b/test-integration/snapshots/signTransactionNewfundsreq/nanosp.26.png new file mode 100644 index 00000000..4bd0b0ea Binary files /dev/null and b/test-integration/snapshots/signTransactionNewfundsreq/nanosp.26.png differ diff --git a/test-integration/snapshots/signTransactionNewfundsreq/nanosp.27.png b/test-integration/snapshots/signTransactionNewfundsreq/nanosp.27.png new file mode 100644 index 00000000..34e5ceab Binary files /dev/null and b/test-integration/snapshots/signTransactionNewfundsreq/nanosp.27.png differ diff --git a/test-integration/snapshots/signTransactionNewfundsreq/nanosp.28.png b/test-integration/snapshots/signTransactionNewfundsreq/nanosp.28.png new file mode 100644 index 00000000..6f7fe29c Binary files /dev/null and b/test-integration/snapshots/signTransactionNewfundsreq/nanosp.28.png differ diff --git a/test-integration/snapshots/signTransactionNewfundsreq/nanosp.29.png b/test-integration/snapshots/signTransactionNewfundsreq/nanosp.29.png new file mode 100644 index 00000000..8ac15c6d Binary files /dev/null and b/test-integration/snapshots/signTransactionNewfundsreq/nanosp.29.png differ diff --git a/test-integration/snapshots/signTransactionNewfundsreq/nanosp.30.png b/test-integration/snapshots/signTransactionNewfundsreq/nanosp.30.png new file mode 100644 index 00000000..525864b4 Binary files /dev/null and b/test-integration/snapshots/signTransactionNewfundsreq/nanosp.30.png differ diff --git a/test-integration/snapshots/signTransactionNewfundsreq/nanosp.31.png b/test-integration/snapshots/signTransactionNewfundsreq/nanosp.31.png new file mode 100644 index 00000000..a7a87405 Binary files /dev/null and b/test-integration/snapshots/signTransactionNewfundsreq/nanosp.31.png differ diff --git a/test-integration/snapshots/signTransactionNewfundsreq/nanosp.32.png b/test-integration/snapshots/signTransactionNewfundsreq/nanosp.32.png new file mode 100644 index 00000000..ada3168c Binary files /dev/null and b/test-integration/snapshots/signTransactionNewfundsreq/nanosp.32.png differ diff --git a/test-integration/snapshots/signTransactionNewfundsreq/nanosp.33.png b/test-integration/snapshots/signTransactionNewfundsreq/nanosp.33.png new file mode 100644 index 00000000..ff8a2bbd Binary files /dev/null and b/test-integration/snapshots/signTransactionNewfundsreq/nanosp.33.png differ diff --git a/test-integration/snapshots/signTransactionNewfundsreq/nanosp.34.png b/test-integration/snapshots/signTransactionNewfundsreq/nanosp.34.png new file mode 100644 index 00000000..865f0bcd Binary files /dev/null and b/test-integration/snapshots/signTransactionNewfundsreq/nanosp.34.png differ diff --git a/test-integration/snapshots/signTransactionNewfundsreq/nanosp.35.png b/test-integration/snapshots/signTransactionNewfundsreq/nanosp.35.png new file mode 100644 index 00000000..c2bb4e70 Binary files /dev/null and b/test-integration/snapshots/signTransactionNewfundsreq/nanosp.35.png differ diff --git a/test-integration/snapshots/signTransactionNewfundsreq/nanosp.36.png b/test-integration/snapshots/signTransactionNewfundsreq/nanosp.36.png new file mode 100644 index 00000000..bb9b991d Binary files /dev/null and b/test-integration/snapshots/signTransactionNewfundsreq/nanosp.36.png differ diff --git a/test-integration/snapshots/signTransactionNewfundsreq/nanosp.37.png b/test-integration/snapshots/signTransactionNewfundsreq/nanosp.37.png new file mode 100644 index 00000000..8be05678 Binary files /dev/null and b/test-integration/snapshots/signTransactionNewfundsreq/nanosp.37.png differ diff --git a/test-integration/snapshots/signTransactionNewfundsreq/nanosp.38.png b/test-integration/snapshots/signTransactionNewfundsreq/nanosp.38.png new file mode 100644 index 00000000..53a92bd8 Binary files /dev/null and b/test-integration/snapshots/signTransactionNewfundsreq/nanosp.38.png differ diff --git a/test-integration/snapshots/signTransactionNewfundsreq/nanosp.39.png b/test-integration/snapshots/signTransactionNewfundsreq/nanosp.39.png new file mode 100644 index 00000000..d3fc7747 Binary files /dev/null and b/test-integration/snapshots/signTransactionNewfundsreq/nanosp.39.png differ diff --git a/test-integration/snapshots/signTransactionNewfundsreq/nanosp.40.png b/test-integration/snapshots/signTransactionNewfundsreq/nanosp.40.png new file mode 100644 index 00000000..48f9d314 Binary files /dev/null and b/test-integration/snapshots/signTransactionNewfundsreq/nanosp.40.png differ diff --git a/test-integration/snapshots/signTransactionNewfundsreq/nanosp.41.png b/test-integration/snapshots/signTransactionNewfundsreq/nanosp.41.png new file mode 100644 index 00000000..4bd0b0ea Binary files /dev/null and b/test-integration/snapshots/signTransactionNewfundsreq/nanosp.41.png differ diff --git a/test-integration/snapshots/signTransactionNewfundsreq/nanosp.42.png b/test-integration/snapshots/signTransactionNewfundsreq/nanosp.42.png new file mode 100644 index 00000000..34e5ceab Binary files /dev/null and b/test-integration/snapshots/signTransactionNewfundsreq/nanosp.42.png differ diff --git a/test-integration/snapshots/signTransactionNewfundsreq/nanosp.43.png b/test-integration/snapshots/signTransactionNewfundsreq/nanosp.43.png new file mode 100644 index 00000000..6f7fe29c Binary files /dev/null and b/test-integration/snapshots/signTransactionNewfundsreq/nanosp.43.png differ diff --git a/test-integration/snapshots/signTransactionNewfundsreq/nanosp.44.png b/test-integration/snapshots/signTransactionNewfundsreq/nanosp.44.png new file mode 100644 index 00000000..8ac15c6d Binary files /dev/null and b/test-integration/snapshots/signTransactionNewfundsreq/nanosp.44.png differ diff --git a/test-integration/snapshots/signTransactionNewfundsreq/nanosp.45.png b/test-integration/snapshots/signTransactionNewfundsreq/nanosp.45.png new file mode 100644 index 00000000..525864b4 Binary files /dev/null and b/test-integration/snapshots/signTransactionNewfundsreq/nanosp.45.png differ diff --git a/test-integration/snapshots/signTransactionNewfundsreq/nanosp.46.png b/test-integration/snapshots/signTransactionNewfundsreq/nanosp.46.png new file mode 100644 index 00000000..a7a87405 Binary files /dev/null and b/test-integration/snapshots/signTransactionNewfundsreq/nanosp.46.png differ diff --git a/test-integration/snapshots/signTransactionNewfundsreq/nanosp.47.png b/test-integration/snapshots/signTransactionNewfundsreq/nanosp.47.png new file mode 100644 index 00000000..8e0d2a37 Binary files /dev/null and b/test-integration/snapshots/signTransactionNewfundsreq/nanosp.47.png differ diff --git a/test-integration/snapshots/signTransactionNewfundsreq/nanosp.48.png b/test-integration/snapshots/signTransactionNewfundsreq/nanosp.48.png new file mode 100644 index 00000000..ff8a2bbd Binary files /dev/null and b/test-integration/snapshots/signTransactionNewfundsreq/nanosp.48.png differ diff --git a/test-integration/snapshots/signTransactionNewfundsreq/nanosp.49.png b/test-integration/snapshots/signTransactionNewfundsreq/nanosp.49.png new file mode 100644 index 00000000..865f0bcd Binary files /dev/null and b/test-integration/snapshots/signTransactionNewfundsreq/nanosp.49.png differ diff --git a/test-integration/snapshots/signTransactionNewfundsreq/nanosp.50.png b/test-integration/snapshots/signTransactionNewfundsreq/nanosp.50.png new file mode 100644 index 00000000..c2bb4e70 Binary files /dev/null and b/test-integration/snapshots/signTransactionNewfundsreq/nanosp.50.png differ diff --git a/test-integration/snapshots/signTransactionNewfundsreq/nanosp.51.png b/test-integration/snapshots/signTransactionNewfundsreq/nanosp.51.png new file mode 100644 index 00000000..bb9b991d Binary files /dev/null and b/test-integration/snapshots/signTransactionNewfundsreq/nanosp.51.png differ diff --git a/test-integration/snapshots/signTransactionNewfundsreq/nanosp.52.png b/test-integration/snapshots/signTransactionNewfundsreq/nanosp.52.png new file mode 100644 index 00000000..8be05678 Binary files /dev/null and b/test-integration/snapshots/signTransactionNewfundsreq/nanosp.52.png differ diff --git a/test-integration/snapshots/signTransactionNewfundsreq/nanosp.53.png b/test-integration/snapshots/signTransactionNewfundsreq/nanosp.53.png new file mode 100644 index 00000000..53a92bd8 Binary files /dev/null and b/test-integration/snapshots/signTransactionNewfundsreq/nanosp.53.png differ diff --git a/test-integration/snapshots/signTransactionNewfundsreq/nanosp.54.png b/test-integration/snapshots/signTransactionNewfundsreq/nanosp.54.png new file mode 100644 index 00000000..d3fc7747 Binary files /dev/null and b/test-integration/snapshots/signTransactionNewfundsreq/nanosp.54.png differ diff --git a/test-integration/snapshots/signTransactionNewfundsreq/nanosp.55.png b/test-integration/snapshots/signTransactionNewfundsreq/nanosp.55.png new file mode 100644 index 00000000..48f9d314 Binary files /dev/null and b/test-integration/snapshots/signTransactionNewfundsreq/nanosp.55.png differ diff --git a/test-integration/snapshots/signTransactionNewfundsreq/nanosp.56.png b/test-integration/snapshots/signTransactionNewfundsreq/nanosp.56.png new file mode 100644 index 00000000..4bd0b0ea Binary files /dev/null and b/test-integration/snapshots/signTransactionNewfundsreq/nanosp.56.png differ diff --git a/test-integration/snapshots/signTransactionNewfundsreq/nanosp.57.png b/test-integration/snapshots/signTransactionNewfundsreq/nanosp.57.png new file mode 100644 index 00000000..34e5ceab Binary files /dev/null and b/test-integration/snapshots/signTransactionNewfundsreq/nanosp.57.png differ diff --git a/test-integration/snapshots/signTransactionNewfundsreq/nanosp.58.png b/test-integration/snapshots/signTransactionNewfundsreq/nanosp.58.png new file mode 100644 index 00000000..6f7fe29c Binary files /dev/null and b/test-integration/snapshots/signTransactionNewfundsreq/nanosp.58.png differ diff --git a/test-integration/snapshots/signTransactionNewfundsreq/nanosp.59.png b/test-integration/snapshots/signTransactionNewfundsreq/nanosp.59.png new file mode 100644 index 00000000..8ac15c6d Binary files /dev/null and b/test-integration/snapshots/signTransactionNewfundsreq/nanosp.59.png differ diff --git a/test-integration/snapshots/signTransactionNewfundsreq/nanosp.60.png b/test-integration/snapshots/signTransactionNewfundsreq/nanosp.60.png new file mode 100644 index 00000000..525864b4 Binary files /dev/null and b/test-integration/snapshots/signTransactionNewfundsreq/nanosp.60.png differ diff --git a/test-integration/snapshots/signTransactionNewfundsreq/nanosp.61.png b/test-integration/snapshots/signTransactionNewfundsreq/nanosp.61.png new file mode 100644 index 00000000..a7a87405 Binary files /dev/null and b/test-integration/snapshots/signTransactionNewfundsreq/nanosp.61.png differ diff --git a/test-integration/snapshots/signTransactionNewfundsreq/nanox.01.png b/test-integration/snapshots/signTransactionNewfundsreq/nanox.01.png new file mode 100644 index 00000000..c843773c Binary files /dev/null and b/test-integration/snapshots/signTransactionNewfundsreq/nanox.01.png differ diff --git a/test-integration/snapshots/signTransactionNewfundsreq/nanox.02.png b/test-integration/snapshots/signTransactionNewfundsreq/nanox.02.png new file mode 100644 index 00000000..ada3168c Binary files /dev/null and b/test-integration/snapshots/signTransactionNewfundsreq/nanox.02.png differ diff --git a/test-integration/snapshots/signTransactionNewfundsreq/nanox.03.png b/test-integration/snapshots/signTransactionNewfundsreq/nanox.03.png new file mode 100644 index 00000000..a4101bc7 Binary files /dev/null and b/test-integration/snapshots/signTransactionNewfundsreq/nanox.03.png differ diff --git a/test-integration/snapshots/signTransactionNewfundsreq/nanox.04.png b/test-integration/snapshots/signTransactionNewfundsreq/nanox.04.png new file mode 100644 index 00000000..865f0bcd Binary files /dev/null and b/test-integration/snapshots/signTransactionNewfundsreq/nanox.04.png differ diff --git a/test-integration/snapshots/signTransactionNewfundsreq/nanox.05.png b/test-integration/snapshots/signTransactionNewfundsreq/nanox.05.png new file mode 100644 index 00000000..c2bb4e70 Binary files /dev/null and b/test-integration/snapshots/signTransactionNewfundsreq/nanox.05.png differ diff --git a/test-integration/snapshots/signTransactionNewfundsreq/nanox.06.png b/test-integration/snapshots/signTransactionNewfundsreq/nanox.06.png new file mode 100644 index 00000000..bb9b991d Binary files /dev/null and b/test-integration/snapshots/signTransactionNewfundsreq/nanox.06.png differ diff --git a/test-integration/snapshots/signTransactionNewfundsreq/nanox.07.png b/test-integration/snapshots/signTransactionNewfundsreq/nanox.07.png new file mode 100644 index 00000000..095632e6 Binary files /dev/null and b/test-integration/snapshots/signTransactionNewfundsreq/nanox.07.png differ diff --git a/test-integration/snapshots/signTransactionNewfundsreq/nanox.08.png b/test-integration/snapshots/signTransactionNewfundsreq/nanox.08.png new file mode 100644 index 00000000..2abe5bd2 Binary files /dev/null and b/test-integration/snapshots/signTransactionNewfundsreq/nanox.08.png differ diff --git a/test-integration/snapshots/signTransactionNewfundsreq/nanox.09.png b/test-integration/snapshots/signTransactionNewfundsreq/nanox.09.png new file mode 100644 index 00000000..d3fc7747 Binary files /dev/null and b/test-integration/snapshots/signTransactionNewfundsreq/nanox.09.png differ diff --git a/test-integration/snapshots/signTransactionNewfundsreq/nanox.10.png b/test-integration/snapshots/signTransactionNewfundsreq/nanox.10.png new file mode 100644 index 00000000..48f9d314 Binary files /dev/null and b/test-integration/snapshots/signTransactionNewfundsreq/nanox.10.png differ diff --git a/test-integration/snapshots/signTransactionNewfundsreq/nanox.11.png b/test-integration/snapshots/signTransactionNewfundsreq/nanox.11.png new file mode 100644 index 00000000..00e1084a Binary files /dev/null and b/test-integration/snapshots/signTransactionNewfundsreq/nanox.11.png differ diff --git a/test-integration/snapshots/signTransactionNewfundsreq/nanox.12.png b/test-integration/snapshots/signTransactionNewfundsreq/nanox.12.png new file mode 100644 index 00000000..34e5ceab Binary files /dev/null and b/test-integration/snapshots/signTransactionNewfundsreq/nanox.12.png differ diff --git a/test-integration/snapshots/signTransactionNewfundsreq/nanox.13.png b/test-integration/snapshots/signTransactionNewfundsreq/nanox.13.png new file mode 100644 index 00000000..4b4b7f83 Binary files /dev/null and b/test-integration/snapshots/signTransactionNewfundsreq/nanox.13.png differ diff --git a/test-integration/snapshots/signTransactionNewfundsreq/nanox.14.png b/test-integration/snapshots/signTransactionNewfundsreq/nanox.14.png new file mode 100644 index 00000000..5d0997ef Binary files /dev/null and b/test-integration/snapshots/signTransactionNewfundsreq/nanox.14.png differ diff --git a/test-integration/snapshots/signTransactionNewfundsreq/nanox.15.png b/test-integration/snapshots/signTransactionNewfundsreq/nanox.15.png new file mode 100644 index 00000000..2f8f58e6 Binary files /dev/null and b/test-integration/snapshots/signTransactionNewfundsreq/nanox.15.png differ diff --git a/test-integration/snapshots/signTransactionNewfundsreq/nanox.16.png b/test-integration/snapshots/signTransactionNewfundsreq/nanox.16.png new file mode 100644 index 00000000..c843773c Binary files /dev/null and b/test-integration/snapshots/signTransactionNewfundsreq/nanox.16.png differ diff --git a/test-integration/snapshots/signTransactionNewfundsreq/nanox.17.png b/test-integration/snapshots/signTransactionNewfundsreq/nanox.17.png new file mode 100644 index 00000000..8e0d2a37 Binary files /dev/null and b/test-integration/snapshots/signTransactionNewfundsreq/nanox.17.png differ diff --git a/test-integration/snapshots/signTransactionNewfundsreq/nanox.18.png b/test-integration/snapshots/signTransactionNewfundsreq/nanox.18.png new file mode 100644 index 00000000..a4101bc7 Binary files /dev/null and b/test-integration/snapshots/signTransactionNewfundsreq/nanox.18.png differ diff --git a/test-integration/snapshots/signTransactionNewfundsreq/nanox.19.png b/test-integration/snapshots/signTransactionNewfundsreq/nanox.19.png new file mode 100644 index 00000000..865f0bcd Binary files /dev/null and b/test-integration/snapshots/signTransactionNewfundsreq/nanox.19.png differ diff --git a/test-integration/snapshots/signTransactionNewfundsreq/nanox.20.png b/test-integration/snapshots/signTransactionNewfundsreq/nanox.20.png new file mode 100644 index 00000000..c2bb4e70 Binary files /dev/null and b/test-integration/snapshots/signTransactionNewfundsreq/nanox.20.png differ diff --git a/test-integration/snapshots/signTransactionNewfundsreq/nanox.21.png b/test-integration/snapshots/signTransactionNewfundsreq/nanox.21.png new file mode 100644 index 00000000..bb9b991d Binary files /dev/null and b/test-integration/snapshots/signTransactionNewfundsreq/nanox.21.png differ diff --git a/test-integration/snapshots/signTransactionNewfundsreq/nanox.22.png b/test-integration/snapshots/signTransactionNewfundsreq/nanox.22.png new file mode 100644 index 00000000..095632e6 Binary files /dev/null and b/test-integration/snapshots/signTransactionNewfundsreq/nanox.22.png differ diff --git a/test-integration/snapshots/signTransactionNewfundsreq/nanox.23.png b/test-integration/snapshots/signTransactionNewfundsreq/nanox.23.png new file mode 100644 index 00000000..2abe5bd2 Binary files /dev/null and b/test-integration/snapshots/signTransactionNewfundsreq/nanox.23.png differ diff --git a/test-integration/snapshots/signTransactionNewfundsreq/nanox.24.png b/test-integration/snapshots/signTransactionNewfundsreq/nanox.24.png new file mode 100644 index 00000000..d3fc7747 Binary files /dev/null and b/test-integration/snapshots/signTransactionNewfundsreq/nanox.24.png differ diff --git a/test-integration/snapshots/signTransactionNewfundsreq/nanox.25.png b/test-integration/snapshots/signTransactionNewfundsreq/nanox.25.png new file mode 100644 index 00000000..48f9d314 Binary files /dev/null and b/test-integration/snapshots/signTransactionNewfundsreq/nanox.25.png differ diff --git a/test-integration/snapshots/signTransactionNewfundsreq/nanox.26.png b/test-integration/snapshots/signTransactionNewfundsreq/nanox.26.png new file mode 100644 index 00000000..00e1084a Binary files /dev/null and b/test-integration/snapshots/signTransactionNewfundsreq/nanox.26.png differ diff --git a/test-integration/snapshots/signTransactionNewfundsreq/nanox.27.png b/test-integration/snapshots/signTransactionNewfundsreq/nanox.27.png new file mode 100644 index 00000000..34e5ceab Binary files /dev/null and b/test-integration/snapshots/signTransactionNewfundsreq/nanox.27.png differ diff --git a/test-integration/snapshots/signTransactionNewfundsreq/nanox.28.png b/test-integration/snapshots/signTransactionNewfundsreq/nanox.28.png new file mode 100644 index 00000000..4b4b7f83 Binary files /dev/null and b/test-integration/snapshots/signTransactionNewfundsreq/nanox.28.png differ diff --git a/test-integration/snapshots/signTransactionNewfundsreq/nanox.29.png b/test-integration/snapshots/signTransactionNewfundsreq/nanox.29.png new file mode 100644 index 00000000..5d0997ef Binary files /dev/null and b/test-integration/snapshots/signTransactionNewfundsreq/nanox.29.png differ diff --git a/test-integration/snapshots/signTransactionNewfundsreq/nanox.30.png b/test-integration/snapshots/signTransactionNewfundsreq/nanox.30.png new file mode 100644 index 00000000..2f8f58e6 Binary files /dev/null and b/test-integration/snapshots/signTransactionNewfundsreq/nanox.30.png differ diff --git a/test-integration/snapshots/signTransactionNewfundsreq/nanox.31.png b/test-integration/snapshots/signTransactionNewfundsreq/nanox.31.png new file mode 100644 index 00000000..c843773c Binary files /dev/null and b/test-integration/snapshots/signTransactionNewfundsreq/nanox.31.png differ diff --git a/test-integration/snapshots/signTransactionNewfundsreq/nanox.32.png b/test-integration/snapshots/signTransactionNewfundsreq/nanox.32.png new file mode 100644 index 00000000..ada3168c Binary files /dev/null and b/test-integration/snapshots/signTransactionNewfundsreq/nanox.32.png differ diff --git a/test-integration/snapshots/signTransactionNewfundsreq/nanox.33.png b/test-integration/snapshots/signTransactionNewfundsreq/nanox.33.png new file mode 100644 index 00000000..a4101bc7 Binary files /dev/null and b/test-integration/snapshots/signTransactionNewfundsreq/nanox.33.png differ diff --git a/test-integration/snapshots/signTransactionNewfundsreq/nanox.34.png b/test-integration/snapshots/signTransactionNewfundsreq/nanox.34.png new file mode 100644 index 00000000..865f0bcd Binary files /dev/null and b/test-integration/snapshots/signTransactionNewfundsreq/nanox.34.png differ diff --git a/test-integration/snapshots/signTransactionNewfundsreq/nanox.35.png b/test-integration/snapshots/signTransactionNewfundsreq/nanox.35.png new file mode 100644 index 00000000..c2bb4e70 Binary files /dev/null and b/test-integration/snapshots/signTransactionNewfundsreq/nanox.35.png differ diff --git a/test-integration/snapshots/signTransactionNewfundsreq/nanox.36.png b/test-integration/snapshots/signTransactionNewfundsreq/nanox.36.png new file mode 100644 index 00000000..bb9b991d Binary files /dev/null and b/test-integration/snapshots/signTransactionNewfundsreq/nanox.36.png differ diff --git a/test-integration/snapshots/signTransactionNewfundsreq/nanox.37.png b/test-integration/snapshots/signTransactionNewfundsreq/nanox.37.png new file mode 100644 index 00000000..095632e6 Binary files /dev/null and b/test-integration/snapshots/signTransactionNewfundsreq/nanox.37.png differ diff --git a/test-integration/snapshots/signTransactionNewfundsreq/nanox.38.png b/test-integration/snapshots/signTransactionNewfundsreq/nanox.38.png new file mode 100644 index 00000000..2abe5bd2 Binary files /dev/null and b/test-integration/snapshots/signTransactionNewfundsreq/nanox.38.png differ diff --git a/test-integration/snapshots/signTransactionNewfundsreq/nanox.39.png b/test-integration/snapshots/signTransactionNewfundsreq/nanox.39.png new file mode 100644 index 00000000..d3fc7747 Binary files /dev/null and b/test-integration/snapshots/signTransactionNewfundsreq/nanox.39.png differ diff --git a/test-integration/snapshots/signTransactionNewfundsreq/nanox.40.png b/test-integration/snapshots/signTransactionNewfundsreq/nanox.40.png new file mode 100644 index 00000000..48f9d314 Binary files /dev/null and b/test-integration/snapshots/signTransactionNewfundsreq/nanox.40.png differ diff --git a/test-integration/snapshots/signTransactionNewfundsreq/nanox.41.png b/test-integration/snapshots/signTransactionNewfundsreq/nanox.41.png new file mode 100644 index 00000000..00e1084a Binary files /dev/null and b/test-integration/snapshots/signTransactionNewfundsreq/nanox.41.png differ diff --git a/test-integration/snapshots/signTransactionNewfundsreq/nanox.42.png b/test-integration/snapshots/signTransactionNewfundsreq/nanox.42.png new file mode 100644 index 00000000..34e5ceab Binary files /dev/null and b/test-integration/snapshots/signTransactionNewfundsreq/nanox.42.png differ diff --git a/test-integration/snapshots/signTransactionNewfundsreq/nanox.43.png b/test-integration/snapshots/signTransactionNewfundsreq/nanox.43.png new file mode 100644 index 00000000..4b4b7f83 Binary files /dev/null and b/test-integration/snapshots/signTransactionNewfundsreq/nanox.43.png differ diff --git a/test-integration/snapshots/signTransactionNewfundsreq/nanox.44.png b/test-integration/snapshots/signTransactionNewfundsreq/nanox.44.png new file mode 100644 index 00000000..5d0997ef Binary files /dev/null and b/test-integration/snapshots/signTransactionNewfundsreq/nanox.44.png differ diff --git a/test-integration/snapshots/signTransactionNewfundsreq/nanox.45.png b/test-integration/snapshots/signTransactionNewfundsreq/nanox.45.png new file mode 100644 index 00000000..2f8f58e6 Binary files /dev/null and b/test-integration/snapshots/signTransactionNewfundsreq/nanox.45.png differ diff --git a/test-integration/snapshots/signTransactionNewfundsreq/nanox.46.png b/test-integration/snapshots/signTransactionNewfundsreq/nanox.46.png new file mode 100644 index 00000000..c843773c Binary files /dev/null and b/test-integration/snapshots/signTransactionNewfundsreq/nanox.46.png differ diff --git a/test-integration/snapshots/signTransactionNewfundsreq/nanox.47.png b/test-integration/snapshots/signTransactionNewfundsreq/nanox.47.png new file mode 100644 index 00000000..8e0d2a37 Binary files /dev/null and b/test-integration/snapshots/signTransactionNewfundsreq/nanox.47.png differ diff --git a/test-integration/snapshots/signTransactionNewfundsreq/nanox.48.png b/test-integration/snapshots/signTransactionNewfundsreq/nanox.48.png new file mode 100644 index 00000000..a4101bc7 Binary files /dev/null and b/test-integration/snapshots/signTransactionNewfundsreq/nanox.48.png differ diff --git a/test-integration/snapshots/signTransactionNewfundsreq/nanox.49.png b/test-integration/snapshots/signTransactionNewfundsreq/nanox.49.png new file mode 100644 index 00000000..865f0bcd Binary files /dev/null and b/test-integration/snapshots/signTransactionNewfundsreq/nanox.49.png differ diff --git a/test-integration/snapshots/signTransactionNewfundsreq/nanox.50.png b/test-integration/snapshots/signTransactionNewfundsreq/nanox.50.png new file mode 100644 index 00000000..c2bb4e70 Binary files /dev/null and b/test-integration/snapshots/signTransactionNewfundsreq/nanox.50.png differ diff --git a/test-integration/snapshots/signTransactionNewfundsreq/nanox.51.png b/test-integration/snapshots/signTransactionNewfundsreq/nanox.51.png new file mode 100644 index 00000000..bb9b991d Binary files /dev/null and b/test-integration/snapshots/signTransactionNewfundsreq/nanox.51.png differ diff --git a/test-integration/snapshots/signTransactionNewfundsreq/nanox.52.png b/test-integration/snapshots/signTransactionNewfundsreq/nanox.52.png new file mode 100644 index 00000000..095632e6 Binary files /dev/null and b/test-integration/snapshots/signTransactionNewfundsreq/nanox.52.png differ diff --git a/test-integration/snapshots/signTransactionNewfundsreq/nanox.53.png b/test-integration/snapshots/signTransactionNewfundsreq/nanox.53.png new file mode 100644 index 00000000..2abe5bd2 Binary files /dev/null and b/test-integration/snapshots/signTransactionNewfundsreq/nanox.53.png differ diff --git a/test-integration/snapshots/signTransactionNewfundsreq/nanox.54.png b/test-integration/snapshots/signTransactionNewfundsreq/nanox.54.png new file mode 100644 index 00000000..d3fc7747 Binary files /dev/null and b/test-integration/snapshots/signTransactionNewfundsreq/nanox.54.png differ diff --git a/test-integration/snapshots/signTransactionNewfundsreq/nanox.55.png b/test-integration/snapshots/signTransactionNewfundsreq/nanox.55.png new file mode 100644 index 00000000..48f9d314 Binary files /dev/null and b/test-integration/snapshots/signTransactionNewfundsreq/nanox.55.png differ diff --git a/test-integration/snapshots/signTransactionNewfundsreq/nanox.56.png b/test-integration/snapshots/signTransactionNewfundsreq/nanox.56.png new file mode 100644 index 00000000..00e1084a Binary files /dev/null and b/test-integration/snapshots/signTransactionNewfundsreq/nanox.56.png differ diff --git a/test-integration/snapshots/signTransactionNewfundsreq/nanox.57.png b/test-integration/snapshots/signTransactionNewfundsreq/nanox.57.png new file mode 100644 index 00000000..34e5ceab Binary files /dev/null and b/test-integration/snapshots/signTransactionNewfundsreq/nanox.57.png differ diff --git a/test-integration/snapshots/signTransactionNewfundsreq/nanox.58.png b/test-integration/snapshots/signTransactionNewfundsreq/nanox.58.png new file mode 100644 index 00000000..4b4b7f83 Binary files /dev/null and b/test-integration/snapshots/signTransactionNewfundsreq/nanox.58.png differ diff --git a/test-integration/snapshots/signTransactionNewfundsreq/nanox.59.png b/test-integration/snapshots/signTransactionNewfundsreq/nanox.59.png new file mode 100644 index 00000000..5d0997ef Binary files /dev/null and b/test-integration/snapshots/signTransactionNewfundsreq/nanox.59.png differ diff --git a/test-integration/snapshots/signTransactionNewfundsreq/nanox.60.png b/test-integration/snapshots/signTransactionNewfundsreq/nanox.60.png new file mode 100644 index 00000000..2f8f58e6 Binary files /dev/null and b/test-integration/snapshots/signTransactionNewfundsreq/nanox.60.png differ diff --git a/test-integration/snapshots/signTransactionNewfundsreq/nanox.61.png b/test-integration/snapshots/signTransactionNewfundsreq/nanox.61.png new file mode 100644 index 00000000..c843773c Binary files /dev/null and b/test-integration/snapshots/signTransactionNewfundsreq/nanox.61.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.01.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.01.png new file mode 100644 index 00000000..a0f9b734 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.01.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.02.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.02.png new file mode 100644 index 00000000..076a821e Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.02.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.03.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.03.png new file mode 100644 index 00000000..d89b4fbf Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.03.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.04.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.04.png new file mode 100644 index 00000000..04e17660 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.04.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.05.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.05.png new file mode 100644 index 00000000..961c0c11 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.05.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.06.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.06.png new file mode 100644 index 00000000..b42d7b08 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.06.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.07.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.07.png new file mode 100644 index 00000000..d1eac39e Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.07.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.08.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.08.png new file mode 100644 index 00000000..c9de0604 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.08.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.09.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.09.png new file mode 100644 index 00000000..a0f9b734 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.09.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.10.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.10.png new file mode 100644 index 00000000..076a821e Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.10.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.100.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.100.png new file mode 100644 index 00000000..c72f2a1f Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.100.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.101.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.101.png new file mode 100644 index 00000000..e5890ad3 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.101.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.102.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.102.png new file mode 100644 index 00000000..08681fd1 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.102.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.103.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.103.png new file mode 100644 index 00000000..5d33b954 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.103.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.104.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.104.png new file mode 100644 index 00000000..fea8c647 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.104.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.105.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.105.png new file mode 100644 index 00000000..961c0c11 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.105.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.106.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.106.png new file mode 100644 index 00000000..b42d7b08 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.106.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.107.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.107.png new file mode 100644 index 00000000..d1eac39e Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.107.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.108.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.108.png new file mode 100644 index 00000000..c9de0604 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.108.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.109.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.109.png new file mode 100644 index 00000000..a0f9b734 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.109.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.11.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.11.png new file mode 100644 index 00000000..d89b4fbf Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.11.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.110.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.110.png new file mode 100644 index 00000000..076a821e Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.110.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.111.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.111.png new file mode 100644 index 00000000..d89b4fbf Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.111.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.112.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.112.png new file mode 100644 index 00000000..04e17660 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.112.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.113.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.113.png new file mode 100644 index 00000000..0867c552 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.113.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.114.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.114.png new file mode 100644 index 00000000..d382599a Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.114.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.115.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.115.png new file mode 100644 index 00000000..f3864e79 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.115.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.116.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.116.png new file mode 100644 index 00000000..c72f2a1f Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.116.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.117.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.117.png new file mode 100644 index 00000000..e5890ad3 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.117.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.118.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.118.png new file mode 100644 index 00000000..08681fd1 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.118.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.119.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.119.png new file mode 100644 index 00000000..5d33b954 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.119.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.12.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.12.png new file mode 100644 index 00000000..04e17660 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.12.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.120.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.120.png new file mode 100644 index 00000000..fea8c647 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.120.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.121.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.121.png new file mode 100644 index 00000000..c7b2a6cd Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.121.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.122.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.122.png new file mode 100644 index 00000000..961c0c11 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.122.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.123.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.123.png new file mode 100644 index 00000000..b42d7b08 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.123.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.124.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.124.png new file mode 100644 index 00000000..d1eac39e Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.124.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.125.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.125.png new file mode 100644 index 00000000..c9de0604 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.125.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.126.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.126.png new file mode 100644 index 00000000..a0f9b734 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.126.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.127.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.127.png new file mode 100644 index 00000000..076a821e Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.127.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.128.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.128.png new file mode 100644 index 00000000..d89b4fbf Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.128.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.129.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.129.png new file mode 100644 index 00000000..04e17660 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.129.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.13.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.13.png new file mode 100644 index 00000000..0867c552 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.13.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.130.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.130.png new file mode 100644 index 00000000..0867c552 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.130.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.131.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.131.png new file mode 100644 index 00000000..d382599a Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.131.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.132.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.132.png new file mode 100644 index 00000000..f3864e79 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.132.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.133.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.133.png new file mode 100644 index 00000000..c72f2a1f Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.133.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.134.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.134.png new file mode 100644 index 00000000..e5890ad3 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.134.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.135.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.135.png new file mode 100644 index 00000000..08681fd1 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.135.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.136.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.136.png new file mode 100644 index 00000000..5d33b954 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.136.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.137.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.137.png new file mode 100644 index 00000000..fea8c647 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.137.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.138.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.138.png new file mode 100644 index 00000000..c7b2a6cd Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.138.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.139.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.139.png new file mode 100644 index 00000000..9a51194a Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.139.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.14.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.14.png new file mode 100644 index 00000000..961c0c11 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.14.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.140.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.140.png new file mode 100644 index 00000000..961c0c11 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.140.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.141.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.141.png new file mode 100644 index 00000000..b42d7b08 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.141.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.142.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.142.png new file mode 100644 index 00000000..d1eac39e Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.142.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.143.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.143.png new file mode 100644 index 00000000..c9de0604 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.143.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.144.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.144.png new file mode 100644 index 00000000..a0f9b734 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.144.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.145.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.145.png new file mode 100644 index 00000000..076a821e Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.145.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.146.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.146.png new file mode 100644 index 00000000..d89b4fbf Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.146.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.147.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.147.png new file mode 100644 index 00000000..04e17660 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.147.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.148.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.148.png new file mode 100644 index 00000000..0867c552 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.148.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.149.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.149.png new file mode 100644 index 00000000..d382599a Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.149.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.15.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.15.png new file mode 100644 index 00000000..b42d7b08 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.15.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.150.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.150.png new file mode 100644 index 00000000..f3864e79 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.150.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.151.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.151.png new file mode 100644 index 00000000..c72f2a1f Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.151.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.152.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.152.png new file mode 100644 index 00000000..e5890ad3 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.152.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.153.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.153.png new file mode 100644 index 00000000..08681fd1 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.153.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.154.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.154.png new file mode 100644 index 00000000..5d33b954 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.154.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.155.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.155.png new file mode 100644 index 00000000..fea8c647 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.155.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.156.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.156.png new file mode 100644 index 00000000..c7b2a6cd Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.156.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.157.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.157.png new file mode 100644 index 00000000..9a51194a Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.157.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.158.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.158.png new file mode 100644 index 00000000..1aa431c3 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.158.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.159.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.159.png new file mode 100644 index 00000000..961c0c11 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.159.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.16.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.16.png new file mode 100644 index 00000000..d1eac39e Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.16.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.160.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.160.png new file mode 100644 index 00000000..b42d7b08 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.160.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.161.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.161.png new file mode 100644 index 00000000..d1eac39e Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.161.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.162.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.162.png new file mode 100644 index 00000000..c9de0604 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.162.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.163.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.163.png new file mode 100644 index 00000000..a0f9b734 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.163.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.164.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.164.png new file mode 100644 index 00000000..076a821e Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.164.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.165.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.165.png new file mode 100644 index 00000000..d89b4fbf Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.165.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.166.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.166.png new file mode 100644 index 00000000..04e17660 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.166.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.167.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.167.png new file mode 100644 index 00000000..0867c552 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.167.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.168.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.168.png new file mode 100644 index 00000000..d382599a Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.168.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.169.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.169.png new file mode 100644 index 00000000..f3864e79 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.169.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.17.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.17.png new file mode 100644 index 00000000..c9de0604 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.17.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.170.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.170.png new file mode 100644 index 00000000..c72f2a1f Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.170.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.171.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.171.png new file mode 100644 index 00000000..e5890ad3 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.171.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.172.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.172.png new file mode 100644 index 00000000..08681fd1 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.172.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.173.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.173.png new file mode 100644 index 00000000..5d33b954 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.173.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.174.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.174.png new file mode 100644 index 00000000..fea8c647 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.174.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.175.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.175.png new file mode 100644 index 00000000..c7b2a6cd Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.175.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.176.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.176.png new file mode 100644 index 00000000..9a51194a Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.176.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.177.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.177.png new file mode 100644 index 00000000..1aa431c3 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.177.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.178.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.178.png new file mode 100644 index 00000000..56d2c181 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.178.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.179.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.179.png new file mode 100644 index 00000000..961c0c11 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.179.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.18.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.18.png new file mode 100644 index 00000000..a0f9b734 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.18.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.180.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.180.png new file mode 100644 index 00000000..b42d7b08 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.180.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.181.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.181.png new file mode 100644 index 00000000..d1eac39e Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.181.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.182.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.182.png new file mode 100644 index 00000000..c9de0604 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.182.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.183.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.183.png new file mode 100644 index 00000000..a0f9b734 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.183.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.184.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.184.png new file mode 100644 index 00000000..076a821e Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.184.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.185.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.185.png new file mode 100644 index 00000000..d89b4fbf Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.185.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.186.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.186.png new file mode 100644 index 00000000..04e17660 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.186.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.187.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.187.png new file mode 100644 index 00000000..0867c552 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.187.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.188.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.188.png new file mode 100644 index 00000000..d382599a Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.188.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.189.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.189.png new file mode 100644 index 00000000..f3864e79 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.189.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.19.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.19.png new file mode 100644 index 00000000..076a821e Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.19.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.190.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.190.png new file mode 100644 index 00000000..c72f2a1f Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.190.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.191.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.191.png new file mode 100644 index 00000000..e5890ad3 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.191.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.192.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.192.png new file mode 100644 index 00000000..08681fd1 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.192.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.193.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.193.png new file mode 100644 index 00000000..5d33b954 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.193.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.194.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.194.png new file mode 100644 index 00000000..fea8c647 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.194.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.195.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.195.png new file mode 100644 index 00000000..c7b2a6cd Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.195.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.196.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.196.png new file mode 100644 index 00000000..9a51194a Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.196.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.197.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.197.png new file mode 100644 index 00000000..1aa431c3 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.197.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.198.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.198.png new file mode 100644 index 00000000..56d2c181 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.198.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.199.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.199.png new file mode 100644 index 00000000..3a656d59 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.199.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.20.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.20.png new file mode 100644 index 00000000..d89b4fbf Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.20.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.200.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.200.png new file mode 100644 index 00000000..961c0c11 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.200.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.201.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.201.png new file mode 100644 index 00000000..b42d7b08 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.201.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.202.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.202.png new file mode 100644 index 00000000..d1eac39e Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.202.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.203.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.203.png new file mode 100644 index 00000000..c9de0604 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.203.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.204.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.204.png new file mode 100644 index 00000000..a0f9b734 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.204.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.205.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.205.png new file mode 100644 index 00000000..076a821e Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.205.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.206.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.206.png new file mode 100644 index 00000000..d89b4fbf Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.206.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.207.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.207.png new file mode 100644 index 00000000..04e17660 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.207.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.208.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.208.png new file mode 100644 index 00000000..0867c552 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.208.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.209.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.209.png new file mode 100644 index 00000000..d382599a Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.209.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.21.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.21.png new file mode 100644 index 00000000..04e17660 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.21.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.210.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.210.png new file mode 100644 index 00000000..f3864e79 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.210.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.211.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.211.png new file mode 100644 index 00000000..c72f2a1f Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.211.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.212.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.212.png new file mode 100644 index 00000000..e5890ad3 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.212.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.213.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.213.png new file mode 100644 index 00000000..08681fd1 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.213.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.214.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.214.png new file mode 100644 index 00000000..5d33b954 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.214.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.215.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.215.png new file mode 100644 index 00000000..fea8c647 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.215.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.216.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.216.png new file mode 100644 index 00000000..c7b2a6cd Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.216.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.217.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.217.png new file mode 100644 index 00000000..9a51194a Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.217.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.218.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.218.png new file mode 100644 index 00000000..1aa431c3 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.218.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.219.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.219.png new file mode 100644 index 00000000..56d2c181 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.219.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.22.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.22.png new file mode 100644 index 00000000..0867c552 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.22.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.220.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.220.png new file mode 100644 index 00000000..3a656d59 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.220.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.221.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.221.png new file mode 100644 index 00000000..8f09cd87 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.221.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.222.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.222.png new file mode 100644 index 00000000..961c0c11 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.222.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.223.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.223.png new file mode 100644 index 00000000..b42d7b08 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.223.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.224.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.224.png new file mode 100644 index 00000000..d1eac39e Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.224.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.225.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.225.png new file mode 100644 index 00000000..c9de0604 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.225.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.226.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.226.png new file mode 100644 index 00000000..a0f9b734 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.226.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.227.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.227.png new file mode 100644 index 00000000..076a821e Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.227.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.228.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.228.png new file mode 100644 index 00000000..d89b4fbf Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.228.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.229.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.229.png new file mode 100644 index 00000000..04e17660 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.229.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.23.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.23.png new file mode 100644 index 00000000..d382599a Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.23.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.230.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.230.png new file mode 100644 index 00000000..0867c552 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.230.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.231.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.231.png new file mode 100644 index 00000000..d382599a Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.231.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.232.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.232.png new file mode 100644 index 00000000..f3864e79 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.232.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.233.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.233.png new file mode 100644 index 00000000..c72f2a1f Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.233.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.234.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.234.png new file mode 100644 index 00000000..e5890ad3 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.234.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.235.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.235.png new file mode 100644 index 00000000..08681fd1 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.235.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.236.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.236.png new file mode 100644 index 00000000..5d33b954 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.236.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.237.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.237.png new file mode 100644 index 00000000..fea8c647 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.237.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.238.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.238.png new file mode 100644 index 00000000..c7b2a6cd Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.238.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.239.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.239.png new file mode 100644 index 00000000..9a51194a Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.239.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.24.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.24.png new file mode 100644 index 00000000..961c0c11 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.24.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.240.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.240.png new file mode 100644 index 00000000..1aa431c3 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.240.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.241.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.241.png new file mode 100644 index 00000000..56d2c181 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.241.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.242.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.242.png new file mode 100644 index 00000000..3a656d59 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.242.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.243.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.243.png new file mode 100644 index 00000000..8f09cd87 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.243.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.244.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.244.png new file mode 100644 index 00000000..ffe2da3f Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.244.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.245.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.245.png new file mode 100644 index 00000000..961c0c11 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.245.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.246.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.246.png new file mode 100644 index 00000000..b42d7b08 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.246.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.247.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.247.png new file mode 100644 index 00000000..d1eac39e Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.247.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.248.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.248.png new file mode 100644 index 00000000..c9de0604 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.248.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.249.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.249.png new file mode 100644 index 00000000..a0f9b734 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.249.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.25.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.25.png new file mode 100644 index 00000000..b42d7b08 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.25.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.250.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.250.png new file mode 100644 index 00000000..076a821e Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.250.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.251.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.251.png new file mode 100644 index 00000000..d89b4fbf Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.251.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.252.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.252.png new file mode 100644 index 00000000..04e17660 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.252.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.253.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.253.png new file mode 100644 index 00000000..0867c552 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.253.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.254.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.254.png new file mode 100644 index 00000000..d382599a Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.254.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.255.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.255.png new file mode 100644 index 00000000..f3864e79 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.255.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.256.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.256.png new file mode 100644 index 00000000..c72f2a1f Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.256.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.257.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.257.png new file mode 100644 index 00000000..e5890ad3 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.257.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.258.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.258.png new file mode 100644 index 00000000..08681fd1 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.258.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.259.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.259.png new file mode 100644 index 00000000..5d33b954 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.259.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.26.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.26.png new file mode 100644 index 00000000..d1eac39e Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.26.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.260.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.260.png new file mode 100644 index 00000000..fea8c647 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.260.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.261.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.261.png new file mode 100644 index 00000000..c7b2a6cd Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.261.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.262.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.262.png new file mode 100644 index 00000000..9a51194a Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.262.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.263.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.263.png new file mode 100644 index 00000000..1aa431c3 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.263.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.264.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.264.png new file mode 100644 index 00000000..56d2c181 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.264.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.265.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.265.png new file mode 100644 index 00000000..3a656d59 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.265.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.266.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.266.png new file mode 100644 index 00000000..8f09cd87 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.266.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.267.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.267.png new file mode 100644 index 00000000..ffe2da3f Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.267.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.268.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.268.png new file mode 100644 index 00000000..ef2b76e0 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.268.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.269.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.269.png new file mode 100644 index 00000000..961c0c11 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.269.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.27.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.27.png new file mode 100644 index 00000000..c9de0604 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.27.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.270.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.270.png new file mode 100644 index 00000000..b42d7b08 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.270.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.271.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.271.png new file mode 100644 index 00000000..d1eac39e Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.271.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.272.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.272.png new file mode 100644 index 00000000..c9de0604 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.272.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.273.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.273.png new file mode 100644 index 00000000..a0f9b734 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.273.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.274.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.274.png new file mode 100644 index 00000000..076a821e Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.274.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.275.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.275.png new file mode 100644 index 00000000..d89b4fbf Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.275.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.276.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.276.png new file mode 100644 index 00000000..04e17660 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.276.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.277.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.277.png new file mode 100644 index 00000000..0867c552 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.277.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.278.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.278.png new file mode 100644 index 00000000..d382599a Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.278.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.279.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.279.png new file mode 100644 index 00000000..f3864e79 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.279.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.28.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.28.png new file mode 100644 index 00000000..a0f9b734 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.28.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.280.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.280.png new file mode 100644 index 00000000..c72f2a1f Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.280.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.281.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.281.png new file mode 100644 index 00000000..e5890ad3 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.281.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.282.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.282.png new file mode 100644 index 00000000..08681fd1 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.282.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.283.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.283.png new file mode 100644 index 00000000..5d33b954 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.283.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.284.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.284.png new file mode 100644 index 00000000..fea8c647 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.284.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.285.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.285.png new file mode 100644 index 00000000..c7b2a6cd Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.285.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.286.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.286.png new file mode 100644 index 00000000..9a51194a Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.286.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.287.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.287.png new file mode 100644 index 00000000..1aa431c3 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.287.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.288.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.288.png new file mode 100644 index 00000000..56d2c181 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.288.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.289.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.289.png new file mode 100644 index 00000000..3a656d59 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.289.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.29.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.29.png new file mode 100644 index 00000000..076a821e Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.29.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.290.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.290.png new file mode 100644 index 00000000..8f09cd87 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.290.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.291.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.291.png new file mode 100644 index 00000000..ffe2da3f Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.291.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.292.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.292.png new file mode 100644 index 00000000..ef2b76e0 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.292.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.293.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.293.png new file mode 100644 index 00000000..35f53c31 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.293.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.294.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.294.png new file mode 100644 index 00000000..961c0c11 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.294.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.295.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.295.png new file mode 100644 index 00000000..b42d7b08 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.295.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.296.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.296.png new file mode 100644 index 00000000..d1eac39e Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.296.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.297.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.297.png new file mode 100644 index 00000000..c9de0604 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.297.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.298.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.298.png new file mode 100644 index 00000000..a0f9b734 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.298.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.299.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.299.png new file mode 100644 index 00000000..076a821e Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.299.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.30.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.30.png new file mode 100644 index 00000000..d89b4fbf Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.30.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.300.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.300.png new file mode 100644 index 00000000..d89b4fbf Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.300.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.301.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.301.png new file mode 100644 index 00000000..04e17660 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.301.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.302.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.302.png new file mode 100644 index 00000000..0867c552 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.302.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.303.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.303.png new file mode 100644 index 00000000..d382599a Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.303.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.304.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.304.png new file mode 100644 index 00000000..f3864e79 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.304.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.305.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.305.png new file mode 100644 index 00000000..c72f2a1f Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.305.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.306.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.306.png new file mode 100644 index 00000000..e5890ad3 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.306.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.307.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.307.png new file mode 100644 index 00000000..08681fd1 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.307.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.308.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.308.png new file mode 100644 index 00000000..5d33b954 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.308.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.309.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.309.png new file mode 100644 index 00000000..fea8c647 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.309.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.31.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.31.png new file mode 100644 index 00000000..04e17660 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.31.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.310.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.310.png new file mode 100644 index 00000000..c7b2a6cd Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.310.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.311.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.311.png new file mode 100644 index 00000000..9a51194a Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.311.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.312.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.312.png new file mode 100644 index 00000000..1aa431c3 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.312.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.313.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.313.png new file mode 100644 index 00000000..56d2c181 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.313.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.314.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.314.png new file mode 100644 index 00000000..3a656d59 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.314.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.315.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.315.png new file mode 100644 index 00000000..8f09cd87 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.315.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.316.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.316.png new file mode 100644 index 00000000..ffe2da3f Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.316.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.317.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.317.png new file mode 100644 index 00000000..ef2b76e0 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.317.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.318.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.318.png new file mode 100644 index 00000000..35f53c31 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.318.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.319.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.319.png new file mode 100644 index 00000000..e4379a91 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.319.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.32.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.32.png new file mode 100644 index 00000000..0867c552 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.32.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.320.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.320.png new file mode 100644 index 00000000..961c0c11 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.320.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.321.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.321.png new file mode 100644 index 00000000..b42d7b08 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.321.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.322.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.322.png new file mode 100644 index 00000000..d1eac39e Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.322.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.323.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.323.png new file mode 100644 index 00000000..c9de0604 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.323.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.324.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.324.png new file mode 100644 index 00000000..a0f9b734 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.324.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.325.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.325.png new file mode 100644 index 00000000..076a821e Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.325.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.326.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.326.png new file mode 100644 index 00000000..d89b4fbf Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.326.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.327.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.327.png new file mode 100644 index 00000000..04e17660 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.327.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.328.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.328.png new file mode 100644 index 00000000..0867c552 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.328.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.329.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.329.png new file mode 100644 index 00000000..d382599a Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.329.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.33.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.33.png new file mode 100644 index 00000000..d382599a Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.33.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.330.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.330.png new file mode 100644 index 00000000..f3864e79 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.330.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.331.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.331.png new file mode 100644 index 00000000..c72f2a1f Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.331.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.332.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.332.png new file mode 100644 index 00000000..e5890ad3 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.332.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.333.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.333.png new file mode 100644 index 00000000..08681fd1 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.333.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.334.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.334.png new file mode 100644 index 00000000..5d33b954 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.334.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.335.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.335.png new file mode 100644 index 00000000..fea8c647 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.335.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.336.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.336.png new file mode 100644 index 00000000..c7b2a6cd Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.336.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.337.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.337.png new file mode 100644 index 00000000..9a51194a Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.337.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.338.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.338.png new file mode 100644 index 00000000..1aa431c3 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.338.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.339.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.339.png new file mode 100644 index 00000000..56d2c181 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.339.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.34.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.34.png new file mode 100644 index 00000000..f3864e79 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.34.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.340.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.340.png new file mode 100644 index 00000000..3a656d59 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.340.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.341.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.341.png new file mode 100644 index 00000000..8f09cd87 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.341.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.342.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.342.png new file mode 100644 index 00000000..ffe2da3f Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.342.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.343.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.343.png new file mode 100644 index 00000000..ef2b76e0 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.343.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.344.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.344.png new file mode 100644 index 00000000..35f53c31 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.344.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.345.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.345.png new file mode 100644 index 00000000..e4379a91 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.345.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.346.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.346.png new file mode 100644 index 00000000..74b17aaf Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.346.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.347.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.347.png new file mode 100644 index 00000000..961c0c11 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.347.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.348.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.348.png new file mode 100644 index 00000000..b42d7b08 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.348.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.349.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.349.png new file mode 100644 index 00000000..d1eac39e Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.349.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.35.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.35.png new file mode 100644 index 00000000..961c0c11 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.35.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.350.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.350.png new file mode 100644 index 00000000..c9de0604 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.350.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.351.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.351.png new file mode 100644 index 00000000..a0f9b734 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.351.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.352.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.352.png new file mode 100644 index 00000000..076a821e Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.352.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.353.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.353.png new file mode 100644 index 00000000..d89b4fbf Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.353.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.354.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.354.png new file mode 100644 index 00000000..04e17660 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.354.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.355.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.355.png new file mode 100644 index 00000000..0867c552 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.355.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.356.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.356.png new file mode 100644 index 00000000..d382599a Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.356.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.357.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.357.png new file mode 100644 index 00000000..f3864e79 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.357.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.358.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.358.png new file mode 100644 index 00000000..c72f2a1f Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.358.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.359.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.359.png new file mode 100644 index 00000000..e5890ad3 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.359.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.36.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.36.png new file mode 100644 index 00000000..b42d7b08 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.36.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.360.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.360.png new file mode 100644 index 00000000..08681fd1 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.360.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.361.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.361.png new file mode 100644 index 00000000..5d33b954 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.361.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.362.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.362.png new file mode 100644 index 00000000..fea8c647 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.362.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.363.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.363.png new file mode 100644 index 00000000..c7b2a6cd Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.363.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.364.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.364.png new file mode 100644 index 00000000..9a51194a Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.364.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.365.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.365.png new file mode 100644 index 00000000..1aa431c3 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.365.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.366.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.366.png new file mode 100644 index 00000000..56d2c181 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.366.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.367.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.367.png new file mode 100644 index 00000000..3a656d59 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.367.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.368.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.368.png new file mode 100644 index 00000000..8f09cd87 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.368.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.369.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.369.png new file mode 100644 index 00000000..ffe2da3f Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.369.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.37.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.37.png new file mode 100644 index 00000000..d1eac39e Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.37.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.370.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.370.png new file mode 100644 index 00000000..ef2b76e0 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.370.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.371.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.371.png new file mode 100644 index 00000000..35f53c31 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.371.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.372.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.372.png new file mode 100644 index 00000000..e4379a91 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.372.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.373.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.373.png new file mode 100644 index 00000000..74b17aaf Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.373.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.374.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.374.png new file mode 100644 index 00000000..2e6e4bb3 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.374.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.375.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.375.png new file mode 100644 index 00000000..961c0c11 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.375.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.376.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.376.png new file mode 100644 index 00000000..b42d7b08 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.376.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.377.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.377.png new file mode 100644 index 00000000..d1eac39e Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.377.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.378.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.378.png new file mode 100644 index 00000000..c9de0604 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.378.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.379.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.379.png new file mode 100644 index 00000000..a0f9b734 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.379.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.38.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.38.png new file mode 100644 index 00000000..c9de0604 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.38.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.380.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.380.png new file mode 100644 index 00000000..076a821e Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.380.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.381.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.381.png new file mode 100644 index 00000000..d89b4fbf Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.381.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.382.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.382.png new file mode 100644 index 00000000..04e17660 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.382.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.383.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.383.png new file mode 100644 index 00000000..0867c552 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.383.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.384.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.384.png new file mode 100644 index 00000000..d382599a Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.384.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.385.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.385.png new file mode 100644 index 00000000..f3864e79 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.385.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.386.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.386.png new file mode 100644 index 00000000..c72f2a1f Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.386.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.387.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.387.png new file mode 100644 index 00000000..e5890ad3 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.387.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.388.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.388.png new file mode 100644 index 00000000..08681fd1 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.388.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.389.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.389.png new file mode 100644 index 00000000..5d33b954 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.389.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.39.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.39.png new file mode 100644 index 00000000..a0f9b734 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.39.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.390.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.390.png new file mode 100644 index 00000000..fea8c647 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.390.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.391.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.391.png new file mode 100644 index 00000000..c7b2a6cd Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.391.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.392.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.392.png new file mode 100644 index 00000000..9a51194a Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.392.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.393.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.393.png new file mode 100644 index 00000000..1aa431c3 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.393.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.394.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.394.png new file mode 100644 index 00000000..56d2c181 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.394.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.395.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.395.png new file mode 100644 index 00000000..3a656d59 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.395.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.396.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.396.png new file mode 100644 index 00000000..8f09cd87 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.396.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.397.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.397.png new file mode 100644 index 00000000..ffe2da3f Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.397.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.398.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.398.png new file mode 100644 index 00000000..ef2b76e0 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.398.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.399.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.399.png new file mode 100644 index 00000000..35f53c31 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.399.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.40.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.40.png new file mode 100644 index 00000000..076a821e Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.40.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.400.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.400.png new file mode 100644 index 00000000..e4379a91 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.400.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.401.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.401.png new file mode 100644 index 00000000..74b17aaf Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.401.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.402.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.402.png new file mode 100644 index 00000000..2e6e4bb3 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.402.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.403.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.403.png new file mode 100644 index 00000000..a21f430e Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.403.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.404.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.404.png new file mode 100644 index 00000000..961c0c11 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.404.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.405.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.405.png new file mode 100644 index 00000000..b42d7b08 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.405.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.406.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.406.png new file mode 100644 index 00000000..d1eac39e Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.406.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.407.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.407.png new file mode 100644 index 00000000..c9de0604 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.407.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.408.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.408.png new file mode 100644 index 00000000..a0f9b734 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.408.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.409.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.409.png new file mode 100644 index 00000000..076a821e Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.409.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.41.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.41.png new file mode 100644 index 00000000..d89b4fbf Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.41.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.410.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.410.png new file mode 100644 index 00000000..d89b4fbf Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.410.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.411.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.411.png new file mode 100644 index 00000000..04e17660 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.411.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.412.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.412.png new file mode 100644 index 00000000..0867c552 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.412.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.413.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.413.png new file mode 100644 index 00000000..d382599a Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.413.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.414.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.414.png new file mode 100644 index 00000000..f3864e79 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.414.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.415.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.415.png new file mode 100644 index 00000000..c72f2a1f Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.415.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.416.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.416.png new file mode 100644 index 00000000..e5890ad3 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.416.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.417.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.417.png new file mode 100644 index 00000000..08681fd1 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.417.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.418.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.418.png new file mode 100644 index 00000000..5d33b954 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.418.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.419.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.419.png new file mode 100644 index 00000000..fea8c647 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.419.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.42.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.42.png new file mode 100644 index 00000000..04e17660 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.42.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.420.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.420.png new file mode 100644 index 00000000..c7b2a6cd Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.420.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.421.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.421.png new file mode 100644 index 00000000..9a51194a Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.421.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.422.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.422.png new file mode 100644 index 00000000..1aa431c3 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.422.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.423.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.423.png new file mode 100644 index 00000000..56d2c181 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.423.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.424.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.424.png new file mode 100644 index 00000000..3a656d59 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.424.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.425.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.425.png new file mode 100644 index 00000000..8f09cd87 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.425.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.426.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.426.png new file mode 100644 index 00000000..ffe2da3f Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.426.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.427.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.427.png new file mode 100644 index 00000000..ef2b76e0 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.427.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.428.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.428.png new file mode 100644 index 00000000..35f53c31 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.428.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.429.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.429.png new file mode 100644 index 00000000..e4379a91 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.429.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.43.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.43.png new file mode 100644 index 00000000..0867c552 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.43.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.430.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.430.png new file mode 100644 index 00000000..74b17aaf Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.430.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.431.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.431.png new file mode 100644 index 00000000..2e6e4bb3 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.431.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.432.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.432.png new file mode 100644 index 00000000..a21f430e Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.432.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.433.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.433.png new file mode 100644 index 00000000..b8234e1f Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.433.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.434.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.434.png new file mode 100644 index 00000000..961c0c11 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.434.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.435.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.435.png new file mode 100644 index 00000000..b42d7b08 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.435.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.436.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.436.png new file mode 100644 index 00000000..d1eac39e Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.436.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.437.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.437.png new file mode 100644 index 00000000..c9de0604 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.437.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.438.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.438.png new file mode 100644 index 00000000..a0f9b734 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.438.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.439.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.439.png new file mode 100644 index 00000000..076a821e Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.439.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.44.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.44.png new file mode 100644 index 00000000..d382599a Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.44.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.440.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.440.png new file mode 100644 index 00000000..d89b4fbf Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.440.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.441.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.441.png new file mode 100644 index 00000000..04e17660 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.441.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.442.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.442.png new file mode 100644 index 00000000..0867c552 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.442.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.443.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.443.png new file mode 100644 index 00000000..d382599a Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.443.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.444.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.444.png new file mode 100644 index 00000000..f3864e79 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.444.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.445.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.445.png new file mode 100644 index 00000000..c72f2a1f Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.445.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.446.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.446.png new file mode 100644 index 00000000..e5890ad3 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.446.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.447.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.447.png new file mode 100644 index 00000000..08681fd1 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.447.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.448.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.448.png new file mode 100644 index 00000000..5d33b954 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.448.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.449.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.449.png new file mode 100644 index 00000000..fea8c647 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.449.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.45.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.45.png new file mode 100644 index 00000000..f3864e79 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.45.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.450.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.450.png new file mode 100644 index 00000000..c7b2a6cd Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.450.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.451.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.451.png new file mode 100644 index 00000000..9a51194a Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.451.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.452.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.452.png new file mode 100644 index 00000000..1aa431c3 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.452.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.453.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.453.png new file mode 100644 index 00000000..56d2c181 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.453.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.454.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.454.png new file mode 100644 index 00000000..3a656d59 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.454.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.455.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.455.png new file mode 100644 index 00000000..8f09cd87 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.455.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.456.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.456.png new file mode 100644 index 00000000..ffe2da3f Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.456.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.457.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.457.png new file mode 100644 index 00000000..ef2b76e0 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.457.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.458.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.458.png new file mode 100644 index 00000000..35f53c31 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.458.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.459.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.459.png new file mode 100644 index 00000000..e4379a91 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.459.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.46.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.46.png new file mode 100644 index 00000000..c72f2a1f Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.46.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.460.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.460.png new file mode 100644 index 00000000..74b17aaf Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.460.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.461.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.461.png new file mode 100644 index 00000000..2e6e4bb3 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.461.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.462.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.462.png new file mode 100644 index 00000000..a21f430e Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.462.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.463.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.463.png new file mode 100644 index 00000000..b8234e1f Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.463.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.464.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.464.png new file mode 100644 index 00000000..6f98621f Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.464.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.465.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.465.png new file mode 100644 index 00000000..961c0c11 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.465.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.466.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.466.png new file mode 100644 index 00000000..b42d7b08 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.466.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.467.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.467.png new file mode 100644 index 00000000..d1eac39e Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.467.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.468.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.468.png new file mode 100644 index 00000000..c9de0604 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.468.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.469.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.469.png new file mode 100644 index 00000000..a0f9b734 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.469.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.47.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.47.png new file mode 100644 index 00000000..961c0c11 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.47.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.470.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.470.png new file mode 100644 index 00000000..076a821e Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.470.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.471.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.471.png new file mode 100644 index 00000000..d89b4fbf Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.471.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.472.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.472.png new file mode 100644 index 00000000..04e17660 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.472.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.473.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.473.png new file mode 100644 index 00000000..0867c552 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.473.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.474.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.474.png new file mode 100644 index 00000000..d382599a Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.474.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.475.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.475.png new file mode 100644 index 00000000..f3864e79 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.475.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.476.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.476.png new file mode 100644 index 00000000..c72f2a1f Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.476.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.477.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.477.png new file mode 100644 index 00000000..e5890ad3 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.477.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.478.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.478.png new file mode 100644 index 00000000..08681fd1 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.478.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.479.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.479.png new file mode 100644 index 00000000..5d33b954 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.479.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.48.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.48.png new file mode 100644 index 00000000..b42d7b08 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.48.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.480.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.480.png new file mode 100644 index 00000000..fea8c647 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.480.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.481.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.481.png new file mode 100644 index 00000000..c7b2a6cd Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.481.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.482.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.482.png new file mode 100644 index 00000000..9a51194a Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.482.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.483.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.483.png new file mode 100644 index 00000000..1aa431c3 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.483.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.484.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.484.png new file mode 100644 index 00000000..56d2c181 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.484.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.485.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.485.png new file mode 100644 index 00000000..3a656d59 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.485.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.486.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.486.png new file mode 100644 index 00000000..8f09cd87 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.486.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.487.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.487.png new file mode 100644 index 00000000..ffe2da3f Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.487.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.488.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.488.png new file mode 100644 index 00000000..ef2b76e0 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.488.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.489.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.489.png new file mode 100644 index 00000000..35f53c31 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.489.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.49.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.49.png new file mode 100644 index 00000000..d1eac39e Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.49.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.490.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.490.png new file mode 100644 index 00000000..e4379a91 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.490.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.491.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.491.png new file mode 100644 index 00000000..74b17aaf Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.491.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.492.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.492.png new file mode 100644 index 00000000..2e6e4bb3 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.492.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.493.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.493.png new file mode 100644 index 00000000..a21f430e Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.493.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.494.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.494.png new file mode 100644 index 00000000..b8234e1f Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.494.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.495.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.495.png new file mode 100644 index 00000000..6f98621f Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.495.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.496.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.496.png new file mode 100644 index 00000000..2f378901 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.496.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.497.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.497.png new file mode 100644 index 00000000..961c0c11 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.497.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.498.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.498.png new file mode 100644 index 00000000..b42d7b08 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.498.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.499.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.499.png new file mode 100644 index 00000000..d1eac39e Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.499.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.50.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.50.png new file mode 100644 index 00000000..c9de0604 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.50.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.500.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.500.png new file mode 100644 index 00000000..c9de0604 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.500.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.501.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.501.png new file mode 100644 index 00000000..a0f9b734 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.501.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.502.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.502.png new file mode 100644 index 00000000..076a821e Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.502.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.503.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.503.png new file mode 100644 index 00000000..d89b4fbf Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.503.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.504.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.504.png new file mode 100644 index 00000000..04e17660 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.504.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.505.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.505.png new file mode 100644 index 00000000..0867c552 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.505.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.506.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.506.png new file mode 100644 index 00000000..d382599a Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.506.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.507.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.507.png new file mode 100644 index 00000000..f3864e79 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.507.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.508.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.508.png new file mode 100644 index 00000000..c72f2a1f Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.508.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.509.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.509.png new file mode 100644 index 00000000..e5890ad3 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.509.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.51.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.51.png new file mode 100644 index 00000000..a0f9b734 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.51.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.510.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.510.png new file mode 100644 index 00000000..08681fd1 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.510.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.511.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.511.png new file mode 100644 index 00000000..5d33b954 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.511.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.512.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.512.png new file mode 100644 index 00000000..fea8c647 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.512.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.513.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.513.png new file mode 100644 index 00000000..c7b2a6cd Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.513.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.514.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.514.png new file mode 100644 index 00000000..9a51194a Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.514.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.515.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.515.png new file mode 100644 index 00000000..1aa431c3 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.515.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.516.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.516.png new file mode 100644 index 00000000..56d2c181 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.516.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.517.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.517.png new file mode 100644 index 00000000..3a656d59 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.517.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.518.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.518.png new file mode 100644 index 00000000..8f09cd87 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.518.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.519.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.519.png new file mode 100644 index 00000000..ffe2da3f Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.519.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.52.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.52.png new file mode 100644 index 00000000..076a821e Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.52.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.520.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.520.png new file mode 100644 index 00000000..ef2b76e0 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.520.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.521.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.521.png new file mode 100644 index 00000000..35f53c31 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.521.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.522.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.522.png new file mode 100644 index 00000000..e4379a91 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.522.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.523.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.523.png new file mode 100644 index 00000000..74b17aaf Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.523.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.524.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.524.png new file mode 100644 index 00000000..2e6e4bb3 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.524.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.525.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.525.png new file mode 100644 index 00000000..a21f430e Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.525.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.526.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.526.png new file mode 100644 index 00000000..b8234e1f Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.526.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.527.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.527.png new file mode 100644 index 00000000..6f98621f Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.527.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.528.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.528.png new file mode 100644 index 00000000..2f378901 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.528.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.529.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.529.png new file mode 100644 index 00000000..f291c98c Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.529.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.53.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.53.png new file mode 100644 index 00000000..d89b4fbf Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.53.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.530.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.530.png new file mode 100644 index 00000000..961c0c11 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.530.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.531.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.531.png new file mode 100644 index 00000000..b42d7b08 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.531.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.532.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.532.png new file mode 100644 index 00000000..d1eac39e Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.532.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.533.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.533.png new file mode 100644 index 00000000..c9de0604 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.533.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.534.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.534.png new file mode 100644 index 00000000..a0f9b734 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.534.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.535.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.535.png new file mode 100644 index 00000000..076a821e Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.535.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.536.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.536.png new file mode 100644 index 00000000..d89b4fbf Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.536.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.537.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.537.png new file mode 100644 index 00000000..04e17660 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.537.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.538.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.538.png new file mode 100644 index 00000000..0867c552 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.538.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.539.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.539.png new file mode 100644 index 00000000..d382599a Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.539.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.54.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.54.png new file mode 100644 index 00000000..04e17660 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.54.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.540.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.540.png new file mode 100644 index 00000000..f3864e79 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.540.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.541.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.541.png new file mode 100644 index 00000000..c72f2a1f Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.541.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.542.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.542.png new file mode 100644 index 00000000..e5890ad3 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.542.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.543.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.543.png new file mode 100644 index 00000000..08681fd1 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.543.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.544.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.544.png new file mode 100644 index 00000000..5d33b954 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.544.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.545.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.545.png new file mode 100644 index 00000000..fea8c647 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.545.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.546.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.546.png new file mode 100644 index 00000000..c7b2a6cd Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.546.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.547.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.547.png new file mode 100644 index 00000000..9a51194a Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.547.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.548.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.548.png new file mode 100644 index 00000000..1aa431c3 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.548.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.549.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.549.png new file mode 100644 index 00000000..56d2c181 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.549.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.55.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.55.png new file mode 100644 index 00000000..0867c552 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.55.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.550.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.550.png new file mode 100644 index 00000000..3a656d59 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.550.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.551.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.551.png new file mode 100644 index 00000000..8f09cd87 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.551.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.552.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.552.png new file mode 100644 index 00000000..ffe2da3f Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.552.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.553.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.553.png new file mode 100644 index 00000000..ef2b76e0 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.553.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.554.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.554.png new file mode 100644 index 00000000..35f53c31 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.554.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.555.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.555.png new file mode 100644 index 00000000..e4379a91 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.555.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.556.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.556.png new file mode 100644 index 00000000..74b17aaf Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.556.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.557.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.557.png new file mode 100644 index 00000000..2e6e4bb3 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.557.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.558.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.558.png new file mode 100644 index 00000000..a21f430e Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.558.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.559.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.559.png new file mode 100644 index 00000000..b8234e1f Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.559.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.56.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.56.png new file mode 100644 index 00000000..d382599a Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.56.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.560.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.560.png new file mode 100644 index 00000000..6f98621f Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.560.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.561.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.561.png new file mode 100644 index 00000000..2f378901 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.561.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.562.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.562.png new file mode 100644 index 00000000..f291c98c Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.562.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.563.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.563.png new file mode 100644 index 00000000..2a46cda2 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.563.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.564.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.564.png new file mode 100644 index 00000000..961c0c11 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.564.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.565.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.565.png new file mode 100644 index 00000000..b42d7b08 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.565.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.566.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.566.png new file mode 100644 index 00000000..d1eac39e Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.566.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.567.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.567.png new file mode 100644 index 00000000..c9de0604 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.567.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.568.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.568.png new file mode 100644 index 00000000..a0f9b734 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.568.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.569.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.569.png new file mode 100644 index 00000000..076a821e Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.569.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.57.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.57.png new file mode 100644 index 00000000..f3864e79 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.57.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.570.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.570.png new file mode 100644 index 00000000..d89b4fbf Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.570.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.571.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.571.png new file mode 100644 index 00000000..04e17660 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.571.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.572.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.572.png new file mode 100644 index 00000000..0867c552 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.572.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.573.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.573.png new file mode 100644 index 00000000..d382599a Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.573.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.574.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.574.png new file mode 100644 index 00000000..f3864e79 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.574.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.575.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.575.png new file mode 100644 index 00000000..c72f2a1f Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.575.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.576.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.576.png new file mode 100644 index 00000000..e5890ad3 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.576.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.577.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.577.png new file mode 100644 index 00000000..08681fd1 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.577.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.578.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.578.png new file mode 100644 index 00000000..5d33b954 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.578.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.579.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.579.png new file mode 100644 index 00000000..fea8c647 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.579.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.58.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.58.png new file mode 100644 index 00000000..c72f2a1f Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.58.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.580.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.580.png new file mode 100644 index 00000000..c7b2a6cd Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.580.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.581.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.581.png new file mode 100644 index 00000000..9a51194a Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.581.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.582.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.582.png new file mode 100644 index 00000000..1aa431c3 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.582.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.583.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.583.png new file mode 100644 index 00000000..56d2c181 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.583.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.584.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.584.png new file mode 100644 index 00000000..3a656d59 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.584.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.585.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.585.png new file mode 100644 index 00000000..8f09cd87 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.585.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.586.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.586.png new file mode 100644 index 00000000..ffe2da3f Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.586.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.587.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.587.png new file mode 100644 index 00000000..ef2b76e0 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.587.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.588.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.588.png new file mode 100644 index 00000000..35f53c31 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.588.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.589.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.589.png new file mode 100644 index 00000000..e4379a91 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.589.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.59.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.59.png new file mode 100644 index 00000000..e5890ad3 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.59.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.590.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.590.png new file mode 100644 index 00000000..74b17aaf Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.590.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.591.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.591.png new file mode 100644 index 00000000..2e6e4bb3 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.591.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.592.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.592.png new file mode 100644 index 00000000..a21f430e Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.592.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.593.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.593.png new file mode 100644 index 00000000..b8234e1f Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.593.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.594.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.594.png new file mode 100644 index 00000000..6f98621f Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.594.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.595.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.595.png new file mode 100644 index 00000000..2f378901 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.595.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.596.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.596.png new file mode 100644 index 00000000..f291c98c Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.596.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.597.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.597.png new file mode 100644 index 00000000..2a46cda2 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.597.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.598.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.598.png new file mode 100644 index 00000000..3e6e55f2 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.598.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.599.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.599.png new file mode 100644 index 00000000..961c0c11 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.599.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.60.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.60.png new file mode 100644 index 00000000..961c0c11 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.60.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.600.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.600.png new file mode 100644 index 00000000..b42d7b08 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.600.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.601.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.601.png new file mode 100644 index 00000000..d1eac39e Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.601.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.602.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.602.png new file mode 100644 index 00000000..c9de0604 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.602.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.603.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.603.png new file mode 100644 index 00000000..a0f9b734 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.603.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.604.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.604.png new file mode 100644 index 00000000..076a821e Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.604.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.605.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.605.png new file mode 100644 index 00000000..d89b4fbf Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.605.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.606.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.606.png new file mode 100644 index 00000000..04e17660 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.606.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.607.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.607.png new file mode 100644 index 00000000..0867c552 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.607.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.608.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.608.png new file mode 100644 index 00000000..d382599a Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.608.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.609.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.609.png new file mode 100644 index 00000000..f3864e79 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.609.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.61.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.61.png new file mode 100644 index 00000000..b42d7b08 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.61.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.610.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.610.png new file mode 100644 index 00000000..c72f2a1f Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.610.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.611.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.611.png new file mode 100644 index 00000000..e5890ad3 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.611.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.612.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.612.png new file mode 100644 index 00000000..08681fd1 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.612.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.613.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.613.png new file mode 100644 index 00000000..5d33b954 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.613.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.614.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.614.png new file mode 100644 index 00000000..fea8c647 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.614.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.615.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.615.png new file mode 100644 index 00000000..c7b2a6cd Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.615.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.616.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.616.png new file mode 100644 index 00000000..9a51194a Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.616.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.617.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.617.png new file mode 100644 index 00000000..1aa431c3 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.617.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.618.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.618.png new file mode 100644 index 00000000..56d2c181 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.618.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.619.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.619.png new file mode 100644 index 00000000..3a656d59 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.619.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.62.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.62.png new file mode 100644 index 00000000..d1eac39e Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.62.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.620.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.620.png new file mode 100644 index 00000000..8f09cd87 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.620.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.621.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.621.png new file mode 100644 index 00000000..ffe2da3f Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.621.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.622.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.622.png new file mode 100644 index 00000000..ef2b76e0 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.622.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.623.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.623.png new file mode 100644 index 00000000..35f53c31 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.623.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.624.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.624.png new file mode 100644 index 00000000..e4379a91 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.624.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.625.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.625.png new file mode 100644 index 00000000..74b17aaf Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.625.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.626.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.626.png new file mode 100644 index 00000000..2e6e4bb3 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.626.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.627.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.627.png new file mode 100644 index 00000000..a21f430e Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.627.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.628.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.628.png new file mode 100644 index 00000000..b8234e1f Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.628.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.629.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.629.png new file mode 100644 index 00000000..6f98621f Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.629.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.63.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.63.png new file mode 100644 index 00000000..c9de0604 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.63.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.630.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.630.png new file mode 100644 index 00000000..2f378901 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.630.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.631.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.631.png new file mode 100644 index 00000000..f291c98c Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.631.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.632.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.632.png new file mode 100644 index 00000000..2a46cda2 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.632.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.633.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.633.png new file mode 100644 index 00000000..3e6e55f2 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.633.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.634.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.634.png new file mode 100644 index 00000000..114c5860 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.634.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.635.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.635.png new file mode 100644 index 00000000..961c0c11 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.635.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.636.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.636.png new file mode 100644 index 00000000..b42d7b08 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.636.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.637.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.637.png new file mode 100644 index 00000000..d1eac39e Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.637.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.638.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.638.png new file mode 100644 index 00000000..c9de0604 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.638.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.639.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.639.png new file mode 100644 index 00000000..a0f9b734 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.639.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.64.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.64.png new file mode 100644 index 00000000..a0f9b734 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.64.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.640.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.640.png new file mode 100644 index 00000000..076a821e Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.640.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.641.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.641.png new file mode 100644 index 00000000..d89b4fbf Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.641.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.642.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.642.png new file mode 100644 index 00000000..04e17660 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.642.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.643.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.643.png new file mode 100644 index 00000000..0867c552 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.643.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.644.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.644.png new file mode 100644 index 00000000..d382599a Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.644.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.645.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.645.png new file mode 100644 index 00000000..f3864e79 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.645.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.646.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.646.png new file mode 100644 index 00000000..c72f2a1f Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.646.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.647.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.647.png new file mode 100644 index 00000000..e5890ad3 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.647.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.648.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.648.png new file mode 100644 index 00000000..08681fd1 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.648.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.649.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.649.png new file mode 100644 index 00000000..5d33b954 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.649.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.65.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.65.png new file mode 100644 index 00000000..076a821e Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.65.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.650.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.650.png new file mode 100644 index 00000000..fea8c647 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.650.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.651.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.651.png new file mode 100644 index 00000000..c7b2a6cd Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.651.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.652.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.652.png new file mode 100644 index 00000000..9a51194a Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.652.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.653.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.653.png new file mode 100644 index 00000000..1aa431c3 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.653.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.654.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.654.png new file mode 100644 index 00000000..56d2c181 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.654.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.655.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.655.png new file mode 100644 index 00000000..3a656d59 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.655.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.656.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.656.png new file mode 100644 index 00000000..8f09cd87 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.656.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.657.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.657.png new file mode 100644 index 00000000..ffe2da3f Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.657.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.658.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.658.png new file mode 100644 index 00000000..ef2b76e0 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.658.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.659.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.659.png new file mode 100644 index 00000000..35f53c31 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.659.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.66.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.66.png new file mode 100644 index 00000000..d89b4fbf Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.66.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.660.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.660.png new file mode 100644 index 00000000..e4379a91 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.660.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.661.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.661.png new file mode 100644 index 00000000..74b17aaf Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.661.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.662.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.662.png new file mode 100644 index 00000000..2e6e4bb3 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.662.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.663.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.663.png new file mode 100644 index 00000000..a21f430e Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.663.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.664.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.664.png new file mode 100644 index 00000000..b8234e1f Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.664.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.665.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.665.png new file mode 100644 index 00000000..6f98621f Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.665.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.666.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.666.png new file mode 100644 index 00000000..2f378901 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.666.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.667.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.667.png new file mode 100644 index 00000000..f291c98c Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.667.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.668.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.668.png new file mode 100644 index 00000000..2a46cda2 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.668.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.669.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.669.png new file mode 100644 index 00000000..3e6e55f2 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.669.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.67.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.67.png new file mode 100644 index 00000000..04e17660 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.67.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.670.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.670.png new file mode 100644 index 00000000..114c5860 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.670.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.671.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.671.png new file mode 100644 index 00000000..c6aa3339 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.671.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.672.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.672.png new file mode 100644 index 00000000..961c0c11 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.672.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.673.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.673.png new file mode 100644 index 00000000..b42d7b08 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.673.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.674.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.674.png new file mode 100644 index 00000000..d1eac39e Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.674.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.675.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.675.png new file mode 100644 index 00000000..c9de0604 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.675.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.676.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.676.png new file mode 100644 index 00000000..a0f9b734 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.676.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.677.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.677.png new file mode 100644 index 00000000..06140342 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.677.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.678.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.678.png new file mode 100644 index 00000000..d1c0e106 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.678.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.679.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.679.png new file mode 100644 index 00000000..aa7355f1 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.679.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.68.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.68.png new file mode 100644 index 00000000..0867c552 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.68.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.680.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.680.png new file mode 100644 index 00000000..961c0c11 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.680.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.681.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.681.png new file mode 100644 index 00000000..b42d7b08 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.681.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.682.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.682.png new file mode 100644 index 00000000..d1eac39e Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.682.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.683.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.683.png new file mode 100644 index 00000000..c9de0604 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.683.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.684.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.684.png new file mode 100644 index 00000000..a0f9b734 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.684.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.69.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.69.png new file mode 100644 index 00000000..d382599a Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.69.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.70.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.70.png new file mode 100644 index 00000000..f3864e79 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.70.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.71.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.71.png new file mode 100644 index 00000000..c72f2a1f Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.71.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.72.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.72.png new file mode 100644 index 00000000..e5890ad3 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.72.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.73.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.73.png new file mode 100644 index 00000000..08681fd1 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.73.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.74.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.74.png new file mode 100644 index 00000000..961c0c11 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.74.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.75.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.75.png new file mode 100644 index 00000000..b42d7b08 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.75.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.76.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.76.png new file mode 100644 index 00000000..d1eac39e Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.76.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.77.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.77.png new file mode 100644 index 00000000..c9de0604 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.77.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.78.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.78.png new file mode 100644 index 00000000..a0f9b734 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.78.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.79.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.79.png new file mode 100644 index 00000000..076a821e Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.79.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.80.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.80.png new file mode 100644 index 00000000..d89b4fbf Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.80.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.81.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.81.png new file mode 100644 index 00000000..04e17660 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.81.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.82.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.82.png new file mode 100644 index 00000000..0867c552 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.82.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.83.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.83.png new file mode 100644 index 00000000..d382599a Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.83.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.84.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.84.png new file mode 100644 index 00000000..f3864e79 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.84.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.85.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.85.png new file mode 100644 index 00000000..c72f2a1f Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.85.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.86.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.86.png new file mode 100644 index 00000000..e5890ad3 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.86.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.87.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.87.png new file mode 100644 index 00000000..08681fd1 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.87.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.88.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.88.png new file mode 100644 index 00000000..5d33b954 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.88.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.89.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.89.png new file mode 100644 index 00000000..961c0c11 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.89.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.90.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.90.png new file mode 100644 index 00000000..b42d7b08 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.90.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.91.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.91.png new file mode 100644 index 00000000..d1eac39e Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.91.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.92.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.92.png new file mode 100644 index 00000000..c9de0604 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.92.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.93.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.93.png new file mode 100644 index 00000000..a0f9b734 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.93.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.94.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.94.png new file mode 100644 index 00000000..076a821e Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.94.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.95.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.95.png new file mode 100644 index 00000000..d89b4fbf Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.95.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.96.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.96.png new file mode 100644 index 00000000..04e17660 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.96.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.97.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.97.png new file mode 100644 index 00000000..0867c552 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.97.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.98.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.98.png new file mode 100644 index 00000000..d382599a Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.98.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanos.99.png b/test-integration/snapshots/signTransactionOtherEosio/nanos.99.png new file mode 100644 index 00000000..f3864e79 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanos.99.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.01.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.01.png new file mode 100644 index 00000000..a7a87405 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.01.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.02.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.02.png new file mode 100644 index 00000000..ada3168c Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.02.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.03.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.03.png new file mode 100644 index 00000000..d1d91f35 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.03.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.04.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.04.png new file mode 100644 index 00000000..c382d99a Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.04.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.05.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.05.png new file mode 100644 index 00000000..c1dd7f06 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.05.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.06.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.06.png new file mode 100644 index 00000000..f9daa857 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.06.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.07.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.07.png new file mode 100644 index 00000000..34e5ceab Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.07.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.08.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.08.png new file mode 100644 index 00000000..6f7fe29c Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.08.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.09.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.09.png new file mode 100644 index 00000000..8ac15c6d Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.09.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.10.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.10.png new file mode 100644 index 00000000..525864b4 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.10.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.100.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.100.png new file mode 100644 index 00000000..52256207 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.100.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.101.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.101.png new file mode 100644 index 00000000..cdcc0969 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.101.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.102.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.102.png new file mode 100644 index 00000000..0fe8e489 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.102.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.103.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.103.png new file mode 100644 index 00000000..c1dd7f06 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.103.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.104.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.104.png new file mode 100644 index 00000000..f9daa857 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.104.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.105.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.105.png new file mode 100644 index 00000000..34e5ceab Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.105.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.106.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.106.png new file mode 100644 index 00000000..6f7fe29c Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.106.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.107.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.107.png new file mode 100644 index 00000000..8ac15c6d Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.107.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.108.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.108.png new file mode 100644 index 00000000..525864b4 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.108.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.109.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.109.png new file mode 100644 index 00000000..a7a87405 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.109.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.11.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.11.png new file mode 100644 index 00000000..a7a87405 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.11.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.110.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.110.png new file mode 100644 index 00000000..ada3168c Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.110.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.111.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.111.png new file mode 100644 index 00000000..d1d91f35 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.111.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.112.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.112.png new file mode 100644 index 00000000..c382d99a Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.112.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.113.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.113.png new file mode 100644 index 00000000..636049d8 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.113.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.114.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.114.png new file mode 100644 index 00000000..9f8e7bd4 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.114.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.115.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.115.png new file mode 100644 index 00000000..78d8a6ef Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.115.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.116.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.116.png new file mode 100644 index 00000000..fcac3a1d Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.116.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.117.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.117.png new file mode 100644 index 00000000..52256207 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.117.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.118.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.118.png new file mode 100644 index 00000000..cdcc0969 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.118.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.119.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.119.png new file mode 100644 index 00000000..0fe8e489 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.119.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.12.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.12.png new file mode 100644 index 00000000..ada3168c Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.12.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.120.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.120.png new file mode 100644 index 00000000..94eb0568 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.120.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.121.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.121.png new file mode 100644 index 00000000..c1dd7f06 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.121.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.122.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.122.png new file mode 100644 index 00000000..f9daa857 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.122.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.123.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.123.png new file mode 100644 index 00000000..34e5ceab Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.123.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.124.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.124.png new file mode 100644 index 00000000..6f7fe29c Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.124.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.125.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.125.png new file mode 100644 index 00000000..8ac15c6d Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.125.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.126.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.126.png new file mode 100644 index 00000000..525864b4 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.126.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.127.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.127.png new file mode 100644 index 00000000..a7a87405 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.127.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.128.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.128.png new file mode 100644 index 00000000..ada3168c Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.128.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.129.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.129.png new file mode 100644 index 00000000..d1d91f35 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.129.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.13.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.13.png new file mode 100644 index 00000000..d1d91f35 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.13.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.130.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.130.png new file mode 100644 index 00000000..c382d99a Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.130.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.131.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.131.png new file mode 100644 index 00000000..636049d8 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.131.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.132.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.132.png new file mode 100644 index 00000000..9f8e7bd4 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.132.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.133.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.133.png new file mode 100644 index 00000000..78d8a6ef Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.133.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.134.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.134.png new file mode 100644 index 00000000..fcac3a1d Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.134.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.135.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.135.png new file mode 100644 index 00000000..52256207 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.135.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.136.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.136.png new file mode 100644 index 00000000..cdcc0969 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.136.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.137.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.137.png new file mode 100644 index 00000000..0fe8e489 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.137.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.138.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.138.png new file mode 100644 index 00000000..94eb0568 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.138.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.139.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.139.png new file mode 100644 index 00000000..ca37d7b3 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.139.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.14.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.14.png new file mode 100644 index 00000000..c382d99a Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.14.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.140.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.140.png new file mode 100644 index 00000000..c1dd7f06 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.140.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.141.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.141.png new file mode 100644 index 00000000..f9daa857 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.141.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.142.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.142.png new file mode 100644 index 00000000..34e5ceab Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.142.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.143.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.143.png new file mode 100644 index 00000000..6f7fe29c Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.143.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.144.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.144.png new file mode 100644 index 00000000..8ac15c6d Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.144.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.145.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.145.png new file mode 100644 index 00000000..525864b4 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.145.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.146.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.146.png new file mode 100644 index 00000000..a7a87405 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.146.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.147.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.147.png new file mode 100644 index 00000000..ada3168c Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.147.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.148.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.148.png new file mode 100644 index 00000000..d1d91f35 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.148.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.149.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.149.png new file mode 100644 index 00000000..c382d99a Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.149.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.15.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.15.png new file mode 100644 index 00000000..636049d8 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.15.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.150.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.150.png new file mode 100644 index 00000000..636049d8 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.150.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.151.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.151.png new file mode 100644 index 00000000..9f8e7bd4 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.151.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.152.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.152.png new file mode 100644 index 00000000..78d8a6ef Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.152.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.153.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.153.png new file mode 100644 index 00000000..fcac3a1d Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.153.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.154.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.154.png new file mode 100644 index 00000000..52256207 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.154.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.155.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.155.png new file mode 100644 index 00000000..cdcc0969 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.155.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.156.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.156.png new file mode 100644 index 00000000..0fe8e489 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.156.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.157.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.157.png new file mode 100644 index 00000000..94eb0568 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.157.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.158.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.158.png new file mode 100644 index 00000000..ca37d7b3 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.158.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.159.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.159.png new file mode 100644 index 00000000..1a969083 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.159.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.16.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.16.png new file mode 100644 index 00000000..c1dd7f06 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.16.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.160.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.160.png new file mode 100644 index 00000000..c1dd7f06 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.160.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.161.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.161.png new file mode 100644 index 00000000..f9daa857 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.161.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.162.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.162.png new file mode 100644 index 00000000..34e5ceab Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.162.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.163.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.163.png new file mode 100644 index 00000000..6f7fe29c Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.163.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.164.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.164.png new file mode 100644 index 00000000..8ac15c6d Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.164.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.165.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.165.png new file mode 100644 index 00000000..525864b4 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.165.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.166.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.166.png new file mode 100644 index 00000000..a7a87405 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.166.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.167.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.167.png new file mode 100644 index 00000000..ada3168c Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.167.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.168.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.168.png new file mode 100644 index 00000000..d1d91f35 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.168.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.169.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.169.png new file mode 100644 index 00000000..c382d99a Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.169.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.17.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.17.png new file mode 100644 index 00000000..f9daa857 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.17.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.170.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.170.png new file mode 100644 index 00000000..636049d8 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.170.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.171.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.171.png new file mode 100644 index 00000000..9f8e7bd4 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.171.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.172.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.172.png new file mode 100644 index 00000000..78d8a6ef Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.172.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.173.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.173.png new file mode 100644 index 00000000..fcac3a1d Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.173.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.174.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.174.png new file mode 100644 index 00000000..52256207 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.174.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.175.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.175.png new file mode 100644 index 00000000..cdcc0969 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.175.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.176.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.176.png new file mode 100644 index 00000000..0fe8e489 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.176.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.177.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.177.png new file mode 100644 index 00000000..94eb0568 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.177.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.178.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.178.png new file mode 100644 index 00000000..ca37d7b3 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.178.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.179.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.179.png new file mode 100644 index 00000000..1a969083 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.179.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.18.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.18.png new file mode 100644 index 00000000..34e5ceab Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.18.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.180.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.180.png new file mode 100644 index 00000000..c1f2c676 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.180.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.181.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.181.png new file mode 100644 index 00000000..c1dd7f06 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.181.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.182.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.182.png new file mode 100644 index 00000000..f9daa857 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.182.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.183.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.183.png new file mode 100644 index 00000000..34e5ceab Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.183.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.184.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.184.png new file mode 100644 index 00000000..6f7fe29c Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.184.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.185.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.185.png new file mode 100644 index 00000000..8ac15c6d Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.185.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.186.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.186.png new file mode 100644 index 00000000..525864b4 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.186.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.187.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.187.png new file mode 100644 index 00000000..a7a87405 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.187.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.188.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.188.png new file mode 100644 index 00000000..ada3168c Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.188.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.189.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.189.png new file mode 100644 index 00000000..d1d91f35 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.189.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.19.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.19.png new file mode 100644 index 00000000..6f7fe29c Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.19.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.190.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.190.png new file mode 100644 index 00000000..c382d99a Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.190.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.191.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.191.png new file mode 100644 index 00000000..636049d8 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.191.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.192.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.192.png new file mode 100644 index 00000000..9f8e7bd4 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.192.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.193.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.193.png new file mode 100644 index 00000000..78d8a6ef Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.193.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.194.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.194.png new file mode 100644 index 00000000..fcac3a1d Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.194.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.195.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.195.png new file mode 100644 index 00000000..52256207 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.195.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.196.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.196.png new file mode 100644 index 00000000..cdcc0969 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.196.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.197.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.197.png new file mode 100644 index 00000000..0fe8e489 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.197.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.198.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.198.png new file mode 100644 index 00000000..94eb0568 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.198.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.199.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.199.png new file mode 100644 index 00000000..ca37d7b3 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.199.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.20.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.20.png new file mode 100644 index 00000000..8ac15c6d Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.20.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.200.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.200.png new file mode 100644 index 00000000..1a969083 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.200.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.201.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.201.png new file mode 100644 index 00000000..c1f2c676 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.201.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.202.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.202.png new file mode 100644 index 00000000..620dff45 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.202.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.203.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.203.png new file mode 100644 index 00000000..c1dd7f06 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.203.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.204.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.204.png new file mode 100644 index 00000000..f9daa857 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.204.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.205.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.205.png new file mode 100644 index 00000000..34e5ceab Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.205.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.206.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.206.png new file mode 100644 index 00000000..6f7fe29c Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.206.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.207.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.207.png new file mode 100644 index 00000000..8ac15c6d Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.207.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.208.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.208.png new file mode 100644 index 00000000..525864b4 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.208.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.209.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.209.png new file mode 100644 index 00000000..a7a87405 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.209.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.21.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.21.png new file mode 100644 index 00000000..525864b4 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.21.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.210.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.210.png new file mode 100644 index 00000000..ada3168c Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.210.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.211.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.211.png new file mode 100644 index 00000000..d1d91f35 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.211.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.212.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.212.png new file mode 100644 index 00000000..c382d99a Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.212.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.213.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.213.png new file mode 100644 index 00000000..636049d8 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.213.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.214.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.214.png new file mode 100644 index 00000000..9f8e7bd4 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.214.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.215.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.215.png new file mode 100644 index 00000000..78d8a6ef Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.215.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.216.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.216.png new file mode 100644 index 00000000..fcac3a1d Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.216.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.217.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.217.png new file mode 100644 index 00000000..52256207 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.217.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.218.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.218.png new file mode 100644 index 00000000..cdcc0969 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.218.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.219.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.219.png new file mode 100644 index 00000000..0fe8e489 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.219.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.22.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.22.png new file mode 100644 index 00000000..a7a87405 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.22.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.220.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.220.png new file mode 100644 index 00000000..94eb0568 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.220.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.221.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.221.png new file mode 100644 index 00000000..ca37d7b3 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.221.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.222.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.222.png new file mode 100644 index 00000000..1a969083 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.222.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.223.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.223.png new file mode 100644 index 00000000..c1f2c676 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.223.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.224.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.224.png new file mode 100644 index 00000000..620dff45 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.224.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.225.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.225.png new file mode 100644 index 00000000..34e93eb8 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.225.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.226.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.226.png new file mode 100644 index 00000000..c1dd7f06 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.226.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.227.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.227.png new file mode 100644 index 00000000..f9daa857 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.227.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.228.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.228.png new file mode 100644 index 00000000..34e5ceab Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.228.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.229.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.229.png new file mode 100644 index 00000000..6f7fe29c Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.229.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.23.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.23.png new file mode 100644 index 00000000..ada3168c Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.23.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.230.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.230.png new file mode 100644 index 00000000..8ac15c6d Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.230.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.231.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.231.png new file mode 100644 index 00000000..525864b4 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.231.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.232.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.232.png new file mode 100644 index 00000000..a7a87405 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.232.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.233.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.233.png new file mode 100644 index 00000000..ada3168c Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.233.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.234.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.234.png new file mode 100644 index 00000000..d1d91f35 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.234.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.235.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.235.png new file mode 100644 index 00000000..c382d99a Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.235.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.236.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.236.png new file mode 100644 index 00000000..636049d8 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.236.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.237.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.237.png new file mode 100644 index 00000000..9f8e7bd4 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.237.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.238.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.238.png new file mode 100644 index 00000000..78d8a6ef Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.238.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.239.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.239.png new file mode 100644 index 00000000..fcac3a1d Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.239.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.24.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.24.png new file mode 100644 index 00000000..d1d91f35 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.24.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.240.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.240.png new file mode 100644 index 00000000..52256207 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.240.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.241.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.241.png new file mode 100644 index 00000000..cdcc0969 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.241.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.242.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.242.png new file mode 100644 index 00000000..0fe8e489 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.242.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.243.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.243.png new file mode 100644 index 00000000..94eb0568 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.243.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.244.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.244.png new file mode 100644 index 00000000..ca37d7b3 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.244.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.245.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.245.png new file mode 100644 index 00000000..1a969083 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.245.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.246.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.246.png new file mode 100644 index 00000000..c1f2c676 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.246.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.247.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.247.png new file mode 100644 index 00000000..620dff45 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.247.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.248.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.248.png new file mode 100644 index 00000000..34e93eb8 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.248.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.249.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.249.png new file mode 100644 index 00000000..e71f287e Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.249.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.25.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.25.png new file mode 100644 index 00000000..c382d99a Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.25.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.250.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.250.png new file mode 100644 index 00000000..c1dd7f06 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.250.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.251.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.251.png new file mode 100644 index 00000000..f9daa857 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.251.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.252.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.252.png new file mode 100644 index 00000000..34e5ceab Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.252.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.253.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.253.png new file mode 100644 index 00000000..6f7fe29c Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.253.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.254.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.254.png new file mode 100644 index 00000000..8ac15c6d Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.254.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.255.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.255.png new file mode 100644 index 00000000..525864b4 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.255.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.256.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.256.png new file mode 100644 index 00000000..a7a87405 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.256.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.257.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.257.png new file mode 100644 index 00000000..ada3168c Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.257.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.258.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.258.png new file mode 100644 index 00000000..d1d91f35 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.258.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.259.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.259.png new file mode 100644 index 00000000..c382d99a Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.259.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.26.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.26.png new file mode 100644 index 00000000..636049d8 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.26.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.260.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.260.png new file mode 100644 index 00000000..636049d8 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.260.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.261.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.261.png new file mode 100644 index 00000000..9f8e7bd4 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.261.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.262.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.262.png new file mode 100644 index 00000000..78d8a6ef Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.262.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.263.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.263.png new file mode 100644 index 00000000..fcac3a1d Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.263.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.264.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.264.png new file mode 100644 index 00000000..52256207 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.264.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.265.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.265.png new file mode 100644 index 00000000..cdcc0969 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.265.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.266.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.266.png new file mode 100644 index 00000000..0fe8e489 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.266.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.267.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.267.png new file mode 100644 index 00000000..94eb0568 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.267.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.268.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.268.png new file mode 100644 index 00000000..ca37d7b3 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.268.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.269.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.269.png new file mode 100644 index 00000000..1a969083 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.269.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.27.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.27.png new file mode 100644 index 00000000..9f8e7bd4 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.27.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.270.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.270.png new file mode 100644 index 00000000..c1f2c676 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.270.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.271.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.271.png new file mode 100644 index 00000000..620dff45 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.271.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.272.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.272.png new file mode 100644 index 00000000..34e93eb8 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.272.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.273.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.273.png new file mode 100644 index 00000000..e71f287e Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.273.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.274.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.274.png new file mode 100644 index 00000000..49253dd6 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.274.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.275.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.275.png new file mode 100644 index 00000000..c1dd7f06 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.275.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.276.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.276.png new file mode 100644 index 00000000..f9daa857 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.276.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.277.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.277.png new file mode 100644 index 00000000..34e5ceab Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.277.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.278.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.278.png new file mode 100644 index 00000000..6f7fe29c Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.278.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.279.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.279.png new file mode 100644 index 00000000..8ac15c6d Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.279.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.28.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.28.png new file mode 100644 index 00000000..c1dd7f06 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.28.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.280.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.280.png new file mode 100644 index 00000000..525864b4 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.280.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.281.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.281.png new file mode 100644 index 00000000..a7a87405 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.281.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.282.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.282.png new file mode 100644 index 00000000..ada3168c Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.282.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.283.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.283.png new file mode 100644 index 00000000..d1d91f35 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.283.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.284.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.284.png new file mode 100644 index 00000000..c382d99a Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.284.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.285.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.285.png new file mode 100644 index 00000000..636049d8 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.285.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.286.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.286.png new file mode 100644 index 00000000..9f8e7bd4 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.286.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.287.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.287.png new file mode 100644 index 00000000..78d8a6ef Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.287.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.288.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.288.png new file mode 100644 index 00000000..fcac3a1d Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.288.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.289.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.289.png new file mode 100644 index 00000000..52256207 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.289.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.29.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.29.png new file mode 100644 index 00000000..f9daa857 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.29.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.290.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.290.png new file mode 100644 index 00000000..cdcc0969 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.290.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.291.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.291.png new file mode 100644 index 00000000..0fe8e489 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.291.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.292.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.292.png new file mode 100644 index 00000000..94eb0568 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.292.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.293.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.293.png new file mode 100644 index 00000000..ca37d7b3 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.293.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.294.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.294.png new file mode 100644 index 00000000..1a969083 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.294.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.295.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.295.png new file mode 100644 index 00000000..c1f2c676 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.295.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.296.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.296.png new file mode 100644 index 00000000..620dff45 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.296.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.297.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.297.png new file mode 100644 index 00000000..34e93eb8 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.297.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.298.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.298.png new file mode 100644 index 00000000..e71f287e Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.298.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.299.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.299.png new file mode 100644 index 00000000..49253dd6 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.299.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.30.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.30.png new file mode 100644 index 00000000..34e5ceab Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.30.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.300.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.300.png new file mode 100644 index 00000000..66badfdb Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.300.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.301.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.301.png new file mode 100644 index 00000000..c1dd7f06 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.301.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.302.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.302.png new file mode 100644 index 00000000..f9daa857 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.302.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.303.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.303.png new file mode 100644 index 00000000..34e5ceab Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.303.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.304.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.304.png new file mode 100644 index 00000000..6f7fe29c Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.304.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.305.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.305.png new file mode 100644 index 00000000..8ac15c6d Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.305.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.306.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.306.png new file mode 100644 index 00000000..525864b4 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.306.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.307.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.307.png new file mode 100644 index 00000000..a7a87405 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.307.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.308.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.308.png new file mode 100644 index 00000000..ada3168c Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.308.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.309.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.309.png new file mode 100644 index 00000000..d1d91f35 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.309.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.31.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.31.png new file mode 100644 index 00000000..6f7fe29c Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.31.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.310.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.310.png new file mode 100644 index 00000000..c382d99a Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.310.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.311.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.311.png new file mode 100644 index 00000000..636049d8 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.311.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.312.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.312.png new file mode 100644 index 00000000..9f8e7bd4 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.312.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.313.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.313.png new file mode 100644 index 00000000..78d8a6ef Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.313.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.314.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.314.png new file mode 100644 index 00000000..fcac3a1d Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.314.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.315.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.315.png new file mode 100644 index 00000000..52256207 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.315.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.316.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.316.png new file mode 100644 index 00000000..cdcc0969 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.316.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.317.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.317.png new file mode 100644 index 00000000..0fe8e489 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.317.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.318.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.318.png new file mode 100644 index 00000000..94eb0568 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.318.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.319.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.319.png new file mode 100644 index 00000000..ca37d7b3 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.319.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.32.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.32.png new file mode 100644 index 00000000..8ac15c6d Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.32.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.320.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.320.png new file mode 100644 index 00000000..1a969083 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.320.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.321.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.321.png new file mode 100644 index 00000000..c1f2c676 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.321.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.322.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.322.png new file mode 100644 index 00000000..620dff45 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.322.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.323.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.323.png new file mode 100644 index 00000000..34e93eb8 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.323.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.324.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.324.png new file mode 100644 index 00000000..e71f287e Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.324.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.325.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.325.png new file mode 100644 index 00000000..49253dd6 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.325.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.326.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.326.png new file mode 100644 index 00000000..66badfdb Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.326.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.327.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.327.png new file mode 100644 index 00000000..b19114b3 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.327.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.328.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.328.png new file mode 100644 index 00000000..c1dd7f06 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.328.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.329.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.329.png new file mode 100644 index 00000000..f9daa857 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.329.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.33.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.33.png new file mode 100644 index 00000000..525864b4 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.33.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.330.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.330.png new file mode 100644 index 00000000..34e5ceab Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.330.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.331.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.331.png new file mode 100644 index 00000000..6f7fe29c Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.331.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.332.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.332.png new file mode 100644 index 00000000..8ac15c6d Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.332.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.333.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.333.png new file mode 100644 index 00000000..525864b4 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.333.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.334.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.334.png new file mode 100644 index 00000000..a7a87405 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.334.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.335.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.335.png new file mode 100644 index 00000000..ada3168c Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.335.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.336.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.336.png new file mode 100644 index 00000000..d1d91f35 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.336.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.337.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.337.png new file mode 100644 index 00000000..c382d99a Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.337.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.338.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.338.png new file mode 100644 index 00000000..636049d8 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.338.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.339.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.339.png new file mode 100644 index 00000000..9f8e7bd4 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.339.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.34.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.34.png new file mode 100644 index 00000000..a7a87405 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.34.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.340.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.340.png new file mode 100644 index 00000000..78d8a6ef Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.340.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.341.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.341.png new file mode 100644 index 00000000..fcac3a1d Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.341.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.342.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.342.png new file mode 100644 index 00000000..52256207 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.342.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.343.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.343.png new file mode 100644 index 00000000..cdcc0969 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.343.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.344.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.344.png new file mode 100644 index 00000000..0fe8e489 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.344.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.345.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.345.png new file mode 100644 index 00000000..94eb0568 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.345.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.346.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.346.png new file mode 100644 index 00000000..ca37d7b3 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.346.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.347.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.347.png new file mode 100644 index 00000000..1a969083 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.347.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.348.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.348.png new file mode 100644 index 00000000..c1f2c676 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.348.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.349.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.349.png new file mode 100644 index 00000000..620dff45 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.349.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.35.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.35.png new file mode 100644 index 00000000..ada3168c Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.35.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.350.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.350.png new file mode 100644 index 00000000..34e93eb8 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.350.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.351.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.351.png new file mode 100644 index 00000000..e71f287e Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.351.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.352.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.352.png new file mode 100644 index 00000000..49253dd6 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.352.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.353.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.353.png new file mode 100644 index 00000000..66badfdb Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.353.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.354.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.354.png new file mode 100644 index 00000000..b19114b3 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.354.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.355.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.355.png new file mode 100644 index 00000000..748523e8 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.355.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.356.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.356.png new file mode 100644 index 00000000..c1dd7f06 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.356.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.357.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.357.png new file mode 100644 index 00000000..f9daa857 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.357.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.358.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.358.png new file mode 100644 index 00000000..34e5ceab Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.358.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.359.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.359.png new file mode 100644 index 00000000..6f7fe29c Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.359.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.36.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.36.png new file mode 100644 index 00000000..d1d91f35 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.36.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.360.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.360.png new file mode 100644 index 00000000..8ac15c6d Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.360.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.361.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.361.png new file mode 100644 index 00000000..525864b4 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.361.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.362.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.362.png new file mode 100644 index 00000000..a7a87405 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.362.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.363.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.363.png new file mode 100644 index 00000000..ada3168c Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.363.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.364.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.364.png new file mode 100644 index 00000000..d1d91f35 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.364.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.365.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.365.png new file mode 100644 index 00000000..c382d99a Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.365.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.366.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.366.png new file mode 100644 index 00000000..636049d8 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.366.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.367.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.367.png new file mode 100644 index 00000000..9f8e7bd4 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.367.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.368.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.368.png new file mode 100644 index 00000000..78d8a6ef Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.368.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.369.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.369.png new file mode 100644 index 00000000..fcac3a1d Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.369.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.37.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.37.png new file mode 100644 index 00000000..c382d99a Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.37.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.370.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.370.png new file mode 100644 index 00000000..52256207 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.370.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.371.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.371.png new file mode 100644 index 00000000..cdcc0969 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.371.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.372.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.372.png new file mode 100644 index 00000000..0fe8e489 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.372.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.373.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.373.png new file mode 100644 index 00000000..94eb0568 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.373.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.374.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.374.png new file mode 100644 index 00000000..ca37d7b3 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.374.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.375.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.375.png new file mode 100644 index 00000000..1a969083 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.375.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.376.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.376.png new file mode 100644 index 00000000..c1f2c676 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.376.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.377.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.377.png new file mode 100644 index 00000000..620dff45 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.377.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.378.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.378.png new file mode 100644 index 00000000..34e93eb8 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.378.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.379.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.379.png new file mode 100644 index 00000000..e71f287e Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.379.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.38.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.38.png new file mode 100644 index 00000000..636049d8 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.38.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.380.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.380.png new file mode 100644 index 00000000..49253dd6 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.380.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.381.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.381.png new file mode 100644 index 00000000..66badfdb Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.381.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.382.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.382.png new file mode 100644 index 00000000..b19114b3 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.382.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.383.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.383.png new file mode 100644 index 00000000..748523e8 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.383.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.384.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.384.png new file mode 100644 index 00000000..aa96dd1f Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.384.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.385.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.385.png new file mode 100644 index 00000000..c1dd7f06 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.385.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.386.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.386.png new file mode 100644 index 00000000..f9daa857 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.386.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.387.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.387.png new file mode 100644 index 00000000..34e5ceab Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.387.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.388.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.388.png new file mode 100644 index 00000000..6f7fe29c Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.388.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.389.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.389.png new file mode 100644 index 00000000..8ac15c6d Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.389.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.39.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.39.png new file mode 100644 index 00000000..9f8e7bd4 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.39.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.390.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.390.png new file mode 100644 index 00000000..525864b4 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.390.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.391.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.391.png new file mode 100644 index 00000000..a7a87405 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.391.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.392.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.392.png new file mode 100644 index 00000000..ada3168c Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.392.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.393.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.393.png new file mode 100644 index 00000000..d1d91f35 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.393.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.394.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.394.png new file mode 100644 index 00000000..c382d99a Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.394.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.395.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.395.png new file mode 100644 index 00000000..636049d8 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.395.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.396.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.396.png new file mode 100644 index 00000000..9f8e7bd4 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.396.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.397.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.397.png new file mode 100644 index 00000000..78d8a6ef Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.397.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.398.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.398.png new file mode 100644 index 00000000..fcac3a1d Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.398.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.399.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.399.png new file mode 100644 index 00000000..52256207 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.399.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.40.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.40.png new file mode 100644 index 00000000..78d8a6ef Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.40.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.400.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.400.png new file mode 100644 index 00000000..cdcc0969 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.400.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.401.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.401.png new file mode 100644 index 00000000..0fe8e489 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.401.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.402.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.402.png new file mode 100644 index 00000000..94eb0568 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.402.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.403.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.403.png new file mode 100644 index 00000000..ca37d7b3 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.403.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.404.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.404.png new file mode 100644 index 00000000..1a969083 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.404.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.405.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.405.png new file mode 100644 index 00000000..c1f2c676 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.405.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.406.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.406.png new file mode 100644 index 00000000..620dff45 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.406.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.407.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.407.png new file mode 100644 index 00000000..34e93eb8 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.407.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.408.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.408.png new file mode 100644 index 00000000..e71f287e Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.408.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.409.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.409.png new file mode 100644 index 00000000..49253dd6 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.409.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.41.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.41.png new file mode 100644 index 00000000..c1dd7f06 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.41.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.410.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.410.png new file mode 100644 index 00000000..66badfdb Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.410.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.411.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.411.png new file mode 100644 index 00000000..b19114b3 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.411.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.412.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.412.png new file mode 100644 index 00000000..748523e8 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.412.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.413.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.413.png new file mode 100644 index 00000000..aa96dd1f Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.413.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.414.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.414.png new file mode 100644 index 00000000..f88daeea Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.414.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.415.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.415.png new file mode 100644 index 00000000..c1dd7f06 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.415.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.416.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.416.png new file mode 100644 index 00000000..f9daa857 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.416.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.417.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.417.png new file mode 100644 index 00000000..34e5ceab Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.417.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.418.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.418.png new file mode 100644 index 00000000..6f7fe29c Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.418.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.419.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.419.png new file mode 100644 index 00000000..8ac15c6d Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.419.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.42.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.42.png new file mode 100644 index 00000000..f9daa857 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.42.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.420.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.420.png new file mode 100644 index 00000000..525864b4 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.420.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.421.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.421.png new file mode 100644 index 00000000..a7a87405 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.421.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.422.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.422.png new file mode 100644 index 00000000..ada3168c Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.422.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.423.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.423.png new file mode 100644 index 00000000..d1d91f35 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.423.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.424.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.424.png new file mode 100644 index 00000000..c382d99a Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.424.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.425.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.425.png new file mode 100644 index 00000000..636049d8 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.425.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.426.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.426.png new file mode 100644 index 00000000..9f8e7bd4 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.426.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.427.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.427.png new file mode 100644 index 00000000..78d8a6ef Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.427.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.428.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.428.png new file mode 100644 index 00000000..fcac3a1d Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.428.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.429.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.429.png new file mode 100644 index 00000000..52256207 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.429.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.43.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.43.png new file mode 100644 index 00000000..34e5ceab Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.43.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.430.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.430.png new file mode 100644 index 00000000..cdcc0969 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.430.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.431.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.431.png new file mode 100644 index 00000000..0fe8e489 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.431.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.432.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.432.png new file mode 100644 index 00000000..94eb0568 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.432.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.433.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.433.png new file mode 100644 index 00000000..ca37d7b3 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.433.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.434.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.434.png new file mode 100644 index 00000000..1a969083 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.434.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.435.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.435.png new file mode 100644 index 00000000..c1f2c676 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.435.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.436.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.436.png new file mode 100644 index 00000000..620dff45 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.436.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.437.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.437.png new file mode 100644 index 00000000..34e93eb8 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.437.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.438.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.438.png new file mode 100644 index 00000000..e71f287e Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.438.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.439.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.439.png new file mode 100644 index 00000000..49253dd6 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.439.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.44.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.44.png new file mode 100644 index 00000000..6f7fe29c Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.44.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.440.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.440.png new file mode 100644 index 00000000..66badfdb Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.440.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.441.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.441.png new file mode 100644 index 00000000..b19114b3 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.441.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.442.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.442.png new file mode 100644 index 00000000..748523e8 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.442.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.443.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.443.png new file mode 100644 index 00000000..aa96dd1f Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.443.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.444.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.444.png new file mode 100644 index 00000000..f88daeea Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.444.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.445.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.445.png new file mode 100644 index 00000000..4c77daaf Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.445.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.446.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.446.png new file mode 100644 index 00000000..c1dd7f06 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.446.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.447.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.447.png new file mode 100644 index 00000000..f9daa857 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.447.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.448.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.448.png new file mode 100644 index 00000000..34e5ceab Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.448.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.449.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.449.png new file mode 100644 index 00000000..6f7fe29c Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.449.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.45.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.45.png new file mode 100644 index 00000000..8ac15c6d Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.45.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.450.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.450.png new file mode 100644 index 00000000..8ac15c6d Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.450.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.451.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.451.png new file mode 100644 index 00000000..525864b4 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.451.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.452.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.452.png new file mode 100644 index 00000000..a7a87405 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.452.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.453.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.453.png new file mode 100644 index 00000000..ada3168c Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.453.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.454.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.454.png new file mode 100644 index 00000000..d1d91f35 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.454.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.455.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.455.png new file mode 100644 index 00000000..c382d99a Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.455.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.456.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.456.png new file mode 100644 index 00000000..636049d8 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.456.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.457.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.457.png new file mode 100644 index 00000000..9f8e7bd4 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.457.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.458.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.458.png new file mode 100644 index 00000000..78d8a6ef Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.458.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.459.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.459.png new file mode 100644 index 00000000..fcac3a1d Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.459.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.46.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.46.png new file mode 100644 index 00000000..525864b4 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.46.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.460.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.460.png new file mode 100644 index 00000000..52256207 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.460.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.461.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.461.png new file mode 100644 index 00000000..cdcc0969 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.461.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.462.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.462.png new file mode 100644 index 00000000..0fe8e489 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.462.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.463.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.463.png new file mode 100644 index 00000000..94eb0568 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.463.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.464.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.464.png new file mode 100644 index 00000000..ca37d7b3 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.464.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.465.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.465.png new file mode 100644 index 00000000..1a969083 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.465.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.466.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.466.png new file mode 100644 index 00000000..c1f2c676 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.466.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.467.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.467.png new file mode 100644 index 00000000..620dff45 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.467.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.468.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.468.png new file mode 100644 index 00000000..34e93eb8 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.468.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.469.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.469.png new file mode 100644 index 00000000..e71f287e Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.469.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.47.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.47.png new file mode 100644 index 00000000..a7a87405 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.47.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.470.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.470.png new file mode 100644 index 00000000..49253dd6 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.470.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.471.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.471.png new file mode 100644 index 00000000..66badfdb Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.471.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.472.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.472.png new file mode 100644 index 00000000..b19114b3 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.472.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.473.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.473.png new file mode 100644 index 00000000..748523e8 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.473.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.474.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.474.png new file mode 100644 index 00000000..aa96dd1f Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.474.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.475.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.475.png new file mode 100644 index 00000000..f88daeea Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.475.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.476.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.476.png new file mode 100644 index 00000000..4c77daaf Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.476.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.477.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.477.png new file mode 100644 index 00000000..87a56a87 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.477.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.478.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.478.png new file mode 100644 index 00000000..c1dd7f06 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.478.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.479.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.479.png new file mode 100644 index 00000000..f9daa857 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.479.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.48.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.48.png new file mode 100644 index 00000000..ada3168c Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.48.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.480.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.480.png new file mode 100644 index 00000000..34e5ceab Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.480.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.481.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.481.png new file mode 100644 index 00000000..6f7fe29c Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.481.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.482.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.482.png new file mode 100644 index 00000000..8ac15c6d Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.482.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.483.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.483.png new file mode 100644 index 00000000..525864b4 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.483.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.484.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.484.png new file mode 100644 index 00000000..a7a87405 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.484.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.485.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.485.png new file mode 100644 index 00000000..ada3168c Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.485.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.486.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.486.png new file mode 100644 index 00000000..d1d91f35 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.486.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.487.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.487.png new file mode 100644 index 00000000..c382d99a Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.487.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.488.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.488.png new file mode 100644 index 00000000..636049d8 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.488.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.489.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.489.png new file mode 100644 index 00000000..9f8e7bd4 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.489.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.49.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.49.png new file mode 100644 index 00000000..d1d91f35 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.49.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.490.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.490.png new file mode 100644 index 00000000..78d8a6ef Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.490.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.491.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.491.png new file mode 100644 index 00000000..fcac3a1d Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.491.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.492.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.492.png new file mode 100644 index 00000000..52256207 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.492.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.493.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.493.png new file mode 100644 index 00000000..cdcc0969 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.493.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.494.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.494.png new file mode 100644 index 00000000..0fe8e489 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.494.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.495.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.495.png new file mode 100644 index 00000000..94eb0568 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.495.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.496.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.496.png new file mode 100644 index 00000000..ca37d7b3 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.496.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.497.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.497.png new file mode 100644 index 00000000..1a969083 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.497.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.498.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.498.png new file mode 100644 index 00000000..c1f2c676 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.498.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.499.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.499.png new file mode 100644 index 00000000..620dff45 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.499.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.50.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.50.png new file mode 100644 index 00000000..c382d99a Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.50.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.500.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.500.png new file mode 100644 index 00000000..34e93eb8 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.500.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.501.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.501.png new file mode 100644 index 00000000..e71f287e Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.501.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.502.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.502.png new file mode 100644 index 00000000..49253dd6 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.502.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.503.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.503.png new file mode 100644 index 00000000..66badfdb Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.503.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.504.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.504.png new file mode 100644 index 00000000..b19114b3 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.504.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.505.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.505.png new file mode 100644 index 00000000..748523e8 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.505.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.506.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.506.png new file mode 100644 index 00000000..aa96dd1f Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.506.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.507.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.507.png new file mode 100644 index 00000000..f88daeea Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.507.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.508.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.508.png new file mode 100644 index 00000000..4c77daaf Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.508.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.509.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.509.png new file mode 100644 index 00000000..87a56a87 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.509.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.51.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.51.png new file mode 100644 index 00000000..636049d8 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.51.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.510.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.510.png new file mode 100644 index 00000000..7847f5e8 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.510.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.511.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.511.png new file mode 100644 index 00000000..c1dd7f06 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.511.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.512.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.512.png new file mode 100644 index 00000000..f9daa857 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.512.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.513.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.513.png new file mode 100644 index 00000000..34e5ceab Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.513.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.514.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.514.png new file mode 100644 index 00000000..6f7fe29c Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.514.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.515.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.515.png new file mode 100644 index 00000000..8ac15c6d Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.515.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.516.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.516.png new file mode 100644 index 00000000..525864b4 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.516.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.517.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.517.png new file mode 100644 index 00000000..a7a87405 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.517.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.518.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.518.png new file mode 100644 index 00000000..ada3168c Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.518.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.519.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.519.png new file mode 100644 index 00000000..d1d91f35 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.519.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.52.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.52.png new file mode 100644 index 00000000..9f8e7bd4 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.52.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.520.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.520.png new file mode 100644 index 00000000..c382d99a Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.520.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.521.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.521.png new file mode 100644 index 00000000..636049d8 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.521.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.522.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.522.png new file mode 100644 index 00000000..9f8e7bd4 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.522.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.523.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.523.png new file mode 100644 index 00000000..78d8a6ef Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.523.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.524.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.524.png new file mode 100644 index 00000000..fcac3a1d Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.524.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.525.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.525.png new file mode 100644 index 00000000..52256207 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.525.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.526.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.526.png new file mode 100644 index 00000000..cdcc0969 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.526.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.527.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.527.png new file mode 100644 index 00000000..0fe8e489 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.527.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.528.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.528.png new file mode 100644 index 00000000..94eb0568 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.528.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.529.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.529.png new file mode 100644 index 00000000..ca37d7b3 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.529.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.53.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.53.png new file mode 100644 index 00000000..78d8a6ef Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.53.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.530.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.530.png new file mode 100644 index 00000000..1a969083 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.530.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.531.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.531.png new file mode 100644 index 00000000..c1f2c676 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.531.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.532.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.532.png new file mode 100644 index 00000000..620dff45 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.532.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.533.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.533.png new file mode 100644 index 00000000..34e93eb8 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.533.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.534.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.534.png new file mode 100644 index 00000000..e71f287e Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.534.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.535.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.535.png new file mode 100644 index 00000000..49253dd6 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.535.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.536.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.536.png new file mode 100644 index 00000000..66badfdb Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.536.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.537.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.537.png new file mode 100644 index 00000000..b19114b3 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.537.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.538.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.538.png new file mode 100644 index 00000000..748523e8 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.538.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.539.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.539.png new file mode 100644 index 00000000..aa96dd1f Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.539.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.54.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.54.png new file mode 100644 index 00000000..fcac3a1d Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.54.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.540.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.540.png new file mode 100644 index 00000000..f88daeea Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.540.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.541.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.541.png new file mode 100644 index 00000000..4c77daaf Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.541.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.542.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.542.png new file mode 100644 index 00000000..87a56a87 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.542.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.543.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.543.png new file mode 100644 index 00000000..7847f5e8 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.543.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.544.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.544.png new file mode 100644 index 00000000..6c1428bb Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.544.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.545.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.545.png new file mode 100644 index 00000000..c1dd7f06 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.545.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.546.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.546.png new file mode 100644 index 00000000..f9daa857 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.546.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.547.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.547.png new file mode 100644 index 00000000..34e5ceab Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.547.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.548.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.548.png new file mode 100644 index 00000000..6f7fe29c Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.548.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.549.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.549.png new file mode 100644 index 00000000..8ac15c6d Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.549.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.55.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.55.png new file mode 100644 index 00000000..c1dd7f06 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.55.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.550.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.550.png new file mode 100644 index 00000000..525864b4 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.550.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.551.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.551.png new file mode 100644 index 00000000..a7a87405 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.551.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.552.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.552.png new file mode 100644 index 00000000..ada3168c Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.552.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.553.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.553.png new file mode 100644 index 00000000..d1d91f35 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.553.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.554.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.554.png new file mode 100644 index 00000000..c382d99a Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.554.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.555.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.555.png new file mode 100644 index 00000000..636049d8 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.555.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.556.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.556.png new file mode 100644 index 00000000..9f8e7bd4 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.556.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.557.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.557.png new file mode 100644 index 00000000..78d8a6ef Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.557.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.558.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.558.png new file mode 100644 index 00000000..fcac3a1d Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.558.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.559.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.559.png new file mode 100644 index 00000000..52256207 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.559.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.56.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.56.png new file mode 100644 index 00000000..f9daa857 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.56.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.560.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.560.png new file mode 100644 index 00000000..cdcc0969 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.560.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.561.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.561.png new file mode 100644 index 00000000..0fe8e489 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.561.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.562.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.562.png new file mode 100644 index 00000000..94eb0568 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.562.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.563.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.563.png new file mode 100644 index 00000000..ca37d7b3 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.563.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.564.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.564.png new file mode 100644 index 00000000..1a969083 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.564.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.565.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.565.png new file mode 100644 index 00000000..c1f2c676 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.565.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.566.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.566.png new file mode 100644 index 00000000..620dff45 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.566.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.567.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.567.png new file mode 100644 index 00000000..34e93eb8 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.567.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.568.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.568.png new file mode 100644 index 00000000..e71f287e Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.568.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.569.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.569.png new file mode 100644 index 00000000..49253dd6 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.569.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.57.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.57.png new file mode 100644 index 00000000..34e5ceab Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.57.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.570.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.570.png new file mode 100644 index 00000000..66badfdb Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.570.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.571.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.571.png new file mode 100644 index 00000000..b19114b3 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.571.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.572.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.572.png new file mode 100644 index 00000000..748523e8 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.572.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.573.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.573.png new file mode 100644 index 00000000..aa96dd1f Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.573.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.574.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.574.png new file mode 100644 index 00000000..f88daeea Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.574.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.575.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.575.png new file mode 100644 index 00000000..4c77daaf Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.575.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.576.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.576.png new file mode 100644 index 00000000..87a56a87 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.576.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.577.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.577.png new file mode 100644 index 00000000..7847f5e8 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.577.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.578.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.578.png new file mode 100644 index 00000000..6c1428bb Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.578.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.579.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.579.png new file mode 100644 index 00000000..dc71c033 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.579.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.58.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.58.png new file mode 100644 index 00000000..6f7fe29c Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.58.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.580.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.580.png new file mode 100644 index 00000000..c1dd7f06 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.580.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.581.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.581.png new file mode 100644 index 00000000..f9daa857 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.581.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.582.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.582.png new file mode 100644 index 00000000..34e5ceab Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.582.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.583.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.583.png new file mode 100644 index 00000000..6f7fe29c Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.583.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.584.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.584.png new file mode 100644 index 00000000..8ac15c6d Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.584.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.585.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.585.png new file mode 100644 index 00000000..525864b4 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.585.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.586.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.586.png new file mode 100644 index 00000000..a7a87405 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.586.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.587.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.587.png new file mode 100644 index 00000000..ada3168c Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.587.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.588.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.588.png new file mode 100644 index 00000000..d1d91f35 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.588.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.589.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.589.png new file mode 100644 index 00000000..c382d99a Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.589.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.59.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.59.png new file mode 100644 index 00000000..8ac15c6d Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.59.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.590.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.590.png new file mode 100644 index 00000000..636049d8 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.590.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.591.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.591.png new file mode 100644 index 00000000..9f8e7bd4 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.591.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.592.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.592.png new file mode 100644 index 00000000..78d8a6ef Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.592.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.593.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.593.png new file mode 100644 index 00000000..fcac3a1d Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.593.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.594.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.594.png new file mode 100644 index 00000000..52256207 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.594.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.595.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.595.png new file mode 100644 index 00000000..cdcc0969 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.595.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.596.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.596.png new file mode 100644 index 00000000..0fe8e489 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.596.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.597.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.597.png new file mode 100644 index 00000000..94eb0568 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.597.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.598.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.598.png new file mode 100644 index 00000000..ca37d7b3 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.598.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.599.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.599.png new file mode 100644 index 00000000..1a969083 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.599.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.60.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.60.png new file mode 100644 index 00000000..525864b4 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.60.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.600.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.600.png new file mode 100644 index 00000000..c1f2c676 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.600.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.601.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.601.png new file mode 100644 index 00000000..620dff45 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.601.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.602.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.602.png new file mode 100644 index 00000000..34e93eb8 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.602.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.603.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.603.png new file mode 100644 index 00000000..e71f287e Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.603.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.604.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.604.png new file mode 100644 index 00000000..49253dd6 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.604.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.605.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.605.png new file mode 100644 index 00000000..66badfdb Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.605.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.606.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.606.png new file mode 100644 index 00000000..b19114b3 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.606.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.607.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.607.png new file mode 100644 index 00000000..748523e8 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.607.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.608.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.608.png new file mode 100644 index 00000000..aa96dd1f Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.608.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.609.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.609.png new file mode 100644 index 00000000..f88daeea Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.609.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.61.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.61.png new file mode 100644 index 00000000..a7a87405 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.61.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.610.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.610.png new file mode 100644 index 00000000..4c77daaf Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.610.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.611.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.611.png new file mode 100644 index 00000000..87a56a87 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.611.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.612.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.612.png new file mode 100644 index 00000000..7847f5e8 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.612.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.613.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.613.png new file mode 100644 index 00000000..6c1428bb Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.613.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.614.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.614.png new file mode 100644 index 00000000..dc71c033 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.614.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.615.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.615.png new file mode 100644 index 00000000..e653ab18 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.615.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.616.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.616.png new file mode 100644 index 00000000..c1dd7f06 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.616.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.617.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.617.png new file mode 100644 index 00000000..f9daa857 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.617.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.618.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.618.png new file mode 100644 index 00000000..34e5ceab Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.618.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.619.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.619.png new file mode 100644 index 00000000..6f7fe29c Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.619.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.62.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.62.png new file mode 100644 index 00000000..ada3168c Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.62.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.620.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.620.png new file mode 100644 index 00000000..8ac15c6d Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.620.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.621.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.621.png new file mode 100644 index 00000000..525864b4 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.621.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.622.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.622.png new file mode 100644 index 00000000..a7a87405 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.622.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.623.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.623.png new file mode 100644 index 00000000..ada3168c Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.623.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.624.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.624.png new file mode 100644 index 00000000..d1d91f35 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.624.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.625.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.625.png new file mode 100644 index 00000000..c382d99a Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.625.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.626.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.626.png new file mode 100644 index 00000000..636049d8 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.626.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.627.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.627.png new file mode 100644 index 00000000..9f8e7bd4 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.627.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.628.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.628.png new file mode 100644 index 00000000..78d8a6ef Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.628.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.629.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.629.png new file mode 100644 index 00000000..fcac3a1d Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.629.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.63.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.63.png new file mode 100644 index 00000000..d1d91f35 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.63.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.630.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.630.png new file mode 100644 index 00000000..52256207 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.630.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.631.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.631.png new file mode 100644 index 00000000..cdcc0969 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.631.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.632.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.632.png new file mode 100644 index 00000000..0fe8e489 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.632.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.633.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.633.png new file mode 100644 index 00000000..94eb0568 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.633.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.634.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.634.png new file mode 100644 index 00000000..ca37d7b3 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.634.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.635.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.635.png new file mode 100644 index 00000000..1a969083 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.635.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.636.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.636.png new file mode 100644 index 00000000..c1f2c676 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.636.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.637.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.637.png new file mode 100644 index 00000000..620dff45 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.637.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.638.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.638.png new file mode 100644 index 00000000..34e93eb8 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.638.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.639.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.639.png new file mode 100644 index 00000000..e71f287e Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.639.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.64.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.64.png new file mode 100644 index 00000000..c382d99a Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.64.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.640.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.640.png new file mode 100644 index 00000000..49253dd6 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.640.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.641.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.641.png new file mode 100644 index 00000000..66badfdb Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.641.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.642.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.642.png new file mode 100644 index 00000000..b19114b3 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.642.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.643.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.643.png new file mode 100644 index 00000000..748523e8 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.643.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.644.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.644.png new file mode 100644 index 00000000..aa96dd1f Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.644.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.645.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.645.png new file mode 100644 index 00000000..f88daeea Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.645.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.646.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.646.png new file mode 100644 index 00000000..4c77daaf Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.646.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.647.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.647.png new file mode 100644 index 00000000..87a56a87 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.647.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.648.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.648.png new file mode 100644 index 00000000..7847f5e8 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.648.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.649.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.649.png new file mode 100644 index 00000000..6c1428bb Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.649.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.65.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.65.png new file mode 100644 index 00000000..636049d8 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.65.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.650.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.650.png new file mode 100644 index 00000000..dc71c033 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.650.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.651.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.651.png new file mode 100644 index 00000000..e653ab18 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.651.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.652.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.652.png new file mode 100644 index 00000000..6a6ce704 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.652.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.653.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.653.png new file mode 100644 index 00000000..c1dd7f06 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.653.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.654.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.654.png new file mode 100644 index 00000000..f9daa857 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.654.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.655.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.655.png new file mode 100644 index 00000000..34e5ceab Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.655.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.656.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.656.png new file mode 100644 index 00000000..6f7fe29c Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.656.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.657.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.657.png new file mode 100644 index 00000000..8ac15c6d Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.657.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.658.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.658.png new file mode 100644 index 00000000..525864b4 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.658.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.659.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.659.png new file mode 100644 index 00000000..a7a87405 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.659.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.66.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.66.png new file mode 100644 index 00000000..9f8e7bd4 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.66.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.660.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.660.png new file mode 100644 index 00000000..ada3168c Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.660.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.661.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.661.png new file mode 100644 index 00000000..d1d91f35 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.661.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.662.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.662.png new file mode 100644 index 00000000..c382d99a Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.662.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.663.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.663.png new file mode 100644 index 00000000..636049d8 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.663.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.664.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.664.png new file mode 100644 index 00000000..9f8e7bd4 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.664.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.665.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.665.png new file mode 100644 index 00000000..78d8a6ef Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.665.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.666.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.666.png new file mode 100644 index 00000000..fcac3a1d Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.666.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.667.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.667.png new file mode 100644 index 00000000..52256207 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.667.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.668.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.668.png new file mode 100644 index 00000000..cdcc0969 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.668.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.669.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.669.png new file mode 100644 index 00000000..0fe8e489 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.669.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.67.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.67.png new file mode 100644 index 00000000..78d8a6ef Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.67.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.670.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.670.png new file mode 100644 index 00000000..94eb0568 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.670.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.671.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.671.png new file mode 100644 index 00000000..ca37d7b3 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.671.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.672.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.672.png new file mode 100644 index 00000000..1a969083 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.672.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.673.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.673.png new file mode 100644 index 00000000..c1f2c676 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.673.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.674.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.674.png new file mode 100644 index 00000000..620dff45 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.674.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.675.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.675.png new file mode 100644 index 00000000..34e93eb8 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.675.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.676.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.676.png new file mode 100644 index 00000000..e71f287e Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.676.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.677.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.677.png new file mode 100644 index 00000000..49253dd6 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.677.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.678.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.678.png new file mode 100644 index 00000000..66badfdb Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.678.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.679.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.679.png new file mode 100644 index 00000000..b19114b3 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.679.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.68.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.68.png new file mode 100644 index 00000000..fcac3a1d Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.68.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.680.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.680.png new file mode 100644 index 00000000..748523e8 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.680.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.681.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.681.png new file mode 100644 index 00000000..aa96dd1f Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.681.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.682.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.682.png new file mode 100644 index 00000000..f88daeea Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.682.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.683.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.683.png new file mode 100644 index 00000000..4c77daaf Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.683.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.684.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.684.png new file mode 100644 index 00000000..87a56a87 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.684.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.685.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.685.png new file mode 100644 index 00000000..7847f5e8 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.685.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.686.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.686.png new file mode 100644 index 00000000..6c1428bb Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.686.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.687.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.687.png new file mode 100644 index 00000000..dc71c033 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.687.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.688.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.688.png new file mode 100644 index 00000000..e653ab18 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.688.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.689.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.689.png new file mode 100644 index 00000000..6a6ce704 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.689.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.69.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.69.png new file mode 100644 index 00000000..52256207 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.69.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.690.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.690.png new file mode 100644 index 00000000..995bb96e Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.690.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.691.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.691.png new file mode 100644 index 00000000..c1dd7f06 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.691.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.692.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.692.png new file mode 100644 index 00000000..f9daa857 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.692.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.693.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.693.png new file mode 100644 index 00000000..34e5ceab Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.693.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.694.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.694.png new file mode 100644 index 00000000..6f7fe29c Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.694.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.695.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.695.png new file mode 100644 index 00000000..8ac15c6d Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.695.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.696.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.696.png new file mode 100644 index 00000000..525864b4 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.696.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.697.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.697.png new file mode 100644 index 00000000..a7a87405 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.697.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.698.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.698.png new file mode 100644 index 00000000..ada3168c Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.698.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.699.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.699.png new file mode 100644 index 00000000..d1d91f35 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.699.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.70.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.70.png new file mode 100644 index 00000000..c1dd7f06 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.70.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.700.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.700.png new file mode 100644 index 00000000..c382d99a Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.700.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.701.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.701.png new file mode 100644 index 00000000..636049d8 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.701.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.702.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.702.png new file mode 100644 index 00000000..9f8e7bd4 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.702.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.703.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.703.png new file mode 100644 index 00000000..78d8a6ef Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.703.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.704.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.704.png new file mode 100644 index 00000000..fcac3a1d Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.704.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.705.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.705.png new file mode 100644 index 00000000..52256207 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.705.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.706.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.706.png new file mode 100644 index 00000000..cdcc0969 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.706.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.707.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.707.png new file mode 100644 index 00000000..0fe8e489 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.707.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.708.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.708.png new file mode 100644 index 00000000..94eb0568 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.708.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.709.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.709.png new file mode 100644 index 00000000..ca37d7b3 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.709.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.71.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.71.png new file mode 100644 index 00000000..f9daa857 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.71.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.710.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.710.png new file mode 100644 index 00000000..1a969083 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.710.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.711.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.711.png new file mode 100644 index 00000000..c1f2c676 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.711.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.712.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.712.png new file mode 100644 index 00000000..620dff45 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.712.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.713.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.713.png new file mode 100644 index 00000000..34e93eb8 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.713.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.714.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.714.png new file mode 100644 index 00000000..e71f287e Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.714.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.715.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.715.png new file mode 100644 index 00000000..49253dd6 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.715.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.716.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.716.png new file mode 100644 index 00000000..66badfdb Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.716.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.717.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.717.png new file mode 100644 index 00000000..b19114b3 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.717.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.718.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.718.png new file mode 100644 index 00000000..748523e8 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.718.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.719.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.719.png new file mode 100644 index 00000000..aa96dd1f Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.719.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.72.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.72.png new file mode 100644 index 00000000..34e5ceab Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.72.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.720.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.720.png new file mode 100644 index 00000000..f88daeea Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.720.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.721.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.721.png new file mode 100644 index 00000000..4c77daaf Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.721.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.722.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.722.png new file mode 100644 index 00000000..87a56a87 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.722.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.723.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.723.png new file mode 100644 index 00000000..7847f5e8 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.723.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.724.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.724.png new file mode 100644 index 00000000..6c1428bb Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.724.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.725.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.725.png new file mode 100644 index 00000000..dc71c033 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.725.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.726.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.726.png new file mode 100644 index 00000000..e653ab18 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.726.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.727.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.727.png new file mode 100644 index 00000000..6a6ce704 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.727.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.728.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.728.png new file mode 100644 index 00000000..995bb96e Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.728.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.729.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.729.png new file mode 100644 index 00000000..405f78a7 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.729.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.73.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.73.png new file mode 100644 index 00000000..6f7fe29c Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.73.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.730.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.730.png new file mode 100644 index 00000000..c1dd7f06 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.730.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.731.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.731.png new file mode 100644 index 00000000..f9daa857 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.731.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.732.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.732.png new file mode 100644 index 00000000..34e5ceab Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.732.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.733.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.733.png new file mode 100644 index 00000000..6f7fe29c Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.733.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.734.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.734.png new file mode 100644 index 00000000..8ac15c6d Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.734.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.735.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.735.png new file mode 100644 index 00000000..525864b4 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.735.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.736.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.736.png new file mode 100644 index 00000000..a7a87405 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.736.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.737.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.737.png new file mode 100644 index 00000000..8e0d2a37 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.737.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.738.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.738.png new file mode 100644 index 00000000..e685fb90 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.738.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.739.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.739.png new file mode 100644 index 00000000..65dba8b9 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.739.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.74.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.74.png new file mode 100644 index 00000000..8ac15c6d Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.74.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.740.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.740.png new file mode 100644 index 00000000..c1dd7f06 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.740.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.741.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.741.png new file mode 100644 index 00000000..f9daa857 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.741.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.742.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.742.png new file mode 100644 index 00000000..34e5ceab Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.742.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.743.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.743.png new file mode 100644 index 00000000..6f7fe29c Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.743.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.744.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.744.png new file mode 100644 index 00000000..8ac15c6d Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.744.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.745.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.745.png new file mode 100644 index 00000000..525864b4 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.745.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.746.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.746.png new file mode 100644 index 00000000..a7a87405 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.746.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.75.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.75.png new file mode 100644 index 00000000..525864b4 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.75.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.76.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.76.png new file mode 100644 index 00000000..a7a87405 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.76.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.77.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.77.png new file mode 100644 index 00000000..ada3168c Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.77.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.78.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.78.png new file mode 100644 index 00000000..d1d91f35 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.78.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.79.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.79.png new file mode 100644 index 00000000..c382d99a Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.79.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.80.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.80.png new file mode 100644 index 00000000..636049d8 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.80.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.81.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.81.png new file mode 100644 index 00000000..9f8e7bd4 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.81.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.82.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.82.png new file mode 100644 index 00000000..78d8a6ef Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.82.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.83.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.83.png new file mode 100644 index 00000000..fcac3a1d Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.83.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.84.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.84.png new file mode 100644 index 00000000..52256207 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.84.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.85.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.85.png new file mode 100644 index 00000000..cdcc0969 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.85.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.86.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.86.png new file mode 100644 index 00000000..c1dd7f06 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.86.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.87.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.87.png new file mode 100644 index 00000000..f9daa857 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.87.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.88.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.88.png new file mode 100644 index 00000000..34e5ceab Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.88.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.89.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.89.png new file mode 100644 index 00000000..6f7fe29c Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.89.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.90.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.90.png new file mode 100644 index 00000000..8ac15c6d Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.90.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.91.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.91.png new file mode 100644 index 00000000..525864b4 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.91.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.92.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.92.png new file mode 100644 index 00000000..a7a87405 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.92.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.93.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.93.png new file mode 100644 index 00000000..ada3168c Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.93.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.94.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.94.png new file mode 100644 index 00000000..d1d91f35 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.94.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.95.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.95.png new file mode 100644 index 00000000..c382d99a Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.95.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.96.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.96.png new file mode 100644 index 00000000..636049d8 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.96.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.97.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.97.png new file mode 100644 index 00000000..9f8e7bd4 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.97.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.98.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.98.png new file mode 100644 index 00000000..78d8a6ef Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.98.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanosp.99.png b/test-integration/snapshots/signTransactionOtherEosio/nanosp.99.png new file mode 100644 index 00000000..fcac3a1d Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanosp.99.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.01.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.01.png new file mode 100644 index 00000000..c843773c Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.01.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.02.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.02.png new file mode 100644 index 00000000..ada3168c Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.02.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.03.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.03.png new file mode 100644 index 00000000..d1d91f35 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.03.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.04.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.04.png new file mode 100644 index 00000000..c382d99a Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.04.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.05.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.05.png new file mode 100644 index 00000000..c90cc3d9 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.05.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.06.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.06.png new file mode 100644 index 00000000..432c6913 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.06.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.07.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.07.png new file mode 100644 index 00000000..34e5ceab Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.07.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.08.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.08.png new file mode 100644 index 00000000..4b4b7f83 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.08.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.09.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.09.png new file mode 100644 index 00000000..5d0997ef Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.09.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.10.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.10.png new file mode 100644 index 00000000..2f8f58e6 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.10.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.100.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.100.png new file mode 100644 index 00000000..52256207 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.100.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.101.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.101.png new file mode 100644 index 00000000..cdcc0969 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.101.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.102.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.102.png new file mode 100644 index 00000000..0fe8e489 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.102.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.103.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.103.png new file mode 100644 index 00000000..c90cc3d9 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.103.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.104.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.104.png new file mode 100644 index 00000000..432c6913 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.104.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.105.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.105.png new file mode 100644 index 00000000..34e5ceab Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.105.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.106.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.106.png new file mode 100644 index 00000000..4b4b7f83 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.106.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.107.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.107.png new file mode 100644 index 00000000..5d0997ef Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.107.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.108.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.108.png new file mode 100644 index 00000000..2f8f58e6 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.108.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.109.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.109.png new file mode 100644 index 00000000..c843773c Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.109.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.11.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.11.png new file mode 100644 index 00000000..c843773c Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.11.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.110.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.110.png new file mode 100644 index 00000000..ada3168c Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.110.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.111.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.111.png new file mode 100644 index 00000000..d1d91f35 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.111.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.112.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.112.png new file mode 100644 index 00000000..c382d99a Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.112.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.113.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.113.png new file mode 100644 index 00000000..636049d8 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.113.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.114.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.114.png new file mode 100644 index 00000000..9f8e7bd4 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.114.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.115.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.115.png new file mode 100644 index 00000000..78d8a6ef Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.115.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.116.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.116.png new file mode 100644 index 00000000..fcac3a1d Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.116.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.117.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.117.png new file mode 100644 index 00000000..52256207 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.117.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.118.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.118.png new file mode 100644 index 00000000..cdcc0969 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.118.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.119.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.119.png new file mode 100644 index 00000000..0fe8e489 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.119.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.12.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.12.png new file mode 100644 index 00000000..ada3168c Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.12.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.120.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.120.png new file mode 100644 index 00000000..94eb0568 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.120.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.121.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.121.png new file mode 100644 index 00000000..c90cc3d9 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.121.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.122.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.122.png new file mode 100644 index 00000000..432c6913 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.122.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.123.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.123.png new file mode 100644 index 00000000..34e5ceab Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.123.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.124.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.124.png new file mode 100644 index 00000000..4b4b7f83 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.124.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.125.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.125.png new file mode 100644 index 00000000..5d0997ef Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.125.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.126.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.126.png new file mode 100644 index 00000000..2f8f58e6 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.126.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.127.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.127.png new file mode 100644 index 00000000..c843773c Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.127.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.128.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.128.png new file mode 100644 index 00000000..ada3168c Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.128.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.129.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.129.png new file mode 100644 index 00000000..d1d91f35 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.129.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.13.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.13.png new file mode 100644 index 00000000..d1d91f35 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.13.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.130.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.130.png new file mode 100644 index 00000000..c382d99a Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.130.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.131.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.131.png new file mode 100644 index 00000000..636049d8 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.131.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.132.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.132.png new file mode 100644 index 00000000..9f8e7bd4 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.132.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.133.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.133.png new file mode 100644 index 00000000..78d8a6ef Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.133.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.134.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.134.png new file mode 100644 index 00000000..fcac3a1d Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.134.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.135.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.135.png new file mode 100644 index 00000000..52256207 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.135.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.136.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.136.png new file mode 100644 index 00000000..cdcc0969 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.136.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.137.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.137.png new file mode 100644 index 00000000..0fe8e489 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.137.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.138.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.138.png new file mode 100644 index 00000000..94eb0568 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.138.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.139.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.139.png new file mode 100644 index 00000000..ca37d7b3 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.139.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.14.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.14.png new file mode 100644 index 00000000..c382d99a Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.14.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.140.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.140.png new file mode 100644 index 00000000..c90cc3d9 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.140.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.141.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.141.png new file mode 100644 index 00000000..432c6913 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.141.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.142.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.142.png new file mode 100644 index 00000000..34e5ceab Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.142.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.143.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.143.png new file mode 100644 index 00000000..4b4b7f83 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.143.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.144.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.144.png new file mode 100644 index 00000000..5d0997ef Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.144.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.145.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.145.png new file mode 100644 index 00000000..2f8f58e6 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.145.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.146.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.146.png new file mode 100644 index 00000000..c843773c Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.146.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.147.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.147.png new file mode 100644 index 00000000..ada3168c Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.147.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.148.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.148.png new file mode 100644 index 00000000..d1d91f35 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.148.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.149.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.149.png new file mode 100644 index 00000000..c382d99a Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.149.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.15.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.15.png new file mode 100644 index 00000000..636049d8 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.15.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.150.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.150.png new file mode 100644 index 00000000..636049d8 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.150.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.151.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.151.png new file mode 100644 index 00000000..9f8e7bd4 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.151.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.152.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.152.png new file mode 100644 index 00000000..78d8a6ef Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.152.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.153.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.153.png new file mode 100644 index 00000000..fcac3a1d Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.153.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.154.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.154.png new file mode 100644 index 00000000..52256207 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.154.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.155.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.155.png new file mode 100644 index 00000000..cdcc0969 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.155.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.156.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.156.png new file mode 100644 index 00000000..0fe8e489 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.156.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.157.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.157.png new file mode 100644 index 00000000..94eb0568 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.157.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.158.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.158.png new file mode 100644 index 00000000..ca37d7b3 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.158.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.159.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.159.png new file mode 100644 index 00000000..1a969083 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.159.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.16.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.16.png new file mode 100644 index 00000000..c90cc3d9 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.16.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.160.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.160.png new file mode 100644 index 00000000..c90cc3d9 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.160.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.161.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.161.png new file mode 100644 index 00000000..432c6913 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.161.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.162.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.162.png new file mode 100644 index 00000000..34e5ceab Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.162.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.163.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.163.png new file mode 100644 index 00000000..4b4b7f83 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.163.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.164.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.164.png new file mode 100644 index 00000000..5d0997ef Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.164.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.165.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.165.png new file mode 100644 index 00000000..2f8f58e6 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.165.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.166.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.166.png new file mode 100644 index 00000000..c843773c Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.166.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.167.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.167.png new file mode 100644 index 00000000..ada3168c Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.167.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.168.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.168.png new file mode 100644 index 00000000..d1d91f35 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.168.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.169.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.169.png new file mode 100644 index 00000000..c382d99a Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.169.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.17.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.17.png new file mode 100644 index 00000000..432c6913 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.17.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.170.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.170.png new file mode 100644 index 00000000..636049d8 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.170.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.171.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.171.png new file mode 100644 index 00000000..9f8e7bd4 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.171.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.172.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.172.png new file mode 100644 index 00000000..78d8a6ef Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.172.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.173.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.173.png new file mode 100644 index 00000000..fcac3a1d Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.173.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.174.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.174.png new file mode 100644 index 00000000..52256207 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.174.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.175.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.175.png new file mode 100644 index 00000000..cdcc0969 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.175.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.176.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.176.png new file mode 100644 index 00000000..0fe8e489 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.176.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.177.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.177.png new file mode 100644 index 00000000..94eb0568 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.177.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.178.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.178.png new file mode 100644 index 00000000..ca37d7b3 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.178.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.179.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.179.png new file mode 100644 index 00000000..1a969083 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.179.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.18.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.18.png new file mode 100644 index 00000000..34e5ceab Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.18.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.180.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.180.png new file mode 100644 index 00000000..c1f2c676 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.180.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.181.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.181.png new file mode 100644 index 00000000..c90cc3d9 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.181.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.182.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.182.png new file mode 100644 index 00000000..432c6913 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.182.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.183.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.183.png new file mode 100644 index 00000000..34e5ceab Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.183.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.184.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.184.png new file mode 100644 index 00000000..4b4b7f83 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.184.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.185.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.185.png new file mode 100644 index 00000000..5d0997ef Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.185.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.186.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.186.png new file mode 100644 index 00000000..2f8f58e6 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.186.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.187.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.187.png new file mode 100644 index 00000000..c843773c Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.187.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.188.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.188.png new file mode 100644 index 00000000..ada3168c Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.188.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.189.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.189.png new file mode 100644 index 00000000..d1d91f35 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.189.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.19.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.19.png new file mode 100644 index 00000000..4b4b7f83 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.19.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.190.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.190.png new file mode 100644 index 00000000..c382d99a Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.190.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.191.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.191.png new file mode 100644 index 00000000..636049d8 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.191.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.192.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.192.png new file mode 100644 index 00000000..9f8e7bd4 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.192.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.193.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.193.png new file mode 100644 index 00000000..78d8a6ef Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.193.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.194.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.194.png new file mode 100644 index 00000000..fcac3a1d Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.194.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.195.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.195.png new file mode 100644 index 00000000..52256207 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.195.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.196.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.196.png new file mode 100644 index 00000000..cdcc0969 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.196.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.197.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.197.png new file mode 100644 index 00000000..0fe8e489 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.197.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.198.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.198.png new file mode 100644 index 00000000..94eb0568 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.198.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.199.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.199.png new file mode 100644 index 00000000..ca37d7b3 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.199.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.20.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.20.png new file mode 100644 index 00000000..5d0997ef Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.20.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.200.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.200.png new file mode 100644 index 00000000..1a969083 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.200.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.201.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.201.png new file mode 100644 index 00000000..c1f2c676 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.201.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.202.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.202.png new file mode 100644 index 00000000..620dff45 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.202.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.203.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.203.png new file mode 100644 index 00000000..c90cc3d9 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.203.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.204.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.204.png new file mode 100644 index 00000000..432c6913 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.204.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.205.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.205.png new file mode 100644 index 00000000..34e5ceab Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.205.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.206.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.206.png new file mode 100644 index 00000000..4b4b7f83 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.206.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.207.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.207.png new file mode 100644 index 00000000..5d0997ef Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.207.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.208.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.208.png new file mode 100644 index 00000000..2f8f58e6 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.208.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.209.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.209.png new file mode 100644 index 00000000..c843773c Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.209.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.21.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.21.png new file mode 100644 index 00000000..2f8f58e6 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.21.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.210.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.210.png new file mode 100644 index 00000000..ada3168c Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.210.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.211.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.211.png new file mode 100644 index 00000000..d1d91f35 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.211.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.212.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.212.png new file mode 100644 index 00000000..c382d99a Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.212.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.213.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.213.png new file mode 100644 index 00000000..636049d8 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.213.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.214.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.214.png new file mode 100644 index 00000000..9f8e7bd4 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.214.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.215.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.215.png new file mode 100644 index 00000000..78d8a6ef Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.215.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.216.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.216.png new file mode 100644 index 00000000..fcac3a1d Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.216.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.217.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.217.png new file mode 100644 index 00000000..52256207 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.217.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.218.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.218.png new file mode 100644 index 00000000..cdcc0969 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.218.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.219.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.219.png new file mode 100644 index 00000000..0fe8e489 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.219.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.22.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.22.png new file mode 100644 index 00000000..c843773c Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.22.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.220.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.220.png new file mode 100644 index 00000000..94eb0568 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.220.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.221.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.221.png new file mode 100644 index 00000000..ca37d7b3 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.221.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.222.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.222.png new file mode 100644 index 00000000..1a969083 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.222.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.223.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.223.png new file mode 100644 index 00000000..c1f2c676 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.223.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.224.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.224.png new file mode 100644 index 00000000..620dff45 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.224.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.225.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.225.png new file mode 100644 index 00000000..34e93eb8 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.225.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.226.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.226.png new file mode 100644 index 00000000..c90cc3d9 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.226.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.227.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.227.png new file mode 100644 index 00000000..432c6913 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.227.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.228.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.228.png new file mode 100644 index 00000000..34e5ceab Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.228.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.229.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.229.png new file mode 100644 index 00000000..4b4b7f83 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.229.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.23.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.23.png new file mode 100644 index 00000000..ada3168c Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.23.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.230.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.230.png new file mode 100644 index 00000000..5d0997ef Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.230.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.231.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.231.png new file mode 100644 index 00000000..2f8f58e6 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.231.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.232.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.232.png new file mode 100644 index 00000000..c843773c Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.232.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.233.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.233.png new file mode 100644 index 00000000..ada3168c Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.233.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.234.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.234.png new file mode 100644 index 00000000..d1d91f35 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.234.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.235.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.235.png new file mode 100644 index 00000000..c382d99a Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.235.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.236.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.236.png new file mode 100644 index 00000000..636049d8 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.236.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.237.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.237.png new file mode 100644 index 00000000..9f8e7bd4 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.237.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.238.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.238.png new file mode 100644 index 00000000..78d8a6ef Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.238.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.239.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.239.png new file mode 100644 index 00000000..fcac3a1d Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.239.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.24.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.24.png new file mode 100644 index 00000000..d1d91f35 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.24.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.240.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.240.png new file mode 100644 index 00000000..52256207 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.240.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.241.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.241.png new file mode 100644 index 00000000..cdcc0969 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.241.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.242.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.242.png new file mode 100644 index 00000000..0fe8e489 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.242.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.243.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.243.png new file mode 100644 index 00000000..94eb0568 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.243.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.244.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.244.png new file mode 100644 index 00000000..ca37d7b3 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.244.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.245.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.245.png new file mode 100644 index 00000000..1a969083 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.245.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.246.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.246.png new file mode 100644 index 00000000..c1f2c676 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.246.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.247.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.247.png new file mode 100644 index 00000000..620dff45 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.247.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.248.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.248.png new file mode 100644 index 00000000..34e93eb8 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.248.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.249.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.249.png new file mode 100644 index 00000000..e71f287e Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.249.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.25.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.25.png new file mode 100644 index 00000000..c382d99a Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.25.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.250.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.250.png new file mode 100644 index 00000000..c90cc3d9 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.250.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.251.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.251.png new file mode 100644 index 00000000..432c6913 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.251.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.252.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.252.png new file mode 100644 index 00000000..34e5ceab Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.252.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.253.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.253.png new file mode 100644 index 00000000..4b4b7f83 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.253.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.254.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.254.png new file mode 100644 index 00000000..5d0997ef Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.254.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.255.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.255.png new file mode 100644 index 00000000..2f8f58e6 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.255.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.256.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.256.png new file mode 100644 index 00000000..c843773c Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.256.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.257.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.257.png new file mode 100644 index 00000000..ada3168c Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.257.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.258.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.258.png new file mode 100644 index 00000000..d1d91f35 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.258.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.259.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.259.png new file mode 100644 index 00000000..c382d99a Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.259.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.26.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.26.png new file mode 100644 index 00000000..636049d8 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.26.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.260.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.260.png new file mode 100644 index 00000000..636049d8 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.260.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.261.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.261.png new file mode 100644 index 00000000..9f8e7bd4 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.261.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.262.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.262.png new file mode 100644 index 00000000..78d8a6ef Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.262.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.263.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.263.png new file mode 100644 index 00000000..fcac3a1d Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.263.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.264.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.264.png new file mode 100644 index 00000000..52256207 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.264.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.265.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.265.png new file mode 100644 index 00000000..cdcc0969 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.265.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.266.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.266.png new file mode 100644 index 00000000..0fe8e489 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.266.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.267.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.267.png new file mode 100644 index 00000000..94eb0568 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.267.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.268.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.268.png new file mode 100644 index 00000000..ca37d7b3 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.268.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.269.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.269.png new file mode 100644 index 00000000..1a969083 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.269.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.27.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.27.png new file mode 100644 index 00000000..9f8e7bd4 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.27.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.270.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.270.png new file mode 100644 index 00000000..c1f2c676 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.270.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.271.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.271.png new file mode 100644 index 00000000..620dff45 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.271.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.272.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.272.png new file mode 100644 index 00000000..34e93eb8 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.272.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.273.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.273.png new file mode 100644 index 00000000..e71f287e Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.273.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.274.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.274.png new file mode 100644 index 00000000..49253dd6 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.274.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.275.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.275.png new file mode 100644 index 00000000..c90cc3d9 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.275.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.276.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.276.png new file mode 100644 index 00000000..432c6913 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.276.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.277.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.277.png new file mode 100644 index 00000000..34e5ceab Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.277.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.278.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.278.png new file mode 100644 index 00000000..4b4b7f83 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.278.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.279.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.279.png new file mode 100644 index 00000000..5d0997ef Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.279.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.28.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.28.png new file mode 100644 index 00000000..c90cc3d9 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.28.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.280.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.280.png new file mode 100644 index 00000000..2f8f58e6 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.280.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.281.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.281.png new file mode 100644 index 00000000..c843773c Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.281.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.282.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.282.png new file mode 100644 index 00000000..ada3168c Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.282.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.283.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.283.png new file mode 100644 index 00000000..d1d91f35 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.283.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.284.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.284.png new file mode 100644 index 00000000..c382d99a Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.284.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.285.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.285.png new file mode 100644 index 00000000..636049d8 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.285.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.286.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.286.png new file mode 100644 index 00000000..9f8e7bd4 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.286.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.287.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.287.png new file mode 100644 index 00000000..78d8a6ef Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.287.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.288.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.288.png new file mode 100644 index 00000000..fcac3a1d Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.288.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.289.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.289.png new file mode 100644 index 00000000..52256207 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.289.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.29.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.29.png new file mode 100644 index 00000000..432c6913 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.29.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.290.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.290.png new file mode 100644 index 00000000..cdcc0969 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.290.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.291.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.291.png new file mode 100644 index 00000000..0fe8e489 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.291.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.292.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.292.png new file mode 100644 index 00000000..94eb0568 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.292.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.293.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.293.png new file mode 100644 index 00000000..ca37d7b3 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.293.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.294.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.294.png new file mode 100644 index 00000000..1a969083 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.294.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.295.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.295.png new file mode 100644 index 00000000..c1f2c676 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.295.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.296.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.296.png new file mode 100644 index 00000000..620dff45 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.296.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.297.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.297.png new file mode 100644 index 00000000..34e93eb8 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.297.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.298.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.298.png new file mode 100644 index 00000000..e71f287e Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.298.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.299.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.299.png new file mode 100644 index 00000000..49253dd6 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.299.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.30.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.30.png new file mode 100644 index 00000000..34e5ceab Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.30.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.300.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.300.png new file mode 100644 index 00000000..66badfdb Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.300.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.301.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.301.png new file mode 100644 index 00000000..c90cc3d9 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.301.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.302.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.302.png new file mode 100644 index 00000000..432c6913 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.302.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.303.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.303.png new file mode 100644 index 00000000..34e5ceab Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.303.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.304.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.304.png new file mode 100644 index 00000000..4b4b7f83 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.304.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.305.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.305.png new file mode 100644 index 00000000..5d0997ef Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.305.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.306.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.306.png new file mode 100644 index 00000000..2f8f58e6 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.306.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.307.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.307.png new file mode 100644 index 00000000..c843773c Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.307.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.308.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.308.png new file mode 100644 index 00000000..ada3168c Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.308.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.309.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.309.png new file mode 100644 index 00000000..d1d91f35 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.309.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.31.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.31.png new file mode 100644 index 00000000..4b4b7f83 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.31.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.310.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.310.png new file mode 100644 index 00000000..c382d99a Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.310.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.311.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.311.png new file mode 100644 index 00000000..636049d8 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.311.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.312.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.312.png new file mode 100644 index 00000000..9f8e7bd4 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.312.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.313.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.313.png new file mode 100644 index 00000000..78d8a6ef Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.313.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.314.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.314.png new file mode 100644 index 00000000..fcac3a1d Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.314.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.315.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.315.png new file mode 100644 index 00000000..52256207 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.315.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.316.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.316.png new file mode 100644 index 00000000..cdcc0969 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.316.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.317.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.317.png new file mode 100644 index 00000000..0fe8e489 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.317.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.318.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.318.png new file mode 100644 index 00000000..94eb0568 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.318.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.319.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.319.png new file mode 100644 index 00000000..ca37d7b3 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.319.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.32.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.32.png new file mode 100644 index 00000000..5d0997ef Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.32.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.320.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.320.png new file mode 100644 index 00000000..1a969083 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.320.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.321.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.321.png new file mode 100644 index 00000000..c1f2c676 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.321.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.322.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.322.png new file mode 100644 index 00000000..620dff45 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.322.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.323.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.323.png new file mode 100644 index 00000000..34e93eb8 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.323.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.324.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.324.png new file mode 100644 index 00000000..e71f287e Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.324.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.325.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.325.png new file mode 100644 index 00000000..49253dd6 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.325.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.326.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.326.png new file mode 100644 index 00000000..66badfdb Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.326.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.327.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.327.png new file mode 100644 index 00000000..b19114b3 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.327.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.328.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.328.png new file mode 100644 index 00000000..c90cc3d9 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.328.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.329.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.329.png new file mode 100644 index 00000000..432c6913 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.329.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.33.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.33.png new file mode 100644 index 00000000..2f8f58e6 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.33.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.330.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.330.png new file mode 100644 index 00000000..34e5ceab Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.330.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.331.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.331.png new file mode 100644 index 00000000..4b4b7f83 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.331.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.332.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.332.png new file mode 100644 index 00000000..5d0997ef Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.332.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.333.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.333.png new file mode 100644 index 00000000..2f8f58e6 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.333.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.334.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.334.png new file mode 100644 index 00000000..c843773c Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.334.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.335.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.335.png new file mode 100644 index 00000000..ada3168c Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.335.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.336.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.336.png new file mode 100644 index 00000000..d1d91f35 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.336.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.337.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.337.png new file mode 100644 index 00000000..c382d99a Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.337.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.338.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.338.png new file mode 100644 index 00000000..636049d8 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.338.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.339.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.339.png new file mode 100644 index 00000000..9f8e7bd4 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.339.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.34.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.34.png new file mode 100644 index 00000000..c843773c Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.34.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.340.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.340.png new file mode 100644 index 00000000..78d8a6ef Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.340.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.341.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.341.png new file mode 100644 index 00000000..fcac3a1d Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.341.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.342.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.342.png new file mode 100644 index 00000000..52256207 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.342.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.343.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.343.png new file mode 100644 index 00000000..cdcc0969 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.343.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.344.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.344.png new file mode 100644 index 00000000..0fe8e489 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.344.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.345.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.345.png new file mode 100644 index 00000000..94eb0568 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.345.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.346.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.346.png new file mode 100644 index 00000000..ca37d7b3 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.346.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.347.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.347.png new file mode 100644 index 00000000..1a969083 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.347.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.348.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.348.png new file mode 100644 index 00000000..c1f2c676 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.348.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.349.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.349.png new file mode 100644 index 00000000..620dff45 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.349.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.35.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.35.png new file mode 100644 index 00000000..ada3168c Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.35.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.350.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.350.png new file mode 100644 index 00000000..34e93eb8 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.350.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.351.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.351.png new file mode 100644 index 00000000..e71f287e Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.351.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.352.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.352.png new file mode 100644 index 00000000..49253dd6 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.352.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.353.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.353.png new file mode 100644 index 00000000..66badfdb Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.353.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.354.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.354.png new file mode 100644 index 00000000..b19114b3 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.354.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.355.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.355.png new file mode 100644 index 00000000..748523e8 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.355.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.356.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.356.png new file mode 100644 index 00000000..c90cc3d9 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.356.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.357.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.357.png new file mode 100644 index 00000000..432c6913 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.357.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.358.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.358.png new file mode 100644 index 00000000..34e5ceab Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.358.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.359.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.359.png new file mode 100644 index 00000000..4b4b7f83 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.359.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.36.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.36.png new file mode 100644 index 00000000..d1d91f35 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.36.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.360.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.360.png new file mode 100644 index 00000000..5d0997ef Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.360.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.361.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.361.png new file mode 100644 index 00000000..2f8f58e6 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.361.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.362.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.362.png new file mode 100644 index 00000000..c843773c Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.362.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.363.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.363.png new file mode 100644 index 00000000..ada3168c Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.363.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.364.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.364.png new file mode 100644 index 00000000..d1d91f35 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.364.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.365.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.365.png new file mode 100644 index 00000000..c382d99a Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.365.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.366.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.366.png new file mode 100644 index 00000000..636049d8 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.366.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.367.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.367.png new file mode 100644 index 00000000..9f8e7bd4 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.367.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.368.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.368.png new file mode 100644 index 00000000..78d8a6ef Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.368.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.369.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.369.png new file mode 100644 index 00000000..fcac3a1d Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.369.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.37.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.37.png new file mode 100644 index 00000000..c382d99a Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.37.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.370.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.370.png new file mode 100644 index 00000000..52256207 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.370.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.371.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.371.png new file mode 100644 index 00000000..cdcc0969 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.371.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.372.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.372.png new file mode 100644 index 00000000..0fe8e489 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.372.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.373.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.373.png new file mode 100644 index 00000000..94eb0568 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.373.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.374.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.374.png new file mode 100644 index 00000000..ca37d7b3 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.374.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.375.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.375.png new file mode 100644 index 00000000..1a969083 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.375.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.376.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.376.png new file mode 100644 index 00000000..c1f2c676 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.376.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.377.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.377.png new file mode 100644 index 00000000..620dff45 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.377.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.378.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.378.png new file mode 100644 index 00000000..34e93eb8 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.378.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.379.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.379.png new file mode 100644 index 00000000..e71f287e Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.379.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.38.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.38.png new file mode 100644 index 00000000..636049d8 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.38.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.380.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.380.png new file mode 100644 index 00000000..49253dd6 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.380.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.381.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.381.png new file mode 100644 index 00000000..66badfdb Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.381.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.382.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.382.png new file mode 100644 index 00000000..b19114b3 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.382.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.383.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.383.png new file mode 100644 index 00000000..748523e8 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.383.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.384.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.384.png new file mode 100644 index 00000000..aa96dd1f Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.384.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.385.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.385.png new file mode 100644 index 00000000..c90cc3d9 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.385.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.386.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.386.png new file mode 100644 index 00000000..432c6913 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.386.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.387.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.387.png new file mode 100644 index 00000000..34e5ceab Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.387.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.388.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.388.png new file mode 100644 index 00000000..4b4b7f83 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.388.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.389.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.389.png new file mode 100644 index 00000000..5d0997ef Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.389.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.39.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.39.png new file mode 100644 index 00000000..9f8e7bd4 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.39.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.390.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.390.png new file mode 100644 index 00000000..2f8f58e6 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.390.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.391.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.391.png new file mode 100644 index 00000000..c843773c Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.391.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.392.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.392.png new file mode 100644 index 00000000..ada3168c Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.392.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.393.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.393.png new file mode 100644 index 00000000..d1d91f35 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.393.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.394.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.394.png new file mode 100644 index 00000000..c382d99a Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.394.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.395.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.395.png new file mode 100644 index 00000000..636049d8 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.395.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.396.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.396.png new file mode 100644 index 00000000..9f8e7bd4 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.396.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.397.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.397.png new file mode 100644 index 00000000..78d8a6ef Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.397.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.398.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.398.png new file mode 100644 index 00000000..fcac3a1d Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.398.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.399.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.399.png new file mode 100644 index 00000000..52256207 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.399.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.40.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.40.png new file mode 100644 index 00000000..78d8a6ef Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.40.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.400.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.400.png new file mode 100644 index 00000000..cdcc0969 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.400.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.401.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.401.png new file mode 100644 index 00000000..0fe8e489 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.401.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.402.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.402.png new file mode 100644 index 00000000..94eb0568 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.402.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.403.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.403.png new file mode 100644 index 00000000..ca37d7b3 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.403.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.404.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.404.png new file mode 100644 index 00000000..1a969083 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.404.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.405.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.405.png new file mode 100644 index 00000000..c1f2c676 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.405.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.406.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.406.png new file mode 100644 index 00000000..620dff45 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.406.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.407.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.407.png new file mode 100644 index 00000000..34e93eb8 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.407.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.408.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.408.png new file mode 100644 index 00000000..e71f287e Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.408.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.409.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.409.png new file mode 100644 index 00000000..49253dd6 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.409.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.41.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.41.png new file mode 100644 index 00000000..c90cc3d9 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.41.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.410.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.410.png new file mode 100644 index 00000000..66badfdb Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.410.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.411.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.411.png new file mode 100644 index 00000000..b19114b3 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.411.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.412.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.412.png new file mode 100644 index 00000000..748523e8 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.412.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.413.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.413.png new file mode 100644 index 00000000..aa96dd1f Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.413.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.414.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.414.png new file mode 100644 index 00000000..f88daeea Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.414.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.415.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.415.png new file mode 100644 index 00000000..c90cc3d9 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.415.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.416.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.416.png new file mode 100644 index 00000000..432c6913 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.416.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.417.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.417.png new file mode 100644 index 00000000..34e5ceab Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.417.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.418.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.418.png new file mode 100644 index 00000000..4b4b7f83 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.418.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.419.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.419.png new file mode 100644 index 00000000..5d0997ef Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.419.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.42.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.42.png new file mode 100644 index 00000000..432c6913 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.42.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.420.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.420.png new file mode 100644 index 00000000..2f8f58e6 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.420.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.421.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.421.png new file mode 100644 index 00000000..c843773c Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.421.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.422.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.422.png new file mode 100644 index 00000000..ada3168c Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.422.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.423.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.423.png new file mode 100644 index 00000000..d1d91f35 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.423.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.424.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.424.png new file mode 100644 index 00000000..c382d99a Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.424.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.425.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.425.png new file mode 100644 index 00000000..636049d8 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.425.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.426.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.426.png new file mode 100644 index 00000000..9f8e7bd4 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.426.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.427.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.427.png new file mode 100644 index 00000000..78d8a6ef Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.427.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.428.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.428.png new file mode 100644 index 00000000..fcac3a1d Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.428.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.429.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.429.png new file mode 100644 index 00000000..52256207 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.429.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.43.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.43.png new file mode 100644 index 00000000..34e5ceab Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.43.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.430.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.430.png new file mode 100644 index 00000000..cdcc0969 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.430.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.431.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.431.png new file mode 100644 index 00000000..0fe8e489 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.431.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.432.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.432.png new file mode 100644 index 00000000..94eb0568 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.432.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.433.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.433.png new file mode 100644 index 00000000..ca37d7b3 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.433.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.434.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.434.png new file mode 100644 index 00000000..1a969083 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.434.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.435.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.435.png new file mode 100644 index 00000000..c1f2c676 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.435.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.436.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.436.png new file mode 100644 index 00000000..620dff45 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.436.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.437.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.437.png new file mode 100644 index 00000000..34e93eb8 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.437.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.438.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.438.png new file mode 100644 index 00000000..e71f287e Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.438.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.439.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.439.png new file mode 100644 index 00000000..49253dd6 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.439.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.44.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.44.png new file mode 100644 index 00000000..4b4b7f83 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.44.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.440.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.440.png new file mode 100644 index 00000000..66badfdb Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.440.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.441.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.441.png new file mode 100644 index 00000000..b19114b3 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.441.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.442.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.442.png new file mode 100644 index 00000000..748523e8 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.442.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.443.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.443.png new file mode 100644 index 00000000..aa96dd1f Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.443.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.444.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.444.png new file mode 100644 index 00000000..f88daeea Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.444.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.445.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.445.png new file mode 100644 index 00000000..4c77daaf Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.445.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.446.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.446.png new file mode 100644 index 00000000..c90cc3d9 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.446.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.447.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.447.png new file mode 100644 index 00000000..432c6913 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.447.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.448.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.448.png new file mode 100644 index 00000000..34e5ceab Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.448.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.449.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.449.png new file mode 100644 index 00000000..4b4b7f83 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.449.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.45.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.45.png new file mode 100644 index 00000000..5d0997ef Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.45.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.450.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.450.png new file mode 100644 index 00000000..5d0997ef Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.450.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.451.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.451.png new file mode 100644 index 00000000..2f8f58e6 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.451.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.452.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.452.png new file mode 100644 index 00000000..c843773c Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.452.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.453.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.453.png new file mode 100644 index 00000000..ada3168c Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.453.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.454.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.454.png new file mode 100644 index 00000000..d1d91f35 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.454.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.455.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.455.png new file mode 100644 index 00000000..c382d99a Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.455.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.456.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.456.png new file mode 100644 index 00000000..636049d8 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.456.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.457.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.457.png new file mode 100644 index 00000000..9f8e7bd4 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.457.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.458.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.458.png new file mode 100644 index 00000000..78d8a6ef Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.458.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.459.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.459.png new file mode 100644 index 00000000..fcac3a1d Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.459.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.46.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.46.png new file mode 100644 index 00000000..2f8f58e6 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.46.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.460.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.460.png new file mode 100644 index 00000000..52256207 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.460.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.461.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.461.png new file mode 100644 index 00000000..cdcc0969 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.461.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.462.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.462.png new file mode 100644 index 00000000..0fe8e489 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.462.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.463.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.463.png new file mode 100644 index 00000000..94eb0568 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.463.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.464.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.464.png new file mode 100644 index 00000000..ca37d7b3 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.464.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.465.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.465.png new file mode 100644 index 00000000..1a969083 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.465.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.466.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.466.png new file mode 100644 index 00000000..c1f2c676 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.466.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.467.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.467.png new file mode 100644 index 00000000..620dff45 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.467.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.468.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.468.png new file mode 100644 index 00000000..34e93eb8 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.468.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.469.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.469.png new file mode 100644 index 00000000..e71f287e Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.469.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.47.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.47.png new file mode 100644 index 00000000..c843773c Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.47.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.470.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.470.png new file mode 100644 index 00000000..49253dd6 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.470.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.471.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.471.png new file mode 100644 index 00000000..66badfdb Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.471.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.472.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.472.png new file mode 100644 index 00000000..b19114b3 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.472.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.473.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.473.png new file mode 100644 index 00000000..748523e8 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.473.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.474.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.474.png new file mode 100644 index 00000000..aa96dd1f Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.474.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.475.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.475.png new file mode 100644 index 00000000..f88daeea Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.475.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.476.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.476.png new file mode 100644 index 00000000..4c77daaf Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.476.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.477.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.477.png new file mode 100644 index 00000000..87a56a87 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.477.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.478.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.478.png new file mode 100644 index 00000000..c90cc3d9 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.478.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.479.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.479.png new file mode 100644 index 00000000..432c6913 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.479.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.48.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.48.png new file mode 100644 index 00000000..ada3168c Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.48.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.480.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.480.png new file mode 100644 index 00000000..34e5ceab Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.480.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.481.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.481.png new file mode 100644 index 00000000..4b4b7f83 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.481.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.482.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.482.png new file mode 100644 index 00000000..5d0997ef Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.482.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.483.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.483.png new file mode 100644 index 00000000..2f8f58e6 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.483.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.484.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.484.png new file mode 100644 index 00000000..c843773c Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.484.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.485.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.485.png new file mode 100644 index 00000000..ada3168c Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.485.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.486.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.486.png new file mode 100644 index 00000000..d1d91f35 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.486.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.487.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.487.png new file mode 100644 index 00000000..c382d99a Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.487.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.488.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.488.png new file mode 100644 index 00000000..636049d8 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.488.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.489.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.489.png new file mode 100644 index 00000000..9f8e7bd4 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.489.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.49.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.49.png new file mode 100644 index 00000000..d1d91f35 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.49.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.490.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.490.png new file mode 100644 index 00000000..78d8a6ef Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.490.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.491.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.491.png new file mode 100644 index 00000000..fcac3a1d Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.491.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.492.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.492.png new file mode 100644 index 00000000..52256207 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.492.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.493.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.493.png new file mode 100644 index 00000000..cdcc0969 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.493.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.494.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.494.png new file mode 100644 index 00000000..0fe8e489 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.494.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.495.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.495.png new file mode 100644 index 00000000..94eb0568 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.495.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.496.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.496.png new file mode 100644 index 00000000..ca37d7b3 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.496.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.497.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.497.png new file mode 100644 index 00000000..1a969083 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.497.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.498.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.498.png new file mode 100644 index 00000000..c1f2c676 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.498.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.499.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.499.png new file mode 100644 index 00000000..620dff45 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.499.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.50.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.50.png new file mode 100644 index 00000000..c382d99a Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.50.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.500.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.500.png new file mode 100644 index 00000000..34e93eb8 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.500.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.501.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.501.png new file mode 100644 index 00000000..e71f287e Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.501.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.502.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.502.png new file mode 100644 index 00000000..49253dd6 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.502.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.503.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.503.png new file mode 100644 index 00000000..66badfdb Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.503.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.504.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.504.png new file mode 100644 index 00000000..b19114b3 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.504.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.505.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.505.png new file mode 100644 index 00000000..748523e8 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.505.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.506.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.506.png new file mode 100644 index 00000000..aa96dd1f Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.506.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.507.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.507.png new file mode 100644 index 00000000..f88daeea Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.507.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.508.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.508.png new file mode 100644 index 00000000..4c77daaf Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.508.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.509.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.509.png new file mode 100644 index 00000000..87a56a87 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.509.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.51.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.51.png new file mode 100644 index 00000000..636049d8 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.51.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.510.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.510.png new file mode 100644 index 00000000..7847f5e8 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.510.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.511.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.511.png new file mode 100644 index 00000000..c90cc3d9 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.511.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.512.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.512.png new file mode 100644 index 00000000..432c6913 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.512.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.513.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.513.png new file mode 100644 index 00000000..34e5ceab Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.513.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.514.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.514.png new file mode 100644 index 00000000..4b4b7f83 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.514.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.515.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.515.png new file mode 100644 index 00000000..5d0997ef Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.515.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.516.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.516.png new file mode 100644 index 00000000..2f8f58e6 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.516.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.517.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.517.png new file mode 100644 index 00000000..c843773c Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.517.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.518.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.518.png new file mode 100644 index 00000000..ada3168c Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.518.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.519.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.519.png new file mode 100644 index 00000000..d1d91f35 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.519.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.52.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.52.png new file mode 100644 index 00000000..9f8e7bd4 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.52.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.520.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.520.png new file mode 100644 index 00000000..c382d99a Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.520.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.521.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.521.png new file mode 100644 index 00000000..636049d8 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.521.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.522.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.522.png new file mode 100644 index 00000000..9f8e7bd4 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.522.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.523.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.523.png new file mode 100644 index 00000000..78d8a6ef Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.523.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.524.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.524.png new file mode 100644 index 00000000..fcac3a1d Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.524.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.525.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.525.png new file mode 100644 index 00000000..52256207 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.525.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.526.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.526.png new file mode 100644 index 00000000..cdcc0969 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.526.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.527.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.527.png new file mode 100644 index 00000000..0fe8e489 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.527.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.528.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.528.png new file mode 100644 index 00000000..94eb0568 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.528.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.529.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.529.png new file mode 100644 index 00000000..ca37d7b3 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.529.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.53.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.53.png new file mode 100644 index 00000000..78d8a6ef Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.53.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.530.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.530.png new file mode 100644 index 00000000..1a969083 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.530.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.531.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.531.png new file mode 100644 index 00000000..c1f2c676 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.531.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.532.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.532.png new file mode 100644 index 00000000..620dff45 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.532.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.533.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.533.png new file mode 100644 index 00000000..34e93eb8 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.533.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.534.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.534.png new file mode 100644 index 00000000..e71f287e Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.534.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.535.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.535.png new file mode 100644 index 00000000..49253dd6 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.535.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.536.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.536.png new file mode 100644 index 00000000..66badfdb Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.536.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.537.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.537.png new file mode 100644 index 00000000..b19114b3 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.537.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.538.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.538.png new file mode 100644 index 00000000..748523e8 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.538.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.539.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.539.png new file mode 100644 index 00000000..aa96dd1f Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.539.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.54.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.54.png new file mode 100644 index 00000000..fcac3a1d Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.54.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.540.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.540.png new file mode 100644 index 00000000..f88daeea Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.540.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.541.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.541.png new file mode 100644 index 00000000..4c77daaf Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.541.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.542.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.542.png new file mode 100644 index 00000000..87a56a87 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.542.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.543.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.543.png new file mode 100644 index 00000000..7847f5e8 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.543.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.544.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.544.png new file mode 100644 index 00000000..6c1428bb Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.544.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.545.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.545.png new file mode 100644 index 00000000..c90cc3d9 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.545.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.546.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.546.png new file mode 100644 index 00000000..432c6913 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.546.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.547.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.547.png new file mode 100644 index 00000000..34e5ceab Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.547.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.548.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.548.png new file mode 100644 index 00000000..4b4b7f83 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.548.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.549.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.549.png new file mode 100644 index 00000000..5d0997ef Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.549.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.55.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.55.png new file mode 100644 index 00000000..c90cc3d9 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.55.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.550.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.550.png new file mode 100644 index 00000000..2f8f58e6 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.550.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.551.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.551.png new file mode 100644 index 00000000..c843773c Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.551.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.552.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.552.png new file mode 100644 index 00000000..ada3168c Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.552.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.553.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.553.png new file mode 100644 index 00000000..d1d91f35 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.553.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.554.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.554.png new file mode 100644 index 00000000..c382d99a Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.554.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.555.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.555.png new file mode 100644 index 00000000..636049d8 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.555.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.556.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.556.png new file mode 100644 index 00000000..9f8e7bd4 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.556.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.557.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.557.png new file mode 100644 index 00000000..78d8a6ef Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.557.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.558.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.558.png new file mode 100644 index 00000000..fcac3a1d Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.558.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.559.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.559.png new file mode 100644 index 00000000..52256207 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.559.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.56.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.56.png new file mode 100644 index 00000000..432c6913 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.56.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.560.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.560.png new file mode 100644 index 00000000..cdcc0969 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.560.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.561.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.561.png new file mode 100644 index 00000000..0fe8e489 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.561.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.562.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.562.png new file mode 100644 index 00000000..94eb0568 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.562.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.563.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.563.png new file mode 100644 index 00000000..ca37d7b3 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.563.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.564.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.564.png new file mode 100644 index 00000000..1a969083 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.564.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.565.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.565.png new file mode 100644 index 00000000..c1f2c676 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.565.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.566.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.566.png new file mode 100644 index 00000000..620dff45 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.566.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.567.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.567.png new file mode 100644 index 00000000..34e93eb8 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.567.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.568.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.568.png new file mode 100644 index 00000000..e71f287e Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.568.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.569.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.569.png new file mode 100644 index 00000000..49253dd6 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.569.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.57.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.57.png new file mode 100644 index 00000000..34e5ceab Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.57.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.570.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.570.png new file mode 100644 index 00000000..66badfdb Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.570.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.571.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.571.png new file mode 100644 index 00000000..b19114b3 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.571.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.572.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.572.png new file mode 100644 index 00000000..748523e8 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.572.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.573.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.573.png new file mode 100644 index 00000000..aa96dd1f Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.573.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.574.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.574.png new file mode 100644 index 00000000..f88daeea Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.574.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.575.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.575.png new file mode 100644 index 00000000..4c77daaf Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.575.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.576.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.576.png new file mode 100644 index 00000000..87a56a87 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.576.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.577.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.577.png new file mode 100644 index 00000000..7847f5e8 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.577.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.578.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.578.png new file mode 100644 index 00000000..6c1428bb Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.578.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.579.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.579.png new file mode 100644 index 00000000..dc71c033 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.579.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.58.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.58.png new file mode 100644 index 00000000..4b4b7f83 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.58.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.580.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.580.png new file mode 100644 index 00000000..c90cc3d9 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.580.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.581.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.581.png new file mode 100644 index 00000000..432c6913 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.581.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.582.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.582.png new file mode 100644 index 00000000..34e5ceab Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.582.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.583.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.583.png new file mode 100644 index 00000000..4b4b7f83 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.583.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.584.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.584.png new file mode 100644 index 00000000..5d0997ef Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.584.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.585.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.585.png new file mode 100644 index 00000000..2f8f58e6 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.585.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.586.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.586.png new file mode 100644 index 00000000..c843773c Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.586.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.587.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.587.png new file mode 100644 index 00000000..ada3168c Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.587.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.588.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.588.png new file mode 100644 index 00000000..d1d91f35 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.588.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.589.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.589.png new file mode 100644 index 00000000..c382d99a Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.589.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.59.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.59.png new file mode 100644 index 00000000..5d0997ef Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.59.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.590.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.590.png new file mode 100644 index 00000000..636049d8 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.590.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.591.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.591.png new file mode 100644 index 00000000..9f8e7bd4 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.591.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.592.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.592.png new file mode 100644 index 00000000..78d8a6ef Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.592.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.593.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.593.png new file mode 100644 index 00000000..fcac3a1d Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.593.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.594.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.594.png new file mode 100644 index 00000000..52256207 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.594.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.595.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.595.png new file mode 100644 index 00000000..cdcc0969 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.595.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.596.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.596.png new file mode 100644 index 00000000..0fe8e489 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.596.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.597.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.597.png new file mode 100644 index 00000000..94eb0568 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.597.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.598.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.598.png new file mode 100644 index 00000000..ca37d7b3 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.598.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.599.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.599.png new file mode 100644 index 00000000..1a969083 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.599.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.60.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.60.png new file mode 100644 index 00000000..2f8f58e6 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.60.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.600.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.600.png new file mode 100644 index 00000000..c1f2c676 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.600.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.601.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.601.png new file mode 100644 index 00000000..620dff45 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.601.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.602.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.602.png new file mode 100644 index 00000000..34e93eb8 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.602.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.603.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.603.png new file mode 100644 index 00000000..e71f287e Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.603.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.604.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.604.png new file mode 100644 index 00000000..49253dd6 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.604.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.605.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.605.png new file mode 100644 index 00000000..66badfdb Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.605.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.606.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.606.png new file mode 100644 index 00000000..b19114b3 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.606.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.607.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.607.png new file mode 100644 index 00000000..748523e8 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.607.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.608.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.608.png new file mode 100644 index 00000000..aa96dd1f Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.608.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.609.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.609.png new file mode 100644 index 00000000..f88daeea Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.609.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.61.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.61.png new file mode 100644 index 00000000..c843773c Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.61.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.610.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.610.png new file mode 100644 index 00000000..4c77daaf Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.610.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.611.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.611.png new file mode 100644 index 00000000..87a56a87 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.611.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.612.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.612.png new file mode 100644 index 00000000..7847f5e8 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.612.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.613.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.613.png new file mode 100644 index 00000000..6c1428bb Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.613.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.614.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.614.png new file mode 100644 index 00000000..dc71c033 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.614.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.615.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.615.png new file mode 100644 index 00000000..e653ab18 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.615.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.616.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.616.png new file mode 100644 index 00000000..c90cc3d9 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.616.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.617.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.617.png new file mode 100644 index 00000000..432c6913 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.617.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.618.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.618.png new file mode 100644 index 00000000..34e5ceab Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.618.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.619.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.619.png new file mode 100644 index 00000000..4b4b7f83 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.619.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.62.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.62.png new file mode 100644 index 00000000..ada3168c Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.62.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.620.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.620.png new file mode 100644 index 00000000..5d0997ef Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.620.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.621.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.621.png new file mode 100644 index 00000000..2f8f58e6 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.621.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.622.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.622.png new file mode 100644 index 00000000..c843773c Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.622.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.623.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.623.png new file mode 100644 index 00000000..ada3168c Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.623.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.624.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.624.png new file mode 100644 index 00000000..d1d91f35 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.624.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.625.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.625.png new file mode 100644 index 00000000..c382d99a Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.625.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.626.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.626.png new file mode 100644 index 00000000..636049d8 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.626.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.627.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.627.png new file mode 100644 index 00000000..9f8e7bd4 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.627.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.628.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.628.png new file mode 100644 index 00000000..78d8a6ef Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.628.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.629.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.629.png new file mode 100644 index 00000000..fcac3a1d Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.629.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.63.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.63.png new file mode 100644 index 00000000..d1d91f35 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.63.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.630.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.630.png new file mode 100644 index 00000000..52256207 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.630.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.631.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.631.png new file mode 100644 index 00000000..cdcc0969 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.631.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.632.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.632.png new file mode 100644 index 00000000..0fe8e489 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.632.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.633.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.633.png new file mode 100644 index 00000000..94eb0568 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.633.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.634.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.634.png new file mode 100644 index 00000000..ca37d7b3 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.634.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.635.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.635.png new file mode 100644 index 00000000..1a969083 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.635.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.636.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.636.png new file mode 100644 index 00000000..c1f2c676 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.636.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.637.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.637.png new file mode 100644 index 00000000..620dff45 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.637.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.638.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.638.png new file mode 100644 index 00000000..34e93eb8 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.638.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.639.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.639.png new file mode 100644 index 00000000..e71f287e Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.639.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.64.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.64.png new file mode 100644 index 00000000..c382d99a Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.64.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.640.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.640.png new file mode 100644 index 00000000..49253dd6 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.640.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.641.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.641.png new file mode 100644 index 00000000..66badfdb Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.641.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.642.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.642.png new file mode 100644 index 00000000..b19114b3 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.642.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.643.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.643.png new file mode 100644 index 00000000..748523e8 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.643.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.644.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.644.png new file mode 100644 index 00000000..aa96dd1f Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.644.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.645.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.645.png new file mode 100644 index 00000000..f88daeea Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.645.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.646.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.646.png new file mode 100644 index 00000000..4c77daaf Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.646.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.647.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.647.png new file mode 100644 index 00000000..87a56a87 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.647.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.648.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.648.png new file mode 100644 index 00000000..7847f5e8 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.648.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.649.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.649.png new file mode 100644 index 00000000..6c1428bb Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.649.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.65.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.65.png new file mode 100644 index 00000000..636049d8 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.65.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.650.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.650.png new file mode 100644 index 00000000..dc71c033 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.650.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.651.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.651.png new file mode 100644 index 00000000..e653ab18 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.651.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.652.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.652.png new file mode 100644 index 00000000..6a6ce704 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.652.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.653.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.653.png new file mode 100644 index 00000000..c90cc3d9 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.653.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.654.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.654.png new file mode 100644 index 00000000..432c6913 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.654.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.655.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.655.png new file mode 100644 index 00000000..34e5ceab Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.655.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.656.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.656.png new file mode 100644 index 00000000..4b4b7f83 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.656.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.657.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.657.png new file mode 100644 index 00000000..5d0997ef Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.657.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.658.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.658.png new file mode 100644 index 00000000..2f8f58e6 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.658.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.659.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.659.png new file mode 100644 index 00000000..c843773c Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.659.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.66.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.66.png new file mode 100644 index 00000000..9f8e7bd4 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.66.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.660.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.660.png new file mode 100644 index 00000000..ada3168c Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.660.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.661.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.661.png new file mode 100644 index 00000000..d1d91f35 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.661.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.662.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.662.png new file mode 100644 index 00000000..c382d99a Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.662.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.663.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.663.png new file mode 100644 index 00000000..636049d8 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.663.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.664.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.664.png new file mode 100644 index 00000000..9f8e7bd4 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.664.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.665.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.665.png new file mode 100644 index 00000000..78d8a6ef Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.665.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.666.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.666.png new file mode 100644 index 00000000..fcac3a1d Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.666.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.667.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.667.png new file mode 100644 index 00000000..52256207 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.667.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.668.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.668.png new file mode 100644 index 00000000..cdcc0969 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.668.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.669.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.669.png new file mode 100644 index 00000000..0fe8e489 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.669.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.67.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.67.png new file mode 100644 index 00000000..78d8a6ef Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.67.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.670.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.670.png new file mode 100644 index 00000000..94eb0568 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.670.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.671.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.671.png new file mode 100644 index 00000000..ca37d7b3 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.671.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.672.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.672.png new file mode 100644 index 00000000..1a969083 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.672.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.673.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.673.png new file mode 100644 index 00000000..c1f2c676 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.673.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.674.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.674.png new file mode 100644 index 00000000..620dff45 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.674.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.675.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.675.png new file mode 100644 index 00000000..34e93eb8 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.675.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.676.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.676.png new file mode 100644 index 00000000..e71f287e Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.676.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.677.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.677.png new file mode 100644 index 00000000..49253dd6 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.677.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.678.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.678.png new file mode 100644 index 00000000..66badfdb Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.678.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.679.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.679.png new file mode 100644 index 00000000..b19114b3 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.679.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.68.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.68.png new file mode 100644 index 00000000..fcac3a1d Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.68.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.680.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.680.png new file mode 100644 index 00000000..748523e8 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.680.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.681.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.681.png new file mode 100644 index 00000000..aa96dd1f Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.681.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.682.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.682.png new file mode 100644 index 00000000..f88daeea Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.682.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.683.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.683.png new file mode 100644 index 00000000..4c77daaf Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.683.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.684.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.684.png new file mode 100644 index 00000000..87a56a87 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.684.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.685.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.685.png new file mode 100644 index 00000000..7847f5e8 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.685.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.686.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.686.png new file mode 100644 index 00000000..6c1428bb Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.686.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.687.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.687.png new file mode 100644 index 00000000..dc71c033 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.687.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.688.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.688.png new file mode 100644 index 00000000..e653ab18 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.688.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.689.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.689.png new file mode 100644 index 00000000..6a6ce704 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.689.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.69.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.69.png new file mode 100644 index 00000000..52256207 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.69.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.690.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.690.png new file mode 100644 index 00000000..995bb96e Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.690.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.691.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.691.png new file mode 100644 index 00000000..c90cc3d9 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.691.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.692.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.692.png new file mode 100644 index 00000000..432c6913 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.692.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.693.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.693.png new file mode 100644 index 00000000..34e5ceab Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.693.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.694.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.694.png new file mode 100644 index 00000000..4b4b7f83 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.694.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.695.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.695.png new file mode 100644 index 00000000..5d0997ef Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.695.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.696.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.696.png new file mode 100644 index 00000000..2f8f58e6 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.696.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.697.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.697.png new file mode 100644 index 00000000..c843773c Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.697.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.698.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.698.png new file mode 100644 index 00000000..ada3168c Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.698.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.699.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.699.png new file mode 100644 index 00000000..d1d91f35 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.699.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.70.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.70.png new file mode 100644 index 00000000..c90cc3d9 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.70.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.700.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.700.png new file mode 100644 index 00000000..c382d99a Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.700.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.701.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.701.png new file mode 100644 index 00000000..636049d8 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.701.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.702.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.702.png new file mode 100644 index 00000000..9f8e7bd4 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.702.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.703.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.703.png new file mode 100644 index 00000000..78d8a6ef Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.703.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.704.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.704.png new file mode 100644 index 00000000..fcac3a1d Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.704.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.705.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.705.png new file mode 100644 index 00000000..52256207 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.705.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.706.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.706.png new file mode 100644 index 00000000..cdcc0969 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.706.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.707.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.707.png new file mode 100644 index 00000000..0fe8e489 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.707.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.708.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.708.png new file mode 100644 index 00000000..94eb0568 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.708.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.709.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.709.png new file mode 100644 index 00000000..ca37d7b3 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.709.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.71.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.71.png new file mode 100644 index 00000000..432c6913 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.71.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.710.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.710.png new file mode 100644 index 00000000..1a969083 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.710.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.711.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.711.png new file mode 100644 index 00000000..c1f2c676 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.711.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.712.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.712.png new file mode 100644 index 00000000..620dff45 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.712.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.713.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.713.png new file mode 100644 index 00000000..34e93eb8 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.713.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.714.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.714.png new file mode 100644 index 00000000..e71f287e Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.714.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.715.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.715.png new file mode 100644 index 00000000..49253dd6 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.715.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.716.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.716.png new file mode 100644 index 00000000..66badfdb Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.716.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.717.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.717.png new file mode 100644 index 00000000..b19114b3 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.717.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.718.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.718.png new file mode 100644 index 00000000..748523e8 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.718.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.719.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.719.png new file mode 100644 index 00000000..aa96dd1f Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.719.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.72.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.72.png new file mode 100644 index 00000000..34e5ceab Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.72.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.720.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.720.png new file mode 100644 index 00000000..f88daeea Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.720.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.721.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.721.png new file mode 100644 index 00000000..4c77daaf Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.721.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.722.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.722.png new file mode 100644 index 00000000..87a56a87 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.722.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.723.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.723.png new file mode 100644 index 00000000..7847f5e8 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.723.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.724.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.724.png new file mode 100644 index 00000000..6c1428bb Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.724.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.725.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.725.png new file mode 100644 index 00000000..dc71c033 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.725.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.726.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.726.png new file mode 100644 index 00000000..e653ab18 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.726.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.727.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.727.png new file mode 100644 index 00000000..6a6ce704 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.727.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.728.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.728.png new file mode 100644 index 00000000..995bb96e Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.728.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.729.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.729.png new file mode 100644 index 00000000..405f78a7 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.729.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.73.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.73.png new file mode 100644 index 00000000..4b4b7f83 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.73.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.730.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.730.png new file mode 100644 index 00000000..c90cc3d9 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.730.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.731.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.731.png new file mode 100644 index 00000000..432c6913 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.731.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.732.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.732.png new file mode 100644 index 00000000..34e5ceab Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.732.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.733.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.733.png new file mode 100644 index 00000000..4b4b7f83 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.733.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.734.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.734.png new file mode 100644 index 00000000..5d0997ef Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.734.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.735.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.735.png new file mode 100644 index 00000000..2f8f58e6 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.735.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.736.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.736.png new file mode 100644 index 00000000..c843773c Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.736.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.737.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.737.png new file mode 100644 index 00000000..8e0d2a37 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.737.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.738.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.738.png new file mode 100644 index 00000000..e685fb90 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.738.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.739.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.739.png new file mode 100644 index 00000000..65dba8b9 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.739.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.74.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.74.png new file mode 100644 index 00000000..5d0997ef Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.74.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.740.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.740.png new file mode 100644 index 00000000..c90cc3d9 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.740.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.741.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.741.png new file mode 100644 index 00000000..432c6913 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.741.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.742.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.742.png new file mode 100644 index 00000000..34e5ceab Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.742.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.743.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.743.png new file mode 100644 index 00000000..4b4b7f83 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.743.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.744.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.744.png new file mode 100644 index 00000000..5d0997ef Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.744.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.745.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.745.png new file mode 100644 index 00000000..2f8f58e6 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.745.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.746.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.746.png new file mode 100644 index 00000000..c843773c Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.746.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.75.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.75.png new file mode 100644 index 00000000..2f8f58e6 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.75.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.76.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.76.png new file mode 100644 index 00000000..c843773c Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.76.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.77.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.77.png new file mode 100644 index 00000000..ada3168c Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.77.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.78.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.78.png new file mode 100644 index 00000000..d1d91f35 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.78.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.79.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.79.png new file mode 100644 index 00000000..c382d99a Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.79.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.80.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.80.png new file mode 100644 index 00000000..636049d8 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.80.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.81.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.81.png new file mode 100644 index 00000000..9f8e7bd4 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.81.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.82.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.82.png new file mode 100644 index 00000000..78d8a6ef Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.82.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.83.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.83.png new file mode 100644 index 00000000..fcac3a1d Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.83.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.84.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.84.png new file mode 100644 index 00000000..52256207 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.84.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.85.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.85.png new file mode 100644 index 00000000..cdcc0969 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.85.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.86.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.86.png new file mode 100644 index 00000000..c90cc3d9 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.86.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.87.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.87.png new file mode 100644 index 00000000..432c6913 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.87.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.88.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.88.png new file mode 100644 index 00000000..34e5ceab Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.88.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.89.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.89.png new file mode 100644 index 00000000..4b4b7f83 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.89.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.90.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.90.png new file mode 100644 index 00000000..5d0997ef Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.90.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.91.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.91.png new file mode 100644 index 00000000..2f8f58e6 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.91.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.92.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.92.png new file mode 100644 index 00000000..c843773c Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.92.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.93.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.93.png new file mode 100644 index 00000000..ada3168c Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.93.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.94.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.94.png new file mode 100644 index 00000000..d1d91f35 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.94.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.95.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.95.png new file mode 100644 index 00000000..c382d99a Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.95.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.96.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.96.png new file mode 100644 index 00000000..636049d8 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.96.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.97.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.97.png new file mode 100644 index 00000000..9f8e7bd4 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.97.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.98.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.98.png new file mode 100644 index 00000000..78d8a6ef Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.98.png differ diff --git a/test-integration/snapshots/signTransactionOtherEosio/nanox.99.png b/test-integration/snapshots/signTransactionOtherEosio/nanox.99.png new file mode 100644 index 00000000..fcac3a1d Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherEosio/nanox.99.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanos.01.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanos.01.png new file mode 100644 index 00000000..a0f9b734 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanos.01.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanos.02.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanos.02.png new file mode 100644 index 00000000..076a821e Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanos.02.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanos.03.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanos.03.png new file mode 100644 index 00000000..17af8945 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanos.03.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanos.04.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanos.04.png new file mode 100644 index 00000000..961c0c11 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanos.04.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanos.05.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanos.05.png new file mode 100644 index 00000000..b42d7b08 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanos.05.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanos.06.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanos.06.png new file mode 100644 index 00000000..d1eac39e Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanos.06.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanos.07.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanos.07.png new file mode 100644 index 00000000..c9de0604 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanos.07.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanos.08.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanos.08.png new file mode 100644 index 00000000..a0f9b734 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanos.08.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanos.09.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanos.09.png new file mode 100644 index 00000000..076a821e Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanos.09.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanos.10.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanos.10.png new file mode 100644 index 00000000..d1cb2952 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanos.10.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanos.11.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanos.11.png new file mode 100644 index 00000000..961c0c11 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanos.11.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanos.12.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanos.12.png new file mode 100644 index 00000000..04721f8f Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanos.12.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanos.13.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanos.13.png new file mode 100644 index 00000000..b42d7b08 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanos.13.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanos.14.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanos.14.png new file mode 100644 index 00000000..d1eac39e Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanos.14.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanos.15.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanos.15.png new file mode 100644 index 00000000..c9de0604 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanos.15.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanos.16.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanos.16.png new file mode 100644 index 00000000..a0f9b734 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanos.16.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanos.17.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanos.17.png new file mode 100644 index 00000000..076a821e Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanos.17.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanos.18.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanos.18.png new file mode 100644 index 00000000..9d69500c Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanos.18.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanos.19.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanos.19.png new file mode 100644 index 00000000..961c0c11 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanos.19.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanos.20.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanos.20.png new file mode 100644 index 00000000..a541e621 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanos.20.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanos.21.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanos.21.png new file mode 100644 index 00000000..b42d7b08 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanos.21.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanos.22.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanos.22.png new file mode 100644 index 00000000..d1eac39e Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanos.22.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanos.23.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanos.23.png new file mode 100644 index 00000000..c9de0604 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanos.23.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanos.24.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanos.24.png new file mode 100644 index 00000000..a0f9b734 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanos.24.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanos.25.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanos.25.png new file mode 100644 index 00000000..076a821e Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanos.25.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanos.26.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanos.26.png new file mode 100644 index 00000000..2e873ea2 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanos.26.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanos.27.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanos.27.png new file mode 100644 index 00000000..961c0c11 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanos.27.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanos.28.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanos.28.png new file mode 100644 index 00000000..a541e621 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanos.28.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanos.29.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanos.29.png new file mode 100644 index 00000000..b42d7b08 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanos.29.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanos.30.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanos.30.png new file mode 100644 index 00000000..d1eac39e Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanos.30.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanos.31.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanos.31.png new file mode 100644 index 00000000..c9de0604 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanos.31.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanos.32.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanos.32.png new file mode 100644 index 00000000..a0f9b734 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanos.32.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanos.33.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanos.33.png new file mode 100644 index 00000000..06140342 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanos.33.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanos.34.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanos.34.png new file mode 100644 index 00000000..49420c18 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanos.34.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanos.35.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanos.35.png new file mode 100644 index 00000000..57c9a65e Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanos.35.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanos.36.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanos.36.png new file mode 100644 index 00000000..a541e621 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanos.36.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanos.37.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanos.37.png new file mode 100644 index 00000000..b42d7b08 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanos.37.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanos.38.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanos.38.png new file mode 100644 index 00000000..d1eac39e Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanos.38.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanos.39.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanos.39.png new file mode 100644 index 00000000..c9de0604 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanos.39.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanos.40.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanos.40.png new file mode 100644 index 00000000..a0f9b734 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanos.40.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanos.41.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanos.41.png new file mode 100644 index 00000000..06140342 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanos.41.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanos.42.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanos.42.png new file mode 100644 index 00000000..5bb45ccc Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanos.42.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanos.43.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanos.43.png new file mode 100644 index 00000000..57c9a65e Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanos.43.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanos.44.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanos.44.png new file mode 100644 index 00000000..b42d7b08 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanos.44.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanos.45.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanos.45.png new file mode 100644 index 00000000..d1eac39e Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanos.45.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanos.46.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanos.46.png new file mode 100644 index 00000000..c9de0604 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanos.46.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanos.47.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanos.47.png new file mode 100644 index 00000000..a0f9b734 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanos.47.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanos.48.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanos.48.png new file mode 100644 index 00000000..06140342 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanos.48.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanos.49.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanos.49.png new file mode 100644 index 00000000..dab5990b Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanos.49.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanos.50.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanos.50.png new file mode 100644 index 00000000..57c9a65e Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanos.50.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanos.51.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanos.51.png new file mode 100644 index 00000000..fd068f97 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanos.51.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanos.52.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanos.52.png new file mode 100644 index 00000000..b42d7b08 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanos.52.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanos.53.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanos.53.png new file mode 100644 index 00000000..d1eac39e Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanos.53.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanos.54.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanos.54.png new file mode 100644 index 00000000..c9de0604 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanos.54.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanos.55.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanos.55.png new file mode 100644 index 00000000..a0f9b734 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanos.55.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanos.56.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanos.56.png new file mode 100644 index 00000000..076a821e Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanos.56.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanos.57.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanos.57.png new file mode 100644 index 00000000..dab5990b Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanos.57.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanos.58.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanos.58.png new file mode 100644 index 00000000..57c9a65e Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanos.58.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanos.59.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanos.59.png new file mode 100644 index 00000000..9f077335 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanos.59.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanos.60.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanos.60.png new file mode 100644 index 00000000..b42d7b08 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanos.60.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanos.61.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanos.61.png new file mode 100644 index 00000000..d1eac39e Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanos.61.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanos.62.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanos.62.png new file mode 100644 index 00000000..c9de0604 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanos.62.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanos.63.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanos.63.png new file mode 100644 index 00000000..a0f9b734 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanos.63.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanos.64.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanos.64.png new file mode 100644 index 00000000..076a821e Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanos.64.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanos.65.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanos.65.png new file mode 100644 index 00000000..e4f0d722 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanos.65.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanos.66.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanos.66.png new file mode 100644 index 00000000..57c9a65e Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanos.66.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanos.67.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanos.67.png new file mode 100644 index 00000000..e0fd07fe Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanos.67.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanos.68.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanos.68.png new file mode 100644 index 00000000..b42d7b08 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanos.68.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanos.69.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanos.69.png new file mode 100644 index 00000000..d1eac39e Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanos.69.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanos.70.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanos.70.png new file mode 100644 index 00000000..c9de0604 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanos.70.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanos.71.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanos.71.png new file mode 100644 index 00000000..a0f9b734 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanos.71.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanos.72.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanos.72.png new file mode 100644 index 00000000..076a821e Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanos.72.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanos.73.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanos.73.png new file mode 100644 index 00000000..23819998 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanos.73.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanos.74.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanos.74.png new file mode 100644 index 00000000..961c0c11 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanos.74.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanos.75.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanos.75.png new file mode 100644 index 00000000..b42d7b08 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanos.75.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanos.76.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanos.76.png new file mode 100644 index 00000000..d1eac39e Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanos.76.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanos.77.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanos.77.png new file mode 100644 index 00000000..c9de0604 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanos.77.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanos.78.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanos.78.png new file mode 100644 index 00000000..a0f9b734 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanos.78.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.01.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.01.png new file mode 100644 index 00000000..a7a87405 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.01.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.02.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.02.png new file mode 100644 index 00000000..ada3168c Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.02.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.03.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.03.png new file mode 100644 index 00000000..cad4e28f Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.03.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.04.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.04.png new file mode 100644 index 00000000..c1dd7f06 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.04.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.05.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.05.png new file mode 100644 index 00000000..f9daa857 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.05.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.06.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.06.png new file mode 100644 index 00000000..34e5ceab Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.06.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.07.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.07.png new file mode 100644 index 00000000..6f7fe29c Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.07.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.08.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.08.png new file mode 100644 index 00000000..8ac15c6d Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.08.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.09.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.09.png new file mode 100644 index 00000000..525864b4 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.09.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.10.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.10.png new file mode 100644 index 00000000..a7a87405 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.10.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.11.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.11.png new file mode 100644 index 00000000..ada3168c Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.11.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.12.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.12.png new file mode 100644 index 00000000..a93fb6b8 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.12.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.13.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.13.png new file mode 100644 index 00000000..c1dd7f06 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.13.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.14.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.14.png new file mode 100644 index 00000000..f9daa857 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.14.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.15.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.15.png new file mode 100644 index 00000000..11826284 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.15.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.16.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.16.png new file mode 100644 index 00000000..34e5ceab Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.16.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.17.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.17.png new file mode 100644 index 00000000..6f7fe29c Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.17.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.18.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.18.png new file mode 100644 index 00000000..8ac15c6d Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.18.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.19.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.19.png new file mode 100644 index 00000000..525864b4 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.19.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.20.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.20.png new file mode 100644 index 00000000..a7a87405 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.20.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.21.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.21.png new file mode 100644 index 00000000..ada3168c Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.21.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.22.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.22.png new file mode 100644 index 00000000..0a3d7407 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.22.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.23.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.23.png new file mode 100644 index 00000000..c1dd7f06 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.23.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.24.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.24.png new file mode 100644 index 00000000..f9daa857 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.24.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.25.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.25.png new file mode 100644 index 00000000..ff979c46 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.25.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.26.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.26.png new file mode 100644 index 00000000..34e5ceab Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.26.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.27.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.27.png new file mode 100644 index 00000000..6f7fe29c Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.27.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.28.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.28.png new file mode 100644 index 00000000..8ac15c6d Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.28.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.29.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.29.png new file mode 100644 index 00000000..525864b4 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.29.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.30.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.30.png new file mode 100644 index 00000000..a7a87405 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.30.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.31.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.31.png new file mode 100644 index 00000000..ada3168c Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.31.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.32.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.32.png new file mode 100644 index 00000000..c9e3ce6c Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.32.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.33.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.33.png new file mode 100644 index 00000000..c1dd7f06 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.33.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.34.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.34.png new file mode 100644 index 00000000..f9daa857 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.34.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.35.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.35.png new file mode 100644 index 00000000..ff979c46 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.35.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.36.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.36.png new file mode 100644 index 00000000..34e5ceab Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.36.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.37.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.37.png new file mode 100644 index 00000000..6f7fe29c Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.37.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.38.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.38.png new file mode 100644 index 00000000..8ac15c6d Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.38.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.39.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.39.png new file mode 100644 index 00000000..525864b4 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.39.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.40.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.40.png new file mode 100644 index 00000000..a7a87405 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.40.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.41.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.41.png new file mode 100644 index 00000000..8e0d2a37 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.41.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.42.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.42.png new file mode 100644 index 00000000..e0a6d236 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.42.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.43.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.43.png new file mode 100644 index 00000000..dcac12e7 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.43.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.44.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.44.png new file mode 100644 index 00000000..ff979c46 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.44.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.45.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.45.png new file mode 100644 index 00000000..34e5ceab Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.45.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.46.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.46.png new file mode 100644 index 00000000..6f7fe29c Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.46.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.47.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.47.png new file mode 100644 index 00000000..8ac15c6d Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.47.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.48.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.48.png new file mode 100644 index 00000000..525864b4 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.48.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.49.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.49.png new file mode 100644 index 00000000..a7a87405 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.49.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.50.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.50.png new file mode 100644 index 00000000..8e0d2a37 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.50.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.51.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.51.png new file mode 100644 index 00000000..754a872e Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.51.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.52.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.52.png new file mode 100644 index 00000000..dcac12e7 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.52.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.53.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.53.png new file mode 100644 index 00000000..34e5ceab Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.53.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.54.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.54.png new file mode 100644 index 00000000..6f7fe29c Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.54.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.55.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.55.png new file mode 100644 index 00000000..8ac15c6d Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.55.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.56.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.56.png new file mode 100644 index 00000000..525864b4 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.56.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.57.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.57.png new file mode 100644 index 00000000..a7a87405 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.57.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.58.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.58.png new file mode 100644 index 00000000..8e0d2a37 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.58.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.59.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.59.png new file mode 100644 index 00000000..1cf8cb52 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.59.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.60.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.60.png new file mode 100644 index 00000000..dcac12e7 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.60.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.61.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.61.png new file mode 100644 index 00000000..1fbdbeac Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.61.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.62.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.62.png new file mode 100644 index 00000000..34e5ceab Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.62.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.63.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.63.png new file mode 100644 index 00000000..6f7fe29c Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.63.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.64.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.64.png new file mode 100644 index 00000000..8ac15c6d Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.64.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.65.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.65.png new file mode 100644 index 00000000..525864b4 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.65.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.66.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.66.png new file mode 100644 index 00000000..a7a87405 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.66.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.67.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.67.png new file mode 100644 index 00000000..ada3168c Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.67.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.68.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.68.png new file mode 100644 index 00000000..1cf8cb52 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.68.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.69.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.69.png new file mode 100644 index 00000000..dcac12e7 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.69.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.70.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.70.png new file mode 100644 index 00000000..1596f99b Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.70.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.71.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.71.png new file mode 100644 index 00000000..34e5ceab Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.71.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.72.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.72.png new file mode 100644 index 00000000..6f7fe29c Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.72.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.73.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.73.png new file mode 100644 index 00000000..8ac15c6d Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.73.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.74.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.74.png new file mode 100644 index 00000000..525864b4 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.74.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.75.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.75.png new file mode 100644 index 00000000..a7a87405 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.75.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.76.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.76.png new file mode 100644 index 00000000..ada3168c Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.76.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.77.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.77.png new file mode 100644 index 00000000..b2b5eb09 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.77.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.78.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.78.png new file mode 100644 index 00000000..dcac12e7 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.78.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.79.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.79.png new file mode 100644 index 00000000..e3ad063f Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.79.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.80.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.80.png new file mode 100644 index 00000000..34e5ceab Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.80.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.81.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.81.png new file mode 100644 index 00000000..6f7fe29c Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.81.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.82.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.82.png new file mode 100644 index 00000000..8ac15c6d Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.82.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.83.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.83.png new file mode 100644 index 00000000..525864b4 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.83.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.84.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.84.png new file mode 100644 index 00000000..a7a87405 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.84.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.85.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.85.png new file mode 100644 index 00000000..ada3168c Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.85.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.86.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.86.png new file mode 100644 index 00000000..658ce545 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.86.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.87.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.87.png new file mode 100644 index 00000000..c1dd7f06 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.87.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.88.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.88.png new file mode 100644 index 00000000..f9daa857 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.88.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.89.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.89.png new file mode 100644 index 00000000..34e5ceab Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.89.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.90.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.90.png new file mode 100644 index 00000000..6f7fe29c Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.90.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.91.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.91.png new file mode 100644 index 00000000..8ac15c6d Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.91.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.92.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.92.png new file mode 100644 index 00000000..525864b4 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.92.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.93.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.93.png new file mode 100644 index 00000000..a7a87405 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanosp.93.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanox.01.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanox.01.png new file mode 100644 index 00000000..c843773c Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanox.01.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanox.02.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanox.02.png new file mode 100644 index 00000000..ada3168c Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanox.02.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanox.03.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanox.03.png new file mode 100644 index 00000000..60bb1c9c Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanox.03.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanox.04.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanox.04.png new file mode 100644 index 00000000..c90cc3d9 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanox.04.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanox.05.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanox.05.png new file mode 100644 index 00000000..432c6913 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanox.05.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanox.06.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanox.06.png new file mode 100644 index 00000000..34e5ceab Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanox.06.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanox.07.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanox.07.png new file mode 100644 index 00000000..4b4b7f83 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanox.07.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanox.08.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanox.08.png new file mode 100644 index 00000000..5d0997ef Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanox.08.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanox.09.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanox.09.png new file mode 100644 index 00000000..2f8f58e6 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanox.09.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanox.10.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanox.10.png new file mode 100644 index 00000000..c843773c Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanox.10.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanox.11.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanox.11.png new file mode 100644 index 00000000..ada3168c Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanox.11.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanox.12.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanox.12.png new file mode 100644 index 00000000..a93fb6b8 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanox.12.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanox.13.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanox.13.png new file mode 100644 index 00000000..c90cc3d9 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanox.13.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanox.14.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanox.14.png new file mode 100644 index 00000000..432c6913 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanox.14.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanox.15.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanox.15.png new file mode 100644 index 00000000..11826284 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanox.15.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanox.16.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanox.16.png new file mode 100644 index 00000000..34e5ceab Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanox.16.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanox.17.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanox.17.png new file mode 100644 index 00000000..4b4b7f83 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanox.17.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanox.18.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanox.18.png new file mode 100644 index 00000000..5d0997ef Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanox.18.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanox.19.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanox.19.png new file mode 100644 index 00000000..2f8f58e6 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanox.19.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanox.20.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanox.20.png new file mode 100644 index 00000000..c843773c Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanox.20.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanox.21.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanox.21.png new file mode 100644 index 00000000..ada3168c Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanox.21.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanox.22.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanox.22.png new file mode 100644 index 00000000..0a3d7407 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanox.22.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanox.23.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanox.23.png new file mode 100644 index 00000000..c90cc3d9 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanox.23.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanox.24.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanox.24.png new file mode 100644 index 00000000..432c6913 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanox.24.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanox.25.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanox.25.png new file mode 100644 index 00000000..11cbf159 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanox.25.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanox.26.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanox.26.png new file mode 100644 index 00000000..34e5ceab Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanox.26.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanox.27.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanox.27.png new file mode 100644 index 00000000..4b4b7f83 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanox.27.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanox.28.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanox.28.png new file mode 100644 index 00000000..5d0997ef Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanox.28.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanox.29.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanox.29.png new file mode 100644 index 00000000..2f8f58e6 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanox.29.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanox.30.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanox.30.png new file mode 100644 index 00000000..c843773c Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanox.30.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanox.31.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanox.31.png new file mode 100644 index 00000000..ada3168c Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanox.31.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanox.32.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanox.32.png new file mode 100644 index 00000000..c9e3ce6c Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanox.32.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanox.33.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanox.33.png new file mode 100644 index 00000000..c90cc3d9 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanox.33.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanox.34.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanox.34.png new file mode 100644 index 00000000..432c6913 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanox.34.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanox.35.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanox.35.png new file mode 100644 index 00000000..11cbf159 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanox.35.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanox.36.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanox.36.png new file mode 100644 index 00000000..34e5ceab Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanox.36.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanox.37.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanox.37.png new file mode 100644 index 00000000..4b4b7f83 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanox.37.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanox.38.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanox.38.png new file mode 100644 index 00000000..5d0997ef Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanox.38.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanox.39.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanox.39.png new file mode 100644 index 00000000..2f8f58e6 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanox.39.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanox.40.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanox.40.png new file mode 100644 index 00000000..c843773c Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanox.40.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanox.41.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanox.41.png new file mode 100644 index 00000000..8e0d2a37 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanox.41.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanox.42.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanox.42.png new file mode 100644 index 00000000..e0a6d236 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanox.42.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanox.43.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanox.43.png new file mode 100644 index 00000000..dcac12e7 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanox.43.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanox.44.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanox.44.png new file mode 100644 index 00000000..11cbf159 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanox.44.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanox.45.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanox.45.png new file mode 100644 index 00000000..34e5ceab Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanox.45.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanox.46.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanox.46.png new file mode 100644 index 00000000..4b4b7f83 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanox.46.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanox.47.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanox.47.png new file mode 100644 index 00000000..5d0997ef Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanox.47.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanox.48.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanox.48.png new file mode 100644 index 00000000..2f8f58e6 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanox.48.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanox.49.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanox.49.png new file mode 100644 index 00000000..c843773c Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanox.49.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanox.50.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanox.50.png new file mode 100644 index 00000000..8e0d2a37 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanox.50.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanox.51.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanox.51.png new file mode 100644 index 00000000..754a872e Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanox.51.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanox.52.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanox.52.png new file mode 100644 index 00000000..dcac12e7 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanox.52.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanox.53.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanox.53.png new file mode 100644 index 00000000..34e5ceab Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanox.53.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanox.54.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanox.54.png new file mode 100644 index 00000000..4b4b7f83 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanox.54.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanox.55.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanox.55.png new file mode 100644 index 00000000..5d0997ef Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanox.55.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanox.56.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanox.56.png new file mode 100644 index 00000000..2f8f58e6 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanox.56.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanox.57.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanox.57.png new file mode 100644 index 00000000..c843773c Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanox.57.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanox.58.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanox.58.png new file mode 100644 index 00000000..8e0d2a37 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanox.58.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanox.59.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanox.59.png new file mode 100644 index 00000000..4c81460f Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanox.59.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanox.60.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanox.60.png new file mode 100644 index 00000000..dcac12e7 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanox.60.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanox.61.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanox.61.png new file mode 100644 index 00000000..1fbdbeac Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanox.61.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanox.62.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanox.62.png new file mode 100644 index 00000000..34e5ceab Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanox.62.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanox.63.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanox.63.png new file mode 100644 index 00000000..4b4b7f83 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanox.63.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanox.64.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanox.64.png new file mode 100644 index 00000000..5d0997ef Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanox.64.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanox.65.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanox.65.png new file mode 100644 index 00000000..2f8f58e6 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanox.65.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanox.66.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanox.66.png new file mode 100644 index 00000000..c843773c Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanox.66.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanox.67.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanox.67.png new file mode 100644 index 00000000..ada3168c Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanox.67.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanox.68.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanox.68.png new file mode 100644 index 00000000..4c81460f Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanox.68.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanox.69.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanox.69.png new file mode 100644 index 00000000..dcac12e7 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanox.69.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanox.70.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanox.70.png new file mode 100644 index 00000000..1596f99b Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanox.70.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanox.71.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanox.71.png new file mode 100644 index 00000000..34e5ceab Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanox.71.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanox.72.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanox.72.png new file mode 100644 index 00000000..4b4b7f83 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanox.72.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanox.73.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanox.73.png new file mode 100644 index 00000000..5d0997ef Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanox.73.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanox.74.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanox.74.png new file mode 100644 index 00000000..2f8f58e6 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanox.74.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanox.75.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanox.75.png new file mode 100644 index 00000000..c843773c Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanox.75.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanox.76.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanox.76.png new file mode 100644 index 00000000..ada3168c Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanox.76.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanox.77.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanox.77.png new file mode 100644 index 00000000..b2b5eb09 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanox.77.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanox.78.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanox.78.png new file mode 100644 index 00000000..dcac12e7 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanox.78.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanox.79.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanox.79.png new file mode 100644 index 00000000..b65d7b38 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanox.79.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanox.80.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanox.80.png new file mode 100644 index 00000000..34e5ceab Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanox.80.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanox.81.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanox.81.png new file mode 100644 index 00000000..4b4b7f83 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanox.81.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanox.82.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanox.82.png new file mode 100644 index 00000000..5d0997ef Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanox.82.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanox.83.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanox.83.png new file mode 100644 index 00000000..2f8f58e6 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanox.83.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanox.84.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanox.84.png new file mode 100644 index 00000000..c843773c Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanox.84.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanox.85.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanox.85.png new file mode 100644 index 00000000..ada3168c Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanox.85.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanox.86.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanox.86.png new file mode 100644 index 00000000..658ce545 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanox.86.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanox.87.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanox.87.png new file mode 100644 index 00000000..c90cc3d9 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanox.87.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanox.88.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanox.88.png new file mode 100644 index 00000000..432c6913 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanox.88.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanox.89.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanox.89.png new file mode 100644 index 00000000..34e5ceab Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanox.89.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanox.90.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanox.90.png new file mode 100644 index 00000000..4b4b7f83 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanox.90.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanox.91.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanox.91.png new file mode 100644 index 00000000..5d0997ef Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanox.91.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanox.92.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanox.92.png new file mode 100644 index 00000000..2f8f58e6 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanox.92.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioAddress/nanox.93.png b/test-integration/snapshots/signTransactionOtherFioAddress/nanox.93.png new file mode 100644 index 00000000..c843773c Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioAddress/nanox.93.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioOracle/nanos.01.png b/test-integration/snapshots/signTransactionOtherFioOracle/nanos.01.png new file mode 100644 index 00000000..a0f9b734 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioOracle/nanos.01.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioOracle/nanos.02.png b/test-integration/snapshots/signTransactionOtherFioOracle/nanos.02.png new file mode 100644 index 00000000..076a821e Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioOracle/nanos.02.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioOracle/nanos.03.png b/test-integration/snapshots/signTransactionOtherFioOracle/nanos.03.png new file mode 100644 index 00000000..2350f305 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioOracle/nanos.03.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioOracle/nanos.04.png b/test-integration/snapshots/signTransactionOtherFioOracle/nanos.04.png new file mode 100644 index 00000000..dde32cbe Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioOracle/nanos.04.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioOracle/nanos.05.png b/test-integration/snapshots/signTransactionOtherFioOracle/nanos.05.png new file mode 100644 index 00000000..c992df66 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioOracle/nanos.05.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioOracle/nanos.06.png b/test-integration/snapshots/signTransactionOtherFioOracle/nanos.06.png new file mode 100644 index 00000000..ac6ee425 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioOracle/nanos.06.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioOracle/nanos.07.png b/test-integration/snapshots/signTransactionOtherFioOracle/nanos.07.png new file mode 100644 index 00000000..b5038fa0 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioOracle/nanos.07.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioOracle/nanos.08.png b/test-integration/snapshots/signTransactionOtherFioOracle/nanos.08.png new file mode 100644 index 00000000..b42d7b08 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioOracle/nanos.08.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioOracle/nanos.09.png b/test-integration/snapshots/signTransactionOtherFioOracle/nanos.09.png new file mode 100644 index 00000000..d1eac39e Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioOracle/nanos.09.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioOracle/nanos.10.png b/test-integration/snapshots/signTransactionOtherFioOracle/nanos.10.png new file mode 100644 index 00000000..c9de0604 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioOracle/nanos.10.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioOracle/nanos.11.png b/test-integration/snapshots/signTransactionOtherFioOracle/nanos.11.png new file mode 100644 index 00000000..a0f9b734 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioOracle/nanos.11.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioOracle/nanos.12.png b/test-integration/snapshots/signTransactionOtherFioOracle/nanos.12.png new file mode 100644 index 00000000..06140342 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioOracle/nanos.12.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioOracle/nanos.13.png b/test-integration/snapshots/signTransactionOtherFioOracle/nanos.13.png new file mode 100644 index 00000000..241173de Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioOracle/nanos.13.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioOracle/nanos.14.png b/test-integration/snapshots/signTransactionOtherFioOracle/nanos.14.png new file mode 100644 index 00000000..69780ef1 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioOracle/nanos.14.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioOracle/nanos.15.png b/test-integration/snapshots/signTransactionOtherFioOracle/nanos.15.png new file mode 100644 index 00000000..c992df66 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioOracle/nanos.15.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioOracle/nanos.16.png b/test-integration/snapshots/signTransactionOtherFioOracle/nanos.16.png new file mode 100644 index 00000000..ac6ee425 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioOracle/nanos.16.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioOracle/nanos.17.png b/test-integration/snapshots/signTransactionOtherFioOracle/nanos.17.png new file mode 100644 index 00000000..b5038fa0 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioOracle/nanos.17.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioOracle/nanos.18.png b/test-integration/snapshots/signTransactionOtherFioOracle/nanos.18.png new file mode 100644 index 00000000..b42d7b08 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioOracle/nanos.18.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioOracle/nanos.19.png b/test-integration/snapshots/signTransactionOtherFioOracle/nanos.19.png new file mode 100644 index 00000000..d1eac39e Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioOracle/nanos.19.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioOracle/nanos.20.png b/test-integration/snapshots/signTransactionOtherFioOracle/nanos.20.png new file mode 100644 index 00000000..c9de0604 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioOracle/nanos.20.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioOracle/nanos.21.png b/test-integration/snapshots/signTransactionOtherFioOracle/nanos.21.png new file mode 100644 index 00000000..a0f9b734 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioOracle/nanos.21.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioOracle/nanosp.01.png b/test-integration/snapshots/signTransactionOtherFioOracle/nanosp.01.png new file mode 100644 index 00000000..a7a87405 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioOracle/nanosp.01.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioOracle/nanosp.02.png b/test-integration/snapshots/signTransactionOtherFioOracle/nanosp.02.png new file mode 100644 index 00000000..ada3168c Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioOracle/nanosp.02.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioOracle/nanosp.03.png b/test-integration/snapshots/signTransactionOtherFioOracle/nanosp.03.png new file mode 100644 index 00000000..0d36f53b Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioOracle/nanosp.03.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioOracle/nanosp.04.png b/test-integration/snapshots/signTransactionOtherFioOracle/nanosp.04.png new file mode 100644 index 00000000..e9df7a28 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioOracle/nanosp.04.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioOracle/nanosp.05.png b/test-integration/snapshots/signTransactionOtherFioOracle/nanosp.05.png new file mode 100644 index 00000000..d47cc63b Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioOracle/nanosp.05.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioOracle/nanosp.06.png b/test-integration/snapshots/signTransactionOtherFioOracle/nanosp.06.png new file mode 100644 index 00000000..f4dc8305 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioOracle/nanosp.06.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioOracle/nanosp.07.png b/test-integration/snapshots/signTransactionOtherFioOracle/nanosp.07.png new file mode 100644 index 00000000..fc9cc4e3 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioOracle/nanosp.07.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioOracle/nanosp.08.png b/test-integration/snapshots/signTransactionOtherFioOracle/nanosp.08.png new file mode 100644 index 00000000..34e5ceab Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioOracle/nanosp.08.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioOracle/nanosp.09.png b/test-integration/snapshots/signTransactionOtherFioOracle/nanosp.09.png new file mode 100644 index 00000000..6f7fe29c Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioOracle/nanosp.09.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioOracle/nanosp.10.png b/test-integration/snapshots/signTransactionOtherFioOracle/nanosp.10.png new file mode 100644 index 00000000..8ac15c6d Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioOracle/nanosp.10.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioOracle/nanosp.11.png b/test-integration/snapshots/signTransactionOtherFioOracle/nanosp.11.png new file mode 100644 index 00000000..525864b4 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioOracle/nanosp.11.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioOracle/nanosp.12.png b/test-integration/snapshots/signTransactionOtherFioOracle/nanosp.12.png new file mode 100644 index 00000000..a7a87405 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioOracle/nanosp.12.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioOracle/nanosp.13.png b/test-integration/snapshots/signTransactionOtherFioOracle/nanosp.13.png new file mode 100644 index 00000000..8e0d2a37 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioOracle/nanosp.13.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioOracle/nanosp.14.png b/test-integration/snapshots/signTransactionOtherFioOracle/nanosp.14.png new file mode 100644 index 00000000..9573f43e Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioOracle/nanosp.14.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioOracle/nanosp.15.png b/test-integration/snapshots/signTransactionOtherFioOracle/nanosp.15.png new file mode 100644 index 00000000..59e8b0d0 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioOracle/nanosp.15.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioOracle/nanosp.16.png b/test-integration/snapshots/signTransactionOtherFioOracle/nanosp.16.png new file mode 100644 index 00000000..d47cc63b Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioOracle/nanosp.16.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioOracle/nanosp.17.png b/test-integration/snapshots/signTransactionOtherFioOracle/nanosp.17.png new file mode 100644 index 00000000..f4dc8305 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioOracle/nanosp.17.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioOracle/nanosp.18.png b/test-integration/snapshots/signTransactionOtherFioOracle/nanosp.18.png new file mode 100644 index 00000000..fc9cc4e3 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioOracle/nanosp.18.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioOracle/nanosp.19.png b/test-integration/snapshots/signTransactionOtherFioOracle/nanosp.19.png new file mode 100644 index 00000000..34e5ceab Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioOracle/nanosp.19.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioOracle/nanosp.20.png b/test-integration/snapshots/signTransactionOtherFioOracle/nanosp.20.png new file mode 100644 index 00000000..6f7fe29c Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioOracle/nanosp.20.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioOracle/nanosp.21.png b/test-integration/snapshots/signTransactionOtherFioOracle/nanosp.21.png new file mode 100644 index 00000000..8ac15c6d Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioOracle/nanosp.21.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioOracle/nanosp.22.png b/test-integration/snapshots/signTransactionOtherFioOracle/nanosp.22.png new file mode 100644 index 00000000..525864b4 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioOracle/nanosp.22.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioOracle/nanosp.23.png b/test-integration/snapshots/signTransactionOtherFioOracle/nanosp.23.png new file mode 100644 index 00000000..a7a87405 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioOracle/nanosp.23.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioOracle/nanox.01.png b/test-integration/snapshots/signTransactionOtherFioOracle/nanox.01.png new file mode 100644 index 00000000..c843773c Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioOracle/nanox.01.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioOracle/nanox.02.png b/test-integration/snapshots/signTransactionOtherFioOracle/nanox.02.png new file mode 100644 index 00000000..ada3168c Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioOracle/nanox.02.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioOracle/nanox.03.png b/test-integration/snapshots/signTransactionOtherFioOracle/nanox.03.png new file mode 100644 index 00000000..0d36f53b Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioOracle/nanox.03.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioOracle/nanox.04.png b/test-integration/snapshots/signTransactionOtherFioOracle/nanox.04.png new file mode 100644 index 00000000..dc8f82fe Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioOracle/nanox.04.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioOracle/nanox.05.png b/test-integration/snapshots/signTransactionOtherFioOracle/nanox.05.png new file mode 100644 index 00000000..d47cc63b Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioOracle/nanox.05.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioOracle/nanox.06.png b/test-integration/snapshots/signTransactionOtherFioOracle/nanox.06.png new file mode 100644 index 00000000..b78cfcf4 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioOracle/nanox.06.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioOracle/nanox.07.png b/test-integration/snapshots/signTransactionOtherFioOracle/nanox.07.png new file mode 100644 index 00000000..fc9cc4e3 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioOracle/nanox.07.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioOracle/nanox.08.png b/test-integration/snapshots/signTransactionOtherFioOracle/nanox.08.png new file mode 100644 index 00000000..34e5ceab Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioOracle/nanox.08.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioOracle/nanox.09.png b/test-integration/snapshots/signTransactionOtherFioOracle/nanox.09.png new file mode 100644 index 00000000..4b4b7f83 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioOracle/nanox.09.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioOracle/nanox.10.png b/test-integration/snapshots/signTransactionOtherFioOracle/nanox.10.png new file mode 100644 index 00000000..5d0997ef Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioOracle/nanox.10.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioOracle/nanox.11.png b/test-integration/snapshots/signTransactionOtherFioOracle/nanox.11.png new file mode 100644 index 00000000..2f8f58e6 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioOracle/nanox.11.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioOracle/nanox.12.png b/test-integration/snapshots/signTransactionOtherFioOracle/nanox.12.png new file mode 100644 index 00000000..c843773c Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioOracle/nanox.12.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioOracle/nanox.13.png b/test-integration/snapshots/signTransactionOtherFioOracle/nanox.13.png new file mode 100644 index 00000000..8e0d2a37 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioOracle/nanox.13.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioOracle/nanox.14.png b/test-integration/snapshots/signTransactionOtherFioOracle/nanox.14.png new file mode 100644 index 00000000..9573f43e Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioOracle/nanox.14.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioOracle/nanox.15.png b/test-integration/snapshots/signTransactionOtherFioOracle/nanox.15.png new file mode 100644 index 00000000..59e8b0d0 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioOracle/nanox.15.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioOracle/nanox.16.png b/test-integration/snapshots/signTransactionOtherFioOracle/nanox.16.png new file mode 100644 index 00000000..d47cc63b Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioOracle/nanox.16.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioOracle/nanox.17.png b/test-integration/snapshots/signTransactionOtherFioOracle/nanox.17.png new file mode 100644 index 00000000..b78cfcf4 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioOracle/nanox.17.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioOracle/nanox.18.png b/test-integration/snapshots/signTransactionOtherFioOracle/nanox.18.png new file mode 100644 index 00000000..fc9cc4e3 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioOracle/nanox.18.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioOracle/nanox.19.png b/test-integration/snapshots/signTransactionOtherFioOracle/nanox.19.png new file mode 100644 index 00000000..34e5ceab Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioOracle/nanox.19.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioOracle/nanox.20.png b/test-integration/snapshots/signTransactionOtherFioOracle/nanox.20.png new file mode 100644 index 00000000..4b4b7f83 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioOracle/nanox.20.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioOracle/nanox.21.png b/test-integration/snapshots/signTransactionOtherFioOracle/nanox.21.png new file mode 100644 index 00000000..5d0997ef Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioOracle/nanox.21.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioOracle/nanox.22.png b/test-integration/snapshots/signTransactionOtherFioOracle/nanox.22.png new file mode 100644 index 00000000..2f8f58e6 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioOracle/nanox.22.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioOracle/nanox.23.png b/test-integration/snapshots/signTransactionOtherFioOracle/nanox.23.png new file mode 100644 index 00000000..c843773c Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioOracle/nanox.23.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioReqobt/nanos.01.png b/test-integration/snapshots/signTransactionOtherFioReqobt/nanos.01.png new file mode 100644 index 00000000..a0f9b734 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioReqobt/nanos.01.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioReqobt/nanos.02.png b/test-integration/snapshots/signTransactionOtherFioReqobt/nanos.02.png new file mode 100644 index 00000000..076a821e Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioReqobt/nanos.02.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioReqobt/nanos.03.png b/test-integration/snapshots/signTransactionOtherFioReqobt/nanos.03.png new file mode 100644 index 00000000..c30bd723 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioReqobt/nanos.03.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioReqobt/nanos.04.png b/test-integration/snapshots/signTransactionOtherFioReqobt/nanos.04.png new file mode 100644 index 00000000..f7df1097 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioReqobt/nanos.04.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioReqobt/nanos.05.png b/test-integration/snapshots/signTransactionOtherFioReqobt/nanos.05.png new file mode 100644 index 00000000..b42d7b08 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioReqobt/nanos.05.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioReqobt/nanos.06.png b/test-integration/snapshots/signTransactionOtherFioReqobt/nanos.06.png new file mode 100644 index 00000000..d1eac39e Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioReqobt/nanos.06.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioReqobt/nanos.07.png b/test-integration/snapshots/signTransactionOtherFioReqobt/nanos.07.png new file mode 100644 index 00000000..c9de0604 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioReqobt/nanos.07.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioReqobt/nanos.08.png b/test-integration/snapshots/signTransactionOtherFioReqobt/nanos.08.png new file mode 100644 index 00000000..a0f9b734 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioReqobt/nanos.08.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioReqobt/nanos.09.png b/test-integration/snapshots/signTransactionOtherFioReqobt/nanos.09.png new file mode 100644 index 00000000..06140342 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioReqobt/nanos.09.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioReqobt/nanos.10.png b/test-integration/snapshots/signTransactionOtherFioReqobt/nanos.10.png new file mode 100644 index 00000000..1209ba8c Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioReqobt/nanos.10.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioReqobt/nanos.11.png b/test-integration/snapshots/signTransactionOtherFioReqobt/nanos.11.png new file mode 100644 index 00000000..f7df1097 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioReqobt/nanos.11.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioReqobt/nanos.12.png b/test-integration/snapshots/signTransactionOtherFioReqobt/nanos.12.png new file mode 100644 index 00000000..b42d7b08 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioReqobt/nanos.12.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioReqobt/nanos.13.png b/test-integration/snapshots/signTransactionOtherFioReqobt/nanos.13.png new file mode 100644 index 00000000..d1eac39e Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioReqobt/nanos.13.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioReqobt/nanos.14.png b/test-integration/snapshots/signTransactionOtherFioReqobt/nanos.14.png new file mode 100644 index 00000000..c9de0604 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioReqobt/nanos.14.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioReqobt/nanos.15.png b/test-integration/snapshots/signTransactionOtherFioReqobt/nanos.15.png new file mode 100644 index 00000000..a0f9b734 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioReqobt/nanos.15.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioReqobt/nanosp.01.png b/test-integration/snapshots/signTransactionOtherFioReqobt/nanosp.01.png new file mode 100644 index 00000000..a7a87405 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioReqobt/nanosp.01.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioReqobt/nanosp.02.png b/test-integration/snapshots/signTransactionOtherFioReqobt/nanosp.02.png new file mode 100644 index 00000000..ada3168c Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioReqobt/nanosp.02.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioReqobt/nanosp.03.png b/test-integration/snapshots/signTransactionOtherFioReqobt/nanosp.03.png new file mode 100644 index 00000000..00cfdfe5 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioReqobt/nanosp.03.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioReqobt/nanosp.04.png b/test-integration/snapshots/signTransactionOtherFioReqobt/nanosp.04.png new file mode 100644 index 00000000..c1a66c3d Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioReqobt/nanosp.04.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioReqobt/nanosp.05.png b/test-integration/snapshots/signTransactionOtherFioReqobt/nanosp.05.png new file mode 100644 index 00000000..34e5ceab Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioReqobt/nanosp.05.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioReqobt/nanosp.06.png b/test-integration/snapshots/signTransactionOtherFioReqobt/nanosp.06.png new file mode 100644 index 00000000..6f7fe29c Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioReqobt/nanosp.06.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioReqobt/nanosp.07.png b/test-integration/snapshots/signTransactionOtherFioReqobt/nanosp.07.png new file mode 100644 index 00000000..8ac15c6d Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioReqobt/nanosp.07.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioReqobt/nanosp.08.png b/test-integration/snapshots/signTransactionOtherFioReqobt/nanosp.08.png new file mode 100644 index 00000000..525864b4 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioReqobt/nanosp.08.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioReqobt/nanosp.09.png b/test-integration/snapshots/signTransactionOtherFioReqobt/nanosp.09.png new file mode 100644 index 00000000..a7a87405 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioReqobt/nanosp.09.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioReqobt/nanosp.10.png b/test-integration/snapshots/signTransactionOtherFioReqobt/nanosp.10.png new file mode 100644 index 00000000..8e0d2a37 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioReqobt/nanosp.10.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioReqobt/nanosp.11.png b/test-integration/snapshots/signTransactionOtherFioReqobt/nanosp.11.png new file mode 100644 index 00000000..a8df15af Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioReqobt/nanosp.11.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioReqobt/nanosp.12.png b/test-integration/snapshots/signTransactionOtherFioReqobt/nanosp.12.png new file mode 100644 index 00000000..c1a66c3d Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioReqobt/nanosp.12.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioReqobt/nanosp.13.png b/test-integration/snapshots/signTransactionOtherFioReqobt/nanosp.13.png new file mode 100644 index 00000000..34e5ceab Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioReqobt/nanosp.13.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioReqobt/nanosp.14.png b/test-integration/snapshots/signTransactionOtherFioReqobt/nanosp.14.png new file mode 100644 index 00000000..6f7fe29c Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioReqobt/nanosp.14.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioReqobt/nanosp.15.png b/test-integration/snapshots/signTransactionOtherFioReqobt/nanosp.15.png new file mode 100644 index 00000000..8ac15c6d Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioReqobt/nanosp.15.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioReqobt/nanosp.16.png b/test-integration/snapshots/signTransactionOtherFioReqobt/nanosp.16.png new file mode 100644 index 00000000..525864b4 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioReqobt/nanosp.16.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioReqobt/nanosp.17.png b/test-integration/snapshots/signTransactionOtherFioReqobt/nanosp.17.png new file mode 100644 index 00000000..a7a87405 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioReqobt/nanosp.17.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioReqobt/nanox.01.png b/test-integration/snapshots/signTransactionOtherFioReqobt/nanox.01.png new file mode 100644 index 00000000..c843773c Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioReqobt/nanox.01.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioReqobt/nanox.02.png b/test-integration/snapshots/signTransactionOtherFioReqobt/nanox.02.png new file mode 100644 index 00000000..ada3168c Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioReqobt/nanox.02.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioReqobt/nanox.03.png b/test-integration/snapshots/signTransactionOtherFioReqobt/nanox.03.png new file mode 100644 index 00000000..4a8bb38a Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioReqobt/nanox.03.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioReqobt/nanox.04.png b/test-integration/snapshots/signTransactionOtherFioReqobt/nanox.04.png new file mode 100644 index 00000000..2d8f3742 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioReqobt/nanox.04.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioReqobt/nanox.05.png b/test-integration/snapshots/signTransactionOtherFioReqobt/nanox.05.png new file mode 100644 index 00000000..34e5ceab Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioReqobt/nanox.05.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioReqobt/nanox.06.png b/test-integration/snapshots/signTransactionOtherFioReqobt/nanox.06.png new file mode 100644 index 00000000..4b4b7f83 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioReqobt/nanox.06.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioReqobt/nanox.07.png b/test-integration/snapshots/signTransactionOtherFioReqobt/nanox.07.png new file mode 100644 index 00000000..5d0997ef Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioReqobt/nanox.07.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioReqobt/nanox.08.png b/test-integration/snapshots/signTransactionOtherFioReqobt/nanox.08.png new file mode 100644 index 00000000..2f8f58e6 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioReqobt/nanox.08.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioReqobt/nanox.09.png b/test-integration/snapshots/signTransactionOtherFioReqobt/nanox.09.png new file mode 100644 index 00000000..c843773c Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioReqobt/nanox.09.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioReqobt/nanox.10.png b/test-integration/snapshots/signTransactionOtherFioReqobt/nanox.10.png new file mode 100644 index 00000000..8e0d2a37 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioReqobt/nanox.10.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioReqobt/nanox.11.png b/test-integration/snapshots/signTransactionOtherFioReqobt/nanox.11.png new file mode 100644 index 00000000..d1cab6a7 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioReqobt/nanox.11.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioReqobt/nanox.12.png b/test-integration/snapshots/signTransactionOtherFioReqobt/nanox.12.png new file mode 100644 index 00000000..2d8f3742 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioReqobt/nanox.12.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioReqobt/nanox.13.png b/test-integration/snapshots/signTransactionOtherFioReqobt/nanox.13.png new file mode 100644 index 00000000..34e5ceab Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioReqobt/nanox.13.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioReqobt/nanox.14.png b/test-integration/snapshots/signTransactionOtherFioReqobt/nanox.14.png new file mode 100644 index 00000000..4b4b7f83 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioReqobt/nanox.14.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioReqobt/nanox.15.png b/test-integration/snapshots/signTransactionOtherFioReqobt/nanox.15.png new file mode 100644 index 00000000..5d0997ef Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioReqobt/nanox.15.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioReqobt/nanox.16.png b/test-integration/snapshots/signTransactionOtherFioReqobt/nanox.16.png new file mode 100644 index 00000000..2f8f58e6 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioReqobt/nanox.16.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioReqobt/nanox.17.png b/test-integration/snapshots/signTransactionOtherFioReqobt/nanox.17.png new file mode 100644 index 00000000..c843773c Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioReqobt/nanox.17.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioStaking/nanos.01.png b/test-integration/snapshots/signTransactionOtherFioStaking/nanos.01.png new file mode 100644 index 00000000..a0f9b734 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioStaking/nanos.01.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioStaking/nanos.02.png b/test-integration/snapshots/signTransactionOtherFioStaking/nanos.02.png new file mode 100644 index 00000000..076a821e Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioStaking/nanos.02.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioStaking/nanos.03.png b/test-integration/snapshots/signTransactionOtherFioStaking/nanos.03.png new file mode 100644 index 00000000..4a9c1cfb Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioStaking/nanos.03.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioStaking/nanos.04.png b/test-integration/snapshots/signTransactionOtherFioStaking/nanos.04.png new file mode 100644 index 00000000..961c0c11 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioStaking/nanos.04.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioStaking/nanos.05.png b/test-integration/snapshots/signTransactionOtherFioStaking/nanos.05.png new file mode 100644 index 00000000..f40a2c93 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioStaking/nanos.05.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioStaking/nanos.06.png b/test-integration/snapshots/signTransactionOtherFioStaking/nanos.06.png new file mode 100644 index 00000000..b42d7b08 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioStaking/nanos.06.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioStaking/nanos.07.png b/test-integration/snapshots/signTransactionOtherFioStaking/nanos.07.png new file mode 100644 index 00000000..d1eac39e Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioStaking/nanos.07.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioStaking/nanos.08.png b/test-integration/snapshots/signTransactionOtherFioStaking/nanos.08.png new file mode 100644 index 00000000..c9de0604 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioStaking/nanos.08.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioStaking/nanos.09.png b/test-integration/snapshots/signTransactionOtherFioStaking/nanos.09.png new file mode 100644 index 00000000..a0f9b734 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioStaking/nanos.09.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioStaking/nanos.10.png b/test-integration/snapshots/signTransactionOtherFioStaking/nanos.10.png new file mode 100644 index 00000000..06140342 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioStaking/nanos.10.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioStaking/nanos.11.png b/test-integration/snapshots/signTransactionOtherFioStaking/nanos.11.png new file mode 100644 index 00000000..1a94f28a Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioStaking/nanos.11.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioStaking/nanos.12.png b/test-integration/snapshots/signTransactionOtherFioStaking/nanos.12.png new file mode 100644 index 00000000..961c0c11 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioStaking/nanos.12.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioStaking/nanos.13.png b/test-integration/snapshots/signTransactionOtherFioStaking/nanos.13.png new file mode 100644 index 00000000..f40a2c93 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioStaking/nanos.13.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioStaking/nanos.14.png b/test-integration/snapshots/signTransactionOtherFioStaking/nanos.14.png new file mode 100644 index 00000000..b42d7b08 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioStaking/nanos.14.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioStaking/nanos.15.png b/test-integration/snapshots/signTransactionOtherFioStaking/nanos.15.png new file mode 100644 index 00000000..d1eac39e Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioStaking/nanos.15.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioStaking/nanos.16.png b/test-integration/snapshots/signTransactionOtherFioStaking/nanos.16.png new file mode 100644 index 00000000..c9de0604 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioStaking/nanos.16.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioStaking/nanos.17.png b/test-integration/snapshots/signTransactionOtherFioStaking/nanos.17.png new file mode 100644 index 00000000..a0f9b734 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioStaking/nanos.17.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioStaking/nanosp.01.png b/test-integration/snapshots/signTransactionOtherFioStaking/nanosp.01.png new file mode 100644 index 00000000..a7a87405 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioStaking/nanosp.01.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioStaking/nanosp.02.png b/test-integration/snapshots/signTransactionOtherFioStaking/nanosp.02.png new file mode 100644 index 00000000..ada3168c Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioStaking/nanosp.02.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioStaking/nanosp.03.png b/test-integration/snapshots/signTransactionOtherFioStaking/nanosp.03.png new file mode 100644 index 00000000..e5be8d06 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioStaking/nanosp.03.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioStaking/nanosp.04.png b/test-integration/snapshots/signTransactionOtherFioStaking/nanosp.04.png new file mode 100644 index 00000000..c1dd7f06 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioStaking/nanosp.04.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioStaking/nanosp.05.png b/test-integration/snapshots/signTransactionOtherFioStaking/nanosp.05.png new file mode 100644 index 00000000..f9daa857 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioStaking/nanosp.05.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioStaking/nanosp.06.png b/test-integration/snapshots/signTransactionOtherFioStaking/nanosp.06.png new file mode 100644 index 00000000..29599903 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioStaking/nanosp.06.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioStaking/nanosp.07.png b/test-integration/snapshots/signTransactionOtherFioStaking/nanosp.07.png new file mode 100644 index 00000000..34e5ceab Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioStaking/nanosp.07.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioStaking/nanosp.08.png b/test-integration/snapshots/signTransactionOtherFioStaking/nanosp.08.png new file mode 100644 index 00000000..6f7fe29c Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioStaking/nanosp.08.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioStaking/nanosp.09.png b/test-integration/snapshots/signTransactionOtherFioStaking/nanosp.09.png new file mode 100644 index 00000000..8ac15c6d Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioStaking/nanosp.09.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioStaking/nanosp.10.png b/test-integration/snapshots/signTransactionOtherFioStaking/nanosp.10.png new file mode 100644 index 00000000..525864b4 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioStaking/nanosp.10.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioStaking/nanosp.11.png b/test-integration/snapshots/signTransactionOtherFioStaking/nanosp.11.png new file mode 100644 index 00000000..a7a87405 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioStaking/nanosp.11.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioStaking/nanosp.12.png b/test-integration/snapshots/signTransactionOtherFioStaking/nanosp.12.png new file mode 100644 index 00000000..8e0d2a37 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioStaking/nanosp.12.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioStaking/nanosp.13.png b/test-integration/snapshots/signTransactionOtherFioStaking/nanosp.13.png new file mode 100644 index 00000000..9117c2d9 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioStaking/nanosp.13.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioStaking/nanosp.14.png b/test-integration/snapshots/signTransactionOtherFioStaking/nanosp.14.png new file mode 100644 index 00000000..c1dd7f06 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioStaking/nanosp.14.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioStaking/nanosp.15.png b/test-integration/snapshots/signTransactionOtherFioStaking/nanosp.15.png new file mode 100644 index 00000000..f9daa857 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioStaking/nanosp.15.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioStaking/nanosp.16.png b/test-integration/snapshots/signTransactionOtherFioStaking/nanosp.16.png new file mode 100644 index 00000000..29599903 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioStaking/nanosp.16.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioStaking/nanosp.17.png b/test-integration/snapshots/signTransactionOtherFioStaking/nanosp.17.png new file mode 100644 index 00000000..34e5ceab Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioStaking/nanosp.17.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioStaking/nanosp.18.png b/test-integration/snapshots/signTransactionOtherFioStaking/nanosp.18.png new file mode 100644 index 00000000..6f7fe29c Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioStaking/nanosp.18.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioStaking/nanosp.19.png b/test-integration/snapshots/signTransactionOtherFioStaking/nanosp.19.png new file mode 100644 index 00000000..8ac15c6d Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioStaking/nanosp.19.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioStaking/nanosp.20.png b/test-integration/snapshots/signTransactionOtherFioStaking/nanosp.20.png new file mode 100644 index 00000000..525864b4 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioStaking/nanosp.20.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioStaking/nanosp.21.png b/test-integration/snapshots/signTransactionOtherFioStaking/nanosp.21.png new file mode 100644 index 00000000..a7a87405 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioStaking/nanosp.21.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioStaking/nanox.01.png b/test-integration/snapshots/signTransactionOtherFioStaking/nanox.01.png new file mode 100644 index 00000000..c843773c Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioStaking/nanox.01.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioStaking/nanox.02.png b/test-integration/snapshots/signTransactionOtherFioStaking/nanox.02.png new file mode 100644 index 00000000..ada3168c Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioStaking/nanox.02.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioStaking/nanox.03.png b/test-integration/snapshots/signTransactionOtherFioStaking/nanox.03.png new file mode 100644 index 00000000..e5be8d06 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioStaking/nanox.03.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioStaking/nanox.04.png b/test-integration/snapshots/signTransactionOtherFioStaking/nanox.04.png new file mode 100644 index 00000000..c90cc3d9 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioStaking/nanox.04.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioStaking/nanox.05.png b/test-integration/snapshots/signTransactionOtherFioStaking/nanox.05.png new file mode 100644 index 00000000..432c6913 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioStaking/nanox.05.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioStaking/nanox.06.png b/test-integration/snapshots/signTransactionOtherFioStaking/nanox.06.png new file mode 100644 index 00000000..29599903 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioStaking/nanox.06.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioStaking/nanox.07.png b/test-integration/snapshots/signTransactionOtherFioStaking/nanox.07.png new file mode 100644 index 00000000..34e5ceab Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioStaking/nanox.07.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioStaking/nanox.08.png b/test-integration/snapshots/signTransactionOtherFioStaking/nanox.08.png new file mode 100644 index 00000000..4b4b7f83 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioStaking/nanox.08.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioStaking/nanox.09.png b/test-integration/snapshots/signTransactionOtherFioStaking/nanox.09.png new file mode 100644 index 00000000..5d0997ef Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioStaking/nanox.09.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioStaking/nanox.10.png b/test-integration/snapshots/signTransactionOtherFioStaking/nanox.10.png new file mode 100644 index 00000000..2f8f58e6 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioStaking/nanox.10.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioStaking/nanox.11.png b/test-integration/snapshots/signTransactionOtherFioStaking/nanox.11.png new file mode 100644 index 00000000..c843773c Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioStaking/nanox.11.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioStaking/nanox.12.png b/test-integration/snapshots/signTransactionOtherFioStaking/nanox.12.png new file mode 100644 index 00000000..8e0d2a37 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioStaking/nanox.12.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioStaking/nanox.13.png b/test-integration/snapshots/signTransactionOtherFioStaking/nanox.13.png new file mode 100644 index 00000000..9117c2d9 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioStaking/nanox.13.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioStaking/nanox.14.png b/test-integration/snapshots/signTransactionOtherFioStaking/nanox.14.png new file mode 100644 index 00000000..c90cc3d9 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioStaking/nanox.14.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioStaking/nanox.15.png b/test-integration/snapshots/signTransactionOtherFioStaking/nanox.15.png new file mode 100644 index 00000000..432c6913 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioStaking/nanox.15.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioStaking/nanox.16.png b/test-integration/snapshots/signTransactionOtherFioStaking/nanox.16.png new file mode 100644 index 00000000..29599903 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioStaking/nanox.16.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioStaking/nanox.17.png b/test-integration/snapshots/signTransactionOtherFioStaking/nanox.17.png new file mode 100644 index 00000000..34e5ceab Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioStaking/nanox.17.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioStaking/nanox.18.png b/test-integration/snapshots/signTransactionOtherFioStaking/nanox.18.png new file mode 100644 index 00000000..4b4b7f83 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioStaking/nanox.18.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioStaking/nanox.19.png b/test-integration/snapshots/signTransactionOtherFioStaking/nanox.19.png new file mode 100644 index 00000000..5d0997ef Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioStaking/nanox.19.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioStaking/nanox.20.png b/test-integration/snapshots/signTransactionOtherFioStaking/nanox.20.png new file mode 100644 index 00000000..2f8f58e6 Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioStaking/nanox.20.png differ diff --git a/test-integration/snapshots/signTransactionOtherFioStaking/nanox.21.png b/test-integration/snapshots/signTransactionOtherFioStaking/nanox.21.png new file mode 100644 index 00000000..c843773c Binary files /dev/null and b/test-integration/snapshots/signTransactionOtherFioStaking/nanox.21.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanos.01.png b/test-integration/snapshots/signTransactionRecordobt/nanos.01.png new file mode 100644 index 00000000..a0f9b734 Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanos.01.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanos.02.png b/test-integration/snapshots/signTransactionRecordobt/nanos.02.png new file mode 100644 index 00000000..076a821e Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanos.02.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanos.03.png b/test-integration/snapshots/signTransactionRecordobt/nanos.03.png new file mode 100644 index 00000000..959a70fa Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanos.03.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanos.04.png b/test-integration/snapshots/signTransactionRecordobt/nanos.04.png new file mode 100644 index 00000000..f7df1097 Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanos.04.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanos.05.png b/test-integration/snapshots/signTransactionRecordobt/nanos.05.png new file mode 100644 index 00000000..9e446398 Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanos.05.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanos.06.png b/test-integration/snapshots/signTransactionRecordobt/nanos.06.png new file mode 100644 index 00000000..ecf1f505 Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanos.06.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanos.07.png b/test-integration/snapshots/signTransactionRecordobt/nanos.07.png new file mode 100644 index 00000000..577884a2 Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanos.07.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanos.08.png b/test-integration/snapshots/signTransactionRecordobt/nanos.08.png new file mode 100644 index 00000000..fd1722a7 Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanos.08.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanos.09.png b/test-integration/snapshots/signTransactionRecordobt/nanos.09.png new file mode 100644 index 00000000..c1b2ff76 Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanos.09.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanos.10.png b/test-integration/snapshots/signTransactionRecordobt/nanos.10.png new file mode 100644 index 00000000..119eb22f Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanos.10.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanos.11.png b/test-integration/snapshots/signTransactionRecordobt/nanos.11.png new file mode 100644 index 00000000..5ad55e09 Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanos.11.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanos.12.png b/test-integration/snapshots/signTransactionRecordobt/nanos.12.png new file mode 100644 index 00000000..fadc23a1 Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanos.12.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanos.13.png b/test-integration/snapshots/signTransactionRecordobt/nanos.13.png new file mode 100644 index 00000000..d14326b4 Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanos.13.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanos.14.png b/test-integration/snapshots/signTransactionRecordobt/nanos.14.png new file mode 100644 index 00000000..c0236f40 Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanos.14.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanos.15.png b/test-integration/snapshots/signTransactionRecordobt/nanos.15.png new file mode 100644 index 00000000..152ad82f Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanos.15.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanos.16.png b/test-integration/snapshots/signTransactionRecordobt/nanos.16.png new file mode 100644 index 00000000..b42d7b08 Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanos.16.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanos.17.png b/test-integration/snapshots/signTransactionRecordobt/nanos.17.png new file mode 100644 index 00000000..d1eac39e Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanos.17.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanos.18.png b/test-integration/snapshots/signTransactionRecordobt/nanos.18.png new file mode 100644 index 00000000..c9de0604 Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanos.18.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanos.19.png b/test-integration/snapshots/signTransactionRecordobt/nanos.19.png new file mode 100644 index 00000000..a0f9b734 Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanos.19.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanos.20.png b/test-integration/snapshots/signTransactionRecordobt/nanos.20.png new file mode 100644 index 00000000..06140342 Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanos.20.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanos.21.png b/test-integration/snapshots/signTransactionRecordobt/nanos.21.png new file mode 100644 index 00000000..959a70fa Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanos.21.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanos.22.png b/test-integration/snapshots/signTransactionRecordobt/nanos.22.png new file mode 100644 index 00000000..f7df1097 Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanos.22.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanos.23.png b/test-integration/snapshots/signTransactionRecordobt/nanos.23.png new file mode 100644 index 00000000..9e446398 Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanos.23.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanos.24.png b/test-integration/snapshots/signTransactionRecordobt/nanos.24.png new file mode 100644 index 00000000..ecf1f505 Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanos.24.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanos.25.png b/test-integration/snapshots/signTransactionRecordobt/nanos.25.png new file mode 100644 index 00000000..577884a2 Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanos.25.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanos.26.png b/test-integration/snapshots/signTransactionRecordobt/nanos.26.png new file mode 100644 index 00000000..fd1722a7 Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanos.26.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanos.27.png b/test-integration/snapshots/signTransactionRecordobt/nanos.27.png new file mode 100644 index 00000000..c1b2ff76 Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanos.27.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanos.28.png b/test-integration/snapshots/signTransactionRecordobt/nanos.28.png new file mode 100644 index 00000000..119eb22f Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanos.28.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanos.29.png b/test-integration/snapshots/signTransactionRecordobt/nanos.29.png new file mode 100644 index 00000000..5ad55e09 Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanos.29.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanos.30.png b/test-integration/snapshots/signTransactionRecordobt/nanos.30.png new file mode 100644 index 00000000..fadc23a1 Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanos.30.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanos.31.png b/test-integration/snapshots/signTransactionRecordobt/nanos.31.png new file mode 100644 index 00000000..d14326b4 Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanos.31.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanos.32.png b/test-integration/snapshots/signTransactionRecordobt/nanos.32.png new file mode 100644 index 00000000..c0236f40 Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanos.32.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanos.33.png b/test-integration/snapshots/signTransactionRecordobt/nanos.33.png new file mode 100644 index 00000000..152ad82f Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanos.33.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanos.34.png b/test-integration/snapshots/signTransactionRecordobt/nanos.34.png new file mode 100644 index 00000000..b42d7b08 Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanos.34.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanos.35.png b/test-integration/snapshots/signTransactionRecordobt/nanos.35.png new file mode 100644 index 00000000..d1eac39e Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanos.35.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanos.36.png b/test-integration/snapshots/signTransactionRecordobt/nanos.36.png new file mode 100644 index 00000000..c9de0604 Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanos.36.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanos.37.png b/test-integration/snapshots/signTransactionRecordobt/nanos.37.png new file mode 100644 index 00000000..a0f9b734 Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanos.37.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanos.38.png b/test-integration/snapshots/signTransactionRecordobt/nanos.38.png new file mode 100644 index 00000000..076a821e Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanos.38.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanos.39.png b/test-integration/snapshots/signTransactionRecordobt/nanos.39.png new file mode 100644 index 00000000..959a70fa Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanos.39.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanos.40.png b/test-integration/snapshots/signTransactionRecordobt/nanos.40.png new file mode 100644 index 00000000..9e446398 Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanos.40.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanos.41.png b/test-integration/snapshots/signTransactionRecordobt/nanos.41.png new file mode 100644 index 00000000..ecf1f505 Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanos.41.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanos.42.png b/test-integration/snapshots/signTransactionRecordobt/nanos.42.png new file mode 100644 index 00000000..577884a2 Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanos.42.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanos.43.png b/test-integration/snapshots/signTransactionRecordobt/nanos.43.png new file mode 100644 index 00000000..fd1722a7 Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanos.43.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanos.44.png b/test-integration/snapshots/signTransactionRecordobt/nanos.44.png new file mode 100644 index 00000000..c1b2ff76 Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanos.44.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanos.45.png b/test-integration/snapshots/signTransactionRecordobt/nanos.45.png new file mode 100644 index 00000000..119eb22f Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanos.45.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanos.46.png b/test-integration/snapshots/signTransactionRecordobt/nanos.46.png new file mode 100644 index 00000000..5ad55e09 Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanos.46.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanos.47.png b/test-integration/snapshots/signTransactionRecordobt/nanos.47.png new file mode 100644 index 00000000..fadc23a1 Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanos.47.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanos.48.png b/test-integration/snapshots/signTransactionRecordobt/nanos.48.png new file mode 100644 index 00000000..d14326b4 Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanos.48.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanos.49.png b/test-integration/snapshots/signTransactionRecordobt/nanos.49.png new file mode 100644 index 00000000..c0236f40 Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanos.49.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanos.50.png b/test-integration/snapshots/signTransactionRecordobt/nanos.50.png new file mode 100644 index 00000000..152ad82f Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanos.50.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanos.51.png b/test-integration/snapshots/signTransactionRecordobt/nanos.51.png new file mode 100644 index 00000000..b42d7b08 Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanos.51.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanos.52.png b/test-integration/snapshots/signTransactionRecordobt/nanos.52.png new file mode 100644 index 00000000..d1eac39e Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanos.52.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanos.53.png b/test-integration/snapshots/signTransactionRecordobt/nanos.53.png new file mode 100644 index 00000000..c9de0604 Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanos.53.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanos.54.png b/test-integration/snapshots/signTransactionRecordobt/nanos.54.png new file mode 100644 index 00000000..a0f9b734 Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanos.54.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanos.55.png b/test-integration/snapshots/signTransactionRecordobt/nanos.55.png new file mode 100644 index 00000000..06140342 Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanos.55.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanos.56.png b/test-integration/snapshots/signTransactionRecordobt/nanos.56.png new file mode 100644 index 00000000..959a70fa Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanos.56.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanos.57.png b/test-integration/snapshots/signTransactionRecordobt/nanos.57.png new file mode 100644 index 00000000..9e446398 Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanos.57.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanos.58.png b/test-integration/snapshots/signTransactionRecordobt/nanos.58.png new file mode 100644 index 00000000..ecf1f505 Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanos.58.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanos.59.png b/test-integration/snapshots/signTransactionRecordobt/nanos.59.png new file mode 100644 index 00000000..577884a2 Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanos.59.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanos.60.png b/test-integration/snapshots/signTransactionRecordobt/nanos.60.png new file mode 100644 index 00000000..fd1722a7 Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanos.60.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanos.61.png b/test-integration/snapshots/signTransactionRecordobt/nanos.61.png new file mode 100644 index 00000000..c1b2ff76 Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanos.61.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanos.62.png b/test-integration/snapshots/signTransactionRecordobt/nanos.62.png new file mode 100644 index 00000000..119eb22f Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanos.62.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanos.63.png b/test-integration/snapshots/signTransactionRecordobt/nanos.63.png new file mode 100644 index 00000000..5ad55e09 Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanos.63.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanos.64.png b/test-integration/snapshots/signTransactionRecordobt/nanos.64.png new file mode 100644 index 00000000..fadc23a1 Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanos.64.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanos.65.png b/test-integration/snapshots/signTransactionRecordobt/nanos.65.png new file mode 100644 index 00000000..d14326b4 Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanos.65.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanos.66.png b/test-integration/snapshots/signTransactionRecordobt/nanos.66.png new file mode 100644 index 00000000..c0236f40 Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanos.66.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanos.67.png b/test-integration/snapshots/signTransactionRecordobt/nanos.67.png new file mode 100644 index 00000000..152ad82f Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanos.67.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanos.68.png b/test-integration/snapshots/signTransactionRecordobt/nanos.68.png new file mode 100644 index 00000000..b42d7b08 Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanos.68.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanos.69.png b/test-integration/snapshots/signTransactionRecordobt/nanos.69.png new file mode 100644 index 00000000..d1eac39e Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanos.69.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanos.70.png b/test-integration/snapshots/signTransactionRecordobt/nanos.70.png new file mode 100644 index 00000000..c9de0604 Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanos.70.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanos.71.png b/test-integration/snapshots/signTransactionRecordobt/nanos.71.png new file mode 100644 index 00000000..a0f9b734 Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanos.71.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanosp.01.png b/test-integration/snapshots/signTransactionRecordobt/nanosp.01.png new file mode 100644 index 00000000..a7a87405 Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanosp.01.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanosp.02.png b/test-integration/snapshots/signTransactionRecordobt/nanosp.02.png new file mode 100644 index 00000000..ada3168c Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanosp.02.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanosp.03.png b/test-integration/snapshots/signTransactionRecordobt/nanosp.03.png new file mode 100644 index 00000000..2a61ceda Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanosp.03.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanosp.04.png b/test-integration/snapshots/signTransactionRecordobt/nanosp.04.png new file mode 100644 index 00000000..c1a66c3d Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanosp.04.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanosp.05.png b/test-integration/snapshots/signTransactionRecordobt/nanosp.05.png new file mode 100644 index 00000000..865f0bcd Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanosp.05.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanosp.06.png b/test-integration/snapshots/signTransactionRecordobt/nanosp.06.png new file mode 100644 index 00000000..c2bb4e70 Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanosp.06.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanosp.07.png b/test-integration/snapshots/signTransactionRecordobt/nanosp.07.png new file mode 100644 index 00000000..bb9b991d Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanosp.07.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanosp.08.png b/test-integration/snapshots/signTransactionRecordobt/nanosp.08.png new file mode 100644 index 00000000..2a064b24 Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanosp.08.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanosp.09.png b/test-integration/snapshots/signTransactionRecordobt/nanosp.09.png new file mode 100644 index 00000000..8be05678 Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanosp.09.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanosp.10.png b/test-integration/snapshots/signTransactionRecordobt/nanosp.10.png new file mode 100644 index 00000000..53a92bd8 Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanosp.10.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanosp.11.png b/test-integration/snapshots/signTransactionRecordobt/nanosp.11.png new file mode 100644 index 00000000..d3fc7747 Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanosp.11.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanosp.12.png b/test-integration/snapshots/signTransactionRecordobt/nanosp.12.png new file mode 100644 index 00000000..48f9d314 Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanosp.12.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanosp.13.png b/test-integration/snapshots/signTransactionRecordobt/nanosp.13.png new file mode 100644 index 00000000..bce54a4b Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanosp.13.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanosp.14.png b/test-integration/snapshots/signTransactionRecordobt/nanosp.14.png new file mode 100644 index 00000000..1649b937 Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanosp.14.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanosp.15.png b/test-integration/snapshots/signTransactionRecordobt/nanosp.15.png new file mode 100644 index 00000000..4bd0b0ea Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanosp.15.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanosp.16.png b/test-integration/snapshots/signTransactionRecordobt/nanosp.16.png new file mode 100644 index 00000000..34e5ceab Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanosp.16.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanosp.17.png b/test-integration/snapshots/signTransactionRecordobt/nanosp.17.png new file mode 100644 index 00000000..6f7fe29c Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanosp.17.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanosp.18.png b/test-integration/snapshots/signTransactionRecordobt/nanosp.18.png new file mode 100644 index 00000000..8ac15c6d Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanosp.18.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanosp.19.png b/test-integration/snapshots/signTransactionRecordobt/nanosp.19.png new file mode 100644 index 00000000..525864b4 Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanosp.19.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanosp.20.png b/test-integration/snapshots/signTransactionRecordobt/nanosp.20.png new file mode 100644 index 00000000..a7a87405 Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanosp.20.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanosp.21.png b/test-integration/snapshots/signTransactionRecordobt/nanosp.21.png new file mode 100644 index 00000000..8e0d2a37 Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanosp.21.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanosp.22.png b/test-integration/snapshots/signTransactionRecordobt/nanosp.22.png new file mode 100644 index 00000000..2a61ceda Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanosp.22.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanosp.23.png b/test-integration/snapshots/signTransactionRecordobt/nanosp.23.png new file mode 100644 index 00000000..c1a66c3d Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanosp.23.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanosp.24.png b/test-integration/snapshots/signTransactionRecordobt/nanosp.24.png new file mode 100644 index 00000000..865f0bcd Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanosp.24.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanosp.25.png b/test-integration/snapshots/signTransactionRecordobt/nanosp.25.png new file mode 100644 index 00000000..c2bb4e70 Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanosp.25.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanosp.26.png b/test-integration/snapshots/signTransactionRecordobt/nanosp.26.png new file mode 100644 index 00000000..bb9b991d Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanosp.26.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanosp.27.png b/test-integration/snapshots/signTransactionRecordobt/nanosp.27.png new file mode 100644 index 00000000..2a064b24 Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanosp.27.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanosp.28.png b/test-integration/snapshots/signTransactionRecordobt/nanosp.28.png new file mode 100644 index 00000000..8be05678 Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanosp.28.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanosp.29.png b/test-integration/snapshots/signTransactionRecordobt/nanosp.29.png new file mode 100644 index 00000000..53a92bd8 Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanosp.29.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanosp.30.png b/test-integration/snapshots/signTransactionRecordobt/nanosp.30.png new file mode 100644 index 00000000..d3fc7747 Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanosp.30.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanosp.31.png b/test-integration/snapshots/signTransactionRecordobt/nanosp.31.png new file mode 100644 index 00000000..48f9d314 Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanosp.31.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanosp.32.png b/test-integration/snapshots/signTransactionRecordobt/nanosp.32.png new file mode 100644 index 00000000..bce54a4b Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanosp.32.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanosp.33.png b/test-integration/snapshots/signTransactionRecordobt/nanosp.33.png new file mode 100644 index 00000000..1649b937 Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanosp.33.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanosp.34.png b/test-integration/snapshots/signTransactionRecordobt/nanosp.34.png new file mode 100644 index 00000000..4bd0b0ea Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanosp.34.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanosp.35.png b/test-integration/snapshots/signTransactionRecordobt/nanosp.35.png new file mode 100644 index 00000000..34e5ceab Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanosp.35.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanosp.36.png b/test-integration/snapshots/signTransactionRecordobt/nanosp.36.png new file mode 100644 index 00000000..6f7fe29c Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanosp.36.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanosp.37.png b/test-integration/snapshots/signTransactionRecordobt/nanosp.37.png new file mode 100644 index 00000000..8ac15c6d Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanosp.37.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanosp.38.png b/test-integration/snapshots/signTransactionRecordobt/nanosp.38.png new file mode 100644 index 00000000..525864b4 Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanosp.38.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanosp.39.png b/test-integration/snapshots/signTransactionRecordobt/nanosp.39.png new file mode 100644 index 00000000..a7a87405 Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanosp.39.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanosp.40.png b/test-integration/snapshots/signTransactionRecordobt/nanosp.40.png new file mode 100644 index 00000000..ada3168c Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanosp.40.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanosp.41.png b/test-integration/snapshots/signTransactionRecordobt/nanosp.41.png new file mode 100644 index 00000000..2a61ceda Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanosp.41.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanosp.42.png b/test-integration/snapshots/signTransactionRecordobt/nanosp.42.png new file mode 100644 index 00000000..865f0bcd Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanosp.42.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanosp.43.png b/test-integration/snapshots/signTransactionRecordobt/nanosp.43.png new file mode 100644 index 00000000..c2bb4e70 Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanosp.43.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanosp.44.png b/test-integration/snapshots/signTransactionRecordobt/nanosp.44.png new file mode 100644 index 00000000..bb9b991d Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanosp.44.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanosp.45.png b/test-integration/snapshots/signTransactionRecordobt/nanosp.45.png new file mode 100644 index 00000000..2a064b24 Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanosp.45.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanosp.46.png b/test-integration/snapshots/signTransactionRecordobt/nanosp.46.png new file mode 100644 index 00000000..8be05678 Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanosp.46.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanosp.47.png b/test-integration/snapshots/signTransactionRecordobt/nanosp.47.png new file mode 100644 index 00000000..53a92bd8 Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanosp.47.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanosp.48.png b/test-integration/snapshots/signTransactionRecordobt/nanosp.48.png new file mode 100644 index 00000000..d3fc7747 Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanosp.48.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanosp.49.png b/test-integration/snapshots/signTransactionRecordobt/nanosp.49.png new file mode 100644 index 00000000..48f9d314 Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanosp.49.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanosp.50.png b/test-integration/snapshots/signTransactionRecordobt/nanosp.50.png new file mode 100644 index 00000000..bce54a4b Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanosp.50.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanosp.51.png b/test-integration/snapshots/signTransactionRecordobt/nanosp.51.png new file mode 100644 index 00000000..1649b937 Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanosp.51.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanosp.52.png b/test-integration/snapshots/signTransactionRecordobt/nanosp.52.png new file mode 100644 index 00000000..4bd0b0ea Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanosp.52.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanosp.53.png b/test-integration/snapshots/signTransactionRecordobt/nanosp.53.png new file mode 100644 index 00000000..34e5ceab Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanosp.53.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanosp.54.png b/test-integration/snapshots/signTransactionRecordobt/nanosp.54.png new file mode 100644 index 00000000..6f7fe29c Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanosp.54.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanosp.55.png b/test-integration/snapshots/signTransactionRecordobt/nanosp.55.png new file mode 100644 index 00000000..8ac15c6d Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanosp.55.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanosp.56.png b/test-integration/snapshots/signTransactionRecordobt/nanosp.56.png new file mode 100644 index 00000000..525864b4 Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanosp.56.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanosp.57.png b/test-integration/snapshots/signTransactionRecordobt/nanosp.57.png new file mode 100644 index 00000000..a7a87405 Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanosp.57.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanosp.58.png b/test-integration/snapshots/signTransactionRecordobt/nanosp.58.png new file mode 100644 index 00000000..8e0d2a37 Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanosp.58.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanosp.59.png b/test-integration/snapshots/signTransactionRecordobt/nanosp.59.png new file mode 100644 index 00000000..2a61ceda Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanosp.59.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanosp.60.png b/test-integration/snapshots/signTransactionRecordobt/nanosp.60.png new file mode 100644 index 00000000..865f0bcd Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanosp.60.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanosp.61.png b/test-integration/snapshots/signTransactionRecordobt/nanosp.61.png new file mode 100644 index 00000000..c2bb4e70 Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanosp.61.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanosp.62.png b/test-integration/snapshots/signTransactionRecordobt/nanosp.62.png new file mode 100644 index 00000000..bb9b991d Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanosp.62.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanosp.63.png b/test-integration/snapshots/signTransactionRecordobt/nanosp.63.png new file mode 100644 index 00000000..2a064b24 Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanosp.63.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanosp.64.png b/test-integration/snapshots/signTransactionRecordobt/nanosp.64.png new file mode 100644 index 00000000..8be05678 Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanosp.64.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanosp.65.png b/test-integration/snapshots/signTransactionRecordobt/nanosp.65.png new file mode 100644 index 00000000..53a92bd8 Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanosp.65.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanosp.66.png b/test-integration/snapshots/signTransactionRecordobt/nanosp.66.png new file mode 100644 index 00000000..d3fc7747 Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanosp.66.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanosp.67.png b/test-integration/snapshots/signTransactionRecordobt/nanosp.67.png new file mode 100644 index 00000000..48f9d314 Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanosp.67.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanosp.68.png b/test-integration/snapshots/signTransactionRecordobt/nanosp.68.png new file mode 100644 index 00000000..bce54a4b Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanosp.68.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanosp.69.png b/test-integration/snapshots/signTransactionRecordobt/nanosp.69.png new file mode 100644 index 00000000..1649b937 Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanosp.69.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanosp.70.png b/test-integration/snapshots/signTransactionRecordobt/nanosp.70.png new file mode 100644 index 00000000..4bd0b0ea Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanosp.70.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanosp.71.png b/test-integration/snapshots/signTransactionRecordobt/nanosp.71.png new file mode 100644 index 00000000..34e5ceab Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanosp.71.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanosp.72.png b/test-integration/snapshots/signTransactionRecordobt/nanosp.72.png new file mode 100644 index 00000000..6f7fe29c Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanosp.72.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanosp.73.png b/test-integration/snapshots/signTransactionRecordobt/nanosp.73.png new file mode 100644 index 00000000..8ac15c6d Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanosp.73.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanosp.74.png b/test-integration/snapshots/signTransactionRecordobt/nanosp.74.png new file mode 100644 index 00000000..525864b4 Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanosp.74.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanosp.75.png b/test-integration/snapshots/signTransactionRecordobt/nanosp.75.png new file mode 100644 index 00000000..a7a87405 Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanosp.75.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanox.01.png b/test-integration/snapshots/signTransactionRecordobt/nanox.01.png new file mode 100644 index 00000000..c843773c Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanox.01.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanox.02.png b/test-integration/snapshots/signTransactionRecordobt/nanox.02.png new file mode 100644 index 00000000..ada3168c Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanox.02.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanox.03.png b/test-integration/snapshots/signTransactionRecordobt/nanox.03.png new file mode 100644 index 00000000..2a61ceda Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanox.03.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanox.04.png b/test-integration/snapshots/signTransactionRecordobt/nanox.04.png new file mode 100644 index 00000000..2d8f3742 Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanox.04.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanox.05.png b/test-integration/snapshots/signTransactionRecordobt/nanox.05.png new file mode 100644 index 00000000..865f0bcd Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanox.05.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanox.06.png b/test-integration/snapshots/signTransactionRecordobt/nanox.06.png new file mode 100644 index 00000000..c2bb4e70 Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanox.06.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanox.07.png b/test-integration/snapshots/signTransactionRecordobt/nanox.07.png new file mode 100644 index 00000000..bb9b991d Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanox.07.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanox.08.png b/test-integration/snapshots/signTransactionRecordobt/nanox.08.png new file mode 100644 index 00000000..9e4fd242 Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanox.08.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanox.09.png b/test-integration/snapshots/signTransactionRecordobt/nanox.09.png new file mode 100644 index 00000000..095632e6 Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanox.09.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanox.10.png b/test-integration/snapshots/signTransactionRecordobt/nanox.10.png new file mode 100644 index 00000000..2abe5bd2 Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanox.10.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanox.11.png b/test-integration/snapshots/signTransactionRecordobt/nanox.11.png new file mode 100644 index 00000000..d3fc7747 Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanox.11.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanox.12.png b/test-integration/snapshots/signTransactionRecordobt/nanox.12.png new file mode 100644 index 00000000..48f9d314 Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanox.12.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanox.13.png b/test-integration/snapshots/signTransactionRecordobt/nanox.13.png new file mode 100644 index 00000000..bce54a4b Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanox.13.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanox.14.png b/test-integration/snapshots/signTransactionRecordobt/nanox.14.png new file mode 100644 index 00000000..807849bb Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanox.14.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanox.15.png b/test-integration/snapshots/signTransactionRecordobt/nanox.15.png new file mode 100644 index 00000000..00e1084a Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanox.15.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanox.16.png b/test-integration/snapshots/signTransactionRecordobt/nanox.16.png new file mode 100644 index 00000000..34e5ceab Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanox.16.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanox.17.png b/test-integration/snapshots/signTransactionRecordobt/nanox.17.png new file mode 100644 index 00000000..4b4b7f83 Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanox.17.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanox.18.png b/test-integration/snapshots/signTransactionRecordobt/nanox.18.png new file mode 100644 index 00000000..5d0997ef Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanox.18.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanox.19.png b/test-integration/snapshots/signTransactionRecordobt/nanox.19.png new file mode 100644 index 00000000..2f8f58e6 Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanox.19.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanox.20.png b/test-integration/snapshots/signTransactionRecordobt/nanox.20.png new file mode 100644 index 00000000..c843773c Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanox.20.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanox.21.png b/test-integration/snapshots/signTransactionRecordobt/nanox.21.png new file mode 100644 index 00000000..8e0d2a37 Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanox.21.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanox.22.png b/test-integration/snapshots/signTransactionRecordobt/nanox.22.png new file mode 100644 index 00000000..2a61ceda Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanox.22.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanox.23.png b/test-integration/snapshots/signTransactionRecordobt/nanox.23.png new file mode 100644 index 00000000..2d8f3742 Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanox.23.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanox.24.png b/test-integration/snapshots/signTransactionRecordobt/nanox.24.png new file mode 100644 index 00000000..865f0bcd Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanox.24.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanox.25.png b/test-integration/snapshots/signTransactionRecordobt/nanox.25.png new file mode 100644 index 00000000..c2bb4e70 Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanox.25.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanox.26.png b/test-integration/snapshots/signTransactionRecordobt/nanox.26.png new file mode 100644 index 00000000..bb9b991d Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanox.26.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanox.27.png b/test-integration/snapshots/signTransactionRecordobt/nanox.27.png new file mode 100644 index 00000000..9e4fd242 Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanox.27.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanox.28.png b/test-integration/snapshots/signTransactionRecordobt/nanox.28.png new file mode 100644 index 00000000..095632e6 Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanox.28.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanox.29.png b/test-integration/snapshots/signTransactionRecordobt/nanox.29.png new file mode 100644 index 00000000..2abe5bd2 Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanox.29.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanox.30.png b/test-integration/snapshots/signTransactionRecordobt/nanox.30.png new file mode 100644 index 00000000..d3fc7747 Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanox.30.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanox.31.png b/test-integration/snapshots/signTransactionRecordobt/nanox.31.png new file mode 100644 index 00000000..48f9d314 Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanox.31.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanox.32.png b/test-integration/snapshots/signTransactionRecordobt/nanox.32.png new file mode 100644 index 00000000..bce54a4b Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanox.32.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanox.33.png b/test-integration/snapshots/signTransactionRecordobt/nanox.33.png new file mode 100644 index 00000000..807849bb Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanox.33.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanox.34.png b/test-integration/snapshots/signTransactionRecordobt/nanox.34.png new file mode 100644 index 00000000..00e1084a Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanox.34.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanox.35.png b/test-integration/snapshots/signTransactionRecordobt/nanox.35.png new file mode 100644 index 00000000..34e5ceab Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanox.35.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanox.36.png b/test-integration/snapshots/signTransactionRecordobt/nanox.36.png new file mode 100644 index 00000000..4b4b7f83 Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanox.36.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanox.37.png b/test-integration/snapshots/signTransactionRecordobt/nanox.37.png new file mode 100644 index 00000000..5d0997ef Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanox.37.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanox.38.png b/test-integration/snapshots/signTransactionRecordobt/nanox.38.png new file mode 100644 index 00000000..2f8f58e6 Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanox.38.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanox.39.png b/test-integration/snapshots/signTransactionRecordobt/nanox.39.png new file mode 100644 index 00000000..c843773c Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanox.39.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanox.40.png b/test-integration/snapshots/signTransactionRecordobt/nanox.40.png new file mode 100644 index 00000000..ada3168c Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanox.40.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanox.41.png b/test-integration/snapshots/signTransactionRecordobt/nanox.41.png new file mode 100644 index 00000000..2a61ceda Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanox.41.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanox.42.png b/test-integration/snapshots/signTransactionRecordobt/nanox.42.png new file mode 100644 index 00000000..865f0bcd Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanox.42.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanox.43.png b/test-integration/snapshots/signTransactionRecordobt/nanox.43.png new file mode 100644 index 00000000..c2bb4e70 Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanox.43.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanox.44.png b/test-integration/snapshots/signTransactionRecordobt/nanox.44.png new file mode 100644 index 00000000..bb9b991d Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanox.44.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanox.45.png b/test-integration/snapshots/signTransactionRecordobt/nanox.45.png new file mode 100644 index 00000000..9e4fd242 Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanox.45.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanox.46.png b/test-integration/snapshots/signTransactionRecordobt/nanox.46.png new file mode 100644 index 00000000..095632e6 Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanox.46.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanox.47.png b/test-integration/snapshots/signTransactionRecordobt/nanox.47.png new file mode 100644 index 00000000..2abe5bd2 Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanox.47.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanox.48.png b/test-integration/snapshots/signTransactionRecordobt/nanox.48.png new file mode 100644 index 00000000..d3fc7747 Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanox.48.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanox.49.png b/test-integration/snapshots/signTransactionRecordobt/nanox.49.png new file mode 100644 index 00000000..48f9d314 Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanox.49.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanox.50.png b/test-integration/snapshots/signTransactionRecordobt/nanox.50.png new file mode 100644 index 00000000..bce54a4b Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanox.50.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanox.51.png b/test-integration/snapshots/signTransactionRecordobt/nanox.51.png new file mode 100644 index 00000000..807849bb Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanox.51.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanox.52.png b/test-integration/snapshots/signTransactionRecordobt/nanox.52.png new file mode 100644 index 00000000..00e1084a Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanox.52.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanox.53.png b/test-integration/snapshots/signTransactionRecordobt/nanox.53.png new file mode 100644 index 00000000..34e5ceab Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanox.53.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanox.54.png b/test-integration/snapshots/signTransactionRecordobt/nanox.54.png new file mode 100644 index 00000000..4b4b7f83 Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanox.54.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanox.55.png b/test-integration/snapshots/signTransactionRecordobt/nanox.55.png new file mode 100644 index 00000000..5d0997ef Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanox.55.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanox.56.png b/test-integration/snapshots/signTransactionRecordobt/nanox.56.png new file mode 100644 index 00000000..2f8f58e6 Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanox.56.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanox.57.png b/test-integration/snapshots/signTransactionRecordobt/nanox.57.png new file mode 100644 index 00000000..c843773c Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanox.57.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanox.58.png b/test-integration/snapshots/signTransactionRecordobt/nanox.58.png new file mode 100644 index 00000000..8e0d2a37 Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanox.58.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanox.59.png b/test-integration/snapshots/signTransactionRecordobt/nanox.59.png new file mode 100644 index 00000000..2a61ceda Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanox.59.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanox.60.png b/test-integration/snapshots/signTransactionRecordobt/nanox.60.png new file mode 100644 index 00000000..865f0bcd Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanox.60.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanox.61.png b/test-integration/snapshots/signTransactionRecordobt/nanox.61.png new file mode 100644 index 00000000..c2bb4e70 Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanox.61.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanox.62.png b/test-integration/snapshots/signTransactionRecordobt/nanox.62.png new file mode 100644 index 00000000..bb9b991d Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanox.62.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanox.63.png b/test-integration/snapshots/signTransactionRecordobt/nanox.63.png new file mode 100644 index 00000000..9e4fd242 Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanox.63.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanox.64.png b/test-integration/snapshots/signTransactionRecordobt/nanox.64.png new file mode 100644 index 00000000..095632e6 Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanox.64.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanox.65.png b/test-integration/snapshots/signTransactionRecordobt/nanox.65.png new file mode 100644 index 00000000..2abe5bd2 Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanox.65.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanox.66.png b/test-integration/snapshots/signTransactionRecordobt/nanox.66.png new file mode 100644 index 00000000..d3fc7747 Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanox.66.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanox.67.png b/test-integration/snapshots/signTransactionRecordobt/nanox.67.png new file mode 100644 index 00000000..48f9d314 Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanox.67.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanox.68.png b/test-integration/snapshots/signTransactionRecordobt/nanox.68.png new file mode 100644 index 00000000..bce54a4b Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanox.68.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanox.69.png b/test-integration/snapshots/signTransactionRecordobt/nanox.69.png new file mode 100644 index 00000000..807849bb Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanox.69.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanox.70.png b/test-integration/snapshots/signTransactionRecordobt/nanox.70.png new file mode 100644 index 00000000..00e1084a Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanox.70.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanox.71.png b/test-integration/snapshots/signTransactionRecordobt/nanox.71.png new file mode 100644 index 00000000..34e5ceab Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanox.71.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanox.72.png b/test-integration/snapshots/signTransactionRecordobt/nanox.72.png new file mode 100644 index 00000000..4b4b7f83 Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanox.72.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanox.73.png b/test-integration/snapshots/signTransactionRecordobt/nanox.73.png new file mode 100644 index 00000000..5d0997ef Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanox.73.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanox.74.png b/test-integration/snapshots/signTransactionRecordobt/nanox.74.png new file mode 100644 index 00000000..2f8f58e6 Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanox.74.png differ diff --git a/test-integration/snapshots/signTransactionRecordobt/nanox.75.png b/test-integration/snapshots/signTransactionRecordobt/nanox.75.png new file mode 100644 index 00000000..c843773c Binary files /dev/null and b/test-integration/snapshots/signTransactionRecordobt/nanox.75.png differ diff --git a/test-integration/snapshots/signTransactionRemaddress/nanos.01.png b/test-integration/snapshots/signTransactionRemaddress/nanos.01.png new file mode 100644 index 00000000..a0f9b734 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemaddress/nanos.01.png differ diff --git a/test-integration/snapshots/signTransactionRemaddress/nanos.02.png b/test-integration/snapshots/signTransactionRemaddress/nanos.02.png new file mode 100644 index 00000000..076a821e Binary files /dev/null and b/test-integration/snapshots/signTransactionRemaddress/nanos.02.png differ diff --git a/test-integration/snapshots/signTransactionRemaddress/nanos.03.png b/test-integration/snapshots/signTransactionRemaddress/nanos.03.png new file mode 100644 index 00000000..fe9dafad Binary files /dev/null and b/test-integration/snapshots/signTransactionRemaddress/nanos.03.png differ diff --git a/test-integration/snapshots/signTransactionRemaddress/nanos.04.png b/test-integration/snapshots/signTransactionRemaddress/nanos.04.png new file mode 100644 index 00000000..961c0c11 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemaddress/nanos.04.png differ diff --git a/test-integration/snapshots/signTransactionRemaddress/nanos.05.png b/test-integration/snapshots/signTransactionRemaddress/nanos.05.png new file mode 100644 index 00000000..715b32c5 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemaddress/nanos.05.png differ diff --git a/test-integration/snapshots/signTransactionRemaddress/nanos.06.png b/test-integration/snapshots/signTransactionRemaddress/nanos.06.png new file mode 100644 index 00000000..b42d7b08 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemaddress/nanos.06.png differ diff --git a/test-integration/snapshots/signTransactionRemaddress/nanos.07.png b/test-integration/snapshots/signTransactionRemaddress/nanos.07.png new file mode 100644 index 00000000..d1eac39e Binary files /dev/null and b/test-integration/snapshots/signTransactionRemaddress/nanos.07.png differ diff --git a/test-integration/snapshots/signTransactionRemaddress/nanos.08.png b/test-integration/snapshots/signTransactionRemaddress/nanos.08.png new file mode 100644 index 00000000..c9de0604 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemaddress/nanos.08.png differ diff --git a/test-integration/snapshots/signTransactionRemaddress/nanos.09.png b/test-integration/snapshots/signTransactionRemaddress/nanos.09.png new file mode 100644 index 00000000..a0f9b734 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemaddress/nanos.09.png differ diff --git a/test-integration/snapshots/signTransactionRemaddress/nanos.10.png b/test-integration/snapshots/signTransactionRemaddress/nanos.10.png new file mode 100644 index 00000000..06140342 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemaddress/nanos.10.png differ diff --git a/test-integration/snapshots/signTransactionRemaddress/nanos.11.png b/test-integration/snapshots/signTransactionRemaddress/nanos.11.png new file mode 100644 index 00000000..fe9dafad Binary files /dev/null and b/test-integration/snapshots/signTransactionRemaddress/nanos.11.png differ diff --git a/test-integration/snapshots/signTransactionRemaddress/nanos.12.png b/test-integration/snapshots/signTransactionRemaddress/nanos.12.png new file mode 100644 index 00000000..961c0c11 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemaddress/nanos.12.png differ diff --git a/test-integration/snapshots/signTransactionRemaddress/nanos.13.png b/test-integration/snapshots/signTransactionRemaddress/nanos.13.png new file mode 100644 index 00000000..715b32c5 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemaddress/nanos.13.png differ diff --git a/test-integration/snapshots/signTransactionRemaddress/nanos.14.png b/test-integration/snapshots/signTransactionRemaddress/nanos.14.png new file mode 100644 index 00000000..2186765f Binary files /dev/null and b/test-integration/snapshots/signTransactionRemaddress/nanos.14.png differ diff --git a/test-integration/snapshots/signTransactionRemaddress/nanos.15.png b/test-integration/snapshots/signTransactionRemaddress/nanos.15.png new file mode 100644 index 00000000..b42d7b08 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemaddress/nanos.15.png differ diff --git a/test-integration/snapshots/signTransactionRemaddress/nanos.16.png b/test-integration/snapshots/signTransactionRemaddress/nanos.16.png new file mode 100644 index 00000000..d1eac39e Binary files /dev/null and b/test-integration/snapshots/signTransactionRemaddress/nanos.16.png differ diff --git a/test-integration/snapshots/signTransactionRemaddress/nanos.17.png b/test-integration/snapshots/signTransactionRemaddress/nanos.17.png new file mode 100644 index 00000000..c9de0604 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemaddress/nanos.17.png differ diff --git a/test-integration/snapshots/signTransactionRemaddress/nanos.18.png b/test-integration/snapshots/signTransactionRemaddress/nanos.18.png new file mode 100644 index 00000000..a0f9b734 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemaddress/nanos.18.png differ diff --git a/test-integration/snapshots/signTransactionRemaddress/nanos.19.png b/test-integration/snapshots/signTransactionRemaddress/nanos.19.png new file mode 100644 index 00000000..06140342 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemaddress/nanos.19.png differ diff --git a/test-integration/snapshots/signTransactionRemaddress/nanos.20.png b/test-integration/snapshots/signTransactionRemaddress/nanos.20.png new file mode 100644 index 00000000..fe9dafad Binary files /dev/null and b/test-integration/snapshots/signTransactionRemaddress/nanos.20.png differ diff --git a/test-integration/snapshots/signTransactionRemaddress/nanos.21.png b/test-integration/snapshots/signTransactionRemaddress/nanos.21.png new file mode 100644 index 00000000..961c0c11 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemaddress/nanos.21.png differ diff --git a/test-integration/snapshots/signTransactionRemaddress/nanos.22.png b/test-integration/snapshots/signTransactionRemaddress/nanos.22.png new file mode 100644 index 00000000..715b32c5 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemaddress/nanos.22.png differ diff --git a/test-integration/snapshots/signTransactionRemaddress/nanos.23.png b/test-integration/snapshots/signTransactionRemaddress/nanos.23.png new file mode 100644 index 00000000..2186765f Binary files /dev/null and b/test-integration/snapshots/signTransactionRemaddress/nanos.23.png differ diff --git a/test-integration/snapshots/signTransactionRemaddress/nanos.24.png b/test-integration/snapshots/signTransactionRemaddress/nanos.24.png new file mode 100644 index 00000000..d8ba46d5 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemaddress/nanos.24.png differ diff --git a/test-integration/snapshots/signTransactionRemaddress/nanos.25.png b/test-integration/snapshots/signTransactionRemaddress/nanos.25.png new file mode 100644 index 00000000..b42d7b08 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemaddress/nanos.25.png differ diff --git a/test-integration/snapshots/signTransactionRemaddress/nanos.26.png b/test-integration/snapshots/signTransactionRemaddress/nanos.26.png new file mode 100644 index 00000000..d1eac39e Binary files /dev/null and b/test-integration/snapshots/signTransactionRemaddress/nanos.26.png differ diff --git a/test-integration/snapshots/signTransactionRemaddress/nanos.27.png b/test-integration/snapshots/signTransactionRemaddress/nanos.27.png new file mode 100644 index 00000000..c9de0604 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemaddress/nanos.27.png differ diff --git a/test-integration/snapshots/signTransactionRemaddress/nanos.28.png b/test-integration/snapshots/signTransactionRemaddress/nanos.28.png new file mode 100644 index 00000000..a0f9b734 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemaddress/nanos.28.png differ diff --git a/test-integration/snapshots/signTransactionRemaddress/nanos.29.png b/test-integration/snapshots/signTransactionRemaddress/nanos.29.png new file mode 100644 index 00000000..06140342 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemaddress/nanos.29.png differ diff --git a/test-integration/snapshots/signTransactionRemaddress/nanos.30.png b/test-integration/snapshots/signTransactionRemaddress/nanos.30.png new file mode 100644 index 00000000..fe9dafad Binary files /dev/null and b/test-integration/snapshots/signTransactionRemaddress/nanos.30.png differ diff --git a/test-integration/snapshots/signTransactionRemaddress/nanos.31.png b/test-integration/snapshots/signTransactionRemaddress/nanos.31.png new file mode 100644 index 00000000..961c0c11 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemaddress/nanos.31.png differ diff --git a/test-integration/snapshots/signTransactionRemaddress/nanos.32.png b/test-integration/snapshots/signTransactionRemaddress/nanos.32.png new file mode 100644 index 00000000..715b32c5 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemaddress/nanos.32.png differ diff --git a/test-integration/snapshots/signTransactionRemaddress/nanos.33.png b/test-integration/snapshots/signTransactionRemaddress/nanos.33.png new file mode 100644 index 00000000..2186765f Binary files /dev/null and b/test-integration/snapshots/signTransactionRemaddress/nanos.33.png differ diff --git a/test-integration/snapshots/signTransactionRemaddress/nanos.34.png b/test-integration/snapshots/signTransactionRemaddress/nanos.34.png new file mode 100644 index 00000000..d8ba46d5 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemaddress/nanos.34.png differ diff --git a/test-integration/snapshots/signTransactionRemaddress/nanos.35.png b/test-integration/snapshots/signTransactionRemaddress/nanos.35.png new file mode 100644 index 00000000..1a791b10 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemaddress/nanos.35.png differ diff --git a/test-integration/snapshots/signTransactionRemaddress/nanos.36.png b/test-integration/snapshots/signTransactionRemaddress/nanos.36.png new file mode 100644 index 00000000..b42d7b08 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemaddress/nanos.36.png differ diff --git a/test-integration/snapshots/signTransactionRemaddress/nanos.37.png b/test-integration/snapshots/signTransactionRemaddress/nanos.37.png new file mode 100644 index 00000000..d1eac39e Binary files /dev/null and b/test-integration/snapshots/signTransactionRemaddress/nanos.37.png differ diff --git a/test-integration/snapshots/signTransactionRemaddress/nanos.38.png b/test-integration/snapshots/signTransactionRemaddress/nanos.38.png new file mode 100644 index 00000000..c9de0604 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemaddress/nanos.38.png differ diff --git a/test-integration/snapshots/signTransactionRemaddress/nanos.39.png b/test-integration/snapshots/signTransactionRemaddress/nanos.39.png new file mode 100644 index 00000000..a0f9b734 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemaddress/nanos.39.png differ diff --git a/test-integration/snapshots/signTransactionRemaddress/nanos.40.png b/test-integration/snapshots/signTransactionRemaddress/nanos.40.png new file mode 100644 index 00000000..06140342 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemaddress/nanos.40.png differ diff --git a/test-integration/snapshots/signTransactionRemaddress/nanos.41.png b/test-integration/snapshots/signTransactionRemaddress/nanos.41.png new file mode 100644 index 00000000..fe9dafad Binary files /dev/null and b/test-integration/snapshots/signTransactionRemaddress/nanos.41.png differ diff --git a/test-integration/snapshots/signTransactionRemaddress/nanos.42.png b/test-integration/snapshots/signTransactionRemaddress/nanos.42.png new file mode 100644 index 00000000..961c0c11 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemaddress/nanos.42.png differ diff --git a/test-integration/snapshots/signTransactionRemaddress/nanos.43.png b/test-integration/snapshots/signTransactionRemaddress/nanos.43.png new file mode 100644 index 00000000..715b32c5 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemaddress/nanos.43.png differ diff --git a/test-integration/snapshots/signTransactionRemaddress/nanos.44.png b/test-integration/snapshots/signTransactionRemaddress/nanos.44.png new file mode 100644 index 00000000..2186765f Binary files /dev/null and b/test-integration/snapshots/signTransactionRemaddress/nanos.44.png differ diff --git a/test-integration/snapshots/signTransactionRemaddress/nanos.45.png b/test-integration/snapshots/signTransactionRemaddress/nanos.45.png new file mode 100644 index 00000000..d8ba46d5 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemaddress/nanos.45.png differ diff --git a/test-integration/snapshots/signTransactionRemaddress/nanos.46.png b/test-integration/snapshots/signTransactionRemaddress/nanos.46.png new file mode 100644 index 00000000..1a791b10 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemaddress/nanos.46.png differ diff --git a/test-integration/snapshots/signTransactionRemaddress/nanos.47.png b/test-integration/snapshots/signTransactionRemaddress/nanos.47.png new file mode 100644 index 00000000..45ce2717 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemaddress/nanos.47.png differ diff --git a/test-integration/snapshots/signTransactionRemaddress/nanos.48.png b/test-integration/snapshots/signTransactionRemaddress/nanos.48.png new file mode 100644 index 00000000..b42d7b08 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemaddress/nanos.48.png differ diff --git a/test-integration/snapshots/signTransactionRemaddress/nanos.49.png b/test-integration/snapshots/signTransactionRemaddress/nanos.49.png new file mode 100644 index 00000000..d1eac39e Binary files /dev/null and b/test-integration/snapshots/signTransactionRemaddress/nanos.49.png differ diff --git a/test-integration/snapshots/signTransactionRemaddress/nanos.50.png b/test-integration/snapshots/signTransactionRemaddress/nanos.50.png new file mode 100644 index 00000000..c9de0604 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemaddress/nanos.50.png differ diff --git a/test-integration/snapshots/signTransactionRemaddress/nanos.51.png b/test-integration/snapshots/signTransactionRemaddress/nanos.51.png new file mode 100644 index 00000000..a0f9b734 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemaddress/nanos.51.png differ diff --git a/test-integration/snapshots/signTransactionRemaddress/nanosp.01.png b/test-integration/snapshots/signTransactionRemaddress/nanosp.01.png new file mode 100644 index 00000000..a7a87405 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemaddress/nanosp.01.png differ diff --git a/test-integration/snapshots/signTransactionRemaddress/nanosp.02.png b/test-integration/snapshots/signTransactionRemaddress/nanosp.02.png new file mode 100644 index 00000000..ada3168c Binary files /dev/null and b/test-integration/snapshots/signTransactionRemaddress/nanosp.02.png differ diff --git a/test-integration/snapshots/signTransactionRemaddress/nanosp.03.png b/test-integration/snapshots/signTransactionRemaddress/nanosp.03.png new file mode 100644 index 00000000..c61bb216 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemaddress/nanosp.03.png differ diff --git a/test-integration/snapshots/signTransactionRemaddress/nanosp.04.png b/test-integration/snapshots/signTransactionRemaddress/nanosp.04.png new file mode 100644 index 00000000..c1dd7f06 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemaddress/nanosp.04.png differ diff --git a/test-integration/snapshots/signTransactionRemaddress/nanosp.05.png b/test-integration/snapshots/signTransactionRemaddress/nanosp.05.png new file mode 100644 index 00000000..f9daa857 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemaddress/nanosp.05.png differ diff --git a/test-integration/snapshots/signTransactionRemaddress/nanosp.06.png b/test-integration/snapshots/signTransactionRemaddress/nanosp.06.png new file mode 100644 index 00000000..07574cbb Binary files /dev/null and b/test-integration/snapshots/signTransactionRemaddress/nanosp.06.png differ diff --git a/test-integration/snapshots/signTransactionRemaddress/nanosp.07.png b/test-integration/snapshots/signTransactionRemaddress/nanosp.07.png new file mode 100644 index 00000000..34e5ceab Binary files /dev/null and b/test-integration/snapshots/signTransactionRemaddress/nanosp.07.png differ diff --git a/test-integration/snapshots/signTransactionRemaddress/nanosp.08.png b/test-integration/snapshots/signTransactionRemaddress/nanosp.08.png new file mode 100644 index 00000000..6f7fe29c Binary files /dev/null and b/test-integration/snapshots/signTransactionRemaddress/nanosp.08.png differ diff --git a/test-integration/snapshots/signTransactionRemaddress/nanosp.09.png b/test-integration/snapshots/signTransactionRemaddress/nanosp.09.png new file mode 100644 index 00000000..8ac15c6d Binary files /dev/null and b/test-integration/snapshots/signTransactionRemaddress/nanosp.09.png differ diff --git a/test-integration/snapshots/signTransactionRemaddress/nanosp.10.png b/test-integration/snapshots/signTransactionRemaddress/nanosp.10.png new file mode 100644 index 00000000..525864b4 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemaddress/nanosp.10.png differ diff --git a/test-integration/snapshots/signTransactionRemaddress/nanosp.11.png b/test-integration/snapshots/signTransactionRemaddress/nanosp.11.png new file mode 100644 index 00000000..a7a87405 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemaddress/nanosp.11.png differ diff --git a/test-integration/snapshots/signTransactionRemaddress/nanosp.12.png b/test-integration/snapshots/signTransactionRemaddress/nanosp.12.png new file mode 100644 index 00000000..8e0d2a37 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemaddress/nanosp.12.png differ diff --git a/test-integration/snapshots/signTransactionRemaddress/nanosp.13.png b/test-integration/snapshots/signTransactionRemaddress/nanosp.13.png new file mode 100644 index 00000000..c61bb216 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemaddress/nanosp.13.png differ diff --git a/test-integration/snapshots/signTransactionRemaddress/nanosp.14.png b/test-integration/snapshots/signTransactionRemaddress/nanosp.14.png new file mode 100644 index 00000000..c1dd7f06 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemaddress/nanosp.14.png differ diff --git a/test-integration/snapshots/signTransactionRemaddress/nanosp.15.png b/test-integration/snapshots/signTransactionRemaddress/nanosp.15.png new file mode 100644 index 00000000..f9daa857 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemaddress/nanosp.15.png differ diff --git a/test-integration/snapshots/signTransactionRemaddress/nanosp.16.png b/test-integration/snapshots/signTransactionRemaddress/nanosp.16.png new file mode 100644 index 00000000..07574cbb Binary files /dev/null and b/test-integration/snapshots/signTransactionRemaddress/nanosp.16.png differ diff --git a/test-integration/snapshots/signTransactionRemaddress/nanosp.17.png b/test-integration/snapshots/signTransactionRemaddress/nanosp.17.png new file mode 100644 index 00000000..5ebc4ffd Binary files /dev/null and b/test-integration/snapshots/signTransactionRemaddress/nanosp.17.png differ diff --git a/test-integration/snapshots/signTransactionRemaddress/nanosp.18.png b/test-integration/snapshots/signTransactionRemaddress/nanosp.18.png new file mode 100644 index 00000000..34e5ceab Binary files /dev/null and b/test-integration/snapshots/signTransactionRemaddress/nanosp.18.png differ diff --git a/test-integration/snapshots/signTransactionRemaddress/nanosp.19.png b/test-integration/snapshots/signTransactionRemaddress/nanosp.19.png new file mode 100644 index 00000000..6f7fe29c Binary files /dev/null and b/test-integration/snapshots/signTransactionRemaddress/nanosp.19.png differ diff --git a/test-integration/snapshots/signTransactionRemaddress/nanosp.20.png b/test-integration/snapshots/signTransactionRemaddress/nanosp.20.png new file mode 100644 index 00000000..8ac15c6d Binary files /dev/null and b/test-integration/snapshots/signTransactionRemaddress/nanosp.20.png differ diff --git a/test-integration/snapshots/signTransactionRemaddress/nanosp.21.png b/test-integration/snapshots/signTransactionRemaddress/nanosp.21.png new file mode 100644 index 00000000..525864b4 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemaddress/nanosp.21.png differ diff --git a/test-integration/snapshots/signTransactionRemaddress/nanosp.22.png b/test-integration/snapshots/signTransactionRemaddress/nanosp.22.png new file mode 100644 index 00000000..a7a87405 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemaddress/nanosp.22.png differ diff --git a/test-integration/snapshots/signTransactionRemaddress/nanosp.23.png b/test-integration/snapshots/signTransactionRemaddress/nanosp.23.png new file mode 100644 index 00000000..8e0d2a37 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemaddress/nanosp.23.png differ diff --git a/test-integration/snapshots/signTransactionRemaddress/nanosp.24.png b/test-integration/snapshots/signTransactionRemaddress/nanosp.24.png new file mode 100644 index 00000000..c61bb216 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemaddress/nanosp.24.png differ diff --git a/test-integration/snapshots/signTransactionRemaddress/nanosp.25.png b/test-integration/snapshots/signTransactionRemaddress/nanosp.25.png new file mode 100644 index 00000000..c1dd7f06 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemaddress/nanosp.25.png differ diff --git a/test-integration/snapshots/signTransactionRemaddress/nanosp.26.png b/test-integration/snapshots/signTransactionRemaddress/nanosp.26.png new file mode 100644 index 00000000..f9daa857 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemaddress/nanosp.26.png differ diff --git a/test-integration/snapshots/signTransactionRemaddress/nanosp.27.png b/test-integration/snapshots/signTransactionRemaddress/nanosp.27.png new file mode 100644 index 00000000..07574cbb Binary files /dev/null and b/test-integration/snapshots/signTransactionRemaddress/nanosp.27.png differ diff --git a/test-integration/snapshots/signTransactionRemaddress/nanosp.28.png b/test-integration/snapshots/signTransactionRemaddress/nanosp.28.png new file mode 100644 index 00000000..5ebc4ffd Binary files /dev/null and b/test-integration/snapshots/signTransactionRemaddress/nanosp.28.png differ diff --git a/test-integration/snapshots/signTransactionRemaddress/nanosp.29.png b/test-integration/snapshots/signTransactionRemaddress/nanosp.29.png new file mode 100644 index 00000000..9dd74af9 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemaddress/nanosp.29.png differ diff --git a/test-integration/snapshots/signTransactionRemaddress/nanosp.30.png b/test-integration/snapshots/signTransactionRemaddress/nanosp.30.png new file mode 100644 index 00000000..34e5ceab Binary files /dev/null and b/test-integration/snapshots/signTransactionRemaddress/nanosp.30.png differ diff --git a/test-integration/snapshots/signTransactionRemaddress/nanosp.31.png b/test-integration/snapshots/signTransactionRemaddress/nanosp.31.png new file mode 100644 index 00000000..6f7fe29c Binary files /dev/null and b/test-integration/snapshots/signTransactionRemaddress/nanosp.31.png differ diff --git a/test-integration/snapshots/signTransactionRemaddress/nanosp.32.png b/test-integration/snapshots/signTransactionRemaddress/nanosp.32.png new file mode 100644 index 00000000..8ac15c6d Binary files /dev/null and b/test-integration/snapshots/signTransactionRemaddress/nanosp.32.png differ diff --git a/test-integration/snapshots/signTransactionRemaddress/nanosp.33.png b/test-integration/snapshots/signTransactionRemaddress/nanosp.33.png new file mode 100644 index 00000000..525864b4 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemaddress/nanosp.33.png differ diff --git a/test-integration/snapshots/signTransactionRemaddress/nanosp.34.png b/test-integration/snapshots/signTransactionRemaddress/nanosp.34.png new file mode 100644 index 00000000..a7a87405 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemaddress/nanosp.34.png differ diff --git a/test-integration/snapshots/signTransactionRemaddress/nanosp.35.png b/test-integration/snapshots/signTransactionRemaddress/nanosp.35.png new file mode 100644 index 00000000..8e0d2a37 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemaddress/nanosp.35.png differ diff --git a/test-integration/snapshots/signTransactionRemaddress/nanosp.36.png b/test-integration/snapshots/signTransactionRemaddress/nanosp.36.png new file mode 100644 index 00000000..c61bb216 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemaddress/nanosp.36.png differ diff --git a/test-integration/snapshots/signTransactionRemaddress/nanosp.37.png b/test-integration/snapshots/signTransactionRemaddress/nanosp.37.png new file mode 100644 index 00000000..c1dd7f06 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemaddress/nanosp.37.png differ diff --git a/test-integration/snapshots/signTransactionRemaddress/nanosp.38.png b/test-integration/snapshots/signTransactionRemaddress/nanosp.38.png new file mode 100644 index 00000000..f9daa857 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemaddress/nanosp.38.png differ diff --git a/test-integration/snapshots/signTransactionRemaddress/nanosp.39.png b/test-integration/snapshots/signTransactionRemaddress/nanosp.39.png new file mode 100644 index 00000000..07574cbb Binary files /dev/null and b/test-integration/snapshots/signTransactionRemaddress/nanosp.39.png differ diff --git a/test-integration/snapshots/signTransactionRemaddress/nanosp.40.png b/test-integration/snapshots/signTransactionRemaddress/nanosp.40.png new file mode 100644 index 00000000..5ebc4ffd Binary files /dev/null and b/test-integration/snapshots/signTransactionRemaddress/nanosp.40.png differ diff --git a/test-integration/snapshots/signTransactionRemaddress/nanosp.41.png b/test-integration/snapshots/signTransactionRemaddress/nanosp.41.png new file mode 100644 index 00000000..9dd74af9 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemaddress/nanosp.41.png differ diff --git a/test-integration/snapshots/signTransactionRemaddress/nanosp.42.png b/test-integration/snapshots/signTransactionRemaddress/nanosp.42.png new file mode 100644 index 00000000..85bc4b28 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemaddress/nanosp.42.png differ diff --git a/test-integration/snapshots/signTransactionRemaddress/nanosp.43.png b/test-integration/snapshots/signTransactionRemaddress/nanosp.43.png new file mode 100644 index 00000000..34e5ceab Binary files /dev/null and b/test-integration/snapshots/signTransactionRemaddress/nanosp.43.png differ diff --git a/test-integration/snapshots/signTransactionRemaddress/nanosp.44.png b/test-integration/snapshots/signTransactionRemaddress/nanosp.44.png new file mode 100644 index 00000000..6f7fe29c Binary files /dev/null and b/test-integration/snapshots/signTransactionRemaddress/nanosp.44.png differ diff --git a/test-integration/snapshots/signTransactionRemaddress/nanosp.45.png b/test-integration/snapshots/signTransactionRemaddress/nanosp.45.png new file mode 100644 index 00000000..8ac15c6d Binary files /dev/null and b/test-integration/snapshots/signTransactionRemaddress/nanosp.45.png differ diff --git a/test-integration/snapshots/signTransactionRemaddress/nanosp.46.png b/test-integration/snapshots/signTransactionRemaddress/nanosp.46.png new file mode 100644 index 00000000..525864b4 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemaddress/nanosp.46.png differ diff --git a/test-integration/snapshots/signTransactionRemaddress/nanosp.47.png b/test-integration/snapshots/signTransactionRemaddress/nanosp.47.png new file mode 100644 index 00000000..a7a87405 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemaddress/nanosp.47.png differ diff --git a/test-integration/snapshots/signTransactionRemaddress/nanosp.48.png b/test-integration/snapshots/signTransactionRemaddress/nanosp.48.png new file mode 100644 index 00000000..8e0d2a37 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemaddress/nanosp.48.png differ diff --git a/test-integration/snapshots/signTransactionRemaddress/nanosp.49.png b/test-integration/snapshots/signTransactionRemaddress/nanosp.49.png new file mode 100644 index 00000000..c61bb216 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemaddress/nanosp.49.png differ diff --git a/test-integration/snapshots/signTransactionRemaddress/nanosp.50.png b/test-integration/snapshots/signTransactionRemaddress/nanosp.50.png new file mode 100644 index 00000000..c1dd7f06 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemaddress/nanosp.50.png differ diff --git a/test-integration/snapshots/signTransactionRemaddress/nanosp.51.png b/test-integration/snapshots/signTransactionRemaddress/nanosp.51.png new file mode 100644 index 00000000..f9daa857 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemaddress/nanosp.51.png differ diff --git a/test-integration/snapshots/signTransactionRemaddress/nanosp.52.png b/test-integration/snapshots/signTransactionRemaddress/nanosp.52.png new file mode 100644 index 00000000..07574cbb Binary files /dev/null and b/test-integration/snapshots/signTransactionRemaddress/nanosp.52.png differ diff --git a/test-integration/snapshots/signTransactionRemaddress/nanosp.53.png b/test-integration/snapshots/signTransactionRemaddress/nanosp.53.png new file mode 100644 index 00000000..5ebc4ffd Binary files /dev/null and b/test-integration/snapshots/signTransactionRemaddress/nanosp.53.png differ diff --git a/test-integration/snapshots/signTransactionRemaddress/nanosp.54.png b/test-integration/snapshots/signTransactionRemaddress/nanosp.54.png new file mode 100644 index 00000000..9dd74af9 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemaddress/nanosp.54.png differ diff --git a/test-integration/snapshots/signTransactionRemaddress/nanosp.55.png b/test-integration/snapshots/signTransactionRemaddress/nanosp.55.png new file mode 100644 index 00000000..85bc4b28 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemaddress/nanosp.55.png differ diff --git a/test-integration/snapshots/signTransactionRemaddress/nanosp.56.png b/test-integration/snapshots/signTransactionRemaddress/nanosp.56.png new file mode 100644 index 00000000..19b3df1d Binary files /dev/null and b/test-integration/snapshots/signTransactionRemaddress/nanosp.56.png differ diff --git a/test-integration/snapshots/signTransactionRemaddress/nanosp.57.png b/test-integration/snapshots/signTransactionRemaddress/nanosp.57.png new file mode 100644 index 00000000..34e5ceab Binary files /dev/null and b/test-integration/snapshots/signTransactionRemaddress/nanosp.57.png differ diff --git a/test-integration/snapshots/signTransactionRemaddress/nanosp.58.png b/test-integration/snapshots/signTransactionRemaddress/nanosp.58.png new file mode 100644 index 00000000..6f7fe29c Binary files /dev/null and b/test-integration/snapshots/signTransactionRemaddress/nanosp.58.png differ diff --git a/test-integration/snapshots/signTransactionRemaddress/nanosp.59.png b/test-integration/snapshots/signTransactionRemaddress/nanosp.59.png new file mode 100644 index 00000000..8ac15c6d Binary files /dev/null and b/test-integration/snapshots/signTransactionRemaddress/nanosp.59.png differ diff --git a/test-integration/snapshots/signTransactionRemaddress/nanosp.60.png b/test-integration/snapshots/signTransactionRemaddress/nanosp.60.png new file mode 100644 index 00000000..525864b4 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemaddress/nanosp.60.png differ diff --git a/test-integration/snapshots/signTransactionRemaddress/nanosp.61.png b/test-integration/snapshots/signTransactionRemaddress/nanosp.61.png new file mode 100644 index 00000000..a7a87405 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemaddress/nanosp.61.png differ diff --git a/test-integration/snapshots/signTransactionRemaddress/nanox.01.png b/test-integration/snapshots/signTransactionRemaddress/nanox.01.png new file mode 100644 index 00000000..c843773c Binary files /dev/null and b/test-integration/snapshots/signTransactionRemaddress/nanox.01.png differ diff --git a/test-integration/snapshots/signTransactionRemaddress/nanox.02.png b/test-integration/snapshots/signTransactionRemaddress/nanox.02.png new file mode 100644 index 00000000..ada3168c Binary files /dev/null and b/test-integration/snapshots/signTransactionRemaddress/nanox.02.png differ diff --git a/test-integration/snapshots/signTransactionRemaddress/nanox.03.png b/test-integration/snapshots/signTransactionRemaddress/nanox.03.png new file mode 100644 index 00000000..55dcee1f Binary files /dev/null and b/test-integration/snapshots/signTransactionRemaddress/nanox.03.png differ diff --git a/test-integration/snapshots/signTransactionRemaddress/nanox.04.png b/test-integration/snapshots/signTransactionRemaddress/nanox.04.png new file mode 100644 index 00000000..c90cc3d9 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemaddress/nanox.04.png differ diff --git a/test-integration/snapshots/signTransactionRemaddress/nanox.05.png b/test-integration/snapshots/signTransactionRemaddress/nanox.05.png new file mode 100644 index 00000000..432c6913 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemaddress/nanox.05.png differ diff --git a/test-integration/snapshots/signTransactionRemaddress/nanox.06.png b/test-integration/snapshots/signTransactionRemaddress/nanox.06.png new file mode 100644 index 00000000..335e8e79 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemaddress/nanox.06.png differ diff --git a/test-integration/snapshots/signTransactionRemaddress/nanox.07.png b/test-integration/snapshots/signTransactionRemaddress/nanox.07.png new file mode 100644 index 00000000..34e5ceab Binary files /dev/null and b/test-integration/snapshots/signTransactionRemaddress/nanox.07.png differ diff --git a/test-integration/snapshots/signTransactionRemaddress/nanox.08.png b/test-integration/snapshots/signTransactionRemaddress/nanox.08.png new file mode 100644 index 00000000..4b4b7f83 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemaddress/nanox.08.png differ diff --git a/test-integration/snapshots/signTransactionRemaddress/nanox.09.png b/test-integration/snapshots/signTransactionRemaddress/nanox.09.png new file mode 100644 index 00000000..5d0997ef Binary files /dev/null and b/test-integration/snapshots/signTransactionRemaddress/nanox.09.png differ diff --git a/test-integration/snapshots/signTransactionRemaddress/nanox.10.png b/test-integration/snapshots/signTransactionRemaddress/nanox.10.png new file mode 100644 index 00000000..2f8f58e6 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemaddress/nanox.10.png differ diff --git a/test-integration/snapshots/signTransactionRemaddress/nanox.11.png b/test-integration/snapshots/signTransactionRemaddress/nanox.11.png new file mode 100644 index 00000000..c843773c Binary files /dev/null and b/test-integration/snapshots/signTransactionRemaddress/nanox.11.png differ diff --git a/test-integration/snapshots/signTransactionRemaddress/nanox.12.png b/test-integration/snapshots/signTransactionRemaddress/nanox.12.png new file mode 100644 index 00000000..8e0d2a37 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemaddress/nanox.12.png differ diff --git a/test-integration/snapshots/signTransactionRemaddress/nanox.13.png b/test-integration/snapshots/signTransactionRemaddress/nanox.13.png new file mode 100644 index 00000000..55dcee1f Binary files /dev/null and b/test-integration/snapshots/signTransactionRemaddress/nanox.13.png differ diff --git a/test-integration/snapshots/signTransactionRemaddress/nanox.14.png b/test-integration/snapshots/signTransactionRemaddress/nanox.14.png new file mode 100644 index 00000000..c90cc3d9 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemaddress/nanox.14.png differ diff --git a/test-integration/snapshots/signTransactionRemaddress/nanox.15.png b/test-integration/snapshots/signTransactionRemaddress/nanox.15.png new file mode 100644 index 00000000..432c6913 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemaddress/nanox.15.png differ diff --git a/test-integration/snapshots/signTransactionRemaddress/nanox.16.png b/test-integration/snapshots/signTransactionRemaddress/nanox.16.png new file mode 100644 index 00000000..335e8e79 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemaddress/nanox.16.png differ diff --git a/test-integration/snapshots/signTransactionRemaddress/nanox.17.png b/test-integration/snapshots/signTransactionRemaddress/nanox.17.png new file mode 100644 index 00000000..24d42318 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemaddress/nanox.17.png differ diff --git a/test-integration/snapshots/signTransactionRemaddress/nanox.18.png b/test-integration/snapshots/signTransactionRemaddress/nanox.18.png new file mode 100644 index 00000000..34e5ceab Binary files /dev/null and b/test-integration/snapshots/signTransactionRemaddress/nanox.18.png differ diff --git a/test-integration/snapshots/signTransactionRemaddress/nanox.19.png b/test-integration/snapshots/signTransactionRemaddress/nanox.19.png new file mode 100644 index 00000000..4b4b7f83 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemaddress/nanox.19.png differ diff --git a/test-integration/snapshots/signTransactionRemaddress/nanox.20.png b/test-integration/snapshots/signTransactionRemaddress/nanox.20.png new file mode 100644 index 00000000..5d0997ef Binary files /dev/null and b/test-integration/snapshots/signTransactionRemaddress/nanox.20.png differ diff --git a/test-integration/snapshots/signTransactionRemaddress/nanox.21.png b/test-integration/snapshots/signTransactionRemaddress/nanox.21.png new file mode 100644 index 00000000..2f8f58e6 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemaddress/nanox.21.png differ diff --git a/test-integration/snapshots/signTransactionRemaddress/nanox.22.png b/test-integration/snapshots/signTransactionRemaddress/nanox.22.png new file mode 100644 index 00000000..c843773c Binary files /dev/null and b/test-integration/snapshots/signTransactionRemaddress/nanox.22.png differ diff --git a/test-integration/snapshots/signTransactionRemaddress/nanox.23.png b/test-integration/snapshots/signTransactionRemaddress/nanox.23.png new file mode 100644 index 00000000..8e0d2a37 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemaddress/nanox.23.png differ diff --git a/test-integration/snapshots/signTransactionRemaddress/nanox.24.png b/test-integration/snapshots/signTransactionRemaddress/nanox.24.png new file mode 100644 index 00000000..55dcee1f Binary files /dev/null and b/test-integration/snapshots/signTransactionRemaddress/nanox.24.png differ diff --git a/test-integration/snapshots/signTransactionRemaddress/nanox.25.png b/test-integration/snapshots/signTransactionRemaddress/nanox.25.png new file mode 100644 index 00000000..c90cc3d9 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemaddress/nanox.25.png differ diff --git a/test-integration/snapshots/signTransactionRemaddress/nanox.26.png b/test-integration/snapshots/signTransactionRemaddress/nanox.26.png new file mode 100644 index 00000000..432c6913 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemaddress/nanox.26.png differ diff --git a/test-integration/snapshots/signTransactionRemaddress/nanox.27.png b/test-integration/snapshots/signTransactionRemaddress/nanox.27.png new file mode 100644 index 00000000..335e8e79 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemaddress/nanox.27.png differ diff --git a/test-integration/snapshots/signTransactionRemaddress/nanox.28.png b/test-integration/snapshots/signTransactionRemaddress/nanox.28.png new file mode 100644 index 00000000..24d42318 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemaddress/nanox.28.png differ diff --git a/test-integration/snapshots/signTransactionRemaddress/nanox.29.png b/test-integration/snapshots/signTransactionRemaddress/nanox.29.png new file mode 100644 index 00000000..997b97fb Binary files /dev/null and b/test-integration/snapshots/signTransactionRemaddress/nanox.29.png differ diff --git a/test-integration/snapshots/signTransactionRemaddress/nanox.30.png b/test-integration/snapshots/signTransactionRemaddress/nanox.30.png new file mode 100644 index 00000000..34e5ceab Binary files /dev/null and b/test-integration/snapshots/signTransactionRemaddress/nanox.30.png differ diff --git a/test-integration/snapshots/signTransactionRemaddress/nanox.31.png b/test-integration/snapshots/signTransactionRemaddress/nanox.31.png new file mode 100644 index 00000000..4b4b7f83 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemaddress/nanox.31.png differ diff --git a/test-integration/snapshots/signTransactionRemaddress/nanox.32.png b/test-integration/snapshots/signTransactionRemaddress/nanox.32.png new file mode 100644 index 00000000..5d0997ef Binary files /dev/null and b/test-integration/snapshots/signTransactionRemaddress/nanox.32.png differ diff --git a/test-integration/snapshots/signTransactionRemaddress/nanox.33.png b/test-integration/snapshots/signTransactionRemaddress/nanox.33.png new file mode 100644 index 00000000..2f8f58e6 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemaddress/nanox.33.png differ diff --git a/test-integration/snapshots/signTransactionRemaddress/nanox.34.png b/test-integration/snapshots/signTransactionRemaddress/nanox.34.png new file mode 100644 index 00000000..c843773c Binary files /dev/null and b/test-integration/snapshots/signTransactionRemaddress/nanox.34.png differ diff --git a/test-integration/snapshots/signTransactionRemaddress/nanox.35.png b/test-integration/snapshots/signTransactionRemaddress/nanox.35.png new file mode 100644 index 00000000..8e0d2a37 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemaddress/nanox.35.png differ diff --git a/test-integration/snapshots/signTransactionRemaddress/nanox.36.png b/test-integration/snapshots/signTransactionRemaddress/nanox.36.png new file mode 100644 index 00000000..55dcee1f Binary files /dev/null and b/test-integration/snapshots/signTransactionRemaddress/nanox.36.png differ diff --git a/test-integration/snapshots/signTransactionRemaddress/nanox.37.png b/test-integration/snapshots/signTransactionRemaddress/nanox.37.png new file mode 100644 index 00000000..c90cc3d9 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemaddress/nanox.37.png differ diff --git a/test-integration/snapshots/signTransactionRemaddress/nanox.38.png b/test-integration/snapshots/signTransactionRemaddress/nanox.38.png new file mode 100644 index 00000000..432c6913 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemaddress/nanox.38.png differ diff --git a/test-integration/snapshots/signTransactionRemaddress/nanox.39.png b/test-integration/snapshots/signTransactionRemaddress/nanox.39.png new file mode 100644 index 00000000..335e8e79 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemaddress/nanox.39.png differ diff --git a/test-integration/snapshots/signTransactionRemaddress/nanox.40.png b/test-integration/snapshots/signTransactionRemaddress/nanox.40.png new file mode 100644 index 00000000..24d42318 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemaddress/nanox.40.png differ diff --git a/test-integration/snapshots/signTransactionRemaddress/nanox.41.png b/test-integration/snapshots/signTransactionRemaddress/nanox.41.png new file mode 100644 index 00000000..997b97fb Binary files /dev/null and b/test-integration/snapshots/signTransactionRemaddress/nanox.41.png differ diff --git a/test-integration/snapshots/signTransactionRemaddress/nanox.42.png b/test-integration/snapshots/signTransactionRemaddress/nanox.42.png new file mode 100644 index 00000000..8325832e Binary files /dev/null and b/test-integration/snapshots/signTransactionRemaddress/nanox.42.png differ diff --git a/test-integration/snapshots/signTransactionRemaddress/nanox.43.png b/test-integration/snapshots/signTransactionRemaddress/nanox.43.png new file mode 100644 index 00000000..34e5ceab Binary files /dev/null and b/test-integration/snapshots/signTransactionRemaddress/nanox.43.png differ diff --git a/test-integration/snapshots/signTransactionRemaddress/nanox.44.png b/test-integration/snapshots/signTransactionRemaddress/nanox.44.png new file mode 100644 index 00000000..4b4b7f83 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemaddress/nanox.44.png differ diff --git a/test-integration/snapshots/signTransactionRemaddress/nanox.45.png b/test-integration/snapshots/signTransactionRemaddress/nanox.45.png new file mode 100644 index 00000000..5d0997ef Binary files /dev/null and b/test-integration/snapshots/signTransactionRemaddress/nanox.45.png differ diff --git a/test-integration/snapshots/signTransactionRemaddress/nanox.46.png b/test-integration/snapshots/signTransactionRemaddress/nanox.46.png new file mode 100644 index 00000000..2f8f58e6 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemaddress/nanox.46.png differ diff --git a/test-integration/snapshots/signTransactionRemaddress/nanox.47.png b/test-integration/snapshots/signTransactionRemaddress/nanox.47.png new file mode 100644 index 00000000..c843773c Binary files /dev/null and b/test-integration/snapshots/signTransactionRemaddress/nanox.47.png differ diff --git a/test-integration/snapshots/signTransactionRemaddress/nanox.48.png b/test-integration/snapshots/signTransactionRemaddress/nanox.48.png new file mode 100644 index 00000000..8e0d2a37 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemaddress/nanox.48.png differ diff --git a/test-integration/snapshots/signTransactionRemaddress/nanox.49.png b/test-integration/snapshots/signTransactionRemaddress/nanox.49.png new file mode 100644 index 00000000..55dcee1f Binary files /dev/null and b/test-integration/snapshots/signTransactionRemaddress/nanox.49.png differ diff --git a/test-integration/snapshots/signTransactionRemaddress/nanox.50.png b/test-integration/snapshots/signTransactionRemaddress/nanox.50.png new file mode 100644 index 00000000..c90cc3d9 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemaddress/nanox.50.png differ diff --git a/test-integration/snapshots/signTransactionRemaddress/nanox.51.png b/test-integration/snapshots/signTransactionRemaddress/nanox.51.png new file mode 100644 index 00000000..432c6913 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemaddress/nanox.51.png differ diff --git a/test-integration/snapshots/signTransactionRemaddress/nanox.52.png b/test-integration/snapshots/signTransactionRemaddress/nanox.52.png new file mode 100644 index 00000000..335e8e79 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemaddress/nanox.52.png differ diff --git a/test-integration/snapshots/signTransactionRemaddress/nanox.53.png b/test-integration/snapshots/signTransactionRemaddress/nanox.53.png new file mode 100644 index 00000000..24d42318 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemaddress/nanox.53.png differ diff --git a/test-integration/snapshots/signTransactionRemaddress/nanox.54.png b/test-integration/snapshots/signTransactionRemaddress/nanox.54.png new file mode 100644 index 00000000..997b97fb Binary files /dev/null and b/test-integration/snapshots/signTransactionRemaddress/nanox.54.png differ diff --git a/test-integration/snapshots/signTransactionRemaddress/nanox.55.png b/test-integration/snapshots/signTransactionRemaddress/nanox.55.png new file mode 100644 index 00000000..8325832e Binary files /dev/null and b/test-integration/snapshots/signTransactionRemaddress/nanox.55.png differ diff --git a/test-integration/snapshots/signTransactionRemaddress/nanox.56.png b/test-integration/snapshots/signTransactionRemaddress/nanox.56.png new file mode 100644 index 00000000..de6400e6 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemaddress/nanox.56.png differ diff --git a/test-integration/snapshots/signTransactionRemaddress/nanox.57.png b/test-integration/snapshots/signTransactionRemaddress/nanox.57.png new file mode 100644 index 00000000..34e5ceab Binary files /dev/null and b/test-integration/snapshots/signTransactionRemaddress/nanox.57.png differ diff --git a/test-integration/snapshots/signTransactionRemaddress/nanox.58.png b/test-integration/snapshots/signTransactionRemaddress/nanox.58.png new file mode 100644 index 00000000..4b4b7f83 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemaddress/nanox.58.png differ diff --git a/test-integration/snapshots/signTransactionRemaddress/nanox.59.png b/test-integration/snapshots/signTransactionRemaddress/nanox.59.png new file mode 100644 index 00000000..5d0997ef Binary files /dev/null and b/test-integration/snapshots/signTransactionRemaddress/nanox.59.png differ diff --git a/test-integration/snapshots/signTransactionRemaddress/nanox.60.png b/test-integration/snapshots/signTransactionRemaddress/nanox.60.png new file mode 100644 index 00000000..2f8f58e6 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemaddress/nanox.60.png differ diff --git a/test-integration/snapshots/signTransactionRemaddress/nanox.61.png b/test-integration/snapshots/signTransactionRemaddress/nanox.61.png new file mode 100644 index 00000000..c843773c Binary files /dev/null and b/test-integration/snapshots/signTransactionRemaddress/nanox.61.png differ diff --git a/test-integration/snapshots/signTransactionRemnft/nanos.01.png b/test-integration/snapshots/signTransactionRemnft/nanos.01.png new file mode 100644 index 00000000..a0f9b734 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemnft/nanos.01.png differ diff --git a/test-integration/snapshots/signTransactionRemnft/nanos.02.png b/test-integration/snapshots/signTransactionRemnft/nanos.02.png new file mode 100644 index 00000000..076a821e Binary files /dev/null and b/test-integration/snapshots/signTransactionRemnft/nanos.02.png differ diff --git a/test-integration/snapshots/signTransactionRemnft/nanos.03.png b/test-integration/snapshots/signTransactionRemnft/nanos.03.png new file mode 100644 index 00000000..2c164fd2 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemnft/nanos.03.png differ diff --git a/test-integration/snapshots/signTransactionRemnft/nanos.04.png b/test-integration/snapshots/signTransactionRemnft/nanos.04.png new file mode 100644 index 00000000..961c0c11 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemnft/nanos.04.png differ diff --git a/test-integration/snapshots/signTransactionRemnft/nanos.05.png b/test-integration/snapshots/signTransactionRemnft/nanos.05.png new file mode 100644 index 00000000..3408c80d Binary files /dev/null and b/test-integration/snapshots/signTransactionRemnft/nanos.05.png differ diff --git a/test-integration/snapshots/signTransactionRemnft/nanos.06.png b/test-integration/snapshots/signTransactionRemnft/nanos.06.png new file mode 100644 index 00000000..5ad55e09 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemnft/nanos.06.png differ diff --git a/test-integration/snapshots/signTransactionRemnft/nanos.07.png b/test-integration/snapshots/signTransactionRemnft/nanos.07.png new file mode 100644 index 00000000..b7c85496 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemnft/nanos.07.png differ diff --git a/test-integration/snapshots/signTransactionRemnft/nanos.08.png b/test-integration/snapshots/signTransactionRemnft/nanos.08.png new file mode 100644 index 00000000..afef6551 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemnft/nanos.08.png differ diff --git a/test-integration/snapshots/signTransactionRemnft/nanos.09.png b/test-integration/snapshots/signTransactionRemnft/nanos.09.png new file mode 100644 index 00000000..b42d7b08 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemnft/nanos.09.png differ diff --git a/test-integration/snapshots/signTransactionRemnft/nanos.10.png b/test-integration/snapshots/signTransactionRemnft/nanos.10.png new file mode 100644 index 00000000..d1eac39e Binary files /dev/null and b/test-integration/snapshots/signTransactionRemnft/nanos.10.png differ diff --git a/test-integration/snapshots/signTransactionRemnft/nanos.11.png b/test-integration/snapshots/signTransactionRemnft/nanos.11.png new file mode 100644 index 00000000..c9de0604 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemnft/nanos.11.png differ diff --git a/test-integration/snapshots/signTransactionRemnft/nanos.12.png b/test-integration/snapshots/signTransactionRemnft/nanos.12.png new file mode 100644 index 00000000..a0f9b734 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemnft/nanos.12.png differ diff --git a/test-integration/snapshots/signTransactionRemnft/nanos.13.png b/test-integration/snapshots/signTransactionRemnft/nanos.13.png new file mode 100644 index 00000000..06140342 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemnft/nanos.13.png differ diff --git a/test-integration/snapshots/signTransactionRemnft/nanos.14.png b/test-integration/snapshots/signTransactionRemnft/nanos.14.png new file mode 100644 index 00000000..2c164fd2 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemnft/nanos.14.png differ diff --git a/test-integration/snapshots/signTransactionRemnft/nanos.15.png b/test-integration/snapshots/signTransactionRemnft/nanos.15.png new file mode 100644 index 00000000..961c0c11 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemnft/nanos.15.png differ diff --git a/test-integration/snapshots/signTransactionRemnft/nanos.16.png b/test-integration/snapshots/signTransactionRemnft/nanos.16.png new file mode 100644 index 00000000..3408c80d Binary files /dev/null and b/test-integration/snapshots/signTransactionRemnft/nanos.16.png differ diff --git a/test-integration/snapshots/signTransactionRemnft/nanos.17.png b/test-integration/snapshots/signTransactionRemnft/nanos.17.png new file mode 100644 index 00000000..5ad55e09 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemnft/nanos.17.png differ diff --git a/test-integration/snapshots/signTransactionRemnft/nanos.18.png b/test-integration/snapshots/signTransactionRemnft/nanos.18.png new file mode 100644 index 00000000..b7c85496 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemnft/nanos.18.png differ diff --git a/test-integration/snapshots/signTransactionRemnft/nanos.19.png b/test-integration/snapshots/signTransactionRemnft/nanos.19.png new file mode 100644 index 00000000..afef6551 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemnft/nanos.19.png differ diff --git a/test-integration/snapshots/signTransactionRemnft/nanos.20.png b/test-integration/snapshots/signTransactionRemnft/nanos.20.png new file mode 100644 index 00000000..448e15cb Binary files /dev/null and b/test-integration/snapshots/signTransactionRemnft/nanos.20.png differ diff --git a/test-integration/snapshots/signTransactionRemnft/nanos.21.png b/test-integration/snapshots/signTransactionRemnft/nanos.21.png new file mode 100644 index 00000000..48bd8f6b Binary files /dev/null and b/test-integration/snapshots/signTransactionRemnft/nanos.21.png differ diff --git a/test-integration/snapshots/signTransactionRemnft/nanos.22.png b/test-integration/snapshots/signTransactionRemnft/nanos.22.png new file mode 100644 index 00000000..bd19cd61 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemnft/nanos.22.png differ diff --git a/test-integration/snapshots/signTransactionRemnft/nanos.23.png b/test-integration/snapshots/signTransactionRemnft/nanos.23.png new file mode 100644 index 00000000..226d954b Binary files /dev/null and b/test-integration/snapshots/signTransactionRemnft/nanos.23.png differ diff --git a/test-integration/snapshots/signTransactionRemnft/nanos.24.png b/test-integration/snapshots/signTransactionRemnft/nanos.24.png new file mode 100644 index 00000000..b42d7b08 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemnft/nanos.24.png differ diff --git a/test-integration/snapshots/signTransactionRemnft/nanos.25.png b/test-integration/snapshots/signTransactionRemnft/nanos.25.png new file mode 100644 index 00000000..d1eac39e Binary files /dev/null and b/test-integration/snapshots/signTransactionRemnft/nanos.25.png differ diff --git a/test-integration/snapshots/signTransactionRemnft/nanos.26.png b/test-integration/snapshots/signTransactionRemnft/nanos.26.png new file mode 100644 index 00000000..c9de0604 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemnft/nanos.26.png differ diff --git a/test-integration/snapshots/signTransactionRemnft/nanos.27.png b/test-integration/snapshots/signTransactionRemnft/nanos.27.png new file mode 100644 index 00000000..a0f9b734 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemnft/nanos.27.png differ diff --git a/test-integration/snapshots/signTransactionRemnft/nanos.28.png b/test-integration/snapshots/signTransactionRemnft/nanos.28.png new file mode 100644 index 00000000..06140342 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemnft/nanos.28.png differ diff --git a/test-integration/snapshots/signTransactionRemnft/nanos.29.png b/test-integration/snapshots/signTransactionRemnft/nanos.29.png new file mode 100644 index 00000000..2c164fd2 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemnft/nanos.29.png differ diff --git a/test-integration/snapshots/signTransactionRemnft/nanos.30.png b/test-integration/snapshots/signTransactionRemnft/nanos.30.png new file mode 100644 index 00000000..961c0c11 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemnft/nanos.30.png differ diff --git a/test-integration/snapshots/signTransactionRemnft/nanos.31.png b/test-integration/snapshots/signTransactionRemnft/nanos.31.png new file mode 100644 index 00000000..3408c80d Binary files /dev/null and b/test-integration/snapshots/signTransactionRemnft/nanos.31.png differ diff --git a/test-integration/snapshots/signTransactionRemnft/nanos.32.png b/test-integration/snapshots/signTransactionRemnft/nanos.32.png new file mode 100644 index 00000000..5ad55e09 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemnft/nanos.32.png differ diff --git a/test-integration/snapshots/signTransactionRemnft/nanos.33.png b/test-integration/snapshots/signTransactionRemnft/nanos.33.png new file mode 100644 index 00000000..b7c85496 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemnft/nanos.33.png differ diff --git a/test-integration/snapshots/signTransactionRemnft/nanos.34.png b/test-integration/snapshots/signTransactionRemnft/nanos.34.png new file mode 100644 index 00000000..afef6551 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemnft/nanos.34.png differ diff --git a/test-integration/snapshots/signTransactionRemnft/nanos.35.png b/test-integration/snapshots/signTransactionRemnft/nanos.35.png new file mode 100644 index 00000000..448e15cb Binary files /dev/null and b/test-integration/snapshots/signTransactionRemnft/nanos.35.png differ diff --git a/test-integration/snapshots/signTransactionRemnft/nanos.36.png b/test-integration/snapshots/signTransactionRemnft/nanos.36.png new file mode 100644 index 00000000..48bd8f6b Binary files /dev/null and b/test-integration/snapshots/signTransactionRemnft/nanos.36.png differ diff --git a/test-integration/snapshots/signTransactionRemnft/nanos.37.png b/test-integration/snapshots/signTransactionRemnft/nanos.37.png new file mode 100644 index 00000000..bd19cd61 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemnft/nanos.37.png differ diff --git a/test-integration/snapshots/signTransactionRemnft/nanos.38.png b/test-integration/snapshots/signTransactionRemnft/nanos.38.png new file mode 100644 index 00000000..226d954b Binary files /dev/null and b/test-integration/snapshots/signTransactionRemnft/nanos.38.png differ diff --git a/test-integration/snapshots/signTransactionRemnft/nanos.39.png b/test-integration/snapshots/signTransactionRemnft/nanos.39.png new file mode 100644 index 00000000..a3a5f8f9 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemnft/nanos.39.png differ diff --git a/test-integration/snapshots/signTransactionRemnft/nanos.40.png b/test-integration/snapshots/signTransactionRemnft/nanos.40.png new file mode 100644 index 00000000..3522021d Binary files /dev/null and b/test-integration/snapshots/signTransactionRemnft/nanos.40.png differ diff --git a/test-integration/snapshots/signTransactionRemnft/nanos.41.png b/test-integration/snapshots/signTransactionRemnft/nanos.41.png new file mode 100644 index 00000000..9a00d17e Binary files /dev/null and b/test-integration/snapshots/signTransactionRemnft/nanos.41.png differ diff --git a/test-integration/snapshots/signTransactionRemnft/nanos.42.png b/test-integration/snapshots/signTransactionRemnft/nanos.42.png new file mode 100644 index 00000000..d04d159d Binary files /dev/null and b/test-integration/snapshots/signTransactionRemnft/nanos.42.png differ diff --git a/test-integration/snapshots/signTransactionRemnft/nanos.43.png b/test-integration/snapshots/signTransactionRemnft/nanos.43.png new file mode 100644 index 00000000..b42d7b08 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemnft/nanos.43.png differ diff --git a/test-integration/snapshots/signTransactionRemnft/nanos.44.png b/test-integration/snapshots/signTransactionRemnft/nanos.44.png new file mode 100644 index 00000000..d1eac39e Binary files /dev/null and b/test-integration/snapshots/signTransactionRemnft/nanos.44.png differ diff --git a/test-integration/snapshots/signTransactionRemnft/nanos.45.png b/test-integration/snapshots/signTransactionRemnft/nanos.45.png new file mode 100644 index 00000000..c9de0604 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemnft/nanos.45.png differ diff --git a/test-integration/snapshots/signTransactionRemnft/nanos.46.png b/test-integration/snapshots/signTransactionRemnft/nanos.46.png new file mode 100644 index 00000000..a0f9b734 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemnft/nanos.46.png differ diff --git a/test-integration/snapshots/signTransactionRemnft/nanosp.01.png b/test-integration/snapshots/signTransactionRemnft/nanosp.01.png new file mode 100644 index 00000000..a7a87405 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemnft/nanosp.01.png differ diff --git a/test-integration/snapshots/signTransactionRemnft/nanosp.02.png b/test-integration/snapshots/signTransactionRemnft/nanosp.02.png new file mode 100644 index 00000000..ada3168c Binary files /dev/null and b/test-integration/snapshots/signTransactionRemnft/nanosp.02.png differ diff --git a/test-integration/snapshots/signTransactionRemnft/nanosp.03.png b/test-integration/snapshots/signTransactionRemnft/nanosp.03.png new file mode 100644 index 00000000..b91be3ad Binary files /dev/null and b/test-integration/snapshots/signTransactionRemnft/nanosp.03.png differ diff --git a/test-integration/snapshots/signTransactionRemnft/nanosp.04.png b/test-integration/snapshots/signTransactionRemnft/nanosp.04.png new file mode 100644 index 00000000..c1dd7f06 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemnft/nanosp.04.png differ diff --git a/test-integration/snapshots/signTransactionRemnft/nanosp.05.png b/test-integration/snapshots/signTransactionRemnft/nanosp.05.png new file mode 100644 index 00000000..f9daa857 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemnft/nanosp.05.png differ diff --git a/test-integration/snapshots/signTransactionRemnft/nanosp.06.png b/test-integration/snapshots/signTransactionRemnft/nanosp.06.png new file mode 100644 index 00000000..3a4a3270 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemnft/nanosp.06.png differ diff --git a/test-integration/snapshots/signTransactionRemnft/nanosp.07.png b/test-integration/snapshots/signTransactionRemnft/nanosp.07.png new file mode 100644 index 00000000..d3fc7747 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemnft/nanosp.07.png differ diff --git a/test-integration/snapshots/signTransactionRemnft/nanosp.08.png b/test-integration/snapshots/signTransactionRemnft/nanosp.08.png new file mode 100644 index 00000000..928e1056 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemnft/nanosp.08.png differ diff --git a/test-integration/snapshots/signTransactionRemnft/nanosp.09.png b/test-integration/snapshots/signTransactionRemnft/nanosp.09.png new file mode 100644 index 00000000..c3ac3fd8 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemnft/nanosp.09.png differ diff --git a/test-integration/snapshots/signTransactionRemnft/nanosp.10.png b/test-integration/snapshots/signTransactionRemnft/nanosp.10.png new file mode 100644 index 00000000..34e5ceab Binary files /dev/null and b/test-integration/snapshots/signTransactionRemnft/nanosp.10.png differ diff --git a/test-integration/snapshots/signTransactionRemnft/nanosp.11.png b/test-integration/snapshots/signTransactionRemnft/nanosp.11.png new file mode 100644 index 00000000..6f7fe29c Binary files /dev/null and b/test-integration/snapshots/signTransactionRemnft/nanosp.11.png differ diff --git a/test-integration/snapshots/signTransactionRemnft/nanosp.12.png b/test-integration/snapshots/signTransactionRemnft/nanosp.12.png new file mode 100644 index 00000000..8ac15c6d Binary files /dev/null and b/test-integration/snapshots/signTransactionRemnft/nanosp.12.png differ diff --git a/test-integration/snapshots/signTransactionRemnft/nanosp.13.png b/test-integration/snapshots/signTransactionRemnft/nanosp.13.png new file mode 100644 index 00000000..525864b4 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemnft/nanosp.13.png differ diff --git a/test-integration/snapshots/signTransactionRemnft/nanosp.14.png b/test-integration/snapshots/signTransactionRemnft/nanosp.14.png new file mode 100644 index 00000000..a7a87405 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemnft/nanosp.14.png differ diff --git a/test-integration/snapshots/signTransactionRemnft/nanosp.15.png b/test-integration/snapshots/signTransactionRemnft/nanosp.15.png new file mode 100644 index 00000000..8e0d2a37 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemnft/nanosp.15.png differ diff --git a/test-integration/snapshots/signTransactionRemnft/nanosp.16.png b/test-integration/snapshots/signTransactionRemnft/nanosp.16.png new file mode 100644 index 00000000..b91be3ad Binary files /dev/null and b/test-integration/snapshots/signTransactionRemnft/nanosp.16.png differ diff --git a/test-integration/snapshots/signTransactionRemnft/nanosp.17.png b/test-integration/snapshots/signTransactionRemnft/nanosp.17.png new file mode 100644 index 00000000..c1dd7f06 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemnft/nanosp.17.png differ diff --git a/test-integration/snapshots/signTransactionRemnft/nanosp.18.png b/test-integration/snapshots/signTransactionRemnft/nanosp.18.png new file mode 100644 index 00000000..f9daa857 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemnft/nanosp.18.png differ diff --git a/test-integration/snapshots/signTransactionRemnft/nanosp.19.png b/test-integration/snapshots/signTransactionRemnft/nanosp.19.png new file mode 100644 index 00000000..3a4a3270 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemnft/nanosp.19.png differ diff --git a/test-integration/snapshots/signTransactionRemnft/nanosp.20.png b/test-integration/snapshots/signTransactionRemnft/nanosp.20.png new file mode 100644 index 00000000..d3fc7747 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemnft/nanosp.20.png differ diff --git a/test-integration/snapshots/signTransactionRemnft/nanosp.21.png b/test-integration/snapshots/signTransactionRemnft/nanosp.21.png new file mode 100644 index 00000000..928e1056 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemnft/nanosp.21.png differ diff --git a/test-integration/snapshots/signTransactionRemnft/nanosp.22.png b/test-integration/snapshots/signTransactionRemnft/nanosp.22.png new file mode 100644 index 00000000..c3ac3fd8 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemnft/nanosp.22.png differ diff --git a/test-integration/snapshots/signTransactionRemnft/nanosp.23.png b/test-integration/snapshots/signTransactionRemnft/nanosp.23.png new file mode 100644 index 00000000..bbcd093d Binary files /dev/null and b/test-integration/snapshots/signTransactionRemnft/nanosp.23.png differ diff --git a/test-integration/snapshots/signTransactionRemnft/nanosp.24.png b/test-integration/snapshots/signTransactionRemnft/nanosp.24.png new file mode 100644 index 00000000..0816ce82 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemnft/nanosp.24.png differ diff --git a/test-integration/snapshots/signTransactionRemnft/nanosp.25.png b/test-integration/snapshots/signTransactionRemnft/nanosp.25.png new file mode 100644 index 00000000..e17bdfa9 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemnft/nanosp.25.png differ diff --git a/test-integration/snapshots/signTransactionRemnft/nanosp.26.png b/test-integration/snapshots/signTransactionRemnft/nanosp.26.png new file mode 100644 index 00000000..174e77ab Binary files /dev/null and b/test-integration/snapshots/signTransactionRemnft/nanosp.26.png differ diff --git a/test-integration/snapshots/signTransactionRemnft/nanosp.27.png b/test-integration/snapshots/signTransactionRemnft/nanosp.27.png new file mode 100644 index 00000000..34e5ceab Binary files /dev/null and b/test-integration/snapshots/signTransactionRemnft/nanosp.27.png differ diff --git a/test-integration/snapshots/signTransactionRemnft/nanosp.28.png b/test-integration/snapshots/signTransactionRemnft/nanosp.28.png new file mode 100644 index 00000000..6f7fe29c Binary files /dev/null and b/test-integration/snapshots/signTransactionRemnft/nanosp.28.png differ diff --git a/test-integration/snapshots/signTransactionRemnft/nanosp.29.png b/test-integration/snapshots/signTransactionRemnft/nanosp.29.png new file mode 100644 index 00000000..8ac15c6d Binary files /dev/null and b/test-integration/snapshots/signTransactionRemnft/nanosp.29.png differ diff --git a/test-integration/snapshots/signTransactionRemnft/nanosp.30.png b/test-integration/snapshots/signTransactionRemnft/nanosp.30.png new file mode 100644 index 00000000..525864b4 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemnft/nanosp.30.png differ diff --git a/test-integration/snapshots/signTransactionRemnft/nanosp.31.png b/test-integration/snapshots/signTransactionRemnft/nanosp.31.png new file mode 100644 index 00000000..a7a87405 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemnft/nanosp.31.png differ diff --git a/test-integration/snapshots/signTransactionRemnft/nanosp.32.png b/test-integration/snapshots/signTransactionRemnft/nanosp.32.png new file mode 100644 index 00000000..8e0d2a37 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemnft/nanosp.32.png differ diff --git a/test-integration/snapshots/signTransactionRemnft/nanosp.33.png b/test-integration/snapshots/signTransactionRemnft/nanosp.33.png new file mode 100644 index 00000000..b91be3ad Binary files /dev/null and b/test-integration/snapshots/signTransactionRemnft/nanosp.33.png differ diff --git a/test-integration/snapshots/signTransactionRemnft/nanosp.34.png b/test-integration/snapshots/signTransactionRemnft/nanosp.34.png new file mode 100644 index 00000000..c1dd7f06 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemnft/nanosp.34.png differ diff --git a/test-integration/snapshots/signTransactionRemnft/nanosp.35.png b/test-integration/snapshots/signTransactionRemnft/nanosp.35.png new file mode 100644 index 00000000..f9daa857 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemnft/nanosp.35.png differ diff --git a/test-integration/snapshots/signTransactionRemnft/nanosp.36.png b/test-integration/snapshots/signTransactionRemnft/nanosp.36.png new file mode 100644 index 00000000..3a4a3270 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemnft/nanosp.36.png differ diff --git a/test-integration/snapshots/signTransactionRemnft/nanosp.37.png b/test-integration/snapshots/signTransactionRemnft/nanosp.37.png new file mode 100644 index 00000000..d3fc7747 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemnft/nanosp.37.png differ diff --git a/test-integration/snapshots/signTransactionRemnft/nanosp.38.png b/test-integration/snapshots/signTransactionRemnft/nanosp.38.png new file mode 100644 index 00000000..928e1056 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemnft/nanosp.38.png differ diff --git a/test-integration/snapshots/signTransactionRemnft/nanosp.39.png b/test-integration/snapshots/signTransactionRemnft/nanosp.39.png new file mode 100644 index 00000000..c3ac3fd8 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemnft/nanosp.39.png differ diff --git a/test-integration/snapshots/signTransactionRemnft/nanosp.40.png b/test-integration/snapshots/signTransactionRemnft/nanosp.40.png new file mode 100644 index 00000000..bbcd093d Binary files /dev/null and b/test-integration/snapshots/signTransactionRemnft/nanosp.40.png differ diff --git a/test-integration/snapshots/signTransactionRemnft/nanosp.41.png b/test-integration/snapshots/signTransactionRemnft/nanosp.41.png new file mode 100644 index 00000000..0816ce82 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemnft/nanosp.41.png differ diff --git a/test-integration/snapshots/signTransactionRemnft/nanosp.42.png b/test-integration/snapshots/signTransactionRemnft/nanosp.42.png new file mode 100644 index 00000000..e17bdfa9 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemnft/nanosp.42.png differ diff --git a/test-integration/snapshots/signTransactionRemnft/nanosp.43.png b/test-integration/snapshots/signTransactionRemnft/nanosp.43.png new file mode 100644 index 00000000..174e77ab Binary files /dev/null and b/test-integration/snapshots/signTransactionRemnft/nanosp.43.png differ diff --git a/test-integration/snapshots/signTransactionRemnft/nanosp.44.png b/test-integration/snapshots/signTransactionRemnft/nanosp.44.png new file mode 100644 index 00000000..ca5570e4 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemnft/nanosp.44.png differ diff --git a/test-integration/snapshots/signTransactionRemnft/nanosp.45.png b/test-integration/snapshots/signTransactionRemnft/nanosp.45.png new file mode 100644 index 00000000..aed1a686 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemnft/nanosp.45.png differ diff --git a/test-integration/snapshots/signTransactionRemnft/nanosp.46.png b/test-integration/snapshots/signTransactionRemnft/nanosp.46.png new file mode 100644 index 00000000..10d3f52b Binary files /dev/null and b/test-integration/snapshots/signTransactionRemnft/nanosp.46.png differ diff --git a/test-integration/snapshots/signTransactionRemnft/nanosp.47.png b/test-integration/snapshots/signTransactionRemnft/nanosp.47.png new file mode 100644 index 00000000..557725c6 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemnft/nanosp.47.png differ diff --git a/test-integration/snapshots/signTransactionRemnft/nanosp.48.png b/test-integration/snapshots/signTransactionRemnft/nanosp.48.png new file mode 100644 index 00000000..34e5ceab Binary files /dev/null and b/test-integration/snapshots/signTransactionRemnft/nanosp.48.png differ diff --git a/test-integration/snapshots/signTransactionRemnft/nanosp.49.png b/test-integration/snapshots/signTransactionRemnft/nanosp.49.png new file mode 100644 index 00000000..6f7fe29c Binary files /dev/null and b/test-integration/snapshots/signTransactionRemnft/nanosp.49.png differ diff --git a/test-integration/snapshots/signTransactionRemnft/nanosp.50.png b/test-integration/snapshots/signTransactionRemnft/nanosp.50.png new file mode 100644 index 00000000..8ac15c6d Binary files /dev/null and b/test-integration/snapshots/signTransactionRemnft/nanosp.50.png differ diff --git a/test-integration/snapshots/signTransactionRemnft/nanosp.51.png b/test-integration/snapshots/signTransactionRemnft/nanosp.51.png new file mode 100644 index 00000000..525864b4 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemnft/nanosp.51.png differ diff --git a/test-integration/snapshots/signTransactionRemnft/nanosp.52.png b/test-integration/snapshots/signTransactionRemnft/nanosp.52.png new file mode 100644 index 00000000..a7a87405 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemnft/nanosp.52.png differ diff --git a/test-integration/snapshots/signTransactionRemnft/nanox.01.png b/test-integration/snapshots/signTransactionRemnft/nanox.01.png new file mode 100644 index 00000000..c843773c Binary files /dev/null and b/test-integration/snapshots/signTransactionRemnft/nanox.01.png differ diff --git a/test-integration/snapshots/signTransactionRemnft/nanox.02.png b/test-integration/snapshots/signTransactionRemnft/nanox.02.png new file mode 100644 index 00000000..ada3168c Binary files /dev/null and b/test-integration/snapshots/signTransactionRemnft/nanox.02.png differ diff --git a/test-integration/snapshots/signTransactionRemnft/nanox.03.png b/test-integration/snapshots/signTransactionRemnft/nanox.03.png new file mode 100644 index 00000000..b91be3ad Binary files /dev/null and b/test-integration/snapshots/signTransactionRemnft/nanox.03.png differ diff --git a/test-integration/snapshots/signTransactionRemnft/nanox.04.png b/test-integration/snapshots/signTransactionRemnft/nanox.04.png new file mode 100644 index 00000000..c90cc3d9 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemnft/nanox.04.png differ diff --git a/test-integration/snapshots/signTransactionRemnft/nanox.05.png b/test-integration/snapshots/signTransactionRemnft/nanox.05.png new file mode 100644 index 00000000..432c6913 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemnft/nanox.05.png differ diff --git a/test-integration/snapshots/signTransactionRemnft/nanox.06.png b/test-integration/snapshots/signTransactionRemnft/nanox.06.png new file mode 100644 index 00000000..272e4d1b Binary files /dev/null and b/test-integration/snapshots/signTransactionRemnft/nanox.06.png differ diff --git a/test-integration/snapshots/signTransactionRemnft/nanox.07.png b/test-integration/snapshots/signTransactionRemnft/nanox.07.png new file mode 100644 index 00000000..d3fc7747 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemnft/nanox.07.png differ diff --git a/test-integration/snapshots/signTransactionRemnft/nanox.08.png b/test-integration/snapshots/signTransactionRemnft/nanox.08.png new file mode 100644 index 00000000..2f9e9a54 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemnft/nanox.08.png differ diff --git a/test-integration/snapshots/signTransactionRemnft/nanox.09.png b/test-integration/snapshots/signTransactionRemnft/nanox.09.png new file mode 100644 index 00000000..c3ac3fd8 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemnft/nanox.09.png differ diff --git a/test-integration/snapshots/signTransactionRemnft/nanox.10.png b/test-integration/snapshots/signTransactionRemnft/nanox.10.png new file mode 100644 index 00000000..34e5ceab Binary files /dev/null and b/test-integration/snapshots/signTransactionRemnft/nanox.10.png differ diff --git a/test-integration/snapshots/signTransactionRemnft/nanox.11.png b/test-integration/snapshots/signTransactionRemnft/nanox.11.png new file mode 100644 index 00000000..4b4b7f83 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemnft/nanox.11.png differ diff --git a/test-integration/snapshots/signTransactionRemnft/nanox.12.png b/test-integration/snapshots/signTransactionRemnft/nanox.12.png new file mode 100644 index 00000000..5d0997ef Binary files /dev/null and b/test-integration/snapshots/signTransactionRemnft/nanox.12.png differ diff --git a/test-integration/snapshots/signTransactionRemnft/nanox.13.png b/test-integration/snapshots/signTransactionRemnft/nanox.13.png new file mode 100644 index 00000000..2f8f58e6 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemnft/nanox.13.png differ diff --git a/test-integration/snapshots/signTransactionRemnft/nanox.14.png b/test-integration/snapshots/signTransactionRemnft/nanox.14.png new file mode 100644 index 00000000..c843773c Binary files /dev/null and b/test-integration/snapshots/signTransactionRemnft/nanox.14.png differ diff --git a/test-integration/snapshots/signTransactionRemnft/nanox.15.png b/test-integration/snapshots/signTransactionRemnft/nanox.15.png new file mode 100644 index 00000000..8e0d2a37 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemnft/nanox.15.png differ diff --git a/test-integration/snapshots/signTransactionRemnft/nanox.16.png b/test-integration/snapshots/signTransactionRemnft/nanox.16.png new file mode 100644 index 00000000..b91be3ad Binary files /dev/null and b/test-integration/snapshots/signTransactionRemnft/nanox.16.png differ diff --git a/test-integration/snapshots/signTransactionRemnft/nanox.17.png b/test-integration/snapshots/signTransactionRemnft/nanox.17.png new file mode 100644 index 00000000..c90cc3d9 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemnft/nanox.17.png differ diff --git a/test-integration/snapshots/signTransactionRemnft/nanox.18.png b/test-integration/snapshots/signTransactionRemnft/nanox.18.png new file mode 100644 index 00000000..432c6913 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemnft/nanox.18.png differ diff --git a/test-integration/snapshots/signTransactionRemnft/nanox.19.png b/test-integration/snapshots/signTransactionRemnft/nanox.19.png new file mode 100644 index 00000000..272e4d1b Binary files /dev/null and b/test-integration/snapshots/signTransactionRemnft/nanox.19.png differ diff --git a/test-integration/snapshots/signTransactionRemnft/nanox.20.png b/test-integration/snapshots/signTransactionRemnft/nanox.20.png new file mode 100644 index 00000000..d3fc7747 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemnft/nanox.20.png differ diff --git a/test-integration/snapshots/signTransactionRemnft/nanox.21.png b/test-integration/snapshots/signTransactionRemnft/nanox.21.png new file mode 100644 index 00000000..2f9e9a54 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemnft/nanox.21.png differ diff --git a/test-integration/snapshots/signTransactionRemnft/nanox.22.png b/test-integration/snapshots/signTransactionRemnft/nanox.22.png new file mode 100644 index 00000000..c3ac3fd8 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemnft/nanox.22.png differ diff --git a/test-integration/snapshots/signTransactionRemnft/nanox.23.png b/test-integration/snapshots/signTransactionRemnft/nanox.23.png new file mode 100644 index 00000000..c52915e3 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemnft/nanox.23.png differ diff --git a/test-integration/snapshots/signTransactionRemnft/nanox.24.png b/test-integration/snapshots/signTransactionRemnft/nanox.24.png new file mode 100644 index 00000000..0816ce82 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemnft/nanox.24.png differ diff --git a/test-integration/snapshots/signTransactionRemnft/nanox.25.png b/test-integration/snapshots/signTransactionRemnft/nanox.25.png new file mode 100644 index 00000000..9b9ae3db Binary files /dev/null and b/test-integration/snapshots/signTransactionRemnft/nanox.25.png differ diff --git a/test-integration/snapshots/signTransactionRemnft/nanox.26.png b/test-integration/snapshots/signTransactionRemnft/nanox.26.png new file mode 100644 index 00000000..174e77ab Binary files /dev/null and b/test-integration/snapshots/signTransactionRemnft/nanox.26.png differ diff --git a/test-integration/snapshots/signTransactionRemnft/nanox.27.png b/test-integration/snapshots/signTransactionRemnft/nanox.27.png new file mode 100644 index 00000000..34e5ceab Binary files /dev/null and b/test-integration/snapshots/signTransactionRemnft/nanox.27.png differ diff --git a/test-integration/snapshots/signTransactionRemnft/nanox.28.png b/test-integration/snapshots/signTransactionRemnft/nanox.28.png new file mode 100644 index 00000000..4b4b7f83 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemnft/nanox.28.png differ diff --git a/test-integration/snapshots/signTransactionRemnft/nanox.29.png b/test-integration/snapshots/signTransactionRemnft/nanox.29.png new file mode 100644 index 00000000..5d0997ef Binary files /dev/null and b/test-integration/snapshots/signTransactionRemnft/nanox.29.png differ diff --git a/test-integration/snapshots/signTransactionRemnft/nanox.30.png b/test-integration/snapshots/signTransactionRemnft/nanox.30.png new file mode 100644 index 00000000..2f8f58e6 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemnft/nanox.30.png differ diff --git a/test-integration/snapshots/signTransactionRemnft/nanox.31.png b/test-integration/snapshots/signTransactionRemnft/nanox.31.png new file mode 100644 index 00000000..c843773c Binary files /dev/null and b/test-integration/snapshots/signTransactionRemnft/nanox.31.png differ diff --git a/test-integration/snapshots/signTransactionRemnft/nanox.32.png b/test-integration/snapshots/signTransactionRemnft/nanox.32.png new file mode 100644 index 00000000..8e0d2a37 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemnft/nanox.32.png differ diff --git a/test-integration/snapshots/signTransactionRemnft/nanox.33.png b/test-integration/snapshots/signTransactionRemnft/nanox.33.png new file mode 100644 index 00000000..b91be3ad Binary files /dev/null and b/test-integration/snapshots/signTransactionRemnft/nanox.33.png differ diff --git a/test-integration/snapshots/signTransactionRemnft/nanox.34.png b/test-integration/snapshots/signTransactionRemnft/nanox.34.png new file mode 100644 index 00000000..c90cc3d9 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemnft/nanox.34.png differ diff --git a/test-integration/snapshots/signTransactionRemnft/nanox.35.png b/test-integration/snapshots/signTransactionRemnft/nanox.35.png new file mode 100644 index 00000000..432c6913 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemnft/nanox.35.png differ diff --git a/test-integration/snapshots/signTransactionRemnft/nanox.36.png b/test-integration/snapshots/signTransactionRemnft/nanox.36.png new file mode 100644 index 00000000..272e4d1b Binary files /dev/null and b/test-integration/snapshots/signTransactionRemnft/nanox.36.png differ diff --git a/test-integration/snapshots/signTransactionRemnft/nanox.37.png b/test-integration/snapshots/signTransactionRemnft/nanox.37.png new file mode 100644 index 00000000..d3fc7747 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemnft/nanox.37.png differ diff --git a/test-integration/snapshots/signTransactionRemnft/nanox.38.png b/test-integration/snapshots/signTransactionRemnft/nanox.38.png new file mode 100644 index 00000000..2f9e9a54 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemnft/nanox.38.png differ diff --git a/test-integration/snapshots/signTransactionRemnft/nanox.39.png b/test-integration/snapshots/signTransactionRemnft/nanox.39.png new file mode 100644 index 00000000..c3ac3fd8 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemnft/nanox.39.png differ diff --git a/test-integration/snapshots/signTransactionRemnft/nanox.40.png b/test-integration/snapshots/signTransactionRemnft/nanox.40.png new file mode 100644 index 00000000..c52915e3 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemnft/nanox.40.png differ diff --git a/test-integration/snapshots/signTransactionRemnft/nanox.41.png b/test-integration/snapshots/signTransactionRemnft/nanox.41.png new file mode 100644 index 00000000..0816ce82 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemnft/nanox.41.png differ diff --git a/test-integration/snapshots/signTransactionRemnft/nanox.42.png b/test-integration/snapshots/signTransactionRemnft/nanox.42.png new file mode 100644 index 00000000..9b9ae3db Binary files /dev/null and b/test-integration/snapshots/signTransactionRemnft/nanox.42.png differ diff --git a/test-integration/snapshots/signTransactionRemnft/nanox.43.png b/test-integration/snapshots/signTransactionRemnft/nanox.43.png new file mode 100644 index 00000000..174e77ab Binary files /dev/null and b/test-integration/snapshots/signTransactionRemnft/nanox.43.png differ diff --git a/test-integration/snapshots/signTransactionRemnft/nanox.44.png b/test-integration/snapshots/signTransactionRemnft/nanox.44.png new file mode 100644 index 00000000..b1caf4f0 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemnft/nanox.44.png differ diff --git a/test-integration/snapshots/signTransactionRemnft/nanox.45.png b/test-integration/snapshots/signTransactionRemnft/nanox.45.png new file mode 100644 index 00000000..aed1a686 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemnft/nanox.45.png differ diff --git a/test-integration/snapshots/signTransactionRemnft/nanox.46.png b/test-integration/snapshots/signTransactionRemnft/nanox.46.png new file mode 100644 index 00000000..266dd530 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemnft/nanox.46.png differ diff --git a/test-integration/snapshots/signTransactionRemnft/nanox.47.png b/test-integration/snapshots/signTransactionRemnft/nanox.47.png new file mode 100644 index 00000000..557725c6 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemnft/nanox.47.png differ diff --git a/test-integration/snapshots/signTransactionRemnft/nanox.48.png b/test-integration/snapshots/signTransactionRemnft/nanox.48.png new file mode 100644 index 00000000..34e5ceab Binary files /dev/null and b/test-integration/snapshots/signTransactionRemnft/nanox.48.png differ diff --git a/test-integration/snapshots/signTransactionRemnft/nanox.49.png b/test-integration/snapshots/signTransactionRemnft/nanox.49.png new file mode 100644 index 00000000..4b4b7f83 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemnft/nanox.49.png differ diff --git a/test-integration/snapshots/signTransactionRemnft/nanox.50.png b/test-integration/snapshots/signTransactionRemnft/nanox.50.png new file mode 100644 index 00000000..5d0997ef Binary files /dev/null and b/test-integration/snapshots/signTransactionRemnft/nanox.50.png differ diff --git a/test-integration/snapshots/signTransactionRemnft/nanox.51.png b/test-integration/snapshots/signTransactionRemnft/nanox.51.png new file mode 100644 index 00000000..2f8f58e6 Binary files /dev/null and b/test-integration/snapshots/signTransactionRemnft/nanox.51.png differ diff --git a/test-integration/snapshots/signTransactionRemnft/nanox.52.png b/test-integration/snapshots/signTransactionRemnft/nanox.52.png new file mode 100644 index 00000000..c843773c Binary files /dev/null and b/test-integration/snapshots/signTransactionRemnft/nanox.52.png differ diff --git a/test-integration/snapshots/signTransactionTrnsfiopubky/nanos.01.png b/test-integration/snapshots/signTransactionTrnsfiopubky/nanos.01.png new file mode 100644 index 00000000..a0f9b734 Binary files /dev/null and b/test-integration/snapshots/signTransactionTrnsfiopubky/nanos.01.png differ diff --git a/test-integration/snapshots/signTransactionTrnsfiopubky/nanos.02.png b/test-integration/snapshots/signTransactionTrnsfiopubky/nanos.02.png new file mode 100644 index 00000000..076a821e Binary files /dev/null and b/test-integration/snapshots/signTransactionTrnsfiopubky/nanos.02.png differ diff --git a/test-integration/snapshots/signTransactionTrnsfiopubky/nanos.03.png b/test-integration/snapshots/signTransactionTrnsfiopubky/nanos.03.png new file mode 100644 index 00000000..4207e747 Binary files /dev/null and b/test-integration/snapshots/signTransactionTrnsfiopubky/nanos.03.png differ diff --git a/test-integration/snapshots/signTransactionTrnsfiopubky/nanos.04.png b/test-integration/snapshots/signTransactionTrnsfiopubky/nanos.04.png new file mode 100644 index 00000000..8471f1af Binary files /dev/null and b/test-integration/snapshots/signTransactionTrnsfiopubky/nanos.04.png differ diff --git a/test-integration/snapshots/signTransactionTrnsfiopubky/nanos.05.png b/test-integration/snapshots/signTransactionTrnsfiopubky/nanos.05.png new file mode 100644 index 00000000..5a0a1a84 Binary files /dev/null and b/test-integration/snapshots/signTransactionTrnsfiopubky/nanos.05.png differ diff --git a/test-integration/snapshots/signTransactionTrnsfiopubky/nanos.06.png b/test-integration/snapshots/signTransactionTrnsfiopubky/nanos.06.png new file mode 100644 index 00000000..b42d7b08 Binary files /dev/null and b/test-integration/snapshots/signTransactionTrnsfiopubky/nanos.06.png differ diff --git a/test-integration/snapshots/signTransactionTrnsfiopubky/nanos.07.png b/test-integration/snapshots/signTransactionTrnsfiopubky/nanos.07.png new file mode 100644 index 00000000..d1eac39e Binary files /dev/null and b/test-integration/snapshots/signTransactionTrnsfiopubky/nanos.07.png differ diff --git a/test-integration/snapshots/signTransactionTrnsfiopubky/nanos.08.png b/test-integration/snapshots/signTransactionTrnsfiopubky/nanos.08.png new file mode 100644 index 00000000..c9de0604 Binary files /dev/null and b/test-integration/snapshots/signTransactionTrnsfiopubky/nanos.08.png differ diff --git a/test-integration/snapshots/signTransactionTrnsfiopubky/nanos.09.png b/test-integration/snapshots/signTransactionTrnsfiopubky/nanos.09.png new file mode 100644 index 00000000..a0f9b734 Binary files /dev/null and b/test-integration/snapshots/signTransactionTrnsfiopubky/nanos.09.png differ diff --git a/test-integration/snapshots/signTransactionTrnsfiopubky/nanos.10.png b/test-integration/snapshots/signTransactionTrnsfiopubky/nanos.10.png new file mode 100644 index 00000000..06140342 Binary files /dev/null and b/test-integration/snapshots/signTransactionTrnsfiopubky/nanos.10.png differ diff --git a/test-integration/snapshots/signTransactionTrnsfiopubky/nanos.11.png b/test-integration/snapshots/signTransactionTrnsfiopubky/nanos.11.png new file mode 100644 index 00000000..4207e747 Binary files /dev/null and b/test-integration/snapshots/signTransactionTrnsfiopubky/nanos.11.png differ diff --git a/test-integration/snapshots/signTransactionTrnsfiopubky/nanos.12.png b/test-integration/snapshots/signTransactionTrnsfiopubky/nanos.12.png new file mode 100644 index 00000000..8471f1af Binary files /dev/null and b/test-integration/snapshots/signTransactionTrnsfiopubky/nanos.12.png differ diff --git a/test-integration/snapshots/signTransactionTrnsfiopubky/nanos.13.png b/test-integration/snapshots/signTransactionTrnsfiopubky/nanos.13.png new file mode 100644 index 00000000..5a0a1a84 Binary files /dev/null and b/test-integration/snapshots/signTransactionTrnsfiopubky/nanos.13.png differ diff --git a/test-integration/snapshots/signTransactionTrnsfiopubky/nanos.14.png b/test-integration/snapshots/signTransactionTrnsfiopubky/nanos.14.png new file mode 100644 index 00000000..b42d7b08 Binary files /dev/null and b/test-integration/snapshots/signTransactionTrnsfiopubky/nanos.14.png differ diff --git a/test-integration/snapshots/signTransactionTrnsfiopubky/nanos.15.png b/test-integration/snapshots/signTransactionTrnsfiopubky/nanos.15.png new file mode 100644 index 00000000..d1eac39e Binary files /dev/null and b/test-integration/snapshots/signTransactionTrnsfiopubky/nanos.15.png differ diff --git a/test-integration/snapshots/signTransactionTrnsfiopubky/nanos.16.png b/test-integration/snapshots/signTransactionTrnsfiopubky/nanos.16.png new file mode 100644 index 00000000..c9de0604 Binary files /dev/null and b/test-integration/snapshots/signTransactionTrnsfiopubky/nanos.16.png differ diff --git a/test-integration/snapshots/signTransactionTrnsfiopubky/nanos.17.png b/test-integration/snapshots/signTransactionTrnsfiopubky/nanos.17.png new file mode 100644 index 00000000..a0f9b734 Binary files /dev/null and b/test-integration/snapshots/signTransactionTrnsfiopubky/nanos.17.png differ diff --git a/test-integration/snapshots/signTransactionTrnsfiopubky/nanos.18.png b/test-integration/snapshots/signTransactionTrnsfiopubky/nanos.18.png new file mode 100644 index 00000000..076a821e Binary files /dev/null and b/test-integration/snapshots/signTransactionTrnsfiopubky/nanos.18.png differ diff --git a/test-integration/snapshots/signTransactionTrnsfiopubky/nanos.19.png b/test-integration/snapshots/signTransactionTrnsfiopubky/nanos.19.png new file mode 100644 index 00000000..4207e747 Binary files /dev/null and b/test-integration/snapshots/signTransactionTrnsfiopubky/nanos.19.png differ diff --git a/test-integration/snapshots/signTransactionTrnsfiopubky/nanos.20.png b/test-integration/snapshots/signTransactionTrnsfiopubky/nanos.20.png new file mode 100644 index 00000000..8471f1af Binary files /dev/null and b/test-integration/snapshots/signTransactionTrnsfiopubky/nanos.20.png differ diff --git a/test-integration/snapshots/signTransactionTrnsfiopubky/nanos.21.png b/test-integration/snapshots/signTransactionTrnsfiopubky/nanos.21.png new file mode 100644 index 00000000..5a0a1a84 Binary files /dev/null and b/test-integration/snapshots/signTransactionTrnsfiopubky/nanos.21.png differ diff --git a/test-integration/snapshots/signTransactionTrnsfiopubky/nanos.22.png b/test-integration/snapshots/signTransactionTrnsfiopubky/nanos.22.png new file mode 100644 index 00000000..b42d7b08 Binary files /dev/null and b/test-integration/snapshots/signTransactionTrnsfiopubky/nanos.22.png differ diff --git a/test-integration/snapshots/signTransactionTrnsfiopubky/nanos.23.png b/test-integration/snapshots/signTransactionTrnsfiopubky/nanos.23.png new file mode 100644 index 00000000..d1eac39e Binary files /dev/null and b/test-integration/snapshots/signTransactionTrnsfiopubky/nanos.23.png differ diff --git a/test-integration/snapshots/signTransactionTrnsfiopubky/nanos.24.png b/test-integration/snapshots/signTransactionTrnsfiopubky/nanos.24.png new file mode 100644 index 00000000..c9de0604 Binary files /dev/null and b/test-integration/snapshots/signTransactionTrnsfiopubky/nanos.24.png differ diff --git a/test-integration/snapshots/signTransactionTrnsfiopubky/nanos.25.png b/test-integration/snapshots/signTransactionTrnsfiopubky/nanos.25.png new file mode 100644 index 00000000..a0f9b734 Binary files /dev/null and b/test-integration/snapshots/signTransactionTrnsfiopubky/nanos.25.png differ diff --git a/test-integration/snapshots/signTransactionTrnsfiopubky/nanos.26.png b/test-integration/snapshots/signTransactionTrnsfiopubky/nanos.26.png new file mode 100644 index 00000000..06140342 Binary files /dev/null and b/test-integration/snapshots/signTransactionTrnsfiopubky/nanos.26.png differ diff --git a/test-integration/snapshots/signTransactionTrnsfiopubky/nanos.27.png b/test-integration/snapshots/signTransactionTrnsfiopubky/nanos.27.png new file mode 100644 index 00000000..4207e747 Binary files /dev/null and b/test-integration/snapshots/signTransactionTrnsfiopubky/nanos.27.png differ diff --git a/test-integration/snapshots/signTransactionTrnsfiopubky/nanos.28.png b/test-integration/snapshots/signTransactionTrnsfiopubky/nanos.28.png new file mode 100644 index 00000000..8471f1af Binary files /dev/null and b/test-integration/snapshots/signTransactionTrnsfiopubky/nanos.28.png differ diff --git a/test-integration/snapshots/signTransactionTrnsfiopubky/nanos.29.png b/test-integration/snapshots/signTransactionTrnsfiopubky/nanos.29.png new file mode 100644 index 00000000..1185fd8b Binary files /dev/null and b/test-integration/snapshots/signTransactionTrnsfiopubky/nanos.29.png differ diff --git a/test-integration/snapshots/signTransactionTrnsfiopubky/nanos.30.png b/test-integration/snapshots/signTransactionTrnsfiopubky/nanos.30.png new file mode 100644 index 00000000..6b6c6779 Binary files /dev/null and b/test-integration/snapshots/signTransactionTrnsfiopubky/nanos.30.png differ diff --git a/test-integration/snapshots/signTransactionTrnsfiopubky/nanos.31.png b/test-integration/snapshots/signTransactionTrnsfiopubky/nanos.31.png new file mode 100644 index 00000000..d1eac39e Binary files /dev/null and b/test-integration/snapshots/signTransactionTrnsfiopubky/nanos.31.png differ diff --git a/test-integration/snapshots/signTransactionTrnsfiopubky/nanos.32.png b/test-integration/snapshots/signTransactionTrnsfiopubky/nanos.32.png new file mode 100644 index 00000000..c9de0604 Binary files /dev/null and b/test-integration/snapshots/signTransactionTrnsfiopubky/nanos.32.png differ diff --git a/test-integration/snapshots/signTransactionTrnsfiopubky/nanos.33.png b/test-integration/snapshots/signTransactionTrnsfiopubky/nanos.33.png new file mode 100644 index 00000000..a0f9b734 Binary files /dev/null and b/test-integration/snapshots/signTransactionTrnsfiopubky/nanos.33.png differ diff --git a/test-integration/snapshots/signTransactionTrnsfiopubky/nanosp.01.png b/test-integration/snapshots/signTransactionTrnsfiopubky/nanosp.01.png new file mode 100644 index 00000000..a7a87405 Binary files /dev/null and b/test-integration/snapshots/signTransactionTrnsfiopubky/nanosp.01.png differ diff --git a/test-integration/snapshots/signTransactionTrnsfiopubky/nanosp.02.png b/test-integration/snapshots/signTransactionTrnsfiopubky/nanosp.02.png new file mode 100644 index 00000000..ada3168c Binary files /dev/null and b/test-integration/snapshots/signTransactionTrnsfiopubky/nanosp.02.png differ diff --git a/test-integration/snapshots/signTransactionTrnsfiopubky/nanosp.03.png b/test-integration/snapshots/signTransactionTrnsfiopubky/nanosp.03.png new file mode 100644 index 00000000..bc3de69c Binary files /dev/null and b/test-integration/snapshots/signTransactionTrnsfiopubky/nanosp.03.png differ diff --git a/test-integration/snapshots/signTransactionTrnsfiopubky/nanosp.04.png b/test-integration/snapshots/signTransactionTrnsfiopubky/nanosp.04.png new file mode 100644 index 00000000..8aa5b6b6 Binary files /dev/null and b/test-integration/snapshots/signTransactionTrnsfiopubky/nanosp.04.png differ diff --git a/test-integration/snapshots/signTransactionTrnsfiopubky/nanosp.05.png b/test-integration/snapshots/signTransactionTrnsfiopubky/nanosp.05.png new file mode 100644 index 00000000..225672c1 Binary files /dev/null and b/test-integration/snapshots/signTransactionTrnsfiopubky/nanosp.05.png differ diff --git a/test-integration/snapshots/signTransactionTrnsfiopubky/nanosp.06.png b/test-integration/snapshots/signTransactionTrnsfiopubky/nanosp.06.png new file mode 100644 index 00000000..ee12bc00 Binary files /dev/null and b/test-integration/snapshots/signTransactionTrnsfiopubky/nanosp.06.png differ diff --git a/test-integration/snapshots/signTransactionTrnsfiopubky/nanosp.07.png b/test-integration/snapshots/signTransactionTrnsfiopubky/nanosp.07.png new file mode 100644 index 00000000..34e5ceab Binary files /dev/null and b/test-integration/snapshots/signTransactionTrnsfiopubky/nanosp.07.png differ diff --git a/test-integration/snapshots/signTransactionTrnsfiopubky/nanosp.08.png b/test-integration/snapshots/signTransactionTrnsfiopubky/nanosp.08.png new file mode 100644 index 00000000..6f7fe29c Binary files /dev/null and b/test-integration/snapshots/signTransactionTrnsfiopubky/nanosp.08.png differ diff --git a/test-integration/snapshots/signTransactionTrnsfiopubky/nanosp.09.png b/test-integration/snapshots/signTransactionTrnsfiopubky/nanosp.09.png new file mode 100644 index 00000000..8ac15c6d Binary files /dev/null and b/test-integration/snapshots/signTransactionTrnsfiopubky/nanosp.09.png differ diff --git a/test-integration/snapshots/signTransactionTrnsfiopubky/nanosp.10.png b/test-integration/snapshots/signTransactionTrnsfiopubky/nanosp.10.png new file mode 100644 index 00000000..525864b4 Binary files /dev/null and b/test-integration/snapshots/signTransactionTrnsfiopubky/nanosp.10.png differ diff --git a/test-integration/snapshots/signTransactionTrnsfiopubky/nanosp.11.png b/test-integration/snapshots/signTransactionTrnsfiopubky/nanosp.11.png new file mode 100644 index 00000000..a7a87405 Binary files /dev/null and b/test-integration/snapshots/signTransactionTrnsfiopubky/nanosp.11.png differ diff --git a/test-integration/snapshots/signTransactionTrnsfiopubky/nanosp.12.png b/test-integration/snapshots/signTransactionTrnsfiopubky/nanosp.12.png new file mode 100644 index 00000000..8e0d2a37 Binary files /dev/null and b/test-integration/snapshots/signTransactionTrnsfiopubky/nanosp.12.png differ diff --git a/test-integration/snapshots/signTransactionTrnsfiopubky/nanosp.13.png b/test-integration/snapshots/signTransactionTrnsfiopubky/nanosp.13.png new file mode 100644 index 00000000..bc3de69c Binary files /dev/null and b/test-integration/snapshots/signTransactionTrnsfiopubky/nanosp.13.png differ diff --git a/test-integration/snapshots/signTransactionTrnsfiopubky/nanosp.14.png b/test-integration/snapshots/signTransactionTrnsfiopubky/nanosp.14.png new file mode 100644 index 00000000..8aa5b6b6 Binary files /dev/null and b/test-integration/snapshots/signTransactionTrnsfiopubky/nanosp.14.png differ diff --git a/test-integration/snapshots/signTransactionTrnsfiopubky/nanosp.15.png b/test-integration/snapshots/signTransactionTrnsfiopubky/nanosp.15.png new file mode 100644 index 00000000..225672c1 Binary files /dev/null and b/test-integration/snapshots/signTransactionTrnsfiopubky/nanosp.15.png differ diff --git a/test-integration/snapshots/signTransactionTrnsfiopubky/nanosp.16.png b/test-integration/snapshots/signTransactionTrnsfiopubky/nanosp.16.png new file mode 100644 index 00000000..ee12bc00 Binary files /dev/null and b/test-integration/snapshots/signTransactionTrnsfiopubky/nanosp.16.png differ diff --git a/test-integration/snapshots/signTransactionTrnsfiopubky/nanosp.17.png b/test-integration/snapshots/signTransactionTrnsfiopubky/nanosp.17.png new file mode 100644 index 00000000..34e5ceab Binary files /dev/null and b/test-integration/snapshots/signTransactionTrnsfiopubky/nanosp.17.png differ diff --git a/test-integration/snapshots/signTransactionTrnsfiopubky/nanosp.18.png b/test-integration/snapshots/signTransactionTrnsfiopubky/nanosp.18.png new file mode 100644 index 00000000..6f7fe29c Binary files /dev/null and b/test-integration/snapshots/signTransactionTrnsfiopubky/nanosp.18.png differ diff --git a/test-integration/snapshots/signTransactionTrnsfiopubky/nanosp.19.png b/test-integration/snapshots/signTransactionTrnsfiopubky/nanosp.19.png new file mode 100644 index 00000000..8ac15c6d Binary files /dev/null and b/test-integration/snapshots/signTransactionTrnsfiopubky/nanosp.19.png differ diff --git a/test-integration/snapshots/signTransactionTrnsfiopubky/nanosp.20.png b/test-integration/snapshots/signTransactionTrnsfiopubky/nanosp.20.png new file mode 100644 index 00000000..525864b4 Binary files /dev/null and b/test-integration/snapshots/signTransactionTrnsfiopubky/nanosp.20.png differ diff --git a/test-integration/snapshots/signTransactionTrnsfiopubky/nanosp.21.png b/test-integration/snapshots/signTransactionTrnsfiopubky/nanosp.21.png new file mode 100644 index 00000000..a7a87405 Binary files /dev/null and b/test-integration/snapshots/signTransactionTrnsfiopubky/nanosp.21.png differ diff --git a/test-integration/snapshots/signTransactionTrnsfiopubky/nanosp.22.png b/test-integration/snapshots/signTransactionTrnsfiopubky/nanosp.22.png new file mode 100644 index 00000000..ada3168c Binary files /dev/null and b/test-integration/snapshots/signTransactionTrnsfiopubky/nanosp.22.png differ diff --git a/test-integration/snapshots/signTransactionTrnsfiopubky/nanosp.23.png b/test-integration/snapshots/signTransactionTrnsfiopubky/nanosp.23.png new file mode 100644 index 00000000..bc3de69c Binary files /dev/null and b/test-integration/snapshots/signTransactionTrnsfiopubky/nanosp.23.png differ diff --git a/test-integration/snapshots/signTransactionTrnsfiopubky/nanosp.24.png b/test-integration/snapshots/signTransactionTrnsfiopubky/nanosp.24.png new file mode 100644 index 00000000..8aa5b6b6 Binary files /dev/null and b/test-integration/snapshots/signTransactionTrnsfiopubky/nanosp.24.png differ diff --git a/test-integration/snapshots/signTransactionTrnsfiopubky/nanosp.25.png b/test-integration/snapshots/signTransactionTrnsfiopubky/nanosp.25.png new file mode 100644 index 00000000..225672c1 Binary files /dev/null and b/test-integration/snapshots/signTransactionTrnsfiopubky/nanosp.25.png differ diff --git a/test-integration/snapshots/signTransactionTrnsfiopubky/nanosp.26.png b/test-integration/snapshots/signTransactionTrnsfiopubky/nanosp.26.png new file mode 100644 index 00000000..ee12bc00 Binary files /dev/null and b/test-integration/snapshots/signTransactionTrnsfiopubky/nanosp.26.png differ diff --git a/test-integration/snapshots/signTransactionTrnsfiopubky/nanosp.27.png b/test-integration/snapshots/signTransactionTrnsfiopubky/nanosp.27.png new file mode 100644 index 00000000..34e5ceab Binary files /dev/null and b/test-integration/snapshots/signTransactionTrnsfiopubky/nanosp.27.png differ diff --git a/test-integration/snapshots/signTransactionTrnsfiopubky/nanosp.28.png b/test-integration/snapshots/signTransactionTrnsfiopubky/nanosp.28.png new file mode 100644 index 00000000..6f7fe29c Binary files /dev/null and b/test-integration/snapshots/signTransactionTrnsfiopubky/nanosp.28.png differ diff --git a/test-integration/snapshots/signTransactionTrnsfiopubky/nanosp.29.png b/test-integration/snapshots/signTransactionTrnsfiopubky/nanosp.29.png new file mode 100644 index 00000000..8ac15c6d Binary files /dev/null and b/test-integration/snapshots/signTransactionTrnsfiopubky/nanosp.29.png differ diff --git a/test-integration/snapshots/signTransactionTrnsfiopubky/nanosp.30.png b/test-integration/snapshots/signTransactionTrnsfiopubky/nanosp.30.png new file mode 100644 index 00000000..525864b4 Binary files /dev/null and b/test-integration/snapshots/signTransactionTrnsfiopubky/nanosp.30.png differ diff --git a/test-integration/snapshots/signTransactionTrnsfiopubky/nanosp.31.png b/test-integration/snapshots/signTransactionTrnsfiopubky/nanosp.31.png new file mode 100644 index 00000000..cbdc0a71 Binary files /dev/null and b/test-integration/snapshots/signTransactionTrnsfiopubky/nanosp.31.png differ diff --git a/test-integration/snapshots/signTransactionTrnsfiopubky/nanosp.32.png b/test-integration/snapshots/signTransactionTrnsfiopubky/nanosp.32.png new file mode 100644 index 00000000..a7a87405 Binary files /dev/null and b/test-integration/snapshots/signTransactionTrnsfiopubky/nanosp.32.png differ diff --git a/test-integration/snapshots/signTransactionTrnsfiopubky/nanosp.33.png b/test-integration/snapshots/signTransactionTrnsfiopubky/nanosp.33.png new file mode 100644 index 00000000..8e0d2a37 Binary files /dev/null and b/test-integration/snapshots/signTransactionTrnsfiopubky/nanosp.33.png differ diff --git a/test-integration/snapshots/signTransactionTrnsfiopubky/nanosp.34.png b/test-integration/snapshots/signTransactionTrnsfiopubky/nanosp.34.png new file mode 100644 index 00000000..bc3de69c Binary files /dev/null and b/test-integration/snapshots/signTransactionTrnsfiopubky/nanosp.34.png differ diff --git a/test-integration/snapshots/signTransactionTrnsfiopubky/nanosp.35.png b/test-integration/snapshots/signTransactionTrnsfiopubky/nanosp.35.png new file mode 100644 index 00000000..8aa5b6b6 Binary files /dev/null and b/test-integration/snapshots/signTransactionTrnsfiopubky/nanosp.35.png differ diff --git a/test-integration/snapshots/signTransactionTrnsfiopubky/nanosp.36.png b/test-integration/snapshots/signTransactionTrnsfiopubky/nanosp.36.png new file mode 100644 index 00000000..225672c1 Binary files /dev/null and b/test-integration/snapshots/signTransactionTrnsfiopubky/nanosp.36.png differ diff --git a/test-integration/snapshots/signTransactionTrnsfiopubky/nanosp.37.png b/test-integration/snapshots/signTransactionTrnsfiopubky/nanosp.37.png new file mode 100644 index 00000000..8c676529 Binary files /dev/null and b/test-integration/snapshots/signTransactionTrnsfiopubky/nanosp.37.png differ diff --git a/test-integration/snapshots/signTransactionTrnsfiopubky/nanosp.38.png b/test-integration/snapshots/signTransactionTrnsfiopubky/nanosp.38.png new file mode 100644 index 00000000..4bded1cd Binary files /dev/null and b/test-integration/snapshots/signTransactionTrnsfiopubky/nanosp.38.png differ diff --git a/test-integration/snapshots/signTransactionTrnsfiopubky/nanosp.39.png b/test-integration/snapshots/signTransactionTrnsfiopubky/nanosp.39.png new file mode 100644 index 00000000..6f7fe29c Binary files /dev/null and b/test-integration/snapshots/signTransactionTrnsfiopubky/nanosp.39.png differ diff --git a/test-integration/snapshots/signTransactionTrnsfiopubky/nanosp.40.png b/test-integration/snapshots/signTransactionTrnsfiopubky/nanosp.40.png new file mode 100644 index 00000000..8ac15c6d Binary files /dev/null and b/test-integration/snapshots/signTransactionTrnsfiopubky/nanosp.40.png differ diff --git a/test-integration/snapshots/signTransactionTrnsfiopubky/nanosp.41.png b/test-integration/snapshots/signTransactionTrnsfiopubky/nanosp.41.png new file mode 100644 index 00000000..525864b4 Binary files /dev/null and b/test-integration/snapshots/signTransactionTrnsfiopubky/nanosp.41.png differ diff --git a/test-integration/snapshots/signTransactionTrnsfiopubky/nanosp.42.png b/test-integration/snapshots/signTransactionTrnsfiopubky/nanosp.42.png new file mode 100644 index 00000000..a7a87405 Binary files /dev/null and b/test-integration/snapshots/signTransactionTrnsfiopubky/nanosp.42.png differ diff --git a/test-integration/snapshots/signTransactionTrnsfiopubky/nanox.01.png b/test-integration/snapshots/signTransactionTrnsfiopubky/nanox.01.png new file mode 100644 index 00000000..c843773c Binary files /dev/null and b/test-integration/snapshots/signTransactionTrnsfiopubky/nanox.01.png differ diff --git a/test-integration/snapshots/signTransactionTrnsfiopubky/nanox.02.png b/test-integration/snapshots/signTransactionTrnsfiopubky/nanox.02.png new file mode 100644 index 00000000..ada3168c Binary files /dev/null and b/test-integration/snapshots/signTransactionTrnsfiopubky/nanox.02.png differ diff --git a/test-integration/snapshots/signTransactionTrnsfiopubky/nanox.03.png b/test-integration/snapshots/signTransactionTrnsfiopubky/nanox.03.png new file mode 100644 index 00000000..bc3de69c Binary files /dev/null and b/test-integration/snapshots/signTransactionTrnsfiopubky/nanox.03.png differ diff --git a/test-integration/snapshots/signTransactionTrnsfiopubky/nanox.04.png b/test-integration/snapshots/signTransactionTrnsfiopubky/nanox.04.png new file mode 100644 index 00000000..9ea44041 Binary files /dev/null and b/test-integration/snapshots/signTransactionTrnsfiopubky/nanox.04.png differ diff --git a/test-integration/snapshots/signTransactionTrnsfiopubky/nanox.05.png b/test-integration/snapshots/signTransactionTrnsfiopubky/nanox.05.png new file mode 100644 index 00000000..db499272 Binary files /dev/null and b/test-integration/snapshots/signTransactionTrnsfiopubky/nanox.05.png differ diff --git a/test-integration/snapshots/signTransactionTrnsfiopubky/nanox.06.png b/test-integration/snapshots/signTransactionTrnsfiopubky/nanox.06.png new file mode 100644 index 00000000..ee12bc00 Binary files /dev/null and b/test-integration/snapshots/signTransactionTrnsfiopubky/nanox.06.png differ diff --git a/test-integration/snapshots/signTransactionTrnsfiopubky/nanox.07.png b/test-integration/snapshots/signTransactionTrnsfiopubky/nanox.07.png new file mode 100644 index 00000000..34e5ceab Binary files /dev/null and b/test-integration/snapshots/signTransactionTrnsfiopubky/nanox.07.png differ diff --git a/test-integration/snapshots/signTransactionTrnsfiopubky/nanox.08.png b/test-integration/snapshots/signTransactionTrnsfiopubky/nanox.08.png new file mode 100644 index 00000000..4b4b7f83 Binary files /dev/null and b/test-integration/snapshots/signTransactionTrnsfiopubky/nanox.08.png differ diff --git a/test-integration/snapshots/signTransactionTrnsfiopubky/nanox.09.png b/test-integration/snapshots/signTransactionTrnsfiopubky/nanox.09.png new file mode 100644 index 00000000..5d0997ef Binary files /dev/null and b/test-integration/snapshots/signTransactionTrnsfiopubky/nanox.09.png differ diff --git a/test-integration/snapshots/signTransactionTrnsfiopubky/nanox.10.png b/test-integration/snapshots/signTransactionTrnsfiopubky/nanox.10.png new file mode 100644 index 00000000..2f8f58e6 Binary files /dev/null and b/test-integration/snapshots/signTransactionTrnsfiopubky/nanox.10.png differ diff --git a/test-integration/snapshots/signTransactionTrnsfiopubky/nanox.11.png b/test-integration/snapshots/signTransactionTrnsfiopubky/nanox.11.png new file mode 100644 index 00000000..c843773c Binary files /dev/null and b/test-integration/snapshots/signTransactionTrnsfiopubky/nanox.11.png differ diff --git a/test-integration/snapshots/signTransactionTrnsfiopubky/nanox.12.png b/test-integration/snapshots/signTransactionTrnsfiopubky/nanox.12.png new file mode 100644 index 00000000..8e0d2a37 Binary files /dev/null and b/test-integration/snapshots/signTransactionTrnsfiopubky/nanox.12.png differ diff --git a/test-integration/snapshots/signTransactionTrnsfiopubky/nanox.13.png b/test-integration/snapshots/signTransactionTrnsfiopubky/nanox.13.png new file mode 100644 index 00000000..bc3de69c Binary files /dev/null and b/test-integration/snapshots/signTransactionTrnsfiopubky/nanox.13.png differ diff --git a/test-integration/snapshots/signTransactionTrnsfiopubky/nanox.14.png b/test-integration/snapshots/signTransactionTrnsfiopubky/nanox.14.png new file mode 100644 index 00000000..9ea44041 Binary files /dev/null and b/test-integration/snapshots/signTransactionTrnsfiopubky/nanox.14.png differ diff --git a/test-integration/snapshots/signTransactionTrnsfiopubky/nanox.15.png b/test-integration/snapshots/signTransactionTrnsfiopubky/nanox.15.png new file mode 100644 index 00000000..db499272 Binary files /dev/null and b/test-integration/snapshots/signTransactionTrnsfiopubky/nanox.15.png differ diff --git a/test-integration/snapshots/signTransactionTrnsfiopubky/nanox.16.png b/test-integration/snapshots/signTransactionTrnsfiopubky/nanox.16.png new file mode 100644 index 00000000..ee12bc00 Binary files /dev/null and b/test-integration/snapshots/signTransactionTrnsfiopubky/nanox.16.png differ diff --git a/test-integration/snapshots/signTransactionTrnsfiopubky/nanox.17.png b/test-integration/snapshots/signTransactionTrnsfiopubky/nanox.17.png new file mode 100644 index 00000000..34e5ceab Binary files /dev/null and b/test-integration/snapshots/signTransactionTrnsfiopubky/nanox.17.png differ diff --git a/test-integration/snapshots/signTransactionTrnsfiopubky/nanox.18.png b/test-integration/snapshots/signTransactionTrnsfiopubky/nanox.18.png new file mode 100644 index 00000000..4b4b7f83 Binary files /dev/null and b/test-integration/snapshots/signTransactionTrnsfiopubky/nanox.18.png differ diff --git a/test-integration/snapshots/signTransactionTrnsfiopubky/nanox.19.png b/test-integration/snapshots/signTransactionTrnsfiopubky/nanox.19.png new file mode 100644 index 00000000..5d0997ef Binary files /dev/null and b/test-integration/snapshots/signTransactionTrnsfiopubky/nanox.19.png differ diff --git a/test-integration/snapshots/signTransactionTrnsfiopubky/nanox.20.png b/test-integration/snapshots/signTransactionTrnsfiopubky/nanox.20.png new file mode 100644 index 00000000..2f8f58e6 Binary files /dev/null and b/test-integration/snapshots/signTransactionTrnsfiopubky/nanox.20.png differ diff --git a/test-integration/snapshots/signTransactionTrnsfiopubky/nanox.21.png b/test-integration/snapshots/signTransactionTrnsfiopubky/nanox.21.png new file mode 100644 index 00000000..c843773c Binary files /dev/null and b/test-integration/snapshots/signTransactionTrnsfiopubky/nanox.21.png differ diff --git a/test-integration/snapshots/signTransactionTrnsfiopubky/nanox.22.png b/test-integration/snapshots/signTransactionTrnsfiopubky/nanox.22.png new file mode 100644 index 00000000..ada3168c Binary files /dev/null and b/test-integration/snapshots/signTransactionTrnsfiopubky/nanox.22.png differ diff --git a/test-integration/snapshots/signTransactionTrnsfiopubky/nanox.23.png b/test-integration/snapshots/signTransactionTrnsfiopubky/nanox.23.png new file mode 100644 index 00000000..bc3de69c Binary files /dev/null and b/test-integration/snapshots/signTransactionTrnsfiopubky/nanox.23.png differ diff --git a/test-integration/snapshots/signTransactionTrnsfiopubky/nanox.24.png b/test-integration/snapshots/signTransactionTrnsfiopubky/nanox.24.png new file mode 100644 index 00000000..9ea44041 Binary files /dev/null and b/test-integration/snapshots/signTransactionTrnsfiopubky/nanox.24.png differ diff --git a/test-integration/snapshots/signTransactionTrnsfiopubky/nanox.25.png b/test-integration/snapshots/signTransactionTrnsfiopubky/nanox.25.png new file mode 100644 index 00000000..db499272 Binary files /dev/null and b/test-integration/snapshots/signTransactionTrnsfiopubky/nanox.25.png differ diff --git a/test-integration/snapshots/signTransactionTrnsfiopubky/nanox.26.png b/test-integration/snapshots/signTransactionTrnsfiopubky/nanox.26.png new file mode 100644 index 00000000..ee12bc00 Binary files /dev/null and b/test-integration/snapshots/signTransactionTrnsfiopubky/nanox.26.png differ diff --git a/test-integration/snapshots/signTransactionTrnsfiopubky/nanox.27.png b/test-integration/snapshots/signTransactionTrnsfiopubky/nanox.27.png new file mode 100644 index 00000000..34e5ceab Binary files /dev/null and b/test-integration/snapshots/signTransactionTrnsfiopubky/nanox.27.png differ diff --git a/test-integration/snapshots/signTransactionTrnsfiopubky/nanox.28.png b/test-integration/snapshots/signTransactionTrnsfiopubky/nanox.28.png new file mode 100644 index 00000000..4b4b7f83 Binary files /dev/null and b/test-integration/snapshots/signTransactionTrnsfiopubky/nanox.28.png differ diff --git a/test-integration/snapshots/signTransactionTrnsfiopubky/nanox.29.png b/test-integration/snapshots/signTransactionTrnsfiopubky/nanox.29.png new file mode 100644 index 00000000..5d0997ef Binary files /dev/null and b/test-integration/snapshots/signTransactionTrnsfiopubky/nanox.29.png differ diff --git a/test-integration/snapshots/signTransactionTrnsfiopubky/nanox.30.png b/test-integration/snapshots/signTransactionTrnsfiopubky/nanox.30.png new file mode 100644 index 00000000..2f8f58e6 Binary files /dev/null and b/test-integration/snapshots/signTransactionTrnsfiopubky/nanox.30.png differ diff --git a/test-integration/snapshots/signTransactionTrnsfiopubky/nanox.31.png b/test-integration/snapshots/signTransactionTrnsfiopubky/nanox.31.png new file mode 100644 index 00000000..348d43dc Binary files /dev/null and b/test-integration/snapshots/signTransactionTrnsfiopubky/nanox.31.png differ diff --git a/test-integration/snapshots/signTransactionTrnsfiopubky/nanox.32.png b/test-integration/snapshots/signTransactionTrnsfiopubky/nanox.32.png new file mode 100644 index 00000000..c843773c Binary files /dev/null and b/test-integration/snapshots/signTransactionTrnsfiopubky/nanox.32.png differ diff --git a/test-integration/snapshots/signTransactionTrnsfiopubky/nanox.33.png b/test-integration/snapshots/signTransactionTrnsfiopubky/nanox.33.png new file mode 100644 index 00000000..8e0d2a37 Binary files /dev/null and b/test-integration/snapshots/signTransactionTrnsfiopubky/nanox.33.png differ diff --git a/test-integration/snapshots/signTransactionTrnsfiopubky/nanox.34.png b/test-integration/snapshots/signTransactionTrnsfiopubky/nanox.34.png new file mode 100644 index 00000000..bc3de69c Binary files /dev/null and b/test-integration/snapshots/signTransactionTrnsfiopubky/nanox.34.png differ diff --git a/test-integration/snapshots/signTransactionTrnsfiopubky/nanox.35.png b/test-integration/snapshots/signTransactionTrnsfiopubky/nanox.35.png new file mode 100644 index 00000000..9ea44041 Binary files /dev/null and b/test-integration/snapshots/signTransactionTrnsfiopubky/nanox.35.png differ diff --git a/test-integration/snapshots/signTransactionTrnsfiopubky/nanox.36.png b/test-integration/snapshots/signTransactionTrnsfiopubky/nanox.36.png new file mode 100644 index 00000000..db499272 Binary files /dev/null and b/test-integration/snapshots/signTransactionTrnsfiopubky/nanox.36.png differ diff --git a/test-integration/snapshots/signTransactionTrnsfiopubky/nanox.37.png b/test-integration/snapshots/signTransactionTrnsfiopubky/nanox.37.png new file mode 100644 index 00000000..8c676529 Binary files /dev/null and b/test-integration/snapshots/signTransactionTrnsfiopubky/nanox.37.png differ diff --git a/test-integration/snapshots/signTransactionTrnsfiopubky/nanox.38.png b/test-integration/snapshots/signTransactionTrnsfiopubky/nanox.38.png new file mode 100644 index 00000000..879dc8a9 Binary files /dev/null and b/test-integration/snapshots/signTransactionTrnsfiopubky/nanox.38.png differ diff --git a/test-integration/snapshots/signTransactionTrnsfiopubky/nanox.39.png b/test-integration/snapshots/signTransactionTrnsfiopubky/nanox.39.png new file mode 100644 index 00000000..4b4b7f83 Binary files /dev/null and b/test-integration/snapshots/signTransactionTrnsfiopubky/nanox.39.png differ diff --git a/test-integration/snapshots/signTransactionTrnsfiopubky/nanox.40.png b/test-integration/snapshots/signTransactionTrnsfiopubky/nanox.40.png new file mode 100644 index 00000000..5d0997ef Binary files /dev/null and b/test-integration/snapshots/signTransactionTrnsfiopubky/nanox.40.png differ diff --git a/test-integration/snapshots/signTransactionTrnsfiopubky/nanox.41.png b/test-integration/snapshots/signTransactionTrnsfiopubky/nanox.41.png new file mode 100644 index 00000000..2f8f58e6 Binary files /dev/null and b/test-integration/snapshots/signTransactionTrnsfiopubky/nanox.41.png differ diff --git a/test-integration/snapshots/signTransactionTrnsfiopubky/nanox.42.png b/test-integration/snapshots/signTransactionTrnsfiopubky/nanox.42.png new file mode 100644 index 00000000..c843773c Binary files /dev/null and b/test-integration/snapshots/signTransactionTrnsfiopubky/nanox.42.png differ diff --git a/test-integration/speculos-buttons-and-snapshots.js b/test-integration/speculos-buttons-and-snapshots.js new file mode 100644 index 00000000..ee2cfe04 --- /dev/null +++ b/test-integration/speculos-buttons-and-snapshots.js @@ -0,0 +1,297 @@ +import { syncBackTicks, sleep, humanTime } from "./speculos-common.js" + +const fioWaitingForCommandsSHA = { + "nanos": "sha256:13bd32a0f8a2eb3d5723b7e131e439105d63875272e952f703a268a0f1e00728", + "nanox": "sha256:ce937171040b94097e5d805f76eda47fe8eeb41e50215706634939417214544c", + "nanosp": "sha256:86fa19f6aa42fb59d1058cc245e95132629b88adb42efea49af289ddeb651405", +} + +const fioWarningDevelSHA = { + "nanos": "sha256:df7553b0b614d9d3ff0dcb5facde9e1e7e308e2691be9669d206a241f958a999", + "nanox": "sha256:2bb665c41bcb7e7abda8fc30255f28b35144d26997f314074290eb24b23e37fa", + "nanosp": "sha256:2bb665c41bcb7e7abda8fc30255f28b35144d26997f314074290eb24b23e37fa", +} + +const fioThreeDotsSHA = { + "nanos": "sha256:77d4d2651ac7327eee85219c9d25da7b40cf476fad1a67e7eeacb74b37221efe", + "nanox": "sha256:c650a1475392bdc2ff484341c43bb3aa532ea5262ddb9331f219a24314bc014f", + "nanosp": "sha256:c650a1475392bdc2ff484341c43bb3aa532ea5262ddb9331f219a24314bc014f", +} + +const fioEmptyScreenSHA = { + "nanos": "sha256:6dde663afd5a4b7cf8f4955a8a4b035d358affcb661f18bda910ec837a70ee77", + "nanox": "sha256:6dde663afd5a4b7cf8f4955a8a4b035d358affcb661f18bda910ec837a70ee77", + "nanosp": "sha256:6dde663afd5a4b7cf8f4955a8a4b035d358affcb661f18bda910ec837a70ee77", +} + +class ButtonsAndSnapshots { + scriptName; + pngNum = 1; + pngSha256Previous = ""; + speculosButtonsPort; + deviceType; + + fioReadySHA; + approveSHA; + + constructor(scriptName, conf) { + this.scriptName = scriptName; + this.speculosButtonsPort = conf.speculosApiPort; + this.deviceType = conf.deviceType; + this.snapshotName = conf.snapshotName; + this.fioWaitingSHA = fioWaitingForCommandsSHA[this.deviceType]; + this.fioWarningSHA = fioWarningDevelSHA[this.deviceType]; + this.fioThreeDots = [fioThreeDotsSHA[this.deviceType], fioEmptyScreenSHA[this.deviceType]]; + } + + curlButton(which, hint) { // e.g. which: 'left', 'right', or 'both' + console.log(humanTime() + " curlButton() // " + which + hint); + const output = syncBackTicks('curl --silent --show-error --max-time 60 --data \'{"action":"press-and-release"}\' http://127.0.0.1:' + this.speculosButtonsPort + '/button/' + which + ' 2>&1'); + if (output != '{}') { + console.log(humanTime() + " ERROR: unexpected curl stdout: " + output); + throw new Error(); + } + } + + async curlButtonAndScreenshot(which, hint) { + this.curlButton(which, hint); + return await this.curlScreenShot(which); + } + + async curlScreenShot(lastButton = "") { + const test_device = this.snapshotName; + const originalScreenshotSHA = this.pngSha256Previous; + // e.g. test-transactions.staking-sign-ts.02-transfer-top-shot-moment-p256-sha3-256/nanos.01.png + const png = this.scriptName + "/" + test_device + "." + this.pngNum.toString(10).padStart(2, '0') + ".png" + console.log(humanTime() + " curlScreenShot() // " + png + ".new.png"); + + const makeScreenshot = (process.env.TEST_PNG_RE_GEN_FOR && (this.scriptName.substring(0, process.env.TEST_PNG_RE_GEN_FOR.length) == process.env.TEST_PNG_RE_GEN_FOR)); + const oldSHAcmd = makeScreenshot ? "" : "echo sha256:`sha256sum $PNG`"; + + let generateNewScreenshotFromNextCapture = 0; + let loops = 0; + do { + // get screenshot + const output = syncBackTicks('export PNG=' + png + ' ; curl --silent --show-error --output $PNG.new.png http://127.0.0.1:' + this.speculosButtonsPort + '/screenshot 2>&1 ; echo sha256:`sha256sum $PNG.new.png` ; '+ oldSHAcmd); + + const errorArray = output.match(/Empty reply from server/gi); + if (null != errorArray) { + console.log(humanTime() + " curl: screen shot: warning: curl failed to grab screen shot"); + throw new Error(); + } + const regex = /sha256:[^\s]*/gm; + const sha256Array = output.match(regex); // e.g. ['sha256:f3916e7cbbf8502b3eedbdf40cc6d6063b90f0e4a4814e34f2e7029bdaa4eaac','sha256:f3916e7cbbf8502b3eedbdf40cc6d6063b90f0e4a4814e34f2e7029bdaa4eaac'] + + // verify, that the screenshot is not the same as previous one + if (sha256Array[0] /* newly generated PNG */ == this.pngSha256Previous) { + loops += 1; + generateNewScreenshotFromNextCapture = 0 + if (loops < 20) { + if (loops == 15 && lastButton != "" && sha256Array[0] == originalScreenshotSHA) { + await sleep(100); + console.log(humanTime() + " Retrying last button press: " +lastButton); + this.curlButton(lastButton, " Retry last button press."); + await sleep(100); + } + console.log(humanTime() + " curlScreenShot() // matches previous screen shot SHA256 (" + this.pngSha256Previous + "); so requesting another screen shot"); + await sleep(90+10*loops) + continue; + } else { + console.log(humanTime() + " curlScreenShot() // matches previous screen shot SHA256 (" + + "); ERROR: giving up because too many tries; curl one-liner output:"); + console.log(output); + console.log(png); + console.log(humanTime() + " curlScreenShot() // NOTE: re-run with TEST_PNG_RE_GEN_FOR=" + this.scriptName + " to regenerate PNGs"); + throw new Error(); + } + } + + if (sha256Array[0] /* newly generated PNG */ == this.fioThreeDots[0] || sha256Array == this.fioThreeDots[1]) { + await sleep(90+10*loops) + continue; + } + + // if we generate this screenshot ... + if (makeScreenshot) { + // the screenshot we have may be partial capture + // the tests made suggest, that when we make another screenshot, it will be OK + if (generateNewScreenshotFromNextCapture == 0) { + generateNewScreenshotFromNextCapture = 1; + continue; + } + this.pngSha256Previous = sha256Array[0]; + + // second try, we believe the screenshot is correct + generateNewScreenshotFromNextCapture = 0; + syncBackTicks('export PNG=' + png + ' ; cp $PNG.new.png $PNG'); + break; + } + // if we want to compare this screenshot + else { + this.pngSha256Previous = sha256Array[0]; + + // if we have it, we are done + if (sha256Array[0] == sha256Array[1]) { + break; + } + + //ignore DEVEL/nonDEVEL mismatch + if ((sha256Array[0] == this.fioWaitingSHA && sha256Array[1] == this.fioWarningSHA) || + (sha256Array[1] == this.fioWaitingSHA && sha256Array[0] == this.fioWarningSHA)) { + break + } + // if we want to ignore the test we are done + if (process.env.TEST_IGNORE_SHA256_SUMS >= 1) { + console.log(humanTime() + " curlScreenShot() // running tests with TEST_IGNORE_SHA256_SUMS=1 to ignore all PNG differences"); + break; + } + // otherwise, we will try again (this deals with partial capture) + loops += 1; + if (loops < 20) { + await sleep(100+10*loops) + console.log(humanTime() + " curlScreenShot() // screen shot: warning: sha256 sums are different; could be partially rendered screen, so re-requesting screen shot // re-run with TEST_IGNORE_SHA256_SUMS=1 to ignore all PNGs"); + this.pngSha256Previous = sha256Array[0]; + continue; + } else { + console.log(humanTime() + " curlScreenShot() // screen shot: warning: sha256 sums are different; ERROR: re-requested screen shot too many times // re-run with TEST_IGNORE_SHA256_SUMS=1 to ignore all PNGs"); + console.log(png); + throw new Error(); + } + } + } while (true); + console.log(humanTime() + " png " + this.pngNum + " captured, SHA: " + this.pngSha256Previous + "."); + this.pngNum++; + return this.pngSha256Previous; + } + + //higher level functions to be used in the tests + //Each step should end on "FIO Ready" screen + checkFioReadyScreen(sha) { + if (sha != this.fioWaitingSHA && sha != this.fioWarningSHA) { + throw new Error(); + } + } + + async makeStartingScreenshot() { + console.log(humanTime() + " screen shot before sending first apdu command"); + const sha = await this.curlScreenShot(); + this.checkFioReadyScreen(sha); + } + + async _reviewInternal(counts, textWhat) { + for(let i=0; i { + await sleep(200); + console.log(msg) + + process.stdin.setRawMode(true) + return new Promise(resolve => process.stdin.once('data', (d) => { + process.stdin.setRawMode(false) + resolve() + })) +// await sleep(5000); + }; + } + curlButton(which, hint) {} + async curlButtonAndScreenshot(which, hint) {} + async curlScreenShot(lastButton = "") {} + async makeStartingScreenshot() {} + + async review(textWhat) { + await this.wait("Please, review the transaction on the device.") + } + + async review2(textWhat) { + await this.wait("Please, review the transaction on the device.") + } + + async reviewPartial(textWhat) { + await this.wait("Please, review part of the transaction till error occours.") + } + + async reviewReject(count, textWhat) { + await this.wait("Please, review the transaction clink through this and reject it. (You need to click through this first)") + } + + async toggleExpertMode(textWhat) { + await this.wait("Please, toggle expert mode ("+textWhat+")") + } + + async enterMenuElementAndReview(menuElementIndex, textWhat) { + await this.wait("Please, go to menu element "+menuElementIndex+" ("+textWhat+") and review the screens.") + } +} + +function getButtonsAndSnapshots(scriptName, conf) { + if (conf.testOn === "ledger") { + return new LedgerButtonsAndSnapshots() + } + return new ButtonsAndSnapshots(scriptName, conf) +} + +export {getButtonsAndSnapshots}; diff --git a/test-integration/speculos-common.js b/test-integration/speculos-common.js new file mode 100644 index 00000000..bb927328 --- /dev/null +++ b/test-integration/speculos-common.js @@ -0,0 +1,170 @@ +import { execSync } from 'child_process'; +import assert from 'assert/strict'; +import { basename } from 'path'; + +// see https://stackoverflow.com/questions/9763441/milliseconds-to-time-in-javascript +function msToTime(s) { + // Pad to 2 or 3 digits, default is 2 + function pad(n, z) { + z = z || 2; + return ('00' + n).slice(-z); + } + + const ms = s % 1000; + s = (s - ms) / 1000; + const secs = s % 60; + s = (s - secs) / 60; + const mins = s % 60; + const hrs = (((s - mins) / 60) + 20) % 24; + + return pad(hrs) + ':' + pad(mins) + ':' + pad(secs) + '.' + pad(ms, 3); +} + +function msToMatchSpeculosContainer() { + return (4 * 3600 * 1000); +} + +function humanTime() { + return msToTime(Date.now() + msToMatchSpeculosContainer()); +} + +function syncBackTicks(command) { + if (process.env.TEST_DEBUG >= 1) { + console.log(humanTime() + " syncBackTicks() // command: " + command); + } + const curl_bash = execSync( command ); + const output = curl_bash.toString().trim(); + if (process.env.TEST_DEBUG >= 1) { + console.log(humanTime() + " syncBackTicks() // command: " + output); + } + return output; +} + +function testStart(scriptName) { // e.g. test-basic-slot-status-set.js + console.log(humanTime() + " " + "vv".repeat(63) + " testStart() // " + scriptName); + console.log(humanTime() + " // re-run with TEST_PNG_RE_GEN_FOR=" + scriptName + " to regenerate PNGs, TEST_IGNORE_SHA256_SUMS=1 to ignore all PNGs, TEST_DEBUG=1 for extra debug output"); + syncBackTicks('rm -f ' + scriptName + '.*.png.new.png'); + if (process.env.TEST_PNG_RE_GEN_FOR && (scriptName.substring(0, process.env.TEST_PNG_RE_GEN_FOR.length) == process.env.TEST_PNG_RE_GEN_FOR)) { + console.log(humanTime() + " curlScreenShot() // TEST_PNG_RE_GEN_FOR detected; deleting PNGs for this test"); + syncBackTicks('rm -f ' + scriptName + '.*.png'); + } +} + +function testCombo(scriptNameCombo) { + console.log(humanTime() + " " + "v ".repeat(63) + " testCombo() // " + scriptNameCombo); +} + +function testStep(asciiGraphic, scriptNameStep) { + console.log(humanTime() + asciiGraphic.repeat(21) + " testStep() // " + scriptNameStep); +} + +function testEnd(scriptName) { // e.g. test-basic-slot-status-set.js + console.log(humanTime() + " " + "^^".repeat(63) + " testEnd() // " + scriptName); +} + + +function hex2ascii(hex) { + let str = ''; + for (let i = 0; i < hex.length; i += 2) + str += String.fromCharCode(parseInt(hex.substr(i, 2), 16)); + return str; +} + +function compare(givenHex, expected, whatGiven, parts) { + //console.log(humanTime() + " compare() // givenHex:" + givenHex + " expected:" + expected); + let givenHexExploded = ""; + let expectedExploded = ""; + let signatureCompact = ""; + let p = 0; + let foundHexMismatch = ""; + let foundLenMismatch = ""; + for (const [key, value] of Object.entries(parts)) { + const givenHexSubstring = givenHex.substring(p, p + (value * 2)); + const expectedSubstring = expected.substring(p, p + (value * 2)); + const expectedSubstringLength = (key == "unexpected") ? 0 : (value * 2); + if ((key.substring(0, 15) != "do_not_compare_") && (givenHexSubstring != expectedSubstring)) { + foundHexMismatch = key; + } + if (expectedSubstring.length != expectedSubstringLength) { + foundLenMismatch = key; + } + givenHexExploded = givenHexExploded + key + ':' + givenHexSubstring + ' '; + expectedExploded = expectedExploded + key + ':' + expectedSubstring + ' '; + if (key == 'signatureCompact') { + const hex = givenHex.substring(p, p + (value * 2)); + signatureCompact = "; signatureCompact.ascii:" + hex2ascii(hex); + } + p += value * 2; + } + console.log(humanTime() + " compare() // givenHexExploded:" + givenHexExploded + " <- " + whatGiven + signatureCompact); + console.log(humanTime() + " compare() // expectedExploded:" + expectedExploded); + if (foundHexMismatch != "") { + console.log(humanTime() + " compare() // expected named part '" + foundHexMismatch + "' has WRONG hex digits"); + throw new Error(); + } + if (foundLenMismatch != "") { + console.log(humanTime() + " compare() // expected named part '" + foundLenMismatch + "' has WRONG length"); + throw new Error(); + } +} + +function compareInAPDU(transport, expected, whatGiven, parts) { + const givenHex = transport.hexApduCommandIn.shift(); + compare(givenHex, expected, whatGiven, parts); +} + +function compareOutAPDU(transport, expected, whatGiven, parts) { + const givenHex = transport.hexApduCommandOut.shift(); + compare(givenHex, expected, whatGiven, parts); +} + +function noMoreAPDUs(transport) { + if ((transport.hexApduCommandIn.length !== 0) || (transport.hexApduCommandOut.length !== 0)) { + throw new Error(); + } +} + +function compareGetVersionAPDUs(transport) { + let hexExpected = "3300000000"; + compareOutAPDU(transport, hexExpected, "apdu command", {cla:1, ins:1, p1:1, p2:1, len:1, unexpected:9999}); + hexExpected = "00xxxxxx00xxxxxxxx9000"; + compareInAPDU(transport, hexExpected, "apdu response", {testMode:1, do_not_compare_major:1, do_not_compare_minor:1, do_not_compare_patch:1, deviceLocked:1, do_not_compare_targetId:4, returnCode:2, unexpected:9999}); +} + + + +function timeout(ms) { + return new Promise(resolve => setTimeout(resolve, ms)); +} + +async function sleep(ms, what) { + if (process.env.TEST_DEBUG >= 1) {console.log(humanTime() + " sleep() // " + ms + "ms <- " + what);} + await timeout(ms); +} + +function getScriptName(path) { + return "snapshots/"+basename(path).replace(".js", ""); +} + +function getSpeculosDefaultConf() { + return { + testOn: process.env.TEST_ON_DEVICE ? "ledger": "speculos", + speculosApiPort: process.env.TEST_SPECULOS_API_PORT ? process.env.TEST_SPECULOS_API_PORT : 5000, + speculosApduPort: process.env.TEST_SPECULOS_APDU_PORT ? process.env.TEST_SPECULOS_APDU_PORT : 40000, + deviceType: process.env.TEST_DEVICE, //nanos, nanox, nanosp + snapshotName: process.env.TEST_DEVICE, + }; +} + +function getAPDUDataBuffer(constHex, varHex) { + assert.equal(constHex.length % 2, 0); + assert.equal(varHex.length % 2, 0); + const constBuffer = Buffer.from(constHex, "hex") + const varBuffer = Buffer.from(varHex, "hex") + const buf = Buffer.allocUnsafe(2); + buf.writeUInt8(constBuffer.length, 0); + buf.writeUInt8(varBuffer.length, 1); + return Buffer.concat([buf, constBuffer, varBuffer]) +} + +export {testStart, testCombo, testStep, testEnd, compareInAPDU, compareOutAPDU, noMoreAPDUs, compareGetVersionAPDUs, humanTime, sleep, getScriptName, syncBackTicks, getSpeculosDefaultConf, getAPDUDataBuffer}; diff --git a/test-integration/speculos-transport.js b/test-integration/speculos-transport.js new file mode 100644 index 00000000..d64040d1 --- /dev/null +++ b/test-integration/speculos-transport.js @@ -0,0 +1,16 @@ +'use strict'; +import SpeculosTransport from "@ledgerhq/hw-transport-node-speculos"; +import TransportNodeHid from "@ledgerhq/hw-transport-node-hid" + +async function getTransport(speculosConf) { + let transport = 0; + if (speculosConf.testOn === "ledger") { + transport = await TransportNodeHid.default.create(1000); + } + else { + transport = await SpeculosTransport.default.open({ apduPort: speculosConf.speculosApduPort }); + } + return transport; +} + +export {getTransport};