LibreLogo

El LibreLogo és un entorn de programació similar al Logo, simple i traduït, amb imatges vectorials de tortuga per ensenyar programació i processament de text, DTP i creació d'imatges. Visiteu http://www.numbertext.org/logo/librelogo.pdf.

Barra d'eines del LibreLogo

La barra d'eines del LibreLogo (Visualitza ▸ Barres d'eines ▸ Logo) conté icones per a moure la tortuga, executar i parar el programa, anar a l'inici i netejar la pantalla, realçar i traduir la sintaxi; a més d'una barra d'entrada (línia d'ordes).

Icones per moure la tortuga

Són equivalents a les ordres del Logo «AVANÇA 10», «RETROCEDEIX 10», «ESQUERRA 15», «DRETA 15». Fer clic a una de les icones, també també posarà el focus sobre la forma de la tortuga i desplaçarà la pàgina fins a la seva posició.

Inicia el programa Logo

Feu clic a la icona «Inicia el programa Logo» per a executar tot el text (o només el text seleccionat) del document del Writer com un programa del LibreLogo. En un document buit, s'inserirà i executarà un programa d'exemple.

Feu clic a la icona «Atura» per a aturar l'execució del programa.

Inici

Feu clic a la icona «Inici» per a restablir la posició i la configuració de la tortuga.

Neteja la pantalla

Feu clic la icona «Neteja la pantalla» per a suprimir els objectes dibuixats del document.

Editor de programes/realçament de la sintaxi/traducció

The “magic wand” icon sets 2-page layout for program editing, expands and converts to uppercase the abbreviated, lowercase Logo commands in the Writer document. Change the language of the document ( - Language Settings - Languages - Western) and click on this icon to translate the Logo program to the selected language.

Línia d'ordres

Premeu Retorn a la línia d'ordres per a executar-ne el contingut. Per a aturar el programa utilitzeu la icona «Atura».

Manteniu premuda la tecla «Retorn» per repetir la línia d'ordes, per exemple, en la seqüència d'ordes següent:

 AVANÇA 200 ESQUERRA 89

Per a reinicialitzar la línia d'ordres feu-hi clic tres vegades o premeu Ctrl+A per a seleccionar les ordres anteriors, i escriviu ordres noves.

Interfície gràfica d'usuari dels paràmetres bàsics de la tortuga

La forma de la tortuga del LibreLogo és un objecte de dibuix de mida fixa. Podeu posicionar-la i girar-la com qualsevol altre objecte: amb el ratolí i la icona Gira de la barra d'eines Propietats de l'objecte de dibuix. Modifiqueu l'amplada de la línia, el color de la línia i el color de l'àrea de la forma de la tortuga per a definir els atributs MIDA.LLAPIS, COLOR.LLAPIS i COLOR.EMPLENAMENT del LibreLogo.

Edició del programa

Els dibuixos i els programes del LibreLogo utilitzen el mateix document del Writer. El llenç del LibreLogo se situa a la primera pàgina del document del Writer. Amb la icona «Vareta màgica» podeu crear una disposició de dues pàgines per a programar còmodament: s'inserirà un salt de pàgina abans dels programes del LibreLogo i es configurarà l'escala de visualització per a veure dues pàgines alhora. Així tindreu el llenç a la primera pàgina i el codi a la segona.

Llenguatge de programació LibreLogo

LibreLogo és un llenguatge de programació similar al Logo, fàcilment traduïble, disponible en diversos llengües gràcies a comunitats natives del LibreOffice. Per exemple, és compatible cap enrere amb els sistemes Logo antics per al cas de programes Logo senzill usats en àmbit educatiu.

 FINS.A triangle :mida
REPETEIX 3 [
AVANÇA :mida
ESQUERRA 120
]
FINAL

triangle 10 triangle 100 triangle 200

Diferències amb el llenguatge de programació Logo

Altres funcionalitats del LibreLogo

Ordres del LibreLogo

Sintaxi bàsica

Distinció entre majúscules i minúscules

Les ordres i constants de color no distingeixen entre majúscules i minúscules:

 IMPRIMEIX “Hola, món!”
imprimeix “Hola, món, altra vegada!”

Els noms de variable sí distingeixen entre majúscules i minúscules:

 a = 5
A = 7
IMPRIMEIX a
IMPRIMEIX A

