Dec 052017
 
Adept BBS Version .97g. Very nice OS/2 BBS which requires HPFS to run. It include Telnet and FTP built in and you can recieve newsgroups into your bbs by SLIP.

Full Description of File


AdeptXBBS 32-bit OS/2 multi-user,
multi-threaded, multi-line, PM BBS
for OS/2 v2.x, and v3.

AdeptXBBS requires HPFS, and will
not install on a FAT based drive.

AdeptXBBS includes and full BBS, a
Fidonet Capable Mailer, and Fidonet
message base utilities.

This beta is BOTH a Upgrade and a
FULL INSTALL beta.

This is v0.97g Wide Beta


File ADEPT97G.ZIP from The Programmer’s Corner in
Category Recently Uploaded Files
Adept BBS Version .97g. Very nice OS/2 BBS which requires HPFS to run. It include Telnet and FTP built in and you can recieve newsgroups into your bbs by SLIP.
File Name File Size Zip Size Zip Type
ADEPTFUL.DAT 63380 48964 deflated
ADEPTINS.DAT 1288289 1279305 deflated
ADPXBBS.DOC 246496 51422 deflated
ADSCRIPT.DOC 47206 10873 deflated
FILE_ID.DIZ 378 238 deflated
FUTURE.TXT 3285 1410 deflated
INSTALL.CMD 10796 2212 deflated
MANUAL.INS 784 387 deflated
READ.ME 29628 10562 deflated
REGISTER.TXT 5430 1592 deflated
TPCREAD.ME 199 165 deflated

Download File ADEPT97G.ZIP Here

Contents of the READ.ME file


AdeptXBBS 32-bit OS/2 multi-user,
multi-threaded, multi-line, PM BBS
for OS/2 v2.x, and v3.

AdeptXBBS requires HPFS, and will
not install on a FAT based drive.

AdeptXBBS includes and full BBS, a
Fidonet Capable Mailer, and Fidonet
message base utilities.

This beta is BOTH a Upgrade and a
FULL INSTALL beta.

This is v0.97g Wide Beta
This version of the BBS software includes the following changes:

The Area.Control.Sample file should give people an enough of a example of
how to setup areafix echo request forwarding, and auto add capabilities.

The English.Text file is no longer called English.Text, but instead called
Language.Text in order to be language neutral.

The BBS software now includes Multi-Linqual support. The following is a
example 'Languages' file. The Language file is the configuration file for
the multi-lingual support. The languages file has three fields delimited
by a comma. The first parameter is the name of the language, the second is
the Identifier for the language, and the third is the root dir in which
that language resides.

You can have up to 36 languages. If the need arises we can expand this
number, but in order to assure that the mailer is still operational on all
levels we decided to limit it to the keys 1-0, and A - Z.

-- BEGIN: 'Languages' file ---
English ,ENG,D:\Adept\
French ,FRN,D:\Adept\French\
Spanish ,SPN,D:\Adept\Spanish\
Finish ,FIN,D:\Adept\Finish\
-- END: 'Languages' file ---

If the user chooses French the BBS will look in the following directories
for the language support files.

\Adept\French\System
\Adept\French\Menus
\Adept\French\Text

You should place all the files that you would normally put in the
\Adept\System, \Adept\Menus, and \Adept\Text sub-dir in the language
directories corresponding to the language they refere to.

If a user chooses a language and the BBS cannot find the Language.text
file in the \Adept\Languagename\System sub-dir it will default to the
language.text in the \adept\system dir.

Fixed a bug in menu option 200, and 201. If you had a message being
forced to a specific subject or node number the BBS would also force
the message to the sysop of the BBS. This command now works as
documented.

Added a option when replying to a message that would allow you to change
who it was to, and the subject, and will also prompt for carbon copies
if the person has the right security level.

Added the ability to set a users inactivity timeout period. The timeout
period is listed in minutes. Set it to 1440 for a unlimited timeout.

The BBS software now uses a new multi-system, multi-server capable chat
server. You can configure the base node/line number from the config
->BBS->general settings menu. Right now this only supports multiple
copies of adept running on the same network. It will be expanded to
support serial, internet, and other network links.

In order for multi-line chat to work, you will need to run the deamon
ChatServer.Exe in anouther Window.

