Bitcoin Forum
December 07, 2016, 02:28:44 PM *
News: Latest stable version of Bitcoin Core: 0.13.1  [Torrent].
 
   Home   Help Search Donate Login Register  
Pages: « 1 ... 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 [608] 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 ... 744 »
  Print  
Author Topic: [1500 TH] p2pool: Decentralized, DoS-resistant, Hop-Proof pool  (Read 2032429 times)
jtoomim
Hero Member
*****
Offline Offline

Activity: 555


View Profile WWW
February 20, 2015, 12:59:29 PM
 #12141

Everyone on p2pool has to have the same shares and agree the same shares are valid.
Thus the share chain exists and is based on the BTC block chain idea.

If you remove the share chain, you have to keep a pool database of shares (yeah something I know quite a bit about Tongue)
You suddenly need a full fledged database that's able to store all the shares required and also ... the biggest issue of all ... ensure that database is the same on EVERY p2pool node ... so how do you do that? Share chain ... Tongue

Yes, there needs to be some data structure (which you call a database) to keep track of all of the shares. The point I'm raising is that the structure for linking the shares together does not have to be a chain. In a chain, each link has one parent and one child. This forces the serialization of share mining and submission, which causes performance problems for parallel and distributed systems. I'm proposing that we instead use a different structure, such as a directed acyclic graph (which I previously incorrectly called a tree).

You don't need to ensure that the database is the same on every node. There are some types of differences (a couple of extra leaves on the DAG, for example, or orphans on the share chain) that do not cause problems. You just need to ensure that if someone sends you a share, you can find all its (recent) ancestors and ensure that the submitted share rewards them all appropriately.

Essentially, the problem falls to how you deal with branching. Let's imagine shares as if they were mathematicians. Pythagoras proved a^2 + b^2 = c^2. Euclid referenced Pythagoras when he wrote Elements on the subject of geometry. Skipping a few years, Newton created calculus while making use of Euclid's geometry. At about the same time, Leibniz created calculus while making use of Euclid's geometry. A century later, Euler used calculus to define the number e. Who does he credit for calculus? If we're using a share chain, then even if Euler knows both Newton's and Leibniz's works, he has to choose one of them to ignore simply because they didn't know each other's works. What I'm proposing is that we allow Euler to credit both Leibniz and Newton at the same time, as siblings in science. Then, when Riemann comes along and cites Euler, we know that Riemann inherited influence from both Leibniz and Newton, and we don't have to stiff Leibniz just because Newton was better connected. Heck, we could even have the Indian genius Ramanujan (early 20th century) reference both Riemann (19th century) and Madhava of the Kerala school (14th century), so long neglected by Europeans.

When verifying a share (i.e. a candidate block), you collect all of the ancestors of that share and ensure that the candidate share includes appropriate payouts to the mining address associated with those ancestors. As long as you have verified all of the immediate parents of that share (of which there might be 10), you will also have all of the more distant ancestors. If you are missing any of those parent shares, you can get them from the node that's forwarding the candidate share to you, and then you can recursively verify those, etc. until you get to the height limit for the PPLNS system.

One (optional?) constraint that makes sense for which shares can be incorporated: all parent shares must have been efforts at solving the same bitcoin block. No need to reward work that is actually obsolete. Something else might be needed here. Need to think about it later.

The main benefit is that verifying shares and switching the share you're working on to one that's based on the most recent published shares is no longer time-sensitive. If you aren't working off the tallest share branch in existence, the shares you published will still probably be incorporated into the share DAG. Thus, even if new shares are being published every second, you don't have to rerun GetBlockTemplate() and flush the work on your miner for many tens of seconds, and possibly hundreds of seconds. The only constraint is that you need to publish your share early enough that it's cited before a new block is found.

Hosting bitcoin miners for $75 to $90/kW/month on clean, cheap hydro power.
http://Toom.im
1481120924
Hero Member
*
Offline Offline

Posts: 1481120924

View Profile Personal Message (Offline)

Ignore
1481120924
Reply with quote  #2

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

Activity: 686


WANTED: Active dev to fix & re-write p2pool in C


View Profile
February 20, 2015, 01:51:26 PM
 #12142

