Jump to content

Recommended Posts

Posted

Dear All, 

I was trying some old codes and this started to bug...

The length-map :repeat keyword no longer works... what´s happening ?

I have a lot of files using this... 

 

(setf v1mat-a (make-omn 
:length rv1 
:pitch pit-chmd1 
;repitch1 
:span :length 
:velocity (length-map len-map2 rv1 :otherwise '(mf) 
:repeat t

:articulation (length-map len-map1 rv1 :otherwise '(ord) 
:repeat t
)))

 

Error: Unexpected keyword :repeat which is not one of (:otherwise :rnd :group :section :exclude :seed).
  1 (continue) Ignore the unknown keyword :repeat.
  2 (abort) Return to top loop level 0.

Posted

Dear Janusz,

I don´t know what´s wrong here

(setf repitch2 '((e4 g4 c5) (db4 cs5 gs4 f4) (fs4) nil nil (ab4 bb4 g4 gs4) (b3 d5 fs4) (eb4 bb4) (d4) nil (c4 a4 d5 b4) (b3) nil (a3) (d4) (fs4) (bb3 c5)))

(setf rv2 '((1/8 1/16 1/16) (1/16 1/16 1/16 1/16) (1/4) (-1/4) (-1/4) (1/16 1/16 1/16 1/16) (1/16 1/16 1/8) (-1/8 1/16 1/16) (1/4) (-1/4) (1/16 1/16 1/16 1/16) (1/4) (-1/4) (1/4) (1/4) (1/4) (1/8 1/8) (1/16 1/8 1/16) (1/16 1/16 1/8) (1/8 1/16 1/16) (1/16 1/8 1/16) (1/8 1/8) (1/16 1/8 1/16) (1/16 1/16 1/8) (1/8 1/16 1/16) (1/16 3/16) (1/4) (1/4) (1/4) (1/16 3/16) (1/4) (1/4) (1/8 1/8) (1/4) (1/4) (1/4) (1/8 1/8) (1/8 1/8) (1/16 1/8 1/16) (1/16 1/16 1/8) (1/8 1/16 1/16) (1/16 1/8 1/16) (1/8 1/8) (1/16 1/8 1/16) (1/16 1/16 1/8) (1/8 1/16 1/16) (1/4) (1/4) (1/16 1/8 1/16) (1/4) (1/4) (1/4) (3/16 1/16) (1/16 1/8 1/16) (1/16 1/16 1/8) (1/8 1/16 1/16) (1/16 1/8 1/16) (1/8 1/8) (1/16 1/8 1/16) (1/16 1/16 1/8) (1/8 1/16 1/16) (1/4) (-1/4) (-1/4)))

(setf len-map1 '((e (stacc)) (s (ord)) (h (long)) (h. (long)) (w (long))))

(setf len-map2 '((e (list (rnd-pick (mf f)))) (s (mf)) (e. (mf)) (h (p<f)) (h. (p<f)) (w (P<f>p))(wq (P<f>p))(wh (P<f>p))(wh. (P<f>p))(ww (P<f>p))))

(setf v2mat-a (make-omn
           :length rv2
           :pitch repitch2
           :span :length
           :velocity (length-map 
                      len-map2
                      rv2
                      :otherwise '(mf)  :group t)
           :articulation (length-map 
                          len-map1
                          rv2
                          :otherwise '(ord) :group t)))

 

The result comes with many instances of the word "list"

 

((e e4 list stacc s g4 mf ord c5 ord) (s db4 mf ord cs5 ord gs4 ord f4 ord) (q fs4 mf ord) (-q) (-q) (s ab4 mf ord bb4 ord g4 ord gs4 ord) (s b3 mf ord d5 ord e fs4 list stacc) (-e s eb4 mf ord bb4 ord) (q d4 mf ord) (-q) (s c4 mf ord a4 ord d5 ord b4 ord) (q b3 mf ord) (-q) (q a3 mf ord) (q d4 mf ord) (q fs4 mf ord) (e bb3 list stacc c5 stacc) (s e4 mf ord e g4 list stacc s c5 mf ord) (s db4 mf ord cs5 ord e gs4 list stacc) (e fs4 list stacc s mf ord fs4 ord) (s ab4 mf ord e bb4 list stacc s g4 mf ord) (e b3 list stacc d5 stacc) (s eb4 mf ord e bb4 list stacc s eb4 mf ord) (s d4 mf ord d4 ord e list stacc) (e c4 list stacc s a4 mf ord d5 ord) (s b3 mf ord e. ord) (q a3 mf ord) (q d4 mf ord) (q fs4 mf ord) (s bb3 mf ord e. c5 ord) (q e4 mf ord) (q db4 mf ord) (e fs4 list stacc fs4 stacc) (q ab4 mf ord) (q b3 mf ord) (q eb4 mf ord) (e d4 list stacc d4 stacc) (e c4 list stacc a4 stacc) (s b3 mf ord e list stacc s mf ord) (s a3 mf ord a3 ord e list stacc) (e d4 list stacc s mf ord d4 ord) (s fs4 mf ord e list stacc s mf ord) (e bb3 list stacc c5 stacc) (s e4 mf ord e g4 list stacc s c5 mf ord) (s db4 mf ord cs5 ord e gs4 list stacc) (e fs4 list stacc s mf ord fs4 ord) (q ab4 mf ord) (q b3 mf ord) (s eb4 mf ord e bb4 list stacc s eb4 mf ord) (q d4 mf ord) (q c4 mf ord) (q b3 mf ord) (e. a3 mf ord s ord) (s d4 mf ord e list stacc s mf ord) (s fs4 mf ord fs4 ord e list stacc) (e bb3 list stacc s c5 mf ord bb3 ord) (s e4 mf ord e g4 list stacc s c5 mf ord) (e db4 list stacc cs5 stacc) (s fs4 mf ord e list stacc s mf ord) (s ab4 mf ord bb4 ord e g4 list stacc) (e b3 list stacc s d5 mf ord fs4 ord) (q eb4 mf ord) (-q) (-q))

 

Wich leads to this error in the snippet call

 


OM 54 > audition-musicxml-omn-snippet

Error: OMN Parse Error: fail
  1 (abort) Return to top loop level 0.

Type 😛 for backtrace or :c <option number> to proceed.
Type :bug-form "<subject>" for a bug report template or :? for other options.

 

BEst

Posted

Hi Julio.

You could try this macro type code.

 

Jesper

 

(setf len-map2 `((e ,(list (rnd-pick '(mf f)))) (s (mf)) (e. (mf)) (h (p<f)) (h. (p<f)) (w (P<f>p))(wq (P<f>p))(wh (P<f>p))(wh. (P<f>p))(ww (P<f>p))))

 

See under Backquote and comma

LISPCOOKBOOK.GITHUB.IO

A collection of examples of using Common Lisp

 

Posted

Not sure if I can explain this properly but here's a try.

 

The problem has nothing to do with the length-map

You are quoting a function, mixing a function and values in a list.
An unquoted list is expecting a function mostly
(mf f) does not work because there is no function named mf
'(mf f) quoted on the other hand returns it

 

(list (rnd-pick '(mf f))) is a function which needs '(mf f) to be quoted as above and returns the result of the function mf or f

 

'(list (rnd-pick (mf f))) quoted vill just return the function without evaluating it

 

So here since the whole list is within quotes returns the function of the first element and not the result  

(setf len-map2 '((e (list (rnd-pick (mf f)))) (s (mf)) (e. (mf)) (h (p<f)) (h. (p<f)) (w (P<f>p))(wq (P<f>p))(wh (P<f>p))(wh. (P<f>p))(ww (P<f>p))))

 

The back quote by it's self is no different here from the regular quote

(setf len-map2 `((e (list (rnd-pick (mf f)))) (s (mf)) (e. (mf)) (h (p<f)) (h. (p<f)) (w (P<f>p))(wq (P<f>p))(wh (P<f>p))(wh. (P<f>p))(ww (P<f>p))))

 

But with the comma before list will evaluate the function (list (rnd-pick (mf f))) which needs '(mf f) to be quoted

(setf len-map2 `((e ,(list (rnd-pick '(mf f)))) (s (mf)) (e. (mf)) (h (p<f)) (h. (p<f)) (w (P<f>p))(wq (P<f>p))(wh (P<f>p))(wh. (P<f>p))(ww (P<f>p))))
 

Jesper

 

as an alternative with regular quotes you could write like this but the backquote/comma is much easier.

 

(setf len-map2 (list (list 'e (list (rnd-pick '(mf f)))) '(s (mf)) '(e. (mf)) '(h (p<f)) '(h. (p<f)) '(w (P<f>p)) 
                     '(wq (P<f>p)) '(wh (P<f>p)) '(wh. (P<f>p)) '(ww (P<f>p))))

 

or 

(setf len-map2 (cons (list 'e (list (rnd-pick '(mf f)))) '((s (mf)) (e. (mf)) (h (p<f)) (h. (p<f)) (w (P<f>p))(wq (P<f>p))(wh (P<f>p))(wh. (P<f>p))(ww (P<f>p)))))

Posted

Julio, your code is not correct. It is important to approach the problem step by step. For example, your code snippet

(setf len-map2 '((e (list (rnd-pick (mf f)))) (s (mf))...)

needs to be organised in stages to ensure correctness.

 

Attempting to fix this with a macro (script) is not a productive use of time. I recommend delving deeper into Lisp coding practices to achieve a more robust and stylistically sound implementation.

And, the length-map (e (mf f)) will select at random one of the dynamic - if list - anyway 🙂

Posted

Thanks a lot, Jesper and Janusz 

 

Yes, I need to study LISP deeper, I´m still behind in this but I´d like to remind you that this way used to work for many years. I used this code many times before.

Best,

Julio

Posted
(setf
 dy1 (list 'e (rnd-pick '(mf f)))
 dy2 '(s mf)
 dy3 '(e. mf)
 dy4 '(h p<f)
 dy5 '(h. p<f)
 dy6 '(w P<f>p)
 dy7 '(wq P<f>p)
 dy8 '(wh P<f>p)
 dy9 '(wh. P<f>p)
 dy10 '(ww P<f>p)
 )
 
(setf dyn
      (assemble-seq
       (list dy1 dy2 dy3 dy4 dy5 dy6 dy7 dy8 dy9 dy10)))
=> ((e f) (s mf) (e. mf) (h p<f) (h. p<f) (w p<f>p)
    (wq p<f>p) (wh p<f>p) (wh. p<f>p) (ww p<f>p))

 

  • 2 months later...
Posted

Dear Friends,

 

I'm back to this topic again and revising the docs. There is an example that called my attention due to the results.

Here it is (from length-map docs):

 

(setf omn '((e c4 fff cs5 f q d4 f ds5 p s f4 p fs5 p c5 p pp)
(s cs4 p f d4 f e eb5 p f4 p eb4 f h d3 p ff)))

(length-map '(((s e) (stacc det)) (h (tr1 tasto+trem))) omn
:otherwise 'ord :rnd t :group t)

;; First evaluation

((e c4 fff stacc cs5 f stacc q d4 ord ds5 p ord s f4 stacc fs5 stacc c5 stacc c5 pp stacc) (s cs4 p stacc f stacc d4 stacc e eb5 p stacc f4 stacc eb4 f stacc h d3 p tasto+trem ff tasto+trem))

;; Second evaluation - completely mess the lengths

((w c4 fff tie) (wet c4 fff q.t cs5 f ord+tie) (whs cs5 f tie) (e. cs5 f wq. d4 tie) (h.t d4 ds5 p stacc+tie) (wq. ds5 p e. f4 tie) (whs f4 tie) (q.t f4 wet fs5 tie) (w fs5 hs c5 tie) (whs c5 tie) (t c5 wht pp tie) (he c5 pp h... cs4 p tie) (we.. cs4 p qs. f tie) (whs cs4 f tie) (q cs4 f wqs d4 tie) (h.s. d4 he.. eb5 p tie) (wqe. eb5 p e f4 tie) (whs f4 tie) (q... f4 ws. eb4 f tr1+tie) (ws eb4 f h d3 p tie) (whs d3 p tie) (s. d3 p wq... mf tie) (he. d3 mf))

 

Sometimes the evalaution returns the second example, messing with the lengths.

 

All the best !

Julio

Posted

First you need to make the code indented  (each list) for better reading.

Secondly the report needs to be shorter - just the problem, 2-5 bars.

 

You should check the output first, before calling Houston. 

 

((f mf mf) (mf mf mf mf) nil nil nil (mf mf mf mf) (mf mf f) (mf mf) (p<f>p) nil (mf mf mf mf) (p<f) nil nil nil nil (f f) (mf f mf) (mf mf f) (f mf mf) (mf f mf) (f f) (mf f mf) (mf mf f) (f mf mf) (mf mf) nil nil nil (mf mf) nil nil (f f) nil nil nil (f f) (f f) (mf f mf) (mf mf f) (f mf mf) (mf f mf) (f f) (mf f mf) (mf mf f) (f mf mf) nil nil (mf f mf) nil nil nil (mf mf) (mf f mf) (mf mf f) (f mf mf) (mf f mf) (f f) (mf f mf) (mf mf f) (f mf mf) nil nil nil)

 

you need add otherwise.

Posted

I though otherwise was optional. Now it´s alternating mf and mp for the 16th notes... It should be all mf for 16th notes. And the time signature is changed for the breaking of the lists (in can be solved with omn to time signature.

 

      (make-omn
           :length rv2
           :pitch repitch2
           :span :length
           :velocity (length-map 
                      len-map2
                      rv2
:otherwise '(mp)
                    )
           :articulation (length-map 
                          len-map1
                          rv2
:otherwise '(mp)
                          ))

((e e4 f stacc s g4 mf mp c5 mp) (s db4 mf mp cs5 mp gs4 mp f4 mp) (q fs4 mp ord) (-q) (-q) (s ab4 mf mp bb4 mp g4 mp gs4 mp) (s b3 mf mp d5 mp e fs4 f stacc) (-e s eb4 mf mp bb4 mp) (w d4 p<f>p long) (-q) (s c4 mf mp a4 mp d5 mp b4 mp) (h b3 p<f long) (-q) (q a3 mp ord) (q d4 mp ord) (q fs4 mp ord) (e bb3 f stacc c5 stacc) (s e4 mf mp e g4 f stacc s c5 mf mp) (s db4 mf mp cs5 mp e gs4 f stacc) (e fs4 f stacc s mf mp fs4 mp) (s ab4 mf mp e bb4 f stacc s g4 mf mp) (e b3 f stacc d5 stacc) (s eb4 mf mp e bb4 f stacc s eb4 mf mp) (s d4 mf mp d4 mp e f stacc) (e c4 f stacc s a4 mf mp d5 mp) (s b3 mf mp e. mp) (q a3 mp ord) (q d4 mp ord) (q fs4 mp ord) (s bb3 mf mp e. c5 mp) (q e4 mp ord) (q db4 mp ord) (e fs4 f stacc fs4 stacc) (q ab4 mp ord) (q b3 mp ord) (q eb4 mp ord) (e d4 f stacc d4 stacc) (e c4 f stacc a4 stacc) (s b3 mf mp e f stacc s mf mp) (s a3 mf mp a3 mp e f stacc) (e d4 f stacc s mf mp d4 mp) (s fs4 mf mp e f stacc s mf mp) (e bb3 f stacc c5 stacc) (s e4 mf mp e g4 f stacc s c5 mf mp) (s db4 mf mp cs5 mp e gs4 f stacc) (e fs4 f stacc s mf mp fs4 mp) (q ab4 mp ord) (q b3 mp ord) (s eb4 mf mp e bb4 f stacc s eb4 mf mp) (q d4 mp ord) (q c4 mp ord) (q b3 mp ord) (e. a3 mf mp s mp) (s d4 mf mp e f stacc s mf mp) (s fs4 mf mp fs4 mp e f stacc) (e bb3 f stacc s c5 mf mp bb3 mp) (s e4 mf mp e g4 f stacc s c5 mf mp) (e db4 f stacc cs5 stacc) (s fs4 mf mp e f stacc s mf mp) (s ab4 mf mp bb4 mp e g4 f stacc) (e b3 f stacc s d5 mf mp fs4 mp) (q eb4 mp ord) (-q) (-q))

 

No nils in this list, I put the optional otherwise but still getting sometimes mf and mp in the 16th notes...

 

(progn
(setf rv2 '((1/8 1/16 1/16) (1/16 1/16 1/16 1/16) (1/4) (-1/4) (-1/4) (1/16 1/16 1/16 1/16) (1/16 1/16 1/8) (-1/8 1/16 1/16) (1) (-1/4) (1/16 1/16 1/16 1/16) (1/2) (-1/4) (1/4) (1/4) (1/4) (1/8 1/8) (1/16 1/8 1/16) (1/16 1/16 1/8) (1/8 1/16 1/16) (1/16 1/8 1/16) (1/8 1/8) (1/16 1/8 1/16) (1/16 1/16 1/8) (1/8 1/16 1/16) (1/16 3/16) (1/4) (1/4) (1/4) (1/16 3/16) (1/4) (1/4) (1/8 1/8) (1/4) (1/4) (1/4) (1/8 1/8) (1/8 1/8) (1/16 1/8 1/16) (1/16 1/16 1/8) (1/8 1/16 1/16) (1/16 1/8 1/16) (1/8 1/8) (1/16 1/8 1/16) (1/16 1/16 1/8) (1/8 1/16 1/16) (1/4) (1/4) (1/16 1/8 1/16) (1/4) (1/4) (1/4) (3/16 1/16) (1/16 1/8 1/16) (1/16 1/16 1/8) (1/8 1/16 1/16) (1/16 1/8 1/16) (1/8 1/8) (1/16 1/8 1/16) (1/16 1/16 1/8) (1/8 1/16 1/16) (1/4) (-1/4) (-1/4)))


(setf repitch2 '((e4 g4 c5) (db4 cs5 gs4 f4) (fs4) (ab4 bb4 g4 gs4) (b3 d5 fs4) (eb4 bb4) (d4) (c4 a4 d5 b4) (b3) (a3) (d4) (fs4) (bb3 c5)))


(setf len-map2 '((e f) (s mf) (e. mf) (h p<f) (h. p<f) (w p<f>p) (wq p<f>p) (wh p<f>p) (wh. p<f>p) (ww p<f>p)))

(setf len-map1 '((e (stacc)) (q (ord)) (h (long)) (h. (long)) (w (long))))


      (make-omn
           :length rv2
           :pitch repitch2
           :span :length
           :velocity (length-map 
                      len-map2
                      rv2
:otherwise '(mp)
                    )
           :articulation (length-map 
                          len-map1
                          rv2
:otherwise '(mp)
                          ))

)

 

result

 

((e e4 f stacc s g4 mf mp c5 mp) (s db4 mf mp cs5 mp gs4 mp f4 mp) (q fs4 mp ord) (-q) (-q) (s ab4 mf mp bb4 mp g4 mp gs4 mp) (s b3 mf mp d5 mp e fs4 f stacc) (-e s eb4 mf mp bb4 mp) (w d4 p<f>p long) (-q) (s c4 mf mp a4 mp d5 mp b4 mp) (h b3 p<f long) (-q) (q a3 mp ord) (q d4 mp ord) (q fs4 mp ord) (e bb3 f stacc c5 stacc) (s e4 mf mp e g4 f stacc s c5 mf mp) (s db4 mf mp cs5 mp e gs4 f stacc) (e fs4 f stacc s mf mp fs4 mp) (s ab4 mf mp e bb4 f stacc s g4 mf mp) (e b3 f stacc d5 stacc) (s eb4 mf mp e bb4 f stacc s eb4 mf mp) (s d4 mf mp d4 mp e f stacc) (e c4 f stacc s a4 mf mp d5 mp) (s b3 mf mp e. mp) (q a3 mp ord) (q d4 mp ord) (q fs4 mp ord) (s bb3 mf mp e. c5 mp) (q e4 mp ord) (q db4 mp ord) (e fs4 f stacc fs4 stacc) (q ab4 mp ord) (q b3 mp ord) (q eb4 mp ord) (e d4 f stacc d4 stacc) (e c4 f stacc a4 stacc) (s b3 mf mp e f stacc s mf mp) (s a3 mf mp a3 mp e f stacc) (e d4 f stacc s mf mp d4 mp) (s fs4 mf mp e f stacc s mf mp) (e bb3 f stacc c5 stacc) (s e4 mf mp e g4 f stacc s c5 mf mp) (s db4 mf mp cs5 mp e gs4 f stacc) (e fs4 f stacc s mf mp fs4 mp) (q ab4 mp ord) (q b3 mp ord) (s eb4 mf mp e bb4 f stacc s eb4 mf mp) (q d4 mp ord) (q c4 mp ord) (q b3 mp ord) (e. a3 mf mp s mp) (s d4 mf mp e f stacc s mf mp) (s fs4 mf mp fs4 mp e f stacc) (e bb3 f stacc s c5 mf mp bb3 mp) (s e4 mf mp e g4 f stacc s c5 mf mp) (e db4 f stacc cs5 stacc) (s fs4 mf mp e f stacc s mf mp) (s ab4 mf mp bb4 mp e g4 f stacc) (e b3 f stacc s d5 mf mp fs4 mp) (q eb4 mp ord) (-q) (-q))

 

Posted

It is optional, but if you are not covering all lengths you will get nil. NIL can be usefule but not in your code.

Wrong:
:articulation (length-map len-map1rv2 :otherwise '(mf)

 

Correct:
:articulation (length-map len-map1rv2 :otherwise '(ord) ; needs to be articulation

 

 

Posted

Now looks good. Thanks, Janusz

 

      (make-omn
           :length rv2
           :pitch repitch2
           :span :length
           :velocity (length-map 
                      len-map2
                      rv2
:otherwise '(mp)
                    )
:articulation (length-map len-map1 rv2 :otherwise '(ord)
                          ))

 

result

 

((e e4 f stacc s g4 mf ord c5 ord) (s db4 mf ord cs5 ord gs4 ord f4 ord) (q fs4 mp ord) (-q) (-q) (s ab4 mf ord bb4 ord g4 ord gs4 ord) (s b3 mf ord d5 ord e fs4 f stacc) (-e s eb4 mf ord bb4 ord) (w d4 p<f>p long) (-q) (s c4 mf ord a4 ord d5 ord b4 ord) (h b3 p<f long) (-q) (q a3 mp ord) (q d4 mp ord) (q fs4 mp ord) (e bb3 f stacc c5 stacc) (s e4 mf ord e g4 f stacc s c5 mf ord) (s db4 mf ord cs5 ord e gs4 f stacc) (e fs4 f stacc s mf ord fs4 ord) (s ab4 mf ord e bb4 f stacc s g4 mf ord) (e b3 f stacc d5 stacc) (s eb4 mf ord e bb4 f stacc s eb4 mf ord) (s d4 mf ord d4 ord e f stacc) (e c4 f stacc s a4 mf ord d5 ord) (s b3 mf ord e. ord) (q a3 mp ord) (q d4 mp ord) (q fs4 mp ord) (s bb3 mf ord e. c5 ord) (q e4 mp ord) (q db4 mp ord) (e fs4 f stacc fs4 stacc) (q ab4 mp ord) (q b3 mp ord) (q eb4 mp ord) (e d4 f stacc d4 stacc) (e c4 f stacc a4 stacc) (s b3 mf ord e f stacc s mf ord) (s a3 mf ord a3 ord e f stacc) (e d4 f stacc s mf ord d4 ord) (s fs4 mf ord e f stacc s mf ord) (e bb3 f stacc c5 stacc) (s e4 mf ord e g4 f stacc s c5 mf ord) (s db4 mf ord cs5 ord e gs4 f stacc) (e fs4 f stacc s mf ord fs4 ord) (q ab4 mp ord) (q b3 mp ord) (s eb4 mf ord e bb4 f stacc s eb4 mf ord) (q d4 mp ord) (q c4 mp ord) (q b3 mp ord) (e. a3 mf ord s ord) (s d4 mf ord e f stacc s mf ord) (s fs4 mf ord fs4 ord e f stacc) (e bb3 f stacc s c5 mf ord bb3 ord) (s e4 mf ord e g4 f stacc s c5 mf ord) (e db4 f stacc cs5 stacc) (s fs4 mf ord e f stacc s mf ord) (s ab4 mf ord bb4 ord e g4 f stacc) (e b3 f stacc s d5 mf ord fs4 ord) (q eb4 mp ord) (-q) (-q))

 

Posted

An important part of coding is to ensure, before reporting a “bug,” that the code you are working with has been thoroughly deconstructed—if issues arise—to confirm that the error is not on your part.

Posted

Yes, you are correct,

 

I always try to make sure that the fault is not mine. However, there are many hidden little "secrets" that are not evident for me. In this I was interpreting :otherwise as an optional argument. I´ll never understand Opusmodus as good as you, but I like it a lot. 

Thanks a lot,

Best

Julio

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

Important Information

Terms of Use Privacy Policy