Línies de programa

Les línies d'un programa LibreLogo són paràgrafs al document LibreOffice Writer. Una línia de programa pot una o més ordres:

 IMPRIMEIX “Hola, món!” IMPRIMEIX “LibreLogo”

Comentaris

Les línies o parts de línies són comentaris des d'un punt i coma fins al final de la línia (paràgraf):

 ; alguns comentaris
IMPRIMEIX 5 * 5 ; alguns comentaris

Partició de línies del programa en múltiples paràgrafs

És possible partir una línia del programa en diversos paràgrafs afegint una titlla (~) a la fi de la línia:

 IMPRIMEIX “Aquest és un missatge d'avís” + ~
“molt llarg”

Moviment de la tortuga

RETROCEDEIX/RECULA/ENRERE (re)

 FORWARD 10 ; move forward 10pt (1pt = 1/72 inch)
FORWARD 10pt ; see above
FORWARD 0.5in ; move forward 0.5 inch (1 inch = 2.54 cm)
FORWARD 1" ; see above
FD 1mm
FD 1cm

RETROCEDEIX/RECULA/ENRERE (re)

 RETROCEDEIX 10 ; mou enrere 10 punts

ESQUERRA/GIRA.ESQUERRA (ge)

 ESQUERRA 90 ; gira 90 graus en sentit antihorari
ESQUERRA 90° ; vegeu amunt
GE 3h ; vegeu amunt (posició del rellotge)
GD qualsevol ; gira a una posició aleatòria

DRETA/GIRA.DRETA (gd)

 DRETA 90 ; gira 90 graus en sentit horari

AIXECA.LLAPIS (al)

 AIXECA.LLAPIS ; la tortuga es mourà sense dibuixar

BAIXA.LLAPIS (bl)

 BAIXA.LLAPIS ; la tortuga es mourà dibuixant

POSICIÓ (pos)

 POSITION [0, 0] ; turn and move to the top-left corner
POSITION PAGESIZE ; turn and move to the bottom-right corner
POSITION [PAGESIZE[0], 0] ; turn and move to the top-right corner
POSITION ANY ; turn and move to a random position

HEADING (seth)

 HEADING 0 ; turn north
HEADING 12h ; see above
HEADING [0, 0] ; turn to the top-left corner
HEADING ANY ; turn to a random direction

Altres ordres de la tortuga

AMAGA.TORTUGA/OCULTA.TORTUGA (at/ot)

 AMAGA.TORTUGA ; amaga la tortuga (fins l'ordre mostra.tortuga)

MOSTRA.TORTUGA (mt)

 MOSTRA.TORTUGA ; mostra la tortuga

INICI/CENTRE

 INICI ; reinicialitza la configuració i posició de la tortuga

NETEJA.DIBUIX/INICIA.DIBUIX (net/id)

 NETEJA.DIBUIX ; suprimeix tots els objectes dibuixats del document

OMPLE i TANCA

 FILL ; close and fill the actual line shape or points
CLOSE ; close the actual line shape or join the actual points

Exemple: emplenament d'un triangle equilàter:

 AVANÇA 50 ESQUERRA 120 AVANÇA 50 OMPLE

Exemple: dibuix d'un triangle equilàter:

 AVANÇA 50 ESQUERRA 120 AVANÇA 50 TANCA

Paràmetres del llapis

MIDA.LLAPIS (ml)

 MIDA.LLAPIS 100 ; l'amplada de la línia és de is 100 punts
MIDA.LLAPIS QUALSEVOL ; és equivalent a MIDA.LLAPIS ALEATORI 10

COLOR.LLAPIS (cl)

 PENCOLOR “red” ; set red pen color (by color name, see color constants)
PENCOLOR [255, 255, 0] ; set yellow color (RGB list)
PENCOLOR 0xffff00 ; set yellow color (hexa code)
PENCOLOR 0 ; set black color (0x000000)
PENCOLOR ANY ; random color
PENCOLOR [5] ; set red color (by color identifier, see color constants)
PENCOLOR “invisible” ; invisible pen color for shapes without visible outline
PENCOLOR “~red” ; set random red color

PENTRANSPARENCY

 PENTRANSPARENCY 80 ; set the transparency of the actual pen color to 80%

PENCAP/LINECAP

 PENCAP “none” ; without extra line end (default)
PENCAP “round” ; rounded line end
PENCAP “square” ; square line end

PENJOINT/LINEJOINT

 PENJOINT “rounded” ; rounded line joint (default)
PENJOINT “miter” ; sharp line joint
PENJOINT “bevel” ; bevel line joint
PENJOINT “none” ; without line joint

ESTIL.LLAPIS

 PENSTYLE “solid” ; solid line (default)
PENSTYLE “dotted” ; dotted line
PENSTYLE “dashed” ; dashed line

; custom dot–dash pattern specified by a list with the following arguments:
; – number of the neighbouring dots
; – length of a dot
; – number of the neighbouring dashes
; – length of a dash
; – distance of the dots/dashes
; – type (optional):
; 0 = dots are rectangles (default)
; 2 = dots are squares (lengths and distances are relative to the pensize)

PENSTYLE [3, 1mm, 2, 4mm, 2mm, 2] ; ...––...––...––

Paràmetres d'emplenat

COLOR.EMPLENAMENT (ce)

 FILLCOLOR “blue” ; fill with blue color, see also PENCOLOR
FILLCOLOR “invisible” CIRCLE 10 ; unfilled circle
FILLCOLOR [“blue”, “red”] ; gradient between red and blue
FILLCOLOR [[255, 255, 255], [255, 128, 0]] ; between white and orange
FILLCOLOR [“blue”, “red”, 1, 0, 0] ; set axial gradient (with the required rotation and border settings), possible values: 0-5 = linear, axial, radial, elliptical, square and rectangle gradients
FILLCOLOR [“red”, “blue”, 0, 90, 20] ; linear with 20% border, rotated with 90 degrees from the actual heading of the turtle
FILLCOLOR [“red”, “blue”, 0, 90, 20, 0, 0, 200, 50] ; from 200% to 50% intensity
FILLCOLOR [ANY, ANY, 2, 0, 0, 50, 50] ; radial gradient with random colors and 50-50% horizontal and vertical positions of the center

FILLTRANSPARENCY

 FILLTRANSPARENCY 80 ; set the transparency of the actual fill color to 80%
FILLTRANSPARENCY [80] ; set linear transparency gradient from 80% to 0%
FILLTRANSPARENCY [80, 20] ; set linear transparency gradient from 80% to 20%
FILLTRANSPARENCY [80, 20, 1, 90] ; set axial transparency gradient rotated with 90 degrees from the actual heading of the turtle
FILLTRANSPARENCY [80, 20, 2, 0, 20, 50, 50] ; set radial transparency gradient from outer 80% to inner 20% transparency with 20% border and with 50-50% horizontal and vertical positions of the center

ESTIL.EMPLENAMENT

 FILLSTYLE 0 ; fill without hatches (default)
FILLSTYLE 1 ; black single hatches (horizontal)
FILLSTYLE 2 ; black single hatches (45 degrees)
FILLSTYLE 3 ; black single hatches (-45 degrees)
FILLSTYLE 4 ; black single hatches (vertical)
FILLSTYLE 5 ; red crossed hatches (45 degrees)
FILLSTYLE 6 ; red crossed hatches (0 degrees)
FILLSTYLE 7 ; blue crossed hatches (45 degrees)
FILLSTYLE 8 ; blue crossed hatches (0 degrees)
FILLSTYLE 9 ; blue triple crossed
FILLSTYLE 10 ; black wide single hatches (45 degrees)

; custom hatches specified by a list with the following arguments:
; – style (1 = single, 2 = double, 3 = triple hatching)
; – color
; – distance
; – degree

FILLSTYLE [2, “green”, 3pt, 15°] ; green crossed hatches (15 degrees)

Dibuix d'objectes

CERCLE

 CERCLE 100 ; dibuixa un cercle (amb un diàmetre de100 punts)

EL·LIPSE

 ELLIPSE [50, 100] ; draw an ellipse with 50 and 100 diameters
ELLIPSE [50, 100, 2h, 12h] ; draw an elliptical sector (from 2h clock position to 12h)
ELLIPSE [50, 100, 2h, 12h, 2] ; draw an elliptical segment
ELLIPSE [50, 100, 2h, 12h, 3] ; draw an elliptical arc

QUADRAT

 QUADRAT 100 ; dibuixa un quadrat (amb costat de mida 100 punts)

RECTANGLE

 RECTANGLE [50, 100] ; draw a rectangle shape (50×100pt)
RECTANGLE [50, 100, 10] ; draw a rectangle with rounded corners

PUNT

 POINT ; draw a point with size and color of the pen

CLOSE can join the last points, FILL can fill the shape defined by points. For example, it’s easy to draw a “flat” star starting from its center:

 PENUP
REPEAT 5 [
FORWARD 80
POINT
BACK 80
RIGHT 36
FORWARD 50
POINT
BACK 50
RIGHT 120
] FILL

ETIQUETA

 LABEL “text” ; print text in the turtle position
LABEL 'text' ; see above
LABEL "text ; see above (only for single words)

TEXT

 CERCLE 10 TEXT “text” ; defineix el text de l'objecte de dibuix actual

Opcions del tipus de lletra

COLOR.LLETRA

 COLOR.LLETRA "verd" ; estableix el color de la lletra

FAMÍLIA.LLETRA

 FAMÍLIA.LLETRA “Linux Libertine G” ; defineix el tipus de lletra (família)
FAMÍLIA.LLETRA "Linux Libertine G:smcp=1” ; estableix també la funció del tipus de lletra (majúscules petites)
FAMÍLIA.LLETRA “Linux Libertine G:smcp=1&onum=1” ; majúscules petites + figures antigues

MIDA.LLETRA

 MIDA.LLETRA 12 ; estableix 12 punts

PES.LLETRA

 PES.LLETRA “negreta” ; estableix el tipus de lletra a negreta
PES.LLETRA “normal” ; estableix el pes de lletra normal

ESTIL.LLETRA

 ESTIL.LLETRA “cursiva” ; estableix la variant cursiva
ESTIL.LLETRA “normal” ; estableix la variant normal

PICTURE (pic)

PICTURE is for

Agrupació de formes

 ; PICTURE [ LibreLogo_commands ]
PICTURE [ FORWARD 100 CIRCLE 100 ] ; tree-like grouped shape

Vegeu també «Grup» a l'ajuda del LibreOffice Writer.

 TO tree location
PENUP POSITION location HEADING 0 PENDOWN
PICTURE [ FORWARD 100 CIRCLE 100 ] ; tree-like grouped shape
END

PICTURE [ tree [230, 400] tree [300, 400] ] ; grouped shapes in a grouped shape

Starting new line shapes

 PICTURE ; start a new line shape
FORWARD 10 PICTURE FORWARD 10 ; two line shapes

Desament d'imatges SVG

 PICTURE “example.svg” [ CIRCLE 5 ] ; save the picture as an SVG image file in the user folder
PICTURE “Desktop/example.svg” [ FORWARD 100 CIRCLE 5 ] ; as above, with a relative path
PICTURE “/home/user/example.svg” [ CIRCLE 5 ] ; absolute path for Unix/Linux
PICTURE “C:\example.svg” [ CIRCLE 5 ] ; absolute path for Windows

Saving SVG/SMIL animations (drawings with SLEEP commands)

 PICTURE “animation.svg” [ CIRCLE 5 SLEEP 1000 CIRCLE 99 ] ; save as an SVG/SMIL animation (see also SLEEP)
PICTURE “animation2.svg” [ CIRCLE 5 SLEEP 1000 CIRCLE 99 SLEEP 2000 ] ; as above, but using SLEEP after the last object will result looping: after 2 seconds the SVG animation restarts in SMIL-conformant browsers

Consistency at the left border

Use PICTURE to keep the consistency of positions and line shapes at the left border of Writer:

 PICTURE [ CIRCLE 20 POSITION [-100, 100] CIRCLE 20 ]

Bucles

REPETEIX

 ; REPETEIX nombre [ ordres ]

REPETEIX 10 [ AVANÇA 10 ESQUERRA 45 CERCLE 10 ] ; repeteix 10 vegades
 ; number is optional

REPEAT [ POSITION ANY ] ; endless loop

REPETEIX.VEGADES

Variable del bucle (també per als bucles PER.A i MENTRE).

 REPEAT 100 [ FORWARD REPCOUNT LEFT 90 ]

FOR IN

Bucle per als elements de llista:

 FOR i IN [1, 5, 7, 9, 11] [
FORWARD i
LEFT 90
]

Loop for the characters of a character sequence:

 FOR i IN “text” [
LABEL i
FORWARD 10
]

MENTRE

 WHILE TRUE [ POSITION ANY ] ; endless loop
WHILE REPCOUNT <= 10 [ FORWARD 50 LEFT 36 ] ; as REPEAT 10 [ ... ]

SALTA/TRENCA

Atura el bucle.

 REPEAT [ ; endless loop
POSITION ANY
IF REPCOUNT = 100 [ BREAK ] ; equivalent of the REPEAT 100 [ ... ]
]

CONTINUA

Va la següent iteració del bucle.

 REPEAT 100 [
POSITION ANY
IF REPCOUNT % 2 = 0 [ CONTINUE ]
CIRCLE 10 ; draw circles on every 2nd positions
]

Condicions

SI

 ; IF condition [ true block ]
; IF condition [ true block ] [ false block ]

IF a < 10 [ PRINT “Small” ]
IF a < 10 [ PRINT “Small” ] [ PRINT “Big” ]

I, O, NO

Operadors lògics.

 IF a < 10 AND NOT a = 5 [ PRINT “0, 1, 2, 3, 4, 6, 7, 8 or 9” ]
IF a < 10 AND a != 5 [ PRINT “0, 1, 2, 3, 4, 6, 7, 8 or 9” ] ; as above

Subrutines

TO, END

New word (or procedure).

 TO triangle
REPEAT 2 [ FORWARD 100 RIGHT 120 ] FILL
END

REPEAT 10 [ triangle PENUP POSITION ANY PENDOWN ]

SORTIDA

Retorna el valor de la funció.

 TO randomletter
OUTPUT RANDOM “qwertzuiopasdfghjklyxcvbnm”
END

PRINT randomletter + randomletter + randomletter ; print 3-letter random character sequence

ATURA

Return from the procedure.

 TO example number
IF number < 0 [ STOP ]
PRINT SQRT number ; print square root
]

example 100
example -1 ; without output and error
example 25

Variables per defecte

QUALSEVOL

Valor aleatori per defecte dels colors, etc.

 COLOR.LLAPIS QUALSEVOL; color del llapis aleatori

CERT/VERITAT

Valor lògic.

 WHILE TRUE [ POSITION ANY ] ; endless loop
PRINT TRUE ; print true

FALS

Valor lògic.

 WHILE NOT FALSE [ POSITION ANY ] ; endless loop
PRINT FALSE ; print false

MIDA.PÀGINA

 IMPRIMEIX MIDA.PÀGINA ; impremeix la llista de mides de pàgina en punts, p. ex. [595.30, 841.89]

PI/π

 IMPRIMEIX PI ; imprimeix 3.14159265359

Entrada/Sortida

IMPRIMEIX

 PRINT “text” ; print “text” in a dialog box
PRINT 5 + 10 ; print 15

ENTRADA

 PRINT INPUT “Input value?” ; ask and print a string by a query dialog box
PRINT FLOAT (INPUT “First number?”) + FLOAT (INPUT “Second number?”) ; simple calculator

ESPERA/DORM

 ESPERA 1000 ; espera durant 1000 ms (1 segon)

GLOBAL

Defineix les variables globals utilitzades als procediments.

 GLOBAL about
about = “LibreLogo”

TO example
PRINT about
GLOBAL about ; when we want to add a new value
about = “new value for the global variable”
END

example
PRINT about

Funcions

ALEATORI

 IMPRIMEIX ALEATORI 100 ; nombre decimal aleatori (0 <= x < 100)
IMPRIMEIX ALEATORI "text” ; lletra aleatòria de “text”
IMPRIMEIX ALEATORI [1, 2] ; element aelatòri de la llista (1 o 2)

INT

 (Productes lt;sala1gt;[sala2][] 3.8 ; imprimeix la part 3 a" de 3.8)
[<identificador (el valor KE Irssi 100 ; multiplica un nombre enter (0 (0<= x < 100)
(l'objecte INT alemany) INT de -1 per a convertir el paràmetre de cadena

FLOAT

 ; convert the string parameter to float number
PRINT 2 * FLOAT “5.5” ; print 11.0

STR

 ; convert the number parameter to string
PRINT “Result: ” + STR 5 ; print “Result: 5”
PRINT 10 * STR 5 ; print 5555555555

ARRELQ

 IMPRIMEIX ARRELQ 100 ; impreix 10, l'arrel quadra de 100

SIN

 IMPRIMEIX SIN 90 * PI/180 ; imprimeix 1.0 (el sinus de 90° en radians)

COS

 IMPRIMEIX COS 0 * PI/180 ; imprimeix 1.0 (el cosinus de 0° en radians)

LOG10

 PRINT LOG10 100 ; print 2.0 (common logarithm of 100)

ARRODONEIX|ARROD

 PRINT ROUND 3.8 ; print 4 (rounding 3.8)
PRINT ROUND RANDOM 100 ; random integer number (0 <= x <= 100)

ABS

 IMPRIMEIX ABS -10 ; imprimeix 10, el valor absolut de -10

COMPTA

 IMPRIMEIX COMPTA "text" ; imprimeix 4, el nombre de caràcters de «text»
IMPRIMEIX COMPTA [1, 2, 3] ; imprimeix 3, mida de la llista

CONJUNT

 ; Convert list to Python set
PRINT SET [4, 5, 6, 6] ; print {4, 5, 6}
PRINT SET [4, 5, 6, 6] | SET [4, 1, 9] ; print {1, 4, 5, 6, 9}, union
PRINT SET [4, 5, 6, 6] & SET [4, 1, 9] ; print {4}, intersection
PRINT SET ([4, 5, 6, 6]) - SET [4, 1, 9] ; print {5, 6}, difference
PRINT SET [4, 5, 6, 6] ^ SET [4, 1, 9] ; print {1, 5, 6, 9}, symmetric difference

INTERVAL

 ; Python-like list generation
PRINT RANGE 10 ; print [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
PRINT RANGE 3 10 ; print [3, 4, 5, 6, 7, 8, 9]
PRINT RANGE 3 10 3 ; print [3, 6, 9]

FOR i IN RANGE 10 50 10 [ ; loop for [10, 20, 30, 40]
FORWARD i
LEFT 90
]

LLISTA

 ; remove the repeating elements of a list using set and list conversion
PRINT LIST (SET [1, 3, 5, 5, 2, 1]) ; print [1, 3, 5, 2]

TUPLE

Conversió a tupla de Python (llista no modificable)

 PRINT TUPLE [4, 5]

SORTED

It returns with a sorted list.

 PRINT SORTED [5, 1, 3, 4] ; print [1, 3, 4, 5]

SUB

Substitute character sequences using regex (regular expression) patterns.

 PRINT SUB (“t”, “T”, “text”) ; print “Text”, replacing “t” with “T”
PRINT SUB (“(.)”, “\\1\\1”, “text”) ; print “tteexxtt”, doubling every characters

CERCA

Cerca seqüències de caràcters usant expressions regulars.

 IF SEARCH (“\w”, "word") [ PRINT “Letter in the word.” ]

CERCA.TOT

Troba totes les seqüències de caràcters al text d'entrada que corresponguin amb el patró de l'expressió regular donat.

 PRINT FINDALL(“\w+”, “Dogs, cats.”) ; print [“Dogs”, “cats”], the list of the words.

MÍN/MIN

 PRINT MIN [1, 2, 3] ; print 1, the lowest element of the list

MÀX/MAX

 PRINT MAX [1, 2, 3] ; print 3, the greatest element of the list

Constants de color

 PENCOLOR “PLATA” ; definit pel nom
PENCOLOR [1] ; definit per identificadors
PENCOLOR “~PLATA” ; color plata aleatori

Identificador

Nom

0

NEGRE

1

PLANTA|ARGENT

2

GRIS

3

BLANC

4

GRANAT/GRANA

5

VERMELL/ROIG

6

PORPRA/PÚRPURA

7

FÚCSIA/MAGENTA

8

VERD

9

LLIMA/VERD.LLIMA

10

OLIVA/VERD.OLIVA

11

GROC

12

MARÍ/BLAU.MARÍ

13

BLAU

14

JADE

15

CIAN

16

ROSA

17

TOMÀQUET/TOMATA

18

TARONJA

19

OR

20

VIOLAT/VIOLETA

21

CEL/BLAU.CEL

22

XOCOLATA

23

MARRÓ

24

INVISIBLE


Ens cal la vostra ajuda!