The :sealed attribute is a statement about a class's @ISA: you are saying
you are using its compile-time setting.
And because we invoke $class->can to do the lookup, module authors who
override UNIVERSAL::can() with a customized
one can support AUTOLOADed methods themselves.

Under :sealed, you control which lexical object references you want to use
compile-time method lookups (via can()),
by declaring them with a class (type), or avoiding doing that in the
lexical's declaration.  It only impacts your subroutine
definitions that declare :sealed and a typed lexicals, not any other
module's code elsewhere.

You absolutely *can* use sealed.pm outside mod_perl, but you need to be
wary about using typed lexicals on your method
argument stack, because end-users may pass properly derived objects to your
method, and will expect your module to use
the derived-class's overrides of any method calls in your codebase.
Basically the law of the land is that consumers of an API
expect all method calls to operate the way *virtual* method calls work in
Java/C++.  However, what you do internally with API's
outside of your published API's argument stack is fair game for :sealed.
My advice that it's only practical to seal XS method calls remains.

On Wed, Aug 31, 2022 at 9:52 AM Joe Schaefer <j...@sunstarsys.com> wrote:

> Submitted a Pull Request for the Generate.xs patch:
> https://github.com/rurban/b-generate/pull/2
> Added more comments to sealed.pm to explain the rationale behind the #
> replace $methop logic,
> since it differs from what Doug did back in 2000.
>
> On Tue, Aug 30, 2022 at 2:52 PM Joe Schaefer <j...@sunstarsys.com> wrote:
>
>> Take a walk down history lane with me here:
>> https://www.perl.com/pub/2000/06/dougpatch.html/
>>
>> Like ithreads, the idea was sparked from Gurusamy's genius, coded up by
>> Doug, and largely forgotten by p5p politics.
>> It's not that it couldn't be done, they arrived at the place where it
>> *shouldn't* be done, which was deflating for mod_perl fans.
>> Simon Couzens made a lot of inroads since, with modularized Perl
>> compilers and B::Generate, but it wasn't until
>> Perl7 that I was motivated to try any way forward, on a more limited,
>> controllable scale.
>>
>> What do you think?  How should this piece of the mod_perl puzzle fit in
>> to the CPAN universe?
>>
>> On Tue, Aug 30, 2022 at 2:12 PM Joe Schaefer <j...@sunstarsys.com> wrote:
>>
>>> Every method call that's implemented in XS is looked-up at compile-time
>>> in that script, even for class methods.
>>> That's the sweet spot for :sealed.  The only other things I do with it
>>> are a few hot methods in Dotiac::DTL::Core, but that's probably not worth
>>> the bother.
>>>
>>> On Tue, Aug 30, 2022 at 1:14 PM Joe Schaefer <j...@sunstarsys.com> wrote:
>>>
>>>> Just look through my commit history on this sample Registry script to
>>>> see what's involved in getting sealed activated on your scripts.
>>>>
>>>> https://github.com/SunStarSys/cms/blob/master/enquiry.pl
>>>>
>>>> On Tue, Aug 30, 2022 at 1:12 PM Joe Schaefer <j...@sunstarsys.com>
>>>> wrote:
>>>>
>>>>> It'd be pretty harmless to apply the RegistryCooker.pm patch once we
>>>>> find a home for sealed.pm (either in this project or as a stand-alone
>>>>> pragma on CPAN).
>>>>> Nothing will segfault without consciously using types on your lexical
>>>>> object reference declarations; otherwise it's a giant noop.
>>>>>
>>>>> On Tue, Aug 30, 2022 at 12:53 PM Joe Schaefer <j...@sunstarsys.com>
>>>>> wrote:
>>>>>
>>>>>> If you really beat the hell out of it thread-wise, sealed.pm v4.0.0
>>>>>> will still segfault, but there's not much more I can do with the code at
>>>>>> this point to prevent that.
>>>>>> B::Generate doesn't really support what I'm doing here, which is to
>>>>>> do surgery on an existing op-tree, instead of just playing around with a
>>>>>> user-generated one.
>>>>>> There's no good way to remove the target "method_named" op that we're
>>>>>> replacing with a gv_op.  If that can't be supported using B::OP APIs, 
>>>>>> then
>>>>>> it should
>>>>>> be handled from perl itself.  The problem is that the politics around
>>>>>> the feature were never resolved, because nobody wants to change the 
>>>>>> default
>>>>>> "virtual method"
>>>>>> behavior of Perl's OO-runtime-lookups.  Now with the new :sealed
>>>>>> SUBROUTINE ATTRIBUTE, it's only enabled for people (like us) who want it
>>>>>> conditionally applied,
>>>>>> just like we do for the :method attribute.
>>>>>>
>>>>>> On Tue, Aug 30, 2022 at 11:26 AM Joe Schaefer <j...@sunstarsys.com>
>>>>>> wrote:
>>>>>>
>>>>>>> Someday this patch might be interesting:
>>>>>>>
>>>>>>>  diff -u RegistryCooker.pm~ RegistryCooker.pm
>>>>>>> --- RegistryCooker.pm~  2022-08-30 11:10:19.790171019 -0400
>>>>>>> +++ RegistryCooker.pm   2022-08-30 11:12:34.319572045 -0400
>>>>>>> @@ -399,7 +399,8 @@
>>>>>>>      my $eval = join '',
>>>>>>>                      'package ',
>>>>>>>                      $self->{PACKAGE}, ";",
>>>>>>> -                    "sub handler {",
>>>>>>> +                    "use base 'sealed';",
>>>>>>> +                    "sub handler :Sealed {",
>>>>>>>                      "local \$0 = '$script_name';",
>>>>>>>                      $nph,
>>>>>>>                      $shebang,
>>>>>>>
>>>>>>> On Mon, Aug 29, 2022 at 2:21 PM Joe Schaefer <j...@sunstarsys.com>
>>>>>>> wrote:
>>>>>>>
>>>>>>>> Forgive me for the pent up frustration of having our wonderful
>>>>>>>> mod_perl project being completely ignored and abandoned by the Perl
>>>>>>>> Steering Committee's frivolous lingustic interests over the years 
>>>>>>>> since the
>>>>>>>> Parrot announcement.
>>>>>>>> SaywerX gave us a reason to be hopeful again.  Let's see what they
>>>>>>>> do with it.
>>>>>>>>
>>>>>>>> On Mon, Aug 29, 2022 at 1:34 PM Joe Schaefer <j...@sunstarsys.com>
>>>>>>>> wrote:
>>>>>>>>
>>>>>>>>> If the Perl steering committee had any brains left it would have
>>>>>>>>> capitalized on the perl 5.34 release and Co announced modperl2 ithread
>>>>>>>>> compatibility now available with Perl7’s new release.
>>>>>>>>>
>>>>>>>>> Instead they are going to kick the tires on the defaults for
>>>>>>>>> strictures and warnings until nobody cares any more.
>>>>>>>>>
>>>>>>>>> Get Outlook for iOS <https://aka.ms/o0ukef>
>>>>>>>>> ------------------------------
>>>>>>>>> *From:* Joe Schaefer <j...@sunstarsys.com>
>>>>>>>>> *Sent:* Monday, August 29, 2022 1:17:17 PM
>>>>>>>>> *To:* mod_perl list <modperl@perl.apache.org>
>>>>>>>>> *Subject:* Re: sealed.pm v4.0.0 is out
>>>>>>>>>
>>>>>>>>> The only reason I’ve been vacillating about glibc/malloc thread
>>>>>>>>> safety is because I couldn’t fathom the fact that people still 
>>>>>>>>> believed
>>>>>>>>> modperl isn’t compatible with mpm_event at this point in the Perl7
>>>>>>>>> storyline.  The old segfaults of the past that happened in glibc 
>>>>>>>>> malloc
>>>>>>>>> were because Perl was corrupting the heap in some other part of the
>>>>>>>>> codebase, and there’s no simple way to track it down without a tool 
>>>>>>>>> like
>>>>>>>>> Valgrind, but we weren’t successful with that effort either.
>>>>>>>>>
>>>>>>>>> Get Outlook for iOS <https://aka.ms/o0ukef>
>>>>>>>>> ------------------------------
>>>>>>>>> *From:* Joe Schaefer <j...@sunstarsys.com>
>>>>>>>>> *Sent:* Monday, August 29, 2022 1:08:00 PM
>>>>>>>>> *To:* mod_perl list <modperl@perl.apache.org>
>>>>>>>>> *Subject:* Re: sealed.pm v4.0.0 is out
>>>>>>>>>
>>>>>>>>> Religiously avoid setting up per request ithread environment
>>>>>>>>> variables. Just use PerlSetEnv in your Webserver config. Everything 
>>>>>>>>> we did
>>>>>>>>> in modperl to support CGI scripts is a train wreck.
>>>>>>>>>
>>>>>>>>> Get Outlook for iOS <https://aka.ms/o0ukef>
>>>>>>>>> ------------------------------
>>>>>>>>> *From:* Joe Schaefer <j...@sunstarsys.com>
>>>>>>>>> *Sent:* Monday, August 29, 2022 1:04:03 PM
>>>>>>>>> *To:* mod_perl list <modperl@perl.apache.org>
>>>>>>>>> *Subject:* Re: sealed.pm v4.0.0 is out
>>>>>>>>>
>>>>>>>>> Look into reducing the scope of your interpreters down from the
>>>>>>>>> request level to the handler level.  If all you are doing is running
>>>>>>>>> registry scripts, you will get even better scaling out of just a few
>>>>>>>>> ithreads per worker process.
>>>>>>>>>
>>>>>>>>> Get Outlook for iOS <https://aka.ms/o0ukef>
>>>>>>>>> ------------------------------
>>>>>>>>> *From:* Joe Schaefer <j...@sunstarsys.com>
>>>>>>>>> *Sent:* Monday, August 29, 2022 12:57:14 PM
>>>>>>>>> *To:* mod_perl list <modperl@perl.apache.org>
>>>>>>>>> *Subject:* Re: sealed.pm v4.0.0 is out
>>>>>>>>>
>>>>>>>>> The only impact to your work with modperl is that you will need to
>>>>>>>>> assess the ithread-safety of your dependent XS-based modules.  For 
>>>>>>>>> example,
>>>>>>>>> use a JSON::XS thread safe alternative- there are several.
>>>>>>>>>
>>>>>>>>> Get Outlook for iOS <https://aka.ms/o0ukef>
>>>>>>>>> ------------------------------
>>>>>>>>> *From:* Joe Schaefer <j...@sunstarsys.com>
>>>>>>>>> *Sent:* Monday, August 29, 2022 12:49:22 PM
>>>>>>>>> *To:* mod_perl list <modperl@perl.apache.org>
>>>>>>>>> *Subject:* Re: sealed.pm v4.0.0 is out
>>>>>>>>>
>>>>>>>>> There is a mountain of awful advice floating around about
>>>>>>>>> ithreads, including pretty much everything going on in Raku around 
>>>>>>>>> adopting
>>>>>>>>> the node.js model instead. It is safe to ignore all that now that 
>>>>>>>>> SawyerX
>>>>>>>>> spit polished all of the perl5 internals.
>>>>>>>>>
>>>>>>>>> Get Outlook for iOS <https://aka.ms/o0ukef>
>>>>>>>>> ------------------------------
>>>>>>>>> *From:* Joe Schaefer <j...@sunstarsys.com>
>>>>>>>>> *Sent:* Monday, August 29, 2022 12:40:43 PM
>>>>>>>>> *To:* mod_perl list <modperl@perl.apache.org>
>>>>>>>>> *Subject:* Re: sealed.pm v4.0.0 is out
>>>>>>>>>
>>>>>>>>> Many of the performance hacks we’ve encouraged over the years, eg
>>>>>>>>> around HTTPD’s lingering close effect, are obsoleted with ithreads.  
>>>>>>>>> Unless
>>>>>>>>> you send flush buckets down the output filter stack yourself, the 
>>>>>>>>> “response
>>>>>>>>> handler” phase exits long before the “connection handler” starts 
>>>>>>>>> making non
>>>>>>>>> blocking socket system calls.  So you need an order of magnitude fewer
>>>>>>>>> ithreads than you do prefork children in a multitier arch.
>>>>>>>>>
>>>>>>>>> Get Outlook for iOS <https://aka.ms/o0ukef>
>>>>>>>>> ------------------------------
>>>>>>>>> *From:* Joe Schaefer <j...@sunstarsys.com>
>>>>>>>>> *Sent:* Sunday, August 28, 2022 11:09:14 AM
>>>>>>>>> *To:* mod_perl list <modperl@perl.apache.org>
>>>>>>>>> *Subject:* Re: sealed.pm v4.0.0 is out
>>>>>>>>>
>>>>>>>>> Benchmark ran on my 2021 Dell Precision Laptop w/  8 cores + HT
>>>>>>>>> (so 16vCPU) and Ubuntu 22.04 inside WSL2.  Never topped 50% avg CPU, 
>>>>>>>>> and
>>>>>>>>> almost all of the CPU was in userland (not system calls).
>>>>>>>>>
>>>>>>>>> On Sat, Aug 27, 2022 at 11:42 AM <j...@sunstarsys.com> wrote:
>>>>>>>>>
>>>>>>>>> See https://sunstarsys.com/essays/perl7-sealed-lexicals.  For the
>>>>>>>>> full effect, you will need to build B::Generate with this patched 
>>>>>>>>> version
>>>>>>>>> instead: https://github.com/SunStarSys/cms/blob/master/Generate.xs
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> Sample mod_perl config + benchmarks:
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> <IfModule mpm_event_module>
>>>>>>>>>
>>>>>>>>>         StartServers                     2
>>>>>>>>>
>>>>>>>>>         MinSpareThreads                100
>>>>>>>>>
>>>>>>>>>         MaxSpareThreads                500
>>>>>>>>>
>>>>>>>>>         ThreadLimit                   1000
>>>>>>>>>
>>>>>>>>>         ThreadsPerChild                100
>>>>>>>>>
>>>>>>>>>         MaxRequestWorkers          1000000
>>>>>>>>>
>>>>>>>>>         MaxConnectionsPerChild           0
>>>>>>>>>
>>>>>>>>> </IfModule>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> <IfModule mod_perl.c>
>>>>>>>>>
>>>>>>>>>   PerlSwitches -T -I/home/joesuf4/src/cms/lib
>>>>>>>>>
>>>>>>>>>   PerlInterpStart 2
>>>>>>>>>
>>>>>>>>>   PerlInterpMax 4
>>>>>>>>>
>>>>>>>>>   PerlInterpMinSpare 1
>>>>>>>>>
>>>>>>>>>   PerlInterpMaxSpare 4
>>>>>>>>>
>>>>>>>>>   PerlInterpMaxRequests 1000000
>>>>>>>>>
>>>>>>>>>   PerlOptions +GlobalRequest
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>   <Directory /home/joesuf4/src/cms>
>>>>>>>>>
>>>>>>>>>     Require all granted
>>>>>>>>>
>>>>>>>>>     AddHandler perl-script .pl
>>>>>>>>>
>>>>>>>>>     PerlResponseHandler ModPerl::Registry
>>>>>>>>>
>>>>>>>>>     Options +ExecCGI
>>>>>>>>>
>>>>>>>>>   </Directory>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>   <Directory /home/joesuf4/src/trunk/content>
>>>>>>>>>
>>>>>>>>>     Require all granted
>>>>>>>>>
>>>>>>>>>   </Directory>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>   <VirtualHost *:80>
>>>>>>>>>
>>>>>>>>>     ServerName localhost
>>>>>>>>>
>>>>>>>>>     DocumentRoot /home/joesuf4/src/trunk/content
>>>>>>>>>
>>>>>>>>>     Alias /perl-script /home/joesuf4/src/cms
>>>>>>>>>
>>>>>>>>>   </VirtualHost>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> </IfModule>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> ab -n 10000 -c 1000 http://localhost/perl-script/enquiry.pl
>>>>>>>>>
>>>>>>>>> This is ApacheBench, Version 2.3 <$Revision: 1879490 $>
>>>>>>>>>
>>>>>>>>> Copyright 1996 Adam Twiss, Zeus Technology Ltd,
>>>>>>>>> http://www.zeustech.net/
>>>>>>>>>
>>>>>>>>> Licensed to The Apache Software Foundation, http://www.apache.org/
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> Benchmarking localhost (be patient)
>>>>>>>>>
>>>>>>>>> Completed 1000 requests
>>>>>>>>>
>>>>>>>>> Completed 2000 requests
>>>>>>>>>
>>>>>>>>> Completed 3000 requests
>>>>>>>>>
>>>>>>>>> Completed 4000 requests
>>>>>>>>>
>>>>>>>>> Completed 5000 requests
>>>>>>>>>
>>>>>>>>> Completed 6000 requests
>>>>>>>>>
>>>>>>>>> Completed 7000 requests
>>>>>>>>>
>>>>>>>>> Completed 8000 requests
>>>>>>>>>
>>>>>>>>> Completed 9000 requests
>>>>>>>>>
>>>>>>>>> Completed 10000 requests
>>>>>>>>>
>>>>>>>>> Finished 10000 requests
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> Server Software:        Apache/2.4.52
>>>>>>>>>
>>>>>>>>> Server Hostname:        localhost
>>>>>>>>>
>>>>>>>>> Server Port:            80
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> Document Path:          /perl-script/enquiry.pl
>>>>>>>>>
>>>>>>>>> Document Length:        1329 bytes
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> Concurrency Level:      1000
>>>>>>>>>
>>>>>>>>> Time taken for tests:   1.218 seconds
>>>>>>>>>
>>>>>>>>> Complete requests:      10000
>>>>>>>>>
>>>>>>>>> Failed requests:        0
>>>>>>>>>
>>>>>>>>> Total transferred:      15010000 bytes
>>>>>>>>>
>>>>>>>>> HTML transferred:       13290000 bytes
>>>>>>>>>
>>>>>>>>> Requests per second:    8207.94 [#/sec] (mean)
>>>>>>>>>
>>>>>>>>> Time per request:       121.833 [ms] (mean)
>>>>>>>>>
>>>>>>>>> Time per request:       0.122 [ms] (mean, across all concurrent
>>>>>>>>> requests)
>>>>>>>>>
>>>>>>>>> Transfer rate:          12031.37 [Kbytes/sec] received
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> Connection Times (ms)
>>>>>>>>>
>>>>>>>>>               min  mean[+/-sd] median   max
>>>>>>>>>
>>>>>>>>> Connect:        0    2   6.2      0      24
>>>>>>>>>
>>>>>>>>> Processing:     4   93  49.6     82     458
>>>>>>>>>
>>>>>>>>> Waiting:        1   80  44.5     71     455
>>>>>>>>>
>>>>>>>>> Total:         17   95  49.5     84     458
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> Percentage of the requests served within a certain time (ms)
>>>>>>>>>
>>>>>>>>>   50%     84
>>>>>>>>>
>>>>>>>>>   66%    100
>>>>>>>>>
>>>>>>>>>   75%    112
>>>>>>>>>
>>>>>>>>>   80%    120
>>>>>>>>>
>>>>>>>>>   90%    147
>>>>>>>>>
>>>>>>>>>   95%    173
>>>>>>>>>
>>>>>>>>>   98%    233
>>>>>>>>>
>>>>>>>>>   99%    318
>>>>>>>>>
>>>>>>>>> 100%    458 (longest request)
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> % pgrep -f apache2 | xargs -n1 ps -uwww
>>>>>>>>>
>>>>>>>>> USER         PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME
>>>>>>>>> COMMAND
>>>>>>>>>
>>>>>>>>> root      442827  0.0  0.1  18180 14244 ?        Ss   11:27   0:00
>>>>>>>>> /usr/sbin/apache2 -k start
>>>>>>>>>
>>>>>>>>> USER         PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME
>>>>>>>>> COMMAND
>>>>>>>>>
>>>>>>>>> www-data  446387  1.7  1.5 7549352 129692 ?      Sl   11:28   0:12
>>>>>>>>> /usr/sbin/apache2 -k start
>>>>>>>>>
>>>>>>>>> USER         PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME
>>>>>>>>> COMMAND
>>>>>>>>>
>>>>>>>>> www-data  451006 15.2  1.5 7483708 128468 ?      Sl   11:39   0:10
>>>>>>>>> /usr/sbin/apache2 -k start
>>>>>>>>>
>>>>>>>>> USER         PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME
>>>>>>>>> COMMAND
>>>>>>>>>
>>>>>>>>> www-data  451317 11.7  1.4 7483772 119836 ?      Sl   11:39   0:07
>>>>>>>>> /usr/sbin/apache2 -k start
>>>>>>>>>
>>>>>>>>> USER         PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME
>>>>>>>>> COMMAND
>>>>>>>>>
>>>>>>>>> www-data  451629  6.4  1.3 7483804 113012 ?      Sl   11:39   0:03
>>>>>>>>> /usr/sbin/apache2 -k start
>>>>>>>>>
>>>>>>>>> USER         PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME
>>>>>>>>> COMMAND
>>>>>>>>>
>>>>>>>>> www-data  451929  1.1  1.4 7483816 116668 ?      Sl   11:39   0:00
>>>>>>>>> /usr/sbin/apache2 -k start
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> --
>>>>>>>>> Joe Schaefer, Ph.D.
>>>>>>>>> We only build what you need built.
>>>>>>>>> <j...@sunstarsys.com>
>>>>>>>>> 954.253.3732 <//954.253.3732>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>
>>>>>>>> --
>>>>>>>> Joe Schaefer, Ph.D.
>>>>>>>> We only build what you need built.
>>>>>>>> <j...@sunstarsys.com>
>>>>>>>> 954.253.3732 <//954.253.3732>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>> --
>>>>>>> Joe Schaefer, Ph.D.
>>>>>>> We only build what you need built.
>>>>>>> <j...@sunstarsys.com>
>>>>>>> 954.253.3732 <//954.253.3732>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>
>>>>>> --
>>>>>> Joe Schaefer, Ph.D.
>>>>>> We only build what you need built.
>>>>>> <j...@sunstarsys.com>
>>>>>> 954.253.3732 <//954.253.3732>
>>>>>>
>>>>>>
>>>>>>
>>>>>
>>>>> --
>>>>> Joe Schaefer, Ph.D.
>>>>> We only build what you need built.
>>>>> <j...@sunstarsys.com>
>>>>> 954.253.3732 <//954.253.3732>
>>>>>
>>>>>
>>>>>
>>>>
>>>> --
>>>> Joe Schaefer, Ph.D.
>>>> We only build what you need built.
>>>> <j...@sunstarsys.com>
>>>> 954.253.3732 <//954.253.3732>
>>>>
>>>>
>>>>
>>>
>>> --
>>> Joe Schaefer, Ph.D.
>>> We only build what you need built.
>>> <j...@sunstarsys.com>
>>> 954.253.3732 <//954.253.3732>
>>>
>>>
>>>
>>
>> --
>> Joe Schaefer, Ph.D.
>> We only build what you need built.
>> <j...@sunstarsys.com>
>> 954.253.3732 <//954.253.3732>
>>
>>
>>
>
> --
> Joe Schaefer, Ph.D.
> We only build what you need built.
> <j...@sunstarsys.com>
> 954.253.3732 <//954.253.3732>
>
>
>

-- 
Joe Schaefer, Ph.D.
We only build what you need built.
<j...@sunstarsys.com>
954.253.3732 <//954.253.3732>

Reply via email to