The EMSI mailer session have been QUITE cleaned up! At the moment
AdeptXBBS connects with every mailer we have tested it with and vice
versa. I personally have not seen a failed connect in a few weeks.

Fixed a bug in the files system where the BBS would crash on a uploaded
file.

Worked more on stability and speed issues.

Fixed a bug in GIOMT. Sometimes when connecting to a program with a borken
zmodem implementation implementaton protocol engine would completely freak
out and create a GIOMT.LOG from hell sucking all CPU and writing a file
until it ran out of disk space or until you rebooted your computer.

Fixed the Bluewave Mail importing!

96a - Fixed two bugs in Gatekeeper. Removed the PM version. The two
bugs in Gatekeeper where it would not allow areas above 1024
and was not unarchive/arciving mail properly.

97 - Fixed a bug in the mailer, we couldn't sucessfully complete a mail
session with Xenia.

Fixed a bug in the multi-lingual support. The BBS software wasn't
running the MAIN.CMD from the languages menu sub-dir but instead
from the BBS's default sub-dir.

Fixed a possible timeout bug having to do with the new inactivity
timeout options.

Fixed a video display problem that was causing the system to act
like it wasn't working locally when DOS doors when being run.

Fixed several other Misc. Bugs in Gate Keeper.

Fixed a bug in the message editor, when the sysop would exit chat
mode it would abort the message.

Added a user list to the Find Users Option.

I was accidently shipping a old, thus bad, version of the fsys .dll
for the BBS. This was causing readon crashes in trhe BBS software
especially if the user had entered the file system at some point.

I am now shipping Othello, with full source to give both users and
authors the ability to work with type 802 doors. These can be VERY
powerful. It will allow you to write native OS/2 doors without
having to deal with things such as com port access and what type
of connect they are comming in on.

Rexx now includes the following new functions:

AdeptCheckBit, AdeptSetBit, AdeptUnsetBit.

Retcode = AdeptCheckBit(line, BIT NUMBER, Numeric Long)

Returns '1' if the BIT is set, '0' if it is not.

This can be used to test if a users bit is turned on for any of the
LONG bitmap'd flags.

AdeptSetBit(line, BIT NUMBER, Numeric Long)

Will set BIT Number 1 - 32 to ON.

AdeptUnsetBit(line, BIT NUMBER, Numeric Long)

Will set BIT Number 1 - 32 to OFF.

'Example:'

-- BEGIN --

/* - - - - - - - - - x - - - - - - - - - - - - - - - - - - - - - - */

UserFlag = AdeptGetVar(line, 42) /* 42 - User Flags */

IsOn = AdeptCheckBit(line, 10, UserFlag)

if IsOn = '1' then
adeptprint(line, "Flag 10 is on!\r\n")

AdeptUnsetBit(line, 10, UserFlag) /* turns bit 10 off */

/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */

AdeptSetBit(line, 5, UserFlag) /* Turns bit 5 on */

/* - - - - x - - - - - - - - - - - - - - - - - - - - - - - - - - - */

AdeptPutVar(line, 42, UserFlag) /* Make changes to the user record */

-- END --

The changes are not saved until you put the changes back into active
memory with the AdeptPutVar option.

AdeptDoDTR(line, '0' or '1')

0 - Drop DTR (Will leave it dropped)

1 - Raise DTR (Will Leave it raised)

Ret = AdeptPeekByte(line, length)

Will place the next char in the incomming stream that is waiting.
It will NOT remove it from the incomming data steam.

Length is the amount of time to wait for the next char to
enter the data stream. (This is a RAW comm function).

The software will return TIMEOUT or LOSTCARRIER.

NNTP Support! This is the first version of the BBS software with
native Internet Newsgroup Support via NNTP!

*WARNING* The BBS software WILL CRASH if you are pulling in a news
group that is NOT setup in the message area configuration!!!

To setup NNTP go to the Config->BBS->Internet Options and fill in
the name of your NNTP News Server. Next click on The NNTP Client
option checkbox. (It is best that you already have your SLIP, PPP
or TCP/IP network running with the news server available). The
BBS should be able to handle it if you are not connected to the
to the NET. When the software first connect to the server it will
pull down the available newsgroup list. This could take 5/10
minutes.

After you have the list it is recomended that you then decide what
newsgroups you would like to get. There will be a file in the
\adept\usenet dir called Available.List that will also contain
a list of available newsgroups. You can pick the newsgroups to
turn on, and off from the Config->BBS->Internet Options Menu.

