Bitcoin Forum
December 05, 2016, 04:43:45 AM *
News: To be able to use the next phase of the beta forum software, please ensure that your email address is correct/functional.
 
   Home   Help Search Donate Login Register  
Pages: « 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 [44] 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 »
  Print  
Author Topic: An (even more) optimized version of cpuminer (pooler's cpuminer, CPU-only)  (Read 1528943 times)
pooler
Hero Member
*****
Offline Offline

Activity: 644


View Profile
January 29, 2014, 07:55:19 PM
 #861

Is mining on the CPU less effective than GPU, and that is why solutions aren't coming up as commonly as they do in a GPU based miner?
It depends on what you mean by "effective", but I would say it is. Mining with a "good" GPU is certainly more efficient than mining with a CPU, at least. For a more complete answer you should consult the mining hardware comparison.
The rate at which solutions get accepted depends both on your hash rate and on the share difficulty set by the pool. In general you need not care about it, especially given that share difficulty can vary dynamically.

xxxxx\pooler-cpuminer-2.3.2-win64\minerd.exe --url=stratum+tcp://de2.miningpool.co:4101 --userpass=xx:xx
Any other commands to expand on this as after 5 minutes it gets disconnected.
No. If it gets disconnected it's almost certainly either the pool's or your Internet connection's fault (most probably the pool's). I'm always happy to test mining servers for compatibility, but I cannot even connect to the one mentioned above.

BTC: 15MRTcUweNVJbhTyH5rq9aeSdyigFrskqE · LTC: LTCPooLqTK1SANSNeTR63GbGwabTKEkuS7
1480913025
Hero Member
*
Offline Offline

Posts: 1480913025

View Profile Personal Message (Offline)

Ignore
1480913025
Reply with quote  #2

1480913025
Report to moderator
1480913025
Hero Member
*
Offline Offline

Posts: 1480913025

View Profile Personal Message (Offline)

Ignore
1480913025
Reply with quote  #2

1480913025
Report to moderator
Advertised sites are not endorsed by the Bitcoin Forum. They may be unsafe, untrustworthy, or illegal in your jurisdiction. Advertise here.
1480913025
Hero Member
*
Offline Offline

Posts: 1480913025

View Profile Personal Message (Offline)

Ignore
1480913025
Reply with quote  #2

1480913025
Report to moderator
pizzaBot
Newbie
*
Offline Offline

Activity: 8


View Profile WWW
January 30, 2014, 06:15:25 PM
 #862

Is cpuminer customized for each type of coin, or can the same minerd be used to work against all kinds of coin mining pools?
Thanks

FOX: wohtpVw4chMgAQHMzwqmMWagY5azxSWvjt
ikinga
Newbie
*
Offline Offline

Activity: 1


View Profile
January 31, 2014, 03:06:31 PM
 #863

Hi, I downloaded it and configured it by creating a shortcut to the "minered" and edited it with:

C:\Users\my.name.domain\Documents\mine\pooler-cpuminer-2.3.2-win64\minerd.exe – url=stratum+tcp://stratum7.dogehouse.org:9090 –userpass=ikinga:x

my.name.domain are obviously my personal info...

when I double click on it... it crashes. What did I do wrong?
mysticode
Newbie
*
Offline Offline

Activity: 7


View Profile
January 31, 2014, 09:00:19 PM
 #864

Hi, I downloaded it and configured it by creating a shortcut to the "minered" and edited it with:

C:\Users\my.name.domain\Documents\mine\pooler-cpuminer-2.3.2-win64\minerd.exe – url=stratum+tcp://stratum7.dogehouse.org:9090 –userpass=ikinga:x

my.name.domain are obviously my personal info...

when I double click on it... it crashes. What did I do wrong?

Make a bat file instead of a shortcut, with the same command line information. However, after the main line in the bat, add a second line that says Pause. This will keep the command prompt window open instead of closing, showing you the error you are encountering.

Is mining on the CPU less effective than GPU, and that is why solutions aren't coming up as commonly as they do in a GPU based miner?
It depends on what you mean by "effective", but I would say it is. Mining with a "good" GPU is certainly more efficient than mining with a CPU, at least. For a more complete answer you should consult the mining hardware comparison.
The rate at which solutions get accepted depends both on your hash rate and on the share difficulty set by the pool. In general you need not care about it, especially given that share difficulty can vary dynamically.

