Bitcoin Forum
November 02, 2024, 06:46:24 AM *
News: Latest Bitcoin Core release: 28.0 [Torrent]
 
   Home   Help Search Login Register More  
Pages: « 1 ... 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 [272] 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 ... 327 »
  Print  
Author Topic: Bitcoin puzzle transaction ~32 BTC prize to who solves it  (Read 222204 times)
WanderingPhilospher
Full Member
***
Offline Offline

Activity: 1204
Merit: 237

Shooters Shoot...


View Profile
July 20, 2024, 08:59:56 PM
 #5421

Congrats if Alberto Won. Clearly he deserved it, along with Nomachine Wanderingidkphotopsia too

I wasn't even near the computer when this was happening, but I see that one of my RBFs passed. Grin


Barely caught it myself. I guess this confirms that anything under 90 or 100 is a waste of time.
Thank you for the experiment, brazilian man.

Thank you to everyone that participated 🙏

Thank you for your patience...Someone wouldn't have the patience to do this three times.

First 2 were a disaster Smiley I had a bug in my code so the wallets had 62 instead of 66 bits. Luckily, no one was able to RBF me and the blocks came really fast. I am glad that this 3rd time worked. Now we need to work on robust withdrawl strategies for the hunters finding 66 and above
There are already strategies in place. No worries.
Also, are you searching for 66, solo, or any pools?

I hope to run a test, involving the same community, hopefully in the upcoming week...more to come.
kTimesG
Member
**
Offline Offline

Activity: 248
Merit: 38


View Profile
July 20, 2024, 09:04:08 PM
 #5422

I also get that error many times, you need to keep increasing the Fee, this need to be done automatically, manually is almost impossible to send a TX.

I did increase the fees via script... One of my TX examples:

Code:
010000000120e57c9717271536b9623703c14ed29b40c98c3c28f2667935f3d63897fae33e000000006a47304402201af96f3e52586885a5d14bbeb6d9a2951c7eabfbb7d8ab8a41cd3d2574976b78022020496a09878cf87704e47617731f551f201f9364c6cb4b904b48fd5e3ff3dd570121029fd3d2479a37f40d03975cb51ce0fa18cbb709cc46b47caeaa1722cfd3683583ffffffff0138840700000000001976a9148f4da084ec14ed710b96b6a086bbeb06d571faf988ac00000000
Code:
ver     01000000
txins   01 20e57c9717271536b9623703c14ed29b40c98c3c28f2667935f3d63897fae33e 00000000
SIG     6b 48 30 45
r       02 21 00963de23d2d3057f45927956f354384ba23a502b9574f100151121d356fa826a4
s       02 20 51b0ee4f84be544ffe8e2f9c31e9d2536554d8901f49c45771f42563ce34e341
PUB.X   01 21 029fd3d2479a37f40d03975cb51ce0fa18cbb709cc46b47caeaa1722cfd3683583
seq     ffffffff
out #   01
value   98fd050000000000
script  19 76a9148f4da084ec14ed710b96b6a086bbeb06d571faf988ac
lock    00000000

this has a fee of 100.000 (well above your winning TX) and it wasn't accepted by the mempool because of "mempool-txn-conflict". So something else happened, or you used some other trick when you broadcast your TX.
nomachine
Member
**
Offline Offline

Activity: 476
Merit: 35


View Profile
July 20, 2024, 09:21:13 PM
 #5423

I will join and create my transaction with 6.6 BTC fees  Cool

This is exactly what will happen. Someone will pay a fee of 5 BTC in order to earn 1.6 BTC.  Grin

bc1qdwnxr7s08xwelpjy3cc52rrxg63xsmagv50fa8
albert0bsd
Hero Member
*****
Offline Offline

Activity: 994
Merit: 686



View Profile
July 21, 2024, 12:12:33 AM
Last edit: July 21, 2024, 12:28:14 AM by albert0bsd
 #5424

So, although RBF was turned off in the transaction here, did the miner ignore it and did someone else increase the fee and provide a transaction?
Did I get right ?

Yes you get it right, that is what actually happened

Thank you Alberto!!!! I will mention in my next videos, my subscribers will go crazy