Well, today is a sad day.

For the first time in over 2 years I have had to make the difficult decision of distributing my hash rate away from my p2pool node onto other centralised pools. This was not done through greed or profit hunting, but through necessity, as I have bills coming up that can't be paid unless I have some BTC coming in. I've always been happy just to break even, making a profit was just an added bonus, because more important to me was helping to promote decentralised mining & help secure the Bitcoin network, which I still believe in wholeheartedly. However, the way p2pool has performed since the last diff increase has made even this impossible & shows the desperate & well overdue need for a complete overhaul of the p2pool software.

I find it so frustrating that over the last 2+ years there has been zero attempt by the dev to address the problems that have been repeatedly pointed out by p2pool users, this was highlighted by his temper tantrum over donations before deciding to ignore any & all efforts by p2pool users to communicate with him before he abandoned this forum completely. I've lost count of how many times I & other users have said that the moment development of software stops, it is out of date & will die, and by development I mean discussing & addressing known issues & flaws & improving the user experience, not adding another shitcoin or some other useless feature that nobody will use or cares for.

We can't keep telling ourselves "don't worry, they'll come back", because eventually they won't. Not until things change, & I can't see that happening anytime soon. In the meantime, I'll be keeping my nodes up for as long as I can in the faint hope that some knight in shining armour will gallop into the github, fork it,  rewrite p2pool in C whilst simultaneously fixing all the known about issues over the last 2+ years. Wishful thinking.

Yes, today is a sad day indeed  Sad

-- Smiley  Thank you for smoking  Smiley --  If you paid VAT to dogie for items you should read this thread:  https://bitcointalk.org/index.php?topic=1018906.0
reallive1
Newbie
*
Offline Offline

Activity: 5


View Profile
February 20, 2015, 03:58:06 PM
 #12143

Hi
Would documentation be slightly better (https://en.bitcoin.it/wiki/P2Pool_code_documentation, code documentation is one thing, project documentation is another which seems to be absent altogether), it would be easier to grant your wish.

Use of C++(mostly boost) could also be an option, but plain C could be feasible.
PatMan
Hero Member
*****
Offline Offline

Activity: 924


Watch out for the "Neg-Rep-Dogie-Police".....


View Profile WWW
February 20, 2015, 04:52:09 PM
 #12144

Hi
Would documentation be slightly better (https://en.bitcoin.it/wiki/P2Pool_code_documentation, code documentation is one thing, project documentation is another which seems to be absent altogether), it would be easier to grant your wish.

Use of C++(mostly boost) could also be an option, but plain C could be feasible.

Maybe if you contacted forrestv via github he can provide you with the info you need, no point in PM'ing him here, he hasn't even logged on for several months. Do you have an idea on how to fix the variance/scaling issue?

Yes, today is a sad day indeed  Sad

Sorry to hear that buddy, but I can't say I blame you - I'll be doing the same soon  Cry

"When one person is deluded it is called insanity - when many people are deluded it is called religion" - Robert M. Pirsig.  I don't want your coins, I want change.
Amazon UK BTC payment service - https://bitcointalk.org/index.php?topic=301229.0 - with FREE delivery!
http://www.ae911truth.org/ - http://rethink911.org/ - http://rememberbuilding7.org/
reallive1
Newbie
*
Offline Offline

Activity: 5


View Profile
February 20, 2015, 05:00:26 PM
 #12145

Do you have an idea on how to fix the variance/scaling issue?

At the moment, I'm more interested in understanding how the whole shebang works, then maybe fixing the issue will be something I'll look into. I'll start by digging into the github code (I'm not too familiar with python, anyway), sending a message to the guy will surely helps.
PatMan
Hero Member
*****
Offline Offline

Activity: 924


Watch out for the "Neg-Rep-Dogie-Police".....


View Profile WWW
February 20, 2015, 05:34:20 PM
 #12146

Do you have an idea on how to fix the variance/scaling issue?

At the moment, I'm more interested in understanding how the whole shebang works, then maybe fixing the issue will be something I'll look into. I'll start by digging into the github code (I'm not too familiar with python, anyway), sending a message to the guy will surely helps.