xxxxx\pooler-cpuminer-2.3.2-win64\minerd.exe --url=stratum+tcp://de2.miningpool.co:4101 --userpass=xx:xx
Any other commands to expand on this as after 5 minutes it gets disconnected.
No. If it gets disconnected it's almost certainly either the pool's or your Internet connection's fault (most probably the pool's). I'm always happy to test mining servers for compatibility, but I cannot even connect to the one mentioned above.

My GPU mining through cgminer is going fine to my pool, however CPUMiner is acting strange. It is not showing me sending any hashes. This is what it is showing almost all the time: http://i.imgur.com/eakS25T.png

What's going on?

Sharecoin: SNxYAnB7rgRdZCEqzm5bkMu6ZTPGpaP6Y3
HenriH
Newbie
*
Offline Offline

Activity: 16


View Profile
January 31, 2014, 10:13:56 PM
 #865

Thanks for cpuminer! Smiley

I have two small wishes:
- add "--shares" parameter, as seen in CGMiner/BFGMiner, to quit the program after n number of shares.
- add "--sharelog" parameter, as seen in CGMiner/BFGMiner, to log the mining process to a text file.

BFGMiner's README.txt:
--sharelog <arg>    Append share log to file
--shares <arg>      Quit after mining N shares (default: unlimited)

Henri.
pooler
Hero Member
*****
Offline Offline

Activity: 644


View Profile
February 01, 2014, 12:10:48 AM
 #866

minerd.exe – url=stratum+tcp://stratum7.dogehouse.org:9090 –userpass=ikinga:x
Please make sure those options start with two hyphens (--), not with a Unicode dash, and that there is no space after the hyphens.

My GPU mining through cgminer is going fine to my pool, however CPUMiner is acting strange. It is not showing me sending any hashes. This is what it is showing almost all the time: http://i.imgur.com/eakS25T.png
What's going on?
If you send me the exact parameters you're using to connect I can give it a try.

BTC: 15MRTcUweNVJbhTyH5rq9aeSdyigFrskqE · LTC: LTCPooLqTK1SANSNeTR63GbGwabTKEkuS7
mysticode
Newbie
*
Offline Offline

Activity: 7


View Profile
February 01, 2014, 12:22:21 AM
 #867

minerd.exe – url=stratum+tcp://stratum7.dogehouse.org:9090 –userpass=ikinga:x
Please make sure those options start with two hyphens (--), not with a Unicode dash, and that there is no space after the hyphens.

My GPU mining through cgminer is going fine to my pool, however CPUMiner is acting strange. It is not showing me sending any hashes. This is what it is showing almost all the time: http://i.imgur.com/eakS25T.png
What's going on?
If you send me the exact parameters you're using to connect I can give it a try.

minerd.exe -o http://127.0.0.1:8332 -u <my BTC ID> -p <anything>

I am connecting to middlecoin.com:3333 within my Mining Proxy that is listening on 8332.

Sharecoin: SNxYAnB7rgRdZCEqzm5bkMu6ZTPGpaP6Y3
pooler
Hero Member
*****
Offline Offline

Activity: 644


View Profile
February 01, 2014, 09:28:04 AM
 #868

My GPU mining through cgminer is going fine to my pool, however CPUMiner is acting strange. It is not showing me sending any hashes. This is what it is showing almost all the time: http://i.imgur.com/eakS25T.png
What's going on?
If you send me the exact parameters you're using to connect I can give it a try.
minerd.exe -o http://127.0.0.1:8332 -u <my BTC ID> -p <anything>
I am connecting to middlecoin.com:3333 within my Mining Proxy that is listening on 8332.
Which fork of slush's proxy are you using, exactly? Are you also connecting cgminer through the proxy, and if yes with what parameters? Does the issue also arise if you stay connected to the getwork port instead of letting it switch to Stratum (pass --no-stratum to minerd)?

BTC: 15MRTcUweNVJbhTyH5rq9aeSdyigFrskqE · LTC: LTCPooLqTK1SANSNeTR63GbGwabTKEkuS7
noveske
Newbie
*
Offline Offline

Activity: 12


View Profile
February 02, 2014, 11:59:30 AM
 #869

Hi,