You welcome, lets to document this experiment a little bit just to keep the record for others:

Time UTC - 6

Block 853085 - 2024-07-20 12:35:12
Block 853086 - 2024-07-20 12:47:36 

There was a space of 12 minutes between previous block and this challenge block


Your original TX was 5 sat/vB with RBF disabled.



And here some of the Replacements:

13 sat/vB
First replacement listed was mine, (But remember not all accepted TX appear on this page, I already did some test and many Accepted TX disappear from this page)



Another One 29 sat/vB



44 sat/vB


52 sat/vB


64 sat/vB


77 sat/vB


93 sat/vB


111 sat/vB


135 sat/vB


Points to consider
- This was just luck, all depends of miner rules in update their block with new information or not
- No always higher bidder wins.
- Any listed transaction may had the possibility to win.

First 2 were a disaster Smiley I had a bug in my code so the wallets had 62 instead of 66 bits. Luckily, no one was able to RBF me and the blocks came really fast. I am glad that this 3rd time worked. Now we need to work on robust withdrawl strategies for the hunters finding 66 and above

I wasn't aware of the first two, And actually my script scan from 1 to 3f.......... because i wasn't sure if you fixed you code or not (I don't want any surprise for this test)

The only robust  way to withdraw is to mine a block without broadcast the transaction before the block is mined, but this is difficult to do alone, maybe some miner should offer that option but there is no way to trust in a miner a weak public key under 90 bits.

I am available for hiring. Avatar and Signature available for rent. Contact me only by email.
Donations: bc1qjyhcjacmpc9pg8wes82lktyrjcwk4sdvqtm7ky
k3ntINA
Newbie
*
Offline Offline

Activity: 20
Merit: 0


View Profile
July 21, 2024, 12:38:19 AM
 #5425

Alberto, you did not broadcast the transaction in Mempool. Can you explain to us what you did? Although your transaction was sent later on the main network (not through Mempool), it was confirmed.
albert0bsd
Hero Member
*****
Offline Offline

Activity: 994
Merit: 686



View Profile
July 21, 2024, 03:26:43 AM
 #5426

Alberto, you did not broadcast the transaction in Mempool. Can you explain to us what you did? Although your transaction was sent later on the main network (not through Mempool), it was confirmed.

What are you talking about? All TX pass thought mempool (Unless you mine the block)

What I did

1.- retrieve the public key from the mempool transaction (https://mempool.space/docs/api/rest#get-address-transactions-mempool)
2.- get the privatekey with keyhunt (bsgsd daemon https://github.com/albertobsd/keyhunt/blob/main/BSGSD.md )
3.- create a new TX with the UTXO (https://bitcoinlib.readthedocs.io/en/latest/  https://github.com/1200wd/bitcoinlib/blob/master/examples/transactions.py )
4.- broadcast the TX withthe mempool.space API  ( https://mempool.space/docs/api/rest#post-transaction )

All previous point were full automated with python

Some considerations:
2.- I scan from 0x1 to 0x3ffffffffffffffff to avoid previous mistakes of private keys in lower ranges, so It took me twice the amount of time needed to crack the privatekey (It was less than a minute)

4.- I should add some other API provider to broadcast transactions just to add redundancy

The code for broadcast in python using requests

Code:
#Current function
def broadcast_transaction(raw_tx):
    try:
        url = ""
        if networkname=="bitcoin":
            url = "https://mempool.space/api/tx"
        elif networkname=="testnet":
            url = "https://mempool.space/testnet/api/tx"
        else:
            print("Unknow network")
            exit()
        response = requests.post(url, data=raw_tx)
        return response.text
    except requests.exceptions.RequestException as e:
        print(f"error {str(e)}")
        return ""

#Next is just an example, not the actual code.

networkname= 'bitcoin'
RAWTX = "010000000120e57c9717271536b9623703c14ed29b40c98c3c28f2667935f3d63897fae33e000000006a473044022068357d38b55b987e139ce069de456cb399b04f37861879bb7e425ef84b11816a0220425c3fb1c6fa90ca1d7ab6971375a94d62e36a49041d7cfda338d51f4169a08e0121029fd3d2479a37f40d03975cb51ce0fa18cbb709cc46b47caeaa1722cfd3683583ffffffff011821070000000000160014c0f3278346024832e71d25a24d5ae4b73885f85d00000000"
value = broadcast_transaction(RAWTX)
#Need to evaluate value to check if the TX was successful or not



I am available for hiring. Avatar and Signature available for rent. Contact me only by email.
Donations: bc1qjyhcjacmpc9pg8wes82lktyrjcwk4sdvqtm7ky
wilspen
Newbie
*
Offline Offline

Activity: 23
Merit: 0


View Profile
July 21, 2024, 03:33:42 AM
 #5427

Alberto, you did not broadcast the transaction in Mempool. Can you explain to us what you did? Although your transaction was sent later on the main network (not through Mempool), it was confirmed.

What are you talking about? All TX pass thought mempool (Unless you mine the block)

What I did

1.- retrieve the public key from the mempool transaction (https://mempool.space/docs/api/rest#get-address-transactions-mempool)
2.- get the privatekey with keyhunt (bsgsd daemon https://github.com/albertobsd/keyhunt/blob/main/BSGSD.md )
3.- create a new TX with the UTXO (https://bitcoinlib.readthedocs.io/en/latest/  https://github.com/1200wd/bitcoinlib/blob/master/examples/transactions.py )
4.- broadcast the TX withthe mempool.space API  ( https://mempool.space/docs/api/rest#post-transaction )

All previous point were full automated with python

Some considerations:
2.- I scan from 0x1 to 0x3ffffffffffffffff to avoid previous mistakes of private keys in lower ranges, so It took me twice the amount of time needed to crack the privatekey (It was less than a minute)

4.- I should add some other API provider to broadcast transactions just to add redundancy

The code for broadcast in python using requests

Code:
#Current function
def broadcast_transaction(raw_tx):
    try:
        url = ""
        if networkname=="bitcoin":
            url = "https://mempool.space/api/tx"
        elif networkname=="testnet":
            url = "https://mempool.space/testnet/api/tx"
        else:
            print("Unknow network")
            exit()
        response = requests.post(url, data=raw_tx)
        return response.text
    except requests.exceptions.RequestException as e:
        print(f"error {str(e)}")
        return ""

#Next is just an example, not the actual code.

networkname= 'bitcoin'
RAWTX = "010000000120e57c9717271536b9623703c14ed29b40c98c3c28f2667935f3d63897fae33e000000006a473044022068357d38b55b987e139ce069de456cb399b04f37861879bb7e425ef84b11816a0220425c3fb1c6fa90ca1d7ab6971375a94d62e36a49041d7cfda338d51f4169a08e0121029fd3d2479a37f40d03975cb51ce0fa18cbb709cc46b47caeaa1722cfd3683583ffffffff011821070000000000160014c0f3278346024832e71d25a24d5ae4b73885f85d00000000"
value = broadcast_transaction(RAWTX)
#Need to evaluate value to check if the TX was successful or not







Alberto, there is a tool on the Binance website that allows you to pay a higher fee and have the transaction mined quickly, doing this transaction through Binance runs the risk of losing the BTC too, or it's the same, regardless of the place, it would only be safe directly with a miner?
lmajowka
Newbie
*
Offline Offline

Activity: 9
Merit: 0


View Profile
July 21, 2024, 04:46:44 AM
 #5428

Congrats if Alberto Won. Clearly he deserved it, along with Nomachine Wanderingidkphotopsia too

I wasn't even near the computer when this was happening, but I see that one of my RBFs passed. Grin


Barely caught it myself. I guess this confirms that anything under 90 or 100 is a waste of time.
Thank you for the experiment, brazilian man.

Thank you to everyone that participated 🙏

Thank you for your patience...Someone wouldn't have the patience to do this three times.

First 2 were a disaster Smiley I had a bug in my code so the wallets had 62 instead of 66 bits. Luckily, no one was able to RBF me and the blocks came really fast. I am glad that this 3rd time worked. Now we need to work on robust withdrawl strategies for the hunters finding 66 and above
There are already strategies in place. No worries.
Also, are you searching for 66, solo, or any pools?

I hope to run a test, involving the same community, hopefully in the upcoming week...more to come.

I have a youtube channel, me and the subscribers (Are searching solo), But we do plan to have a pool some day
Akito S. M. Hosana
Jr. Member
*
Offline Offline

Activity: 90
Merit: 2


View Profile
July 21, 2024, 05:07:17 AM
 #5429

Alberto, there is a tool on the Binance website that allows you to pay a higher fee and have the transaction mined quickly, doing this transaction through Binance runs the risk of losing the BTC too, or it's the same, regardless of the place, it would only be safe directly with a miner?

Nothing is safe anymore after this experiment. Seconds are at stake here. We are doomed.
nomachine
Member
**
Offline Offline

Activity: 476
Merit: 35


View Profile
July 21, 2024, 05:55:25 AM
Last edit: July 21, 2024, 06:12:51 AM by nomachine
 #5430

Quote
There's an infinite free relay problem. You can keep broadcasting "high feerate" and "high fee" sets of transactions that replace each other, reusing the same fees and alternating which RBF rules you use.


https://gist.github.com/glozow/797bb412868ce959dcd0a2981322fd2a

bc1qdwnxr7s08xwelpjy3cc52rrxg63xsmagv50fa8
k3ntINA
Newbie
*
Offline Offline

Activity: 20
Merit: 0


View Profile
July 21, 2024, 06:42:49 AM
 #5431

I don't know, maybe I'm wrong, but what I noticed is that your transaction was not broadcast from the Mempool route. I think you know a way.
https://www.talkimg.com/images/2024/07/21/4sa2H.gif

The history here has two networks, one is the main one and the other is the main Mempool route, the transaction was not confirmed on the Mempool route, although it was sent earlier, but it was not approved, and maybe the Mempool policy behaved like this. but your transaction did not pass through the Mempol route, am I wrong? ?


https://blockchair.com/bitcoin/address/197kFKvMHoRJPXktc8xJwMjeTuE9xijBQ
jacky19790729
Jr. Member
*
Offline Offline

Activity: 82
Merit: 8


View Profile
July 21, 2024, 09:00:52 AM
 #5432

I don't know, maybe I'm wrong, but what I noticed is that your transaction was not broadcast from the Mempool route. I think you know a way.
The history here has two networks, one is the main one and the other is the main Mempool route, the transaction was not confirmed on the Mempool route, although it was sent earlier, but it was not approved, and maybe the Mempool policy behaved like this. but your transaction did not pass through the Mempol route, am I wrong? ?
https://blockchair.com/bitcoin/address/197kFKvMHoRJPXktc8xJwMjeTuE9xijBQ

After this experiment, I realized that the wallet  software "Electrum"  cannot grab the BTC of #66

we must  create own RawTX  (raw_hex)

use API broadcasts to blockchain

response = requests.post(
    'https://blockchain.info/pushtx',
    data={'tx': raw_tx}
)
print(response.text)
kTimesG
Member
**
Offline Offline

Activity: 248
Merit: 38


View Profile
July 21, 2024, 09:26:31 AM
 #5433

The question is why didn't the bot work as expected, ideally the experiment should have resulted in all the BTC being burned into the fee (or at least a lot more TX than 3 or 4).

It seems the mempool rejects some TX even if the fee is substantially higher. There's something alberto does not tell us, or he was just very lucky. Or maybe the mempool push TX api was the secret sauce that worked.

Some ideas:
- spam the mempool with multiple TX with different output addresses and fees
- broadcast the TX to multiple destinations

And I don't think miners are idiots. Why would they help some random guy for 10 or 20 or 50%, when they can definitely
play the game on their own?

It took TWO seconds to crack the private key. Another fraction of a second to create the new raw TX with higher fee. But the TX pushing failed because of some mempool rules, that was the weird part. Anyway, it's not a matter of minutes here. So any miner can run a bot, do the cracking themselves, and include it in their own mined block no matter what happened in the mempool.

With zero fees. The miners may also reject TXs that try to increase the fee from other people.
Akito S. M. Hosana
Jr. Member
*
Offline Offline

Activity: 90
Merit: 2


View Profile
July 21, 2024, 11:31:42 AM
 #5434

Quote
There's an infinite free relay problem. You can keep broadcasting "high feerate" and "high fee" sets of transactions that replace each other, reusing the same fees and alternating which RBF rules you use.


https://gist.github.com/glozow/797bb412868ce959dcd0a2981322fd2a

So,  bitcoin-devs can change RBF (BIP 125) rules that this scenario cannot happen?

Do any of them even look at this topic here?  Cry
pbies
Full Member
***
Offline Offline

Activity: 296
Merit: 133



View Profile
July 21, 2024, 11:38:47 AM
 #5435

The question is why didn't the bot work as expected, ideally the experiment should have resulted in all the BTC being burned into the fee (or at least a lot more TX than 3 or 4).

It seems the mempool rejects some TX even if the fee is substantially higher. There's something alberto does not tell us, or he was just very lucky. Or maybe the mempool push TX api was the secret sauce that worked.

Some ideas:
- spam the mempool with multiple TX with different output addresses and fees
- broadcast the TX to multiple destinations

And I don't think miners are idiots. Why would they help some random guy for 10 or 20 or 50%, when they can definitely
play the game on their own?

It took TWO seconds to crack the private key. Another fraction of a second to create the new raw TX with higher fee. But the TX pushing failed because of some mempool rules, that was the weird part. Anyway, it's not a matter of minutes here. So any miner can run a bot, do the cracking themselves, and include it in their own mined block no matter what happened in the mempool.

With zero fees. The miners may also reject TXs that try to increase the fee from other people.

If this is possible with puzzle 66 address, then any address with tx in mempool is possible to be taken. Just the range is a little bigger but still computing the pvk should be the same easy as is for puzzle 66.

Then all BTC is in danger. You may want to try steal any other tx in mempool when there is pubkey available.

BTC: bc1qmrexlspd24kevspp42uvjg7sjwm8xcf9w86h5k
AlanJohnson
Member
**
Offline Offline

Activity: 126
Merit: 11


View Profile
July 21, 2024, 12:04:33 PM
 #5436


If this is possible with puzzle 66 address, then any address with tx in mempool is possible to be taken. Just the range is a little bigger but still computing the pvk should be the same easy as is for puzzle 66.

Then all BTC is in danger. You may want to try steal any other tx in mempool when there is pubkey available.

No. 

Properly generated bitcoin private key is insanely hard to crack  (it's 256 bit). Whole bitcoin strength is based on a fact that cracking 256bit is generally considered as impossible.

This can change when quantum machines will be introduced but currently you will not crack it even having PK available.
nomachine
Member
**
Offline Offline

Activity: 476
Merit: 35


View Profile
July 21, 2024, 12:17:12 PM
 #5437

I don't know, maybe I'm wrong, but what I noticed is that your transaction was not broadcast from the Mempool route. I think you know a way.
The history here has two networks, one is the main one and the other is the main Mempool route, the transaction was not confirmed on the Mempool route, although it was sent earlier, but it was not approved, and maybe the Mempool policy behaved like this. but your transaction did not pass through the Mempol route, am I wrong? ?
https://blockchair.com/bitcoin/address/197kFKvMHoRJPXktc8xJwMjeTuE9xijBQ

After this experiment, I realized that the wallet  software "Electrum"  cannot grab the BTC of #66

we must  create own RawTX  (raw_hex)

use API broadcasts to blockchain

response = requests.post(
    'https://blockchain.info/pushtx',
    data={'tx': raw_tx}
)
print(response.text)



They've made opt-in Replace-By-Fee (RBF) the default in Electrum version 4.4.0. If you want to use the old version without this feature by default, you can install version 4.3.0 using the following steps:


git clone https://github.com/spesmilo/electrum.git
cd electrum/
git checkout 4.3.0
pip3 install -r contrib/deterministic-build/requirements.txt
pip3 install .

You can use old version of Electrum but every transaction will automatically have RBF enabled on the node.
Only option is to change node in Electrum to your own full-RBF-disabled node.
And mine in secret this transaction.

However, once the transaction is broadcasted using any (API) method, it is at risk of being replaced.

Even if you share it privately with a third-party miner, that miner could still replace it..

bc1qdwnxr7s08xwelpjy3cc52rrxg63xsmagv50fa8
Gord0nFreeman
Newbie
*
Offline Offline

Activity: 22
Merit: 1


View Profile
July 21, 2024, 12:31:29 PM
 #5438

I don't know, maybe I'm wrong, but what I noticed is that your transaction was not broadcast from the Mempool route. I think you know a way.
The history here has two networks, one is the main one and the other is the main Mempool route, the transaction was not confirmed on the Mempool route, although it was sent earlier, but it was not approved, and maybe the Mempool policy behaved like this. but your transaction did not pass through the Mempol route, am I wrong? ?
https://blockchair.com/bitcoin/address/197kFKvMHoRJPXktc8xJwMjeTuE9xijBQ

After this experiment, I realized that the wallet  software "Electrum"  cannot grab the BTC of #66

we must  create own RawTX  (raw_hex)

use API broadcasts to blockchain

response = requests.post(
    'https://blockchain.info/pushtx',
    data={'tx': raw_tx}
)
print(response.text)



They've made opt-in Replace-By-Fee (RBF) the default in Electrum version 4.4.0. If you want to use the old version without this feature by default, you can install version 4.3.0 using the following steps:


git clone https://github.com/spesmilo/electrum.git
cd electrum/
git checkout 4.3.0
pip3 install -r contrib/deterministic-build/requirements.txt
pip3 install .

You can use old version of Electrum but every transaction will automatically have RBF enabled on the node.
Only option is to change node in Electrum to your own full-RBF-disabled node.
And mine in secret this transaction.

However, once the transaction is broadcasted using any (API) method, it is at risk of being replaced.

Even if you share it privately with a third-party miner, that miner could still replace it..

I reached out to major mining pools, and they told me they can't confirm a transaction without it going through the mempool! The pool operators will take the entire reward for themselves, they’ve known about this for a while and are just waiting for it! I don’t even know what to do in this situation... It's frustrating.
pbies
Full Member
***
Offline Offline

Activity: 296
Merit: 133



View Profile
July 21, 2024, 12:33:47 PM
 #5439


If this is possible with puzzle 66 address, then any address with tx in mempool is possible to be taken. Just the range is a little bigger but still computing the pvk should be the same easy as is for puzzle 66.

Then all BTC is in danger. You may want to try steal any other tx in mempool when there is pubkey available.

No. 

Properly generated bitcoin private key is insanely hard to crack  (it's 256 bit). Whole bitcoin strength is based on a fact that cracking 256bit is generally considered as impossible.

This can change when quantum machines will be introduced but currently you will not crack it even having PK available.

Yes, it is possible. Just dividing pubkey by some values. Hitting the pvk is matter of even 2 seconds as other fella said here.

BTC: bc1qmrexlspd24kevspp42uvjg7sjwm8xcf9w86h5k
AlanJohnson
Member
**
Offline Offline

Activity: 126
Merit: 11


View Profile
July 21, 2024, 12:38:51 PM
 #5440


If this is possible with puzzle 66 address, then any address with tx in mempool is possible to be taken. Just the range is a little bigger but still computing the pvk should be the same easy as is for puzzle 66.

Then all BTC is in danger. You may want to try steal any other tx in mempool when there is pubkey available.

No. 

Properly generated bitcoin private key is insanely hard to crack  (it's 256 bit). Whole bitcoin strength is based on a fact that cracking 256bit is generally considered as impossible.

This can change when quantum machines will be introduced but currently you will not crack it even having PK available.

Yes, it is possible. Just dividing pubkey by some values. Hitting the pvk is matter of even 2 seconds as other fella said here.

Ok ... So why all the puzzles with lower ranges are still sitting there ?   Why nobody can crack puzzle 130 ? If that would be possilble all the puzzles would be empty now and every day we would be hearing about stolen bitcoins after making transactions (and releasing public key).
Pages: « 1 ... 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 [272] 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 ... 327 »
  Print  
 
Jump to:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.19 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!