I'm sure I speak for every p2pool user when I say "THANKS!" Any kind of input is greatly appreciated, & if you need any info, this thread is/was full of some very knowledgable p2pool users. I'm no coder/programmer, but will help in any way I can of course. If it's any help, you might try looking at this thread also:

https://bitcointalk.org/index.php?topic=213051.0

...where I first suggested an upgraded p2pool system - there are some good suggestions & info there, albeit quite old.  Wink

"When one person is deluded it is called insanity - when many people are deluded it is called religion" - Robert M. Pirsig.  I don't want your coins, I want change.
Amazon UK BTC payment service - https://bitcointalk.org/index.php?topic=301229.0 - with FREE delivery!
http://www.ae911truth.org/ - http://rethink911.org/ - http://rememberbuilding7.org/
reallive1
Newbie
*
Offline Offline

Activity: 5


View Profile
February 20, 2015, 06:16:56 PM
 #12147

Well, I see that it does requires some polishing, throwing exception just because bitcoind is still downloading block...

Code:
2015-02-20 12:50:05.782411 p2pool (version 13.4-67-gbcd9a50)
2015-02-20 12:50:05.782574
2015-02-20 12:50:05.782741 Testing bitcoind RPC connection to 'http://127.0.0.1:8332/' with username 'reallive1'...
2015-02-20 12:50:06.576906 > Error getting work from bitcoind:
2015-02-20 12:50:06.577017 > Traceback (most recent call last):
2015-02-20 12:50:06.577082 >   File "/usr/lib/python2.7/dist-packages/twisted/internet/defer.py", line 577, in _runCallbacks
2015-02-20 12:50:06.577147 >     current.result = callback(current.result, *args, **kw)
2015-02-20 12:50:06.577208 >   File "/usr/lib/python2.7/dist-packages/twisted/internet/defer.py", line 1155, in gotResult
2015-02-20 12:50:06.577267 >     _inlineCallbacks(r, g, deferred)
2015-02-20 12:50:06.577326 >   File "/usr/lib/python2.7/dist-packages/twisted/internet/defer.py", line 1097, in _inlineCallbacks
2015-02-20 12:50:06.577386 >     result = result.throwExceptionIntoGenerator(g)
2015-02-20 12:50:06.577448 >   File "/usr/lib/python2.7/dist-packages/twisted/python/failure.py", line 389, in throwExceptionIntoGenerator
2015-02-20 12:50:06.577509 >     return g.throw(self.type, self.value, self.tb)
2015-02-20 12:50:06.577569 > --- <exception caught here> ---
2015-02-20 12:50:06.577626 >   File "/home/<userreact>/src/p2pool/p2pool/util/deferral.py", line 41, in f
2015-02-20 12:50:06.577683 >     result = yield func(*args, **kwargs)
2015-02-20 12:50:06.577739 >   File "/usr/lib/python2.7/dist-packages/twisted/internet/defer.py", line 1097, in _inlineCallbacks
2015-02-20 12:50:06.577797 >     result = result.throwExceptionIntoGenerator(g)
2015-02-20 12:50:06.577854 >   File "/usr/lib/python2.7/dist-packages/twisted/python/failure.py", line 389, in throwExceptionIntoGenerator
2015-02-20 12:50:06.577912 >     return g.throw(self.type, self.value, self.tb)
2015-02-20 12:50:06.577969 >   File "/home/<userreact>/src/p2pool/p2pool/bitcoin/helper.py", line 36, in getwork
2015-02-20 12:50:06.578027 >     work = yield go()
2015-02-20 12:50:06.578082 >   File "/usr/lib/python2.7/dist-packages/twisted/internet/defer.py", line 1097, in _inlineCallbacks
2015-02-20 12:50:06.578140 >     result = result.throwExceptionIntoGenerator(g)
2015-02-20 12:50:06.578195 >   File "/usr/lib/python2.7/dist-packages/twisted/python/failure.py", line 389, in throwExceptionIntoGenerator
2015-02-20 12:50:06.578253 >     return g.throw(self.type, self.value, self.tb)
2015-02-20 12:50:06.578310 >   File "/home/<userreact>/src/p2pool/p2pool/util/jsonrpc.py", line 133, in _http_do
2015-02-20 12:50:06.578370 >     raise Error_for_code(resp['error']['code'])(resp['error']['message'], resp['error'].get('data', None))
2015-02-20 12:50:06.578430 > p2pool.util.jsonrpc.NarrowError: -10 Bitcoin is downloading blocks...
windpath
Legendary
*
Offline Offline