I am trying to compile on XP 32bit (that's all I currently have available) and I am having some problems:

I have installed MinGW32, MSYS, C, and C++ compilers.
Downloaded and compiled curl-7.30.0.tar.gz, and copied over the libcurl.m4 and curl-config files.
Downloaded 'pooler-cpuminer-2.3.2.tar.gz' from Sourceforge (I am assuming this is the source to use?).

I am trying to build for 32bit Windows, so I use the config command:

Code:
./configure --host=i686-w64-mingw32 CFLAGS="-O3"

This appears to complete without any issues, so I issue the make command and get the following error message:

Code:
noveske@xp /c/cpuminer-2.3.2
$ make
make  all-recursive
make[1]: Entering directory `/c/cpuminer-2.3.2'
Making all in compat
make[2]: Entering directory `/c/cpuminer-2.3.2/compat'
Making all in jansson
make[3]: Entering directory `/c/cpuminer-2.3.2/compat/jansson'
make[3]: Nothing to be done for `all'.
make[3]: Leaving directory `/c/cpuminer-2.3.2/compat/jansson'
make[3]: Entering directory `/c/cpuminer-2.3.2/compat'
make[3]: Nothing to be done for `all-am'.
make[3]: Leaving directory `/c/cpuminer-2.3.2/compat'
make[2]: Leaving directory `/c/cpuminer-2.3.2/compat'
make[2]: Entering directory `/c/cpuminer-2.3.2'
gcc -std=gnu99 -DHAVE_CONFIG_H -I.  -fno-strict-aliasing -I./compat/jansson -I/c/MinGW/include   -O3 -MT minerd-cpu-miner.o -MD -MP -MF .deps/minerd-cpu-miner.Tpo -c -o minerd-cpu-miner.o `test -f 'cpu-miner.c' || echo './'`cpu-miner.c
In file included from c:\mingw\include\curl\curlbuild.h:124:0,
                 from c:\mingw\include\curl\curl.h:34,
                 from cpu-miner.c:37:
c:\mingw\include\ws2tcpip.h:38:2: error: #error "ws2tcpip.h is not compatible with winsock.h. Include winsock2.h instead."
 #error "ws2tcpip.h is not compatible with winsock.h. Include winsock2.h instead."
  ^
In file included from c:\mingw\include\curl\curlbuild.h:124:0,
                 from c:\mingw\include\curl\curl.h:34,
                 from cpu-miner.c:37:
c:\mingw\include\ws2tcpip.h:147:8: error: redefinition of 'struct ip_mreq'
 struct ip_mreq {
        ^
In file included from c:\mingw\include\windows.h:93:0,
                 from cpu-miner.c:23:
c:\mingw\include\winsock.h:315:8: note: originally defined here
 struct ip_mreq {
        ^
In file included from cpu-miner.c:39:0:
miner.h:9:21: fatal error: pthread.h: No such file or directory
 #include <pthread.h>
                     ^
compilation terminated.
make[2]: *** [minerd-cpu-miner.o] Error 1
make[2]: Leaving directory `/c/cpuminer-2.3.2'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/c/cpuminer-2.3.2'
make: *** [all] Error 2

noveske@xp /c/cpuminer-2.3.2

Any help would be great, thanks
unamis76
Legendary
*
Offline Offline

Activity: 1050



View Profile WWW
February 02, 2014, 03:12:54 PM
 #870

Checksums in the first post don't match with the files, more specifically with the win32 one... Anything wrong?

 

██████████████████████████████████████████████████████████████
██████████████████████████████████████████████████████████████
██████████████████████████████████████████████████████████████
██████████████████████████████████████████████████████████████
██████████████████████████████████████████████████████████████
█████████████████████████████████████████████████████████████
██████████████████████████████████████████████████████████████
██████████████████████████████████████████████████████████████
██████████████████████████████████████████████████████████████
██████████████████████████████████████████████████████████████
██████████████████████████████████████████████████████████████
██████████████████████████████████████████████████████████████
██████████████████████████████████████████████████████████████
 
Get Free Bitcoin Now!
  ¦¯¦¦¯¦    ¦¯¦¦¯¦    ¦¯¦¦¯¦    ¦¯¦¦¯¦   
0.8%-1% House Edge
[/
pooler
Hero Member
*****
Offline Offline

Activity: 644


View Profile
February 02, 2014, 03:56:47 PM
 #871

Checksums in the first post don't match with the files, more specifically with the win32 one... Anything wrong?
Re-downloaded it just now from Sourceforge, and it matches.
Code:
$ sha256sum pooler-cpuminer-2.3.2-win32.zip
5cd04f0324f9f18f4bd989e981b1ac72edb68bf6b76498e616d22cfe0a798122  pooler-cpuminer-2.3.2-win32.zip

BTC: 15MRTcUweNVJbhTyH5rq9aeSdyigFrskqE · LTC: LTCPooLqTK1SANSNeTR63GbGwabTKEkuS7
unamis76
Legendary
*
Offline Offline

Activity: 1050



View Profile WWW
February 02, 2014, 04:57:11 PM
 #872

Checksums in the first post don't match with the files, more specifically with the win32 one... Anything wrong?
Re-downloaded it just now from Sourceforge, and it matches.
Code:
$ sha256sum pooler-cpuminer-2.3.2-win32.zip
5cd04f0324f9f18f4bd989e981b1ac72edb68bf6b76498e616d22cfe0a798122  pooler-cpuminer-2.3.2-win32.zip

It matches. My mistake. Thank you.

 

██████████████████████████████████████████████████████████████
██████████████████████████████████████████████████████████████
██████████████████████████████████████████████████████████████
██████████████████████████████████████████████████████████████
██████████████████████████████████████████████████████████████
█████████████████████████████████████████████████████████████
██████████████████████████████████████████████████████████████
██████████████████████████████████████████████████████████████
██████████████████████████████████████████████████████████████
██████████████████████████████████████████████████████████████
██████████████████████████████████████████████████████████████
██████████████████████████████████████████████████████████████
██████████████████████████████████████████████████████████████
 
Get Free Bitcoin Now!
  ¦¯¦¦¯¦    ¦¯¦¦¯¦    ¦¯¦¦¯¦    ¦¯¦¦¯¦   
0.8%-1% House Edge
[/
HenriH
Newbie
*
Offline Offline

Activity: 16


View Profile
February 02, 2014, 05:02:47 PM
 #873

https://github.com/cbuchner1/CudaMiner/commit/670c8ea83346006180ece0994c6044536873b9f9

Quote
--time-limit      maximum time (s) to mine before exiting the program.

Would be cool to see --time-limit parameter in cpuminer, too.
pooler
Hero Member
*****
Offline Offline

Activity: 644


View Profile
February 02, 2014, 05:44:30 PM
 #874

Quote
--time-limit      maximum time (s) to mine before exiting the program.
Would be cool to see --time-limit parameter in cpuminer, too.
The same result can be obtained by using the timeout command from GNU coreutils (also available via Cygwin and Homebrew).

BTC: 15MRTcUweNVJbhTyH5rq9aeSdyigFrskqE · LTC: LTCPooLqTK1SANSNeTR63GbGwabTKEkuS7
itsik78
Full Member
***
Offline Offline

Activity: 196


View Profile
February 03, 2014, 04:23:49 PM
 #875

Here's a great 24 hours comparison done by ReviewOutlaw for ALL CPU COINS.
http://www.reviewoutlaw.com/most-profitable-cpu-coin-list-alt-coin-profits-24-hours-mining/

Guess who the winner is? Smiley
MemoryCoin of course!

Here's another thread explaining how to CPU mine MMC efficiently:
https://bitcointalk.org/index.php?topic=439874
(This doesn't use CPUMiner but rather a different miner which is built specifically for MMC mining)


BTC: 1NdcwxePGBdEhuzaBftCCLLAPdoV3fQpL2
linuxdoctor
Newbie
*
Offline Offline

Activity: 6


View Profile
February 05, 2014, 05:24:45 AM
 #876

I'm new to Bitcoin and this forum and am trying to learn all I can about it. One way I've always found to learn how things work is to go through the code.  I've already slogged through the code standard Bitcoin implementation, bitcoind/bitcoin-qt, and some of BitcoinArmory. I'm now looking through cpuminer. The code for cpuminer is fairly easy to read being written in standard C.

I understand most of what's going on but I've got a few questions about what I've found in the code. Actually, it's a question about some curious code. Here's the extract from cpu-miner.c. I've removed the irrelevant portions.
Code:
static void *miner_thread(void *userdata)
{
. . .
uint32_t end_nonce = 0xffffffffU / opt_n_threads * (thr_id + 1) - 0x20;
. . .
if (memcmp(work.data, g_work.data, 76)) {
memcpy(&work, &g_work, sizeof(struct work));
work.data[19] = 0xffffffffU / opt_n_threads * thr_id;
} else
work.data[19]++;
. . .
}
This code appears to set up an initial start and end boundary for nonce checking on new work. It also seems to be attempting some cleverness to avoid doing expensive computation on 'long long int' type.  I'm assuming that the intent is to set start and end boundaries at the beginning of each thread's block (relative offset of 0) and then then end at one by before the start of the next thread's block. That's not what the effect is and the following block shows:
Code:
thread = 0 start_nonse = 0x00000000 end_nonse = 0x1fffffdf
thread = 1 start_nonse = 0x1fffffff end_nonse = 0x3fffffde
thread = 2 start_nonse = 0x3ffffffe end_nonse = 0x5fffffdd
thread = 3 start_nonse = 0x5ffffffd end_nonse = 0x7fffffdc
thread = 4 start_nonse = 0x7ffffffc end_nonse = 0x9fffffdb
thread = 5 start_nonse = 0x9ffffffb end_nonse = 0xbfffffda
thread = 6 start_nonse = 0xbffffffa end_nonse = 0xdfffffd9
thread = 7 start_nonse = 0xdffffff9 end_nonse = 0xffffffd8
I created a programme that output the boundaries of each thread block and this is what I got.

The question is: is this intentional, and if so to what end? I know that the end boundary is later adjusted (downwards) based on the hash rate of the machine that the programme calculates on a running basis. It just seems a little odd to me. If this is a bug, a simple fix will make the cleverness work.

Thanks for you insite.

GPG Key: 0xc04142334632314b
pooler
Hero Member
*****
Offline Offline

Activity: 644


View Profile
February 05, 2014, 08:20:46 AM
 #877

I understand most of what's going on but I've got a few questions about what I've found in the code. Actually, it's a question about some curious code. Here's the extract from cpu-miner.c. I've removed the irrelevant portions.
Code:
static void *miner_thread(void *userdata)
{
. . .
uint32_t end_nonce = 0xffffffffU / opt_n_threads * (thr_id + 1) - 0x20;
. . .
if (memcmp(work.data, g_work.data, 76)) {
memcpy(&work, &g_work, sizeof(struct work));
work.data[19] = 0xffffffffU / opt_n_threads * thr_id;
} else
work.data[19]++;
. . .
}
This code appears to set up an initial start and end boundary for nonce checking on new work. It also seems to be attempting some cleverness to avoid doing expensive computation on 'long long int' type.  I'm assuming that the intent is to set start and end boundaries at the beginning of each thread's block (relative offset of 0) and then then end at one by before the start of the next thread's block. That's not what the effect is and the following block shows:
Code:
thread = 0 start_nonse = 0x00000000 end_nonse = 0x1fffffdf
thread = 1 start_nonse = 0x1fffffff end_nonse = 0x3fffffde
thread = 2 start_nonse = 0x3ffffffe end_nonse = 0x5fffffdd
thread = 3 start_nonse = 0x5ffffffd end_nonse = 0x7fffffdc
thread = 4 start_nonse = 0x7ffffffc end_nonse = 0x9fffffdb
thread = 5 start_nonse = 0x9ffffffb end_nonse = 0xbfffffda
thread = 6 start_nonse = 0xbffffffa end_nonse = 0xdfffffd9
thread = 7 start_nonse = 0xdffffff9 end_nonse = 0xffffffd8
I created a programme that output the boundaries of each thread block and this is what I got.

The purpose of that piece of code is to share the same work unit (block header) between all miner threads, so that we don't need to fetch different work (if using getwork) or to compute a different Merkle root hash (if using Stratum) for every thread. This is accomplished by partitioning the nonce space and by assigning a distinct nonce range to each thread, so that no two ranges overlap. Because of how mining works, the search over the nonce space doesn't have to be exhaustive, meaning that it is OK if we don't check all possible nonces before fetching new work.
The gap that you see between nonce ranges is needed to avoid checking some nonces twice, as some of the core algorithm implementations may compute more hashes than requested (because of parallelization). The fact that we may skip checking a tiny fraction (0.000004%) of the nonce space is far from being a problem.

BTC: 15MRTcUweNVJbhTyH5rq9aeSdyigFrskqE · LTC: LTCPooLqTK1SANSNeTR63GbGwabTKEkuS7
linuxdoctor
Newbie
*
Offline Offline

Activity: 6


View Profile
February 05, 2014, 01:58:01 PM
 #878

The gap that you see between nonce ranges is needed to avoid checking some nonces twice, as some of the core algorithm implementations may compute more hashes than requested (because of parallelization). The fact that we may skip checking a tiny fraction (0.000004%) of the nonce space is far from being a problem.

From a practical viewpoint it is unlikely that anybody would be able to hash every nonce in a given block given the present state of available hardware with the possible exception of banks of super computers deep in the bowels of the NSA or other government entity somewhere. From that perspective the gap is irrelevant. By the same token, even the overlap (without the subtract of 32) is irrelevant also and amounts to about the number of threads and still leaves a gap at the upper end of the 32-bit range.

I just wondered if there was something more specific to mining than that that necessitated the gap. It is the algorithm you use to calculate the range for each thread that attracted my attention. It looks like something I used to do with small microprocessors in embedded applications where I needed to play with numbers larger than the available precision of the machine. Very clever and not something I see often any more. The purist in me, though, would want to see each block on a neat zero boundary with no overlap.

Just for fun I adjusted your algorithm so that each block starts on a neat zero boundary with no overlaps.

Code:
uint32_t end_nonce = 0xffffffffU / opt_n_threads * (thr_id + 1) - 0x20;
becomes
uint32_t end_nonce = 0xffffffffU / opt_n_threads * (thr_id + 1) + thr_id;

and

work.data[19] = 0xffffffffU / opt_n_threads * thr_id;
becomes
  work.data[19] = 0xffffffffU / opt_n_threads * thr_id + thr_id;

This produces (for 8 threads):

thread = 0 start_nonse = 0x00000000 end_nonse = 0x1fffffff
thread = 1 start_nonse = 0x20000000 end_nonse = 0x3fffffff
thread = 2 start_nonse = 0x40000000 end_nonse = 0x5fffffff
thread = 3 start_nonse = 0x60000000 end_nonse = 0x7fffffff
thread = 4 start_nonse = 0x80000000 end_nonse = 0x9fffffff
thread = 5 start_nonse = 0xa0000000 end_nonse = 0xbfffffff
thread = 6 start_nonse = 0xc0000000 end_nonse = 0xdfffffff
thread = 7 start_nonse = 0xe0000000 end_nonse = 0xffffffff

This is using gcc 4.8.2 with -O3 optimization on Fedora linux kernel 3.13.0 and AMD FX8350.

Thanks for your timely response.

GPG Key: 0xc04142334632314b
pooler
Hero Member
*****
Offline Offline

Activity: 644


View Profile
February 05, 2014, 02:18:16 PM
 #879

From a practical viewpoint it is unlikely that anybody would be able to hash every nonce in a given block given the present state of available hardware with the possible exception of banks of super computers deep in the bowels of the NSA or other government entity somewhere.
That is incorrect. It only takes about 72 MH/s to check every possible nonce in less than a minute, and dual-CPU systems are already able to attain such rates for SHA-256d.

BTC: 15MRTcUweNVJbhTyH5rq9aeSdyigFrskqE · LTC: LTCPooLqTK1SANSNeTR63GbGwabTKEkuS7
linuxdoctor
Newbie
*
Offline Offline

Activity: 6


View Profile
February 05, 2014, 03:10:48 PM
 #880

You're right. I must still be living with the dinosaurs. I'm getting about 5M on my FX8350 running at the standard clock speed of 4.0GHz which is roughly equivalent to running through all 2^32 possible hashes in 107 seconds when all 8 cores are running.

So, that makes the gap and overlap even more important.

GPG Key: 0xc04142334632314b
Pages: « 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 [44] 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 »
  Print  
 
Jump to:  

Sponsored by , a Bitcoin-accepting VPN.
Powered by MySQL Powered by PHP Powered by SMF 1.1.19 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!