Pages:
Author

Topic: Pregunta de novato... (Read 3178 times)

legendary
Activity: 1974
Merit: 1029
February 04, 2013, 05:54:27 AM
#22
No, listunspent tampoco lo hace. Quizá con las bitcointools de Gavin… pero el paquete que tengo lo bajé cuando conocí bitcoin, Junio 2011, y creo que no se traga los wallets cifrados. Será cosa de a) buscar bitcointools actualizado o b) jugar con un wallet sin cifrar Smiley.

Me autorespondo… He usado github.com/joric/pywallet y no parece que las direcciones cambien:

Code:
$ bitcoind stop
$ python pywallet.py --dumpwallet 2>&1 |grep -w addr >~/dw1
$ wc -l ~/dw1
202 /home/btc/dw1
$ bitcoind &
$ bitcoind walletpassphrasechange foobar foobar12
$ bitcoind stop
$ python pywallet.py --dumpwallet 2>&1 |grep -w addr >~/dw2
$ wc -l ~/dw2
202 /home/btc/dw2
$ md5sum /home/btc/dw?
dac448bf5c695f578f9b1828b43e80ff  /home/btc/dw1
dac448bf5c695f578f9b1828b43e80ff  /home/btc/dw2

En el log aparece:

Code:
02/04/13 10:47:44 ThreadRPCServer method=walletpassphrasechange
02/04/13 10:47:54 Wallet passphrase changed to an nDeriveIterations of 161034
02/04/13 10:47:54 Flushing wallet.dat
02/04/13 10:47:54 Flushed wallet.dat 36ms

Y no los mensajes de "keypool added" que aparecen al crear un wallet.dat nuevo. En fin, corto el rollo Tongue.
legendary
Activity: 1974
Merit: 1029
February 04, 2013, 02:17:53 AM
#21
No, listunspent tampoco lo hace. Quizá con las bitcointools de Gavin… pero el paquete que tengo lo bajé cuando conocí bitcoin, Junio 2011, y creo que no se traga los wallets cifrados. Será cosa de a) buscar bitcointools actualizado o b) jugar con un wallet sin cifrar Smiley.
sr. member
Activity: 471
Merit: 252
February 03, 2013, 06:53:00 AM
#20
Ni listreceivedbyaddress 0 true ni listreceivedbyaddress muestran las direcciones de cambio.

Tal vez listunspent lo haga, pero no termino de entender el formato de salida que da este comando. ¿Alguien echa una mano?
legendary
Activity: 1974
Merit: 1029
February 03, 2013, 06:26:31 AM
#19
Usando 'listreceivedbyaddress 0 true' tampoco cambia:

Code:
$ bitcoind listreceivedbyaddress 0 true >lrba1
$ bitcoind walletpassphrasechange "$BTCOLDPW" "$BTCNEWPW"
$ bitcoind listreceivedbyaddress 0 true >lrba2
$ md5sum lrba?
56df4e1298fa2260ede569f40332ae4c  lrba1
56df4e1298fa2260ede569f40332ae4c  lrba2
hero member
Activity: 616
Merit: 501
January 29, 2013, 08:07:24 PM
#18

Esto me conduce a la siguiente cuestión: Si modifico la contraseña de cifrado de la cartera, ésta se vuelve a cifrar, por lo que entonces se generarán nuevas direcciones de cambio completamente diferentes a las que contenía la cartera anterior cifrada con otra contraseña, ¿es esto así?

Habrá que comprobarlo con el comando "listreceivedbyaddress".

Buena pregunta. ¿Alguien lo ha comprobado?

No creo, el cambio de las direcciones se hace para evitar que el cifrado no sirva de nada si alguien ya había leído el archivo sin cifrar... pero eso no pasaría en el caso de cambiar de una contraseña de cifrado a otra, creo que no se cambian las direcciones, pero no lo he comprobado Tongue.
legendary
Activity: 1652
Merit: 1000
January 29, 2013, 07:20:46 PM
#17

Esto me conduce a la siguiente cuestión: Si modifico la contraseña de cifrado de la cartera, ésta se vuelve a cifrar, por lo que entonces se generarán nuevas direcciones de cambio completamente diferentes a las que contenía la cartera anterior cifrada con otra contraseña, ¿es esto así?

Habrá que comprobarlo con el comando "listreceivedbyaddress".

