Skip to content

Commit

Permalink
Revert "Updates for stability + Gitian fixes (#43)"
Browse files Browse the repository at this point in the history
This reverts commit 565e630.
  • Loading branch information
2a5A1Ghu1 committed Dec 6, 2019
1 parent 565e630 commit 78293d4
Show file tree
Hide file tree
Showing 277 changed files with 9,924 additions and 21,738 deletions.
1 change: 0 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -153,4 +153,3 @@ cmake-build-debug
vitae-qt.pro
src/config/vitae-config.h
src/config/vitae-config.h.in
*.tmp
12 changes: 9 additions & 3 deletions configure.ac
Original file line number Diff line number Diff line change
Expand Up @@ -344,7 +344,7 @@ case $host in
fi

AX_CHECK_LINK_FLAG([[-Wl,-headerpad_max_install_names]], [LDFLAGS="$LDFLAGS -Wl,-headerpad_max_install_names"])
CPPFLAGS="$CPPFLAGS -DMAC_OSX -DOBJC_OLD_DISPATCH_PROTOTYPES=0"
CPPFLAGS="$CPPFLAGS -DMAC_OSX"
;;
*linux*)
TARGET_OS=linux
Expand Down Expand Up @@ -792,7 +792,13 @@ else
fi
fi


AC_CHECK_LIB([crypto],[RAND_egd],[],[
AC_ARG_WITH([libressl],
[AS_HELP_STRING([--with-libressl],[Build with system LibreSSL (default is no; DANGEROUS; NOT SUPPORTED)])],
[AC_MSG_WARN([Detected LibreSSL: This is NOT supported, and may break consensus compatibility!])],
[AC_MSG_ERROR([Detected LibreSSL: This is NOT supported, and may break consensus compatibility!])]
)
])

dnl univalue check

Expand Down Expand Up @@ -1059,7 +1065,7 @@ if test x$system_univalue = xno; then
AC_CONFIG_SUBDIRS([src/univalue])
fi

ac_configure_args="${ac_configure_args} --disable-shared --with-pic --enable-module-recovery"
ac_configure_args="${ac_configure_args} --disable-shared --with-pic"
AC_CONFIG_SUBDIRS([src/secp256k1])

AC_OUTPUT
Expand Down
18 changes: 14 additions & 4 deletions contrib/debian/examples/vitae.conf
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
##
## vitae.conf configuration file. Lines beginning with # are comments.
##

# Network-related settings:

# Run on the test network instead of the real vitae network.
Expand Down Expand Up @@ -62,8 +62,8 @@
#rpcpassword=YourSuperGreatPasswordNumber_DO_NOT_USE_THIS_OR_YOU_WILL_GET_ROBBED_385593

# How many seconds vitae will wait for a complete RPC HTTP request.
# after the HTTP connection is established.
#rpcclienttimeout=30
# after the HTTP connection is established.
#rpctimeout=30

# By default, only RPC connections from localhost are allowed.
# Specify as many rpcallowip= settings as you like to allow connections from other hosts,
Expand All @@ -73,7 +73,7 @@
# because the rpcpassword is transmitted over the network unencrypted.

# server=1 tells Vitae-QT to accept JSON-RPC commands.
# it is also read by vitaed to determine if RPC should be enabled
# it is also read by vitaed to determine if RPC should be enabled
#rpcallowip=10.1.1.34/255.255.255.0
#rpcallowip=1.2.3.4/24
#rpcallowip=2001:db8:85a3:0:0:8a2e:370:7334/96
Expand All @@ -85,6 +85,16 @@
# running on another host using this option:
#rpcconnect=127.0.0.1

# Use Secure Sockets Layer (also known as TLS or HTTPS) to communicate
# with Vitae -server or vitaed
#rpcssl=1

# OpenSSL settings used when rpcssl=1
#rpcsslciphers=TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH
#rpcsslcertificatechainfile=server.cert
#rpcsslprivatekeyfile=server.pem


# Miscellaneous options