Be Warned!!! Do to a bug that will be fixed in the next release
if you try to shut the BBS down while your news client is 'BUSY'
the BBS will have a tendency to 'LOCK' your entire computer for
30 seconds. DO NOT freak out! It will release the message que
within 30 seconds. If you shut the BBS down with the upper left
hand corner this will not happen, but your newgroup last reads and
other important info will nto be saved.

Fixed a couple of bugs in the AdeptGetVar and AdeptPutVar REXX
functions.

The Events Editor is BACK! It actually works this time too. 🙂

Fixed DUPE Checking in GateKeeper.

Fixed the Dupe Area 0 Warning.

Changed the packet headers a slight bit so that some programs
would stop complaining about our packets being non-standard.

The ability to post messages in a newsgroup is now available.

I added additional options to the BBS that should allow it to
hangup on the user almost everywhere now. Before it wasn't
always hanging up when you hung up, or locked out a user.

fList is a complete update. Looks like I was accidently
distributing a WAY OLD version of this utility. No wonder it
didn't work right.

fUtil is also a complete update, same mistake as above.

AdeptComFlush - now really makes sure the incoming/outgoing port
info is flushed.

More new REXX functions!

AdeptPrintL(line, "Text to print locally ONLY")

AdeptPrintL works exactly like AdeptPrint except it prints to the
LOCAL screen only.

AdeptWaitConnect(line, time)

AdeptWaitConnect will wait for a modem connect or error code. It
will return 0 if it time outs if it doesn't timeout it will
then return the return code from the modem i.e. 'CONNECT 28800'
'ERROR', 'OK', 'NO CARRIER'.

The time is in the format of milliseconds.

AdeptDial(line, "STRING TO DIAL")

AdeptDial will parse a string to the modem through the dialing
translation. I.E. "v~^ATDT555-1212|" will be translated to
LOWER DTR, PAUSE FOR A SECOND, RAISE DTR, SEND 'ATDT555-1212' then
a CR (Carriage Return to the modem'.

Added a new Meta command to be used with the who is on, {CQ will
display the users handle, it defaults to {CG the users real name.

97a - Fixed a possibility that the BBS could go into a loop if a rexx
script had changed the state of carrier checking and accidently
exited do to error or a trap.

Made some MAJOR stability enhancements in serveral sections and
areas of code. The mysterious BBS 'vanishing' symptoms should
not accure. As you know the BBS will shut itself down cleanly
if it encounters a problem it cannot handle. There should be
less of a chance that it will now encounter a problem it cannot
handle.

The BBS now retains the last known settings for the outbound box.

Fixed a bug in the Message Area configuration, it wouldn't handle
the message base path properly, now it does. It was still creating
some of the files in the \adept\system dir not the path to the
message area dir.

The message base will no longer allow illegal charecters. ALL
message base utilities had to be updated. These chars will no
longer be allowed '\, /, *. ?, ^, %' and will be converted
to '_'.

Added some code the the mailer the will let it settle down a
little better durring mail session, helping to prevent fewer
bad mail connects.

The BBS software no longer crashes when you are editing a
outbound icon and it rescans.

Added a new menu option '28' Message Searching!

Moved several hard coded pieces of text into the Language.Text file.

GateKpr accepts lines in an Areafix style message that
begin with '+'

GateKpr accepts lines in an areafix style message that
begin with '%' the two key words recognized are
'query' and 'list' all other words are ignored at this
time.

Attempted fix on routed netmail occasionally getting
put into a type 2.2 packet.

New GateKpr keyword: IMPORTALLNETMAIL
This keyword causes any netmail going thru a system
to be imported into the netmail area. If this keyword
is not present, the current default behavior occurs.

Fixed a bug with time calculation in the system events.

Changed Config->BBS Action Flags, and Config->BBS->Default User
Settings.

New REXX Function. AdeptChangeGroup(line, group_num)

The AdeptChangeGroup function will return '0' if the users
group was not upgraded, or not found. It will return '1'
if the users group was upgraded. This works just like
upgrading a users group in the local user editor. The user
will take on the changes specified for the specific group
that they have joined/are in.

97b Definately fixed the bugs in the Events Editor this time around.

Increased stability even more, a LOT more.

EMSI Mail Sessions are MUCH MUCH smoother now! Sysops who have
seen failed connects in the past should not see them as much
or at all.

If the BBS software encounters a error it cannot handle it should
edit with a errorlevel of '1'. With this you can automatically
restart adept in event of a error.

This is definately one of those historic moments. The SYSOP CHAT
PAGE TIME NOW WORKS!!!

The BBS_Configuration grunding seems to be gone, we also added some
additional protection to the mailer configuration saving even though
we have had no reports of problems with it. So far the word back
on this one is good.

Fixed a bug in the logon sequence, if you where running multi-linqual
support it wouldn't obey login timeouts.

97c - Fixed a bug in the time bank, it would let a user put in as much
time as they wanted. And would let the store ALL of their time.

Added support for Send Crash Mail ONLY, and Send Crash Mail No
Matter what the cost. We where not handling this properly, now
we do.

You can now adjust the amount of time a user used today. This can
be changed form the users record of from the right mouse popup while
they are on-line.

The file list now goes from 1 - 99, then repeats.

Edit Tagged Files List should now allow you to add files when
chosen from a menu.

FileAreas.asc/ans/avt/etc and MessageAreas.asc/ans/avt/etc will
now handle meta variables, and more prompts.

Fixed a bug in the file listing more prompt, if you hit any key
other then one of the ones on the list it went into continuious
list mode.

In the events editor, if you removed or cleared the COMMAND option
it wouldn't make the changes.

Added ReadArc.cmd to the distribution archive.

When searching messages the Next key acted as the abort key, and the
abort key acted as the next key.

Fixed a bug in XMSG it wouldn't handle message bases on multiple
drives/directories when doing a personal message index scan.

The local user editor would close the second a user logged off,
now it should not.

New type 803 DOOR. The type 803 door works exactly like a type
802 except that it sets, and allows your to set several 32-bit
semephores giving you and the BBS more interaction.

They are as follows.

\SEM32\ChildDone\Line#
\SEM32\Carrier\Line#
\SEM32\TimeTick\Line#

We will activate the \SEM32\Carrier\Line# when a user drops
carrier. This then gives you 10 minutes to complete your
task and return to the BBS software. If you issue
a \SEM32\ChildDone\Line# and exit we will handle everything
normally.

Next the TimeTick warns you of when the user has 3, 2, and 1 minute
remaining. We will issue it three times.

These should help make your programs more aware of Adept, and Adept
more aware of them.

97d - I wasn't expecting to release v0.97d so soon, but since several
major bugs are fixed I figured it was important to get this one
out fast. Some of the bugs we where going to fix in 97d will
be moved to 97e.

GateKpr now has a 1.2 meg message size limit. Also GatePm is
back! 🙂

Areafix SYS 3175's should be gone! Please let us know!

Users have reported some problems with user handles when they
log on, this is now fixed.

I think I found what was causing AdeptXBBS to not run on
some systems. The culprit seems to be OS/2 v2.x and it was
a limitation in the values we where using that OS/2 v3.0
could handle but v2.x could not.

Included new REXX DOCS and Examples, these docs where written
by Steven Tower and Jean-Ray Arseneau.


97e A lot of sysops who resgistered the REXX module have asked what
will it be getting me. We have been working on a enhanced REXX
module for some time now. As I have said that ONLY the functions
that duplicate what the .menu system allows will be available to
the sysops who have not purchased the REXX module. Since this
version of the BBS supports the enhanced REXX module I will outline
what this module will be giving you.

Several things will change in reference to the REXX system
in this next beta. We will no longer run .CMD file. We have
decided to call .CMD files .SRX (Standard REXX) files. This
will pave the way for .ERX (Extended REXX) files. .ERX files
are preprocessed REXX files for use with Adept. Sysops who own
the REXX module will be able to execute .ERX files. Sysops who
do not will ONLY be able to execute .SRX files.

Why ERX files?

ERX files are REXX files that have been preprocessed with the
AdeptREXX Processor (SrToErx). ERX files are typically 50% smaller
and always faster then standard REXX files (When run Cached).

We are acking that people who write rexx scripts for Adept that
are not pre-processsed please use the extention .srx. The
preprocessor will ONLY process files with the .srx extention.

SrxToErx.Exe FileNameWithoutExtention will yield a file with the
same name, but the .erx extention. If you are a commercial
developer is is recomended that you preprocess your rexx .srx
files before distributing them. Also it it recomended that you
DO NOT preprocess the following!

Atstart.Cmd - This MUST remain a .CMD file. So that others may
modify it and chain needed rexx scripts (preprocessed or not) from
it.

The BBS software will look for .erx versions of files that we
feel are ok to pre-process. In fact if you are running a .srx
file (i.e. .cmd) file in cached mode (as we default to) it is
treated as a .erx file after we preprocess it internally. So
it is honestly recomended that you do not preprocess anything
that you are NOT going to be distributing.

AdeptXBBS now includes REXX Caching. And two new REXX functions for
chaining REXX files within REXX files. The first AdeptChainRexx
runs the rexx script in cached mode. The second runs it in NON
cached mode. Once a REXX script is cached it's cached until you
shut down your copy of Adept.

There is also a new menu option 11. Menu type 11 runs a REXX
script in NON cached mode. Menu option 10 runs rexx scripts in
Cached mode.

AdeptChainRexx("RexxScripName", line)
AdeptChainRexxNc("RexxScripName", line)

Messages posted in a area that has messages marked as forced
private will be forced private no matter what the off-line mail
reader tells it to post it as. This has been causing confusion
with users who find that they can read some of the messages in
the Private Mail area because some mail reader was marking
messages in a private area as public.

Now when a user send a /s,## message to anouther user NOT in
multi-node chat a press any key is displayed before the message
scrolls off the screen. (Prompt #420)

The Call Collision checkmark on the Mail Settings dialog now works.

Changed the way the outbound mail scan works. It's much less CPU
intensive!

Fixed the New Message scan bug. To clean up your current new
message scan it is recomended that you run XMSG -I to rebuild
Personal Mail Index's.

There is a new ATO on Data checkbox in the Modem Settings option.
This is for people who are using the FAX cmd files to receive fax's
with Adept. Some modems want a ATO after the DATA string is
received, soem do not. This allows you to specify which you wish
to use for your specific modem.

Made some changed to the BBS Configuration internal functions to
see who/what how it's getting currupted.

UNREGSITERED SYSOPS:

This will be the last beta of AdeptXBBS that will handle more
then 2 nodes, and run .erx files, and with REXX caching. The folling
REXX functions will NO longer be available to sysops who do not and
have not purchased the REXX module.

AdeptComFlush
AdeptComWrite
AdeptPutVar
AdeptPutC
AdeptPutKey
AdeptDoDTR
AdeptPeekByte
AdeptSetTimer
AdeptTimerUp
AdeptDial
AdeptWaitConnect
Adept16BitCRC
Adept32BitCRC

The following REXX functions will be NEW in the next major beta

AdeptChatSendMsg - Multi-node chat
AdeptCharRead - Multi-node chat
AdeptChatDeleteAll - Multi-node chat
AdeptChatUnavailable - Multi-node chat

AdeptCheckCard - Validate credit card

-- Userbase minipulation functions --

AdeptGetUser - Get a user and pull their record into a temp var
AdeptNextUser - Get next user in the file and pull into a temp var
AdeptPrevUser - Get prev user in the file and pull into a temp var
AdeptGetUserVar - Get functions for temp user in memory
AdeptPutUserVar - Put functions for temp user in memory
AdeptSaveUser - Saved the temp memory vars to users record

-- More REXX to come --

SysEdit.Exe is a local OS/2 command prompt version of SysEdit. It
should be run from the Adept directory.

SysEditR.Exe is a remote Adept 802 door version of SysEdit.

The menu option woud look like:

"R, 802, Remote Editor,SysEditR.Exe,0"

Plus whatever security level you want for that program.

This is the first version.. User editor only! More to come very soon!

97f - Bug Fix, Pressing OK on New user Defaults caused the BBS to crash and
wouldn't save the changes.

Ok, on the CPU Priorities will used to also cause a crash.

97g - AdeptChainRexxNC is broken, do not use it with .erx files, it will
still work with .cmd, and .srx files.

AdeptChainRexx and AdeptChainRexxNC have syntax changes, and notes
that need to be addressed here and now.

I have been informed that ALL rexx functions in the software enless
you are looking for a value should be called with the CALL function
NOT with the () method as documented. i.e.

call AdeptChainRexx "RexxCmdFile.Cmd", line

NOT - AdeptChainRexx("RexxCmdFile.Cmd", line)

The second one will usually not work correctly. The first works.

Also you should try to use the call functioname ANY time you are
not get a value back i.e.

call AdeptPrint line, "This is a line to print"

key = AdeptWaitKey(line)

Also I documented the AdeptChainRexx, and AdeptChainRexxNC functions
wrong. The proper syntax is "call AdeptChainRexx ScriptName, line",
and "call AdeptChainRexxNC ScriptName, line" please make a note of
this. Using the function the way I originally documented it can
cause the script to exit wrong, and our cause the BBS software to
crash.

Fixed a serious bug in the outbound mail scanning/handling. When
a node was sent mail, their entry in the outbound box wasn't being
pulled for up to 5 minutes after the poll was completed. It was
causing the system ot be polled again and again until the 5 minute
timer was up. This is corrected. This wouldn't have created any
dupe problem, and multiple copies of the mail packet where not
sent, it was just causing accessive calls to be made.

BBS Action flags editing, and New User Default flag editing would
cause the BBS software to crash. This is also fixed.

Made some additional speed improvements in the software.

Some people have been confused by the fact that we store our
Fidonet mail packets in x.x.x.x.x.domain_name format. Our mailer
is 100% Fidonet Standard compatible and will convert the long
filename on the file to the fidonet xxxxxxxx.xxx format when
transmitting the mail to anouther fidonet mail. We store our
mail in this format to make 5-D addressing easyer, and I personally
don't think any of you want to sit there and do HEX calculations
to figure out that xxxxxxxx.xxx is actually a packet going to
p.1.369.210.0.Fidonet. If you try to do 5-D addressing with
mail in the standard fidonet xxxxxxxx.xxx format you lose the
Zone, Point ID and Domain Name. The xxxxxxxx.xxx is only a 3-D
capable format and must be put through a lot of work to make it
4-D and 5-D capable. For example you then need a Sub-directory
for each seperate domain. Then hope you don't have a BBS with
the same zone, node and net number, because then we're talking
serious problems. So as you can see, we eliminate a lot of
headaches and potential problems with using our format.

Expectations...

Several people have expected a Printed Manual, Box, and
Diskettes when registering thier copy of AdeptXBBS. Several
things prevent us from being able to do that above. Cost, Time,
and that fact that Adept is, and will continue to be in such
rapid development. First Cost. I have made it clear that I will
gladly start shipping AdeptXBBS with a professional Box, Disk,
and Manuals when either of the following occure. The price
doubles, or we become the #1 selling BBS program available.

Time, there are only a handful of us here. We've already have
so much to do that we cannot keep up with it. Stuffing envelopes
with diskettes, binding manualls, and then shipping them
would be the straw that would break us as a company. We're
trying to put out the best bbs program ever written. If you want
pretty box's and bound documentation there are several companies
who will give you fluff, but very little content.

Last but not least, rapid development. We have no plans to stop
the rapid development process that has been going on for the last
3 years. You can certianly expect to see new versions, upgrades,
bug fixes, and blinding speeds. This also includes revisions to
the documentation, enhancements of options, and more. I would
like to keep this pace up rather then be bogged down with
things that in no way effect the programs performance, features,
and how well it runs, and how satisfied you are with it.

For example we have spent the last several weeks boosting our
support team, and getting tech support up to something that is
acceptable. We're not quite there yet. Please if you are having
problems log into our support BBS (407) 477-6310, or telnet to
AdeptSoft.Com (199.227.57.1) and go into message area #10. Post
what you need help with or are having a problem with. Someone
will certianly help you!

Several people have asked about registrations, I will be spending
all this next week making sure that every single registered sysop
has thier registration keys. If by the end of the week you have
not received your key e-mail [email protected],
[email protected] and [email protected] This will insure
that you absolutely DO get your key.

We would also like to thank everyone who registered. Please remember
your feedback on this product is VERY important to us. We need to
know your about your good experiences, bad experiences, gripes,
sugestions, ideas. It is you who will mold the direction and
what features go into this program!

I guess thats enough of my soapbox mode. Thanks for all of your
support!

-- Steven



 December 5, 2017  Add comments

Leave a Reply