Buena pregunta. ¿Alguien lo ha comprobado?
sr. member
Activity: 310
Merit: 253
January 29, 2013, 05:04:25 PM
#16
[...]

No hay cambios, pero supongo que eso es porque listreceivedbyaddress no muestra las direcciones de cambio. No sé cómo se pueden ver éstas.

En teoría sí te debería mostrar las direcciones de cambio que hayan recibido bitcoins. Si lo que quieres es listar las direcciones que no han sido utilizadas aún, entonces creo que el comando sería "listreceivedbyaddress 0 true" indicando explícitamente los dos parámetros de número de confirmaciones (1 por defecto) y mostrar direcciones que no han recibido pagos (false por defecto).
sr. member
Activity: 310
Merit: 253
January 29, 2013, 04:48:11 PM
#15
Lo que no me queda claro es si este usuario que mencionas borró el wallet.dat que había encriptado. Parece que así fue, aunque me cuesta entender para qué lo encripto, si finalmente decidió quedarse con el backup no encriptado. ¿Habrá sido un error?

Al buscar el hilo en que había leído esa historia hace meses me he dado cuenta de que la mala memoria me hizo mezclar dos historias diferentes. Por un lado, parece que el usuario que no encontraba 99 BTC después de un pago de 1 BTC (en este hilo: https://bitcointalksearch.org/topic/transaction-change-vanished-128172 ) acabó encontrándolos y se trataba simplemente de alguna torpeza al manejar varios wallet.dat simultáneamente. El caso que tenía en la cabeza y que correspondía a una pérdida de bicoins por haber hecho la copia de seguridad antes de encriptar es el de este otro hilo: https://bitcointalksearch.org/topic/can-the-encrypted-wallet-be-recovered-using-the-unencrypted-110781. En ese caso, el usuario sethsethseth no menciona la cantidad concreta que perdió, salvo que era "a large amount of bitcoins". Lo que le pasó es que le robaron el portátil y después se dio cuenta de que la copia de seguridad que había hecho era anterior a la encriptación del wallet.dat.

Para ayudar a evitar este tipo de descuido se ha añadido un mensaje de advertencia a la última versión del cliente Satoshi (https://github.com/bitcoin/bitcoin/issues/1884).
legendary
Activity: 1974
Merit: 1029
January 29, 2013, 01:16:03 PM
#14
Esto me conduce a la siguiente cuestión: Si modifico la contraseña de cifrado de la cartera, ésta se vuelve a cifrar, por lo que entonces se generarán nuevas direcciones de cambio completamente diferentes a las que contenía la cartera anterior cifrada con otra contraseña, ¿es esto así?

Habrá que comprobarlo con el comando "listreceivedbyaddress".

Code:
$ bitcoind listreceivedbyaddress >lrba1
$ bitcoind walletpassphrasechange "$BTCOLDPW" "$BTCNEWPW"
$ bitcoind listreceivedbyaddress >lrba2
$ md5sum lrba*
fe57e62653a0a451fcdd607de3835d73  lrba1
fe57e62653a0a451fcdd607de3835d73  lrba2
$ _

No hay cambios, pero supongo que eso es porque listreceivedbyaddress no muestra las direcciones de cambio. No sé cómo se pueden ver éstas.
legendary
Activity: 1820
Merit: 1017
January 29, 2013, 07:39:18 AM
#13
Una posibilidad sería un borrado del disco del ordenador y el usuario estaría tranquilo pensando que tenía a buen recaudo una copia del wallet original, aunque no encriptado. El problema es que la copia de seguridad del wallet no encriptado no es igual a la copia de seguridad del wallet encriptado, es claro que esto es un fallo de diseño del software porque la intuición lleva a pensar que el wallet, encriptado o no, debería contener las mismas claves privadas.

Esto me conduce a la siguiente cuestión: Si modifico la contraseña de cifrado de la cartera, ésta se vuelve a cifrar, por lo que entonces se generarán nuevas direcciones de cambio completamente diferentes a las que contenía la cartera anterior cifrada con otra contraseña, ¿es esto así?

Habrá que comprobarlo con el comando "listreceivedbyaddress".
legendary
Activity: 1652
Merit: 1000
January 28, 2013, 10:00:10 PM
#12
Ten cuidado porque si haces una copia de seguridad y después encriptas el monedero, se reasignan nuevas direcciones de reserva (hubo un usuario que perdió 99BTC debido a esto; recibió 100BTC, hizo una copia de seguridad de wallet.dat, encriptó el monedero y, después, hizo un pago de 1BTC. Al destruir el wallet.dat perdió los 99BTC restantes para siempre porque se habían ido a una dirección de cambio de las pregeneradas después de la encriptación). La moraleja de estas cosas es que, con el cliente Satoshi, deberías hacer copias de seguridad habituales si haces pagos frecuentes o si tienes una cantidad considerable de bitcoins (y si tienes muchos, mejor que los guardes en un monedero de papel).


Gracias por tomarte el trabajo, Nubarius; muy clara tu explicación. Lo que no me queda claro es si este usuario que mencionas borró el wallet.dat que había encriptado. Parece que así fue, aunque me cuesta entender para qué lo encripto, si finalmente decidió quedarse con el backup no encriptado. ¿Habrá sido un error?
sr. member
Activity: 310
Merit: 253
January 27, 2013, 05:57:16 PM
#11
Parece ser que uno de los motivos por los que se diseñó así el pago fue para mejorar el anonimato de los pagos al no poder discernir cual es la auténtica transacción y cual "el cambio" sobrante del pago.

Tan solo aclarar que en ese funcionamiento intervienen dos aspectos, uno propio del protocolo y otro de las peculiaridades del cliente Satoshi. Por un lado, hacer que las transacciones permitieran que hubiera partes del saldo que se quedaran en origen haría mucho más complicada y menos eficiente su implementación. Si intentamos idear una manera de indicar cuánto de cada entrada se va a la salida, dejaría de haber una distinción booleana estricta entre "salidas gastadas" ("spent outputs") y "salidas no gastadas" ("unspent outputs"). También sería necesario indicar la comisión explícitamente en un campo específico. En definitiva, el modelo en que las entradas se vacían en la transacción y la comisión de transacción se calcula con una simple resta da lugar a un sistema conceptualmente muy simple, que facilita la implementación de software Bitcoin y los cálculos de saldos disponibles.

Pero por otro lado, es cierto que en el ejemplo que ponía en mi mensaje anterior un programa cliente podría enviar los 2BTC restantes de vuelta a la dirección B. De esa manera, tendríamos una transacción con entradas A (5BTC) y B (5BTC) y salidas Z (8BTC) y B (2BTC), que sería perfectamente válida para el protocolo Bitcoin. Fueron los argumentos de privacidad los que llevaron a Satoshi a utilizar esas direcciones de cambio, ocultas, de modo que al ver una transacción no haya manera de saber cuál es la parte que vuelve al pagador. En cualquier caso, es una peculiaridad del cliente Satoshi y tiene utilidad relativa ya que muchas veces es evidente cuál es el pago y cuál es el cambio (a menudo una de las cantidades es redonda y otra arrastra decimales) y, además, dificulta la identificación de direcciones asociadas a saldos. Por eso, esa gestión de las monedas dentro del monedero del cliente Satoshi es a a veces objeto de críticas y ha habido intentos de añadir un sistema de control de monedas que den al usuario más libertad para configurar las transacciones.

Bueno,

y lo de exportar el wallet para ser usado en BlockChain? Lo he intentado con los dos Plugins que hay, y no funciona ninguno. Y luego, de entre todas las opciones, no reconozco la de subir el wallet.dat...

En teoría, blockchain.info permite ya importar un monedero completo en el siguiente enlace: https://blockchain.info/wallet/import-wallet . No lo he utilizado nunca, por lo que no sé si puede dar algún problema, pero debería funcionar.

En cualquier caso, a veces nos complicamos la vida sin necesidad. La manera más sencilla de transferir el saldo de un wallet.dat a una dirección en otro monedero consiste en hacer un único pago de todo el saldo. El único problema sería la comisión que tendrás que pagar si las monedas son muy nuevas, proceden de muchos micropagos o estás intentando pagar una cantidad menor de 0,01 BTC (o con algún output que lo sea). En tales caso, el cliente Satoshi te impone una comisión mínima.

Entiendo que si la subo, ya podré disponer en BlockChain del wallet que uso en el cliente BitCoin-Qt. ¿Se pueden acceder a dos copias distintas?. [...]


En teoría sí, pero no te recomiendo tener monederos duplicados. Te arriesgas a que uno no refleje bien el saldo cuando has hecho un gasto con el otro y cosas así. Si quieres tener acceso a tus bitcoins desde distintos dispositivos, es mejor que hagas caso a Polvos y te quedes con blockchain.info.

[...] Luego, leí por ahí, algo de que se van creando direcciones a partir de las 100 (entendí que las 100 direcciones ocultas ya están generadas al crear el wallet); y entonces se pueden desincronizar.

El cliente Satoshi crea las direcciones disponibles en tandas de cien (valor por defecto; se puede configurar). Eso quiere decir que si después de instalar el cliente haces una copia de seguridad de wallet.dat y haces unos cuantos pagos, podrás recuperar tu saldo a partir de la copia de seguridad mientras el número de direcciones utilizadas desde la copia (incluyendo las direcciones de cambio) no pase de las cien.  Si no me equivoco, creo que cada vez que se utiliza una dirección de esa reserva de direcciones pregeneradas se añade una dirección nueva a la reserva, de modo que siempre haya un exceso de cien direcciones (o el valor configurado). Ten cuidado porque si haces una copia de seguridad y después encriptas el monedero, se reasignan nuevas direcciones de reserva (hubo un usuario que perdió 99BTC debido a esto; recibió 100BTC, hizo una copia de seguridad de wallet.dat, encriptó el monedero y, después, hizo un pago de 1BTC. Al destruir el wallet.dat perdió los 99BTC restantes para siempre porque se habían ido a una dirección de cambio de las pregeneradas después de la encriptación). La moraleja de estas cosas es que, con el cliente Satoshi, deberías hacer copias de seguridad habituales si haces pagos frecuentes o si tienes una cantidad considerable de bitcoins (y si tienes muchos, mejor que los guardes en un monedero de papel).
hero member
Activity: 597
Merit: 500
January 27, 2013, 05:12:50 PM
#10
Yo en tu lugar usaría el cliente de blockchain.info.

Te lo digo porque ese cliente reenvía el cambio a la misma dirección bitcoin desde la que ha salido la transacción. No actúa como el cliente-qt que envía el cambio a una dirección oculta de tu wallet. Así que, aunque el cliente blockchain.info es menos anónimo, podría serte más útil.
newbie
Activity: 27
Merit: 0
January 27, 2013, 03:25:44 PM
#9
Bueno,

y lo de exportar el wallet para ser usado en BlockChain? Lo he intentado con los dos Plugins que hay, y no funciona ninguno. Y luego, de entre todas las opciones, no reconozco la de subir el wallet.dat...

Algunas idea?

Entiendo que si la subo, ya podré disponer en BlockChain del wallet que uso en el cliente BitCoin-Qt. ¿Se pueden acceder a dos copias distintas?. Luego, leí por ahí, algo de que se van creando direcciones a partir de las 100 (entendí que las 100 direcciones ocultas ya están generadas al crear el wallet); y entonces se pueden desincronizar.

Vosotros que me recomendais? el cliente o blockchain? (y qué usais vosotros que tenéis más experiencia).

legendary
Activity: 1820
Merit: 1017
January 27, 2013, 02:42:19 PM
#8
La explicación que te ha dado Nubarius es la correcta, lo que te ha ocurrido, aunque lo ha hecho con un nivel técnico elevado. Si miras en blockchain el pago que has hecho a tu dirección pública de la cartera que te creaste, verás que tendrá una o varias direcciones de entrada que las has de conocer pues las has utilizado para recibir pagos en el cliente QT, y dos direcciones de salida: la de blockchain y otra desconocida para tí ―como te ha indicado Nubarius― pero que pertenece a tu wallet.dat aunque no la puedas ver. Si miras en dicha página el contenido de esta nueva dirección comprobarás que allí están los bitcoins que "te faltan". El cliente QT te muestra como saldo la suma del contenido monetario de todas las direcciones que contiene el archivo wallet.dat y que por defecto son 100 direcciones que van creciendo a medida que generas nuevas direcciones de pago.

Parece ser que uno de los motivos por los que se diseñó así el pago fue para mejorar el anonimato de los pagos al no poder discernir cual es la auténtica transacción y cual "el cambio" sobrante del pago.
sr. member
Activity: 310
Merit: 253
January 27, 2013, 11:52:06 AM
#7
Existe mucha confusión sobre cómo gestiona las direcciones el cliente Bitcoin-qt. Es importante entender que el saldo que muestra Bitcoin-qt es el saldo agregado de todas las direcciones, pero la interfaz gráfica no especifica cómo se reparte ese saldo entre las diferentes direcciones. Por ejemplo, si tu saldo es de 1 BTC es posible que todo ese saldo corresponda a una salida (output) de una única transacción, pero también puede ser que hayas recibido cuatro pagos de 0,25 BTC en cuatro direcciones distintas.

Hasta ahí es fácil de entender, pero lo que nos lía más a todos al principio es que el cliente almacena también unas direcciones ocultas que no muestra en la interfaz gráfica, que son las llamadas direcciones de cambio ("change addresses"). Básicamente, las transacciones Bitcoin tienen que vaciar el saldo de la dirección de origen. Esas son las reglas básicas de una transacción tal como la ve el protocolo: la suma de los inputs se reparte entre los outputs en las cantidades indicadas y a la diferencia entre la suma de los inputs menos la suma de los outputs se la considera la comisión de transacción que irá al minero cuyo bloque contiene la transacción. Para entender mejor lo que esto implica con un ejemplo, imagínate que instalas el cliente por primera vez y recibes dos pagos de 5 BTC. El cliente te mostrará entonces un saldo de 10 BTC y sabrás en qué direcciones está ese saldo porque tú mismo habrás dado esas direcciones, llamémoslas A y B, a quien te haya pagado. Ahora imagina que tú quieres hacer un pago de 8 BTC a una dirección ajena Z. Las reglas de Bitcoin no permiten tomar 5 BTC de una dirección y 3 de otra, por lo que lo que hace el cliente es lo siguiente: Crea una transacción con dos inputs que son las direcciones A y B y con dos ouputs: uno es la dirección Z y otro es una nueva dirección, llamémosla C, a la que envía los 2 BTC restantes (o un poco menos si se paga comisión de transacción). Así pues, la cadena de bloques acabará conteniendo un bloque con una transacción que tiene dos inputs (A y B) que suman 10 BTC y dos outputs (Z y C) que suman también 10 BTC (si suman menos, la diferencia es por definición la comisión de transacción). Lo que pasa es que esa dirección C no se muestra en la interfaz de usuario, por lo que la persona que ha hecho esta operación se encontrará en tu misma situación. El cliente Bitcoin-qt le dirá que tiene 2 BTC de saldo y en su libreta de direcciones estarán las A y B, que ahora tienen saldo 0, pero no la C, que al ser una dirección de cambio permanecerá oculta.

Para visualizar esas direcciones ocultas en Bitcoin-qt, tienes que hacer lo siguiente:

1. Abrir la consola de depuración (Ayuda->Ventana de depuración->pestaña "Consola")

2. En la línea de órdenes escribe "listreceivedbyaddress"

3. Verás que van apareciendo listadas todas las direcciones a las que han llegado bitcoins, donde estarán esas direcciones de cambio ocultas que no conocías.
full member
Activity: 210
Merit: 100
January 27, 2013, 06:51:26 AM
#6
hmmm ¿Estás seguro que agregaste la dirección correcta a Blockchain?

Por cierto, Blockchain no puede desplumarte porque ellos no tienen acceso a tus datos. Tu navegador cifra tus claves privadas y ellos simplemente las almacenan, pero no pueden acceder de ninguna manera a ellas sin tu contraseña.

Otra cosa que puedes hacer es lo siguiente: Ve a blockchain.info y arriba a la derecha en el recuadro de búsqueda pon todas las direcciones que tengas y te dirá cuál es su saldo.

¡Saludos!
newbie
Activity: 27
Merit: 0
January 26, 2013, 06:05:58 PM
#5
Ok. Vamos a tener que distinguir entre direcciones públicas y claves privadas.

Las claves privadas Bitcoin-qt no te las muestra y a menos que exportes la cartera se mantendrán guardaditas en el archivo wallet.dat.

Aquí tienes una lectura interesante acerca de las direcciones Bitcoin: http://www.queesbitcoin.info/direcciones.html

Con tu dirección puedes hacer dos cosas en Blockchain.info:

1- Agregar una dirección de Monitoreo (Watch only).
Para ello vas a la sección Importar/Exportar y agregar la dirección PÚBLICA. Aquella que empieza con 1.

2- Agregar la dirección privada y tener el control total de los Bitcoins de esa dirección.
Para ello debes exportar tu cartera, obtener la clave privada e importarla en blockchain.info (empieza con un 5).

¿Cuáles de las dos cosas deseas hacer y cuál es el problema que te encuentras?

Bueno, quise simplificar el ejemplo, pero me parece que voy a tener que poner la historia completa.
Entiendo que lo que se denomina en BitCoin la dirección privada, no es más que la clave privada con la que se firma. Y que la pública, es la clave pública en un par RSA.
Para empezar, me choca la diferencia de tamaños.

Lo que inicialmente hice fue instalar bitcoin-qt. Ahí cree dos direcciones, e hice unas 30 transacciones tontas (jugando al satoshidice y eso). Tenía un balance X, el que sea.

Luego, me cree la cartera en blockchain.info. Y transferí una cantidad Y a blockchain.
En mi cliente bitcoin-qt, veo claramente, que hay "X-Y" bitcoins.

Por último, agregué la opción 1 de monitoreo, con las dos direcciones de mi cliente BitCoin-qt. Y en el saldo de blockchain.info solo aparece Y, y no hay rastro del "X-Y" que me dice Bitcoin-qt que tengo.

Desde luego, no me hace mucha gracia el dejar mucho tiempo mi clave privada y que la interfaz web me presente con la contraseña de la clave privada en blockchan.info (tienen todo para desplumarme... bueno, en realidad, estoy haciendo el gamba con un único BCN, pero si quiero usarlo en serio, tengo que entender como funciona). Así, que por comodidad, y para ver, me gustaría más la opción 1.

Gracias por tu paciencia!.
full member
Activity: 210
Merit: 100
January 26, 2013, 05:57:21 PM
#4
Ok. Vamos a tener que distinguir entre direcciones públicas y claves privadas.

Las claves privadas Bitcoin-qt no te las muestra y a menos que exportes la cartera se mantendrán guardaditas en el archivo wallet.dat.

Aquí tienes una lectura interesante acerca de las direcciones Bitcoin: http://www.queesbitcoin.info/direcciones.html

Con tu dirección puedes hacer dos cosas en Blockchain.info:

1- Agregar una dirección de Monitoreo (Watch only).
Para ello vas a la sección Importar/Exportar y agregar la dirección PÚBLICA. Aquella que empieza con 1.

2- Agregar la dirección privada y tener el control total de los Bitcoins de esa dirección.
Para ello debes exportar tu cartera, obtener la clave privada e importarla en blockchain.info (empieza con un 5).

¿Cuáles de las dos cosas deseas hacer y cuál es el problema que te encuentras?
newbie
Activity: 27
Merit: 0
January 26, 2013, 05:16:28 PM
#3
Lo siento pero no entendí casi nada. Cuál es tu cliente Bitcoin?

No entiendo "para una dirección privada tengo un saldo". Tu saldo es global, no es para una dirección.

Una dirección no tiene saldo propio generalmente, sólo puedes saber cuánto se recibió en una cierta dirección, pero los bitcoins que se gasten se pueden tomar de cualquier dirección (a menos que precises explicitamente una cuenta, pero eso sólo funciona con la línea de comando).

Hola,

gracias por crear un hilo para esto Wink.

Bueno, el cliente que uso es el bitcoin-qt.
Y como en blockchain.info he añadido pero solo en modo consulta (porque no sé extraer las claves públicas del bitcoin-qt) la otra dirección, ...
no sé cómo se vinculan.
en bitcoin-qt tengo un saldo; y no está configurada la dirección de blockinfo. ¿Cómo iba a saber bitcoin-qt el saldo global que tengo?

o mejor dicho, cómo se calcula el saldo entonces?
Lo que hice antes, fue transferir una cantidad de BTC desde bitcoin-qt a la dirección de blockinfo/myWallet.
No me cuadra lo que sale (que bitcoin-qt tenga un saldo, y que blockchain tenga otro), y que se supone que tenga un saldo global como comentas (pues bitcoin-qt en teoría no tiene ni idea de que tengo otro Wallet en blockinfo)...

Pages:
Jump to: