<html><head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
  </head>
  <body>
    <p>Lots of context switches. Lots of idle. Minimal collection.</p>
    <p><img moz-do-not-send="false" src="cid:part1.50GrKgye.E0fToOCm@callistohouse.org" alt="" width="901" height="220"/></p>
    <img moz-do-not-send="false" src="cid:part2.agebP00w.bKo1tseR@callistohouse.org" alt="" width="1254" height="307"/><br/>
    <div class="moz-cite-prefix">On 6/24/23 22:00, rabbit via Cuis-dev
      wrote:<br/>
    </div>
    <blockquote type="cite" cite="mid:e9122009-7194-ad4d-a9ac-3b1bee357140@callistohouse.org">
      <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
      <p>Thanks so very much, Juan! It's now #green. I have attached the
        PromisesLocalCuisCompatability file and version <71> of
        PromisesLocal. I changed my call to #becomeForward: only when
        #isResolved not and changed my call from #cull: to #value:  FIle
        'em in and run the tests, as you wish. Viel spass!<br/>
      </p>
      <p><img moz-do-not-send="false" src="cid:part3.qzwJysRQ.SyKRrCAX@callistohouse.org" alt="" class="" width="893" height="491"/></p>
      <p><br/>
      </p>
      <br/>
      <div class="moz-cite-prefix">On 6/24/23 21:23, rabbit via Cuis-dev
        wrote:<br/>
      </div>
      <blockquote type="cite" cite="mid:oEiGYYaNuu1r67zNZQB0d-JniVNEuE1H12eKfrLr_hobXgsuT75Czi_5ypYF9zHxUEoWCJtrQLfa7FtgPqDIxmVm-Mn65Z1bUMpG_yr3Pgw=@callistohouse.org">
        <meta http-equiv="content-type" content="text/html; charset=UTF-8"/>
        <div><br/>
        </div>
        <div><br/>
        </div>
        <div class="protonmail_signature_block" id="protonmail_signature_block">
          <div>❤️‍🔥🐰</div>
        </div>
        <div class="signature_br" contenteditable="false"><br/>
        </div>
        <div class="signature_br" contenteditable="false"><br/>
        </div>
        <div><br/>
        </div>
        <div><br/>
        </div>
        On Sat, Jun 24, 2023 at 21:15, Juan Vuletich <<a class="" href="mailto:On Sat, Jun 24, 2023 at 21:15, Juan Vuletich
          <<a href=" moz-do-not-send="true">juan@cuis.st</a>>
        wrote:
        <blockquote type="cite" class="protonmail_quote">
          <title></title>
          On 6/24/2023 10:05 PM, rabbit via Cuis-dev wrote:
          <blockquote type="cite">
            <div dir="auto">Oh! That’s exactly the semantics I’m
              expecting! When the method resumes I’m absolutely
              expecting self to be the new guy. </div>
          </blockquote>
          <br/>
          And the new guy doesn't include the method you are resuming!
          Please check references to MethodInCallStackToBecomeInvalid .
          If the new guy includes the same exact method, then it makes
          sense to resume its execution. Maybe you can include that
          method.</blockquote>
        <div dir="auto"><br/>
        </div>
        I understand what you’re saying. I think. If the old guy and the
        new guy both use the same superclass defined CompiledMethod
        splayed on the stack, #becomeForward: should be happy? Thanks!
        Let me go check.<caret></caret><br/>
        <blockquote type="cite" class="protonmail_quote" dir="auto"> <br/>
          <blockquote type="cite">
            <div dir="auto">If a subsequent message call is not
              understood, a DNU would be raised. Can we get a parallel
              method to give me those semantics, please? Portability is
              #becomeForward: but not that breaks your existing
              contract. Could we test #isEventual in #becomeForward:,
              perhaps?</div>
          </blockquote>
          <br/>
          Not in Cuis base image. That programming pattern is completely
          wrong in my view. But I won't police your code, I'll just be
          very careful with the Cuis base image.</blockquote>
        No doubt! If I can help I will. Solid. Totally fault-tolerant.
        Always recoverable. Always on.
        <div dir="auto"><span style="color: var(--text-color);" dir="auto"><br/>
          </span></div>
        <div dir="auto"><span style="color: var(--text-color);" dir="auto">I’m thinking the method sending </span><span style="color: var(--text-color);">the #becomeForward: is
            absent in the new guy. Or different, perhaps. I’ll need to
            turn that over a few times. Uno</span><span style="color:
            var(--text-color);" dir="auto"> momento<caret></caret></span><span style="color: var(--text-color);">, per pia cheri!</span>
          <div dir="auto">
            <blockquote type="cite" class="protonmail_quote"> <br/>
              <blockquote type="cite">
                <div><br/>
                </div>
                <div id="protonmail_signature_block" class="protonmail_signature_block">
                  <div>❤️‍🔥🐰</div>
                </div>
                <div class="signature_br" contenteditable="false"><br/>
                </div>
                <div class="signature_br" contenteditable="false"><br/>
                </div>
                <div><br/>
                </div>
                <div><br/>
                </div>
                On Sat, Jun 24, 2023 at 20:38, Juan Vuletich <<a href="mailto:On%20Sat,%20Jun%2024,%202023%20at%2020:38,%20Juan%20Vuletich%20%3C%3Ca%20href=" class="" moz-do-not-send="true">juan@cuis.st</a>>
                wrote:
                <blockquote class="protonmail_quote" type="cite">
                  <title></title>
                  I'm not familiar with your code.<br/>
                  <br/>
                  But that error message you get is real. It is not a
                  problem in Cuis. It is a problem in your code. You are
                  doing #becomeForward: of an object that is in the
                  midst of running a method. If the become is done, that
                  method will later resume running, but self will be a
                  different object, maybe an object of another class,
                  where this method is not defined, and can not be run.<br/>
                  <br/>
                  I suggest understanding this problem. It is safer to
                  only do become on objects that are NOT running any
                  methods at that moment.<br/>
                  <br/>
                  Squeak doesn't give you this error simply because
                  Squeak doesn't check for this problem. A VM crash is
                  likely in this situation. I actually added this check
                  to Cuis after someone (it was a long time ago, I don't
                  remember who it was) was experiencing VM crashes
                  because a method was resumed on a becomed object, and
                  was writing instance variables that didn't exist in
                  the becomed object.<br/>
                  <br/>
                  HTH,<br/>
                  <br/>
                  On 6/24/2023 10:57 AM, rabbit via Cuis-dev wrote:
                  <blockquote type="cite">
                    <p>Hi Juan, I'm attaching 2 squeak source files, one
                      with 2 methods in compatibility and the other the
                      source.st out of my latest
                      PromisesLocal-rabbt.66,mcz. <br/>
                    </p>
                    <p>I got the Vat's eventual process working (issues
                      with terminate), <br/>
                    </p>
                    <p>but I'm blowing up on a call to #becomeForward:,
                      from ENearPromise>>#becomeContext:, when
                      resolving a promise. Here is an image of the
                      resulting debugger. Is there more information I
                      could provide or is someone willing to attempt to
                      reproduce? Many thanks! ❤️‍🔥🐰</p>
                    <p><img src="imap://rabbit%40callistohouse%2Eorg@127.0.0.1:1143/fetch%3EUID%3E/INBOX%3E2638?header=quotebody&part=1.1.2&filename=part1.03010406.06090709@cuis.st" alt="" class="loading-internal" moz-do-not-send="true"/></p>
                    <div class="moz-cite-prefix">On 6/23/23 20:50,
                      rabbit via Cuis-dev wrote:<br/>
                    </div>
                    <blockquote type="cite">
                      <div dir="auto">Ahh! Thanks for the reminder.
                        That’s how I started loading code a month ago or
                        whenever I was loading mczs. I’ll look into it
                        tomorrow.</div>
                      <div dir="auto"><br/>
                      </div>
                      <div dir="auto">Is it possible to get Monticello
                        pkg loading working again? That’d be very good.</div>
                      <div dir="auto"><br/>
                      </div>
                      <div dir="auto">What’s my go to solution for code
                        packaging in Cuis? I’d like to establish Crypto
                        in Cuis.</div>
                      <div><br/>
                      </div>
                      <div class="protonmail_signature_block" id="protonmail_signature_block">
                        <div>❤️‍🔥🐰</div>
                      </div>
                      <div class="signature_br" contenteditable="false"><br/>
                      </div>
                      <div class="signature_br" contenteditable="false"><br/>
                      </div>
                      <div><br/>
                      </div>
                      <div><br/>
                      </div>
                      On Fri, Jun 23, 2023 at 19:21, Juan Vuletich via
                      Cuis-dev <<a class="" href="mailto:On%20Fri,%20Jun%2023,%202023%20at%2019:21,%20Juan%0A%20%20%20%20%20%20%20%20Vuletich%20via%20Cuis-dev%20%3C%3Ca%20href=" moz-do-not-send="true">cuis-dev@lists.cuis.st</a>>
                      wrote:
                      <blockquote type="cite" class="protonmail_quote">
                        Hi rabbit,<br/>
                        <br/>
                        I suggest unzipping the Monticello files to
                        extract the code in plain text (yes, Monticello
                        files are just zip files). When you are there,
                        you can also fix the line ending convention of
                        the files. And of course, you'd neet to check
                        the code, because Cuis is not 100% compatible
                        with Squeak.<br/>
                        <br/>
                        We don't use Monticello in Cuis. At some point
                        in the past it was possible to open MC files in
                        Cuis, but nobody used that feature in ages and
                        it got bitrotten.<br/>
                        <br/>
                        Thanks,<br/>
                        <br/>
                        On 6/23/2023 4:00 PM, rabbit via Cuis-dev wrote:
                        <blockquote type="cite">
                          <p>I just realized I have been working in
                            squeak. I updated PromisesLocal-rabbt.66.mcz
                            and am attaching it. I am getting the error
                            below when I 'browse code' or 'install
                            Mionticello package'. I do not know. How can
                            I load Monticello packages? Any way to get
                            the Installer available in cuis? Install
                            Monticello config maps?<br/>
                          </p>
                          <p>I appreciate you,<br/>
                            rabbit</p>
                          <p><img alt="" class="loading-internal" moz-do-not-send="true" width="862" height="398"/></p>
                          <p><br/>
                          </p>
                          <div class="moz-cite-prefix">On 6/22/23 16:21,
                            rabbit via Cuis-dev wrote:<br/>
                          </div>
                          <blockquote type="cite">
                            <p>Hey! I got inspired by your proposal,
                              Luciano, and here's my solution in
                              eventual promises. Code can be loaded as:</p>
                            <blockquote>
                              <p>Installer ss project: 'Cryptography';
                                install: 'ProCrypto.release.3'.<br/>
                              </p>
                            </blockquote>
                            <p>I added a test method <br/>
                            </p>
                            <blockquote>
                              <p>RefsTest>>#testMultiReturns<br/>
                                <br/>
                                | selectCount unionFlag pair |<br/>
                                unionFlag := false.<br/>
                                selectCount := 0.<br/>
                                ((pair := self promiseResolverPair) key
                                xgcd: 9) <br/>
                                <<* [:each | selectCount :=
                                selectCount + 1. Transcript cr; show:
                                'each = ', each];<br/>
                                <<* [:g :s :t | unionFlag := true.
                                Transcript cr; show: 'g = ', g, '; s =
                                ', s, '; t = ', t. g + s + t].<br/>
                                pair value resolve: 21.<br/>
                                (Delay forMilliseconds: 333) wait.<br/>
                                self assert: (selectCount == 3).<br/>
                                self assert: (unionFlag).</p>
                            </blockquote>
                            <p>This calls new multireturn #xgcd: method</p>
                            <blockquote>
                              <p>xgcd: anInteger<br/>
                                " 21 xgcd: 9"<br/>
                                | g s t |<br/>
                                g := self gcd: anInteger.<br/>
                                s := self / g.<br/>
                                t := anInteger / g.<br/>
                                ^ { g. s. t}<br/>
                              </p>
                            </blockquote>
                            <p>And in the test method there are eventual
                              sends (#<<*) to the promise of the
                              #xgcd: send once the reciever promise is
                              resolved to 21. This implementation
                              detects cardinality of the continuation
                              block and sends #whenResolved:
                              appropriately, for future evaluation.</p>
                            <blockquote>
                              <p>Object>>#<<* continuation<br/>
                                <br/>
                                (continuation numArgs == 1)<br/>
                                ifTrue: [^ self whenResolved: [:result |
                                result do: [:each | continuation value:
                                each]]].<br/>
                                ^ self whenResolved: [:result |
                                continuation valueWithArguments:
                                result].</p>
                            </blockquote>
                            <p>One can see a 1 cardinality schedules the
                              continuation to evaluate with each result,
                              while a continuation with cardinality 2 or
                              more will be scheduled to receive all
                              results. #valueWithArguments:</p>
                            <p>Here are 2 return handlers, <br/>
                            </p>
                            <blockquote>
                              <p>promise := ((pair := self
                                promiseResolverPair) key xgcd: 9).</p>
                            </blockquote>
                            <p>the first for each argument <br/>
                            </p>
                            <blockquote>
                              <p>promise <<* [:each | selectCount
                                := selectCount + 1. Transcript cr; show:
                                'each = ', each];</p>
                            </blockquote>
                            <p>and the second for all three arguments.</p>
                            <blockquote>
                              <p>promise <<* [:g :s :t | unionFlag
                                := true. Transcript cr; show: 'g = ', g,
                                '; s = ', s, '; t = ', t. g + s + t].</p>
                            </blockquote>
                            <pre cols="72" class="moz-signature">--
❤️‍🔥🐰



</pre>
                            <div class="moz-cite-prefix">On 6/21/23
                              09:44, Luciano Notarfrancesco via Cuis-dev
                              wrote:<br/>
                            </div>
                            <blockquote type="cite">
                              <div dir="auto">Interesting, thanks for
                                sharing!</div>
                              <div dir="auto">Actually I think it’s the
                                same thing I did, my implementation
                                calls
BlockClosure>>#valueWithPossibleArgs: and takes only as many
                                arguments as needed by the block but the
                                array can be bigger than that (it should
                                be named #valueWithPossibleArguments:
                                tho, abbreviations are ugly).</div>
                              <div dir="auto"><br/>
                              </div>
                              <div><br/>
                                <div class="gmail_quote">
                                  <div class="gmail_attr" dir="ltr">On
                                    Wed, 21 Jun 2023 at 15:37 Christian
                                    Haider via Cuis-dev <<a class="moz-txt-link-freetext" href="mailto:cuis-dev@lists.cuis.st" moz-do-not-send="true">cuis-dev@lists.cuis.st</a>>
                                    wrote:<br/>
                                  </div>
                                  <blockquote style="margin: 0px 0px 0px
                                    0.8ex; border-left: 1px solid
                                    rgb(204, 204, 204); padding-left:
                                    1ex;" class="gmail_quote">
                                    <div style="" lang="DE">
                                      <div class="m_-976565113171439616WordSection1">
                                        <p class="MsoNormal"><span lang="EN-CA">I added
                                            something similar to my
                                            Values package (VW and
                                            ports).</span></p>
                                        <p class="MsoNormal"><span lang="EN-CA">The source is</span></p>
                                        <p style="margin-left: 35.4pt;" class="MsoNormal"><span style="font-family:
                                            "Courier New";" lang="EN-CA">SequenceableCollection>>asArgumentsIn:
                                            aBlock</span></p>
                                        <p style="margin-left: 35.4pt;" class="MsoNormal"><span style="font-family:
                                            "Courier New";" lang="EN-CA"> "Evaluate
                                            aBlock with the receiver's
                                            elements as parameters.</span></p>
                                        <p style="margin-left: 35.4pt;" class="MsoNormal"><span style="font-family:
                                            "Courier New";" lang="EN-CA"> aBlock takes
                                            its arguments from the
                                            receiver.</span></p>
                                        <p style="margin-left: 35.4pt;" class="MsoNormal"><span style="font-family:
                                            "Courier New";" lang="EN-CA"> 'ok'</span></p>
                                        <p style="margin-left: 35.4pt;" class="MsoNormal"><span style="font-family:
                                            "Courier New";" lang="EN-CA"> #(1 2 3)
                                            asArgumentsIn: [:a :b :c | a
                                            + b + c]</span></p>
                                        <p style="margin-left: 35.4pt;" class="MsoNormal"><span style="font-family:
                                            "Courier New";" lang="EN-CA"> #(1 2 3)
                                            asArgumentsIn: [:a :b | a +
                                            b]</span></p>
                                        <p style="margin-left: 35.4pt;" class="MsoNormal"><span style="font-family:
                                            "Courier New";" lang="EN-CA"> #(1 2 3)
                                            asArgumentsIn: [:a | a]</span></p>
                                        <p style="margin-left: 35.4pt;" class="MsoNormal"><span style="font-family:
                                            "Courier New";" lang="EN-CA"> #(1 2 3)
                                            asArgumentsIn: [42]</span></p>
                                        <p style="margin-left: 35.4pt;" class="MsoNormal"><span style="font-family:
                                            "Courier New";" lang="EN-CA"> 'not ok'</span></p>
                                        <p style="margin-left: 35.4pt;" class="MsoNormal"><span style="font-family:
                                            "Courier New";" lang="EN-CA"> #(1 2 3)
                                            asArgumentsIn: [:a :b :c :d
                                            | a + b + c + d]</span></p>
                                        <p style="margin-left: 35.4pt;" class="MsoNormal"><span style="font-family:
                                            "Courier New";" lang="EN-CA"> "</span></p>
                                        <p style="margin-left: 35.4pt;" class="MsoNormal"><span style="font-family:
                                            "Courier New";" lang="EN-CA"> </span></p>
                                        <p style="margin-left: 35.4pt;" class="MsoNormal"><span style="font-family:
                                            "Courier New";" lang="EN-CA"> ^aBlock
                                            cullWithArguments: self
                                            asArray</span><span lang="EN-CA"></span></p>
                                        <p class="MsoNormal"><span lang="EN-CA"> </span></p>
                                        <p class="MsoNormal"><span lang="EN-CA">The difference
                                            is that it takes a list of
                                            any size and picks out the
                                            first items and binds them
                                            to the variables.</span></p>
                                        <p class="MsoNormal"><span lang="EN-CA">I use it often
                                            for CSV processing like</span></p>
                                        <p class="MsoNormal"><span lang="EN-CA"> </span><span style="" lang="EN-CA">(line
                                            tokensBasedOn: $;)
                                            asArgumentsIn: [:first
                                            :second :y | … ].</span></p>
                                        <p class="MsoNormal"><span lang="EN-CA"> </span></p>
                                        <p class="MsoNormal"><span lang="EN-CA">I am just a bit
                                            unhappy with the name – it
                                            is too long. It reads ok
                                            though.</span></p>
                                        <p class="MsoNormal"><span lang="EN-CA">The pipe
                                            character is an interesting
                                            idea. I have to think about
                                            it.</span></p>
                                        <p class="MsoNormal"><span lang="EN-CA"> </span></p>
                                        <p class="MsoNormal"><span lang="EN-CA">I am use it for
                                            a while now and I am very
                                            happy with it.</span></p>
                                        <p class="MsoNormal"><span lang="EN-CA"> </span></p>
                                        <p class="MsoNormal"><span lang="EN-CA">Happy hacking,</span></p>
                                        <p class="MsoNormal"><span>Christian</span></p>
                                      </div>
                                    </div>
                                    <div style="" lang="DE">
                                      <div class="m_-976565113171439616WordSection1">
                                        <p class="MsoNormal"><span> </span></p>
                                        <p class="MsoNormal"><span> </span></p>
                                        <div style="border-width: 1pt
                                          medium medium; border-style:
                                          solid none none; padding: 3pt
                                          0cm 0cm; border-color:
                                          rgb(225, 225, 225)
                                          currentcolor currentcolor;">
                                          <p class="MsoNormal"><b>Von:</b>
                                            Cuis-dev <<a class="moz-txt-link-freetext" target="_blank" href="mailto:cuis-dev-bounces@lists.cuis.st" moz-do-not-send="true">cuis-dev-bounces@lists.cuis.st</a>>
                                            <b>Im Auftrag von </b>Luciano
                                            Notarfrancesco via Cuis-dev<br/>
                                            <b>Gesendet:</b> Mittwoch,
                                            21. Juni 2023 15:13<br/>
                                            <b>An:</b> Discussion of
                                            Cuis Smalltalk <<a class="moz-txt-link-freetext" target="_blank" href="mailto:cuis-dev@lists.cuis.st" moz-do-not-send="true">cuis-dev@lists.cuis.st</a>><br/>
                                            <b>Cc:</b> Luciano
                                            Notarfrancesco <<a class="moz-txt-link-freetext" target="_blank" href="mailto:luchiano@gmail.com" moz-do-not-send="true">luchiano@gmail.com</a>><br/>
                                            <b>Betreff:</b> [Cuis-dev]
                                            Methods that return multiple
                                            values</p>
                                        </div>
                                        <p class="MsoNormal"> </p>
                                        <p class="MsoNormal">Smalltalk
                                          doesn’t have a convention for
                                          methods returning multiple
                                          values, and I’m not aware of
                                          any implementation.</p>
                                        <div>
                                          <p class="MsoNormal">An
                                            example of such thing is the
                                            extended gcd: ‘a xgcd: b’
                                            returns g, s, t where g is
                                            the gcd, and as + bt = g.
                                            Writing methods that return
                                            multiple values is easy with
                                            the curly brackets syntax,
                                            Integer>>#xgcd: ends
                                            with something like</p>
                                        </div>
                                        <div>
                                          <p class="MsoNormal"> ^ {g. s.
                                            t}</p>
                                        </div>
                                        <div>
                                          <p class="MsoNormal">But using
                                            sending messages that return
                                            multiple values is kind of
                                            annoying, I end up doing
                                            something like:</p>
                                        </div>
                                        <div>
                                          <p class="MsoNormal"> xgcd :=
                                            a xgcd: b.</p>
                                        </div>
                                        <div>
                                          <p class="MsoNormal"> g :=
                                            xgcd at: 1.</p>
                                        </div>
                                        <div>
                                          <p class="MsoNormal"> s :=
                                            xgcd at: 2.</p>
                                        </div>
                                        <div>
                                          <p class="MsoNormal"> t :=
                                            xgcd at: 3</p>
                                        </div>
                                        <div>
                                          <p class="MsoNormal">Some
                                            years ago I thought about
                                            using blocks for this, but I
                                            never tried it. Today I just
                                            did a little experiment
                                            implementing anArray |
                                            aBlock as ‘^ aBlock
                                            valueWithPossibleArgs: self’
                                            and I can do:</p>
                                        </div>
                                        <div>
                                          <p class="MsoNormal"> (a xgcd:
                                            b) | [:g :s :t| … ]</p>
                                        </div>
                                        <div>
                                          <p class="MsoNormal"> </p>
                                        </div>
                                        <div>
                                          <p class="MsoNormal">This is
                                            seems quite nice already, I
                                            guess I’ll start using it
                                            and see how it feels. But
                                            the point of this mail is
                                            not to show a solution, but
                                            to ask if anyone have
                                            thought about this or if
                                            they know any nicer
                                            solutions. Any ideas?</p>
                                        </div>
                                      </div>
                                    </div>
                                    -- <br/>
                                    Cuis-dev mailing list<br/>
                                    <a class="moz-txt-link-freetext" target="_blank" href="mailto:Cuis-dev@lists.cuis.st" moz-do-not-send="true">Cuis-dev@lists.cuis.st</a><br/>
                                    <a class="moz-txt-link-freetext" target="_blank" rel="noreferrer" href="https://lists.cuis.st/mailman/listinfo/cuis-dev" moz-do-not-send="true">https://lists.cuis.st/mailman/listinfo/cuis-dev</a><br/>
                                  </blockquote>
                                </div>
                              </div>
                            </blockquote>
                          </blockquote>
                          <pre cols="72" class="moz-signature">--
❤️‍🔥🐰</pre>
                        </blockquote>
                        <br/>
                        <br/>
                        <pre cols="72" class="moz-signature">--
Juan Vuletich
cuis.st
github.com/jvuletich
researchgate.net/profile/Juan-Vuletich
independent.academia.edu/JuanVuletich
patents.justia.com/inventor/juan-manuel-vuletich
linkedin.com/in/juan-vuletich-75611b3
twitter.com/JuanVuletich</pre>
                      </blockquote>
                    </blockquote>
                    <pre cols="72" class="moz-signature">--
❤️‍🔥🐰</pre>
                  </blockquote>
                  <br/>
                  <br/>
                  <pre cols="72" class="moz-signature">--
Juan Vuletich
cuis.st
github.com/jvuletich
researchgate.net/profile/Juan-Vuletich
independent.academia.edu/JuanVuletich
patents.justia.com/inventor/juan-manuel-vuletich
linkedin.com/in/juan-vuletich-75611b3
twitter.com/JuanVuletich</pre>
                </blockquote>
              </blockquote>
              <br/>
              <br/>
              <pre cols="72" class="moz-signature">--
Juan Vuletich
cuis.st
github.com/jvuletich
researchgate.net/profile/Juan-Vuletich
independent.academia.edu/JuanVuletich
patents.justia.com/inventor/juan-manuel-vuletich
linkedin.com/in/juan-vuletich-75611b3
twitter.com/JuanVuletich</pre>
            </blockquote>
          </div>
        </div>
      </blockquote>
      <pre class="moz-signature" cols="72">--
❤️‍🔥🐰</pre>
    </blockquote>
    <pre class="moz-signature" cols="72">-- 
❤️‍🔥🐰</pre>
  
</body></html>