Activity: 938


View Profile WWW
February 20, 2015, 06:25:40 PM
 #12148

Well, I see that it does requires some polishing, throwing exception just because bitcoind is still downloading block...

Code:
2015-02-20 12:50:05.782411 p2pool (version 13.4-67-gbcd9a50)
2015-02-20 12:50:05.782574
2015-02-20 12:50:05.782741 Testing bitcoind RPC connection to 'http://127.0.0.1:8332/' with username 'reallive1'...
2015-02-20 12:50:06.576906 > Error getting work from bitcoind:
2015-02-20 12:50:06.577017 > Traceback (most recent call last):
2015-02-20 12:50:06.577082 >   File "/usr/lib/python2.7/dist-packages/twisted/internet/defer.py", line 577, in _runCallbacks
2015-02-20 12:50:06.577147 >     current.result = callback(current.result, *args, **kw)
2015-02-20 12:50:06.577208 >   File "/usr/lib/python2.7/dist-packages/twisted/internet/defer.py", line 1155, in gotResult
2015-02-20 12:50:06.577267 >     _inlineCallbacks(r, g, deferred)
2015-02-20 12:50:06.577326 >   File "/usr/lib/python2.7/dist-packages/twisted/internet/defer.py", line 1097, in _inlineCallbacks
2015-02-20 12:50:06.577386 >     result = result.throwExceptionIntoGenerator(g)
2015-02-20 12:50:06.577448 >   File "/usr/lib/python2.7/dist-packages/twisted/python/failure.py", line 389, in throwExceptionIntoGenerator
2015-02-20 12:50:06.577509 >     return g.throw(self.type, self.value, self.tb)
2015-02-20 12:50:06.577569 > --- <exception caught here> ---
2015-02-20 12:50:06.577626 >   File "/home/<userreact>/src/p2pool/p2pool/util/deferral.py", line 41, in f
2015-02-20 12:50:06.577683 >     result = yield func(*args, **kwargs)
2015-02-20 12:50:06.577739 >   File "/usr/lib/python2.7/dist-packages/twisted/internet/defer.py", line 1097, in _inlineCallbacks
2015-02-20 12:50:06.577797 >     result = result.throwExceptionIntoGenerator(g)
2015-02-20 12:50:06.577854 >   File "/usr/lib/python2.7/dist-packages/twisted/python/failure.py", line 389, in throwExceptionIntoGenerator
2015-02-20 12:50:06.577912 >     return g.throw(self.type, self.value, self.tb)
2015-02-20 12:50:06.577969 >   File "/home/<userreact>/src/p2pool/p2pool/bitcoin/helper.py", line 36, in getwork
2015-02-20 12:50:06.578027 >     work = yield go()
2015-02-20 12:50:06.578082 >   File "/usr/lib/python2.7/dist-packages/twisted/internet/defer.py", line 1097, in _inlineCallbacks
2015-02-20 12:50:06.578140 >     result = result.throwExceptionIntoGenerator(g)
2015-02-20 12:50:06.578195 >   File "/usr/lib/python2.7/dist-packages/twisted/python/failure.py", line 389, in throwExceptionIntoGenerator
2015-02-20 12:50:06.578253 >     return g.throw(self.type, self.value, self.tb)
2015-02-20 12:50:06.578310 >   File "/home/<userreact>/src/p2pool/p2pool/util/jsonrpc.py", line 133, in _http_do
2015-02-20 12:50:06.578370 >     raise Error_for_code(resp['error']['code'])(resp['error']['message'], resp['error'].get('data', None))
2015-02-20 12:50:06.578430 > p2pool.util.jsonrpc.NarrowError: -10 Bitcoin is downloading blocks...

Not much to polish there other then maybe notifying the user that you can't mine without the latest block....

