elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Tutorial básico de Quickjs


  Mostrar Mensajes
Páginas: 1 2 3 4 5 6 [7] 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 ... 431
61  Foros Generales / Dudas Generales / Re: como hago par adescarga esto en: 2 Julio 2023, 18:18 pm
Abre el enlace, y luego carpeta popr carpeta, para descargar uno a uno los mp4 o cualquier otro fichero que contenga.

Para descargarlos todos de una tacada, rtendrías que tener una 'araña' (un programa que recoja todos los enlaces dentro de la carpeta). Muchos programas de descarga permiten introducir una carpeta de red y ya ellos seleccionan lo que hay y tu decides que tipos de ficheros te descargas...

Pero vamos, son solo 20 carpetas, luego no tardas nada en pinchar y que se pongan a descargar (son descarga directa), pdfs, mp4, etc...

p.d.: Para tenerlo todo ordenado, te recomiendo crear una carpeta con el mismo nombre dle curso, y una carpeta por cada una que contiene con el mismo nombre descargando cada fichero en su ubicación correcta, así podrás seguir el curso ordenadamente...
62  Informática / Hardware / Re: Una IA china crea el primer procesador sin intervención humana en: 2 Julio 2023, 18:09 pm
El artículo resulta bastante incongruente...

Primero dice que es:
 4.000 veces más rápido que chatgpt : En hacer qué?.

Luego dice que es:
 4.000 veces más inteligente que ChtGPT: Cómo miden la inteligencia, para señalar tal cosa?

En otro lado dice que es equivalente a un 80.486 de Intel, entonces su potencia y velocidad son rídiculamente ínfimas con respecto a la tecnología de hoy. Y no digo con CahGPT, solo con cualquier dispositivo como cualquier PC, portátil o teléfono móvil actual....
Los 80.486 emprezaron funcionando con 16Ghz, luego saltaron a 33, 40, 50, 66... 128 y no recuerdo si al final hasta los 350Mhz. El pentium 4 ya supero la barrera del Ghz.
De ese tal 'Quimeng-1' dice que corre a 300Mhz. No sé qué leches va a ser mejor en qué funcionando a 300Mhz. Tal vez si tuviera 1000 núcleos...


Entonces parece todo un despropósito informativo. Port otro lado dudo mucho que ninguna IA, pueda diseñar aún un chip eficaz y plenamente funcional sin intervención humana.
Además una cosa es diseñar la lógica del chip y otra muy distinta es luego llevarlo al terreno electrónico, donde hay que resolver desde los simples voltios, watios,  hasta el calor o el 'fan out' de cada puerta, sistemas de alimentación, y todo precisa de priebas pués el cálculo depende de la miniaturización así como los componentes y materiales usados, etc...  infinitos detalles, como para aceptar charlatanería barata.


En definitiva no me creo ni la vigésima parte.
Prefiría que no fuera un asunto meramente propagandista (tontería-polítca insulsa), pero o el artículo está mal traducido-interpretado o es a lo que apunta.