# Pre-generate this many public/private key pairs, so wallet backups will be valid for
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -178,6 +178,19 @@ Set maximum block size in bytes (default: 250000)
.HP
\fB\-blockprioritysize=\fR<n> Set maximum size of high\-priority/low\-fee transactions in bytes (default: 27000)
.PP
SSL options: (see the Bitcoin Wiki for SSL setup instructions)
.TP
\fB\-rpcssl\fR
Use OpenSSL (https) for JSON\-RPC connections
.TP
\fB\-rpcsslcertificatechainfile=\fR<file.cert>
Server certificate file (default: server.cert)
.TP
\fB\-rpcsslprivatekeyfile=\fR<file.pem>
Server private key (default: server.pem)
.TP
\fB\-rpcsslciphers=\fR<ciphers>
Acceptable ciphers (default: TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!AH:!3DES:@STRENGTH)
.SS "UI options:"
.TP
\fB\-lang=\fR<lang>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,16 @@ Listen for RPC connections on this TCP port.
\fBrpcconnect=\fR\fI'127.0.0.1'\fR
You can use *vitae* or *vitaed(1)* to send commands to *vitae*/*vitaed(1)* running on another host using this option.
.TP
\fBrpcssl=\fR\fI'1'\fR
Use Secure Sockets Layer (also known as TLS or HTTPS) to communicate with *vitae* '\-server' or *vitaed(1)*. Example of OpenSSL settings used when *rpcssl*='1':
.TP
\fB\-rpcsslciphers=\fR<ciphers>
Acceptable ciphers (default: TLSv1+HIGH:\:!SSLv2:\:!aNULL:\:!eNULL:\:!AH:\:!3DES:\:@STRENGTH)
.TP
\fBrpcsslcertificatechainfile=\fR\fI'server.cert'\fR
.TP
\fBrpcsslprivatekeyfile=\fR\fI'server.pem'\fR
.TP
.SH MISCELLANEOUS OPTIONS
.TP
\fBgen=\fR[\fI'0'\fR|\fI'1'\fR]
Expand Down Expand Up @@ -76,3 +86,4 @@ vitaed(1)
This manual page was written by Micah Anderson <micah@debian.org> for the Debian system (but may be used by others). Permission is granted to copy, distribute and/or modify this document under the terms of the GNU General Public License, Version 3 or any later version published by the Free Software Foundation.

On Debian systems, the complete text of the GNU General Public License can be found in /usr/share/common-licenses/GPL.

Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,20 @@ Allow JSON\-RPC connections from specified IP address
.TP
\fB\-rpcconnect=\fR<ip>
Send commands to node running on <ip>
.PP
SSL options: (see the Bitcoin Wiki for SSL setup instructions)
.TP
\fB\-rpcssl\fR=\fI1\fR
Use OpenSSL (https) for JSON\-RPC connections
.TP
\fB\-rpcsslcertificatchainfile=\fR<file.cert>
Server certificate file (default: server.cert)
.TP
\fB\-rpcsslprivatekeyfile=\fR<file.pem>
Server private key (default: server.pem)
.TP
\fB\-rpcsslciphers=\fR<ciphers>
Acceptable ciphers (default: TLSv1+HIGH:\:!SSLv2:\:!aNULL:\:!eNULL:\:!AH:\:!3DES:\:@STRENGTH)
.TP
\-?
This help message
Expand Down Expand Up @@ -192,3 +206,4 @@ vitae.conf(5)
This manual page was written by Micah Anderson <micah@debian.org> for the Debian system (but may be used by others). Permission is granted to copy, distribute and/or modify this document under the terms of the GNU General Public License, Version 3 or any later version published by the Free Software Foundation.

On Debian systems, the complete text of the GNU General Public License can be found in /usr/share/common-licenses/GPL.

File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
34 changes: 17 additions & 17 deletions contrib/gitian-build.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,10 +22,10 @@ def setup():
else:
programs += ['apt-cacher-ng', 'lxc', 'debootstrap']
subprocess.check_call(['sudo', 'apt-get', 'install', '-qq'] + programs)
if not os.path.isdir('vitae-gitian.sigs'):
subprocess.check_call(['git', 'clone', 'https://github.com/VitaeTeam/gitian.sigs.git'])
if not os.path.isdir('vitae-detached-sigs'):
subprocess.check_call(['git', 'clone', 'https://github.com/VitaeTeam/vitae-detached-sigs.git'])
if not os.path.isdir('gitian.sigs'):
subprocess.check_call(['git', 'clone', 'https://github.com/pivx-Project/gitian.sigs.git'])
if not os.path.isdir('pivx-detached-sigs'):
subprocess.check_call(['git', 'clone', 'https://github.com/pivx-Project/pivx-detached-sigs.git'])
if not os.path.isdir('gitian-builder'):
subprocess.check_call(['git', 'clone', 'https://github.com/devrandom/gitian-builder.git'])
if not os.path.isdir('vitae'):
Expand Down Expand Up @@ -60,28 +60,28 @@ def build():
if args.linux:
print('\nCompiling ' + args.version + ' Linux')
subprocess.check_call(['bin/gbuild', '-j', args.jobs, '-m', args.memory, '--commit', 'vitae='+args.commit, '--url', 'vitae='+args.url, '../vitae/contrib/gitian-descriptors/gitian-linux.yml'])
subprocess.check_call(['bin/gsign', '-p', args.sign_prog, '--signer', args.signer, '--release', args.version+'-linux', '--destination', '../vitae-gitian.sigs/', '../vitae/contrib/gitian-descriptors/gitian-linux.yml'])
subprocess.check_call(['bin/gsign', '-p', args.sign_prog, '--signer', args.signer, '--release', args.version+'-linux', '--destination', '../gitian.sigs/', '../vitae/contrib/gitian-descriptors/gitian-linux.yml'])
subprocess.check_call('mv build/out/vitae-*.tar.gz build/out/src/vitae-*.tar.gz ../vitae-binaries/'+args.version, shell=True)

if args.windows:
print('\nCompiling ' + args.version + ' Windows')
subprocess.check_call(['bin/gbuild', '-j', args.jobs, '-m', args.memory, '--commit', 'vitae='+args.commit, '--url', 'vitae='+args.url, '../vitae/contrib/gitian-descriptors/gitian-win.yml'])
subprocess.check_call(['bin/gsign', '-p', args.sign_prog, '--signer', args.signer, '--release', args.version+'-win-unsigned', '--destination', '../vitae-gitian.sigs/', '../vitae/contrib/gitian-descriptors/gitian-win.yml'])
subprocess.check_call(['bin/gsign', '-p', args.sign_prog, '--signer', args.signer, '--release', args.version+'-win-unsigned', '--destination', '../gitian.sigs/', '../vitae/contrib/gitian-descriptors/gitian-win.yml'])
subprocess.check_call('mv build/out/vitae-*-win-unsigned.tar.gz inputs/', shell=True)
subprocess.check_call('mv build/out/vitae-*.zip build/out/vitae-*.exe build/out/src/vitae-*.tar.gz ../vitae-binaries/'+args.version, shell=True)

if args.macos:
print('\nCompiling ' + args.version + ' MacOS')
subprocess.check_call(['bin/gbuild', '-j', args.jobs, '-m', args.memory, '--commit', 'vitae='+args.commit, '--url', 'vitae='+args.url, '../vitae/contrib/gitian-descriptors/gitian-osx.yml'])
subprocess.check_call(['bin/gsign', '-p', args.sign_prog, '--signer', args.signer, '--release', args.version+'-osx-unsigned', '--destination', '../vitae-gitian.sigs/', '../vitae/contrib/gitian-descriptors/gitian-osx.yml'])
subprocess.check_call(['bin/gsign', '-p', args.sign_prog, '--signer', args.signer, '--release', args.version+'-osx-unsigned', '--destination', '../gitian.sigs/', '../vitae/contrib/gitian-descriptors/gitian-osx.yml'])
subprocess.check_call('mv build/out/vitae-*-osx-unsigned.tar.gz inputs/', shell=True)
subprocess.check_call('mv build/out/vitae-*.tar.gz build/out/vitae-*.dmg build/out/src/vitae-*.tar.gz ../vitae-binaries/'+args.version, shell=True)

os.chdir(workdir)

if args.commit_files:
print('\nCommitting '+args.version+' Unsigned Sigs\n')
os.chdir('vitae-gitian.sigs')
os.chdir('gitian.sigs')
subprocess.check_call(['git', 'add', args.version+'-linux/'+args.signer])
subprocess.check_call(['git', 'add', args.version+'-win-unsigned/'+args.signer])
subprocess.check_call(['git', 'add', args.version+'-osx-unsigned/'+args.signer])
Expand All @@ -96,22 +96,22 @@ def sign():
print('\nSigning ' + args.version + ' Windows')
subprocess.check_call('cp inputs/vitae-' + args.version + '-win-unsigned.tar.gz inputs/vitae-win-unsigned.tar.gz', shell=True)
subprocess.check_call(['bin/gbuild', '--skip-image', '--upgrade', '--commit', 'signature='+args.commit, '../vitae/contrib/gitian-descriptors/gitian-win-signer.yml'])
subprocess.check_call(['bin/gsign', '-p', args.sign_prog, '--signer', args.signer, '--release', args.version+'-win-signed', '--destination', '../vitae-gitian.sigs/', '../vitae/contrib/gitian-descriptors/gitian-win-signer.yml'])
subprocess.check_call(['bin/gsign', '-p', args.sign_prog, '--signer', args.signer, '--release', args.version+'-win-signed', '--destination', '../gitian.sigs/', '../vitae/contrib/gitian-descriptors/gitian-win-signer.yml'])
subprocess.check_call('mv build/out/vitae-*win64-setup.exe ../vitae-binaries/'+args.version, shell=True)
subprocess.check_call('mv build/out/vitae-*win32-setup.exe ../vitae-binaries/'+args.version, shell=True)

if args.macos:
print('\nSigning ' + args.version + ' MacOS')
subprocess.check_call('cp inputs/vitae-' + args.version + '-osx-unsigned.tar.gz inputs/vitae-osx-unsigned.tar.gz', shell=True)
subprocess.check_call(['bin/gbuild', '--skip-image', '--upgrade', '--commit', 'signature='+args.commit, '../vitae/contrib/gitian-descriptors/gitian-osx-signer.yml'])
subprocess.check_call(['bin/gsign', '-p', args.sign_prog, '--signer', args.signer, '--release', args.version+'-osx-signed', '--destination', '../vitae-gitian.sigs/', '../vitae/contrib/gitian-descriptors/gitian-osx-signer.yml'])
subprocess.check_call(['bin/gsign', '-p', args.sign_prog, '--signer', args.signer, '--release', args.version+'-osx-signed', '--destination', '../gitian.sigs/', '../vitae/contrib/gitian-descriptors/gitian-osx-signer.yml'])
subprocess.check_call('mv build/out/vitae-osx-signed.dmg ../vitae-binaries/'+args.version+'/vitae-'+args.version+'-osx.dmg', shell=True)

os.chdir(workdir)

if args.commit_files:
print('\nCommitting '+args.version+' Signed Sigs\n')
os.chdir('vitae-gitian.sigs')
os.chdir('gitian.sigs')
subprocess.check_call(['git', 'add', args.version+'-win-signed/'+args.signer])
subprocess.check_call(['git', 'add', args.version+'-osx-signed/'+args.signer])
subprocess.check_call(['git', 'commit', '-a', '-m', 'Add '+args.version+' signed binary sigs for '+args.signer])
Expand All @@ -123,27 +123,27 @@ def verify():
os.chdir('gitian-builder')

print('\nVerifying v'+args.version+' Linux\n')
if subprocess.call(['bin/gverify', '-v', '-d', '../vitae-gitian.sigs/', '-r', args.version+'-linux', '../vitae/contrib/gitian-descriptors/gitian-linux.yml']):
if subprocess.call(['bin/gverify', '-v', '-d', '../gitian.sigs/', '-r', args.version+'-linux', '../vitae/contrib/gitian-descriptors/gitian-linux.yml']):
print('Verifying v'+args.version+' Linux FAILED\n')
rc = 1

print('\nVerifying v'+args.version+' Windows\n')
if subprocess.call(['bin/gverify', '-v', '-d', '../vitae-gitian.sigs/', '-r', args.version+'-win-unsigned', '../vitae/contrib/gitian-descriptors/gitian-win.yml']):
if subprocess.call(['bin/gverify', '-v', '-d', '../gitian.sigs/', '-r', args.version+'-win-unsigned', '../vitae/contrib/gitian-descriptors/gitian-win.yml']):
print('Verifying v'+args.version+' Windows FAILED\n')
rc = 1

print('\nVerifying v'+args.version+' MacOS\n')
if subprocess.call(['bin/gverify', '-v', '-d', '../vitae-gitian.sigs/', '-r', args.version+'-win-signed', '../vitae/contrib/gitian-descriptors/gitian-osx.yml']):
if subprocess.call(['bin/gverify', '-v', '-d', '../gitian.sigs/', '-r', args.version+'-win-signed', '../vitae/contrib/gitian-descriptors/gitian-osx.yml']):
print('Verifying v'+args.version+' MacOS FAILED\n')
rc = 1

print('\nVerifying v'+args.version+' Signed Windows\n')
if subprocess.call(['bin/gverify', '-v', '-d', '../vitae-gitian.sigs/', '-r', args.version+'-win-signed', '../vitae/contrib/gitian-descriptors/gitian-win-signer.yml']):
if subprocess.call(['bin/gverify', '-v', '-d', '../gitian.sigs/', '-r', args.version+'-win-signed', '../vitae/contrib/gitian-descriptors/gitian-win-signer.yml']):
print('Verifying v'+args.version+' Signed Windows FAILED\n')
rc = 1

print('\nVerifying v'+args.version+' Signed MacOS\n')
if subprocess.call(['bin/gverify', '-v', '-d', '../vitae-gitian.sigs/', '-r', args.version+'-osx-signed', '../vitae/contrib/gitian-descriptors/gitian-osx-signer.yml']):
if subprocess.call(['bin/gverify', '-v', '-d', '../gitian.sigs/', '-r', args.version+'-osx-signed', '../vitae/contrib/gitian-descriptors/gitian-osx-signer.yml']):
print('Verifying v'+args.version+' Signed MacOS FAILED\n')
rc = 1

Expand Down Expand Up @@ -253,7 +253,7 @@ def main():
sign()

if args.verify:
os.chdir('vitae-gitian.sigs')
os.chdir('gitian.sigs')
subprocess.check_call(['git', 'pull'])
os.chdir(workdir)
sys.exit(verify())
Expand Down
2 changes: 1 addition & 1 deletion contrib/pivxd.bash-completion
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,7 @@ _vitaed() {
esac

case "$cur" in
-conf=*|-pid=*|-loadblock=*|-wallet=*)
-conf=*|-pid=*|-loadblock=*|-wallet=*|-rpcsslcertificatechainfile=*|-rpcsslprivatekeyfile=*)
cur="${cur#*=}"
_filedir
return 0
Expand Down
2 changes: 1 addition & 1 deletion doc/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ Building
---------------------
The following are developer notes on how to build VITAE on your native platform. They are not complete guides, but include notes on the necessary libraries, compile flags, etc.

- [macOS Build Notes](build-macos.md)
- [OSX Build Notes](build-osx.md)
- [Unix Build Notes](build-unix.md)
- [Gitian Building Guide](gitian-building.md)

Expand Down
85 changes: 10 additions & 75 deletions doc/REST-interface.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,88 +5,23 @@ The REST API can be enabled with the `-rest` option.

Supported API
-------------
`GET /rest/tx/TX-HASH.{bin|hex|json}`

####Transactions
`GET /rest/tx/<TX-HASH>.<bin|hex|json>`
Given a transaction hash,
Returns a transaction, in binary, hex-encoded binary or JSON formats.

Given a transaction hash: returns a transaction in binary, hex-encoded binary, or JSON formats.
`GET /rest/block/BLOCK-HASH.{bin|hex|json}`
`GET /rest/block/notxdetails/BLOCK-HASH.{bin|hex|json}`

For full TX query capability, one must enable the transaction index via "txindex=1" command line / configuration option. (enabled by default)
Given a block hash,
Returns a block, in binary, hex-encoded binary or JSON formats.

####Blocks
`GET /rest/block/<BLOCK-HASH>.<bin|hex|json>`
`GET /rest/block/notxdetails/<BLOCK-HASH>.<bin|hex|json>`

Given a block hash: returns a block, in binary, hex-encoded binary or JSON formats.

The HTTP request and response are both handled entirely in-memory, thus making maximum memory usage at least 4.66MB (2 MB max block, plus hex encoding) per request.
The HTTP request and response are both handled entirely in-memory, thus making maximum memory usage at least 2.66MB (1 MB max block, plus hex encoding) per request.

With the /notxdetails/ option JSON response will only contain the transaction hash instead of the complete transaction details. The option only affects the JSON response.

####Blockheaders
`GET /rest/headers/<COUNT>/<BLOCK-HASH>.<bin|hex|json>`

Given a block hash: returns <COUNT> amount of blockheaders in upward direction.

####Chaininfos
`GET /rest/chaininfo.json`

Returns various state info regarding block chain processing.
Only supports JSON as output format.
* chain : (string) current network name as defined in BIP70 (main, test, regtest)
* blocks : (numeric) the current number of blocks processed in the server
* headers : (numeric) the current number of headers we have validated
* bestblockhash : (string) the hash of the currently best block
* difficulty : (numeric) the current difficulty
* verificationprogress : (numeric) estimate of verification progress [0..1]
* chainwork : (string) total amount of work in active chain, in hexadecimal

####Query UTXO set
`GET /rest/getutxos/<checkmempool>/<txid>-<n>/<txid>-<n>/.../<txid>-<n>.<bin|hex|json>`

The getutxo command allows querying of the UTXO set given a set of outpoints.
See BIP64 for input and output serialisation:
https://github.com/bitcoin/bips/blob/master/bip-0064.mediawiki

Example:
```
$ curl localhost:18332/rest/getutxos/checkmempool/b2cdfd7b89def827ff8af7cd9bff7627ff72e5e8b0f71210f92ea7a4000c5d75-0.json 2>/dev/null | json_pp
{
"chaintipHash" : "00000000fb01a7f3745a717f8caebee056c484e6e0bfe4a9591c235bb70506fb",
"chainHeight" : 325347,
"utxos" : [
{
"scriptPubKey" : {
"addresses" : [
"mi7as51dvLJsizWnTMurtRmrP8hG2m1XvD"
],
"type" : "pubkeyhash",
"hex" : "76a9141c7cebb529b86a04c683dfa87be49de35bcf589e88ac",
"reqSigs" : 1,
"asm" : "OP_DUP OP_HASH160 1c7cebb529b86a04c683dfa87be49de35bcf589e OP_EQUALVERIFY OP_CHECKSIG"
},
"value" : 8.8687,
"height" : 2147483647,
"txvers" : 1
}
],
"bitmap" : "1"
}
```

####Memory pool
`GET /rest/mempool/info.json`

Returns various information about the TX mempool.
Only supports JSON as output format.
* size : (numeric) the number of transactions in the TX mempool
* bytes : (numeric) size of the TX mempool in bytes

`GET /rest/mempool/contents.json`

Returns transactions in the TX mempool.
Only supports JSON as output format.
For full TX query capability, one must enable the transaction index via "txindex=1" command line / configuration option.

Risks
-------------
Running a web browser on the same node with a REST enabled vitaed can be a risk. Accessing prepared XSS websites could read out tx/block data of your node by placing links like `<script src="http://127.0.0.1:51473/rest/tx/1234567890.json">` which might break the nodes privacy.
Running a webbrowser on the same node with a REST enabled vitaed can be a risk. Accessing prepared XSS websites could read out tx/block data of your node by placing links like `<script src="http://127.0.0.1:1234/tx/json/1234567890">` which might break the nodes privacy.

1 comment on commit 78293d4

@2a5A1Ghu1
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sorry about the commit to master I thought this was to develop my bad...

Please sign in to comment.