I admire your enthusiasm for rewriting p2pool in C, and if its bonafide would be happy to run a bounty and help raise you some cash for its completion.

Can you tell us a little about your crypto/coding background?

I've been having some shower thoughts lately about how Multisig or Smart Contracts could be used to solve the variance problem for smaller miners, by building a trustless escrow system to handle small payouts with a payment threshold...

Look forward to hearing more.

aurel57
Legendary
*
Offline Offline

Activity: 1050



View Profile
February 20, 2015, 07:22:17 PM
 #12149

Well, today is a sad day.


Yes, today is a sad day indeed  Sad

It is indeed a sad day to see someone as yourself that was so passionate about p2pool to have to move your miners. I would be very interested in which pool you have decided to mine on and your reasons why? If you don't want to post it here I understand.   
reallive1
Newbie
*
Offline Offline

Activity: 5


View Profile
February 20, 2015, 07:33:30 PM
 #12150

Not much to polish there other then maybe notifying the user that you can't mine without the latest block....

I admire your enthusiasm for rewriting p2pool in C, and if its bonafide would be happy to run a bounty and help raise you some cash for its completion.

Can you tell us a little about your crypto/coding background?

I've been having some shower thoughts lately about how Multisig or Smart Contracts could be used to solve the variance problem for smaller miners, by building a trustless escrow system to handle small payouts with a payment threshold...

Look forward to hearing more.


As far as rewriting goes:
Stratum being a "human readable protocol"(json based), it's string manipulation in the end, python should be good enough.

My point in posting the exception log is this: if you manage a simple case like: "bitcoind is not ready" with exception throwing, which are at least in C++ and Java have a lot of overhead and thus performance draw back, I wonder what might be next.

As far as my background, I do embedded software development as a living, mostly C/C++.
Meuh6879
Legendary
*
Offline Offline

Activity: 1092



View Profile
February 20, 2015, 07:35:27 PM
 #12151

It is indeed a sad day to see someone as yourself that was so passionate about p2pool to have to move your miners. I would be very interested in which pool you have decided to mine on and your reasons why? If you don't want to post it here I understand.   

i think it's only the 0.10 bitcoin core installation that it reduces the mining powa on P2pool, actually ...  Wink
for me, it's 2 days without the bitcoin core -from 0.9.1 to 0.10-

French ... but not so much   ---===---   P2P ... it's people at the end   ---===---   P2Pool (10,9 GH/s).
Comment miner des bitcoins ? Un tutoriel est là : https://bitcointalk.org/index.php?topic=1114415.0
Bitcoin change everything ... an explain of this fact : https://www.youtube.com/watch?v=joITmEr4SjY
IYFTech
Hero Member
*****
Offline Offline

Activity: 686


WANTED: Active dev to fix & re-write p2pool in C


View Profile
February 20, 2015, 07:56:32 PM
 #12152

Well, today is a sad day.


Yes, today is a sad day indeed  Sad

It is indeed a sad day to see someone as yourself that was so passionate about p2pool to have to move your miners. I would be very interested in which pool you have decided to mine on and your reasons why? If you don't want to post it here I understand.   

I've spread it out over a few pools, as I hate centralization & hopefully it will help keep variance down. Any pool that pays on time, isn't plagued by shills & is run by a reputable & trustworthy dev is good by me.

So no, not BAN  Wink

-- Smiley  Thank you for smoking  Smiley --  If you paid VAT to dogie for items you should read this thread:  https://bitcointalk.org/index.php?topic=1018906.0
PatMan
Hero Member
*****
Offline Offline

Activity: 924


Watch out for the "Neg-Rep-Dogie-Police".....


View Profile WWW
February 20, 2015, 08:01:15 PM
 #12153


I've spread it out over a few pools, as I hate centralization & hopefully it will help keep variance down. Any pool that pays on time, isn't plagued by shills & is run by a reputable & trustworthy dev is good by me.

So no, not BAN  Wink

 Cheesy Cheesy Cheesy Cheesy

Nice one bud.

"When one person is deluded it is called insanity - when many people are deluded it is called religion" - Robert M. Pirsig.  I don't want your coins, I want change.
Amazon UK BTC payment service - https://bitcointalk.org/index.php?topic=301229.0 - with FREE delivery!
http://www.ae911truth.org/ - http://rethink911.org/ - http://rememberbuilding7.org/
aurel57
Legendary
*
Offline Offline