63  Programación / .NET (C#, VB.NET, ASP) / Re: Aver quien puede con ayudarme con este codigo ? en: 21 Junio 2023, 14:05 pm
Hola Luis...

En principio (de un vistazxo simple) el código no parece contener errores...
...pero puede haber errores semánticos, que son los más difíciles de localizar.

El error semántico, es un error tal que hace algo y lo hace bien, pero no es exactamente lo que uno quiere que haga .

Vamos a tratar de descubrir si los hay, cuales pudieran ser...

De entrada, esto es conveniente que controle posibles errores
Código
  1. ' Lee los registros del archivo de texto
  2.        Dim registros As List(Of String) = New List(Of String)(IO.File.ReadAllLines("C:\Users\34625\Desktop\bonoloto\1.txt"))
  3.  

Procede por tanto envolverlo en un controlador de error:
Código
  1. Try
  2.        ' Lee los registros del archivo de texto
  3.        Dim registros As List(Of String) = New List(Of String)(IO.File.ReadAllLines("C:\Users\34625\Desktop\bonoloto\1.txt"))
  4.  
  5. Catch
  6.    messagebox.show("Hubo un error al tratar de leer el fichero..."
  7.    exit sub
  8. end try
  9.  
  10. '...el resto del codigo...
  11.  
También podías usar el parámetro ' StringSplitOptions.RemoveEmptyEntries', para deshacerte de líneas vacías si el fichero contuviera alguna...

Seguimos... dentro del bucle principal, tenemos la línea:
Código
  1.           ' Verifica que la cadena tenga el formato adecuado
  2.            If registro.Length >= 30 Then
No hay un 'else'... luego no sabemos cuántas líneas caen dentro y cuántas fuera...
No es extrictamente necesario, pero si no se obtiene el resultado esperado, lo adecuado es controlar dicha situación y ver si por aquí hay un 'coladero'... el fichero podría tener al final, saltos de línea a mansalva (como separador de campos, en vez de tabuladores).
Entonces antes del bucle sería adecuaod poner cuantas líneas fueron leídas del fichero:

Código
  1.  
  2.  
  3. dim RegistrosCortos as integer
  4.  
  5. For Each registro As String In registros
  6.            ' Verifica que la cadena tenga el formato adecuado
  7.            If registro.Length >= 30 Then
  8.                 ... el código principal
  9.            else
  10.                RegistrosCortos +=1
  11.            end if
  12. next
  13.  
  14. messagebox.show("El fichero tiene " & registros.count.tostring & " lineas... de las cuales tienen menos de 30 caracteres "  & RegistrosCortos.tostring & " lineas."
  15.  

Esto es porque si consideramos el caso de que una línea fueran 6 números entre el 1 y el 49, y suponiendo que los valores 1-9 fueran todos antecedidos de un '0', tendríamos (como máximo) solo 17 caracteres (6 números * 2 digitos) + 5 espacios entre los 6 números = 17, que son bastante menos que los 30 esperados....

En realidad esa comparación yo la eliminaría por completo, dado que luego viene otra que es más certera al caso:
Código
  1.                ' Verifica que haya seis numeros en el array
  2.                If numeros.Length = 6 Then
Luego ahí podría residir probablemente tu error semántico... creer que el largo de cada línea es como mínimo de 30 caracteres.

Lo demás aunque es mejorable, no hay posibilidad de otros errores. En realidad sabiendo que el fichero solo contiene números del 1 al 49, espacios y saltos de líneas, sobran algunas verificaciones... pero si existe el riesgo de manipulación externa, pudiera ser necesario y en tal caso avisar pues deja el fichero de alguna forma corrupto.

Prueba a eliminar dichas líneas o al menos comentarlas y verifica si ahora el resultado es el esperado...
64  Programación / Programación General / Re: Metodos de resolver el problema del "viajante de comercio" mediante programación lineal en: 8 Junio 2023, 23:52 pm
Ya hablamos bastante al respecto... te presenté algunos algoritmos.

De cara a un algoritmo, no importa el tipo de programación empleado, uno siempre puede moverlo a 'su terreno'.

En general, muchos de los algoritmos dicen resolverlo en 'n * n^3'... se teoriza que podría ser resuelto satisfactoriamente en ese tiempo (aunque no pueda comprobarse ser exacto).

Yo los algoritmos que he desarollado lo resuelven en log(n) * n^2, pero para tanto como 10.000 puntos, puede tardar entre 30 y 60 minutos... para decenas de puntos, no llega a 1sg. para 100 de puntos tarda unos 5-15 segundos. psra unos 1.000 puntos entre 40-60 sg. (siempre sin compilar), el resultado final de dibujarlo nunca forma parte del tiempo, evidentemente.

Lógicamente no hay forma de saber si la solución es exacta. Ya que cuando encuentras una forma de demostrar que no es exacto, en realidad has encontrado un nuevo método que aplicar al algoritmo y mejorar la solución y así se entra en un bucle, donde los tiempos se incrementan a cambio de mejorar un porcentaje muy pequeño (razón por la que algunos van en n^3 y yo en n^2, probablemente se consiga algo mucho más exacto pero con un tiempo n^4, n^5... Yo soy de los que teoriza (y así me lo apunta también mi intuición), que existe solución en tiempo polinómico y por tanto P = NP.

- Fuerza bruta: En la otra conversación, como inicialmente interesa saber si la solución que dabas era exacta, la única forma de proceder era con fuerza bruta (también porque era un número limitado de puntos y accesible en cálculo de tiempo). El tiempo con fuerza bruta es altamente costoso, inasumible como sabes con solo unas pocas decenas de puntos, incluso para el supeordenador más potente del mundo.

- Vecino más cercano: Luego te explicaba que incluso la fuerza bruta podía ser mejorada siguiendo el algoritmo del 'vecino mas cercano no visitado aún', es decir en vez de empezar el recorrido con la ruta aleatoria (en el modo en que vengan ordenados los puntos), buscas el más cercano al primero, luego el más cercano a ese que encontraste para el primero, etc... esa primera ruta, ya delimita mucho las siuientes ciudades que se deben viisitar... Se estima que la trayectoria del vecino más cercano puede rondar en alrededor del 125% de la solución exacta.
A veces esta opción es utilizada con frecuencia, pués calcularla es muy rápido, lo que se hace es elegir varias veces (pongamos 6-12) un punto al azar y trazar así la trayectoria para cada caso, se toma luego aquella que arroje el menor resultado.
Hay varios algoritmos que encajan en la 'efinición' de 'vecino más cercano'... pero casi cualquiera para empezar puede ser lo suficientemente bueno.
https://en.wikipedia.org/wiki/Nearest_neighbour_algorithm
https://en.wikipedia.org/wiki/Greedy_algorithm

- También te comentaba una heurística que que divide en regiones el 'mapa':
Hay varios... pero siempre se trata de heurísticas, pués como te dije no hay solución conocida al margen de la fuerza bruta.

Uno bastante asequible de implementar es:
---------------------------------------------------------
1 - Dividir el área en sectores (3x3 típicamente).
2 - Mientras cada sector tenga más de x nodos (5 o 6 típicamente), subdividir el sector de nuevo en más sectores (es una función recursiva, como se desprende).
3 - Cada sector finalmente se resuelve por fuerza bruta (5 o 6 nodos es algo muy rápido de resolver por fuerza bruta).
4 - Finalmente se van uniendo los sectores entre sí (haciendo optimizaciones al tiempo)

Esta última parte es la más compleja pues permite cierto margen de maniobra. Si el número de sectores al hacer la división no queda claramente acotado (esto es si son demasiados), se complica tomar decisiones, por eso la limitación de 3 es considerada muy aceptable.

- Heurísticas de intercambio: Luego te expuse un ejemplo de intercambios... en realidad son toda una serie, aunque 3-4 son los mejores.
Se trata de analizar segementos comparando la distancia actual entre 2-3 de ellos e intercambiándolos, si la distancia resultante es menor, se acepta el cambio, si no se sigue buscando.
Estos derivan en varios modelos, como ya te sugerí en su momento, pero por si no los exploraste suelen llamarse 2opt y 3opt.
El 2opt es muy exhaustivo y consume más tiempo, pero resuelve lentamente hasta probablemente menor de un 105%. Para una cantidad pequeña de puntos (hasta unos cientos, puede incluso encontrar la solución óptima (pero sin modo de saberlo, claro). El problema d ela lentitud de 2opt, es que encontrado dicho intercambio, deben también intercambiarse todos los que median entre ambos del intercambio, si se opera con 100 puntos y pongamos que uno es el 30 y el otro el 80, hay que intercambiar entre el 30 y el 80 de orden... y así con cada intercambio, Pero si estás operando con uno de 1.000.000 de puntos, imgina uno el 300.000 y otro el 800.000 todos en medio deben intercambiarse.
El 3opt, es una mejorar pero también es más complejo de desarrollar (no mucho más para alguien que sepa programar, por supuesto).
https://en.wikipedia.org/wiki/2-opt
https://en.wikipedia.org/wiki/3-opt
2opt y 3opt, son la base principal del algoritmo Concorde, que se ha utilizado ampliamente desde hace décadas ya (y que se ha ido mejorando), luego te busco algún enlace y lo pongo al final.

Yo he diseñado alguno más sobre intercambios, los aplico antes y así, el 2opt, no tiene que encontrarse tantos intercambios (que para él son más costosos), por ello como paso final el 2opt, es excelente.

- Algoritmo de Crhitofides: También en aquel hilo creo recordar haberte mencionado este algoritmo. Lo interesante de éste es que fue el primero en establecer la importancia de satisfacer la desigualdad triangular. Y durante mucho tiempo fue el único que estuvo 'reinando' en solitario, hasta que algunos autores (Dantzig) mencionaron precisamente que solo con 'intentos' de intercambio', resultaba fácil optimizar el resultado partiendo incluso de una solución previa. Es allí al fragor de todo esa emocionate historia, cuando empieza a fraguarse el algoritmo Concorde.
https://en.wikipedia.org/wiki/Christofides_algorithm

- Heurística de Lin-Kernighan: (No confundir con el algoritmo del particionado de grafos, es fácil enrevesarse en ello).
https://en.wikipedia.org/wiki/Lin%E2%80%93Kernighan_heuristic

Por otro lado hay un montón de documentación de la que puedes empaparte, leer, implementar, experiementar, descubir... basta buscarlo. O quizás me anime un día y busque en alguno de mis discos y los suba el repositorio del foro...

Página del algortimo Concorde: Tienes las fuentes del algoritmo, y muchas explicaciones detalladas. Es una página imprescindible para todo forofo de estos temas.
https://www.math.uwaterloo.ca/tsp/concorde/downloads/downloads.htm

Es necesario leerse siempre la historia, aunque sea repasarlo por encima para notar como ha ido evolucionando y no perderse detalles que pueden parecer insignificantes, pero que de repente te aparece la inspiración:
https://en.wikipedia.org/wiki/Travelling_salesman_problem

En youtube mismo tienes muy buenos vídeos que también pueden ayudarte:
https://www.youtube.com/watch?v=GiDsjIBOVoA&pp=ugMICgJlcxABGAHKBQQyb3B0
https://www.youtube.com/watch?v=UAEjUk0Zf90&pp=ygUEMm9wdA%3D%3D
https://www.youtube.com/watch?v=-6pWTdkhOgg&pp=ygUEMm9wdA%3D%3D
https://www.youtube.com/watch?v=42edM3ZQigk&pp=ygUEMm9wdA%3D%3D
https://www.youtube.com/watch?v=GQQfihTNhso&pp=ygUEMm9wdA%3D%3D
https://www.youtube.com/watch?v=tI2YV7eRE9s&pp=ygUEMm9wdA%3D%3D

https://www.youtube.com/watch?v=STbkQbsIYVQ&pp=ygUSQ29uY29yZGUgQWxnb3JpdGht
https://www.youtube.com/watch?v=9QxQW9ZfqNc&pp=ygUSQ29uY29yZGUgQWxnb3JpdGht

Bill Cook, se explica muy bien, y se extiende:
https://www.youtube.com/watch?v=Q-BTOKr8t7Q&pp=ygUSQ29uY29yZGUgQWxnb3JpdGht
https://www.youtube.com/watch?v=q8nQTNvCrjE&pp=ygUPVFNQIC0gQmlsbCBDb29r
https://www.youtube.com/watch?v=tChnXG6ulyE&pp=ygUPVFNQIC0gQmlsbCBDb29r
https://www.youtube.com/watch?v=kxvHXt7V4Jk&pp=ygUPVFNQIC0gQmlsbCBDb29r
https://www.youtube.com/watch?v=-rtvsiPNYW0&pp=ygUPVFNQIC0gQmlsbCBDb29r
https://www.youtube.com/watch?v=pyVvSwh6Nps&pp=ygUPVFNQIC0gQmlsbCBDb29r

Y para ir terminando te pongo algunas imágenes y comento por encima:


Como se ve, el resultado deja que desear, todas esas líneas que se cruzan, las resuelve el 2opt.


Un mapa con 10.000 puntos (al azar), el coste final dio: 37.020


Este mapa, es con el trazado del 'vecino más cercano'. Puede verse líneas largas que van lejos, lo que suele suceder cuando todos los más cercanos a uno dado ya están ocupados. Pero como punto de partida suele ser lo mejor.


Ejemplo del trance 2opt: Véase las líneas que secruzan. Siempre que se cruzan se puede saber que es optimizable. Se han trazado a mano 2 pares de líneas alternativas, si se elige el conjunto el conjunto d elas amarillas, se forman 2 rutas inconexas (el algoritmo Concorde hace esto y luego iterativamente lo va resolviendo), yo por ejemplo he preferido tomar el par de color azul, es fácil saber cuales son, pues en la actualidad una conecta con ella y todas las que median deben intercambiarse de orden.
Aquí y allá puedes encontrar variantes que vale explorar...


Un mapa con 100 puntos y un coste de 4034. No es la óptima... Mira la siguiente que es el mismo mapa.

El mismo mapa que el anterior, diferente ruta, el cosot es de 4035 solo 1 más que el anterior. Puede verse un cruce (no se había aplicado aún el 2opt), es asumible que es bastante mejorable.


3.000 puntos. Aqui cada punto traza a los 11 vecinos más cercanos. Mis ideas tiran por este lado, no veo la necesidad de tener que conectar puntos más lejanos que cierta cantidad de vecinos, lógicamente que sea un punto el 90 más cercano para uno dado, no quita que para uno aislado ese sea (por ejemplo) el 3º más cercano)...

...y finalmente para terminar, hablemos de distancias y cálculos.
Nota que para meterse de lleno con el problema, suele ser acertado considerar la distancia euclidiana, pero cuando se tierne que llevar a un extremo técnico, conviene también tener las soluciones para la distancia de Manhattan (sumar la distancia de ambos ejes), también muchos brazos robóticos, mueven un eje sobre el otro (al mismo tiempo), el resultasdo es que el costo es solo el costo de la distancia mayor de los 2 ejes (la distancia corta llegó antes). De igual modo debe asumirse casos para 3 dimensiones. Aunque en este caso, se provee también la distancia del 3 eje. Es acertado usar una interfaz 'medida' entre 2 puntos, tener implementaciones de cada caso y luego según el sistema como un parámetro de entrada se pasa el tipo de medida, instanciando la implementación a usar, no supone ningún costo en usar el agoritmo, ni supone tener que rehacer el algortimo con 20 versiones... una para cada caso.

Un simple consejo para acelerar aún más los cálculos. Cuando operas con distancias de Euclides, para descubir si una ruta es más corta que otra, no es preciso usar las matemáticas completas:
d = Sqr(X^2 + Y^2)
Cuando se pretende comparar si AB + CD es más corto o largo que AC + BD... puede ahorrarse la raiz cuadrada:
d = X^+ y^2
La distancia por tanto solo se precisa cuando necesitas saber la distancia del trayecto total, pero no para comparar. Hay tantos cálculos que ahorrarse raíces cuadradas, sí o sí mejora el tiempo.

Espero que te sea útil....

p.d.: Recuerda no usar un mapa de distancias, por mucho que se ahorre hacer cálculos, solo vale para pequeñas cantidades, cuando tengas que operar con algo como 1.000 millones no puedes tener en memoria la distancia de 1000 millones a 1000 millones. siempre calcula, salvo que pretendas conformarte con un pequeño programa para resolver pocas decenas.

65  Programación / Programación General / Re: ¿Qué tipo de diagrama os parece más útil en el diseño de software? en: 23 Mayo 2023, 23:31 pm
Cuando es para tí, vría el caso de cuando es para otro/s...

Cuando es para tí, puedes no necesitar hacer un diagrama... En realidad es conveniente hacerlo para aquellas partes que resultan complejas (es dcir entrar en detalles más finos en la partes más complejas y menos detallado en partes que te son fácilmente asequibles) y por tanto no esté seguro de ser capaz de programarlo 'de cabeza'.

Las ventajas de elaborar el diagrama, son:
- Evita confusión de partes o módulos que puedan parecerse (ver las dependencias entre módulos aclara muchos conceptos).
- Ayuda a anticiparte a posibles problemas que puedan darse si elegiste opciones inadecuadas (aún así, siempre hay flexibilidad para elegir).
- Para los principiantes, ayuda a pensar y ordenar ideas de forma mas lógica.
- Si eres principiantes, tras hacer un diagrama, puedes programar más rápido que sin el disgrama. A medida que tu mene es clara, esto deja de ser cierto...

En contra tiene que precisas emplear un tiempo para elaborarlo, luego si no es imprescindible hacerlo, hacerlo supone más un retraso que una ayuda.
66  Foros Generales / Dudas Generales / Re: Me hackearon el facebook en: 23 Mayo 2023, 23:20 pm
Por tu mensaje, da más la impresión de que eres tú quien quiere hackear la cuenta de otro, dando datos de recuperación de cuenta incorrectos.

Aquí no somos jueces, pero tampoco tontos, así que como te han dicho, si es verdad lo que dices: Facebook, provee medios suficientes para recuperar tu cuenta, si de verdad es tuya.
67  Foros Generales / Foro Libre / Re: Me pueden leer el correo en este caso? en: 23 Mayo 2023, 23:17 pm
Cuando tienes dudas, lo mejor es cambiar la contraseña.

Así incluso aunque tenga la sesión abierta, se cierra y es obligado a iniciar sesión, no conociendo la contraseña, no podrá entrar.

'Google', solo t avisa cuando se inicia sesión, si la sesión está abierta, no da aviso... técnicamente se puede tener abierta sesión muchísimos días (hay un límite tras el cual se solicitará dar credenciales, pero no recuerdo el dato exacto), mientras no se borre la caché del navegador...
68  Programación / Programación General / Re: busco libro de programacion paralela pdf en: 1 Mayo 2023, 16:34 pm
Creo que el libro no está a la venta en formato digital...

https://www.paraninfo.es/catalogo/9788497326742/introduccion-a-la-programacion-paralela

Si abres dicha página, en la zona derecha (de azul), debería aparecer la posibilidad de comprarlo en formato ebook.

69  Programación / Programación General / Re: Cuando le pides a ChatGPT que te explique lo que hace un codigo en: 1 Mayo 2023, 16:17 pm
El código que le pasas es muy largo.
El tamaño máximo de los mensajes es de 2000 caracteres (eso sí sin límite de mensajes según le pregunté una vez, sin embargo su 'ventana de memoria' se limita a cierta cantidad de kb)...

Si es ChatGPT, quien te responde, el mensaje se corta, puedes perdirle que continúe desde donde se quedó y suele funcionar, pero si ocurre varias veces con el mismo mensaje no suele llegar a buen término.
Si eres tú quiene le pregunta, a ChatGPT, es muy probable que solo le lleguen los primeros 2000 caracteres, luego la respuesta que te elabore no sea adecuada cuando se le pregunta acerca de una parte que no ha recibido. en ese caso puede que esté leyendo más allá del contenido de tu mensaje, es decir ¿tal vez esté leyendo parte del contenido del mensaje de otro usuario?.

Lo que deberías hacer es fraccionar el código en unidades funcionales y preguntarle por cada una separadamente.

También para asegurarte, tras pegarle todo el código y  encabézalo con un:
- "Cuántos caracteres tiene este mensaje a partir de este punto?"
O preguntarle en el siguiente mensaje;
- "Cuántos caracteres tenía mi mensaje anterior?"
o incluso:
- Repíteme las 3 últimas línea de mi mensaje previo.

...así tendrás certidumbre de hasta donde ha sido capaz de leer.

Cuando el mensaje supera solo ligeramente el límite, uno puede intentar abreviarlo acortando los nombres de las variables, por ejemplo... aunque en este ejemplo, no se resolvería así, porque me temo que supere los 10.000 caracteres...
70  Foros Generales / Foro Libre / Re: Inteligencia artificial y programación en: 20 Abril 2023, 15:24 pm
Buenas, quiero escuchar sus opiniones sobre empezar a aprender a programar con todo esto de CHATGPT-4. Crees que las IA's nos van a reemplazar? Vale la pena?
No le tengas miedo, aprende...
Tanto si la IA cubre ciertos puestos de trabajo (que sí lo hará), el conocimiento nunca está demás.

Piensa que una IA, no puede crear nada nuevo que no exista previamente creado por el ser humano. Una IA, nunca será capaz de crear (por ejemplo), un nuevo algoritmo de compresión de datos, tan solo a lo sumo mejorar uno ya existente. Igualmente tampoco va a generar teorías...
...para muchas de las tareas que haga una IA, requerírá la intervención humana que acote o dirija sus pasos, luego en ese sentido, una IA, seguirá siendo una herramienta creada y mannejada por el hombre, justo como una calculadora muy potente.

Y si qieres aprender a programar, un buen consejo es que como suele decir el dicho 'si quieres vencerlo, únete a tú enemigo'... esto es, usa ChatGPT para refrendar tu aprendizaje en programación.
Páginas: 1 2 3 4 5 6 [7] 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 ... 431
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines