|
07-01-2007, 02:08 AM
|
#41
|
Human being with feelings
Join Date: Jun 2007
Posts: 4
|
main.ico missing in test lice folder
Hi,
I test. Iplug compile now. But for the IplugExample the project need lice.lib and the lice project doesn't compile because the main.ico is missing in the test folder. I add a dummy icone and everything is ok.
regards
Philippe
|
|
|
07-04-2007, 05:34 AM
|
#42
|
Administrator
Join Date: Mar 2007
Location: NY
Posts: 15,815
|
Justin dropped by in the dark of night to fix a windows-level problem that occurred when multiple instances of the same plugin were loaded and unloaded. Thanks Justin.
... also there were a couple of changes in this update that will require tweaking existing projects: OnParamChange now supplies the index of the param that changed, the vector drawing controls now take a channel blending object, the relative library paths got flatted by one level, and possibly other minor things I can't recall at the moment.
Last edited by schwa; 07-04-2007 at 05:38 AM.
|
|
|
08-30-2007, 07:49 AM
|
#43
|
Human being with feelings
Join Date: Aug 2007
Location: Not too far from SeaTac Airport
Posts: 29
|
Should work on:
1. OSX?
2. Any VST Host?
Last edited by spaz; 08-30-2007 at 07:51 AM.
Reason: i hit enter or something!!
|
|
|
08-30-2007, 10:52 AM
|
#44
|
Administrator
Join Date: Mar 2007
Location: NY
Posts: 15,815
|
Quote:
Originally Posted by spaz
Should work on:
1. OSX?
2. Any VST Host?
|
I just updated the code with a month's worth of changes, at the top of the thread. IPlug has been pretty well battle tested in many configurations in many VST hosts, including Cubase SX3 & C4, Samplitude, FL Studio, Sonar, Live, etc.
IPlug will not work on OSX out of the box. But it's designed to be portable. Right now, to work on OSX, two new classes would need to be written: a window handler class and a graphics drawing class. (Both of these needs may eventually be met by WDL's LICE and SWELL.) With those two new classes, plugins written in IPlug will be compilable for either Windows or OSX.
I'm pretty sure the OSX classes will exist someday, but it's not something I'm working on right now.
* By the way, I want to say an huge "thank you" to Tallisman, who has done a tremendous amount of the aforementioned battle-testing. Thanks T!
Last edited by schwa; 08-30-2007 at 12:01 PM.
|
|
|
08-30-2007, 05:38 PM
|
#45
|
Human being with feelings
Join Date: Aug 2007
Location: Not too far from SeaTac Airport
Posts: 29
|
Quote:
Originally Posted by schwa
I just updated the code with a month's worth of changes, at the top of the thread. IPlug has been pretty well battle tested in many configurations in many VST hosts, including Cubase SX3 & C4, Samplitude, FL Studio, Sonar, Live, etc.
IPlug will not work on OSX out of the box. But it's designed to be portable. Right now, to work on OSX, two new classes would need to be written: a window handler class and a graphics drawing class. (Both of these needs may eventually be met by WDL's LICE and SWELL.) With those two new classes, plugins written in IPlug will be compilable for either Windows or OSX.
I'm pretty sure the OSX classes will exist someday, but it's not something I'm working on right now.
* By the way, I want to say an huge "thank you" to Tallisman, who has done a tremendous amount of the aforementioned battle-testing. Thanks T!
|
Why would LICE and SWELL not do the job today?
|
|
|
10-09-2007, 01:04 PM
|
#46
|
Administrator
Join Date: Mar 2007
Location: NY
Posts: 15,815
|
IPlug 2.0
A major update (in the first post) that includes tons of updates including vastly more efficient drawing logic, presets, battle tested host compatibility, and a million other things. Also I replaced STL with Cockos WDL, which makes for much smaller and somewhat faster code.
Removing STL caused a lot of interface changes, so this update is NOT compatible with previous IPlugs. And what's more, I'll be away for a few days and unable to respond to any problems! So if you are an actual current IPlug user, please copy your current build to a safe place instead of just clobbering it with this one.
Also, I'm using VC++ 9 Express which is newish, so I didn't bother posting project files because I know they are not backwards compatible.
Also if you are an actual current IPlug user, please say hello to the unicorns and leprechauns and other mythical creatures you must live among...
|
|
|
10-19-2007, 07:00 AM
|
#47
|
Human being with feelings
Join Date: Sep 2007
Posts: 3
|
Hi there! I checked out the last release of IPlug and was impressed with what I saw, but haven't had time to do much with it recently. For what it's worth I was able to build the last release on Visual Studio 2005 by editing the project file and changing the version "9.00" to "8.00". But I'm on a new computer now and just installed Visual Studio Express 2008, so time to give it another whirl.
The main issue I had last time was that I had to guess the include and library paths for VST and LICE. Has this been standardised somehow (maybe an env variable?)
I also tweaked the iplug creation to allow use as a generator module. I'd be happy to contribute back code but I need to get up to speed with this release first.
Thanks for your great work!
|
|
|
11-08-2007, 08:46 AM
|
#48
|
Human being with feelings
Join Date: Sep 2007
Posts: 3
|
Multi-param controls?
I want to add a control that maps to two parameters (in this case an X/Y pad control). When I looked controls appeared to be limited to 1 param. If I change this would I be better off subclassing in my own library, or modifying IPlug and submitting the changes back?
|
|
|
11-08-2007, 09:48 AM
|
#49
|
Administrator
Join Date: Mar 2007
Location: NY
Posts: 15,815
|
Quote:
Originally Posted by wct
I want to add a control that maps to two parameters (in this case an X/Y pad control). When I looked controls appeared to be limited to 1 param. If I change this would I be better off subclassing in my own library, or modifying IPlug and submitting the changes back?
|
When I've done this, I've subclassed IControl and overridden SetDirty to send both parameters back to the host, which is a painless way to do something like an X/Y pad.
Often though if you have a complex control, some parameters may be constrained by others, for example if you have controls to move 2 points along a line but the points may not pass one another. In this case it's not really safe to allow the control values to be VST parameters at all, because with the GUI closed (or using automation) the user could set the parameters to illegal combinations. In cases like this, I've subclassed IControl and had the new control hold a pointer to the plugin instance class. That way, the graphics handler still knows how to pass mouse actions to the control, but the control and the plugin can communicate directly without having to go back through the parameter handling code.
(BTW I just updated the IPlug src in the first post.)
|
|
|
11-09-2007, 04:39 AM
|
#50
|
Human being with feelings
Join Date: Sep 2007
Posts: 3
|
Cool, I'll try that and see how I go.
|
|
|
01-15-2008, 08:17 PM
|
#51
|
Human being with feelings
Join Date: Jan 2008
Location: Oslo
Posts: 315
|
Quick question
Thanks for this library! It was simple to get working, and I'm working on a VST plugin (receiving and processing both MIDI and audio) as we speak, complete with GUI and all. I'm very happy having gotten this far working less than 24h.
A quick question: I'm using the IKnobMultiControl to display a nice little knob I made with KnobMan, and it works very well. But for simple 2 bitmap thingies like a "MIDI activity"-indicator not connected to a parameter, what would you use?
Thanks again!
|
|
|
01-15-2008, 08:23 PM
|
#52
|
Human being with feelings
Join Date: Jan 2008
Location: Oslo
Posts: 315
|
Quote:
Originally Posted by COCPORN
...snip question which has the answer in the example code...
|
*blush*
Sorry about that, I see you're using the IBitmapControl in the example. Thanks again.
|
|
|
01-15-2008, 08:36 PM
|
#53
|
Administrator
Join Date: Mar 2007
Location: NY
Posts: 15,815
|
I'm glad somebody's getting use out of this.
BTW, there's a major iplug update coming with OSX and AU support. I'd guess a couple of weeks away, after I clear some other work out.
|
|
|
01-15-2008, 08:59 PM
|
#54
|
Human being with feelings
Join Date: Jan 2008
Location: Oslo
Posts: 315
|
Quote:
Originally Posted by schwa
I'm glad somebody's getting use out of this.
BTW, there's a major iplug update coming with OSX and AU support. I'd guess a couple of weeks away, after I clear some other work out.
|
Excellent. I've already managed to add the MIDI-activity button since my last post. This is a very nice library indeed. Looking forward to OSX support too! That'll be great.
|
|
|
01-16-2008, 11:41 AM
|
#55
|
Human being with feelings
Join Date: Jan 2008
Location: Oslo
Posts: 315
|
Another small(?) problem
I tried moving my plugin to my computer designated for audio work, but Live 7 doesn't even find the plugin on a rescan. That is, I'm sure it rescans the directory, but for some reason it doesn't list my baby.
Anyone familiar with troubleshooting this kind of situation? Are there any specialized hosts suitable for debugging this (and other) kinds of problems?
(I've MD5 checked files on both computers, it works perfectly on my development machine. I've also installed the vcredist 2008 on the second computer, as I'm using Visual Studio 2008 for development. I've also tried making an installation project to detect dependencies, but this doesn't seem to do any good either; it just adds comdlg32.dll to the install directory.)
Any help greatly appreciated.
|
|
|
01-16-2008, 12:13 PM
|
#56
|
Administrator
Join Date: Mar 2007
Location: NY
Posts: 15,815
|
Quote:
Originally Posted by COCPORN
I tried moving my plugin to my computer designated for audio work, but Live 7 doesn't even find the plugin on a rescan.
|
Is this a machine problem, or a host problem? You have computer A and computer B, and you have Reaper and Live (say). Which of the 4 combinations work and which don't?
I know for sure that my current local IPlug works in Live 6 and Live 7, fwiw, so if you discover it's a host problem, I can push the current source code up (it's been a while since I updated the code here). If it's a machine problem, it may be that the compiler settings on the dev PC don't generate code that audio PC can read (SSE2 code won't run on an Athlon XP, for example).
|
|
|
01-16-2008, 12:39 PM
|
#57
|
Human being with feelings
Join Date: Jan 2008
Location: Oslo
Posts: 315
|
Similar configurations
The configurations are similar, but not identical. The laptop is a Core2 Duo, the desktop is a Quad, both from Intel. Both are running Vista Home Premium. Both are Live 7.0.1.
I'll try to compile the plugin with VS2005, I'm pretty sure this has something to do with runtime libraries and stuff like that. Trying that now.
Do you have a debug-host to recommend? I did a search but found mostly dead links.
|
|
|
01-16-2008, 12:48 PM
|
#58
|
Administrator
Join Date: Mar 2007
Location: NY
Posts: 15,815
|
Quote:
Originally Posted by COCPORN
The configurations are similar, but not identical. The laptop is a Core2 Duo, the desktop is a Quad, both from Intel. Both are running Vista Home Premium. Both are Live 7.0.1.
I'll try to compile the plugin with VS2005, I'm pretty sure this has something to do with runtime libraries and stuff like that. Trying that now.
Do you have a debug-host to recommend? I did a search but found mostly dead links.
|
If the same version of Live loads the plugin on one PC and not the other, I think it has to be something in your compiler settings. Did you change anything in the stock compiler settings that came with the project?
I don't think this will help in your case, but one debugging option is to define TRACER_BUILD in the project settings for IPlug and your plugin. Then the plugin will log all activity to C:/VSTLog.txt (don't run it too long if you get it to load, or you'll wear a groove in the disk). But like I said, it sounds like the one PC isn't even recognizing the dll.
I use a bunch of hosts for debugging, these all have free or eval versions available:
- MiniHost
- EnergyXT
- Live
- Samplitude
- Tracktion
- Sonar (time limited trial)
|
|
|
01-16-2008, 01:11 PM
|
#59
|
Human being with feelings
Join Date: Jan 2008
Location: Oslo
Posts: 315
|
Not sure
Did the source come with a project? Not sure if I found it.
WDL came with a project, which I've converted to 2005 and 2008-projects, it compiles nicely on both platforms after handling a problem with redefinition of UINT8 and UINT16.
IPlugExample.zip and IPlug.zip don't really come with project files, as far as I can see. Am I missing something?
I've just done a "Create project from existing sourcefiles" and chose them to be lib for IPlug and dll for IPlugExample.
Any idea what settings in the project would make this not work? Do you have a sample project file for 2005 or 2008?
I've now compiled my source with 2005 and 2008, both work on the dev-PC, none work on the separate machine. I've also tested the VST Plugin Analyser from here: http://www.savioursofsoul.de/Christian/?page_id=5, which loads the plugin correctly on the dev-machine, but not on the separate machine. I've also compiled the source with the TRACER_BUILD-define, but nothing shows up in any file, even on the machine where the plugin loads correctly.
Thanks again!
|
|
|
01-16-2008, 01:18 PM
|
#60
|
Administrator
Join Date: Mar 2007
Location: NY
Posts: 15,815
|
Here's a VC++ 2008 project file for the example project. If you post yours I can take a look at it, too.
https://stash.reaper.fm/oldsb/18548/IPlugExample.vcproj
The TRACER_BUILD needs both the lib and the dll compiled with it on (I use a separate build config for this). But it's clear this won't help you, because you need to get the one PC to read the dll at all.
|
|
|
01-16-2008, 01:42 PM
|
#61
|
Human being with feelings
Join Date: Jan 2008
Location: Oslo
Posts: 315
|
Success!
I went through and made some changes. The ones I remember off the top of my head were "Character set" from "Not set" to "Multibyte charset", "Multithreaded DLL" (/MD)to "Multithreaded" (/MT), also I only had link includes to only lice.lib and iplug.lib, I added the ones you had in your project.
I'm pretty sure the perp was the "Multithreaded DLL", tho, in C++ Code Generation.
Thanks a bunch for your help!
|
|
|
01-18-2008, 01:52 AM
|
#62
|
Human being with feelings
Join Date: Jan 2008
Location: Oslo
Posts: 315
|
Another small problem
I've come a long way in a short time writing my first VST plugin. Doing the last polishing I decided to implement a bypass button. As this will not be linked to a VST parameter, I decided on just subclassing the IBitmapControl with a new class; BypassButton. In BypassButton I override OnMouseDown, and toggle a bool and some UI elements in the plugin surface.
Problem is, the click-message is trapped only 70% of the time. I kind of remember this behavior in the cyclebitmaps in the IPlugExample-project too. (The one with the led and the lever.)
Anyone else experienced this, and/or have a workaround?
(EDIT: It seems to trigger ~100% of the time if I move the mouse in and out of the bitmap boundaries with every click. This could be a timing thing, tho. RE-EDIT: It seems like it approaches ~100% if I wait a period of time between clicks. Which is kind of odd. Is there a need to lock on some kind of mutex to trap these 100%? Tried locking on the IPlug mMutex in OnMouseDown, but no behavior changed.)
Last edited by COCPORN; 01-18-2008 at 02:26 AM.
|
|
|
01-18-2008, 05:19 AM
|
#63
|
Administrator
Join Date: Mar 2007
Location: NY
Posts: 15,815
|
Could it just be that overly soon re-clicks are interpreted as double clicks? Try overridding OnMouseDblClick too.
|
|
|
01-18-2008, 08:29 AM
|
#64
|
Human being with feelings
Join Date: Jan 2008
Location: Oslo
Posts: 315
|
:)
Thanks again, now everything works excellently.
|
|
|
01-20-2008, 03:21 AM
|
#65
|
Human being with feelings
Join Date: Jan 2008
Location: Oslo
Posts: 315
|
ISwitchControl
BTW, ISwitchControl is affected by the same problem (with the double clicks not being trapped). It's really easy to fix, but should probably make it into your source base. I just added;
IControl.h:
(To ISwitchControl declaration.)
void OnMouseDblClick(int x, int y, IMouseMod *pMod);
IControl.cpp:
void ISwitchControl::OnMouseDblClick(int x, int y, IMouseMod *pMod)
{
OnMouseDown(x, y, pMod);
}
Then the lever doesn't jump around as strangely anymore.
|
|
|
01-20-2008, 05:37 AM
|
#66
|
Human being with feelings
Join Date: Jan 2008
Location: Oslo
Posts: 315
|
Problem with static audioMasterCallback
There seems to be a problem with the way the audioMasterCallback is stored in the current implementation. This sometimes causes the plugin to hang the host under certain circumstances.
To reproduce:
(works with IPluginExample):
Set the ProcessDoubleReplacing-implementation to ask for host information, for example sample position:
void PlugExample::ProcessDoubleReplacing (double** inputs, double** outputs, int sampleFrames)
{
WDL_MutexLock lock(&mMutex);
int samplePos = GetSamplePos();
}
Create two instances of the plugin. Deleting the first works fine. Trying to deleting the second hangs my host (Live 7). Note: Both instances of the plugin will happily coexist until you delete one of them.
(I'm not intimately familiar with how DLL handles static resources, but I think this might be the problem. I tried heap-allocating some memory to hold the callback, but I was unable to get it to work.)
Workaround:
It's not difficult to work around this problem by passing the audioMasterCallback to the IPlug-instance (I'm currently doing this for my own plugin). This makes the IPlug-interface VST specific, tho. I'll leave it up to you to figure out a smart way to fix this in a platform agnostic way.
|
|
|
01-20-2008, 06:40 AM
|
#67
|
Administrator
Join Date: Mar 2007
Location: NY
Posts: 15,815
|
Boy, you're going at this, aren't you?
For AU support I've added an "instance data" struct that holds the host callback and HINSTANCE pointer for Windows VSTs, and mac and AU specific stuff when relevant. Each plugin instance then holds its own instance data, so nothing is kept global. This will probably clear up whatever you're seeing.
Also, fwiw, the default double-click implementation resets the control to its original (default) setting.
|
|
|
01-20-2008, 07:40 AM
|
#68
|
Human being with feelings
Join Date: Jan 2008
Location: Oslo
Posts: 315
|
I had a dream as a boy to code sound-stuff, and now it seems so accessible (mainly because of the excellent support in this thread) I'm going to spend some time with it.
I'm very happy with the results so far, I've been able to code this in under a week with no prior exposure to VST or MIDI:
http://www.intranq.com/Screenshots/P...Gate_Beta1.png
(The knobs actually do something.Send me a private message if you need a MIDI controlled "trance gate", and I'll give you the download URL.)
I'm looking forward to trying to compile this stuff on my friend's OSX-laptop, it sounds like the problem I was experiencing has been solved nicely. Regarding the double click thingie, I noticed on the rotary knobs that double click reset them, but I didn't have the mental capacity to transfer this behavior to the switchknobs. From a user point of view it was still kind of confusing even knowing why it was bahaving like that, so I'll leave the reset function disabled.
|
|
|
03-27-2008, 11:35 AM
|
#69
|
Administrator
Join Date: Mar 2007
Location: NY
Posts: 15,815
|
Updated ... now you can compile the same code into a Windows VST and an OSX Audio Unit.
|
|
|
03-29-2008, 08:43 PM
|
#70
|
Human being with feelings
Join Date: Dec 2007
Location: In church, burning it down
Posts: 1,345
|
Hohohohohoho very cool update
NAS
__________________
Not Gods or Saints but HUMAN be
|
|
|
05-06-2008, 11:44 AM
|
#71
|
Administrator
Join Date: Mar 2007
Location: NY
Posts: 15,815
|
Updated the source code (link in first post). VST and now AU support have been battle-tested in many hosts. Added OSX VST support.
|
|
|
05-13-2008, 12:01 PM
|
#72
|
Human being with feelings
Join Date: May 2008
Location: Apeldoorn - The Netherlands
Posts: 10
|
How to compile lice.lib with VC++ 2008 Express
Great stuff!!
Would like to testdrive with VC++ 2008 Express, by using:
Quote:
Originally Posted by schwa
Here's a VC++ 2008 project file for the example project. If you post yours I can take a look at it, too.
https://stash.reaper.fm/oldsb/18548/IPlugExample.vcproj
The TRACER_BUILD needs both the lib and the dll compiled with it on (I use a separate build config for this). But it's clear this won't help you, because you need to get the one PC to read the dll at all.
|
but the linker yields an error because it cannot open "lice.lib". See also:
http://www.cockos.com/forum/showthre...520#post184520
Any suggestions?
|
|
|
05-13-2008, 12:14 PM
|
#73
|
Administrator
Join Date: Mar 2007
Location: NY
Posts: 15,815
|
I do compile lice with VC08 ... you are compiling the lice library, not the test executable, right? That error sounds like it's not able to build the resources but the library shouldn't need any resources.
This might help, it's the VC08 vcproj file I use to build lice:
|
|
|
05-14-2008, 09:48 AM
|
#74
|
Human being with feelings
Join Date: May 2008
Location: Apeldoorn - The Netherlands
Posts: 10
|
You did put me on the right track, Schwa. After getting rid of some more directory related compiler & linker errors, I got the example-dll running in no time. Now, let the games commence ;-)
Thanks a lot!
|
|
|
06-15-2008, 05:23 AM
|
#75
|
Human being with feelings
Join Date: May 2008
Posts: 16
|
Hi, wondering the best way of doing a visualisation-style plugin (or, one that redraws the whole window at a frequency). I saw some FPS / OnIdle things in the interfaces, but can't seem to wrangle it to work the way I'm thinking of.
At the moment I'm creating a graphics object, with no controls, and then infrequently (every 20k samples for this example) in ProcessDoubleReplacing calling some DrawLine(), then DrawScreen() with the whole screen rect.
It redraws if you force a window redraw - drag it on/off screen, overlay something else on top and move it away etc - but no matter what I do it wont refresh by itself - invalidate I mean.
Is there a correct way to do this? Create a new IControl-derived class for this kinda stuff?
|
|
|
06-15-2008, 06:57 AM
|
#76
|
Administrator
Join Date: Mar 2007
Location: NY
Posts: 15,815
|
Proper usage would have the control only redrawing itself when it is marked dirty. For controls that have only a single value (like a knob, or a meter), you can call GetGUI()->SetParameterFromPlug from within ProcessDoubleReplacing, which will cause the control to set itself dirty and redraw.
If the control has more than one value (like a graph), here's what I do:
- Create a new control class, and store a pointer to it in your plugin class.
- Write a control method Draw() (to override IControl:: Draw) that pulls the stored data from the plugin and draws whatever it needs to.
- From within the sample processing code, store whatever data the control needs, and whenever you want the control to redraw itself, call mycontrol->SetDirty(), which will cause mycontrol->Draw() to be called.
Last edited by schwa; 06-15-2008 at 11:13 PM.
|
|
|
06-15-2008, 10:39 PM
|
#77
|
Human being with feelings
Join Date: Mar 2007
Posts: 3
|
crash and bug - osx
I managed, after much mucking around, (why, not release something that'll build first time? ) to get the vst and au
to compile a universal binary in xcode, tried to load the vst in Live6 and it crashed:
/IPlug/IGraphicsLice.cpp:104: failed assertion `imgResourceFound'
the png files are there in the Resource folder though so, no
idea why it cant find them.
The au loads but draws the gui upside down! (see attahed)
any ideas?
|
|
|
06-15-2008, 10:58 PM
|
#78
|
Administrator
Join Date: Mar 2007
Location: NY
Posts: 15,815
|
Quote:
Originally Posted by garyn
I managed, after much mucking around, (why, not release something that'll build first time? ) to get the vst and au
to compile a universal binary in xcode, tried to load the vst in Live6 and it crashed:
/IPlug/IGraphicsLice.cpp:104: failed assertion `imgResourceFound'
the png files are there in the Resource folder though so, no
idea why it cant find them.
The au loads but draws the gui upside down! (see attahed)
any ideas?
|
The failed assert is probably because you didn't add the image resource to the vst target.
The upside downness is because (I forgot about this) iplug and lice developed along different paths for OSX drawing. You'll need to edit wdl/lice/lice.h LICE_SysBitmap::isFlipped() to simply return false always, and that should fix it.
|
|
|
06-23-2008, 06:12 PM
|
#79
|
Human being with feelings
Join Date: Mar 2007
Posts: 3
|
Hi schwa
Quote:
The failed assert is probably because you didn't add the image resource to the vst target.
The upside downness is because (I forgot about this) iplug and lice developed along different paths for OSX drawing. You'll need to edit wdl/lice/lice.h LICE_SysBitmap::isFlipped() to simply return false always, and that should fix it.
|
The bitmaps are added to the VST target, i didnt change it
it, thats how your project was setup.
--
isFlipped currently always returns false, again its set that way in your code:
virtual bool isFlipped()=0;
bool isFlipped() { return false; }
bool isFlipped()
{
#ifndef _WIN32
return true;
#else
return false;
#endif
}
|
|
|
06-23-2008, 06:23 PM
|
#80
|
Administrator
Join Date: Mar 2007
Location: NY
Posts: 15,815
|
Quote:
Originally Posted by garyn
#ifndef _WIN32
return true;
#else
return false;
#endif
}
|
It's currently returning true on OSX (you are probably reading that as "ifdef" not "ifndef"). If you change that function to return false always, the plugin guis should turn themselves around properly.
|
|
|
Thread Tools |
|
Display Modes |
Linear Mode
|
Posting Rules
|
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts
HTML code is Off
|
|
|
All times are GMT -7. The time now is 01:40 AM.
|