Activity: 1050



View Profile
February 20, 2015, 08:15:38 PM
 #12154

Well, today is a sad day.


Yes, today is a sad day indeed  Sad

It is indeed a sad day to see someone as yourself that was so passionate about p2pool to have to move your miners. I would be very interested in which pool you have decided to mine on and your reasons why? If you don't want to post it here I understand.  

I've spread it out over a few pools, as I hate centralization & hopefully it will help keep variance down. Any pool that pays on time, isn't plagued by shills & is run by a reputable & trustworthy dev is good by me.

So no, not BAN  Wink

I already knew that  Wink  but I have been spreading mine around as well.  I am on Kano's, Slush and have moved some to BAN to check on payments. I have rented miners for p2pool and will move miners from the PPS pool to p2pool as I want to keep shares.
nreal
Full Member
***
Offline Offline

Activity: 182


View Profile
February 20, 2015, 08:39:04 PM
 #12155

Stratehm/stratum-proxy works just perfect on p2pool, not sure why but even one s4 hosted at umisoo works just fine without any changes to queue.
Best results ever  Grin worth to try, and it supports nicehash too so when the price is right...

https://github.com/Stratehm/stratum-proxy
-ck
Moderator
Legendary
*
Offline Offline

Activity: 2002


Ruu \o/


View Profile WWW
February 20, 2015, 10:14:08 PM
 #12156

As far as rewriting goes:
Stratum being a "human readable protocol"(json based), it's string manipulation in the end, python should be good enough.
The stratum protocol bits are just string manipulation but that part alone is only one tiny component of writing pool software. It was good enough in the days when only one client was expected to connect to a p2pool instance, but if you want p2pool to be useful it needs to attract big miners to push the hashrate which means hundreds if not thousands of clients for a local p2pool instance. It does not remotely scale. There are far more fundamental problems that need addressing in the modern world of mining than the mostly cosmetic startup exception issue.

Primary developer/maintainer for cgminer and ckpool/ckproxy.
Pooled mine at kano.is, solo mine at solo.ckpool.org
-ck
IYFTech
Hero Member
*****
Offline Offline

Activity: 686


WANTED: Active dev to fix & re-write p2pool in C


View Profile
February 20, 2015, 10:35:14 PM
 #12157

Incidentally, I too would have no problem contributing to a bounty fund for a rewrite if anyone suitable/capable can be found. I fear that if nothing is done, p2pools days are numbered.

-- Smiley  Thank you for smoking  Smiley --  If you paid VAT to dogie for items you should read this thread:  https://bitcointalk.org/index.php?topic=1018906.0
reallive1
Newbie
*
Offline Offline

Activity: 5


View Profile
February 20, 2015, 10:41:41 PM
 #12158

As far as rewriting goes:
Stratum being a "human readable protocol"(json based), it's string manipulation in the end, python should be good enough.
The stratum protocol bits are just string manipulation but that part alone is only one tiny component of writing pool software. It was good enough in the days when only one client was expected to connect to a p2pool instance, but if you want p2pool to be useful it needs to attract big miners to push the hashrate which means hundreds if not thousands of clients for a local p2pool instance. It does not remotely scale. There are far more fundamental problems that need addressing in the modern world of mining than the mostly cosmetic startup exception issue.

You're right on the point where cosmetic start-up issue is not the biggest problem. Starting from there, could you list known fundamental problem?

To my knowledge, stratum don't keep its socket open(am I wrong?), thus scalability shouldn't be much of an issue here if the computer is fast enough. This could be profiled to get a better idea.
wilth1
Member
**
Offline Offline

Activity: 63


View Profile
February 21, 2015, 01:03:02 AM
 #12159

Spun up a node yesterday and pointed some gear at it Shocked
Prelude
Legendary
*
Offline Offline

Activity: 1204



View Profile
February 21, 2015, 01:04:53 AM
 #12160

Count me in for a bounty. We can't just let p2pool die.
Pages: « 1 ... 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 [608] 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 ... 744 »
  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!