diff --git a/.gitmodules b/.gitmodules
index 15d21c666c6d5871a0d50c16106f1ed18d7a2e20..905eab360e8bc6a25095cef9118aa5497a81ed58 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -6,10 +6,10 @@
 	url = https://github.com/pd-l2ork/cwiid
 [submodule "Gem"]
 	path = Gem
-	url = https://git.purrdata.net/aggraef/gem.git
+	url = https://github.com/agraef/Gem.git
 [submodule "l2ork_addons/raspberry_pi/disis_gpio/wiringPi"]
 	path = l2ork_addons/raspberry_pi/disis_gpio/wiringPi
 	url = https://git.purrdata.net/jwilkes/wiringPi.git
 [submodule "externals/pd-lua"]
 	path = externals/pd-lua
-	url = https://git.purrdata.net/jwilkes/pd-lua.git
+	url = https://github.com/agraef/pd-lua.git
diff --git a/LICENSE.html b/LICENSE.html
index 80a051243a99d9f2096b619cc7b46a28facfc5b6..2076776d3ba3b89edea5b37f2a6a431e3402a773 100644
--- a/LICENSE.html
+++ b/LICENSE.html
@@ -1,205 +1,657 @@
-<h1 id="pd-l2ork-copyright-and-terms-of-use">Pd-l2ork Copyright and Terms of Use</h1>
-<p>Pd, as well as this compilation of Pd-related software known as Purr Data a.k.a. Pd-l2ork 2.x, is copyrighted software by various authors, but it is distributed as open-source software, which means that it can be used freely and without any costs under the appropriate license terms, as detailed below.</p>
-<p>THIS SOFTWARE IS PROVIDED BY THE AUTHORS &quot;AS IS&quot; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.</p>
+<h1 id="purr-data-copyright-and-terms-of-use">Purr-Data Copyright and
+Terms of Use</h1>
+<p>Pd, as well as this compilation of Pd-related software known as
+Purr-Data a.k.a. Pd-l2ork 2.x, is copyrighted software by various
+authors, but it is distributed as open-source software, which means that
+it can be used freely and without any costs under the appropriate
+license terms, as detailed below.</p>
+<p>THIS SOFTWARE IS PROVIDED BY THE AUTHORS “AS IS” AND ANY EXPRESS OR
+IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGE.</p>
 <h2 id="pd-license">Pd License</h2>
 <p>Copyright (c) by Miller S. Puckette and others</p>
-<p>Pd (the core system including the main program and the built-in objects, i.e., everything that lives in the pd subdirectory of the sources) is licensed under a 3-clause BSD license, please check the <a href="pd/LICENSE.txt">LICENSE.txt</a> file for details.</p>
+<p>Pd (the core system including the main program and the built-in
+objects, i.e., everything that lives in the pd subdirectory of the
+sources) is licensed under a 3-clause BSD license, please check the <a
+href="pd/LICENSE.txt">LICENSE.txt</a> file for details.</p>
 <h2 id="bundled-software">Bundled Software</h2>
-<p>Copyright (c) by various authors, please see the included license files for details</p>
-<p>Pd-l2ork includes a large number of bundled abstractions and externals by various authors. These can be found in the abstractions, externals and Gem subdirectories in the source, and in the extra subdirectory of the Pd-l2ork library directory of the installed application. Each of these items has its own open-source license under which it is distributed (mostly different variations of the BSD license or the GPL), so please check the corresponding license files in the source or the extra directory of the installed package for license information pertaining to each of the different software modules.</p>
-<h2 id="pd-l2ork-license">Pd-l2ork License</h2>
-<p>Copyright (c) by Hans-Christoph Steiner, Ico Bukvic, Jonathan Wilkes and others</p>
-<p>Purr Data (by Jonathan Wilkes) is based on Pd-l2ork (by Ico Bukvic) which in turn is based on Pd-extended (by Hans-Christoph Steiner), which is licensed under the GPL (GNU Public License) version 3, replicated below. Please note that this license applies to all parts of this package which are <em>not</em> accompanied by their own license conditions (such as the Pd core and the bundled software, as detailed above).</p>
+<p>Copyright (c) by various authors, please see the included license
+files for details</p>
+<p>Purr-Data includes a large number of bundled abstractions and
+externals by various authors. These can be found in the abstractions,
+externals and Gem subdirectories in the source, and in the extra
+subdirectory of the Purr-Data library directory of the installed
+application. Each of these items has its own open-source license under
+which it is distributed (mostly different variations of the BSD license
+or the GPL), so please check the corresponding license files in the
+source or the extra directory of the installed package for license
+information pertaining to each of the different software modules.</p>
+<h2 id="purr-data-license">Purr-Data License</h2>
+<p>Copyright (c) by Hans-Christoph Steiner, Ico Bukvic, Jonathan Wilkes
+and others</p>
+<p>Purr-Data (by Jonathan Wilkes) is based on Pd-l2ork (by Ico Bukvic)
+which in turn is based on Pd-extended (by Hans-Christoph Steiner), which
+is licensed under the GPL (GNU Public License) version 3, replicated
+below. Please note that this license applies to all parts of this
+package which are <em>not</em> accompanied by their own license
+conditions (such as the Pd core and the bundled software, as detailed
+above).</p>
 <h1 id="gnu-general-public-license">GNU GENERAL PUBLIC LICENSE</h1>
 <p>Version 3, 29 June 2007</p>
-<p>Copyright (C) 2007 <a href="http://fsf.org/">Free Software Foundation, Inc.</a></p>
-<p>Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed.</p>
+<p>Copyright (C) 2007 <a href="http://fsf.org/">Free Software
+Foundation, Inc.</a></p>
+<p>Everyone is permitted to copy and distribute verbatim copies of this
+license document, but changing it is not allowed.</p>
 <h2 id="preamble">Preamble</h2>
-<p>The GNU General Public License is a free, copyleft license for software and other kinds of works.</p>
-<p>The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too.</p>
-<p>When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things.</p>
-<p>To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others.</p>
-<p>For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights.</p>
-<p>Developers that use the GNU GPL protect your rights with two steps:</p>
-<ol style="list-style-type: decimal">
+<p>The GNU General Public License is a free, copyleft license for
+software and other kinds of works.</p>
+<p>The licenses for most software and other practical works are designed
+to take away your freedom to share and change the works. By contrast,
+the GNU General Public License is intended to guarantee your freedom to
+share and change all versions of a program–to make sure it remains free
+software for all its users. We, the Free Software Foundation, use the
+GNU General Public License for most of our software; it applies also to
+any other work released this way by its authors. You can apply it to
+your programs, too.</p>
+<p>When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+them if you wish), that you receive source code or can get it if you
+want it, that you can change the software or use pieces of it in new
+free programs, and that you know you can do these things.</p>
+<p>To protect your rights, we need to prevent others from denying you
+these rights or asking you to surrender the rights. Therefore, you have
+certain responsibilities if you distribute copies of the software, or if
+you modify it: responsibilities to respect the freedom of others.</p>
+<p>For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must pass on to the recipients the same
+freedoms that you received. You must make sure that they, too, receive
+or can get the source code. And you must show them these terms so they
+know their rights.</p>
+<p>Developers that use the GNU GPL protect your rights with two
+steps:</p>
+<ol type="1">
 <li>assert copyright on the software, and</li>
-<li>offer you this License giving you legal permission to copy, distribute and/or modify it.</li>
+<li>offer you this License giving you legal permission to copy,
+distribute and/or modify it.</li>
 </ol>
-<p>For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions.</p>
-<p>Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users.</p>
-<p>Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free.</p>
-<p>The precise terms and conditions for copying, distribution and modification follow.</p>
+<p>For the developers’ and authors’ protection, the GPL clearly explains
+that there is no warranty for this free software. For both users’ and
+authors’ sake, the GPL requires that modified versions be marked as
+changed, so that their problems will not be attributed erroneously to
+authors of previous versions.</p>
+<p>Some devices are designed to deny users access to install or run
+modified versions of the software inside them, although the manufacturer
+can do so. This is fundamentally incompatible with the aim of protecting
+users’ freedom to change the software. The systematic pattern of such
+abuse occurs in the area of products for individuals to use, which is
+precisely where it is most unacceptable. Therefore, we have designed
+this version of the GPL to prohibit the practice for those products. If
+such problems arise substantially in other domains, we stand ready to
+extend this provision to those domains in future versions of the GPL, as
+needed to protect the freedom of users.</p>
+<p>Finally, every program is threatened constantly by software patents.
+States should not allow patents to restrict development and use of
+software on general-purpose computers, but in those that do, we wish to
+avoid the special danger that patents applied to a free program could
+make it effectively proprietary. To prevent this, the GPL assures that
+patents cannot be used to render the program non-free.</p>
+<p>The precise terms and conditions for copying, distribution and
+modification follow.</p>
 <h2 id="terms-and-conditions">TERMS AND CONDITIONS</h2>
 <h3 id="definitions.">0. Definitions.</h3>
-<p><em>This License</em> refers to version 3 of the GNU General Public License.</p>
-<p><em>Copyright</em> also means copyright-like laws that apply to other kinds of works, such as semiconductor masks.</p>
-<p><em>The Program</em> refers to any copyrightable work licensed under this License. Each licensee is addressed as <em>you</em>. <em>Licensees</em> and <em>recipients</em> may be individuals or organizations.</p>
-<p>To <em>modify</em> a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a <em>modified version</em> of the earlier work or a work <em>based on</em> the earlier work.</p>
-<p>A <em>covered work</em> means either the unmodified Program or a work based on the Program.</p>
-<p>To <em>propagate</em> a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well.</p>
-<p>To <em>convey</em> a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying.</p>
-<p>An interactive user interface displays <em>Appropriate Legal Notices</em> to the extent that it includes a convenient and prominently visible feature that</p>
-<ol style="list-style-type: decimal">
+<p><em>This License</em> refers to version 3 of the GNU General Public
+License.</p>
+<p><em>Copyright</em> also means copyright-like laws that apply to other
+kinds of works, such as semiconductor masks.</p>
+<p><em>The Program</em> refers to any copyrightable work licensed under
+this License. Each licensee is addressed as <em>you</em>.
+<em>Licensees</em> and <em>recipients</em> may be individuals or
+organizations.</p>
+<p>To <em>modify</em> a work means to copy from or adapt all or part of
+the work in a fashion requiring copyright permission, other than the
+making of an exact copy. The resulting work is called a <em>modified
+version</em> of the earlier work or a work <em>based on</em> the earlier
+work.</p>
+<p>A <em>covered work</em> means either the unmodified Program or a work
+based on the Program.</p>
+<p>To <em>propagate</em> a work means to do anything with it that,
+without permission, would make you directly or secondarily liable for
+infringement under applicable copyright law, except executing it on a
+computer or modifying a private copy. Propagation includes copying,
+distribution (with or without modification), making available to the
+public, and in some countries other activities as well.</p>
+<p>To <em>convey</em> a work means any kind of propagation that enables
+other parties to make or receive copies. Mere interaction with a user
+through a computer network, with no transfer of a copy, is not
+conveying.</p>
+<p>An interactive user interface displays <em>Appropriate Legal
+Notices</em> to the extent that it includes a convenient and prominently
+visible feature that</p>
+<ol type="1">
 <li>displays an appropriate copyright notice, and</li>
-<li>tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License.</li>
+<li>tells the user that there is no warranty for the work (except to the
+extent that warranties are provided), that licensees may convey the work
+under this License, and how to view a copy of this License.</li>
 </ol>
-<p>If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion.</p>
+<p>If the interface presents a list of user commands or options, such as
+a menu, a prominent item in the list meets this criterion.</p>
 <h3 id="source-code.">1. Source Code.</h3>
-<p>The <em>source code</em> for a work means the preferred form of the work for making modifications to it. <em>Object code</em> means any non-source form of a work.</p>
-<p>A <em>Standard Interface</em> means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language.</p>
-<p>The <em>System Libraries</em> of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A <em>Major Component</em>, in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it.</p>
-<p>The <em>Corresponding Source</em> for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work.</p>
-<p>The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source.</p>
-<p>The Corresponding Source for a work in source code form is that same work.</p>
+<p>The <em>source code</em> for a work means the preferred form of the
+work for making modifications to it. <em>Object code</em> means any
+non-source form of a work.</p>
+<p>A <em>Standard Interface</em> means an interface that either is an
+official standard defined by a recognized standards body, or, in the
+case of interfaces specified for a particular programming language, one
+that is widely used among developers working in that language.</p>
+<p>The <em>System Libraries</em> of an executable work include anything,
+other than the work as a whole, that (a) is included in the normal form
+of packaging a Major Component, but which is not part of that Major
+Component, and (b) serves only to enable use of the work with that Major
+Component, or to implement a Standard Interface for which an
+implementation is available to the public in source code form. A
+<em>Major Component</em>, in this context, means a major essential
+component (kernel, window system, and so on) of the specific operating
+system (if any) on which the executable work runs, or a compiler used to
+produce the work, or an object code interpreter used to run it.</p>
+<p>The <em>Corresponding Source</em> for a work in object code form
+means all the source code needed to generate, install, and (for an
+executable work) run the object code and to modify the work, including
+scripts to control those activities. However, it does not include the
+work’s System Libraries, or general-purpose tools or generally available
+free programs which are used unmodified in performing those activities
+but which are not part of the work. For example, Corresponding Source
+includes interface definition files associated with source files for the
+work, and the source code for shared libraries and dynamically linked
+subprograms that the work is specifically designed to require, such as
+by intimate data communication or control flow between those subprograms
+and other parts of the work.</p>
+<p>The Corresponding Source need not include anything that users can
+regenerate automatically from other parts of the Corresponding
+Source.</p>
+<p>The Corresponding Source for a work in source code form is that same
+work.</p>
 <h3 id="basic-permissions.">2. Basic Permissions.</h3>
-<p>All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law.</p>
-<p>You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you.</p>
-<p>Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary.</p>
-<h3 id="protecting-users-legal-rights-from-anti-circumvention-law.">3. Protecting Users' Legal Rights From Anti-Circumvention Law.</h3>
-<p>No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures.</p>
-<p>When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures.</p>
+<p>All rights granted under this License are granted for the term of
+copyright on the Program, and are irrevocable provided the stated
+conditions are met. This License explicitly affirms your unlimited
+permission to run the unmodified Program. The output from running a
+covered work is covered by this License only if the output, given its
+content, constitutes a covered work. This License acknowledges your
+rights of fair use or other equivalent, as provided by copyright
+law.</p>
+<p>You may make, run and propagate covered works that you do not convey,
+without conditions so long as your license otherwise remains in force.
+You may convey covered works to others for the sole purpose of having
+them make modifications exclusively for you, or provide you with
+facilities for running those works, provided that you comply with the
+terms of this License in conveying all material for which you do not
+control copyright. Those thus making or running the covered works for
+you must do so exclusively on your behalf, under your direction and
+control, on terms that prohibit them from making any copies of your
+copyrighted material outside their relationship with you.</p>
+<p>Conveying under any other circumstances is permitted solely under the
+conditions stated below. Sublicensing is not allowed; section 10 makes
+it unnecessary.</p>
+<h3 id="protecting-users-legal-rights-from-anti-circumvention-law.">3.
+Protecting Users’ Legal Rights From Anti-Circumvention Law.</h3>
+<p>No covered work shall be deemed part of an effective technological
+measure under any applicable law fulfilling obligations under article 11
+of the WIPO copyright treaty adopted on 20 December 1996, or similar
+laws prohibiting or restricting circumvention of such measures.</p>
+<p>When you convey a covered work, you waive any legal power to forbid
+circumvention of technological measures to the extent such circumvention
+is effected by exercising rights under this License with respect to the
+covered work, and you disclaim any intention to limit operation or
+modification of the work as a means of enforcing, against the work’s
+users, your or third parties’ legal rights to forbid circumvention of
+technological measures.</p>
 <h3 id="conveying-verbatim-copies.">4. Conveying Verbatim Copies.</h3>
-<p>You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program.</p>
-<p>You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee.</p>
-<h3 id="conveying-modified-source-versions.">5. Conveying Modified Source Versions.</h3>
-<p>You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions:</p>
+<p>You may convey verbatim copies of the Program’s source code as you
+receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice; keep
+intact all notices stating that this License and any non-permissive
+terms added in accord with section 7 apply to the code; keep intact all
+notices of the absence of any warranty; and give all recipients a copy
+of this License along with the Program.</p>
+<p>You may charge any price or no price for each copy that you convey,
+and you may offer support or warranty protection for a fee.</p>
+<h3 id="conveying-modified-source-versions.">5. Conveying Modified
+Source Versions.</h3>
+<p>You may convey a work based on the Program, or the modifications to
+produce it from the Program, in the form of source code under the terms
+of section 4, provided that you also meet all of these conditions:</p>
 <ul>
-<li><ol style="list-style-type: lower-alpha">
-<li>The work must carry prominent notices stating that you modified it, and giving a relevant date.</li>
+<li><ol type="a">
+<li>The work must carry prominent notices stating that you modified it,
+and giving a relevant date.</li>
 </ol></li>
-<li><ol start="2" style="list-style-type: lower-alpha">
-<li>The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to <em>keep intact all notices</em>.</li>
+<li><ol start="2" type="a">
+<li>The work must carry prominent notices stating that it is released
+under this License and any conditions added under section 7. This
+requirement modifies the requirement in section 4 to <em>keep intact all
+notices</em>.</li>
 </ol></li>
-<li><ol start="3" style="list-style-type: lower-alpha">
-<li>You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it.</li>
+<li><ol start="3" type="a">
+<li>You must license the entire work, as a whole, under this License to
+anyone who comes into possession of a copy. This License will therefore
+apply, along with any applicable section 7 additional terms, to the
+whole of the work, and all its parts, regardless of how they are
+packaged. This License gives no permission to license the work in any
+other way, but it does not invalidate such permission if you have
+separately received it.</li>
 </ol></li>
-<li><ol start="4" style="list-style-type: lower-alpha">
-<li>If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so.</li>
+<li><ol start="4" type="a">
+<li>If the work has interactive user interfaces, each must display
+Appropriate Legal Notices; however, if the Program has interactive
+interfaces that do not display Appropriate Legal Notices, your work need
+not make them do so.</li>
 </ol></li>
 </ul>
-<p>A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an <em>aggregate</em> if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate.</p>
+<p>A compilation of a covered work with other separate and independent
+works, which are not by their nature extensions of the covered work, and
+which are not combined with it such as to form a larger program, in or
+on a volume of a storage or distribution medium, is called an
+<em>aggregate</em> if the compilation and its resulting copyright are
+not used to limit the access or legal rights of the compilation’s users
+beyond what the individual works permit. Inclusion of a covered work in
+an aggregate does not cause this License to apply to the other parts of
+the aggregate.</p>
 <h3 id="conveying-non-source-forms.">6. Conveying Non-Source Forms.</h3>
-<p>You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways:</p>
+<p>You may convey a covered work in object code form under the terms of
+sections 4 and 5, provided that you also convey the machine-readable
+Corresponding Source under the terms of this License, in one of these
+ways:</p>
 <ul>
-<li><ol style="list-style-type: lower-alpha">
-<li>Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange.</li>
+<li><ol type="a">
+<li>Convey the object code in, or embodied in, a physical product
+(including a physical distribution medium), accompanied by the
+Corresponding Source fixed on a durable physical medium customarily used
+for software interchange.</li>
 </ol></li>
-<li><ol start="2" style="list-style-type: lower-alpha">
-<li>Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either</li>
+<li><ol start="2" type="a">
+<li>Convey the object code in, or embodied in, a physical product
+(including a physical distribution medium), accompanied by a written
+offer, valid for at least three years and valid for as long as you offer
+spare parts or customer support for that product model, to give anyone
+who possesses the object code either</li>
 </ol>
-<ol style="list-style-type: decimal">
-<li>a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or</li>
-<li>access to copy the Corresponding Source from a network server at no charge.</li>
+<ol type="1">
+<li>a copy of the Corresponding Source for all the software in the
+product that is covered by this License, on a durable physical medium
+customarily used for software interchange, for a price no more than your
+reasonable cost of physically performing this conveying of source,
+or</li>
+<li>access to copy the Corresponding Source from a network server at no
+charge.</li>
 </ol></li>
-<li><ol start="3" style="list-style-type: lower-alpha">
-<li>Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b.</li>
+<li><ol start="3" type="a">
+<li>Convey individual copies of the object code with a copy of the
+written offer to provide the Corresponding Source. This alternative is
+allowed only occasionally and noncommercially, and only if you received
+the object code with such an offer, in accord with subsection 6b.</li>
 </ol></li>
-<li><ol start="4" style="list-style-type: lower-alpha">
-<li>Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements.</li>
+<li><ol start="4" type="a">
+<li>Convey the object code by offering access from a designated place
+(gratis or for a charge), and offer equivalent access to the
+Corresponding Source in the same way through the same place at no
+further charge. You need not require recipients to copy the
+Corresponding Source along with the object code. If the place to copy
+the object code is a network server, the Corresponding Source may be on
+a different server operated by you or a third party) that supports
+equivalent copying facilities, provided you maintain clear directions
+next to the object code saying where to find the Corresponding Source.
+Regardless of what server hosts the Corresponding Source, you remain
+obligated to ensure that it is available for as long as needed to
+satisfy these requirements.</li>
 </ol></li>
-<li><ol start="5" style="list-style-type: lower-alpha">
-<li>Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d.</li>
+<li><ol start="5" type="a">
+<li>Convey the object code using peer-to-peer transmission, provided you
+inform other peers where the object code and Corresponding Source of the
+work are being offered to the general public at no charge under
+subsection 6d.</li>
 </ol></li>
 </ul>
-<p>A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work.</p>
+<p>A separable portion of the object code, whose source code is excluded
+from the Corresponding Source as a System Library, need not be included
+in conveying the object code work.</p>
 <p>A <em>User Product</em> is either</p>
-<ol style="list-style-type: decimal">
-<li>a <em>consumer product</em>, which means any tangible personal property which is normally used for personal, family, or household purposes, or</li>
+<ol type="1">
+<li>a <em>consumer product</em>, which means any tangible personal
+property which is normally used for personal, family, or household
+purposes, or</li>
 <li>anything designed or sold for incorporation into a dwelling.</li>
 </ol>
-<p>In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, <em>normally used</em> refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product.</p>
-<p><em>Installation Information</em> for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made.</p>
-<p>If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM).</p>
-<p>The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network.</p>
-<p>Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying.</p>
+<p>In determining whether a product is a consumer product, doubtful
+cases shall be resolved in favor of coverage. For a particular product
+received by a particular user, <em>normally used</em> refers to a
+typical or common use of that class of product, regardless of the status
+of the particular user or of the way in which the particular user
+actually uses, or expects or is expected to use, the product. A product
+is a consumer product regardless of whether the product has substantial
+commercial, industrial or non-consumer uses, unless such uses represent
+the only significant mode of use of the product.</p>
+<p><em>Installation Information</em> for a User Product means any
+methods, procedures, authorization keys, or other information required
+to install and execute modified versions of a covered work in that User
+Product from a modified version of its Corresponding Source. The
+information must suffice to ensure that the continued functioning of the
+modified object code is in no case prevented or interfered with solely
+because modification has been made.</p>
+<p>If you convey an object code work under this section in, or with, or
+specifically for use in, a User Product, and the conveying occurs as
+part of a transaction in which the right of possession and use of the
+User Product is transferred to the recipient in perpetuity or for a
+fixed term (regardless of how the transaction is characterized), the
+Corresponding Source conveyed under this section must be accompanied by
+the Installation Information. But this requirement does not apply if
+neither you nor any third party retains the ability to install modified
+object code on the User Product (for example, the work has been
+installed in ROM).</p>
+<p>The requirement to provide Installation Information does not include
+a requirement to continue to provide support service, warranty, or
+updates for a work that has been modified or installed by the recipient,
+or for the User Product in which it has been modified or installed.
+Access to a network may be denied when the modification itself
+materially and adversely affects the operation of the network or
+violates the rules and protocols for communication across the
+network.</p>
+<p>Corresponding Source conveyed, and Installation Information provided,
+in accord with this section must be in a format that is publicly
+documented (and with an implementation available to the public in source
+code form), and must require no special password or key for unpacking,
+reading or copying.</p>
 <h3 id="additional-terms.">7. Additional Terms.</h3>
-<p><em>Additional permissions</em> are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions.</p>
-<p>When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission.</p>
-<p>Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms:</p>
+<p><em>Additional permissions</em> are terms that supplement the terms
+of this License by making exceptions from one or more of its conditions.
+Additional permissions that are applicable to the entire Program shall
+be treated as though they were included in this License, to the extent
+that they are valid under applicable law. If additional permissions
+apply only to part of the Program, that part may be used separately
+under those permissions, but the entire Program remains governed by this
+License without regard to the additional permissions.</p>
+<p>When you convey a copy of a covered work, you may at your option
+remove any additional permissions from that copy, or from any part of
+it. (Additional permissions may be written to require their own removal
+in certain cases when you modify the work.) You may place additional
+permissions on material, added by you to a covered work, for which you
+have or can give appropriate copyright permission.</p>
+<p>Notwithstanding any other provision of this License, for material you
+add to a covered work, you may (if authorized by the copyright holders
+of that material) supplement the terms of this License with terms:</p>
 <ul>
-<li><ol style="list-style-type: lower-alpha">
-<li>Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or</li>
+<li><ol type="a">
+<li>Disclaiming warranty or limiting liability differently from the
+terms of sections 15 and 16 of this License; or</li>
 </ol></li>
-<li><ol start="2" style="list-style-type: lower-alpha">
-<li>Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or</li>
+<li><ol start="2" type="a">
+<li>Requiring preservation of specified reasonable legal notices or
+author attributions in that material or in the Appropriate Legal Notices
+displayed by works containing it; or</li>
 </ol></li>
-<li><ol start="3" style="list-style-type: lower-alpha">
-<li>Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or</li>
+<li><ol start="3" type="a">
+<li>Prohibiting misrepresentation of the origin of that material, or
+requiring that modified versions of such material be marked in
+reasonable ways as different from the original version; or</li>
 </ol></li>
-<li><ol start="4" style="list-style-type: lower-alpha">
-<li>Limiting the use for publicity purposes of names of licensors or authors of the material; or</li>
+<li><ol start="4" type="a">
+<li>Limiting the use for publicity purposes of names of licensors or
+authors of the material; or</li>
 </ol></li>
-<li><ol start="5" style="list-style-type: lower-alpha">
-<li>Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or</li>
+<li><ol start="5" type="a">
+<li>Declining to grant rights under trademark law for use of some trade
+names, trademarks, or service marks; or</li>
 </ol></li>
-<li><ol start="6" style="list-style-type: lower-alpha">
-<li>Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors.</li>
+<li><ol start="6" type="a">
+<li>Requiring indemnification of licensors and authors of that material
+by anyone who conveys the material (or modified versions of it) with
+contractual assumptions of liability to the recipient, for any liability
+that these contractual assumptions directly impose on those licensors
+and authors.</li>
 </ol></li>
 </ul>
-<p>All other non-permissive additional terms are considered <em>further restrictions</em> within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying.</p>
-<p>If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms.</p>
-<p>Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way.</p>
+<p>All other non-permissive additional terms are considered <em>further
+restrictions</em> within the meaning of section 10. If the Program as
+you received it, or any part of it, contains a notice stating that it is
+governed by this License along with a term that is a further
+restriction, you may remove that term. If a license document contains a
+further restriction but permits relicensing or conveying under this
+License, you may add to a covered work material governed by the terms of
+that license document, provided that the further restriction does not
+survive such relicensing or conveying.</p>
+<p>If you add terms to a covered work in accord with this section, you
+must place, in the relevant source files, a statement of the additional
+terms that apply to those files, or a notice indicating where to find
+the applicable terms.</p>
+<p>Additional terms, permissive or non-permissive, may be stated in the
+form of a separately written license, or stated as exceptions; the above
+requirements apply either way.</p>
 <h3 id="termination.">8. Termination.</h3>
-<p>You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11).</p>
-<p>However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated</p>
+<p>You may not propagate or modify a covered work except as expressly
+provided under this License. Any attempt otherwise to propagate or
+modify it is void, and will automatically terminate your rights under
+this License (including any patent licenses granted under the third
+paragraph of section 11).</p>
+<p>However, if you cease all violation of this License, then your
+license from a particular copyright holder is reinstated</p>
 <ul>
-<li><ol style="list-style-type: lower-alpha">
-<li>provisionally, unless and until the copyright holder explicitly and finally terminates your license, and</li>
+<li><ol type="a">
+<li>provisionally, unless and until the copyright holder explicitly and
+finally terminates your license, and</li>
 </ol></li>
-<li><ol start="2" style="list-style-type: lower-alpha">
-<li>permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation.</li>
+<li><ol start="2" type="a">
+<li>permanently, if the copyright holder fails to notify you of the
+violation by some reasonable means prior to 60 days after the
+cessation.</li>
 </ol></li>
 </ul>
-<p>Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice.</p>
-<p>Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10.</p>
-<h3 id="acceptance-not-required-for-having-copies.">9. Acceptance Not Required for Having Copies.</h3>
-<p>You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so.</p>
-<h3 id="automatic-licensing-of-downstream-recipients.">10. Automatic Licensing of Downstream Recipients.</h3>
-<p>Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License.</p>
-<p>An <em>entity transaction</em> is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts.</p>
-<p>You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it.</p>
+<p>Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after your
+receipt of the notice.</p>
+<p>Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License. If your rights have been terminated and not permanently
+reinstated, you do not qualify to receive new licenses for the same
+material under section 10.</p>
+<h3 id="acceptance-not-required-for-having-copies.">9. Acceptance Not
+Required for Having Copies.</h3>
+<p>You are not required to accept this License in order to receive or
+run a copy of the Program. Ancillary propagation of a covered work
+occurring solely as a consequence of using peer-to-peer transmission to
+receive a copy likewise does not require acceptance. However, nothing
+other than this License grants you permission to propagate or modify any
+covered work. These actions infringe copyright if you do not accept this
+License. Therefore, by modifying or propagating a covered work, you
+indicate your acceptance of this License to do so.</p>
+<h3 id="automatic-licensing-of-downstream-recipients.">10. Automatic
+Licensing of Downstream Recipients.</h3>
+<p>Each time you convey a covered work, the recipient automatically
+receives a license from the original licensors, to run, modify and
+propagate that work, subject to this License. You are not responsible
+for enforcing compliance by third parties with this License.</p>
+<p>An <em>entity transaction</em> is a transaction transferring control
+of an organization, or substantially all assets of one, or subdividing
+an organization, or merging organizations. If propagation of a covered
+work results from an entity transaction, each party to that transaction
+who receives a copy of the work also receives whatever licenses to the
+work the party’s predecessor in interest had or could give under the
+previous paragraph, plus a right to possession of the Corresponding
+Source of the work from the predecessor in interest, if the predecessor
+has it or can get it with reasonable efforts.</p>
+<p>You may not impose any further restrictions on the exercise of the
+rights granted or affirmed under this License. For example, you may not
+impose a license fee, royalty, or other charge for exercise of rights
+granted under this License, and you may not initiate litigation
+(including a cross-claim or counterclaim in a lawsuit) alleging that any
+patent claim is infringed by making, using, selling, offering for sale,
+or importing the Program or any portion of it.</p>
 <h3 id="patents.">11. Patents.</h3>
-<p>A <em>contributor</em> is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's <em>contributor version</em>.</p>
-<p>A contributor's <em>essential patent claims</em> are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, <em>control</em> includes the right to grant patent sublicenses in a manner consistent with the requirements of this License.</p>
-<p>Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version.</p>
-<p>In the following three paragraphs, a <em>patent license</em> is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To <em>grant</em> such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party.</p>
-<p>If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either</p>
-<ol style="list-style-type: decimal">
+<p>A <em>contributor</em> is a copyright holder who authorizes use under
+this License of the Program or a work on which the Program is based. The
+work thus licensed is called the contributor’s <em>contributor
+version</em>.</p>
+<p>A contributor’s <em>essential patent claims</em> are all patent
+claims owned or controlled by the contributor, whether already acquired
+or hereafter acquired, that would be infringed by some manner, permitted
+by this License, of making, using, or selling its contributor version,
+but do not include claims that would be infringed only as a consequence
+of further modification of the contributor version. For purposes of this
+definition, <em>control</em> includes the right to grant patent
+sublicenses in a manner consistent with the requirements of this
+License.</p>
+<p>Each contributor grants you a non-exclusive, worldwide, royalty-free
+patent license under the contributor’s essential patent claims, to make,
+use, sell, offer for sale, import and otherwise run, modify and
+propagate the contents of its contributor version.</p>
+<p>In the following three paragraphs, a <em>patent license</em> is any
+express agreement or commitment, however denominated, not to enforce a
+patent (such as an express permission to practice a patent or covenant
+not to sue for patent infringement). To <em>grant</em> such a patent
+license to a party means to make such an agreement or commitment not to
+enforce a patent against the party.</p>
+<p>If you convey a covered work, knowingly relying on a patent license,
+and the Corresponding Source of the work is not available for anyone to
+copy, free of charge and under the terms of this License, through a
+publicly available network server or other readily accessible means,
+then you must either</p>
+<ol type="1">
 <li>cause the Corresponding Source to be so available, or</li>
-<li>arrange to deprive yourself of the benefit of the patent license for this particular work, or</li>
-<li>arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients.</li>
+<li>arrange to deprive yourself of the benefit of the patent license for
+this particular work, or</li>
+<li>arrange, in a manner consistent with the requirements of this
+License, to extend the patent license to downstream recipients.</li>
 </ol>
-<p><em>Knowingly relying</em> means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid.</p>
-<p>If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it.</p>
-<p>A patent license is <em>discriminatory</em> if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license</p>
+<p><em>Knowingly relying</em> means you have actual knowledge that, but
+for the patent license, your conveying the covered work in a country, or
+your recipient’s use of the covered work in a country, would infringe
+one or more identifiable patents in that country that you have reason to
+believe are valid.</p>
+<p>If, pursuant to or in connection with a single transaction or
+arrangement, you convey, or propagate by procuring conveyance of, a
+covered work, and grant a patent license to some of the parties
+receiving the covered work authorizing them to use, propagate, modify or
+convey a specific copy of the covered work, then the patent license you
+grant is automatically extended to all recipients of the covered work
+and works based on it.</p>
+<p>A patent license is <em>discriminatory</em> if it does not include
+within the scope of its coverage, prohibits the exercise of, or is
+conditioned on the non-exercise of one or more of the rights that are
+specifically granted under this License. You may not convey a covered
+work if you are a party to an arrangement with a third party that is in
+the business of distributing software, under which you make payment to
+the third party based on the extent of your activity of conveying the
+work, and under which the third party grants, to any of the parties who
+would receive the covered work from you, a discriminatory patent
+license</p>
 <ul>
-<li><ol style="list-style-type: lower-alpha">
-<li>in connection with copies of the covered work conveyed by you (or copies made from those copies), or</li>
+<li><ol type="a">
+<li>in connection with copies of the covered work conveyed by you (or
+copies made from those copies), or</li>
 </ol></li>
-<li><ol start="2" style="list-style-type: lower-alpha">
-<li>primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007.</li>
+<li><ol start="2" type="a">
+<li>primarily for and in connection with specific products or
+compilations that contain the covered work, unless you entered into that
+arrangement, or that patent license was granted, prior to 28 March
+2007.</li>
 </ol></li>
 </ul>
-<p>Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law.</p>
-<h3 id="no-surrender-of-others-freedom.">12. No Surrender of Others' Freedom.</h3>
-<p>If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program.</p>
-<h3 id="use-with-the-gnu-affero-general-public-license.">13. Use with the GNU Affero General Public License.</h3>
-<p>Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such.</p>
-<h3 id="revised-versions-of-this-license.">14. Revised Versions of this License.</h3>
-<p>The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns.</p>
-<p>Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License <em>or any later version</em> applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation.</p>
-<p>If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program.</p>
-<p>Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version.</p>
+<p>Nothing in this License shall be construed as excluding or limiting
+any implied license or other defenses to infringement that may otherwise
+be available to you under applicable patent law.</p>
+<h3 id="no-surrender-of-others-freedom.">12. No Surrender of Others’
+Freedom.</h3>
+<p>If conditions are imposed on you (whether by court order, agreement
+or otherwise) that contradict the conditions of this License, they do
+not excuse you from the conditions of this License. If you cannot convey
+a covered work so as to satisfy simultaneously your obligations under
+this License and any other pertinent obligations, then as a consequence
+you may not convey it at all. For example, if you agree to terms that
+obligate you to collect a royalty for further conveying from those to
+whom you convey the Program, the only way you could satisfy both those
+terms and this License would be to refrain entirely from conveying the
+Program.</p>
+<h3 id="use-with-the-gnu-affero-general-public-license.">13. Use with
+the GNU Affero General Public License.</h3>
+<p>Notwithstanding any other provision of this License, you have
+permission to link or combine any covered work with a work licensed
+under version 3 of the GNU Affero General Public License into a single
+combined work, and to convey the resulting work. The terms of this
+License will continue to apply to the part which is the covered work,
+but the special requirements of the GNU Affero General Public License,
+section 13, concerning interaction through a network will apply to the
+combination as such.</p>
+<h3 id="revised-versions-of-this-license.">14. Revised Versions of this
+License.</h3>
+<p>The Free Software Foundation may publish revised and/or new versions
+of the GNU General Public License from time to time. Such new versions
+will be similar in spirit to the present version, but may differ in
+detail to address new problems or concerns.</p>
+<p>Each version is given a distinguishing version number. If the Program
+specifies that a certain numbered version of the GNU General Public
+License <em>or any later version</em> applies to it, you have the option
+of following the terms and conditions either of that numbered version or
+of any later version published by the Free Software Foundation. If the
+Program does not specify a version number of the GNU General Public
+License, you may choose any version ever published by the Free Software
+Foundation.</p>
+<p>If the Program specifies that a proxy can decide which future
+versions of the GNU General Public License can be used, that proxy’s
+public statement of acceptance of a version permanently authorizes you
+to choose that version for the Program.</p>
+<p>Later license versions may give you additional or different
+permissions. However, no additional obligations are imposed on any
+author or copyright holder as a result of your choosing to follow a
+later version.</p>
 <h3 id="disclaimer-of-warranty.">15. Disclaimer of Warranty.</h3>
-<p>THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM <em>AS IS</em> WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.</p>
+<p>THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
+APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
+HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM <em>AS IS</em> WITHOUT
+WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF
+THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.</p>
 <h3 id="limitation-of-liability.">16. Limitation of Liability.</h3>
-<p>IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.</p>
-<h3 id="interpretation-of-sections-15-and-16.">17. Interpretation of Sections 15 and 16.</h3>
-<p>If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee.</p>
+<p>IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR
+CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES
+ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT
+NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES
+SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE
+WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN
+ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.</p>
+<h3 id="interpretation-of-sections-15-and-16.">17. Interpretation of
+Sections 15 and 16.</h3>
+<p>If the disclaimer of warranty and limitation of liability provided
+above cannot be given local legal effect according to their terms,
+reviewing courts shall apply local law that most closely approximates an
+absolute waiver of all civil liability in connection with the Program,
+unless a warranty or assumption of liability accompanies a copy of the
+Program in return for a fee.</p>
 <h2 id="end-of-terms-and-conditions">END OF TERMS AND CONDITIONS</h2>
-<h3 id="how-to-apply-these-terms-to-your-new-programs">How to Apply These Terms to Your New Programs</h3>
-<p>If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms.</p>
-<p>To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the <em>copyright</em> line and a pointer to where the full notice is found.</p>
+<h3 id="how-to-apply-these-terms-to-your-new-programs">How to Apply
+These Terms to Your New Programs</h3>
+<p>If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these
+terms.</p>
+<p>To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+state the exclusion of warranty; and each file should have at least the
+<em>copyright</em> line and a pointer to where the full notice is
+found.</p>
 <pre><code>&lt;one line to give the program&#39;s name and a brief idea of what it does.&gt;
 Copyright (C) &lt;year&gt;  &lt;name of author&gt;
 
@@ -215,12 +667,27 @@ GNU General Public License for more details.
 
 You should have received a copy of the GNU General Public License
 along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</code></pre>
-<p>Also add information on how to contact you by electronic and paper mail.</p>
-<p>If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode:</p>
+<p>Also add information on how to contact you by electronic and paper
+mail.</p>
+<p>If the program does terminal interaction, make it output a short
+notice like this when it starts in an interactive mode:</p>
 <pre><code>&lt;program&gt;  Copyright (C) &lt;year&gt;  &lt;name of author&gt;
 This program comes with ABSOLUTELY NO WARRANTY; for details type `show w&#39;.
 This is free software, and you are welcome to redistribute it
 under certain conditions; type `show c&#39; for details.</code></pre>
-<p>The hypothetical commands <code>show w</code> and <code>show c</code> should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an <em>about box</em>.</p>
-<p>You should also get your employer (if you work as a programmer) or school, if any, to sign a <em>copyright disclaimer</em> for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see <a href="http://www.gnu.org/licenses/" class="uri">http://www.gnu.org/licenses/</a>.</p>
-<p>The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read <a href="http://www.gnu.org/philosophy/why-not-lgpl.html" class="uri">http://www.gnu.org/philosophy/why-not-lgpl.html</a>.</p>
+<p>The hypothetical commands <code>show w</code> and <code>show c</code>
+should show the appropriate parts of the General Public License. Of
+course, your program’s commands might be different; for a GUI interface,
+you would use an <em>about box</em>.</p>
+<p>You should also get your employer (if you work as a programmer) or
+school, if any, to sign a <em>copyright disclaimer</em> for the program,
+if necessary. For more information on this, and how to apply and follow
+the GNU GPL, see <a
+href="http://www.gnu.org/licenses/">http://www.gnu.org/licenses/</a>.</p>
+<p>The GNU General Public License does not permit incorporating your
+program into proprietary programs. If your program is a subroutine
+library, you may consider it more useful to permit linking proprietary
+applications with the library. If this is what you want to do, use the
+GNU Lesser General Public License instead of this License. But first,
+please read <a
+href="http://www.gnu.org/philosophy/why-not-lgpl.html">http://www.gnu.org/philosophy/why-not-lgpl.html</a>.</p>
diff --git a/LICENSE.md b/LICENSE.md
index 2a48cad629bdc6830b5982acfd08f993655e941a..91cba4a168d0fdbe8f7e1da044b33f9191efd7c4 100644
--- a/LICENSE.md
+++ b/LICENSE.md
@@ -1,6 +1,6 @@
-# Pd-l2ork Copyright and Terms of Use
+# Purr-Data Copyright and Terms of Use
 
-Pd, as well as this compilation of Pd-related software known as Purr Data
+Pd, as well as this compilation of Pd-related software known as Purr-Data
 a.k.a. Pd-l2ork 2.x, is copyrighted software by various authors, but it is
 distributed as open-source software, which means that it can be used freely
 and without any costs under the appropriate license terms, as detailed below.
@@ -32,21 +32,21 @@ for details.
 Copyright (c) by various authors, please see the included license files for
 details
 
-Pd-l2ork includes a large number of bundled abstractions and externals by
+Purr-Data includes a large number of bundled abstractions and externals by
 various authors. These can be found in the abstractions, externals and Gem
-subdirectories in the source, and in the extra subdirectory of the Pd-l2ork
+subdirectories in the source, and in the extra subdirectory of the Purr-Data
 library directory of the installed application. Each of these items has its
 own open-source license under which it is distributed (mostly different
 variations of the BSD license or the GPL), so please check the corresponding
 license files in the source or the extra directory of the installed package
 for license information pertaining to each of the different software modules.
 
-## Pd-l2ork License
+## Purr-Data License
 
 Copyright (c) by Hans-Christoph Steiner, Ico Bukvic, Jonathan Wilkes and
 others
 
-Purr Data (by Jonathan Wilkes) is based on Pd-l2ork (by Ico Bukvic) which in
+Purr-Data (by Jonathan Wilkes) is based on Pd-l2ork (by Ico Bukvic) which in
 turn is based on Pd-extended (by Hans-Christoph Steiner), which is licensed
 under the GPL (GNU Public License) version 3, replicated below. Please note
 that this license applies to all parts of this package which are *not*
diff --git a/Makefile b/Makefile
index 02145e9cdd941dcdbec696e75fb634729b5cc2eb..72d0ecd7978a6e6d35bd5678d2d00fb7895ea44a 100644
--- a/Makefile
+++ b/Makefile
@@ -95,6 +95,16 @@ endif
 
 install_vars = DESTDIR=$(firstword $(wildcard $(CURDIR)/packages/*/build)) prefix=$(prefix)
 
+# You can set the nwjsver variable to indicate the nw.js version to build
+# against. This will also clear out any cached nw.js binaries beforehand.
+# Note that some nw.js versions for certain platforms have to be hard-coded,
+# so the nwjsver variable won't affect these, but it will still cause the
+# cache to be cleared and the binaries to be downloaded. See the tar_em_up.sh
+# script for details.
+ifneq ($(nwjsver),)
+env += nwjsver="$(nwjsver)"
+endif
+
 # You can set CFLAGS to whatever special compile options are needed. E.g., to
 # build the double precision version: CFLAGS = -DPD_FLOATSIZE=64
 CFLAGS =
diff --git a/debuild/Makefile b/debuild/Makefile
index 63e6172a4debcd3d0adc2dcf04c389a07fd81b94..fd84b0b459df2be7f7b506621437061b9f78a567 100644
--- a/debuild/Makefile
+++ b/debuild/Makefile
@@ -50,7 +50,7 @@ debdist = purr-data-$(debversion)
 # nw.js sdk
 # NOTE: arm packages need some special-casing, since they are released
 # separately, and the version numbers do not always match up.
-nwjsver = 0.28.3
+nwjsver = 0.55.0
 nwjspkg = nwjs-sdk-v$(nwjsver)-linux
 nwjsver_arm = 0.27.6
 nwjspkg_arm = nwjs-sdk-v$(nwjsver_arm)-linux
diff --git a/debuild/debian/rules b/debuild/debian/rules
index 72f8bc3afec1eb826b74e81a9ddeae1f5434a531..d8391378b953f33d884f535d335536301558b819 100755
--- a/debuild/debian/rules
+++ b/debuild/debian/rules
@@ -4,7 +4,7 @@
 # Uncomment this to turn on verbose mode.
 #export DH_VERBOSE=1
 
-nwjsver = 0.28.3
+nwjsver = 0.55.0
 nwjspkg = nwjs-sdk-v$(nwjsver)-linux
 nwjsdir = nwjs-sdk-v$(nwjsver)-linux
 
@@ -73,14 +73,6 @@ endif
 	sed -e 's/pd-l2ork/purr-data/g' < scripts/bash_completion/pd-l2ork > debian/purr-data/etc/bash_completion.d/purr-data
 # Edit the library paths in the default user.settings file.
 	cd debian/purr-data$(prefix)/lib/pd-l2ork && sed -e "s!/usr/lib/pd-l2ork!$(prefix)/lib/pd-l2ork!g" -i default.settings
-# Sanitize permissions.
-	cd debian/purr-data && chmod -R go-w * && chmod -R a+r * && chmod a-x .$(prefix)/lib/pd-l2ork/default.settings
-	find debian/purr-data$(prefix)/lib/pd-l2ork/bin/nw -executable -not -type d | xargs chmod a+x
-	find debian/purr-data -executable -name '*.pd_linux' | xargs chmod a-x
-	find debian/purr-data -executable -name '*.pd' | xargs chmod a-x
-	find debian/purr-data -executable -name '*.txt' | xargs chmod a-x
-	find debian/purr-data -executable -name '*.aif*' | xargs chmod a-x
-	find debian/purr-data -type d | xargs chmod a+x
 
 # NOTE: Older systems use dh_pysupport instead of dh_python2. See
 # http://deb.li/dhs2p.
diff --git a/externals/OSCx/send+dump/dumpOSC.c b/externals/OSCx/send+dump/dumpOSC.c
index 7603fca8e91be33691b746a944cf578d6888dac2..12a45fc760837f7c9d01f23f88fd920be72b103a 100644
--- a/externals/OSCx/send+dump/dumpOSC.c
+++ b/externals/OSCx/send+dump/dumpOSC.c
@@ -138,7 +138,7 @@ static int unixinitudp(int chan)
 	if((sockfd = socket(AF_UNIX, SOCK_DGRAM, 0)) < 0)
 			return sockfd;
 	
-	bzero((char *)&serv_addr, sizeof(serv_addr));
+	memset((char *)&serv_addr, 0, sizeof(serv_addr));
 	serv_addr.sun_family = AF_UNIX;
 	strcpy(serv_addr.sun_path, UNIXDG_PATH);
 	sprintf(serv_addr.sun_path+strlen(serv_addr.sun_path), "%d", chan);
@@ -160,7 +160,7 @@ static int initudp(int chan)
 	
 	if((sockfd = socket(AF_INET, SOCK_DGRAM, 0)) < 0)
 			return sockfd;
-	bzero((char *)&serv_addr, sizeof(serv_addr));
+	memset((char *)&serv_addr, 0, sizeof(serv_addr));
 	serv_addr.sin_family = AF_INET;
 	serv_addr.sin_addr.s_addr = htonl(INADDR_ANY);
 	serv_addr.sin_port = htons(chan);
diff --git a/externals/OSCx/send+dump/dumpUDP.c b/externals/OSCx/send+dump/dumpUDP.c
index 494a6e328a4672f2f409b7be79bd74d7131dd4db..dc22a4548c36c360628b9769e64bcce03b39b9a3 100644
--- a/externals/OSCx/send+dump/dumpUDP.c
+++ b/externals/OSCx/send+dump/dumpUDP.c
@@ -92,7 +92,7 @@ static int initudp(int port) {
 	
 	if((sockfd = socket(AF_INET, SOCK_DGRAM, 0)) < 0)
 			return sockfd;
-	bzero((char *)&serv_addr, sizeof(serv_addr));
+	memset((char *)&serv_addr, 0, sizeof(serv_addr));
 	serv_addr.sin_family = AF_INET;
 	serv_addr.sin_addr.s_addr = htonl(INADDR_ANY);
 	serv_addr.sin_port = htons(port);
diff --git a/externals/OSCx/send+dump/htmsocket.c b/externals/OSCx/send+dump/htmsocket.c
index 1cc17cd406db0ae3e2e0639e65643a7744fc4439..1bfb7dc89b43e557b0a098d6be108894335d4e38 100644
--- a/externals/OSCx/send+dump/htmsocket.c
+++ b/externals/OSCx/send+dump/htmsocket.c
@@ -133,7 +133,7 @@ void *OpenHTMSocket(char *host, int portnumber)
 		         * server that we want to send to.
 		*/
 		
-		bzero((char *) &o->userv_addr, sizeof(o->userv_addr));
+		memset((char *) &o->userv_addr, 0, sizeof(o->userv_addr));
 		       o->userv_addr.sun_family = AF_UNIX;
 		strcpy(o->userv_addr.sun_path, UNIXDG_PATH);
 			sprintf(o->userv_addr.sun_path+strlen(o->userv_addr.sun_path), "%d", portnumber);
@@ -152,7 +152,7 @@ void *OpenHTMSocket(char *host, int portnumber)
 			 * pathname, based on our process id.
 			 */
 		
-			bzero((char *) &ucl_addr, sizeof(ucl_addr));    /* zero out */
+			memset((char *) &ucl_addr, 0, sizeof(ucl_addr));    /* zero out */
 			ucl_addr.sun_family = AF_UNIX;
 			strcpy(ucl_addr.sun_path, UNIXDG_TMP);
 
@@ -183,7 +183,7 @@ void *OpenHTMSocket(char *host, int portnumber)
 		#ifdef WIN32
 			ZeroMemory((char *)&o->serv_addr, sizeof(o->serv_addr));
 		#else
-			bzero((char *)&o->serv_addr, sizeof(o->serv_addr));
+			memset((char *)&o->serv_addr, 0, sizeof(o->serv_addr));
 		#endif
 
 		o->serv_addr.sin_family = AF_INET;
@@ -243,7 +243,7 @@ void *OpenHTMSocket(char *host, int portnumber)
 			o->serv_addr.sin_port = htons(portnumber);
 			o->addr = &(o->serv_addr);
 			if((sockfd = socket(AF_INET, SOCK_DGRAM, 0)) >= 0) {
-					bzero((char *)&cl_addr, sizeof(cl_addr));
+					memset((char *)&cl_addr, 0, sizeof(cl_addr));
 				cl_addr.sin_family = AF_INET;
 				cl_addr.sin_addr.s_addr = htonl(INADDR_ANY);
 				cl_addr.sin_port = htons(0);
diff --git a/externals/OSCx/src/dumpOSC.c b/externals/OSCx/src/dumpOSC.c
index b3ddf5102a4a2c230ced13848bcee1f35d59f915..29edad52de6a78436903f58d6f7bf9bf6ea92550 100644
--- a/externals/OSCx/src/dumpOSC.c
+++ b/externals/OSCx/src/dumpOSC.c
@@ -313,7 +313,7 @@ static void *dumpOSC_new(t_symbol *compatflag,
       int t = 1;
 	  mreq.imr_multiaddr.s_addr = inet_addr(castgroup->s_name);
 	  mreq.imr_interface.s_addr = htonl(INADDR_ANY);
-      if (setsockopt(sockfd,SOL_SOCKET,SO_REUSEADDR,&t,sizeof(t)) < 0) {
+      if (setsockopt(sockfd,SOL_SOCKET,SO_REUSEADDR,(char*)&t,sizeof(t)) < 0) {
 		  sys_sockerror("setsockopt");
       }
 	  if (setsockopt(sockfd,IPPROTO_IP,IP_ADD_MEMBERSHIP,(char*)&mreq,sizeof(mreq)) < 0) {
@@ -400,7 +400,7 @@ void dumpOSC_setup(void)
 		if((sockfd = socket(AF_UNIX, SOCK_DGRAM, 0)) < 0)
 				return sockfd;
 		
-		bzero((char *)&serv_addr, sizeof(serv_addr));
+		memset((char *)&serv_addr, 0, sizeof(serv_addr));
 		serv_addr.sun_family = AF_UNIX;
 		strcpy(serv_addr.sun_path, UNIXDG_PATH);
 		sprintf(serv_addr.sun_path+strlen(serv_addr.sun_path), "%d", chan);
@@ -448,7 +448,7 @@ static int initudp(int chan)
 	if((sockfd = socket(AF_INET, SOCK_DGRAM, 0)) < 0)
 			return sockfd;
 
-	bzero((char *)&serv_addr, sizeof(serv_addr));
+	memset((char *)&serv_addr, 0, sizeof(serv_addr));
 	serv_addr.sin_family = AF_INET;
 	serv_addr.sin_addr.s_addr = htonl(INADDR_ANY);
 	serv_addr.sin_port = htons(chan);
diff --git a/externals/OSCx/src/htmsocket.c b/externals/OSCx/src/htmsocket.c
index 3abd7f6c4906f777b823df1ab39c2ca4ddcfa1d9..4b5c6ca2b302493d572b837419168003d1fbdb47 100644
--- a/externals/OSCx/src/htmsocket.c
+++ b/externals/OSCx/src/htmsocket.c
@@ -154,7 +154,7 @@ void *OpenHTMSocket(char *host, int portnumber, short *multicast_TTL)
 		         * server that we want to send to.
 		*/
 		
-		bzero((char *) &o->userv_addr, sizeof(o->userv_addr));
+		memset((char *) &o->userv_addr, 0, sizeof(o->userv_addr));
 		       o->userv_addr.sun_family = AF_UNIX;
 		strcpy(o->userv_addr.sun_path, UNIXDG_PATH);
 			sprintf(o->userv_addr.sun_path+strlen(o->userv_addr.sun_path), "%d", portnumber);
@@ -173,7 +173,7 @@ void *OpenHTMSocket(char *host, int portnumber, short *multicast_TTL)
 			 * pathname, based on our process id.
 			 */
 		
-			bzero((char *) &ucl_addr, sizeof(ucl_addr));    /* zero out */
+			memset((char *) &ucl_addr, 0, sizeof(ucl_addr));    /* zero out */
 			ucl_addr.sun_family = AF_UNIX;
 			strcpy(ucl_addr.sun_path, UNIXDG_TMP);
 
@@ -204,7 +204,7 @@ void *OpenHTMSocket(char *host, int portnumber, short *multicast_TTL)
 		#ifdef WIN32
 			ZeroMemory((char *)&o->serv_addr, sizeof(o->serv_addr));
 		#else
-			bzero((char *)&o->serv_addr, sizeof(o->serv_addr));
+			memset((char *)&o->serv_addr, 0, sizeof(o->serv_addr));
 		#endif
 
 		o->serv_addr.sin_family = AF_INET;
@@ -290,7 +290,7 @@ void *OpenHTMSocket(char *host, int portnumber, short *multicast_TTL)
 			o->serv_addr.sin_port = htons(portnumber);
 			o->addr = &(o->serv_addr);
 			if((sockfd = socket(AF_INET, SOCK_DGRAM, 0)) >= 0) {
-					bzero((char *)&cl_addr, sizeof(cl_addr));
+					memset((char *)&cl_addr, 0, sizeof(cl_addr));
 				cl_addr.sin_family = AF_INET;
 				cl_addr.sin_addr.s_addr = htonl(INADDR_ANY);
 				cl_addr.sin_port = htons(0);
diff --git a/externals/creb/modules/bmatrix~.c b/externals/creb/modules/bmatrix~.c
index 90676b448407c79f3fdd98d185fcd459602225a7..6f6398488a02862b8fb0c8d766f0b8a4f447e8fb 100644
--- a/externals/creb/modules/bmatrix~.c
+++ b/externals/creb/modules/bmatrix~.c
@@ -77,7 +77,7 @@ static t_int *matrix_perform(t_int *w)
       memcpy(x, in, sizeof(t_float)*n);
       in = x;
     }
-  bzero(out, sizeof(t_float)*n); /* init output */
+  memset(out, 0, sizeof(t_float)*n); /* init output */
 
   for (j=0; j<n; j++)
       for (i=0; i<n; i++) 
diff --git a/externals/creb/modules/dwt~.c b/externals/creb/modules/dwt~.c
index f212b0bee56af24c4936ca8857980f5f16954e0c..d79e2997dd9e99eaee6cae0ea75d1c680ac078d0 100644
--- a/externals/creb/modules/dwt~.c
+++ b/externals/creb/modules/dwt~.c
@@ -747,8 +747,8 @@ t_class *dwt_class, *idwt_class, *dwt16_class, *idwt16_class;
 
 static void dwt_reset(t_dwt *x)
 {
-  bzero(x->x_ctl.c_update, 16*sizeof(t_float));
-  bzero(x->x_ctl.c_predict, 16*sizeof(t_float));
+  memset(x->x_ctl.c_update, 0, 16*sizeof(t_float));
+  memset(x->x_ctl.c_predict, 0, 16*sizeof(t_float));
 
     x->x_ctl.c_update[7] = .25;
     x->x_ctl.c_update[8] = .25;
diff --git a/externals/grh/adaptive/readme b/externals/grh/adaptive/readme
old mode 100755
new mode 100644
diff --git a/externals/hid/HID Utilities Source/HID_Config_Utilities.c b/externals/hid/HID Utilities Source/HID_Config_Utilities.c
index a8e97b2afbc60c1548a756cc8364559bab356590..4d865a3eb2803e9ad729e44db3b92d53a943a139 100644
--- a/externals/hid/HID Utilities Source/HID_Config_Utilities.c	
+++ b/externals/hid/HID Utilities Source/HID_Config_Utilities.c	
@@ -82,7 +82,7 @@ unsigned char HIDConfigureAction (pRecDevice * ppDevice, pRecElement * ppElement
 		pDevice = HIDGetNextDevice (pDevice);
 	}
 	saveValueArray = (long *) malloc (sizeof (long) * numDevices * maxElements); // 2D array to save values
-	bzero(saveValueArray,sizeof (long) * numDevices * maxElements); // clear array
+	memset(saveValueArray,0,sizeof (long) * numDevices * maxElements); // clear array
 
 	// store current values
 	deviceNum = 0;
@@ -168,7 +168,7 @@ void HIDSaveElementConfig (FILE * fileRef, pRecDevice pDevice, pRecElement pElem
 	if (HIDIsValidElement(pDevice,pElement))
 	{
 		// clear rec
-		bzero(&saveRec,sizeof(recSaveHID));
+		memset(&saveRec,0,sizeof(recSaveHID));
 
 		saveRec.actionCookie = actionCookie;
 
diff --git a/externals/hid/HID Utilities Source/HID_Utilities.c b/externals/hid/HID Utilities Source/HID_Utilities.c
index b7b22c536c0452479d905dd2e950060aeb915beb..febfe7d37db0e5abfce1629492ca478e6bcda1c9 100644
--- a/externals/hid/HID Utilities Source/HID_Utilities.c	
+++ b/externals/hid/HID Utilities Source/HID_Utilities.c	
@@ -290,7 +290,7 @@ static void hid_AddElement (CFTypeRef refElement, pRecElement * ppElementCurrent
 		// it preserves the structure of the lements as collections have children and elements are siblings to each other
 
 		// clear record
-		bzero(pElement,sizeof(recElement));
+		memset(pElement,0,sizeof(recElement));
 
 		// get element info
         pElement->type = elementType;
@@ -587,7 +587,7 @@ static pRecDevice hid_BuildDevice (io_object_t hidDevice)
         kern_return_t result = IORegistryEntryCreateCFProperties (hidDevice, &hidProperties, kCFAllocatorDefault, kNilOptions);
 
 		// clear record
-		bzero(pDevice, sizeof(recDevice));
+		memset(pDevice, 0, sizeof(recDevice));
 
         if ((result == KERN_SUCCESS) && (NULL != hidProperties))
         {
diff --git a/externals/io/hidio/HID_Utilities_Source/HID_Config_Utilities.c b/externals/io/hidio/HID_Utilities_Source/HID_Config_Utilities.c
index a8e97b2afbc60c1548a756cc8364559bab356590..4d865a3eb2803e9ad729e44db3b92d53a943a139 100644
--- a/externals/io/hidio/HID_Utilities_Source/HID_Config_Utilities.c
+++ b/externals/io/hidio/HID_Utilities_Source/HID_Config_Utilities.c
@@ -82,7 +82,7 @@ unsigned char HIDConfigureAction (pRecDevice * ppDevice, pRecElement * ppElement
 		pDevice = HIDGetNextDevice (pDevice);
 	}
 	saveValueArray = (long *) malloc (sizeof (long) * numDevices * maxElements); // 2D array to save values
-	bzero(saveValueArray,sizeof (long) * numDevices * maxElements); // clear array
+	memset(saveValueArray,0,sizeof (long) * numDevices * maxElements); // clear array
 
 	// store current values
 	deviceNum = 0;
@@ -168,7 +168,7 @@ void HIDSaveElementConfig (FILE * fileRef, pRecDevice pDevice, pRecElement pElem
 	if (HIDIsValidElement(pDevice,pElement))
 	{
 		// clear rec
-		bzero(&saveRec,sizeof(recSaveHID));
+		memset(&saveRec,0,sizeof(recSaveHID));
 
 		saveRec.actionCookie = actionCookie;
 
diff --git a/externals/io/hidio/HID_Utilities_Source/HID_Utilities.c b/externals/io/hidio/HID_Utilities_Source/HID_Utilities.c
index b7b22c536c0452479d905dd2e950060aeb915beb..febfe7d37db0e5abfce1629492ca478e6bcda1c9 100644
--- a/externals/io/hidio/HID_Utilities_Source/HID_Utilities.c
+++ b/externals/io/hidio/HID_Utilities_Source/HID_Utilities.c
@@ -290,7 +290,7 @@ static void hid_AddElement (CFTypeRef refElement, pRecElement * ppElementCurrent
 		// it preserves the structure of the lements as collections have children and elements are siblings to each other
 
 		// clear record
-		bzero(pElement,sizeof(recElement));
+		memset(pElement,0,sizeof(recElement));
 
 		// get element info
         pElement->type = elementType;
@@ -587,7 +587,7 @@ static pRecDevice hid_BuildDevice (io_object_t hidDevice)
         kern_return_t result = IORegistryEntryCreateCFProperties (hidDevice, &hidProperties, kCFAllocatorDefault, kNilOptions);
 
 		// clear record
-		bzero(pDevice, sizeof(recDevice));
+		memset(pDevice, 0, sizeof(recDevice));
 
         if ((result == KERN_SUCCESS) && (NULL != hidProperties))
         {
diff --git a/externals/maxlib/chord.c b/externals/maxlib/chord.c
index ad3f6eb2d03b3a4bde5c86b572714945f876ba56..7cf12b366765a7516e304c9d284848c42e387bf5 100644
--- a/externals/maxlib/chord.c
+++ b/externals/maxlib/chord.c
@@ -25,9 +25,7 @@
 #include "m_pd.h"
 #include <stdio.h>
 #include <string.h>
-#ifndef _WIN32
 #include <stdlib.h>
-#endif
 
 
 #define MAX_POLY 32                 /* maximum number of notes played at a time */
diff --git a/externals/pd-lua b/externals/pd-lua
index eb8b2188b1e637ade8943684755630fec9e5f4f1..4c8c8b67445d236aeda8ec8502ade0729a411654 160000
--- a/externals/pd-lua
+++ b/externals/pd-lua
@@ -1 +1 @@
-Subproject commit eb8b2188b1e637ade8943684755630fec9e5f4f1
+Subproject commit 4c8c8b67445d236aeda8ec8502ade0729a411654
diff --git a/externals/pddp/helplink.c b/externals/pddp/helplink.c
index d56c0925b2727642d269abc5dfe78f4f73435764..45ba43c5d6b34b86883abd1f39bee09d6a0baedd 100644
--- a/externals/pddp/helplink.c
+++ b/externals/pddp/helplink.c
@@ -76,6 +76,8 @@ static void helplink_displace(t_gobj *z, t_glist *glist, int dx, int dy)
     {
         t_rtext *y = glist_findrtext(glist, t);
         rtext_displace(y, dx, dy);
+        // ag: need to redraw the cord as well
+        canvas_fixlinesfor(glist_getcanvas(glist), t);
     }
 }
 
@@ -84,11 +86,14 @@ static void helplink_displace_withtag(t_gobj *z, t_glist *glist, int dx, int dy)
     t_text *t = (t_text *)z;
     t->te_xpix += dx;
     t->te_ypix += dy;
-    /*if (glist_isvisible(glist))
+    if (glist_isvisible(glist))
     {
+        /*
         t_rtext *y = glist_findrtext(glist, t);
         rtext_displace(y, dx, dy);
-    }*/
+        */
+        canvas_fixlinesfor(glist_getcanvas(glist), t);
+    }
 }
 
 static void helplink_select(t_gobj *z, t_glist *glist, int state)
@@ -108,21 +113,6 @@ static void helplink_select(t_gobj *z, t_glist *glist, int state)
     }
 }
 
-static void helplink_activate(t_gobj *z, t_glist *glist, int state)
-{
-    t_helplink *x = (t_helplink *)z;
-    t_rtext *y = glist_findrtext(glist, (t_text *)x);
-    rtext_activate(y, state);
-    x->x_rtextactive = state;
-    if (!state) {
-        /* Big workaround... see comment in pddplink.c */
-        t_binbuf *b = binbuf_new();
-        t_binbuf *old = x->x_ob.te_binbuf;
-        x->x_ob.te_binbuf = b;
-        binbuf_free(old);
-    }
-}
-
 static void helplink_vis(t_gobj *z, t_glist *glist, int vis)
 {
     t_helplink *x = (t_helplink *)z;
@@ -159,6 +149,26 @@ static void helplink_vis(t_gobj *z, t_glist *glist, int vis)
     }
 }
 
+static void helplink_activate(t_gobj *z, t_glist *glist, int state)
+{
+    t_helplink *x = (t_helplink *)z;
+    t_rtext *y = glist_findrtext(glist, (t_text *)x);
+    rtext_activate(y, state);
+    x->x_rtextactive = state;
+    if (!state) {
+        /* ico@vt.edu 20200906: this is ugly but necessary because otherwise 
+           the object only activates correctly (reverts to its active link)
+           every other time when being deselected
+        */
+        helplink_vis(z, glist, 0);
+        helplink_vis(z, glist, 1);
+        if (glist_isvisible(glist)) {
+                t_text *t = (t_text *)z;
+                canvas_fixlinesfor(glist_getcanvas(glist), t);
+        }
+    }
+}
+
 static void helplink_doclick(t_helplink *x)
 {
     char* objectname = x->x_ulink->s_name;
diff --git a/externals/pddp/pddplink.c b/externals/pddp/pddplink.c
index 983ab0c6e3676dc0d5a4cb8c8f24883fa8c88b1e..ea90028aca46c9d732323551571af8f91448b5ee 100644
--- a/externals/pddp/pddplink.c
+++ b/externals/pddp/pddplink.c
@@ -162,29 +162,6 @@ static void pddplink_activate(t_gobj *z, t_glist *glist, int state)
     rtext_activate(y, state);
     x->x_rtextactive = state;
     if (!state) {
-        /* Big workaround for pddplink without the -box option...
-
-           After this call, Pd calls text_setto to see if it needs to
-           instantiate the object. For nearly all t_text objects, the
-           object doesn't get rebuilt if the text inside the box remains
-           the same. Instead, it just calls rtext_senditup which (eventually)
-           sends a message to the GUI to simply supply new text for the
-           current object. (It shouldn't do this if the text hasn't actually
-           changed, but that's another story...).
-
-           Anyway, since pddplink has this weird widget behavior, the text
-           displayed is different than the text we typed in the box-- hence
-           the x->x_vistext member here. So if we happened to edit the box
-           without changing the text, rtext_senditup would update the link 
-           to be "pddplink foo" instead of just "foo".
-
-           To prevent this, we just zero out the object's te_binbuf to ensure
-           that text_setto re-instantiates. That ensures the correct text is
-           printed for the link */
-        t_binbuf *b = binbuf_new();
-        t_binbuf *old = x->x_ob.te_binbuf;
-        x->x_ob.te_binbuf = b;
-        binbuf_free(old);
         /* ico@vt.edu 20200906: this is ugly but necessary because otherwise 
            the object only activates correctly (reverts to its active link)
            every other time when being deselected
@@ -425,8 +402,6 @@ static void *pddplink_new(t_symbol *s, int ac, t_atom *av)
 
 void pddplink_setup(void)
 {
-    t_symbol *dirsym;
-
     pddplink_class = class_new(gensym("pddplink"),
 			       (t_newmethod)pddplink_new,
 			       (t_method)pddplink_free,
@@ -444,8 +419,4 @@ void pddplink_setup(void)
     class_addmethod(pddplinkbox_class, (t_method)pddplink_click,
 		    gensym("click"),
 		    A_FLOAT, A_FLOAT, A_FLOAT, A_FLOAT, A_FLOAT, 0);
-
-    dirsym = pddplink_class->c_externdir;  /* FIXME */
-    /* The pddplink.tcl file is no longer needed */
-    //sys_vgui("source {%s/pddplink.tcl}\n", dirsym->s_name);
 }
diff --git a/externals/pdp/system/kernel/pdp_packet.c b/externals/pdp/system/kernel/pdp_packet.c
index aa44ceb0935d456ddd4328d266e14a27172bf3d3..e37716426a85e6424a5e1278849a14278228d9eb 100644
--- a/externals/pdp/system/kernel/pdp_packet.c
+++ b/externals/pdp/system/kernel/pdp_packet.c
@@ -122,7 +122,7 @@ pdp_packet_setup(void)
 
     pdp_pool_size = PDP_INITIAL_POOL_SIZE;
     pdp_pool = (t_pdp **)pdp_alloc(PDP_INITIAL_POOL_SIZE * sizeof(t_pdp *));
-    bzero(pdp_pool, pdp_pool_size * sizeof(t_pdp *));
+    memset(pdp_pool, 0, pdp_pool_size * sizeof(t_pdp *));
     class_list = pdp_list_new(0);
     pthread_mutex_init(&pdp_pool_mutex, NULL);
 }
@@ -172,7 +172,7 @@ _pdp_pool_expand_nolock(void){
     /* double the size */
     int new_pool_size = pdp_pool_size << 1;
     t_pdp **new_pool = (t_pdp **)pdp_alloc(new_pool_size * sizeof(t_pdp *));
-    bzero(new_pool, new_pool_size * sizeof(t_pdp *));
+    memset(new_pool, 0, new_pool_size * sizeof(t_pdp *));
     memcpy(new_pool, pdp_pool, pdp_pool_size * sizeof(t_pdp *));
     pdp_dealloc(pdp_pool);
     pdp_pool = new_pool;
diff --git a/externals/pdp/system/kernel/pdp_packet2.c b/externals/pdp/system/kernel/pdp_packet2.c
index 8ee62f2f9fa8a68fde1893a221729e35a14b9f36..eb828f244d09391ca71b7988e5cc12da096a3fdb 100644
--- a/externals/pdp/system/kernel/pdp_packet2.c
+++ b/externals/pdp/system/kernel/pdp_packet2.c
@@ -120,7 +120,7 @@ pdp_packet_setup(void)
 
     pdp_pool_size = PDP_INITIAL_POOL_SIZE;
     pdp_pool = (t_pdp **)pdp_alloc(PDP_INITIAL_POOL_SIZE * sizeof(t_pdp *));
-    bzero(pdp_pool, pdp_pool_size * sizeof(t_pdp *));
+    memset(pdp_pool, 0, pdp_pool_size * sizeof(t_pdp *));
     class_list = pdp_list_new(0);
     pthread_mutex_init(&pdp_pool_mutex, NULL);
 }
@@ -169,7 +169,7 @@ _pdp_pool_expand_nolock(void){
     /* double the size */
     int new_pool_size = pdp_pool_size << 1;
     t_pdp **new_pool = (t_pdp **)pdp_alloc(new_pool_size * sizeof(t_pdp *));
-    bzero(new_pool, new_pool_size * sizeof(t_pdp *));
+    memset(new_pool, 0, new_pool_size * sizeof(t_pdp *));
     memcpy(new_pool, pdp_pool, pdp_pool_size * sizeof(t_pdp *));
     pdp_dealloc(pdp_pool);
     pdp_pool = new_pool;
diff --git a/externals/pidip/modules/pdp_baltan.c b/externals/pidip/modules/pdp_baltan.c
index 7b7cb70db648387b5847acc7dc39e5c7d242147e..87a2909f2fe130e2c759c4d16e2ad01b8a4dd32f 100755
--- a/externals/pidip/modules/pdp_baltan.c
+++ b/externals/pidip/modules/pdp_baltan.c
@@ -81,7 +81,7 @@ static void pdp_baltan_process_yv12(t_pdp_baltan *x)
        x->x_pixels = size;
        x->x_planebuf = (int*)getbytes(x->x_pixels*PLANES*sizeof(int));
        post("pdp_baltan : allocated plane buffer (size=%d)", x->x_pixels*PLANES*sizeof(int) );
-       bzero(x->x_planebuf, x->x_pixels*PLANES*sizeof(int));
+       memset(x->x_planebuf, 0, x->x_pixels*PLANES*sizeof(int));
        x->x_plane = 0;
        if ( !x->x_planebuf ) 
        {
diff --git a/externals/pidip/modules/pdp_edge.c b/externals/pidip/modules/pdp_edge.c
index 5d986a2cb8939964ea0a5861e4e53aa26dac8393..5ef146b60c2aae9563e34a5fe51e17ad8182f5b8 100755
--- a/externals/pidip/modules/pdp_edge.c
+++ b/externals/pidip/modules/pdp_edge.c
@@ -54,7 +54,7 @@ typedef struct pdp_edge_struct
 static void pdp_edge_allocate(t_pdp_edge *x)
 {
   x->x_map = (int*) getbytes ( ( x->x_vwidth * x->x_vheight * sizeof (int) ) << 1 );
-  bzero(x->x_map, ( x->x_vwidth * x->x_vheight * sizeof (int) ) << 1 );
+  memset(x->x_map, 0, ( x->x_vwidth * x->x_vheight * sizeof (int) ) << 1 );
 }
 
 static void pdp_edge_free_ressources(t_pdp_edge *x)
diff --git a/externals/pidip/modules/pdp_vertigo.c b/externals/pidip/modules/pdp_vertigo.c
index 39dd530473c05099e20c2b05274cd491fe816474..f620dd16b8efc47560273969d19e70a79d271105 100755
--- a/externals/pidip/modules/pdp_vertigo.c
+++ b/externals/pidip/modules/pdp_vertigo.c
@@ -76,7 +76,7 @@ static void pdp_vertigo_allocate(t_pdp_vertigo *x, t_floatarg fnewsize )
     x->x_buffer = (short int *) getbytes( 2*(( nsize + (nsize>>1))<<1) );
     if ( x->x_buffer )
     {
-       bzero( x->x_buffer, 2*((nsize + (nsize>>1))<<1) );
+       memset( x->x_buffer, 0, 2*((nsize + (nsize>>1))<<1) );
        x->x_current_buffer = x->x_buffer;
        x->x_alt_buffer = x->x_buffer + (nsize + (nsize>>1));
     }
diff --git a/externals/unauthorized/mp3streamin~.c b/externals/unauthorized/mp3streamin~.c
index eb3c5aade7f3133340fad87428c56042ab7ae701..1547ff6509b62d69152c145d08857d9d2dbf0458 100644
--- a/externals/unauthorized/mp3streamin~.c
+++ b/externals/unauthorized/mp3streamin~.c
@@ -119,7 +119,7 @@ int setsocketoptions(int sockfd)
 
 #ifndef _MSC_VER
     sockopt = 1;
-    if (setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &sockopt, sizeof(int)) < 0)
+    if (setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, (char*)&sockopt, sizeof(int)) < 0)
     {
         post("mp3streamin~ : setsockopt SO_REUSEADDR failed");
         perror( "setsockopt" );
diff --git a/externals/unauthorized/playlist.c b/externals/unauthorized/playlist.c
index f663152b09f8ace73d760d33d292aa7ca392c1bd..255e5567a5486a1418a310344d9243fb2513fec9 100644
--- a/externals/unauthorized/playlist.c
+++ b/externals/unauthorized/playlist.c
@@ -78,7 +78,7 @@ int scandir(const char *dir, struct dirent ***namelist,
     if (closedir(d)) return(-1);
     if (i == 0) return(-1);
     if (compar != NULL)
-        qsort((void *)(*namelist), (size_t)i, sizeof(struct dirent *), compar);
+        qsort((void *)(*namelist), (size_t)i, sizeof(struct dirent *), (int (*)(const void *, const void *))compar);
 
     return(i);
 }
diff --git a/externals/unauthorized/sonogram~.c b/externals/unauthorized/sonogram~.c
index 9d3b1aeff0a3ad81917b6b1b519fe2494f686a04..f7d79d39ccd8cf1ec2af0a1f92acc1582a6cc2bc 100644
--- a/externals/unauthorized/sonogram~.c
+++ b/externals/unauthorized/sonogram~.c
@@ -587,7 +587,7 @@ static void sonogram_update_part(t_sonogram *x, t_glist *glist, t_int bstart, t_
             perror( "pthread_attr_setdetachstate" );
             return;
         }
-        if ( pthread_create( &x->x_updatechild, &update_child_attr, sonogram_do_update_part, x ) < 0 )
+        if ( pthread_create( (pthread_t*)&x->x_updatechild, &update_child_attr, sonogram_do_update_part, x ) < 0 )
         {
             post( "sonogram~ : could not launch update thread" );
             perror( "pthread_create" );
diff --git a/externals/unauthorized/speexin~.c b/externals/unauthorized/speexin~.c
index 308b0aacb60cc009a0c6555293703d5cb41f1872..c2b18d166e63cae69483f3fbbe8bc32bd6ed56c4 100644
--- a/externals/unauthorized/speexin~.c
+++ b/externals/unauthorized/speexin~.c
@@ -118,7 +118,7 @@ int setsocketoptions(int sockfd)
 
 #ifdef _WIN32
     sockopt = 1;
-    if (setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &sockopt, sizeof(int)) < 0)
+    if (setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, (char*)&sockopt, sizeof(int)) < 0)
     {
         post("speexin~ : setsockopt SO_REUSEADDR failed");
         perror( "setsockopt" );
diff --git a/l2ork_addons/patch-nwjs.sh b/l2ork_addons/patch-nwjs.sh
new file mode 100755
index 0000000000000000000000000000000000000000..4b33091f70a212c0603199902f02c99436d7fb79
--- /dev/null
+++ b/l2ork_addons/patch-nwjs.sh
@@ -0,0 +1,285 @@
+#! /bin/bash
+
+# Unfortunately, at present there doesn't seem to be a version of nw.js where
+# everything just works fine on all platforms. Thus you may want or need to
+# patch up your existing installation with a different nw.js version. Or maybe
+# you just want to experiment with different versions and see what works best
+# on your system. I wrote this script to automate this process, since it is
+# quite error-prone and arduous when done manually.
+
+# The script can be downloaded at:
+
+# https://github.com/agraef/purr-data/blob/testing/l2ork_addons/patch-nwjs.sh
+
+# Put it somewhere where you can create files, make sure that it's executable,
+# and run it, e.g., as: ./patch-nwjs.sh 0.42.3
+
+# The script will then download the given nw.js version and replace the
+# version that was included in your current purr-data installation with it. It
+# also takes care of removing your existing purr-data-specific nw.js config,
+# which might otherwise cause issues when downgrading the nw.js version
+# (which is the main use case, since our packages currently ship with pretty
+# much the last nw.js version that is known to work properly with purr-data).
+
+# You can also invoke the script without the nw.js version argument, it will
+# then use the default version that our packages ship with (0.55.0 at the time
+# of this writing). Or run ./patch-nwjs.sh -h to print some usage information.
+
+# The script also lets you edit the package.json file of the installed
+# application to quickly switch NW2 mode on or off. Note that NW2 mode
+# (https://nwjs.io/blog/nw2-mode/) is required for Purr Data's window
+# management to work properly with any nw.js version after 0.67.1. But it
+# slows down JavaScript execution quite a lot, so that Purr Data's user
+# interface may become slow and unresponsive. Thus enabling this options isn't
+# recommended, and the latest packages we ship have it disabled. (If you're
+# still running an older Purr Data release and experience these slow-downs,
+# you can run ./patch-nwjs.sh -w1 to fix this.)
+
+# To use this operation, you invoke the script with the -nw1 or -nw2 option,
+# indicating whether NW2 mode should be disabled or not. The -nw1 or -nw2
+# option can also be combined with the nw.js version argument if you want to
+# change both the version and the NW2 switch at the same time. Note that using
+# the -nw1 option with nw.js versions prior to 0.42.4 is possible but
+# unnecessary, since older versions have the NW2 option disabled by default.
+
+# To perform its operations, the script requires administrator access so that
+# it is able to modify the installed application. On Linux and Mac, the script
+# uses sudo for this purpose. On Windows, the script employs the gsudo program
+# (https://gerardog.github.io/gsudo/), which is a sudo replacement for Windows
+# systems which works nicely with msys2 bash. If you don't have this installed
+# then the automatic installation will fail and you will have to install
+# things manually.
+
+nwjs_version=""
+nwopt=""
+
+case "$1" in
+    -nw1) nwopt=nw1; shift;;
+    -nw2) nwopt=nw2; shift;;
+    [0-9]*) nwjs_version="$1"; shift;;
+esac
+
+case "$1" in
+    -nw1) nwopt=nw1;;
+    -nw2) nwopt=nw2;;
+    [0-9]*) nwjs_version="$1" ;;
+    "") ;;
+    *) echo "USAGE: $0 [-h] [-nw1|-nw2] [nwjs-version]" 1>&2
+       echo "-h: print this message" 1>&2
+       echo "-nw1: switch NW2 mode OFF (https://nwjs.io/blog/nw2-mode/)" 1>&2
+       echo "-nw2: switch NW2 mode ON (this may slow down the application!)" 1>&2
+       echo "nwjs-version (x.y.z): nw.js version to be used (default: 0.55.0)" 1>&2
+       exit 0 ;;
+esac
+
+if [ -z "$nwopt" -a -z "$nwjs_version" ]; then
+    nwjs_version="0.55.0"
+fi
+
+os=`uname | tr '[:upper:]' '[:lower:]'`
+if [[ $os == *"mingw64"* ]]; then
+	os=win64
+elif [[ $os == *"mingw"* ]]; then
+	os=win
+elif [[ $os == "darwin" ]]; then
+	os=osx
+fi
+
+if [ `getconf LONG_BIT` -eq 32 ]; then
+    arch="ia32"
+else
+    arch="x64"
+fi
+
+# for rpi
+if [ `uname -m` == "armv7l" ]; then
+    arch="arm"
+fi
+
+# for pinebook, probably also rpi 4
+if [ `uname -m` == "aarch64" ]; then
+    arch="arm64"
+fi
+
+# MSYS: Pick the right architecture depending on whether we're
+# running in the 32 or 64 bit version of the MSYS shell.
+if [[ $os == "win" ]]; then
+    arch="ia32"
+elif [[ $os == "win64" ]]; then
+    arch="x64"
+fi
+if [[ $os == "win" || $os == "win64" || $os == "osx" ]]; then
+    ext="zip"
+else
+    ext="tar.gz"
+fi
+
+if [[ $os == "win" || $os == "win64" ]]; then
+    targetdir="$PROGRAMFILES/Purr Data/bin"
+    nwjsconfig="$LOCALAPPDATA/purr-data"
+elif [[ $os == "osx" ]]; then
+    targetdir="/Applications/Purr-Data.app"
+    nwjsconfig="$HOME/Library/Application Support/purr-data"
+elif [ -d /opt/purr-data/lib/pd-l2ork/bin ]; then
+    targetdir="/opt/purr-data/lib/pd-l2ork/bin"
+    nwjsconfig="$HOME/.config/purr-data"
+elif [ -d /usr/lib/pd-l2ork/bin ]; then
+    targetdir="/usr/lib/pd-l2ork/bin"
+    nwjsconfig="$HOME/.config/purr-data"
+else
+    echo 1>&2 "Couldn't find a Purr Data installation in /opt/purr-data or /usr. Exiting."
+    exit 1
+fi
+
+if [ ! -d "$targetdir" ]; then
+    echo 1>&2 "Couldn't find the Purr Data installation in $targetdir. Exiting."
+    exit 1
+fi
+
+echo "Found a Purr Data installation in $targetdir."
+
+if [ -n "$nwjs_version" ]; then
+
+nwjs="nwjs-sdk"
+if [[ $os == "win64" ]]; then
+    nwjs_dirname=${nwjs}-v${nwjs_version}-win-${arch}
+else
+    nwjs_dirname=${nwjs}-v${nwjs_version}-${os}-${arch}
+fi
+
+nwjs_filename=${nwjs_dirname}.${ext}
+
+if [ ! -f "$nwjs_filename" ]; then
+    nwjs_url=https://dl.nwjs.io/v${nwjs_version}/$nwjs_filename
+    echo "Fetching the nwjs binary from"
+    echo "$nwjs_url"
+
+    if ! wget "$nwjs_url"; then
+	echo 1>&2 "Download failed. Exiting."
+	exit 1
+    fi
+else
+    echo "$nwjs_filename already exists. Skipping download."
+fi
+
+if [[ $os == "win" || $os == "win64" || $os == "osx" ]]; then
+    unzip $nwjs_filename
+else
+    tar -xf $nwjs_filename
+fi
+rm -rf nw
+mv $nwjs_dirname nw
+
+# fix permissions
+if [[ $os == "win" || $os == "win64" ]]; then
+    echo Skipping permissions check.
+elif [[ $os == "osx" ]]; then
+    chmod -R a+r nw
+    find nw -type f -perm +111 -exec chmod a+x {} +
+    find nw -type d -exec chmod a+x {} +
+else
+    chmod -R a+r nw
+    find nw -executable -not -type d -exec chmod a+x {} +
+    find nw -type d -exec chmod a+x {} +
+fi
+
+# Get rid of the previous nw.js config data which may cause issues when
+# downgrading the nw.js version.
+# (cf. https://agraef.github.io/purr-data-intro/Purr-Data-Intro.html#where-are-my-configuration-files).
+echo "Removing previous $nwjsconfig. It will be re-created."
+rm -rf "$nwjsconfig"
+
+echo "Replacing nw.js in $targetdir now."
+echo "You may be prompted to enter your administrator password."
+echo "NOTE: Pressing Ctr+C leaves the nw folder in the current directory."
+echo "NOTE: You can then install it manually or remove it."
+
+if [[ $os == "win" || $os == "win64" ]]; then
+    echo "NOTE: This requires gsudo (https://gerardog.github.io/gsudo/)."
+    echo "NOTE: Otherwise the automatic installation will fail."
+    echo "Continue? (Press Return to continue, Ctrl+C to abort.)"
+    read
+    /c/Program\ Files/gsudo/Current/gsudo.exe "/bin/bash" -c "rm -rf /c/Program\\ Files/Purr\\ Data/bin/nw && mv nw /c/Program\\ Files/Purr\\ Data/bin"
+elif [[ $os == "osx" ]]; then
+    echo "Continue? (Press Return to continue, Ctrl+C to abort.)"
+    read
+    # This is complicated. On Mac, the zip contains an entire application
+    # bundle, and we must be careful to only replace the Chromium-specific
+    # parts, while keeping the purr-data-specific parts of the bundle intact.
+    # Replace the nwjs executable:
+    sudo mv nw/nwjs.app/Contents/MacOS/nwjs "$targetdir/Contents/MacOS"
+    # Replace the framework:
+    sudo rm -rf "$targetdir/Contents/Frameworks"
+    sudo mv nw/nwjs.app/Contents/Frameworks "$targetdir/Contents"
+    # Replace the Chromium translations (*.lproj dirs):
+    sudo rm -rf "$targetdir"/Contents/Resources/*.lproj
+    # NOTE: The darwin_app/Makefile makes an attempt to edit these (basically,
+    # changing the app name from nwjs to Purr Data), but this doesn't seem to
+    # do much, at least not with reasonably recent versions. So we just move
+    # these over unchanged.
+    sudo mv nw/nwjs.app/Contents/Resources/*.lproj "$targetdir/Contents/Resources"
+    # Get rid of the rest (there's various other stuff in there that's not
+    # part of the bundle, which we don't need):
+    rm -rf nw
+else
+    echo "Continue? (Press Return to continue, Ctrl+C to abort.)"
+    read
+    sudo rm -rf "$targetdir/nw"
+    sudo chown -R root:root nw
+    sudo mv nw "$targetdir"
+fi
+
+fi #  -n "$nwjs_version"
+
+# edit the package.json file
+
+if [[ $os == "osx" ]]; then
+    targetdir="/Applications/Purr-Data.app/Contents/Resources/app.nw"
+fi
+
+# Apparently this is the *only* portable way for sed in-place editing across
+# both Linux and BSD/Mac. We need to remember to remove the bak file, though.
+sed_i () {
+    sed -i.bak "$1" "$2"
+    rm -f "$2.bak"
+}
+
+pkgfile="$targetdir/package.json"
+
+if [ -z "$nwopt" ]; then
+    echo "Done."
+    exit 0
+elif [ ! -f "$pkgfile" ]; then
+    echo 1>&2 "-$nwopt specified, but $pkgfile could not be found."
+    exit 1
+fi
+
+if ! cp "$pkgfile" .; then
+    echo 1>&2 "Couldn't create package.json. Exiting."
+    exit 1
+fi
+
+case "$nwopt" in
+    nw1) echo "Turning NW2 mode OFF (https://nwjs.io/blog/nw2-mode/).";
+	 echo "You may be prompted to enter your administrator password.";
+	 sed_i 's/"--proxy-server=/"--disable-features=nw2 --proxy-server=/' package.json;;
+    nw2) echo "Turning NW2 mode ON (https://nwjs.io/blog/nw2-mode/).";
+	 echo "You may be prompted to enter your administrator password.";
+	 echo "WARNING: This may SLOW DOWN the application's user interface.";
+	 sed_i 's/"--disable-features=nw2 /"/' package.json;;
+esac
+
+if [[ $os == "win" || $os == "win64" ]]; then
+    echo "NOTE: This requires gsudo (https://gerardog.github.io/gsudo/)."
+    echo "NOTE: Otherwise the automatic installation will fail."
+    echo "Continue? (Press Return to continue, Ctrl+C to abort.)"
+    read
+    /c/Program\ Files/gsudo/Current/gsudo.exe "/bin/bash" -c "rm -f /c/Program\\ Files/Purr\\ Data/bin/package.json && mv package.json /c/Program\\ Files/Purr\\ Data/bin"
+else
+    echo "Continue? (Press Return to continue, Ctrl+C to abort.)"
+    read
+    sudo rm -f "$pkgfile"
+    sudo mv package.json "$targetdir"
+fi
+
+echo "Done."
diff --git a/l2ork_addons/tar_em_up.sh b/l2ork_addons/tar_em_up.sh
index 171d09ff71cfcf80bad91e7722a96e848cce60c7..5ff6acea1aecea13d36dc707b3b5d9526416270d 100755
--- a/l2ork_addons/tar_em_up.sh
+++ b/l2ork_addons/tar_em_up.sh
@@ -163,7 +163,18 @@ fi
 
 # Fetch the nw.js binary if we haven't already. We want to fetch it even
 # for building with no libs, so we do it regardless of the options
-#echo nwjs-sdk-v0.16.0-`uname | tr '[:upper:]' '[:lower:]'`
+
+# If the nwjsver env variable is set, it denotes the nw.js version for the
+# default Linux, Mac, and Windows builds. This cleans out any existing
+# binaries, and provides a quick way to switch nw.js versions without having
+# to edit this script. For the other platforms, or if the variable isn't set,
+# we use a hard-coded default, see below. (Even in that case you can set
+# nwjsver to have the cached binaries cleared beforehand.)
+
+if [ -n "$nwjsver" ]; then
+	rm -rf "../pd/nw/nw"
+fi
+
 if [ ! -d "../pd/nw/nw" ]; then
 	if [ `getconf LONG_BIT` -eq 32 ]; then
 		arch="ia32"
@@ -194,27 +205,33 @@ if [ ! -d "../pd/nw/nw" ]; then
 		ext="tar.gz"
 	fi
 
+	# Some of the nw.js versions are hard-coded for special support of
+	# legacy systems, or platforms for which there are no official
+	# binaries, so we have to use what we can get from 3rd parties. Some
+	# of these are quite old, so expect some gui regressions.
 	if [[ $osx_version == "10.8" ]]; then
 		# We need the lts version to be able to run on legacy systems.
 		nwjs_version="v0.14.7"
 	elif [ $os == "osx" ]; then
-		# ag: We need a recent version here to make the latest macOS
-		# versions work. Tested with Mojave (Intel), Monterey and
-		# Ventura (M1). NB: The Intel build also works on Apple
-		# Silicon using Rosetta 2.
-		nwjs_version="v0.71.0"
+		# ag: We need a fairly recent version here to make the build
+		# work on newer macOS versions. Note that at present only
+		# Intel builds are supported, but these should also work on
+		# Apple Silicon via Rosetta 2.
+		nwjs_version="v${nwjsver:-0.55.0}"
+	elif [[ $os == "win" || $os == "win64" ]]; then
+		# same version works on Windows, too
+		nwjs_version="v${nwjsver:-0.55.0}"
+	elif [ $arch == "arm" ]; then
+		# rpi-- only 0.27.6 is available atm
+		nwjs_version="v0.27.6"
+	elif [ $arch == "arm64" ]; then
+		# dito for rpi arm64-- 0.23.7 version
+		nwjs_version="v0.23.7"
 	else
-		# temporary kluge for rpi-- only 0.27.6 is available atm
-		if [ $arch == "arm" ]; then
-			nwjs_version="v0.27.6"
-		elif [ $arch == "arm64" ]; then
-			nwjs_version="v0.23.7"
-		else
-		# ag: Unfortunately, Linux exhibits a bunch of regressions
-		# with 0.71.0, so we keep the tried and true 0.28 version for
-		# now. 0.28.3 is the final point release in this series.
-			nwjs_version="v0.28.3"
-		fi
+		# default for Linux -- same as Mac and Windows; note that
+		# anything past 0.55.0 suffers from the nwworkingdir bug which
+		# makes file dialogs open in the wrong locations
+		nwjs_version="v${nwjsver:-0.55.0}"
 	fi
 
 	nwjs="nwjs-sdk"
@@ -360,15 +377,23 @@ then
 	if [[ $os == "win" || $os == "win64" ]]; then
 		echo "Making Windows package..."
 		echo `pwd`
-		make install INCREMENTAL=$INCREMENTAL LIGHT=$LIGHT && make package
+		make install INCREMENTAL=$INCREMENTAL LIGHT=$LIGHT
+		# copy the patch-nwjs.sh script
+		cp ../../l2ork_addons/patch-nwjs.sh build/bin
+		make package
 	elif [[ $os == "osx" ]]; then
 		echo "Making OSX package (dmg)..."
 		echo `pwd`
-		make install INCREMENTAL=$INCREMENTAL LIGHT=$LIGHT && make package
+		make install INCREMENTAL=$INCREMENTAL LIGHT=$LIGHT
+		# copy the patch-nwjs.sh script
+		cp ../../l2ork_addons/patch-nwjs.sh build/Purr-Data.app/Contents/Resources/app.nw/bin
+		make package
 	else
 		# create images folder
-		mkdir -p ../../packages/linux_make/build$inst_dir/lib/pd-l2ork/extra/images
+		mkdir -p build$inst_dir/lib/pd-l2ork/extra/images
 		make install prefix=$inst_dir
+		# copy the patch-nwjs.sh script
+		cp ../../l2ork_addons/patch-nwjs.sh build$inst_dir/bin
 	fi
 	echo "copying pd-l2ork-specific externals..."
 	# patch_name
diff --git a/packages/darwin_app/Info.plist.in b/packages/darwin_app/Info.plist.in
index bcd1c4eccac08f1af2e30f3039842b39917b2403..c79ed0ca31248b29503cee918ff2f0821cb47218 100755
--- a/packages/darwin_app/Info.plist.in
+++ b/packages/darwin_app/Info.plist.in
@@ -51,6 +51,12 @@
 	<string>10.8.5</string>
 	<key>NSAppleScriptEnabled</key>
 	<true/>
+	<key>NSCameraUsageDescription</key>
+	<string>Camera access is required for live video input.</string>
+	<key>NSHighResolutionCapable</key>
+	<true/>
+	<key>NSMicrophoneUsageDescription</key>
+	<string>Microphone access is required for audio input.</string>
 	<key>NSPrincipalClass</key>
 	<string>BrowserCrApplication</string>
 	<key>NSSupportsAutomaticGraphicsSwitching</key>
diff --git a/packages/darwin_app/Makefile b/packages/darwin_app/Makefile
index 6d968dface01143ea060612d1c884ba2bb008eaf..ca1adfb2e7bcd2afe67f15b6fbed2d6dc1df4544 100644
--- a/packages/darwin_app/Makefile
+++ b/packages/darwin_app/Makefile
@@ -59,6 +59,12 @@ all:
 	$(MAKE) -C $(packages_src) $(DEST_PATHS)
 
 install: darwin_app
+# Sanitize permissions.
+	chmod a+rx $(PD_APP_CONTENTS)/MacOS/nwjs
+	chmod -R go-w $(DESTDIR)*
+	chmod -R a+r $(DESTDIR)*
+	for x in dat osc pd pdf txt xml aif aiff gif png ppm xcf mp3 mid wav; do find $(DESTDIR) -type f -perm +111 -name \*.$$x -exec chmod a-x {} +; done
+	find $(DESTDIR) -type d -exec chmod a+x {} +
 
 #------------------------------------------------------------------------------#
 darwin_app: darwin_app_core extended_install darwin_app_embed_libs
@@ -177,6 +183,11 @@ package: dmg
 
 VOLUME_NAME = Purr-Data
 dmg:
+# ico@vt.edu 2022-10-10: sign the app, so that we can get the mic/camera
+# permission prompts (https://github.com/pd-l2ork/pd-l2ork/commit/4dd114f)
+	codesign --deep --sign "-" --entitlements "$(CWD)/purr-data.entitlements" "$(BUILD_BASE)/Purr-Data.app"
+# sign libs (@MovementGH, https://github.com/pd-l2ork/pd-l2ork/commit/5a99fac)
+	./sign-MacOSX-dependencies.sh $(PD_APP_CONTENTS)
 	rm -f build.dmg
 	hdiutil create -format UDRW -fs HFS+ -srcfolder "$(BUILD_BASE)" \
 		-volname $(VOLUME_NAME) build.dmg
@@ -206,7 +217,7 @@ dmg:
 		DESTDIR="/Volumes/$(VOLUME_NAME)/*.app/Contents/Resources" doc_format
 	chmod -R a-w /Volumes/$(VOLUME_NAME)/*.app/Contents/Resources
 # max 5 retries
-	nretries=5; volm=$$(mount | grep $(VOLUME_NAME) | cut -d ' ' -f 1); sleep 1; until [[ $$nretries -le 0 ]] || hdiutil detach $$volm; do echo "detach failed, retrying"; sleep 1; nretries=$$(expr $$nretries - 1); done
+	nretries=10; volm=$$(mount | grep $(VOLUME_NAME) | cut -d ' ' -f 1); sleep 5; until [[ $$nretries -le 0 ]] || hdiutil detach $$volm; do echo "detach failed, retrying"; sleep 5; nretries=$$(expr $$nretries - 1); done
 	rm -f "$(PACKAGE_NAME).dmg"
 	hdiutil convert -format UDZO -o "$(PACKAGE_NAME).dmg" build.dmg
 	rm -f build.dmg
diff --git a/packages/darwin_app/purr-data.entitlements b/packages/darwin_app/purr-data.entitlements
new file mode 100644
index 0000000000000000000000000000000000000000..1850b99006307034a5dd2e70a06065070aa34aac
--- /dev/null
+++ b/packages/darwin_app/purr-data.entitlements
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+	<key>com.apple.security.cs.disable-library-validation</key>
+	<true/>
+	<key>com.apple.security.device.audio-input</key>
+	<true/>
+	<key>com.apple.security.device.camera</key>
+	<true/>
+</dict>
+</plist>
diff --git a/packages/darwin_app/sign-MacOSX-dependencies.sh b/packages/darwin_app/sign-MacOSX-dependencies.sh
new file mode 100755
index 0000000000000000000000000000000000000000..a80a52b63314bbd6a41ad52d7aef881e90d7770e
--- /dev/null
+++ b/packages/darwin_app/sign-MacOSX-dependencies.sh
@@ -0,0 +1,50 @@
+#!/bin/sh
+#
+# This script finds all of the dependecies from Homebrew or MacPorts and
+# resigns them (this is meant to be run after embed-MacOSX-dependencies.sh)
+#
+# run it in the root directory where the externals are stored, i.e. "extra"
+
+    
+if [ $# -ne 1 ]; then
+	echo "Usage: $0 Pd.app-Contents"
+	echo "  i.e. $0 /Applications/Pd.app/Contents/"
+	exit
+fi
+
+# Check whether we have Homebrew or MacPorts, prefer the former.
+optlocal=$((test -n "$HOMEBREW_PREFIX" && test -d $HOMEBREW_PREFIX/opt && echo $HOMEBREW_PREFIX/opt) || (test -d /opt/local && echo /opt/local) || echo /usr/local)
+# Determine the actual installation prefix. On Homebrew, this is
+# $HOMEBREW_PREFIX, otherwise (MP or none) it's just $optlocal.
+if test -n "$HOMEBREW_PREFIX" && test -d $HOMEBREW_PREFIX; then
+    usrlocal=$HOMEBREW_PREFIX
+else
+    usrlocal=$optlocal
+fi
+
+LIB_DIR=lib
+PD_APP_CONTENTS=$1
+PD_APP_LIB=$PD_APP_CONTENTS/$LIB_DIR
+PD_APP_PLUGINS=$PD_APP_CONTENTS/Plugins
+
+#echo "PD_APP_CONTENTS: $PD_APP_CONTENTS"
+#echo "PD_APP_LIB: $PD_APP_LIB"
+
+echo " "
+
+for pd_darwin in `find $PD_APP_CONTENTS -name '*.pd_darwin'`; do
+    codesign --force -s - $pd_darwin
+done
+
+# check for .so plugins used by libquicktime and others
+for so in $PD_APP_PLUGINS/*/*.so; do
+    codesign --force -s - $so
+done
+
+if test -d $PD_APP_LIB; then
+
+for dylib in $PD_APP_LIB/*.dylib; do
+    codesign --force -s - $dylib
+done
+
+fi
\ No newline at end of file
diff --git a/packages/gendoc/ReadMe.md b/packages/gendoc/ReadMe.md
index 32eb536f9fe311285c70bf2955fd2b5d092cbd11..abaf3463dd11939065ed6c97ab638f19b9922a91 100644
--- a/packages/gendoc/ReadMe.md
+++ b/packages/gendoc/ReadMe.md
@@ -38,7 +38,7 @@ If you want to use PDP on Mac OS X, you may have to install X11. For details see
 @darwin@
 
 @mingw@
-The latest Windows packages are available as Inno Setup installers on [GitHub](https://github.com/agraef/purr-data/releases). Double-click the installer and follow the instructions. If you have a prior Purr Data installation, the installer will prompt you to first remove it. If your existing installation is much older, it is always a good idea to do this, in order to prevent garbled installations which mix files and registry entries of both versions.
+The latest Windows packages are available as Inno Setup installers on [GitHub](https://github.com/agraef/purr-data/releases). Double-click the installer and follow the instructions. If you have a prior Purr Data installation, the installer will first remove it before installing the new package. No need to worry, your custom preferences will be preserved in the process.
 
 [ASIO4ALL](https://www.asio4all.com/) is a cost-free [ASIO](https://en.wikipedia.org/wiki/Audio_Stream_Input/Output) audio driver. If you have it installed then you can enable it in Purr Data by choosing the **ASIO** option in the **Audio** tab of the Preferences dialog. Using ASIO4ALL will often give you lower latency and generally better audio performance.
 @mingw@
diff --git a/packages/linux_flatpak/net.purrdata.PurrData.svg b/packages/linux_flatpak/net.purrdata.PurrData.svg
index 37c1450a170f7fd378a57a15de3d33959e824e6f..b95cf186bafe6498c3ad6fe0658c9eeaf4cfe4a6 100644
--- a/packages/linux_flatpak/net.purrdata.PurrData.svg
+++ b/packages/linux_flatpak/net.purrdata.PurrData.svg
@@ -1,86 +1,48 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
 <svg
-   xmlns:dc="http://purl.org/dc/elements/1.1/"
-   xmlns:cc="http://creativecommons.org/ns#"
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns="http://www.w3.org/2000/svg"
-   width="54"
-   height="54"
    version="1.1"
-   id="svg2">
-  <metadata
-     id="metadata17">
-    <rdf:RDF>
-      <cc:Work
-         rdf:about="">
-        <dc:format>image/svg+xml</dc:format>
-        <dc:type
-           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
-        <dc:title></dc:title>
-      </cc:Work>
-    </rdf:RDF>
-  </metadata>
+   id="svg1"
+   width="170.66667"
+   height="170.66667"
+   viewBox="0 0 170.66667 170.66667"
+   sodipodi:docname="purr-data.svg"
+   inkscape:version="1.3.2 (091e20ef0f, 2023-11-25, custom)"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:xlink="http://www.w3.org/1999/xlink"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:svg="http://www.w3.org/2000/svg">
   <defs
-     id="defs15" />
-  <text
-     x="17.5"
-     y="19"
-     id="7fb48d028a00LABEL label text"
-     style="font-size:10px;font-family:Monaco;fill:#000000;stroke-width:0" />
-  <rect
-     x="5"
-     y="4.5"
-     width="15"
-     height="15"
-     id="7fb48d028a00BASE"
-     style="fill:#00fc04;stroke:#000000;stroke-width:1" />
-  <circle
-     r="6.5"
-     cx="12.5"
-     cy="12"
-     id="7fb48d028a00BUT"
-     style="fill:#00fc04;stroke:#000000;stroke-width:1" />
-  <polyline
-     transform="translate(-99,-74.5)"
-     points="104.0 99.0 148.0 99.0 148.0 124.0 104.0 124.0 104.0 99.0"
-     id=".x7fb48cd26890.t7fb48cc1a7d0R obj"
-     style="fill:#ffffff;stroke:#000000;stroke-width:1;stroke-linejoin:miter;fill-opacity:1" />
-  <rect
-     transform="scale(1,-1)"
-     x="5"
-     y="-26.499998"
-     width="6.9999995"
-     height="2.0000002"
-     id=".x7fb48cd26890.t7fb48cc1a7d0i0 inlet"
-     style="fill:#000000;stroke:#000000;stroke-width:1" />
-  <rect
-     x="42"
-     y="24.5"
-     width="7"
-     height="2"
-     id=".x7fb48cd26890.t7fb48cc1a7d0i1 inlet"
-     style="fill:#000000;stroke:#000000;stroke-width:1" />
-  <text
-     x="7"
-     y="44.456055"
-     id=".x7fb48cd26890.t7fb48cc1a7d0 obj text"
-     style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:20px;line-height:125%;font-family:'DejaVu Sans Mono';-inkscape-font-specification:'DejaVu Sans Mono, Bold';text-align:start;writing-mode:lr-tb;text-anchor:start;opacity:1;fill:#000000;stroke-width:0;fill-opacity:1;">
-    <tspan
-       id="tspan4141"
-       style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:20px;line-height:125%;font-family:'DejaVu Sans Mono';-inkscape-font-specification:'DejaVu Sans Mono, Bold';text-align:start;letter-spacing:1px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;opacity:1">Pd</tspan>
-  </text>
-  <polyline
-     transform="translate(-99,-74.5)"
-     points="107.0 94.0 107.0 99.0"
-     id="l7fb48cc19700 cord"
-     style="fill:none;stroke:#000000;stroke-width:1;stroke-linejoin:round" />
-  <rect
-     style="fill:#000000;stroke:#000000;stroke-width:0.99891341"
-     id="rect4160"
-     height="2.0010867"
-     width="6.9810028"
-     y="-49.413757"
-     x="4.9994569"
-     transform="scale(1,-1)" />
+     id="defs1" />
+  <sodipodi:namedview
+     id="namedview1"
+     pagecolor="#ffffff"
+     bordercolor="#000000"
+     borderopacity="0.25"
+     inkscape:showpageshadow="2"
+     inkscape:pageopacity="0.0"
+     inkscape:pagecheckerboard="0"
+     inkscape:deskcolor="#d1d1d1"
+     inkscape:zoom="4.7109374"
+     inkscape:cx="85.2272"
+     inkscape:cy="85.333336"
+     inkscape:window-width="1920"
+     inkscape:window-height="1008"
+     inkscape:window-x="0"
+     inkscape:window-y="0"
+     inkscape:window-maximized="1"
+     inkscape:current-layer="g1" />
+  <g
+     inkscape:groupmode="layer"
+     inkscape:label="Image"
+     id="g1">
+    <image
+       width="170.66667"
+       height="170.66667"
+       preserveAspectRatio="none"
+       xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAYAAADDPmHLAAAA0GVYSWZJSSoACAAAAAoAAAEEAAEA&#10;AACAAAAAAQEEAAEAAACAAAAAAgEDAAMAAACGAAAAEgEDAAEAAAABAAAAGgEFAAEAAACMAAAAGwEF&#10;AAEAAACUAAAAKAEDAAEAAAACAAAAMQECAA0AAACcAAAAMgECABQAAACqAAAAaYcEAAEAAAC+AAAA&#10;AAAAAAgACAAIAEgAAAABAAAASAAAAAEAAABHSU1QIDIuMTAuMzgAADIwMjQ6MDg6MTkgMTU6NTk6&#10;MzQAAQABoAMAAQAAAAEAAAAAAAAALU8TSAAAAYRpQ0NQSUNDIHByb2ZpbGUAAHicfZE9SMNAHMVf&#10;W6VFWhzaQcQhSBUEu6iIo1ahCBVCrdCqg8mlX9CkIUlxcRRcCw5+LFYdXJx1dXAVBMEPEGcHJ0UX&#10;KfF/SaFFjAfH/Xh373H3DvA3q0w1e2YBVbOMTCop5PKrQvAVIUQRwRiGJWbqc6KYhuf4uoePr3cJ&#10;nuV97s8RUQomA3wC8SzTDYt4g3h609I57xPHWFlSiM+Jxw26IPEj12WX3ziXHPbzzJiRzcwTx4iF&#10;UhfLXczKhko8RRxXVI3y/TmXFc5bnNVqnbXvyV8YLmgry1ynOYQUFrEEEQJk1FFBFRYStGqkmMjQ&#10;ftLDP+j4RXLJ5KqAkWMBNaiQHD/4H/zu1ixOTrhJ4STQ+2LbHyNAcBdoNWz7+9i2WydA4Bm40jr+&#10;WhOY+SS90dHiR0D/NnBx3dHkPeByBxh40iVDcqQATX+xCLyf0Tflgegt0Lfm9tbex+kDkKWu0jfA&#10;wSEwWqLsdY93h7p7+/dMu78fvQpyxFNZRm8AAA14aVRYdFhNTDpjb20uYWRvYmUueG1wAAAAAAA8&#10;P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/Pgo8eDp4&#10;bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJYTVAgQ29yZSA0LjQuMC1F&#10;eGl2MiI+CiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjIt&#10;cmRmLXN5bnRheC1ucyMiPgogIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICB4bWxu&#10;czp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgIHhtbG5zOnN0RXZ0&#10;PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VFdmVudCMiCiAgICB4&#10;bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgICB4bWxuczpHSU1Q&#10;PSJodHRwOi8vd3d3LmdpbXAub3JnL3htcC8iCiAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRv&#10;YmUuY29tL3RpZmYvMS4wLyIKICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAv&#10;MS4wLyIKICAgeG1wTU06RG9jdW1lbnRJRD0iZ2ltcDpkb2NpZDpnaW1wOmQ1ZjQ5OTlkLTQ1YWQt&#10;NGRlNS1iOWEwLWIzYzc2Mzk2MWY0ZCIKICAgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDplYzkz&#10;YWM1ZC1kNTFhLTQyODMtODIxMC00ZTU0Yjk0MDNjYzgiCiAgIHhtcE1NOk9yaWdpbmFsRG9jdW1l&#10;bnRJRD0ieG1wLmRpZDpjZjg3N2RkZS1lZTAyLTRhMDItOTc4YS0yMjI2NmI1ZGUyNTkiCiAgIGRj&#10;OkZvcm1hdD0iaW1hZ2UvcG5nIgogICBHSU1QOkFQST0iMi4wIgogICBHSU1QOlBsYXRmb3JtPSJM&#10;aW51eCIKICAgR0lNUDpUaW1lU3RhbXA9IjE3MjQwNzU5NzYxNzM2MTUiCiAgIEdJTVA6VmVyc2lv&#10;bj0iMi4xMC4zOCIKICAgdGlmZjpPcmllbnRhdGlvbj0iMSIKICAgeG1wOkNyZWF0b3JUb29sPSJH&#10;SU1QIDIuMTAiCiAgIHhtcDpNZXRhZGF0YURhdGU9IjIwMjQ6MDg6MTlUMTU6NTk6MzQrMDI6MDAi&#10;CiAgIHhtcDpNb2RpZnlEYXRlPSIyMDI0OjA4OjE5VDE1OjU5OjM0KzAyOjAwIj4KICAgPHhtcE1N&#10;Okhpc3Rvcnk+CiAgICA8cmRmOlNlcT4KICAgICA8cmRmOmxpCiAgICAgIHN0RXZ0OmFjdGlvbj0i&#10;c2F2ZWQiCiAgICAgIHN0RXZ0OmNoYW5nZWQ9Ii8iCiAgICAgIHN0RXZ0Omluc3RhbmNlSUQ9Inht&#10;cC5paWQ6N2Q2NjJjZDktY2M0Ni00MTk4LWFmNjMtYWViY2IxMjgzYmMzIgogICAgICBzdEV2dDpz&#10;b2Z0d2FyZUFnZW50PSJHaW1wIDIuMTAgKExpbnV4KSIKICAgICAgc3RFdnQ6d2hlbj0iMjAyNC0w&#10;OC0xOVQxNTo1OTozNiswMjowMCIvPgogICAgPC9yZGY6U2VxPgogICA8L3htcE1NOkhpc3Rvcnk+&#10;CiAgPC9yZGY6RGVzY3JpcHRpb24+CiA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgogICAgICAgICAg&#10;ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg&#10;ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAg&#10;ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg&#10;ICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg&#10;ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg&#10;ICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg&#10;ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAg&#10;ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg&#10;ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAg&#10;ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg&#10;ICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg&#10;ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg&#10;ICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg&#10;ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAK&#10;ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg&#10;ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAg&#10;ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg&#10;ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAg&#10;ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg&#10;ICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg&#10;ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg&#10;ICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg&#10;ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAg&#10;ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg&#10;ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAg&#10;ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg&#10;ICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg&#10;ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg&#10;ICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg&#10;ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAg&#10;ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg&#10;ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAg&#10;ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg&#10;ICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg&#10;ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg&#10;ICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgCjw/eHBhY2tldCBlbmQ9&#10;InciPz7KUvEeAAAABmJLR0QA9QD1APUHT9P6AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH&#10;6AgTDTskTHYYRQAAIABJREFUeNrtnXl8VdW5979r7X3OyZxAAiFAgBAZAgKSilREcKzeitJRvbWf&#10;+75Wq7a3Tlh6aa32fWv7WgeqFkVFr7bVWtTXqlWLVqk4IlWhIiDIPA8hMxnOsPe6f5y9T1ZOzpTk&#10;QEJ7Fp/NOSd7Xs/v+T3DmiBTMiVTMiVTMiVT/hWLOEbn9LSojIj6DgCinwlBANJ5HpUBSXqKmcIx&#10;Y4HiPmaAELARaO2HwPynYgMBGM4GMB44rGldX243O8/kBTwOeA2HFURGfOlhAKFttqP5xSJb4Btj&#10;OjonYtKAMATCI7AabQK7gtjtcRRUgq/Ug2+IFxSooEIpjVqUdn0pCNQGaT/gBxjjXMFwnk1pn5nS&#10;SwAITZOk9t0A8J5gUvF2KVhgKAlKhA9QAiEl0hD4Pw9R96cjNL3RkviONgivIGeMjyFfKaZoWj6m&#10;10D5neup8K2lDWaOyfZH97HhF1vds30OA4Qc4etgtTOmIT0MIB3BRwAgFMiQACssJJQI/80rCO63&#10;OfRQI7VPNmI1hmXgGeIj94RsskbnYA70IKTEbg4R2O2nbXML7dtbObCzjgPP1DFgZgGjvz+U4lOK&#10;IAhY4WujJCIoEFbk2QyN9lWUL5AxAb0AgIjSfI/mA3hcXAglwQ4fACC9Bs1vtrLnJ7W0bw4AUHD2&#10;QAZ8tZT86gI8JV6ECINFKhG+iS2wWyzaNh6h/o0aal46SP27Taz+oJnRVw9l9FXlGF4JQQW2QNgC&#10;0SFbE8hxGCBAGC5R3JLR/t6aAKkxgHT3h3c6orAlhk9w+Ilm9iyowfYrck7Kp/TGERScOgBphgWo&#10;QipM9yhQAoUApZA+SX51EYXVRQy5ZDj7f7+b/X/cw9YH9tK6zc+JPxuDJ89E2AKpjDDjdDyrz/m0&#10;ovyATEkTAxiO1nud71kuyUpHENIrqX2ymV3zDoGC4m+XUfbDUZgFHvDbqKAKmwclOzxK2zlXOVxt&#10;2SglyB6aQ+WC8RR9YQBbfrGR/csOYwcUU2+vwpNlIBA6ADxAnkb3Miov4ILByog19SJj2H8dCEYH&#10;wQqkR9L8Vhu7F4SFP/gH5Qz/WSVmjoFqt8ERsCtoETEfdNC5+10RpvqgzeDzhnDiPSfhLfZycHkt&#10;G+/ZjkREHE7NB/BFhYE6a2VKDwGgC950KtejVXbYKxcGoQM2u28+jN2uKL5sCGXXjQzrWxCkLZwt&#10;7ChKm8jviJQcJpHKOdb5VG2KAVMHMOHnk5BeyY4/7mXfshpM00TSiQFyHVbyac9pREUumdIDBojW&#10;flPbwuGAITi0pJH2TX6yJ+dRdtOo8Ml2tOfVYVGEEg79iwiL6IlcoQHD9tsUzyhh9FWVAGx8aDv+&#10;2iBCSP1ZvZrQ9SSQyAi/dz4AMXyBCAMIQxDYGuLwE40ADL1+JJ5CL6pdYTghoXA9fdWxRbjbkp18&#10;AeHkEZQSKOUwAwLhhxFfH0nN8kM0ftbI7pf2Y3pktBNoAO1OLiCkASFTeskAsUAQzgN4BHUvNhOq&#10;tyiYPYCCGQOgXWkq5wpfRDa033p6JqKqruBVx29s8OR7GXHpSAB2vryPQFNIf1Zd+6OpP8MCacoD&#10;RFcwVrNNw+vhDN/AuaVIj4FoU5qQHY1XIAQIEaZ+6QRoUgkUYZ8AN92rwrCJsIbthJl+m8HTB5Nd&#10;lk3DpiZySrN1J9DjePpGVBSQAUAaooBY+QAJ4N8TpHV9O2aJh/zqQgiojsOVY9vpSPYIu7MJEDrV&#10;KM1b0wO4CAsofIVeBp0yiFC7xaGPaqMBa0Y9d4b+0xgGihhAwG61sVptsipy8Q7yRVLCwu6gcKl0&#10;NtA/RTghZDspZCe2l122MFMIWyCFZMCEIgDa6/w6AxgxQJrR/DRkAmO58V0qNrsiGyklylIdsbym&#10;zREH0NX0iGZ3TgSJLscK7W8CLEVOaQ7CFOGMYuxny5Q0p4ITCh/AHOhBIlB2lPDQbLijzQLR4Rc4&#10;x7jZRDcp1AECx2w4hkRaAl+eF2lKrJAVD5iJNs3tzJTuMkB8eyGlFuJFhX901mIXHMqldud3xL4o&#10;Iq2KnYDk/JMyo+T9DgBWc6gTnaNrsNKFqglWF7xzLLrwbed80eE8SgmhVgtlZ5S4XwHAv6cdaRPW&#10;aj2p4wqUDsFKrSFXRpmCDs0X4bDR7uwLSCFpr/FjBzINfcc6DIxZhClAQNvWVuxGKyxc3ZHTnLiI&#10;N+9qt+14/Ti+gXLTvx2/RaRtoOOaR7Y1hRHqNTJS6msA+AZ7yK3Ipn1XK60bj2AaRiR8E25SR6d+&#10;TfjSprMz6G50CN4NKd3kkNVqcfCjGoQUDKoamJFSnwNgkI+B0wsBqF1+CCHolAUkqvk3YuP1QCIq&#10;BOwwH2HNV84+05Q0fN5I7cY68ofkMXRyaUZKfQ0AbBg6ZzAAh5YdoG1bK9KQ4T4CKtxuL22JsCTS&#10;Dv82nKSOsCWGs0X+2QLTkghboBxGMG2JoQxESLDtpR2goOK04eSW5Gak1NcAUEGb4pMKGHxmMcGG&#10;ILse3xHWXDq3Ako95HOcP6nF95HMoWM2OjXiK4HhMTj48SF2vrEbT7bJiReNDZuGTOljBlAC0/Qw&#10;5ooRSK9k/4t7OfTaQUyvGWnz7+QU2uFOpALhOIxaryBbiwDscNJH2gLTEPhr2vhkyToAJnx5DIMr&#10;S1ChjJD6HgCA8iuKpxYx7rvhptqNd2yg7qM6TJ8R9vDpyPNH9wmQtpYWJirzp8AwJFarxYf3/YOG&#10;bU0MGlPMtMsmQ6hzo1Km9FUY6AoxAGP/VwXl/1ZKsCnI2gX/4PC7hzA9RsS2Sz0KcHsEqY7vemuh&#10;VALTY+CvC/DBHR+x9/395AzM5qx5M8gtyIVQp06hmdJ3JgCELcMjgzySqTdPYNhZpQTq/Xw8/2O2&#10;/HYLdpsVNgluVzAtL+C2/0u7IxtomCaGITm0poa3fvwee97fT+7AbM77yWxKxw7CCliITLtPf8kE&#10;dozMFgGJL9vkiz+fwtqSTWx+ZiebHtzEwRUHGX1xBaXTBuMr8CJFuNUQW4W7iAvCkQNgt1vUbapj&#10;68s72PHGLpStGFQ5kLNuOo2ysYOx/FYkcsgwQN8AIHoMvtOHL2zpVQBMj8kX5p/IoMnFrHvkcxo+&#10;a2D1/11DztAchpwymAHji8gtzcWT78EQEqvNov1wO43bmzj48SEOb6hD2QrTZzDxy2M55bKp5BRm&#10;YftDSBGODwSdcgnJRg/HfO5MSR0AIl4FSinweX0oCwx3sIYz8GPcVyoYNXMY217ZxdZlu6nf3Mi2&#10;F3aEzzMl0unUqSyFFQg37QohyC/NpWLGCCZdMI4h4wZBSKEskD6Pk0yS+HxeTMPMSOkYM0AXzWqv&#10;87Ppt9tQkZY/oQ3jFgghMU3JyJll5JZks391Df6mAHbIxg51DuSlKRk0tpjhU4aQPyiPPf84wO6P&#10;9kVyA5Gegkpgmga7PtkblZLKaPnRAECsaVcU4W7XtB3ys/ruz9JyQztkc3BDDQc31HT31FAC6icD&#10;it4zgD7hgqu2u4E/ACPoGI7ljht0++cJoAgYDDQDh3r4LLpQ3cGfIed7K/CWBgQriS+QKT0EgCt8&#10;FwBtwHOEh2QNJDw8u4Dw8KwsOnroTnAAUAOs7EHspgveIjzwI+gIvg1ocP6mg0PfMoLvBQCiNd8V&#10;QpDOvW7dyg8RHp9vaEAJOJ+u8EQPGcDVbr/2DJa2z50XIKQdmwHAUWIAHQgBRyiCjsEZ0DFbhw6A&#10;FnrWV1/Xbr8GhHbnUxe+FcUEGRPQSwbQtd92Ktrv/L1NE7yrjR5nv6Ed4zJBQwoAUHH+Zkdpviv8&#10;Fuce7c49YoHheBK+SPK7N0WlUNcxAaB7/obzKTXNd2fmcM8LamagXXPQjvQCAC4AAxoTBDTh+50t&#10;FEf71XEo/H4TBuped1ATgqlVrN/Z584j4AKlRdtflwAAKokTaGt+hqVpuqv5rVFACB4HzqBIIHiR&#10;wjHd1fzoT5GIGWL5AEHnJF0LlWbrQ3SM0XMB4JqAINCkASDWQ6gED60DwNZoXmcCfxT9H8/Joe6Y&#10;AtGNnIfqCQPoDmBIE4Kh/V2nfneEbjCGD2DEEXR0ulnFSPboGh3UQBjShB/Q/IRQPwOBSCJgkYLm&#10;pwKMZJoeS7kSRgF2lBa6YaDU/qYDQGoA8Ef5AEaCLJ0rKBH1UCoGnQc1IFgaAwW1Z1IxKqG/ank8&#10;AMhugAi6zpNIT7OiZowb2VHCadeo1vW49UygPmef5bCBkcDR0zONKgYAYjGBFeUb2DG0Xnb35Y+R&#10;8GMJPbqjg4wDjGTaTwwHXg/P9TqVUYou3P+kdpL7W7fvlwM/SPBQCigESgmngg9oVJ/MTokUQxeV&#10;DrT3M69f9OL8WO9sAJ85sqrThB0NBDv64kYUCl3t9jja/2fgnLTVhhAolcnXHMW6OBNY48jTimJv&#10;Fe0TmAnCEne6GAtg+vTplJeXY1nx52FM9DKmabJmzRq2bt3K9ddfz1VXXUVra2vS8+Jdu7e/Y10/&#10;0THdvV6ic7Kzs7n33ntZunQplZWVTJw4EcuyegQG95x33nmHI0eOuDL10nWofExWNqMcEV37PRq1&#10;8NOf/pQ5c+b0Cpo//OEPWbhwIcOHD2fChAkxKypeJbh/T/f+ZPfuCbASXVMpRW5uLqWl4RFPc+fO&#10;5e6776alpSXle8W65xe/+EU2bdoE4Ya7fM2R92tKbWnJPKEzQPREUTqKJEB7ezjZZ9t2jyrH4/EQ&#10;DIZ9RZdF/H7/Udf0ngrQpeejAQCPxxOpg2AwSEtLCy0tLb16B00uPsIttSE6T6WvNAdfRTOAiBJ8&#10;NuGmX9tlAq83PGmolD2fk8k0+3f3rlSYKO2pWNMkOzu7k2ntCQCEiPiK+Y5THtDyM3qob0cDINr2&#10;m1qqN+IkfvDBB+Tk5ESYoLt2Mjs7my1btmQ8v6iyZcsWXnjhhU5s2BPWcew/mvJKLWtrEGdCLTPK&#10;4XMZwOdcxABMIQS33347t99++z+lEPoyKnnppZd46aWX0nnJAocBTLo273fJmppRyQgXKa4TaAJS&#10;KcWUKVMYOnRozCgg1Qq0bZvc3Fy+9KUvdbnO0XbOon8LIfB4PElDMXefbdsEAoG0SMjv93PRRRex&#10;efNm2tvbdfruMUA//PBDN6ryOSwQcsJ4fVZ1ESvJ4NM8/1zCc/K7KPICvwSmvvjii1x00UVpqYBQ&#10;KNSnAPB4PNTW1rJhwwYOHz6cUAiufR09ejSTJ09OixPo2v5on6inUYBSihkzZvD5558D3A1sBhqB&#10;euez2dla6WhYU7GiAD0R5PoBEoig37btox6TH22na82aNVx99dWsW7cu5fMKCwt55ZVXmDx5MsFg&#10;sMeC15XAjYrSUY/ad3fBD73FVs/4dirRU67qaWG9zT9pRqu7W18VwzC46667uiV8gMbGRnbt2oVh&#10;9Ps5i7zapq+nEFshYpgEERUaxhW6GxIGg8FuhTFCCLxeb5fKtG07rnalK/Xa2trK1q1be+ws9iV4&#10;U8xi6qu+JZ1ZVe/tozfTioSOgxAEg0Eef/xx/vznP1NXV5cwRdyFdqTE6/WSnZ1NYWEhJ5xwAhMn&#10;TmTs2LFUVVWRn59PMBgkFAodFQbweDz/zJGlntFNJHwViwE67YyHNsMwWLhwITfffHN6ucvrZerU&#10;qVxwwQV861vfYvTo0fj9/m7Z1mR20uv1ctZZZ7F69ep0aFu3ncJUfKDuHB8jWxl3jGciBlBR2aK4&#10;za1SSlpbW3nhhRfSDt1AIMCqVatYtWoVS5YsYf78+Vx55ZUYhtEthklUgsEgN954I7Zt89prr9Hc&#10;3BxhGiEEzc3NNDU1Hc85CDuK1aO7zXVactdMpvGx6L+trU3PPB2VsmfPHq6//nrWr1/P3Xffjcfj&#10;6dQO0ePasW3y8/P55S9/yYIFC6ivr48AwOfzsWjRIu67777jKnEVB0QqjglQ8XwA/QC9N06XCiws&#10;LGT48OF89tlnR/1llyxZQlZWFgsXLkxbIsa2bfx+P16vl7Kysohjl5WVRVFR0T9FcpPOfQDseGZe&#10;RjmASbtW27aNaZrMmzfvmFXW4sWLef311yMNUunUJMuyCIVCkS0dLNNH3n88/61bA0OiT1TxMnnn&#10;n38+7777LqtWreLZZ5/l1VdfjXmDs88+m3POOYdgMIgQAsuyqKmpYf/+/ezYsYO1a9cm9fZDoRD3&#10;338/Z5xxRo960RiGEZ7qXgvh3CbUUCjUJ4mpo3hPRezhcjHHT5hJLpQQBBMnTmTixIk0NjbGBcCZ&#10;Z57JggULYiK3ra2Nv//97zz66KM89dRTCd9q5cqV7Nq1i1GjRnXJoMXLNXg8HqSUHDx4kH379tHY&#10;2MihQ4ewbZtBgwZRWlrKiBEjyMvLIxAIJO0VlCwde7S9/+joQ98SyC+hMscbG5gSD4ZCIUzTTKjB&#10;7r7ozh9KKUzT5IwzzmDWrFmUl5dzxx13xL1OfX09a9asobKyMiYA9OLz+Whra+O1117jxRdf5KOP&#10;PmLLli1dzissLGT8+PGcf/75fPOb36SqqqpX/R36CXvEm+wj5hA6sxsXOiov4vf7kVJy4403snTp&#10;Unbu3Bn3+H379iUUkJthfOutt7jzzjt54403Et6/sbExEnYuXryY+fPnd+qZczzY/xT8gKQ+QPSB&#10;0TbkqBc3spgyZUpCABw+fDguAKSUSClZtGgRN998c8zuZolKTU0NP/rRjygoKOgLu91jFogBgGib&#10;Hyuqi8sAcYWeio3rafzqOmfJkj0+ny9udyghBLfccgsLFy7sVcWmkgTqi65j8YSfYttE3IeUcbRd&#10;cQxH3EopaWhoYO3atQmPKykpiQkSn8/Hww8/3GvhH1eBfnwGiNZ8lcgX6NNemlJKDMPAMAzuv/9+&#10;du/enfD4ioqKLnG6z+fjrbfeSqldwjAMRo4cSVlZGZZlsXfv3qT37K2Tpn/funUrn376KXPnzu2R&#10;9//OO+9QVlZGRUVFqpFA0mImCP3S4gO4LW8+n6/LvubmZrZt28YDDzzAI488kvA65eXlTJo0qQsD&#10;+P1+fvWrX9HW1pbw/DPOOIN58+ZxyimnkJ2dHYksVqxYwR133HFMsppPP/00773zDnPmzOl2vwLb&#10;tnnmmWc4+eSTIwBIMYRPKEeztwhPVl577TXa29sjCRc3/q+trWX79u2sXbs2pXaF2bNnU1pa2imU&#10;83q9vPzyyyxfvjzhuZdffjl33XUXeXl5+P3+CIsMGDCASy+9lJkzZ3LllVeyYsWKoyb8UCjEy0v/&#10;wIJvnMFz//85Lr7k4m6d/87bbzM1t5VHHlzMt7/97bT5HkfdBLz99tu8/fbbvbpGfn4+1157bUx6&#10;ffbZZ5MC584778Tn83Xp0m7bNq2trQwZMoTFixdzwQUXsH379qNSD7t37+bCaeOYVlnG95/6A1/7&#10;+tdSHidh2zb//dij3HNhNYfqj7Bz507Ky8sTpYNTN8PHg8Nz0003UV1d3Un7hRDU1dWxatWqhDZ/&#10;wYIF5Ofnx+yE6lZcIBCgoqKCG264odtxeKr733v3PWZPGoNlKa46dSRPPvlkytd4882/cfpgkxZ/&#10;O+XFhTQ2NqYtPO33AJg3bx7z58/v0jHENE3Wr1/P3r17455bXV3NtGnTIq2IiSo8EAhw7rnnMnTo&#10;0B6Zv2TO2K8XPUBVeSkCD9WVI3jp+edidgqNPt+yLB598CEum3USAb/N9KpR/On5F9IWgvZbAAwf&#10;PpzFixdz2223xXxZwzA4fPhwwibiyZMnU1BQkFILXygUYtiwYYwdOzbt77J//35mDMvFY0iys7zk&#10;euDq6WP43e9+n/Tcv/71r1w0fjDtliI/28fYISWsXPanpOnw4xIApmly4okncuutt7J8+XKuvvrq&#10;iA2MLkIIGhoaEl5v2LBh3Wre9Xq9kVG76Szbtm7jvJPGoZRNfWszPjOb6jFlvPrCcwSDgYSgXPLA&#10;/cz5whg+3LQbwxAcafUzZ/qJ7Nq1q9f2v1dOYKo3LigooKCgoNPxhmGQl5dHXl4eBQUFjBkzhqqq&#10;KiZMmMDUqVMpKioiGAxG5g+Id/9kefvuDkZ1G6jSXf6w9BlunDYUWwmEMNl4qIHRA7K4etZEHn74&#10;Yc4662zq6+qwlXLmbREUFhayaeNGrjx9LKZpsPNwLWdMHI1lK4YNKKK1tbXXOYAeAaC7N7vuuuu4&#10;5ZZbaGtr65T6dTe3h7DH4yEUChEIBBLG9Po1CgsLE967tra2W617Sinq6urSDoCVK/7GHedeibJs&#10;8jwmb3yygYrTTmL6CcN48r+fp3Xjh5xaUcauQ4cYUpTH5poG/r6lhjZ/Gw9+dw6mMPho616uOHM6&#10;tgpSXTmCP7zyl05zLPTbMNAwDLxeb8Kx9sFgsNvjAZRSSQGwcePGiK1Mdm0pJbW1tezYsSOt7791&#10;61b+Y/ZEUAqFIoDACoUjElMKHrjm69Q1NjCwIJ+KoQMpzMomN3snNQ1tXP+VOQhlYQvI8vjwKxuJ&#10;pKq8lCU/vZUF//WjXneWPWY+QHTasrf0FQqFKC8vJy8vL+4xH3/8MVu3bsU0zUijSaxu3e6kDZ98&#10;8ok7y0a3Ur2Jfu/evZsJw8tQKsj+xhaaWo7wv886OZKvE1aIwpxshK0ozM5CoKg/ovjOl6Zj2BZS&#10;gW0pbrnkHD7ath9bSJraWvn30yaxd++ef408QKwSDAYZN24clZWVcY85fPgwjz32GKZpJqwkKSWB&#10;QIDFixenvU/gsldfpay4EGkbDCvMY0TxACyr41mEAkMa4U+gzQ4RsCwKs7zaApyKXI9J9chS/IFw&#10;JrNq2CDq6xr6Ngpw7Wsix8nNeXu9Xrxebydt7G3JycnhnHMST2D24IMP8txzz5GbmxvTH3BN1KJF&#10;i1i2bFlSp7K7z//iq3/FtkLUtbViWzaors2u7lMFlc2SZSs5c+KwTiutgrMOsxDYSrCzrp6AUgSC&#10;gWPvBLrF4/HQ3NzMjh07EjakbN68meXLl+P3+zEMgyFDhlBRUUF2dnavY1nbtrnssst47LHHqK+v&#10;j3mM3+/nmmuu4dChQ1x22WWRiMTtXHrgwAHuu+8+fvOb3yS93yeffMKoUaMoLy8nOzs7aWfW5uYm&#10;phVnMWFYKf5AsKPfg1CYIjxyS1gKrxTU+tv43Zsfc815pyZcKS3LZ1LuHcDZJ1WxYt16Jk2a1Ks6&#10;dKHsDil25wcoAooJTzRwGzD56aef5uKLLyYQCETs5Xe+8x3WrVuXsGetPohUCIFhGFRXV/PQQw9R&#10;VVUV0/nrTgdLn8/HT37yE379618nfdnq6mpmzZrF8OHDsSyLLVu28Oabb6Y8dY3b62jatGksWrSI&#10;ioqKCAhiPfOaNWt4/7F7mTPtBPJ8PmdyqBAfbd3Hsk+3sWnbzvDaiaZkVOkgfn7ZeYRXYgYMRV2L&#10;HytkU5KXjS3CKykqBc3+dvxBxVcXv8Rbry1DKcWcOXPcQa/3E54foBY4THjSyHrC8wO00LHeQs8Y&#10;QAiBbdvcdtttrFmzJiWHSfdUQ6EQK1eu5N577+Whhx7q9WSJ7lCv999/nw8++CDhsatXr+7xmECX&#10;cWzbZuXKlSxatIh77rkn4fGBQIAd9U38Y+dhskwJAl5YtZ6/fLiBYNQ8C5NGDccjJEqBLRT1LQF+&#10;/NTfGDVhChVsY9aECoYV5oIQ5OVkUyoN/Pu2I6XsVSTQbR9ASkl9fT0bN27sFfWsX78+YaKnO0Ip&#10;KSlh8eLFkRay3pZURg+vWbMmqQnbuWsnp1aWclrVKGaMreDkUeW8s24zgahJIYUQjBlaiu14B8L0&#10;cuvvX2F3k5+C4hJ++dRfONLaiq3CTfuhYJDdNXVMGl1GU1NTr/yAHjmB6Rhi7fP50tYFOxAIUFVV&#10;xVNPPUVVVVWvrvW9732P6urqlJ4/mTO4f/9BxgwbjFcoBBZZXsFvrpjLwLycTsdNGDaIOSePi3iH&#10;+2prMUzJkZp9PP7wgyz6z0s5oawkwpamaVIyIJ+po0dSV1d7bKMA27YpKipi+vTpvbrxzJkzIz1z&#10;0lH8fj8nn3wyzz//PHPnzu12pOHxeLjhhhsijU/JyqxZs5Iqwdp16xiQl+NadZSCaWNG8sj3v8oF&#10;U8dz0shSLp0xiXu/OxefaUbWSR5WUMC93/0av/3BN/nddZcye9xQDGdFdonAsMESgmElRTQ1NR+b&#10;KEDvhGjbNrfeeiuhUIgVK1ZQW1ubkh0yTZPi4mLOPfdcrr322h7PjxuvtLe3M3z4cJ544glef/11&#10;HnjgAVatWpWwzSAnJ4fp06czb948Zs+ejZSSCy+8kD179lBfX98JSB6Ph+LiYs455xyuueaapFFA&#10;Y0MDNY2tFJb6EKrD6548Yhj3XDGMQCiIz+PBQiGEBGWjUAhhgG0xumyQM9i/ax1JIag90sboXtZf&#10;ylHA0qVLueSSSyLNr25839DQEHdYVSzh+nw+ioqKIuPyUsm0JQNkPIpua2tj586dvP3222zYsIH6&#10;+noaGxvJyclh4MCBVFZWcvbZZ1NZWYnX6428m5SSpqamLn0Q3HaLgoICLMuKOWFW50RUDXf+v9s5&#10;qxRmjimPBP7KmcJBoMDjQQ0swSgZTM3GA4T8IUpPKkc11CFqa6C9PXwPEWYAd8D3H9/7hFDldC6+&#10;ONy17MILL2Tbtm1HPwpwi6vx7kCKWN589G83y5YobOzu+Lnofe5ztLe3I6Vk9OjRjB8/PjKtTSAQ&#10;wDCMSCdVv9+PZVmdOo1YlkV+fj75+fkx3ymZ8+eeU1xcwv/5xS944okn2fbWe1x8+mSyhMCWBkZe&#10;HvaAYsyiAaBskCbFk8sdYIAsKcEqHoQMtmM1NGG0HEG1toBl88Sb7+OZdDaXfP3rKdXZUWsM6u50&#10;Kcd6EIVrrtzWRbcF0u0LmOiZXLD29h2ysrK48sorePXVYdz+9G/5zgWnUTFpEhgepKs0QmLbNpt2&#10;7Kau8QinTBqPxzCQAvDmYA7OQdlh4D3y+FIGTz0v0rW8zzKBx2NJRweKHtlZITj//PP5QnU1t9zy&#10;U76/1ab6AAAD20lEQVRhZHPuF6fQ5g+Es4FCcOBwI+MqR2BKg937Gxhakh/xP2yl2L53H0tfeo+Z&#10;Z3+VU089NW0KJY9FxaY67Lqn/e1S9Rl6+4y9BcHg0lJ+fc+9+L1l/Oj2JWzauQfbskDZDCkuQtpg&#10;h2yGluQjJaAsGo60sPSVFWyu9TDvxz/jtNNOS+tUdUdlXEBv93f3GnqFxJvnvyfPcDRKTk4OX/7y&#10;l5kwYQLPPP0sK9Q/mHvuDAYPHIAS4UksbCtEUBm88vq7LP9gA5dfcTUnTZ3aZThYn/QI6q/Urrf3&#10;9+VzpMoGFRUV/HD+TXz66afc/cgSxpYX8bV/OxOlbP723hpWfrKZb1z87yy89PsJO9QcMwC4XnM6&#10;5ulxvfH+DqreOLSpHC+lZMqUKdx51918tHIl1/3Xr6g4YRyXXX45X/uP/4w0s0cLOp3mKmUALFu2&#10;jLq6ukjM39OXt22bSZMmccopp2RWD9MihZlnnsmM2bM7CdvNMyTqcXRMACCEYMmSJSxZsiQtNy0v&#10;L2f16tXk5uYeV7NyHYsIJRatp+IcH9XGoHRrqj47Z7po+nhjk1gOXW/epaeRQZ84gW4rYG/n3U3F&#10;++8vq5DFCzljPbP+LrGOTcdsLWnNA/QHR+149yd68i7xlOFfLgz8Z7H7iZy8qLUBu7TOpmOGkFiz&#10;SrgLDaa1NDY2cvrppyftEHIstLq/zRLaXXp392mjpGPNDdQtBoieN7gx3RXgdsjMlLSXI4QXhlJJ&#10;ti4AiBa6O8+8AJ4DVgEDCC9Jmku4/4CPJMuRZMrRJRJHXkFna3GUtY6OdYODdJ41TKViAqKnjG10&#10;frcQXkyygI7FJWUGAH0OALeDRxPhpWIDjuBDUbJUqZgApaEnQHiNuXZH49vpWFbOvUkGAP0HAK0O&#10;ANocWfmdLZSIBaJXDHERY2kX9jvHtdIx1ajHAUDGBPQtAJSmjC2O4F0ABBzhhxKxgM4A+hqz7rrz&#10;huNYuP5AFh3LkXozDNBvGCBEx6qgjQ4IWpxPv+YLpOQEutrvLix9xLkBGrr01cUzAOh7BghpWt/s&#10;fG/VhB+XBcwoNLkrTAedi9iOlrs3MR0WMDSAZErfgiDoyM0fxQRtGgMkBQBRoZ8rWLezv7vgsLvI&#10;tEEmi9hfAGBpZttyFDeoyUxngLg+QPQ6c2gAUM5xrtfvUr+bxsuwQN8JX5dRSANCSGNyXfgqFQbQ&#10;wSCjzED0urQZAPQ9AJQGAD3uD0Xlc5JGAbovoH93x6OENM3POH/9zxmMFrRNkixgIu2NtfK0+5mh&#10;/v7JBHYUIJKuGJZMiCLFz0zpP6YglsATtgb+D3dmYYcUb3qtAAAAAElFTkSuQmCC&#10;"
+       id="image1" />
+  </g>
 </svg>
diff --git a/packages/linux_make/Makefile b/packages/linux_make/Makefile
index 1c99a7cdca9e28cca6b7671f86014ba3e6a31020..d6406236b9fbd2e43e8031c77f4dc73043be48e8 100644
--- a/packages/linux_make/Makefile
+++ b/packages/linux_make/Makefile
@@ -62,7 +62,6 @@ install:
 # link pd-l2ork -> purr-data since our desktop files expect it
 	ln -sf pd-l2ork $(DESTDIR)/$(prefix)/bin/purr-data
 	$(MAKE) -C $(packages_src) $(DEST_PATHS) doc_format
-	find $(DESTDIR) -name \*.pd -print0 | xargs -0 chmod a-x
 	@echo " "
 	@echo "linux_make install succeeded!"
 
@@ -82,12 +81,21 @@ endif
 
 package: $(PACKAGE_TYPE)
 
+sanitize:
+# Sanitize permissions.
+	chmod -R go-w $(DESTDIR)*
+	chmod -R a+r $(DESTDIR)*
+	chmod a-x $(DESTDIR)$(prefix)/lib/pd-l2ork/default.settings
+	find $(DESTDIR)$(prefix)/lib/pd-l2ork/bin/nw -executable -not -type d -exec chmod a+x {} +
+	for x in dat osc pd pdf txt xml aif aiff gif png ppm xcf mp3 mid wav; do find $(DESTDIR) -executable -not -type d -name \*.$$x -exec chmod a-x {} +; done
+	find $(DESTDIR) -type d -exec chmod a+x {} +
 
 tarbz2: installer_settings installer_makefile installer_readme
 	mv $(DESTDIR)$(prefix) $(DESTDIR)$(PACKAGE_NAME)
 	cd $(DESTDIR) && \
 		tar cjf $(PACKAGE_NAME).tar.bz2  $(PACKAGE_NAME)
 	mv $(DESTDIR)$(PACKAGE_NAME) $(DESTDIR)$(prefix)
+	$(MAKE) sanitize
 
 # Any special staging for the "Burrito Supreme" installer goes here.
 debstage: $(bindir)
@@ -125,6 +133,7 @@ endif
 	install -d $(DESTDIR)/usr/share/emacs/site-lisp/
 	install -p -m0644 $(scripts_src)/pd-l2ork-mode.el \
 		$(DESTDIR)/usr/share/emacs/site-lisp/
+	$(MAKE) sanitize
 
 ifeq ($(PACKAGE_TYPE),deb)
 deb: DEB_BUILD_ARCH := $(shell dpkg-architecture -qDEB_BUILD_ARCH)
@@ -156,11 +165,12 @@ deb: debstage
 # add auto-generated dependencies
 	sed -i 's!^\(Depends:.*\)!\1 $(PACKAGE_DEPENDS)!' $(DESTDIR)/DEBIAN/control
 # sanitize permissions
-	chmod -R go-w $(DESTDIR)
-	chmod -R a+r $(DESTDIR)
-	find $(DESTDIR) -name \*.pd_linux | xargs chmod a-x
-	find $(DESTDIR) -name \*.pd | xargs chmod a-x
-	find $(DESTDIR) -type d | xargs chmod a+x
+# shouldn't be needed any more, as debstage already does this
+#	chmod -R go-w $(DESTDIR)
+#	chmod -R a+r $(DESTDIR)
+#	find $(DESTDIR) -name \*.pd_linux | xargs chmod a-x
+#	find $(DESTDIR) -name \*.pd | xargs chmod a-x
+#	find $(DESTDIR) -type d | xargs chmod a+x
 	fakeroot dpkg-deb --build $(DESTDIR) $(packages_src)/linux_make/$(PACKAGE_NAME).deb
 
 
diff --git a/packages/win32_inno/pd-inno-light.iss.in b/packages/win32_inno/pd-inno-light.iss.in
index 3f8c3826c9e81c7f4e6f40c3a01eab169658adfb..fc8a13d0fa67556065c9753b84a3ca36d54abc46 100644
--- a/packages/win32_inno/pd-inno-light.iss.in
+++ b/packages/win32_inno/pd-inno-light.iss.in
@@ -18,6 +18,8 @@ LicenseFile=..\gpl-3.0.txt
 DisableWelcomePage=no
 UninstallDisplayIcon={app}\lib\pdPatch_catGraphics.ico
 
+PrivilegesRequired=admin
+
 Compression=lzma/ultra
 ChangesAssociations=true
 OutputBaseFilename=Purr-Data-PD_VERSION-x86
@@ -68,622 +70,622 @@ Type: files; Name: {app}\pd-tutorial.url
 Type: files; Name: {app}\techniques.url
 
 [Registry]
-Root: HKCR; SubKey: Purr.Data; ValueType: dword; ValueName: EditFlags; ValueData: $00000000; Flags: noerror uninsdeletekey; Tasks: fileassociations; Permissions: users-modify
-Root: HKCR; SubKey: Purr.Data; ValueType: dword; ValueName: BrowserFlags; ValueData: $00000008; Flags: uninsdeletekey noerror; Tasks: fileassociations
-Root: HKCR; SubKey: Purr.Data; ValueType: string; ValueData: Purr Data; Flags: uninsdeletekey noerror; Tasks: fileassociations
-Root: HKCR; SubKey: Purr.Data\DefaultIcon; ValueType: string; ValueData: {app}\lib\pdpatch.ico,0; Flags: createvalueifdoesntexist noerror; Tasks: fileassociations
-Root: HKCR; SubKey: Purr.Data\shell; ValueType: string; ValueData: open; Flags: noerror uninsdeletekey; Tasks: fileassociations
-Root: HKCR; SubKey: Purr.Data\shell\open\command; ValueType: string; ValueData: """{app}\bin\pd.exe"" -listdev ""%1"""; Flags: uninsdeletekey noerror; Tasks: fileassociations
-Root: HKCR; SubKey: .pd; ValueType: string; ValueData: Purr.Data; Flags: noerror uninsdeletekey; Tasks: fileassociations
+Root: HKCR; SubKey: Purr-Data; ValueType: dword; ValueName: EditFlags; ValueData: $00000000; Flags: noerror uninsdeletekey; Tasks: fileassociations; Permissions: users-modify
+Root: HKCR; SubKey: Purr-Data; ValueType: dword; ValueName: BrowserFlags; ValueData: $00000008; Flags: uninsdeletekey noerror; Tasks: fileassociations
+Root: HKCR; SubKey: Purr-Data; ValueType: string; ValueData: Purr Data; Flags: uninsdeletekey noerror; Tasks: fileassociations
+Root: HKCR; SubKey: Purr-Data\DefaultIcon; ValueType: string; ValueData: {app}\lib\pdpatch.ico,0; Flags: createvalueifdoesntexist noerror; Tasks: fileassociations
+Root: HKCR; SubKey: Purr-Data\shell; ValueType: string; ValueData: open; Flags: noerror uninsdeletekey; Tasks: fileassociations
+Root: HKCR; SubKey: Purr-Data\shell\open\command; ValueType: string; ValueData: """{app}\bin\pd.exe"" -listdev ""%1"""; Flags: uninsdeletekey noerror; Tasks: fileassociations
+Root: HKCR; SubKey: .pd; ValueType: string; ValueData: Purr-Data; Flags: noerror uninsdeletekey; Tasks: fileassociations
 Root: HKCR; SubKey: .pd; ValueType: string; ValueName: Content Type; ValueData: text/plain; Flags: noerror uninsdeletekey; Tasks: fileassociations
 ;
 ; STARTHERE: add pd-inno_registry after this comment:
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: flags; ValueData: ; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: flags; ValueData: ; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: flags; ValueData: ; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib1; ValueData: libdir; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib1; ValueData: libdir; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib1; ValueData: libdir; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib2; ValueData: pddp; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib2; ValueData: pddp; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib2; ValueData: pddp; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: nloadlib; ValueData: 2; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: nloadlib; ValueData: 2; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: nloadlib; ValueData: 2; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib3; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib3; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib3; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib4; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib4; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib4; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib5; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib5; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib5; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib6; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib6; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib6; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib7; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib7; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib7; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib8; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib8; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib8; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib9; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib9; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib9; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib10; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib10; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib10; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib11; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib11; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib11; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib12; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib12; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib12; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib13; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib13; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib13; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib14; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib14; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib14; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib15; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib15; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib15; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib16; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib16; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib16; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib17; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib17; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib17; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib18; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib18; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib18; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib19; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib19; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib19; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib20; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib20; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib20; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib21; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib21; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib21; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib22; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib22; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib22; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib23; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib23; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib23; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib24; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib24; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib24; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib25; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib25; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib25; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib26; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib26; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib26; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib27; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib27; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib27; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib28; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib28; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib28; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib29; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib29; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib29; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib30; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib30; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib30; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib31; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib31; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib31; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib32; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib32; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib32; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib33; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib33; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib33; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib34; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib34; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib34; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib35; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib35; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib35; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib36; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib36; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib36; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib37; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib37; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib37; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib38; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib38; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib38; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib39; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib39; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib39; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib40; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib40; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib40; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib41; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib41; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib41; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib42; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib42; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib42; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib43; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib43; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib43; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib44; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib44; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib44; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib45; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib45; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib45; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib46; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib46; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib46; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib47; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib47; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib47; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib48; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib48; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib48; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib49; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib49; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib49; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib50; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib50; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib50; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib51; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib51; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib51; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib52; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib52; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib52; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib53; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib53; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib53; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib54; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib54; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib54; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib55; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib55; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib55; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib56; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib56; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib56; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib57; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib57; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib57; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib58; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib58; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib58; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib59; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib59; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib59; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib60; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib60; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib60; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib61; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib61; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib61; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib62; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib62; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib62; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib63; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib63; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib63; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib64; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib64; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib64; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib65; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib65; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib65; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib66; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib66; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib66; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib67; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib67; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib67; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib68; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib68; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib68; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib69; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib69; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib69; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib70; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib70; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib70; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib71; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib71; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib71; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib72; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib72; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib72; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib73; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib73; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib73; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib74; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib74; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib74; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib75; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib75; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib75; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib76; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib76; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib76; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib77; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib77; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib77; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib78; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib78; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib78; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib79; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib79; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib79; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib80; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib80; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib80; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib81; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib81; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib81; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib82; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib82; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib82; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib83; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib83; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib83; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib84; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib84; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib84; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib85; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib85; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib85; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib86; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib86; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib86; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib87; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib87; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib87; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib88; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib88; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib88; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib89; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib89; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib89; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib90; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib90; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib90; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib91; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib91; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib91; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib92; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib92; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib92; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib93; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib93; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib93; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib94; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib94; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib94; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib95; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib95; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib95; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib96; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib96; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib96; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib97; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib97; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib97; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib98; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib98; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib98; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib99; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib99; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib99; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib100; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib100; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib100; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: expandsz; ValueName: path1; ValueData: %SystemRoot%/Fonts; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: expandsz; ValueName: path1; ValueData: %SystemRoot%/Fonts; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: expandsz; ValueName: path1; ValueData: %SystemRoot%/Fonts; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path2; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path2; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path2; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path3; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path3; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path3; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path4; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path4; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path4; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path5; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path5; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path5; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path6; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path6; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path6; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path7; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path7; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path7; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path8; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path8; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path8; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path9; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path9; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path9; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path10; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path10; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path10; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path11; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path11; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path11; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path12; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path12; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path12; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path13; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path13; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path13; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path14; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path14; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path14; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path15; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path15; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path15; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path16; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path16; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path16; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path17; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path17; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path17; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path18; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path18; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path18; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path19; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path19; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path19; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path20; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path20; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path20; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path21; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path21; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path21; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path22; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path22; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path22; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path23; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path23; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path23; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path24; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path24; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path24; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path25; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path25; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path25; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path26; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path26; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path26; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path27; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path27; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path27; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path28; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path28; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path28; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path29; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path29; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path29; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path30; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path30; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path30; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path31; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path31; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path31; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path32; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path32; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path32; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path33; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path33; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path33; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path34; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path34; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path34; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path35; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path35; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path35; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path36; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path36; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path36; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path37; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path37; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path37; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path38; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path38; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path38; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path39; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path39; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path39; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path40; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path40; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path40; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path41; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path41; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path41; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path42; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path42; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path42; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path43; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path43; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path43; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path44; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path44; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path44; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path45; Tasks: libs; Flags: uninsdeletekey
-Root: HKCu; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path45; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path45; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path46; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path46; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path46; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path47; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path47; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path47; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path48; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path48; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path48; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path49; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path49; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path49; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path50; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path50; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path50; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path51; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path51; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path51; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path52; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path52; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path52; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path53; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path53; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path53; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path54; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path54; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path54; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path55; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path55; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path55; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path56; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path56; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path56; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path57; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path57; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path57; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path58; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path58; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path58; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path59; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path59; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path59; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path60; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path60; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path60; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path61; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path61; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path61; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path62; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path62; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path62; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path63; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path63; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path63; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path64; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path64; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path64; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path65; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path65; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path65; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path66; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path66; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path66; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path67; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path67; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path67; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path68; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path68; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path68; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path69; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path69; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path69; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path70; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path70; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path70; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path71; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path71; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path71; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path72; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path72; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path72; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path73; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path73; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path73; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path74; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path74; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path74; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path75; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path75; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path75; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path76; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path76; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path76; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path77; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path77; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path77; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path78; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path78; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path78; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path79; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path79; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path79; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path80; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path80; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path80; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path81; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path81; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path81; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path82; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path82; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path82; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path83; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path83; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path83; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path84; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path84; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path84; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path85; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path85; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path85; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path86; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path86; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path86; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path87; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path87; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path87; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path88; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path88; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path88; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path89; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path89; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path89; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path90; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path90; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path90; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path91; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path91; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path91; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path92; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path92; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path92; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path93; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path93; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path93; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path94; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path94; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path94; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path95; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path95; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path95; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path96; Tasks: libs; Flags: uninsdeletekey
-Root: HKCu; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path96; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path96; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path97; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path97; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path97; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path98; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path98; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path98; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path99; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path99; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path99; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path100; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path100; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path100; Tasks: libs; Flags: uninsdeletekey
 
 ; ENDHERE: add pd-inno_registry before this comment:
 
@@ -769,24 +771,45 @@ Source: build\lib\*.*; DestDir: {app}\lib; Flags: ignoreversion recursesubdirs
 ;Source: build\tcl\*.*; DestDir: {app}\tcl; Flags: ignoreversion recursesubdirs
 
 [Code]
+
+function UninsName(): String;
+var Name: String; var i: Integer;
+begin
+  // not sure why, but it seems that this name keeps changing if the
+  // installation is done unattended (/SILENT /SUPPRESSMSGBOXES)
+  for i := 0 to 8 do begin // this may be overkill, but to be on the safe side
+    Name := ExpandConstant('{app}\unins00'+IntToStr(i)+'.exe');
+    if FileExists(Name) then begin
+      Result := Name;
+      Exit;
+    end;
+  end;
+  Result := '';
+end;
+
 function NextButtonClick(CurPageID: Integer): Boolean;
-var
-  ResultCode: Integer;
+var ResultCode: Integer; UninsCmd, AppDir, ErrMsg: String;
 begin
+  Result := True;
   case CurPageID of
     wpReady:
       begin
-		if(FileExists(ExpandConstant('{app}\unins000.exe')) AND FileExists(ExpandConstant('{app}\bin\pd.exe'))) then begin
-			if MsgBox('Found a previous Version of Pure Data at ' + ExpandConstant('{app} ') + #13#13 'Do you want to uninstall it first? (recommended)', mbConfirmation, MB_YESNO) = idYes then begin
-			if not Exec(ExpandConstant('{app}\unins000.exe'), '', '', SW_SHOWNORMAL, ewWaitUntilTerminated, ResultCode) then
-            MsgBox('Error:' #13#13 'The uninstall file could not be executed. ' + SysErrorMessage(ResultCode) + '.', mbError, MB_OK);
-			end;
-		end;
+        UninsCmd := UninsName();
+        AppDir := ExpandConstant('{app}');
+        ErrMsg := 'Installation cannot proceed until ' + AppDir + ' is removed.';
+        if FileExists(ExpandConstant('{app}\bin\pd.exe')) then begin
+          SuppressibleMsgBox('Found a previous version of Purr-Data at ' + AppDir + #13#13 'The installer will first uninstall the old version. Your preferences will be preserved.', mbInformation, MB_OK, MB_OK);
+          Result := False;
+          if UninsCmd = '' then
+            MsgBox('Error:' #13#13 'The uninstall file could not be located. ' + ErrMsg, mbError, MB_OK)
+          else if not Exec(UninsCmd, '/SILENT', '', SW_SHOWNORMAL, ewWaitUntilTerminated, ResultCode) then
+            MsgBox('Error:' #13#13 'The uninstall file could not be executed. ' + SysErrorMessage(ResultCode) + '. ' + ErrMsg, mbError, MB_OK)
+          else
+            Result := True;
+        end;
         BringToFrontAndRestore();
-        MsgBox('Note:' #13#13 'The installation will now start.', mbInformation, MB_OK);
+        if Result then SuppressibleMsgBox('Purr-Data will now be installed on your computer.', mbInformation, MB_OK, MB_OK);
       end;
   end;
-
-  Result := True;
 end;
 
diff --git a/packages/win32_inno/pd-inno.iss.in b/packages/win32_inno/pd-inno.iss.in
index a8b64f96cfab436241567d121d6aefff4b93c0f0..19865ca4d7a85df4dde43e7d16eac719a8d1ba76 100755
--- a/packages/win32_inno/pd-inno.iss.in
+++ b/packages/win32_inno/pd-inno.iss.in
@@ -18,6 +18,8 @@ LicenseFile=..\gpl-3.0.txt
 DisableWelcomePage=no
 UninstallDisplayIcon={app}\lib\pdPatch_catGraphics.ico
 
+PrivilegesRequired=admin
+
 Compression=lzma/ultra
 ChangesAssociations=true
 OutputBaseFilename=Purr-Data-PD_VERSION-x86
@@ -68,622 +70,622 @@ Type: files; Name: {app}\pd-tutorial.url
 Type: files; Name: {app}\techniques.url
 
 [Registry]
-Root: HKCR; SubKey: Purr.Data; ValueType: dword; ValueName: EditFlags; ValueData: $00000000; Flags: noerror uninsdeletekey; Tasks: fileassociations; Permissions: users-modify
-Root: HKCR; SubKey: Purr.Data; ValueType: dword; ValueName: BrowserFlags; ValueData: $00000008; Flags: uninsdeletekey noerror; Tasks: fileassociations
-Root: HKCR; SubKey: Purr.Data; ValueType: string; ValueData: Purr Data; Flags: uninsdeletekey noerror; Tasks: fileassociations
-Root: HKCR; SubKey: Purr.Data\DefaultIcon; ValueType: string; ValueData: {app}\lib\pdpatch.ico,0; Flags: createvalueifdoesntexist noerror; Tasks: fileassociations
-Root: HKCR; SubKey: Purr.Data\shell; ValueType: string; ValueData: open; Flags: noerror uninsdeletekey; Tasks: fileassociations
-Root: HKCR; SubKey: Purr.Data\shell\open\command; ValueType: string; ValueData: """{app}\bin\pd.exe"" -listdev ""%1"""; Flags: uninsdeletekey noerror; Tasks: fileassociations
-Root: HKCR; SubKey: .pd; ValueType: string; ValueData: Purr.Data; Flags: noerror uninsdeletekey; Tasks: fileassociations
+Root: HKCR; SubKey: Purr-Data; ValueType: dword; ValueName: EditFlags; ValueData: $00000000; Flags: noerror uninsdeletekey; Tasks: fileassociations; Permissions: users-modify
+Root: HKCR; SubKey: Purr-Data; ValueType: dword; ValueName: BrowserFlags; ValueData: $00000008; Flags: uninsdeletekey noerror; Tasks: fileassociations
+Root: HKCR; SubKey: Purr-Data; ValueType: string; ValueData: Purr Data; Flags: uninsdeletekey noerror; Tasks: fileassociations
+Root: HKCR; SubKey: Purr-Data\DefaultIcon; ValueType: string; ValueData: {app}\lib\pdpatch.ico,0; Flags: createvalueifdoesntexist noerror; Tasks: fileassociations
+Root: HKCR; SubKey: Purr-Data\shell; ValueType: string; ValueData: open; Flags: noerror uninsdeletekey; Tasks: fileassociations
+Root: HKCR; SubKey: Purr-Data\shell\open\command; ValueType: string; ValueData: """{app}\bin\pd.exe"" -listdev ""%1"""; Flags: uninsdeletekey noerror; Tasks: fileassociations
+Root: HKCR; SubKey: .pd; ValueType: string; ValueData: Purr-Data; Flags: noerror uninsdeletekey; Tasks: fileassociations
 Root: HKCR; SubKey: .pd; ValueType: string; ValueName: Content Type; ValueData: text/plain; Flags: noerror uninsdeletekey; Tasks: fileassociations
 ;
 ; STARTHERE: add pd-inno_registry after this comment:
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: flags; ValueData: ; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: flags; ValueData: ; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: flags; ValueData: ; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib1; ValueData: libdir; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib1; ValueData: libdir; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib1; ValueData: libdir; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib2; ValueData: Gem; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib2; ValueData: Gem; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib2; ValueData: Gem; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib3; ValueData: cyclone; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib3; ValueData: cyclone; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib3; ValueData: cyclone; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib4; ValueData: zexy; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib4; ValueData: zexy; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib4; ValueData: zexy; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib5; ValueData: creb; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib5; ValueData: creb; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib5; ValueData: creb; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib6; ValueData: cxc; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib6; ValueData: cxc; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib6; ValueData: cxc; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib7; ValueData: iemlib; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib7; ValueData: iemlib; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib7; ValueData: iemlib; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib8; ValueData: list-abs; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib8; ValueData: list-abs; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib8; ValueData: list-abs; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib9; ValueData: mapping; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib9; ValueData: mapping; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib9; ValueData: mapping; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib10; ValueData: markex; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib10; ValueData: markex; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib10; ValueData: markex; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib11; ValueData: maxlib; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib11; ValueData: maxlib; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib11; ValueData: maxlib; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib12; ValueData: memento; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib12; ValueData: memento; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib12; ValueData: memento; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib13; ValueData: mjlib; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib13; ValueData: mjlib; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib13; ValueData: mjlib; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib14; ValueData: motex; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib14; ValueData: motex; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib14; ValueData: motex; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib15; ValueData: oscx; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib15; ValueData: oscx; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib15; ValueData: oscx; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib16; ValueData: pddp; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib16; ValueData: pddp; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib16; ValueData: pddp; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib17; ValueData: pdogg; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib17; ValueData: pdogg; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib17; ValueData: pdogg; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib18; ValueData: pixeltango; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib18; ValueData: pixeltango; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib18; ValueData: pixeltango; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib19; ValueData: pmpd; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib19; ValueData: pmpd; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib19; ValueData: pmpd; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib20; ValueData: rradical; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib20; ValueData: rradical; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib20; ValueData: rradical; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib21; ValueData: sigpack; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib21; ValueData: sigpack; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib21; ValueData: sigpack; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib22; ValueData: smlib; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib22; ValueData: smlib; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib22; ValueData: smlib; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib23; ValueData: unauthorized; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib23; ValueData: unauthorized; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib23; ValueData: unauthorized; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib24; ValueData: vbap; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib24; ValueData: vbap; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib24; ValueData: vbap; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib25; ValueData: pan; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib25; ValueData: pan; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib25; ValueData: pan; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib26; ValueData: freeverb~; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib26; ValueData: freeverb~; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib26; ValueData: freeverb~; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib27; ValueData: hcs; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib27; ValueData: hcs; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib27; ValueData: hcs; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib28; ValueData: jmmmp; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib28; ValueData: jmmmp; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib28; ValueData: jmmmp; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib29; ValueData: ext13; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib29; ValueData: ext13; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib29; ValueData: ext13; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib30; ValueData: ggee; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib30; ValueData: ggee; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib30; ValueData: ggee; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib31; ValueData: iem_anything; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib31; ValueData: iem_anything; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib31; ValueData: iem_anything; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib32; ValueData: ekext; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib32; ValueData: ekext; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib32; ValueData: ekext; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib33; ValueData: disis; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib33; ValueData: disis; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib33; ValueData: disis; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib34; ValueData: lyonpotpourri; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib34; ValueData: lyonpotpourri; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib34; ValueData: lyonpotpourri; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib35; ValueData: pdlua; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib35; ValueData: pdlua; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib35; ValueData: pdlua; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: nloadlib; ValueData: 35; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: nloadlib; ValueData: 35; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: nloadlib; ValueData: 35; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib36; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib36; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib36; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib37; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib37; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib37; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib38; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib38; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib38; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib39; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib39; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib39; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib40; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib40; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib40; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib41; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib41; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib41; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib42; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib42; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib42; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib43; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib43; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib43; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib44; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib44; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib44; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib45; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib45; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib45; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib46; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib46; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib46; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib47; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib47; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib47; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib48; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib48; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib48; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib49; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib49; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib49; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib50; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib50; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib50; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib51; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib51; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib51; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib52; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib52; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib52; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib53; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib53; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib53; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib54; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib54; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib54; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib55; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib55; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib55; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib56; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib56; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib56; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib57; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib57; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib57; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib58; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib58; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib58; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib59; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib59; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib59; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib60; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib60; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib60; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib61; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib61; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib61; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib62; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib62; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib62; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib63; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib63; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib63; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib64; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib64; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib64; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib65; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib65; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib65; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib66; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib66; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib66; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib67; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib67; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib67; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib68; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib68; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib68; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib69; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib69; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib69; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib70; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib70; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib70; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib71; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib71; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib71; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib72; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib72; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib72; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib73; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib73; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib73; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib74; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib74; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib74; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib75; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib75; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib75; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib76; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib76; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib76; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib77; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib77; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib77; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib78; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib78; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib78; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib79; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib79; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib79; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib80; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib80; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib80; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib81; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib81; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib81; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib82; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib82; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib82; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib83; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib83; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib83; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib84; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib84; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib84; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib85; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib85; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib85; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib86; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib86; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib86; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib87; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib87; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib87; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib88; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib88; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib88; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib89; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib89; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib89; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib90; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib90; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib90; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib91; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib91; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib91; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib92; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib92; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib92; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib93; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib93; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib93; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib94; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib94; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib94; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib95; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib95; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib95; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib96; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib96; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib96; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib97; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib97; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib97; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib98; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib98; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib98; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib99; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib99; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib99; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib100; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib100; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib100; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: expandsz; ValueName: path1; ValueData: %SystemRoot%/Fonts; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: expandsz; ValueName: path1; ValueData: %SystemRoot%/Fonts; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: expandsz; ValueName: path1; ValueData: %SystemRoot%/Fonts; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path2; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path2; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path2; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path3; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path3; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path3; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path4; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path4; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path4; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path5; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path5; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path5; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path6; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path6; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path6; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path7; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path7; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path7; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path8; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path8; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path8; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path9; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path9; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path9; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path10; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path10; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path10; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path11; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path11; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path11; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path12; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path12; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path12; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path13; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path13; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path13; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path14; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path14; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path14; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path15; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path15; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path15; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path16; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path16; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path16; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path17; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path17; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path17; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path18; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path18; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path18; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path19; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path19; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path19; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path20; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path20; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path20; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path21; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path21; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path21; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path22; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path22; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path22; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path23; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path23; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path23; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path24; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path24; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path24; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path25; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path25; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path25; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path26; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path26; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path26; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path27; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path27; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path27; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path28; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path28; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path28; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path29; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path29; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path29; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path30; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path30; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path30; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path31; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path31; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path31; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path32; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path32; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path32; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path33; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path33; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path33; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path34; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path34; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path34; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path35; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path35; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path35; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path36; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path36; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path36; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path37; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path37; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path37; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path38; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path38; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path38; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path39; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path39; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path39; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path40; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path40; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path40; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path41; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path41; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path41; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path42; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path42; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path42; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path43; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path43; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path43; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path44; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path44; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path44; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path45; Tasks: libs; Flags: uninsdeletekey
-Root: HKCu; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path45; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path45; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path46; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path46; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path46; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path47; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path47; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path47; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path48; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path48; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path48; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path49; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path49; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path49; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path50; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path50; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path50; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path51; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path51; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path51; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path52; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path52; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path52; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path53; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path53; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path53; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path54; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path54; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path54; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path55; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path55; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path55; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path56; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path56; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path56; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path57; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path57; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path57; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path58; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path58; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path58; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path59; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path59; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path59; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path60; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path60; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path60; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path61; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path61; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path61; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path62; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path62; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path62; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path63; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path63; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path63; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path64; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path64; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path64; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path65; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path65; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path65; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path66; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path66; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path66; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path67; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path67; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path67; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path68; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path68; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path68; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path69; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path69; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path69; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path70; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path70; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path70; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path71; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path71; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path71; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path72; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path72; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path72; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path73; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path73; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path73; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path74; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path74; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path74; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path75; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path75; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path75; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path76; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path76; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path76; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path77; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path77; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path77; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path78; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path78; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path78; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path79; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path79; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path79; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path80; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path80; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path80; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path81; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path81; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path81; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path82; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path82; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path82; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path83; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path83; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path83; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path84; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path84; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path84; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path85; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path85; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path85; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path86; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path86; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path86; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path87; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path87; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path87; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path88; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path88; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path88; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path89; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path89; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path89; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path90; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path90; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path90; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path91; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path91; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path91; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path92; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path92; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path92; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path93; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path93; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path93; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path94; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path94; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path94; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path95; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path95; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path95; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path96; Tasks: libs; Flags: uninsdeletekey
-Root: HKCu; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path96; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path96; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path97; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path97; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path97; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path98; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path98; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path98; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path99; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path99; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path99; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path100; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path100; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path100; Tasks: libs; Flags: uninsdeletekey
 
 ; ENDHERE: add pd-inno_registry before this comment:
 
@@ -769,24 +771,45 @@ Source: build\lib\*.*; DestDir: {app}\lib; Flags: ignoreversion recursesubdirs
 ;Source: build\tcl\*.*; DestDir: {app}\tcl; Flags: ignoreversion recursesubdirs
 
 [Code]
+
+function UninsName(): String;
+var Name: String; var i: Integer;
+begin
+  // not sure why, but it seems that this name keeps changing if the
+  // installation is done unattended (/SILENT /SUPPRESSMSGBOXES)
+  for i := 0 to 8 do begin // this may be overkill, but to be on the safe side
+    Name := ExpandConstant('{app}\unins00'+IntToStr(i)+'.exe');
+    if FileExists(Name) then begin
+      Result := Name;
+      Exit;
+    end;
+  end;
+  Result := '';
+end;
+
 function NextButtonClick(CurPageID: Integer): Boolean;
-var
-  ResultCode: Integer;
+var ResultCode: Integer; UninsCmd, AppDir, ErrMsg: String;
 begin
+  Result := True;
   case CurPageID of
     wpReady:
       begin
-		if(FileExists(ExpandConstant('{app}\unins000.exe')) AND FileExists(ExpandConstant('{app}\bin\pd.exe'))) then begin
-			if MsgBox('Found a previous Version of Pure Data at ' + ExpandConstant('{app} ') + #13#13 'Do you want to uninstall it first? (recommended)', mbConfirmation, MB_YESNO) = idYes then begin
-			if not Exec(ExpandConstant('{app}\unins000.exe'), '', '', SW_SHOWNORMAL, ewWaitUntilTerminated, ResultCode) then
-            MsgBox('Error:' #13#13 'The uninstall file could not be executed. ' + SysErrorMessage(ResultCode) + '.', mbError, MB_OK);
-			end;
-		end;
+        UninsCmd := UninsName();
+        AppDir := ExpandConstant('{app}');
+        ErrMsg := 'Installation cannot proceed until ' + AppDir + ' is removed.';
+        if FileExists(ExpandConstant('{app}\bin\pd.exe')) then begin
+          SuppressibleMsgBox('Found a previous version of Purr-Data at ' + AppDir + #13#13 'The installer will first uninstall the old version. Your preferences will be preserved.', mbInformation, MB_OK, MB_OK);
+          Result := False;
+          if UninsCmd = '' then
+            MsgBox('Error:' #13#13 'The uninstall file could not be located. ' + ErrMsg, mbError, MB_OK)
+          else if not Exec(UninsCmd, '/SILENT', '', SW_SHOWNORMAL, ewWaitUntilTerminated, ResultCode) then
+            MsgBox('Error:' #13#13 'The uninstall file could not be executed. ' + SysErrorMessage(ResultCode) + '. ' + ErrMsg, mbError, MB_OK)
+          else
+            Result := True;
+        end;
         BringToFrontAndRestore();
-        MsgBox('Note:' #13#13 'The installation will now start.', mbInformation, MB_OK);
+        if Result then SuppressibleMsgBox('Purr-Data will now be installed on your computer.', mbInformation, MB_OK, MB_OK);
       end;
   end;
-
-  Result := True;
 end;
 
diff --git a/packages/win64_inno/pd-inno-light.iss.in b/packages/win64_inno/pd-inno-light.iss.in
index a749b195132ec5be28a74e33c7b49a608efebeea..9e2813743f3b50a5e21a8a188c28b8b7f4e077b9 100644
--- a/packages/win64_inno/pd-inno-light.iss.in
+++ b/packages/win64_inno/pd-inno-light.iss.in
@@ -18,6 +18,8 @@ LicenseFile=..\gpl-3.0.txt
 DisableWelcomePage=no
 UninstallDisplayIcon={app}\lib\pdPatch_catGraphics.ico
 
+PrivilegesRequired=admin
+
 Compression=lzma/ultra
 ChangesAssociations=true
 OutputBaseFilename=Purr-Data-PD_VERSION-x86_64
@@ -68,622 +70,622 @@ Type: files; Name: {app}\pd-tutorial.url
 Type: files; Name: {app}\techniques.url
 
 [Registry]
-Root: HKCR; SubKey: Purr.Data; ValueType: dword; ValueName: EditFlags; ValueData: $00000000; Flags: noerror uninsdeletekey; Tasks: fileassociations; Permissions: users-modify
-Root: HKCR; SubKey: Purr.Data; ValueType: dword; ValueName: BrowserFlags; ValueData: $00000008; Flags: uninsdeletekey noerror; Tasks: fileassociations
-Root: HKCR; SubKey: Purr.Data; ValueType: string; ValueData: Purr Data; Flags: uninsdeletekey noerror; Tasks: fileassociations
-Root: HKCR; SubKey: Purr.Data\DefaultIcon; ValueType: string; ValueData: {app}\lib\pdpatch.ico,0; Flags: createvalueifdoesntexist noerror; Tasks: fileassociations
-Root: HKCR; SubKey: Purr.Data\shell; ValueType: string; ValueData: open; Flags: noerror uninsdeletekey; Tasks: fileassociations
-Root: HKCR; SubKey: Purr.Data\shell\open\command; ValueType: string; ValueData: """{app}\bin\pd.exe"" -listdev ""%1"""; Flags: uninsdeletekey noerror; Tasks: fileassociations
-Root: HKCR; SubKey: .pd; ValueType: string; ValueData: Purr.Data; Flags: noerror uninsdeletekey; Tasks: fileassociations
+Root: HKCR; SubKey: Purr-Data; ValueType: dword; ValueName: EditFlags; ValueData: $00000000; Flags: noerror uninsdeletekey; Tasks: fileassociations; Permissions: users-modify
+Root: HKCR; SubKey: Purr-Data; ValueType: dword; ValueName: BrowserFlags; ValueData: $00000008; Flags: uninsdeletekey noerror; Tasks: fileassociations
+Root: HKCR; SubKey: Purr-Data; ValueType: string; ValueData: Purr Data; Flags: uninsdeletekey noerror; Tasks: fileassociations
+Root: HKCR; SubKey: Purr-Data\DefaultIcon; ValueType: string; ValueData: {app}\lib\pdpatch.ico,0; Flags: createvalueifdoesntexist noerror; Tasks: fileassociations
+Root: HKCR; SubKey: Purr-Data\shell; ValueType: string; ValueData: open; Flags: noerror uninsdeletekey; Tasks: fileassociations
+Root: HKCR; SubKey: Purr-Data\shell\open\command; ValueType: string; ValueData: """{app}\bin\pd.exe"" -listdev ""%1"""; Flags: uninsdeletekey noerror; Tasks: fileassociations
+Root: HKCR; SubKey: .pd; ValueType: string; ValueData: Purr-Data; Flags: noerror uninsdeletekey; Tasks: fileassociations
 Root: HKCR; SubKey: .pd; ValueType: string; ValueName: Content Type; ValueData: text/plain; Flags: noerror uninsdeletekey; Tasks: fileassociations
 ;
 ; STARTHERE: add pd-inno_registry after this comment:
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: flags; ValueData: ; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: flags; ValueData: ; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: flags; ValueData: ; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib1; ValueData: libdir; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib1; ValueData: libdir; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib1; ValueData: libdir; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib2; ValueData: pddp; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib2; ValueData: pddp; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib2; ValueData: pddp; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: nloadlib; ValueData: 2; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: nloadlib; ValueData: 2; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: nloadlib; ValueData: 2; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib3; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib3; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib3; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib4; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib4; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib4; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib5; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib5; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib5; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib6; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib6; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib6; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib7; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib7; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib7; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib8; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib8; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib8; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib9; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib9; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib9; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib10; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib10; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib10; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib11; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib11; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib11; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib12; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib12; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib12; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib13; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib13; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib13; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib14; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib14; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib14; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib15; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib15; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib15; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib16; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib16; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib16; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib17; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib17; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib17; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib18; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib18; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib18; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib19; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib19; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib19; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib20; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib20; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib20; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib21; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib21; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib21; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib22; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib22; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib22; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib23; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib23; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib23; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib24; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib24; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib24; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib25; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib25; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib25; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib26; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib26; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib26; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib27; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib27; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib27; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib28; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib28; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib28; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib29; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib29; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib29; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib30; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib30; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib30; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib31; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib31; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib31; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib32; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib32; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib32; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib33; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib33; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib33; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib34; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib34; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib34; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib35; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib35; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib35; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib36; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib36; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib36; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib37; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib37; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib37; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib38; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib38; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib38; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib39; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib39; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib39; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib40; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib40; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib40; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib41; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib41; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib41; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib42; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib42; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib42; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib43; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib43; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib43; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib44; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib44; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib44; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib45; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib45; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib45; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib46; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib46; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib46; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib47; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib47; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib47; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib48; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib48; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib48; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib49; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib49; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib49; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib50; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib50; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib50; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib51; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib51; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib51; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib52; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib52; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib52; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib53; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib53; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib53; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib54; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib54; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib54; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib55; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib55; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib55; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib56; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib56; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib56; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib57; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib57; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib57; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib58; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib58; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib58; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib59; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib59; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib59; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib60; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib60; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib60; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib61; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib61; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib61; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib62; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib62; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib62; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib63; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib63; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib63; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib64; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib64; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib64; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib65; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib65; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib65; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib66; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib66; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib66; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib67; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib67; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib67; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib68; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib68; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib68; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib69; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib69; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib69; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib70; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib70; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib70; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib71; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib71; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib71; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib72; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib72; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib72; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib73; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib73; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib73; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib74; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib74; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib74; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib75; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib75; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib75; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib76; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib76; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib76; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib77; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib77; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib77; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib78; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib78; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib78; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib79; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib79; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib79; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib80; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib80; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib80; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib81; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib81; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib81; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib82; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib82; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib82; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib83; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib83; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib83; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib84; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib84; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib84; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib85; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib85; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib85; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib86; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib86; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib86; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib87; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib87; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib87; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib88; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib88; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib88; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib89; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib89; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib89; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib90; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib90; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib90; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib91; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib91; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib91; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib92; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib92; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib92; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib93; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib93; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib93; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib94; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib94; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib94; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib95; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib95; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib95; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib96; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib96; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib96; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib97; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib97; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib97; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib98; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib98; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib98; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib99; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib99; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib99; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib100; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib100; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib100; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: expandsz; ValueName: path1; ValueData: %SystemRoot%/Fonts; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: expandsz; ValueName: path1; ValueData: %SystemRoot%/Fonts; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: expandsz; ValueName: path1; ValueData: %SystemRoot%/Fonts; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path2; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path2; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path2; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path3; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path3; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path3; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path4; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path4; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path4; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path5; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path5; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path5; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path6; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path6; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path6; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path7; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path7; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path7; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path8; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path8; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path8; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path9; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path9; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path9; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path10; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path10; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path10; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path11; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path11; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path11; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path12; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path12; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path12; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path13; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path13; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path13; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path14; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path14; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path14; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path15; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path15; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path15; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path16; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path16; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path16; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path17; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path17; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path17; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path18; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path18; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path18; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path19; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path19; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path19; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path20; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path20; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path20; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path21; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path21; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path21; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path22; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path22; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path22; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path23; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path23; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path23; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path24; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path24; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path24; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path25; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path25; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path25; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path26; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path26; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path26; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path27; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path27; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path27; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path28; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path28; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path28; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path29; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path29; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path29; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path30; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path30; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path30; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path31; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path31; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path31; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path32; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path32; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path32; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path33; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path33; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path33; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path34; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path34; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path34; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path35; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path35; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path35; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path36; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path36; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path36; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path37; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path37; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path37; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path38; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path38; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path38; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path39; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path39; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path39; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path40; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path40; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path40; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path41; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path41; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path41; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path42; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path42; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path42; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path43; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path43; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path43; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path44; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path44; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path44; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path45; Tasks: libs; Flags: uninsdeletekey
-Root: HKCu; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path45; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path45; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path46; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path46; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path46; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path47; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path47; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path47; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path48; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path48; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path48; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path49; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path49; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path49; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path50; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path50; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path50; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path51; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path51; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path51; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path52; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path52; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path52; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path53; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path53; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path53; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path54; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path54; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path54; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path55; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path55; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path55; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path56; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path56; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path56; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path57; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path57; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path57; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path58; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path58; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path58; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path59; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path59; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path59; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path60; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path60; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path60; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path61; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path61; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path61; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path62; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path62; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path62; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path63; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path63; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path63; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path64; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path64; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path64; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path65; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path65; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path65; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path66; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path66; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path66; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path67; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path67; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path67; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path68; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path68; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path68; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path69; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path69; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path69; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path70; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path70; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path70; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path71; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path71; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path71; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path72; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path72; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path72; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path73; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path73; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path73; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path74; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path74; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path74; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path75; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path75; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path75; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path76; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path76; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path76; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path77; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path77; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path77; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path78; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path78; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path78; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path79; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path79; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path79; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path80; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path80; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path80; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path81; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path81; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path81; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path82; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path82; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path82; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path83; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path83; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path83; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path84; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path84; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path84; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path85; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path85; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path85; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path86; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path86; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path86; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path87; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path87; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path87; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path88; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path88; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path88; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path89; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path89; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path89; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path90; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path90; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path90; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path91; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path91; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path91; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path92; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path92; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path92; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path93; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path93; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path93; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path94; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path94; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path94; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path95; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path95; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path95; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path96; Tasks: libs; Flags: uninsdeletekey
-Root: HKCu; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path96; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path96; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path97; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path97; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path97; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path98; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path98; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path98; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path99; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path99; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path99; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path100; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path100; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path100; Tasks: libs; Flags: uninsdeletekey
 
 ; ENDHERE: add pd-inno_registry before this comment:
 
@@ -769,24 +771,45 @@ Source: build\lib\*.*; DestDir: {app}\lib; Flags: ignoreversion recursesubdirs
 ;Source: build\tcl\*.*; DestDir: {app}\tcl; Flags: ignoreversion recursesubdirs
 
 [Code]
+
+function UninsName(): String;
+var Name: String; var i: Integer;
+begin
+  // not sure why, but it seems that this name keeps changing if the
+  // installation is done unattended (/SILENT /SUPPRESSMSGBOXES)
+  for i := 0 to 8 do begin // this may be overkill, but to be on the safe side
+    Name := ExpandConstant('{app}\unins00'+IntToStr(i)+'.exe');
+    if FileExists(Name) then begin
+      Result := Name;
+      Exit;
+    end;
+  end;
+  Result := '';
+end;
+
 function NextButtonClick(CurPageID: Integer): Boolean;
-var
-  ResultCode: Integer;
+var ResultCode: Integer; UninsCmd, AppDir, ErrMsg: String;
 begin
+  Result := True;
   case CurPageID of
     wpReady:
       begin
-		if(FileExists(ExpandConstant('{app}\unins000.exe')) AND FileExists(ExpandConstant('{app}\bin\pd.exe'))) then begin
-			if MsgBox('Found a previous Version of Pure Data at ' + ExpandConstant('{app} ') + #13#13 'Do you want to uninstall it first? (recommended)', mbConfirmation, MB_YESNO) = idYes then begin
-			if not Exec(ExpandConstant('{app}\unins000.exe'), '', '', SW_SHOWNORMAL, ewWaitUntilTerminated, ResultCode) then
-            MsgBox('Error:' #13#13 'The uninstall file could not be executed. ' + SysErrorMessage(ResultCode) + '.', mbError, MB_OK);
-			end;
-		end;
+        UninsCmd := UninsName();
+        AppDir := ExpandConstant('{app}');
+        ErrMsg := 'Installation cannot proceed until ' + AppDir + ' is removed.';
+        if FileExists(ExpandConstant('{app}\bin\pd.exe')) then begin
+          SuppressibleMsgBox('Found a previous version of Purr-Data at ' + AppDir + #13#13 'The installer will first uninstall the old version. Your preferences will be preserved.', mbInformation, MB_OK, MB_OK);
+          Result := False;
+          if UninsCmd = '' then
+            MsgBox('Error:' #13#13 'The uninstall file could not be located. ' + ErrMsg, mbError, MB_OK)
+          else if not Exec(UninsCmd, '/SILENT', '', SW_SHOWNORMAL, ewWaitUntilTerminated, ResultCode) then
+            MsgBox('Error:' #13#13 'The uninstall file could not be executed. ' + SysErrorMessage(ResultCode) + '. ' + ErrMsg, mbError, MB_OK)
+          else
+            Result := True;
+        end;
         BringToFrontAndRestore();
-        MsgBox('Note:' #13#13 'The installation will now start.', mbInformation, MB_OK);
+        if Result then SuppressibleMsgBox('Purr-Data will now be installed on your computer.', mbInformation, MB_OK, MB_OK);
       end;
   end;
-
-  Result := True;
 end;
 
diff --git a/packages/win64_inno/pd-inno.iss.in b/packages/win64_inno/pd-inno.iss.in
index 88d9a7cb5dcc9ba63d50a8826826aea5cbf2b172..7a05d97f34bec162a0a9f1bcab291eb8c5bfc622 100644
--- a/packages/win64_inno/pd-inno.iss.in
+++ b/packages/win64_inno/pd-inno.iss.in
@@ -18,6 +18,8 @@ LicenseFile=..\gpl-3.0.txt
 DisableWelcomePage=no
 UninstallDisplayIcon={app}\lib\pdPatch_catGraphics.ico
 
+PrivilegesRequired=admin
+
 Compression=lzma/ultra
 ChangesAssociations=true
 OutputBaseFilename=Purr-Data-PD_VERSION-x86_64
@@ -68,622 +70,622 @@ Type: files; Name: {app}\pd-tutorial.url
 Type: files; Name: {app}\techniques.url
 
 [Registry]
-Root: HKCR; SubKey: Purr.Data; ValueType: dword; ValueName: EditFlags; ValueData: $00000000; Flags: noerror uninsdeletekey; Tasks: fileassociations; Permissions: users-modify
-Root: HKCR; SubKey: Purr.Data; ValueType: dword; ValueName: BrowserFlags; ValueData: $00000008; Flags: uninsdeletekey noerror; Tasks: fileassociations
-Root: HKCR; SubKey: Purr.Data; ValueType: string; ValueData: Purr Data; Flags: uninsdeletekey noerror; Tasks: fileassociations
-Root: HKCR; SubKey: Purr.Data\DefaultIcon; ValueType: string; ValueData: {app}\lib\pdpatch.ico,0; Flags: createvalueifdoesntexist noerror; Tasks: fileassociations
-Root: HKCR; SubKey: Purr.Data\shell; ValueType: string; ValueData: open; Flags: noerror uninsdeletekey; Tasks: fileassociations
-Root: HKCR; SubKey: Purr.Data\shell\open\command; ValueType: string; ValueData: """{app}\bin\pd.exe"" -listdev ""%1"""; Flags: uninsdeletekey noerror; Tasks: fileassociations
-Root: HKCR; SubKey: .pd; ValueType: string; ValueData: Purr.Data; Flags: noerror uninsdeletekey; Tasks: fileassociations
+Root: HKCR; SubKey: Purr-Data; ValueType: dword; ValueName: EditFlags; ValueData: $00000000; Flags: noerror uninsdeletekey; Tasks: fileassociations; Permissions: users-modify
+Root: HKCR; SubKey: Purr-Data; ValueType: dword; ValueName: BrowserFlags; ValueData: $00000008; Flags: uninsdeletekey noerror; Tasks: fileassociations
+Root: HKCR; SubKey: Purr-Data; ValueType: string; ValueData: Purr Data; Flags: uninsdeletekey noerror; Tasks: fileassociations
+Root: HKCR; SubKey: Purr-Data\DefaultIcon; ValueType: string; ValueData: {app}\lib\pdpatch.ico,0; Flags: createvalueifdoesntexist noerror; Tasks: fileassociations
+Root: HKCR; SubKey: Purr-Data\shell; ValueType: string; ValueData: open; Flags: noerror uninsdeletekey; Tasks: fileassociations
+Root: HKCR; SubKey: Purr-Data\shell\open\command; ValueType: string; ValueData: """{app}\bin\pd.exe"" -listdev ""%1"""; Flags: uninsdeletekey noerror; Tasks: fileassociations
+Root: HKCR; SubKey: .pd; ValueType: string; ValueData: Purr-Data; Flags: noerror uninsdeletekey; Tasks: fileassociations
 Root: HKCR; SubKey: .pd; ValueType: string; ValueName: Content Type; ValueData: text/plain; Flags: noerror uninsdeletekey; Tasks: fileassociations
 ;
 ; STARTHERE: add pd-inno_registry after this comment:
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: flags; ValueData: ; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: flags; ValueData: ; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: flags; ValueData: ; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib1; ValueData: libdir; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib1; ValueData: libdir; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib1; ValueData: libdir; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib2; ValueData: Gem; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib2; ValueData: Gem; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib2; ValueData: Gem; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib3; ValueData: cyclone; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib3; ValueData: cyclone; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib3; ValueData: cyclone; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib4; ValueData: zexy; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib4; ValueData: zexy; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib4; ValueData: zexy; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib5; ValueData: creb; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib5; ValueData: creb; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib5; ValueData: creb; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib6; ValueData: cxc; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib6; ValueData: cxc; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib6; ValueData: cxc; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib7; ValueData: iemlib; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib7; ValueData: iemlib; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib7; ValueData: iemlib; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib8; ValueData: list-abs; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib8; ValueData: list-abs; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib8; ValueData: list-abs; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib9; ValueData: mapping; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib9; ValueData: mapping; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib9; ValueData: mapping; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib10; ValueData: markex; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib10; ValueData: markex; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib10; ValueData: markex; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib11; ValueData: maxlib; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib11; ValueData: maxlib; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib11; ValueData: maxlib; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib12; ValueData: memento; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib12; ValueData: memento; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib12; ValueData: memento; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib13; ValueData: mjlib; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib13; ValueData: mjlib; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib13; ValueData: mjlib; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib14; ValueData: motex; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib14; ValueData: motex; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib14; ValueData: motex; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib15; ValueData: oscx; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib15; ValueData: oscx; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib15; ValueData: oscx; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib16; ValueData: pddp; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib16; ValueData: pddp; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib16; ValueData: pddp; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib17; ValueData: pdogg; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib17; ValueData: pdogg; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib17; ValueData: pdogg; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib18; ValueData: pixeltango; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib18; ValueData: pixeltango; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib18; ValueData: pixeltango; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib19; ValueData: pmpd; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib19; ValueData: pmpd; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib19; ValueData: pmpd; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib20; ValueData: rradical; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib20; ValueData: rradical; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib20; ValueData: rradical; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib21; ValueData: sigpack; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib21; ValueData: sigpack; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib21; ValueData: sigpack; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib22; ValueData: smlib; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib22; ValueData: smlib; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib22; ValueData: smlib; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib23; ValueData: unauthorized; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib23; ValueData: unauthorized; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib23; ValueData: unauthorized; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib24; ValueData: vbap; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib24; ValueData: vbap; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib24; ValueData: vbap; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib25; ValueData: pan; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib25; ValueData: pan; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib25; ValueData: pan; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib26; ValueData: freeverb~; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib26; ValueData: freeverb~; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib26; ValueData: freeverb~; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib27; ValueData: hcs; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib27; ValueData: hcs; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib27; ValueData: hcs; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib28; ValueData: jmmmp; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib28; ValueData: jmmmp; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib28; ValueData: jmmmp; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib29; ValueData: ext13; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib29; ValueData: ext13; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib29; ValueData: ext13; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib30; ValueData: ggee; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib30; ValueData: ggee; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib30; ValueData: ggee; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib31; ValueData: iem_anything; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib31; ValueData: iem_anything; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib31; ValueData: iem_anything; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib32; ValueData: ekext; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib32; ValueData: ekext; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib32; ValueData: ekext; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib33; ValueData: disis; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib33; ValueData: disis; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib33; ValueData: disis; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib34; ValueData: lyonpotpourri; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib34; ValueData: lyonpotpourri; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib34; ValueData: lyonpotpourri; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib35; ValueData: pdlua; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib35; ValueData: pdlua; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: loadlib35; ValueData: pdlua; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: nloadlib; ValueData: 35; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: nloadlib; ValueData: 35; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: string; ValueName: nloadlib; ValueData: 35; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib36; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib36; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib36; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib37; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib37; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib37; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib38; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib38; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib38; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib39; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib39; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib39; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib40; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib40; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib40; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib41; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib41; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib41; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib42; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib42; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib42; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib43; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib43; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib43; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib44; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib44; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib44; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib45; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib45; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib45; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib46; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib46; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib46; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib47; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib47; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib47; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib48; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib48; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib48; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib49; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib49; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib49; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib50; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib50; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib50; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib51; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib51; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib51; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib52; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib52; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib52; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib53; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib53; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib53; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib54; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib54; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib54; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib55; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib55; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib55; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib56; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib56; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib56; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib57; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib57; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib57; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib58; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib58; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib58; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib59; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib59; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib59; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib60; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib60; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib60; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib61; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib61; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib61; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib62; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib62; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib62; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib63; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib63; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib63; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib64; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib64; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib64; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib65; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib65; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib65; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib66; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib66; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib66; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib67; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib67; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib67; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib68; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib68; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib68; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib69; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib69; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib69; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib70; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib70; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib70; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib71; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib71; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib71; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib72; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib72; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib72; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib73; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib73; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib73; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib74; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib74; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib74; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib75; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib75; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib75; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib76; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib76; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib76; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib77; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib77; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib77; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib78; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib78; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib78; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib79; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib79; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib79; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib80; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib80; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib80; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib81; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib81; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib81; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib82; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib82; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib82; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib83; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib83; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib83; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib84; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib84; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib84; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib85; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib85; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib85; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib86; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib86; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib86; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib87; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib87; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib87; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib88; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib88; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib88; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib89; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib89; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib89; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib90; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib90; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib90; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib91; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib91; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib91; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib92; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib92; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib92; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib93; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib93; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib93; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib94; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib94; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib94; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib95; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib95; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib95; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib96; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib96; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib96; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib97; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib97; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib97; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib98; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib98; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib98; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib99; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib99; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib99; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib100; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib100; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: loadlib100; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: expandsz; ValueName: path1; ValueData: %SystemRoot%/Fonts; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: expandsz; ValueName: path1; ValueData: %SystemRoot%/Fonts; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: expandsz; ValueName: path1; ValueData: %SystemRoot%/Fonts; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path2; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path2; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path2; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path3; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path3; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path3; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path4; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path4; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path4; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path5; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path5; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path5; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path6; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path6; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path6; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path7; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path7; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path7; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path8; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path8; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path8; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path9; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path9; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path9; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path10; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path10; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path10; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path11; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path11; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path11; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path12; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path12; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path12; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path13; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path13; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path13; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path14; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path14; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path14; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path15; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path15; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path15; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path16; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path16; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path16; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path17; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path17; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path17; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path18; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path18; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path18; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path19; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path19; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path19; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path20; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path20; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path20; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path21; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path21; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path21; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path22; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path22; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path22; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path23; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path23; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path23; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path24; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path24; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path24; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path25; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path25; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path25; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path26; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path26; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path26; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path27; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path27; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path27; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path28; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path28; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path28; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path29; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path29; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path29; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path30; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path30; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path30; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path31; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path31; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path31; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path32; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path32; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path32; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path33; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path33; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path33; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path34; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path34; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path34; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path35; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path35; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path35; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path36; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path36; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path36; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path37; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path37; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path37; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path38; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path38; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path38; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path39; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path39; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path39; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path40; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path40; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path40; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path41; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path41; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path41; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path42; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path42; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path42; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path43; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path43; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path43; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path44; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path44; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path44; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path45; Tasks: libs; Flags: uninsdeletekey
-Root: HKCu; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path45; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path45; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path46; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path46; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path46; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path47; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path47; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path47; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path48; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path48; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path48; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path49; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path49; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path49; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path50; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path50; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path50; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path51; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path51; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path51; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path52; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path52; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path52; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path53; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path53; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path53; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path54; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path54; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path54; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path55; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path55; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path55; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path56; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path56; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path56; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path57; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path57; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path57; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path58; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path58; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path58; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path59; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path59; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path59; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path60; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path60; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path60; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path61; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path61; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path61; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path62; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path62; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path62; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path63; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path63; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path63; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path64; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path64; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path64; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path65; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path65; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path65; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path66; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path66; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path66; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path67; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path67; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path67; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path68; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path68; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path68; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path69; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path69; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path69; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path70; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path70; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path70; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path71; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path71; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path71; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path72; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path72; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path72; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path73; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path73; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path73; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path74; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path74; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path74; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path75; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path75; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path75; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path76; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path76; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path76; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path77; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path77; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path77; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path78; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path78; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path78; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path79; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path79; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path79; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path80; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path80; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path80; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path81; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path81; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path81; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path82; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path82; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path82; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path83; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path83; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path83; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path84; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path84; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path84; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path85; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path85; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path85; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path86; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path86; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path86; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path87; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path87; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path87; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path88; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path88; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path88; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path89; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path89; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path89; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path90; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path90; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path90; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path91; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path91; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path91; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path92; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path92; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path92; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path93; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path93; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path93; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path94; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path94; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path94; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path95; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path95; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path95; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path96; Tasks: libs; Flags: uninsdeletekey
-Root: HKCu; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path96; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path96; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path97; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path97; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path97; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path98; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path98; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path98; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path99; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path99; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path99; Tasks: libs; Flags: uninsdeletekey
 
 Root: HKLM; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path100; Tasks: libs; Flags: uninsdeletekey
-Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path100; Tasks: libs; Flags: uninsdeletekey
+; Root: HKCU; SubKey: SOFTWARE\Purr-Data; ValueType: none; ValueName: path100; Tasks: libs; Flags: uninsdeletekey
 
 ; ENDHERE: add pd-inno_registry before this comment:
 
@@ -769,24 +771,45 @@ Source: build\lib\*.*; DestDir: {app}\lib; Flags: ignoreversion recursesubdirs
 ;Source: build\tcl\*.*; DestDir: {app}\tcl; Flags: ignoreversion recursesubdirs
 
 [Code]
+
+function UninsName(): String;
+var Name: String; var i: Integer;
+begin
+  // not sure why, but it seems that this name keeps changing if the
+  // installation is done unattended (/SILENT /SUPPRESSMSGBOXES)
+  for i := 0 to 8 do begin // this may be overkill, but to be on the safe side
+    Name := ExpandConstant('{app}\unins00'+IntToStr(i)+'.exe');
+    if FileExists(Name) then begin
+      Result := Name;
+      Exit;
+    end;
+  end;
+  Result := '';
+end;
+
 function NextButtonClick(CurPageID: Integer): Boolean;
-var
-  ResultCode: Integer;
+var ResultCode: Integer; UninsCmd, AppDir, ErrMsg: String;
 begin
+  Result := True;
   case CurPageID of
     wpReady:
       begin
-		if(FileExists(ExpandConstant('{app}\unins000.exe')) AND FileExists(ExpandConstant('{app}\bin\pd.exe'))) then begin
-			if MsgBox('Found a previous Version of Pure Data at ' + ExpandConstant('{app} ') + #13#13 'Do you want to uninstall it first? (recommended)', mbConfirmation, MB_YESNO) = idYes then begin
-			if not Exec(ExpandConstant('{app}\unins000.exe'), '', '', SW_SHOWNORMAL, ewWaitUntilTerminated, ResultCode) then
-            MsgBox('Error:' #13#13 'The uninstall file could not be executed. ' + SysErrorMessage(ResultCode) + '.', mbError, MB_OK);
-			end;
-		end;
+        UninsCmd := UninsName();
+        AppDir := ExpandConstant('{app}');
+        ErrMsg := 'Installation cannot proceed until ' + AppDir + ' is removed.';
+        if FileExists(ExpandConstant('{app}\bin\pd.exe')) then begin
+          SuppressibleMsgBox('Found a previous version of Purr-Data at ' + AppDir + #13#13 'The installer will first uninstall the old version. Your preferences will be preserved.', mbInformation, MB_OK, MB_OK);
+          Result := False;
+          if UninsCmd = '' then
+            MsgBox('Error:' #13#13 'The uninstall file could not be located. ' + ErrMsg, mbError, MB_OK)
+          else if not Exec(UninsCmd, '/SILENT', '', SW_SHOWNORMAL, ewWaitUntilTerminated, ResultCode) then
+            MsgBox('Error:' #13#13 'The uninstall file could not be executed. ' + SysErrorMessage(ResultCode) + '. ' + ErrMsg, mbError, MB_OK)
+          else
+            Result := True;
+        end;
         BringToFrontAndRestore();
-        MsgBox('Note:' #13#13 'The installation will now start.', mbInformation, MB_OK);
+        if Result then SuppressibleMsgBox('Purr-Data will now be installed on your computer.', mbInformation, MB_OK, MB_OK);
       end;
   end;
-
-  Result := True;
 end;
 
diff --git a/pd/doc/1.manual/1.introduction.txt b/pd/doc/1.manual/1.introduction.txt
index 11f3a9cfdc0f4c1a4f436f03ae73b92df45ec1e2..d83e563665b44744083fff1a5259bf6783954c38 100644
--- a/pd/doc/1.manual/1.introduction.txt
+++ b/pd/doc/1.manual/1.introduction.txt
@@ -1,28 +1,28 @@
-PD_VERSION
-
-A real-time graphical programming environment for live interactive
-computer music, Pd-l2ork works on Linux, Macintosh OSX, and Microsoft
-Windows.
-
-Pd is copyrighted, but is free for you to use for any reasonable purpose.
-See the file:
-     PD_BASEDIR/doc/manuals/Pd/Pd-LICENSE.txt
-
-Pd-l2ork offers a rewrite of many of Pd's core routines for the purpose
-of improving editor functionality and stability. It is distributed under
-the same license as Pd. For additional info see:
-    http://l2ork.music.vt.edu/main/
-
-Reference documentation for Pd lives in:
-    file:PD_BASEDIR/doc/1.manual/index.htm
-or:
-    http://msp.ucsd.edu/Pd_documentation/
-
-Much more documentation and other resources live on:
-    http://puredata.org
-
-The Pd mailing list archive lives in:
-    http://iem.at/mailinglists/pd-list/
-
-
-Many more useful links are listed in the HTML documentation, section 1.2.
+PD_VERSION
+
+A real-time graphical programming environment for live interactive
+computer music, Pd works on Linux, Apple macOS, and Microsoft Windows.
+
+Purr Data is a modern successor of Pd-extended which features many
+improvements, especially in the user interface. For additional info see:
+    https://agraef.github.io/purr-data/
+
+For the Purr Data release notes and license see:
+    doc/manuals/Pd/ReadMe.html
+    doc/manuals/Pd/License.html
+
+Pd is copyrighted, but is free for you to use for any reasonable purpose.
+See the file:
+    doc/manuals/Pd/Pd-LICENSE.txt
+
+Reference manual for Pd lives in:
+    doc/1.manual/index.htm
+or online at:
+    http://msp.ucsd.edu/Pd_documentation/
+
+Information of all sorts (guides, development, forks, meetings, more
+documentation, etc):
+    http://puredata.info
+
+The Pd mailing list archive lives in:
+    http://iem.at/mailinglists/pd-list/
diff --git a/pd/doc/5.reference/all_about_expr_and_value.pd b/pd/doc/5.reference/all_about_expr_and_value.pd
index 4f9f0d53a9a878535cc60878f1f4517d720d7bf3..e5caf8c15bb440478ab4bbe516147bb1390b2966 100644
--- a/pd/doc/5.reference/all_about_expr_and_value.pd
+++ b/pd/doc/5.reference/all_about_expr_and_value.pd
@@ -20,7 +20,7 @@ variables like $f3- rather \, they are global symbolic variables that
 aren't the names of functions or operators like some_number \, below:
 ;
 #X text 21 184 Using Pd's dollar sign variables is tricky-- for example
-\, \$0-foo is interpretated as "\$0 minus foo". Additionally \, \$0
+\, \$0-foo is interpreted as "\$0 minus foo". Additionally \, \$0
 cannot be at the beginning of the variable name (e.g. \, \$0foo). Underscores
 provide a workable \, if clunky \, solution:;
 #X obj 1 478 cnv 15 445 20 empty \$0-pddp.cnv.footer empty 20 12 0
diff --git a/pd/doc/5.reference/all_about_expr_functions.pd b/pd/doc/5.reference/all_about_expr_functions.pd
index d0005b16a6fa3fa5caefb662d2345c3afb17adac..4dabe9736e2ce37471bc9d6b27ad9fd47a175d55 100644
--- a/pd/doc/5.reference/all_about_expr_functions.pd
+++ b/pd/doc/5.reference/all_about_expr_functions.pd
@@ -1,95 +1,78 @@
-#N canvas 431 60 448 545 10;
+#N canvas 436 60 448 565 10;
 #X obj 1 1 cnv 15 445 20 empty \$0-pddp.cnv.header expr_operators_and_functions
-20 10 1 18 -261106 -33289 0;
+20 10 1 18 #fcbcc4 #202020 0;
 #X obj 407 2 pddp/pddplink http://puredata.info/dev/pddp -text pddp
 ;
-#X floatatom 140 881 5 0 0 0 - - -, f 5;
-#X floatatom 188 880 5 0 0 0 - - -, f 5;
-#X obj 140 901 v a;
-#X obj 188 901 v b;
+#X floatatom 140 1001 5 0 0 0 - - -, f 5;
+#X floatatom 188 1000 5 0 0 0 - - -, f 5;
+#X obj 140 1021 v a;
+#X obj 188 1021 v b;
 #X obj 36 794 expr max(a \, b);
-#X obj 22 774 bng 12 250 50 0 empty empty empty 17 7 0 10 -262144 -1
--1;
-#X obj 22 795 bng 12 250 50 0 empty empty empty 17 7 0 10 -262144 -1
--1;
-#X obj 22 711 bng 12 250 50 0 empty empty empty 17 7 0 10 -262144 -1
--1;
-#X obj 22 732 bng 12 250 50 0 empty empty empty 17 7 0 10 -262144 -1
--1;
-#X obj 22 753 bng 12 250 50 0 empty empty empty 17 7 0 10 -262144 -1
--1;
-#X floatatom 36 880 0 0 0 0 - - -;
-#X obj 22 990 bng 12 250 50 0 empty empty empty 17 7 0 10 -262144 -1
--1;
-#X obj 22 1010 bng 12 250 50 0 empty empty empty 17 7 0 10 -262144
--1 -1;
-#X obj 22 1030 bng 12 250 50 0 empty empty empty 17 7 0 10 -262144
--1 -1;
-#X obj 22 1050 bng 12 250 50 0 empty empty empty 17 7 0 10 -262144
--1 -1;
-#X obj 22 1070 bng 12 250 50 0 empty empty empty 17 7 0 10 -262144
--1 -1;
-#X obj 22 1090 bng 12 250 50 0 empty empty empty 17 7 0 10 -262144
--1 -1;
-#X obj 22 1110 bng 12 250 50 0 empty empty empty 17 7 0 10 -262144
--1 -1;
-#X obj 22 1130 bng 12 250 50 0 empty empty empty 17 7 0 10 -262144
--1 -1;
-#X obj 22 1150 bng 12 250 50 0 empty empty empty 17 7 0 10 -262144
--1 -1;
-#X obj 22 816 bng 12 250 50 0 empty empty empty 17 7 0 10 -262144 -1
--1;
-#X obj 22 1171 bng 12 250 50 0 empty empty empty 17 7 0 10 -262144
--1 -1;
-#X obj 22 837 bng 12 250 50 0 empty empty empty 17 7 0 10 -262144 -1
--1;
-#X obj 22 858 bng 12 250 50 0 empty empty empty 17 7 0 10 -262144 -1
--1;
-#X floatatom 36 1200 0 0 0 0 - - -;
+#X obj 22 774 bng 12 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 22 795 bng 12 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 22 711 bng 12 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 22 732 bng 12 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 22 753 bng 12 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X floatatom 36 1000 0 0 0 0 - - -;
+#X obj 22 1090 bng 12 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 22 1110 bng 12 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 22 1130 bng 12 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 22 1150 bng 12 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 22 1170 bng 12 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 22 1190 bng 12 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 22 1210 bng 12 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 22 1230 bng 12 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 22 1250 bng 12 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 22 816 bng 12 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 22 1331 bng 12 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 22 897 bng 12 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 22 918 bng 12 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X floatatom 36 1360 0 0 0 0 - - -;
 #X obj 36 773 expr min(a \, b);
 #X obj 36 710 expr int(a);
 #X obj 36 731 expr rint(a);
 #X obj 36 752 expr float(a);
-#X obj 36 1129 expr tanh(a);
-#X obj 36 1149 expr fact(a);
 #X obj 36 815 expr abs(a);
-#X obj 36 857 expr modf(a);
-#N canvas 0 0 450 300 (subpatch) 0;
+#X obj 36 918 expr modf(a);
+#N canvas 736 383 450 300 (subpatch) 0;
 #X array expr_array 11 float 3 black black;
 #A 0 -0.707106 0 0.707106 1 0.707108 2.65359e-06 -0.707104 -1 -0.70711
 -5.30718e-06 0.707103;
 #X coords 0 1 11 -1 80 60 1;
-#X restore 22 1757 graph;
-#X obj 22 1844 bng 12 250 50 0 empty empty empty 17 7 0 10 -262144
--1 -1;
-#X obj 22 1864 bng 12 250 50 0 empty empty empty 17 7 0 10 -262144
--1 -1;
-#X obj 22 1884 bng 12 250 50 0 empty empty empty 17 7 0 10 -262144
--1 -1;
-#X obj 22 1904 bng 12 250 50 0 empty empty empty 17 7 0 10 -262144
--1 -1;
-#X obj 22 1924 bng 12 250 50 0 empty empty empty 17 7 0 10 -262144
--1 -1;
-#X obj 22 1944 bng 12 250 50 0 empty empty empty 17 7 0 10 -262144
--1 -1;
-#X floatatom 36 1971 0 0 0 0 - - -;
-#X text 185 1842 size of an array;
-#X text 24 1620 * Bug: floor and ceiling must take two values to initialize
-properly. You can just put a zero as the second value.;
-#X text 9 1171 *;
-#X text 9 837 *;
-#X text 185 1861 sum of all elements in an array;
-#X text 206 1903 average of all elements;
+#X restore 22 1887 graph;
+#X obj 22 1974 bng 12 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 22 1994 bng 12 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 22 2014 bng 12 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X floatatom 36 2081 0 0 0 0 - - -;
+#X text 185 1972 size of an array;
+#X text 185 1991 sum of all elements in an array;
 #X text 138 772 minimum;
 #X text 138 793 maximum;
 #X text 138 709 convert to integer;
 #X text 138 730 round a float to a nearby integer;
 #X text 138 751 convert to float;
-#X text 4 753 **;
-#X text 24 1646 ** Bug: float(a) converts a to an integer;
-#X text 149 1127 hyperbolic tangent;
-#X text 149 1147 factorial;
-#X text 127 835 get signed integer value from floating point number
+#X text 127 897 get signed integer value from floating point number
 ;
 #X floatatom 120 504 5 0 0 0 - - -, f 5;
 #X floatatom 168 503 5 0 0 0 - - -, f 5;
@@ -116,125 +99,123 @@ properly. You can just put a zero as the second value.;
 #X text 117 483 Logical Or (boolean);
 #X text 117 163 Divide (division by zero detected);
 #X text 138 815 absolute value;
-#X obj 22 613 bng 12 250 50 0 empty empty empty 17 7 0 10 -262144 -1
--1;
+#X obj 22 613 bng 12 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
 #X obj 36 612 expr if(a \, b \, c);
-#X floatatom 238 880 5 0 0 0 - - -, f 5;
-#X obj 238 901 v c;
+#X floatatom 238 1000 5 0 0 0 - - -, f 5;
+#X obj 238 1021 v c;
 #X text 147 637 (See expr-if subpatch for more details);
-#X text 117 855 get signed fractional value from floating point number
+#X text 117 918 get signed fractional value from floating point number
 ;
-#X floatatom 152 1201 5 0 0 0 - - -, f 5;
-#X floatatom 200 1200 5 0 0 0 - - -, f 5;
-#X obj 152 1221 v a;
-#X obj 200 1221 v b;
-#X obj 22 664 bng 12 250 50 0 empty empty empty 17 7 0 10 -262144 -1
--1;
+#X floatatom 152 1361 5 0 0 0 - - -, f 5;
+#X floatatom 200 1360 5 0 0 0 - - -, f 5;
+#X obj 152 1381 v a;
+#X obj 200 1381 v b;
+#X obj 22 664 bng 12 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
 #X obj 36 663 expr random(a \, b);
-#X obj 36 989 expr pow(a \, b);
-#X text 149 987 raise a to the power of b;
-#X obj 36 1009 expr sqrt(a);
-#X text 149 1007 square root;
-#X obj 36 1029 expr exp(a);
-#X text 149 1027 e raised to the power of a;
-#X obj 36 1049 expr ln(a);
-#X text 149 1047 natural log;
-#X obj 36 1069 expr log(a);
-#X text 149 1067 natural log (same as above);
-#X obj 36 1089 expr log10(a);
-#X text 149 1087 log base 10;
-#X obj 36 1109 expr fact(a);
-#X text 149 1107 factorial;
-#X obj 36 1170 expr ldexp(a);
-#X obj 22 1310 bng 12 250 50 0 empty empty empty 17 7 0 10 -262144
--1 -1;
-#X obj 22 1330 bng 12 250 50 0 empty empty empty 17 7 0 10 -262144
--1 -1;
-#X obj 22 1350 bng 12 250 50 0 empty empty empty 17 7 0 10 -262144
--1 -1;
-#X obj 22 1370 bng 12 250 50 0 empty empty empty 17 7 0 10 -262144
--1 -1;
-#X obj 22 1390 bng 12 250 50 0 empty empty empty 17 7 0 10 -262144
--1 -1;
-#X obj 22 1410 bng 12 250 50 0 empty empty empty 17 7 0 10 -262144
--1 -1;
-#X obj 22 1430 bng 12 250 50 0 empty empty empty 17 7 0 10 -262144
--1 -1;
-#X obj 22 1450 bng 12 250 50 0 empty empty empty 17 7 0 10 -262144
--1 -1;
-#X obj 22 1470 bng 12 250 50 0 empty empty empty 17 7 0 10 -262144
--1 -1;
-#X obj 22 1491 bng 12 250 50 0 empty empty empty 17 7 0 10 -262144
--1 -1;
-#X floatatom 36 1575 0 0 0 0 - - -;
-#X text 9 1511 *;
-#X floatatom 152 1575 5 0 0 0 - - -, f 5;
-#X floatatom 200 1574 5 0 0 0 - - -, f 5;
-#X obj 152 1595 v a;
-#X obj 200 1595 v b;
-#X obj 36 1309 expr sin(a);
-#X text 149 1307 sine;
-#X obj 36 1329 expr cos(a);
-#X text 149 1327 cosine;
-#X obj 36 1349 expr tan(a);
-#X text 149 1347 tangent;
-#X obj 36 1369 expr asin(a);
-#X text 149 1367 arc sine;
-#X obj 36 1389 expr acos(a);
-#X text 149 1387 arc cosine;
-#X obj 36 1409 expr atan(a);
-#X text 149 1407 arc tangent;
-#X obj 36 1429 expr atan2(a \, b);
-#X text 149 1427 arc tangent of 2 variables;
-#X obj 36 1449 expr sinh(a);
-#X text 149 1447 hyperbolic sine;
-#X obj 36 1469 expr cosh(a);
-#X text 149 1467 hyperbolic cosine;
-#X obj 22 1512 bng 12 250 50 0 empty empty empty 17 7 0 10 -262144
--1 -1;
-#X obj 22 1532 bng 12 250 50 0 empty empty empty 17 7 0 10 -262144
--1 -1;
-#X obj 22 1552 bng 12 250 50 0 empty empty empty 17 7 0 10 -262144
--1 -1;
-#X obj 36 1490 expr tanh(a);
-#X text 149 1487 hyperbolic tangent;
-#X obj 36 1511 expr floor(a \, 0);
-#X text 149 1509 largest integral value not greater than argument;
-#X obj 36 1531 expr ceil(a \, 0);
-#X text 149 1529 smallest integral value not less than argument;
-#X text 149 1549 floating-point remainder function;
-#X obj 36 1551 expr fmod(a \, b);
-#X text 9 1531 *;
-#X obj 22 144 bng 12 250 50 0 empty empty empty 17 7 0 10 -262144 -1
--1;
-#X obj 22 164 bng 12 250 50 0 empty empty empty 17 7 0 10 -262144 -1
--1;
-#X obj 22 184 bng 12 250 50 0 empty empty empty 17 7 0 10 -262144 -1
--1;
-#X obj 22 204 bng 12 250 50 0 empty empty empty 17 7 0 10 -262144 -1
--1;
-#X obj 22 224 bng 12 250 50 0 empty empty empty 17 7 0 10 -262144 -1
--1;
-#X obj 22 244 bng 12 250 50 0 empty empty empty 17 7 0 10 -262144 -1
--1;
-#X obj 22 264 bng 12 250 50 0 empty empty empty 17 7 0 10 -262144 -1
--1;
-#X obj 22 284 bng 12 250 50 0 empty empty empty 17 7 0 10 -262144 -1
--1;
-#X obj 22 304 bng 12 250 50 0 empty empty empty 17 7 0 10 -262144 -1
--1;
-#X obj 22 324 bng 12 250 50 0 empty empty empty 17 7 0 10 -262144 -1
--1;
-#X obj 22 344 bng 12 250 50 0 empty empty empty 17 7 0 10 -262144 -1
--1;
-#X obj 22 364 bng 12 250 50 0 empty empty empty 17 7 0 10 -262144 -1
--1;
-#X obj 22 384 bng 12 250 50 0 empty empty empty 17 7 0 10 -262144 -1
--1;
-#X obj 22 404 bng 12 250 50 0 empty empty empty 17 7 0 10 -262144 -1
--1;
-#X obj 22 424 bng 12 250 50 0 empty empty empty 17 7 0 10 -262144 -1
--1;
+#X obj 36 1089 expr pow(a \, b);
+#X text 149 1087 raise a to the power of b;
+#X obj 36 1109 expr sqrt(a);
+#X text 149 1107 square root;
+#X obj 36 1129 expr exp(a);
+#X text 149 1127 e raised to the power of a;
+#X obj 36 1149 expr ln(a);
+#X text 149 1147 natural log;
+#X obj 36 1169 expr log(a);
+#X text 149 1167 natural log (same as above);
+#X obj 36 1189 expr log10(a);
+#X text 149 1187 log base 10;
+#X obj 36 1209 expr fact(a);
+#X text 149 1207 factorial;
+#X obj 36 1330 expr ldexp(a \, b);
+#X obj 22 1450 bng 12 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 22 1470 bng 12 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 22 1490 bng 12 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 22 1510 bng 12 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 22 1530 bng 12 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 22 1550 bng 12 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 22 1570 bng 12 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 22 1590 bng 12 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 22 1610 bng 12 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 22 1631 bng 12 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X floatatom 36 1775 0 0 0 0 - - -;
+#X floatatom 152 1775 5 0 0 0 - - -, f 5;
+#X floatatom 200 1774 5 0 0 0 - - -, f 5;
+#X obj 152 1795 v a;
+#X obj 200 1795 v b;
+#X obj 36 1449 expr sin(a);
+#X text 149 1447 sine;
+#X obj 36 1469 expr cos(a);
+#X text 149 1467 cosine;
+#X obj 36 1489 expr tan(a);
+#X text 149 1487 tangent;
+#X obj 36 1509 expr asin(a);
+#X text 149 1507 arc sine;
+#X obj 36 1529 expr acos(a);
+#X text 149 1527 arc cosine;
+#X obj 36 1549 expr atan(a);
+#X text 149 1547 arc tangent;
+#X obj 36 1569 expr atan2(a \, b);
+#X text 149 1567 arc tangent of 2 variables;
+#X obj 36 1589 expr sinh(a);
+#X text 149 1587 hyperbolic sine;
+#X obj 36 1609 expr cosh(a);
+#X text 149 1607 hyperbolic cosine;
+#X obj 22 1712 bng 12 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 22 1732 bng 12 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 22 1752 bng 12 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 36 1630 expr tanh(a);
+#X text 149 1627 hyperbolic tangent;
+#X obj 36 1711 expr floor(a);
+#X text 149 1709 largest integral value not greater than argument;
+#X obj 36 1731 expr ceil(a);
+#X text 149 1729 smallest integral value not less than argument;
+#X text 149 1749 floating-point remainder function;
+#X obj 36 1751 expr fmod(a \, b);
+#X obj 22 144 bng 12 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 22 164 bng 12 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 22 184 bng 12 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 22 204 bng 12 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 22 224 bng 12 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 22 244 bng 12 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 22 264 bng 12 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 22 284 bng 12 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 22 304 bng 12 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 22 324 bng 12 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 22 344 bng 12 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 22 364 bng 12 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 22 384 bng 12 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 22 404 bng 12 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 22 424 bng 12 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
 #X obj 36 143 expr a * b;
 #X obj 36 163 expr a / b;
 #X obj 36 183 expr a % b;
@@ -250,111 +231,54 @@ properly. You can just put a zero as the second value.;
 #X obj 36 383 expr a != b;
 #X obj 36 403 expr a & b;
 #X obj 36 423 expr a ^ b;
-#X obj 22 444 bng 12 250 50 0 empty empty empty 17 7 0 10 -262144 -1
--1;
+#X obj 22 444 bng 12 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
 #X obj 36 443 expr a | b;
-#X obj 22 464 bng 12 250 50 0 empty empty empty 17 7 0 10 -262144 -1
--1;
+#X obj 22 464 bng 12 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
 #X obj 36 463 expr a && b;
-#X obj 22 484 bng 12 250 50 0 empty empty empty 17 7 0 10 -262144 -1
--1;
+#X obj 22 484 bng 12 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
 #X obj 36 483 expr a || b;
-#X obj 22 124 bng 12 250 50 0 empty empty empty 17 7 0 10 -262144 -1
--1;
-#X obj 36 123 expr a ~ b;
-#X obj 36 836 expr imodf(a);
-#X floatatom 131 1971 5 0 0 0 - - -, f 5;
-#X floatatom 179 1970 5 0 0 0 - - -, f 5;
-#X obj 131 1991 v a;
-#X obj 179 1991 v b;
-#X text 18 2277 cbrt(a);
-#X text 18 2297 erf(a);
-#X text 18 2317 erfc(a);
-#X text 18 2357 loglp(a);
-#X text 18 2377 isinf(a);
-#X text 18 2397 finite(a);
-#X text 18 2417 isnan(a);
-#X text 18 2457 drem(a);
-#X text 18 2477 asinh(a);
-#X text 18 2497 acosh(a);
-#X text 18 2517 atanh(a);
-#X text 98 2277 cube root;
-#X text 98 2297 error function;
-#X text 98 2317 complementary error function;
-#X text 18 2337 expm1(a);
-#X text 98 2337 exponential minus 1;
-#X text 98 2357 logarithm of 1 plus;
-#X text 98 2377 is the value infinite;
-#X text 98 2397 is the value finite;
-#X text 98 2417 is the value not a number;
-#X text 98 2437 copy the sign of a number;
-#X text 98 2457 floating-point remainder function;
-#X text 98 2477 inverse hyperbolic sine;
-#X text 98 2497 inverse hyperbolic cosine;
-#X text 98 2517 inverse hyperbolic tangent;
-#X obj 36 1843 expr size("expr_array");
+#X obj 22 124 bng 12 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 36 123 expr ~a;
+#X obj 36 897 expr imodf(a);
+#X obj 36 1973 expr size("expr_array");
 #X text 242 524 ***Scroll Down for more***;
 #X obj 1 572 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12
-0 14 -261106 -33289 0;
-#X obj 1 949 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12
-0 14 -261106 -33289 0;
-#X obj 1 1269 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12
-0 14 -261106 -33289 0;
-#X text 7 1269 Trigonometric Functions;
-#X text 7 949 Power Functions;
+0 14 #fcbcc4 #202020 0;
+#X obj 1 1049 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12
+0 14 #fcbcc4 #202020 0;
+#X obj 1 1409 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12
+0 14 #fcbcc4 #202020 0;
+#X text 7 1409 Trigonometric Functions;
+#X text 7 1049 Power Functions;
 #X text 7 572 General Purpose Functions;
-#X obj 1 1705 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12
-0 14 -261106 -33289 0;
-#X text 7 1705 Array/Table Functions;
-#X obj 1 2241 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12
-0 14 -261106 -33289 0;
-#X text 7 2241 Functions Not Available in Windows;
+#X obj 1 1835 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12
+0 14 #fcbcc4 #202020 0;
+#X text 7 1835 Array/Table Functions;
 #X text 148 612 conditional \; if (condition \, ifTrue-expr \, ifFalse-expr)
 ;
 #X text 147 663 random number between a and b. The value will;
 #X text 148 676 be less than the upper boundary and greater;
 #X text 148 688 than or equal to the lower boundary.;
-#X text 149 1180 power of 2;
-#X text 149 1167 multiply floating-point number by integral;
-#X text 217 1882 sum of an array within boundaries;
-#X text 219 1922 average of elements within boundaries;
-#X text 239 1942 store a value in an array;
-#X text 239 1955 ("array_name" \, index \, value);
-#X text 19 2032 Note: the quotation marks inside the parentheses are
-also required when using a variable \, like "$s2". When using array/table
-names like "array-name" or "\$0-table" \, use a variable-- otherwise
-the dash and the \$0 will get interpreted as an operator and a value
-\, respectively.;
-#X obj 35 2131 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
--1 -1;
-#X floatatom 35 2195 5 0 0 0 - - -, f 5;
-#X obj 35 2150 symbol \$0-expr-array;
-#X obj 35 2172 expr size("$s1");
-#X obj 36 1863 expr sum("expr_array");
-#X text 19 2096 For a table name like "\$0-array2" \, send the array
-name as a message:;
-#X text 239 1981 than the size of the table \,;
-#X text 239 1968 If the index is greater;
-#X text 240 1994 a modulo the size of the;
-#X text 240 2007 table is made.;
-#X text 109 1790 Note: The array name in [expr] must be in quotes;
-#X text 146 1803 when using these functions.;
-#X text 109 1816 (even when for a variable like "$s2");
-#X obj 36 1883 expr Sum("expr_array" \, 6 \, 0);
-#X obj 36 1903 expr avg("expr_array");
-#X obj 36 1923 expr Avg("expr_array" \, 1 \, 3);
-#X obj 36 1943 expr store("expr_array" \, 0 \, 3);
-#X text 254 2439 ***;
-#X text 17 2540 *** bug: copysign is spelled "copysig" in the source
-;
-#X text 18 2437 copysign(a);
+#X text 149 1340 power of 2;
+#X text 149 1327 multiply floating-point number by integral;
+#X obj 35 2211 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X floatatom 35 2275 5 0 0 0 - - -, f 5;
+#X obj 35 2230 symbol \$0-expr-array;
+#X obj 36 1993 expr sum("expr_array");
+#X text 109 1920 Note: The array name in [expr] must be in quotes;
+#X text 146 1933 when using these functions.;
 #X obj 1 82 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12
-0 14 -261106 -33289 0;
+0 14 #fcbcc4 #202020 0;
 #X text 19 37 The following operators and functions are available as
 arguments to the [expr] \, [expr~] \, and [fexpr~] objects.;
 #X text 7 82 Operators (from highest to lowest precedence);
-#X obj 1 2568 cnv 15 445 20 empty \$0-pddp.cnv.footer empty 20 12 0
-14 -233017 -33289 0;
+#X obj 1 2388 cnv 15 445 20 empty \$0-pddp.cnv.footer empty 20 12 0
+14 #e0e0e0 #202020 0;
 #N canvas 375 387 494 164 META 0;
 #X text 12 105 HELP_PATCH_AUTHORS Dave Sabine \, May 5 \, 2003 . Jonathan
 Wilkes revised the patch to conform to the PDDP template for Pd version
@@ -363,13 +287,104 @@ Wilkes revised the patch to conform to the PDDP template for Pd version
 #X text 12 45 DESCRIPTION complete list of functions and operators
 for expr family objects;
 #X text 12 25 KEYWORDS expr expr~ fexpr~ all_about_pd;
-#X restore 392 2570 pd META;
+#X restore 392 2390 pd META;
 #N canvas 218 414 428 140 Related_objects 0;
 #X obj 0 0 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
-14 -261106 -33289 0;
+14 #fcbcc4 #202020 0;
 #X text 6 1 [expr] Functions and Operators- Related Objects;
-#X restore 103 2570 pd Related_objects;
-#X obj 6 2570 pddp/pddplink all_about.pd -text All About Pd;
+#X restore 103 2390 pd Related_objects;
+#X obj 6 2390 pddp/pddplink all_about.pd -text All About Pd;
+#X obj 36 1229 expr erf(a);
+#X text 149 1227 error function;
+#X obj 36 1249 expr erfc(a);
+#X text 149 1247 complementary error function;
+#X obj 22 1270 bng 12 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 22 1290 bng 12 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 22 1310 bng 12 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 36 1269 expr cbrt(a);
+#X text 149 1267 cube root;
+#X obj 36 1289 expr expm1(a);
+#X text 149 1287 exponential minus 1;
+#X text 149 1307 logarithm of 1 plus;
+#X obj 36 1309 expr log1p(a);
+#X obj 22 1650 bng 12 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 22 1670 bng 12 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 22 1691 bng 12 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 36 1649 expr asinh(a);
+#X obj 36 1669 expr acosh(a);
+#X obj 36 1690 expr atanh(a);
+#X text 149 1647 inverse hyperbolic sine;
+#X text 149 1667 inverse hyperbolic cosine;
+#X text 149 1687 inverse hyperbolic tangent;
+#X obj 22 816 bng 12 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 36 815 expr abs(a);
+#X text 138 815 absolute value;
+#X obj 22 836 bng 12 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 36 835 expr abs(a);
+#X obj 22 836 bng 12 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 22 856 bng 12 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 36 855 expr abs(a);
+#X obj 22 856 bng 12 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 22 876 bng 12 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 36 875 expr abs(a);
+#X obj 22 876 bng 12 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 36 835 expr isinf(a);
+#X obj 36 855 expr finite(a);
+#X obj 36 875 expr isnan(a);
+#X text 138 835 is the value infinite;
+#X text 138 855 is the value finite;
+#X text 138 875 is the value not a number;
+#X obj 22 938 bng 12 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 36 938 expr remainder(a \, b);
+#X obj 22 958 bng 12 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 36 958 expr copysign(a \, b);
+#X text 167 958 copy sign of a number;
+#X text 167 938 floating point remainder;
+#X obj 35 2252 expr size($s1);
+#X obj 36 2013 expr Sum("expr_array" \, 0 \, 6);
+#N canvas 736 383 450 300 (subpatch) 0;
+#X array \$0-expr-array 11 float 3 black black;
+#A 0 -0.707106 0 0.707106 1 0.707108 2.65359e-06 -0.707104 -1 -0.70711
+-5.30718e-06 0.707103;
+#X coords 0 1 11 -1 80 60 1;
+#X restore 260 2220 graph;
+#X text 19 2105 Note: the quotation marks inside the parentheses are
+*not* required when using a variable \, like $s2. When using array/table
+names like "array-name" or "\$0-table" \, use a variable-- otherwise
+the dash and the \$0 will get interpreted as an operator and a value
+\, respectively.;
+#X text 19 2176 For a table name like "\$0-expr-array" \, send the
+array name as a message:;
+#X obj 22 2034 bng 12 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 22 2054 bng 12 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 36 2033 expr avg("expr_array");
+#X obj 36 2053 expr Avg("expr_array" \, 0 \, 6);
+#X text 185 2031 average of all elements in an array;
+#X text 217 2052 average within boundaries;
+#X text 217 2012 sum within boundaries;
+#X obj 1 2305 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12
+0 14 #fcbcc4 #202020 0;
+#X text 7 2305 Acoustic and String Functions;
+#X obj 20 2362 pddplink ../8.topics/expr.htm;
+#X text 20 2330 These are new in expr 0.57 / 0.58 and still need to
+be documented here. Please check the html manual for details:;
 #X connect 2 0 4 0;
 #X connect 3 0 5 0;
 #X connect 6 0 12 0;
@@ -378,124 +393,147 @@ for expr family objects;
 #X connect 9 0 28 0;
 #X connect 10 0 29 0;
 #X connect 11 0 30 0;
-#X connect 13 0 96 0;
-#X connect 14 0 98 0;
-#X connect 15 0 100 0;
-#X connect 16 0 102 0;
-#X connect 17 0 104 0;
-#X connect 18 0 106 0;
-#X connect 19 0 108 0;
-#X connect 20 0 31 0;
-#X connect 21 0 32 0;
-#X connect 22 0 33 0;
-#X connect 23 0 110 0;
-#X connect 24 0 195 0;
-#X connect 25 0 34 0;
+#X connect 13 0 83 0;
+#X connect 14 0 85 0;
+#X connect 15 0 87 0;
+#X connect 16 0 89 0;
+#X connect 17 0 91 0;
+#X connect 18 0 93 0;
+#X connect 19 0 95 0;
+#X connect 20 0 210 0;
+#X connect 21 0 212 0;
+#X connect 22 0 31 0;
+#X connect 23 0 97 0;
+#X connect 24 0 180 0;
+#X connect 25 0 32 0;
 #X connect 27 0 12 0;
 #X connect 28 0 12 0;
 #X connect 29 0 12 0;
 #X connect 30 0 12 0;
-#X connect 31 0 26 0;
-#X connect 32 0 26 0;
-#X connect 33 0 12 0;
-#X connect 34 0 12 0;
-#X connect 36 0 225 0;
-#X connect 37 0 252 0;
-#X connect 38 0 261 0;
-#X connect 39 0 262 0;
-#X connect 40 0 263 0;
-#X connect 41 0 264 0;
-#X connect 59 0 61 0;
-#X connect 60 0 62 0;
-#X connect 84 0 85 0;
-#X connect 85 0 12 0;
-#X connect 86 0 87 0;
-#X connect 90 0 92 0;
-#X connect 91 0 93 0;
-#X connect 94 0 95 0;
-#X connect 96 0 26 0;
-#X connect 98 0 26 0;
-#X connect 100 0 26 0;
-#X connect 102 0 26 0;
-#X connect 104 0 26 0;
-#X connect 106 0 26 0;
-#X connect 108 0 26 0;
-#X connect 110 0 26 0;
-#X connect 111 0 127 0;
-#X connect 112 0 129 0;
-#X connect 113 0 131 0;
-#X connect 114 0 133 0;
-#X connect 115 0 135 0;
-#X connect 116 0 137 0;
-#X connect 117 0 139 0;
-#X connect 118 0 141 0;
-#X connect 119 0 143 0;
-#X connect 120 0 148 0;
-#X connect 123 0 125 0;
-#X connect 124 0 126 0;
-#X connect 127 0 121 0;
-#X connect 129 0 121 0;
-#X connect 131 0 121 0;
-#X connect 133 0 121 0;
-#X connect 135 0 121 0;
-#X connect 137 0 121 0;
-#X connect 139 0 121 0;
-#X connect 141 0 121 0;
-#X connect 143 0 121 0;
-#X connect 145 0 150 0;
-#X connect 146 0 152 0;
-#X connect 147 0 155 0;
-#X connect 148 0 121 0;
-#X connect 150 0 121 0;
-#X connect 152 0 121 0;
-#X connect 155 0 121 0;
-#X connect 157 0 172 0;
-#X connect 158 0 173 0;
-#X connect 159 0 174 0;
-#X connect 160 0 175 0;
-#X connect 161 0 176 0;
-#X connect 162 0 177 0;
-#X connect 163 0 178 0;
-#X connect 164 0 179 0;
-#X connect 165 0 180 0;
-#X connect 166 0 181 0;
-#X connect 167 0 182 0;
-#X connect 168 0 183 0;
-#X connect 169 0 184 0;
-#X connect 170 0 185 0;
-#X connect 171 0 186 0;
-#X connect 172 0 63 0;
-#X connect 173 0 63 0;
-#X connect 174 0 63 0;
-#X connect 175 0 63 0;
-#X connect 176 0 63 0;
-#X connect 177 0 63 0;
-#X connect 178 0 63 0;
-#X connect 179 0 63 0;
-#X connect 180 0 63 0;
-#X connect 181 0 63 0;
-#X connect 182 0 63 0;
-#X connect 183 0 63 0;
-#X connect 184 0 63 0;
-#X connect 185 0 63 0;
-#X connect 186 0 63 0;
-#X connect 187 0 188 0;
-#X connect 188 0 63 0;
-#X connect 189 0 190 0;
-#X connect 190 0 63 0;
-#X connect 191 0 192 0;
-#X connect 192 0 63 0;
-#X connect 193 0 194 0;
-#X connect 194 0 63 0;
-#X connect 195 0 12 0;
-#X connect 196 0 198 0;
+#X connect 31 0 12 0;
+#X connect 32 0 12 0;
+#X connect 34 0 181 0;
+#X connect 35 0 200 0;
+#X connect 36 0 257 0;
+#X connect 46 0 48 0;
+#X connect 47 0 49 0;
+#X connect 71 0 72 0;
+#X connect 72 0 12 0;
+#X connect 73 0 74 0;
+#X connect 77 0 79 0;
+#X connect 78 0 80 0;
+#X connect 81 0 82 0;
+#X connect 82 0 12 0;
+#X connect 83 0 26 0;
+#X connect 85 0 26 0;
+#X connect 87 0 26 0;
+#X connect 89 0 26 0;
+#X connect 91 0 26 0;
+#X connect 93 0 26 0;
+#X connect 95 0 26 0;
+#X connect 97 0 26 0;
+#X connect 98 0 113 0;
+#X connect 99 0 115 0;
+#X connect 100 0 117 0;
+#X connect 101 0 119 0;
+#X connect 102 0 121 0;
+#X connect 103 0 123 0;
+#X connect 104 0 125 0;
+#X connect 105 0 127 0;
+#X connect 106 0 129 0;
+#X connect 107 0 134 0;
+#X connect 109 0 111 0;
+#X connect 110 0 112 0;
+#X connect 113 0 108 0;
+#X connect 115 0 108 0;
+#X connect 117 0 108 0;
+#X connect 119 0 108 0;
+#X connect 121 0 108 0;
+#X connect 123 0 108 0;
+#X connect 125 0 108 0;
+#X connect 127 0 108 0;
+#X connect 129 0 108 0;
+#X connect 131 0 136 0;
+#X connect 132 0 138 0;
+#X connect 133 0 141 0;
+#X connect 134 0 108 0;
+#X connect 136 0 108 0;
+#X connect 138 0 108 0;
+#X connect 141 0 108 0;
+#X connect 142 0 157 0;
+#X connect 143 0 158 0;
+#X connect 144 0 159 0;
+#X connect 145 0 160 0;
+#X connect 146 0 161 0;
+#X connect 147 0 162 0;
+#X connect 148 0 163 0;
+#X connect 149 0 164 0;
+#X connect 150 0 165 0;
+#X connect 151 0 166 0;
+#X connect 152 0 167 0;
+#X connect 153 0 168 0;
+#X connect 154 0 169 0;
+#X connect 155 0 170 0;
+#X connect 156 0 171 0;
+#X connect 157 0 50 0;
+#X connect 158 0 50 0;
+#X connect 159 0 50 0;
+#X connect 160 0 50 0;
+#X connect 161 0 50 0;
+#X connect 162 0 50 0;
+#X connect 163 0 50 0;
+#X connect 164 0 50 0;
+#X connect 165 0 50 0;
+#X connect 166 0 50 0;
+#X connect 167 0 50 0;
+#X connect 168 0 50 0;
+#X connect 169 0 50 0;
+#X connect 170 0 50 0;
+#X connect 171 0 50 0;
+#X connect 172 0 173 0;
+#X connect 173 0 50 0;
+#X connect 174 0 175 0;
+#X connect 175 0 50 0;
+#X connect 176 0 177 0;
+#X connect 177 0 50 0;
+#X connect 178 0 179 0;
+#X connect 179 0 50 0;
+#X connect 180 0 12 0;
+#X connect 181 0 37 0;
 #X connect 197 0 199 0;
-#X connect 225 0 42 0;
-#X connect 248 0 250 0;
+#X connect 199 0 256 0;
+#X connect 200 0 37 0;
+#X connect 210 0 26 0;
+#X connect 212 0 26 0;
+#X connect 214 0 217 0;
+#X connect 215 0 219 0;
+#X connect 216 0 222 0;
+#X connect 217 0 26 0;
+#X connect 219 0 26 0;
+#X connect 222 0 26 0;
+#X connect 223 0 226 0;
+#X connect 224 0 227 0;
+#X connect 225 0 228 0;
+#X connect 226 0 108 0;
+#X connect 227 0 108 0;
+#X connect 228 0 108 0;
+#X connect 232 0 233 0;
+#X connect 235 0 236 0;
+#X connect 237 0 244 0;
+#X connect 238 0 239 0;
+#X connect 240 0 245 0;
+#X connect 241 0 242 0;
+#X connect 243 0 246 0;
+#X connect 244 0 12 0;
+#X connect 245 0 12 0;
+#X connect 246 0 12 0;
 #X connect 250 0 251 0;
-#X connect 251 0 249 0;
-#X connect 252 0 42 0;
-#X connect 261 0 42 0;
-#X connect 262 0 42 0;
-#X connect 263 0 42 0;
-#X connect 264 0 42 0;
+#X connect 251 0 12 0;
+#X connect 252 0 253 0;
+#X connect 253 0 12 0;
+#X connect 256 0 198 0;
+#X connect 257 0 37 0;
+#X connect 261 0 263 0;
+#X connect 262 0 264 0;
+#X connect 263 0 37 0;
+#X connect 264 0 37 0;
diff --git a/pd/doc/5.reference/all_about_expr_if.pd b/pd/doc/5.reference/all_about_expr_if.pd
index 63c70525df51a2aef0c703191620b5eaacec9b1d..60952ffbdab21bf386ce9de8012d50338fe35e02 100644
--- a/pd/doc/5.reference/all_about_expr_if.pd
+++ b/pd/doc/5.reference/all_about_expr_if.pd
@@ -22,15 +22,15 @@ made up of three parts \, enclosed in parentheses:;
 #X text 20 126 Each part is separated by a comma.;
 #X text 20 108 c) an expression to evaluate if the condition is false.
 ;
-#X text 20 239 c) if the condition is false \, the number 20 is output.
+#X text 20 239 c) if the condition is false \, the number 50 is output.
 ;
 #X text 20 340 You can nest other functions within the if function
 \, including the if function itself.;
 #X text 20 157 By scrolling the number box below you can see the [expr
 if] function in action. When a number is received at the inlet:;
-#X text 20 189 a) the condition "$f1 < 20" checks if the input is less
-than twenty.;
-#X text 20 219 b) if true \, the value is subtracted from twenty and
+#X text 20 189 a) the condition "$f1 < 50" checks if the input is less
+than fifty.;
+#X text 20 219 b) if true \, the value is subtracted from fifty and
 output.;
 #X obj 1 478 cnv 15 445 20 empty \$0-pddp.cnv.footer empty 20 12 0
 14 -233017 -33289 0;
diff --git a/pd/doc/5.reference/atan2-help.pd b/pd/doc/5.reference/atan2-help.pd
index f99aba5e6de38fbe0f4e7222f308247dd0e4415e..18d07086ddeea8f5c76274a6ecef271595e58831 100644
--- a/pd/doc/5.reference/atan2-help.pd
+++ b/pd/doc/5.reference/atan2-help.pd
@@ -1,10 +1,10 @@
-#N canvas 427 60 559 622 10;
+#N canvas 428 60 559 622 10;
 #X obj 0 595 cnv 15 552 21 empty \$0-pddp.cnv.footer empty 20 12 0
-14 -228856 -66577 0;
+14 #dcdcdc #404040 0;
 #X obj 0 0 cnv 15 552 40 empty \$0-pddp.cnv.header atan2 3 12 0 18
--204280 -1 0;
+#c4dcdc #000000 0;
 #X obj 0 335 cnv 3 550 3 empty \$0-pddp.cnv.inlets inlets 8 12 0 13
--228856 -1 0;
+#dcdcdc #000000 0;
 #N canvas 572 335 399 294 META 0;
 #X text 12 125 LIBRARY internal;
 #X text 12 165 WEBSITE http://crca.ucsd.edu/~msp/;
@@ -23,15 +23,14 @@ for Pd version 0.42.;
 #X text 12 185 RELEASE_DATE 2009;
 #X restore 500 597 pd META;
 #X obj 0 422 cnv 3 550 3 empty \$0-pddp.cnv.outlets outlets 8 12 0
-13 -228856 -1 0;
+13 #dcdcdc #000000 0;
 #X obj 0 458 cnv 3 550 3 empty \$0-pddp.cnv.argument arguments 8 12
-0 13 -228856 -1 0;
+0 13 #dcdcdc #000000 0;
 #X obj 0 487 cnv 3 550 3 empty \$0-pddp.cnv.more_info more_info 8 12
-0 13 -228856 -1 0;
-#X text 98 463 (none);
+0 13 #dcdcdc #000000 0;
 #N canvas 213 521 428 109 Related_objects 0;
 #X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
-14 -204280 -1 0;
+14 #c4dcdc #000000 0;
 #X obj 149 43 exp;
 #X obj 177 43 log;
 #X obj 204 43 abs;
@@ -46,13 +45,13 @@ for Pd version 0.42.;
 #X obj 109 43 atan;
 #X text 8 2 [atan2] Related Objects;
 #X restore 101 598 pd Related_objects;
-#X obj 78 344 cnv 17 3 45 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
--162280 0;
+#X obj 78 344 cnv 17 3 45 empty \$0-pddp.cnv.let.0 0 5 9 0 16 #dcdcdc
+#9c9c9c 0;
 #X text 98 343 float;
 #X text 98 363 list;
 #X text 98 430 float;
-#X obj 78 431 cnv 17 3 17 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
--162280 0;
+#X obj 78 431 cnv 17 3 17 empty \$0-pddp.cnv.let.0 0 5 9 0 16 #dcdcdc
+#9c9c9c 0;
 #X obj 506 12 atan2;
 #X text 92 97 The [atan2] object produces the arctangent of the quotient
 of its two arguments. The number produced is a value between Pi and
@@ -87,7 +86,7 @@ to the left inlet.;
 #X obj 112 97 s X;
 #X obj 321 70 swap;
 #X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
-14 -204280 -1 0;
+14 #c4dcdc #000000 0;
 #X text 8 2 [atan2] Build Your Own [atan2] with [atan];
 #X connect 0 0 8 0;
 #X connect 1 0 4 1;
@@ -107,8 +106,8 @@ to the left inlet.;
 #X floatatom 261 217 5 0 0 0 - - -, f 5;
 #X obj 224 241 atan2;
 #X floatatom 224 268 5 0 0 0 - - -, f 5;
-#X obj 78 394 cnv 17 3 17 empty \$0-pddp.cnv.let.1 1 5 9 0 16 -228856
--162280 0;
+#X obj 78 394 cnv 17 3 17 empty \$0-pddp.cnv.let.1 1 5 9 0 16 #dcdcdc
+#9c9c9c 0;
 #X text 98 393 float;
 #X text 168 343 - Y coordinate;
 #X text 168 393 - X coordinate;
@@ -122,6 +121,8 @@ of [atan2].;
 #X obj 98 542 pddp/pddplink otherbinops-help.pd;
 #X obj 98 562 pddp/pddplink math-help.pd;
 #X text 217 562 - higher math objects;
-#X connect 18 0 20 0;
-#X connect 19 0 20 1;
-#X connect 20 0 21 0;
+#X text 100 465 1) float;
+#X text 187 465 - initialize right inlet (default 0);
+#X connect 17 0 19 0;
+#X connect 18 0 19 1;
+#X connect 19 0 20 0;
diff --git a/pd/doc/5.reference/expr-help.pd b/pd/doc/5.reference/expr-help.pd
index 7a88bb5ae0233ca01e8fdbedea01462ea40f6c80..8c50fe0f0153b3d0077ad1a455b45561acb95237 100644
--- a/pd/doc/5.reference/expr-help.pd
+++ b/pd/doc/5.reference/expr-help.pd
@@ -1,22 +1,22 @@
-#N canvas 433 38 555 619 10;
-#X obj 0 0 cnv 15 552 40 empty \$0-pddp.cnv.header expr 3 12 0 18 -204280
--1 0;
+#N canvas 434 38 555 619 10;
+#X obj 0 0 cnv 15 552 40 empty \$0-pddp.cnv.header expr 3 12 0 18 #c4dcdc
+#000000 0;
 #X obj 0 118 cnv 3 550 3 empty \$0-pddp.cnv.inlets inlets 8 12 0 13
--228856 -1 0;
+#dcdcdc #000000 0;
 #X obj 0 418 cnv 3 550 3 empty \$0-pddp.cnv.outlets outlets 8 12 0
-13 -228856 -1 0;
+13 #dcdcdc #000000 0;
 #X obj 0 449 cnv 3 550 3 empty \$0-pddp.cnv.argument arguments 8 12
-0 13 -228856 -1 0;
+0 13 #dcdcdc #000000 0;
 #X obj 0 537 cnv 3 550 3 empty \$0-pddp.cnv.more_info more_info 8 12
-0 13 -228856 -1 0;
-#X obj 78 127 cnv 17 3 153 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
--162280 0;
+0 13 #dcdcdc #000000 0;
+#X obj 78 127 cnv 17 3 153 empty \$0-pddp.cnv.let.0 0 5 9 0 16 #dcdcdc
+#9c9c9c 0;
 #X text 98 126 float;
 #X text 98 426 float;
-#X obj 78 426 cnv 17 3 17 empty \$0-pddp.cnv.let.n n 5 9 0 16 -228856
--162280 0;
-#X obj 78 286 cnv 17 3 123 empty \$0-pddp.cnv.let.n n 5 9 0 16 -228856
--162280 0;
+#X obj 78 426 cnv 17 3 17 empty \$0-pddp.cnv.let.n n 5 9 0 16 #dcdcdc
+#9c9c9c 0;
+#X obj 78 286 cnv 17 3 123 empty \$0-pddp.cnv.let.n n 5 9 0 16 #dcdcdc
+#9c9c9c 0;
 #X text 98 285 float;
 #X obj 514 11 expr;
 #X floatatom 87 50 0 0 0 0 - - -;
@@ -34,11 +34,11 @@
 #X text 98 398 symbol;
 #X text 98 242 bang;
 #X obj 87 74 expr 2 + $f1;
-#N canvas 96 45 428 436 expr_and_symbols 0;
+#N canvas 97 45 428 436 expr_and_symbols 0;
 #X floatatom 24 177 0 0 0 0 - - -;
 #X floatatom 24 232 0 0 0 0 - - -;
 #N canvas 0 0 450 300 (subpatch) 0;
-#X array \$0-expr-array 515 float 3;
+#X array \$0-expr-array 515 float 3 black black;
 #A 0 -0.0122715 0 0.0122715 0.0245412 0.0368072 0.0490676 0.0613207
 0.0735645 0.0857972 0.0980171 0.110222 0.122411 0.134581 0.14673 0.158858
 0.170962 0.18304 0.19509 0.207111 0.219101 0.231058 0.24298 0.254865
@@ -112,12 +112,11 @@
 #X coords 0 1 515 -1 200 140 1;
 #X restore 24 279 graph;
 #X obj 240 366 loadbang;
-#X msg 240 388 \; expr-array2 sinesum 512 1;
-#X obj 99 156 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
--1;
+#X obj 99 156 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
 #X obj 99 176 symbol \$0-expr-array;
 #X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
-14 -204280 -1 0;
+14 #c4dcdc #000000 0;
 #X obj 24 204 expr $s2[$f1];
 #X text 21 37 Symbolic arguments like $s1 \, $s2 \, and so on are currently
 used in [expr] to get the name of an array or table. You can also type
@@ -130,28 +129,29 @@ as an operator ("e.g. \, my minus table").;
 specified by the left inlet.;
 #X text 118 154 click here first;
 #X text 8 2 [expr] Using Symbolic Arguments;
-#X connect 0 0 8 0;
-#X connect 3 0 4 0;
-#X connect 5 0 6 0;
-#X connect 6 0 8 1;
-#X connect 8 0 1 0;
+#X msg 240 388 \; \$0-expr-array sinesum 512 1;
+#X connect 0 0 7 0;
+#X connect 3 0 14 0;
+#X connect 4 0 5 0;
+#X connect 5 0 7 1;
+#X connect 7 0 1 0;
 #X restore 169 397 pd expr_and_symbols;
 #X obj 21 74 expr 1;
 #X text 168 426 - float is the only type of output.;
-#X obj 273 577 pddplink http://crca.ucsd.edu/~syadegar/expr.html;
+#X obj 273 577 pddplink ../8.topics/expr.htm;
 #X text 273 563 Expr family of objects by Shahrokh Yadegari;
 #N canvas 91 55 428 501 expr_weirdness 0;
-#X obj 42 98 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
--1;
+#X obj 42 98 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
 #X floatatom 42 143 5 0 0 0 - - -, f 5;
 #X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
-14 -204280 -1 0;
+14 #c4dcdc #000000 0;
 #X obj 42 119 expr 8 / 6;
-#X obj 42 254 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
--1;
+#X obj 42 254 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
 #X floatatom 42 302 5 0 0 0 - - -, f 5;
-#X obj 42 331 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
--1;
+#X obj 42 331 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
 #X floatatom 42 379 5 0 0 0 - - -, f 5;
 #X text 19 166 This gets tricky \, because Pd strips unnecessary characters
 from a floating point number. Hence \, if you try to type "8.0 / 6.0"
@@ -167,8 +167,8 @@ interpret it as a symbol \, so no characters are stripped.;
 #X obj 42 355 expr 8.0/6.0;
 #X text 65 324 Removing the space between the numbers and the operator
 achieves the same thing.;
-#X obj 42 411 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
--1;
+#X obj 42 411 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
 #X floatatom 42 459 5 0 0 0 - - -, f 5;
 #X text 19 410 3;
 #X text 65 410 Using the "float" function makes the float type explicit.
@@ -179,8 +179,8 @@ achieves the same thing.;
 where numbers without a decimal point are interpreted as integers.
 This can be the source of some confusion in Pd \, which uses floating
 point numbers exclusively.;
-#X obj 22 576 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
--1;
+#X obj 22 576 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
 #X floatatom 22 618 5 0 0 0 - - -, f 5;
 #X text 19 486 Since float has priority over int \, the integer in
 example 3 is automatically converted to a float. Likewise \, using
@@ -195,8 +195,8 @@ to specify a large number:;
 notation. But even if it did \, a float will lose precision in this
 calculation:;
 #X text 165 625 (Scroll down for the answer);
-#X obj 22 747 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
--1;
+#X obj 22 747 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
 #X floatatom 22 789 5 0 0 0 - - -, f 5;
 #X obj 22 767 expr int(123456789.0)%10;
 #X connect 0 0 3 0;
@@ -254,10 +254,10 @@ use in [expr~] are listed below:;
 #X obj 101 578 pddp/pddplink all_about_expr_multiline.pd -text expr_multiline
 ;
 #X obj 0 595 cnv 15 552 21 empty \$0-pddp.cnv.footer empty 20 12 0
-14 -228856 -66577 0;
+14 #dcdcdc #404040 0;
 #N canvas 490 291 494 344 META 0;
 #X text 12 125 LIBRARY internal;
-#X text 12 165 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 165 WEBSITE https://yadegari.org/expr/expr.html;
 #X text 12 145 AUTHOR Shahrokh Yadegari;
 #X text 12 205 HELP_PATCH_AUTHORS Updated for Pd 0.35 test 26 and expr*
 0.4. Jonathan Wilkes revised the patch to conform to the PDDP template
@@ -272,7 +272,7 @@ for Pd version 0.42.;
 #X restore 500 598 pd META;
 #N canvas 222 522 428 109 Related_objects 0;
 #X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
-14 -204280 -1 0;
+14 #c4dcdc #000000 0;
 #X obj 22 43 expr~;
 #X obj 62 43 fexpr~;
 #X text 7 2 [expr] Related Objects;
diff --git a/pd/doc/5.reference/expr~-help.pd b/pd/doc/5.reference/expr~-help.pd
index 72b13951ea64e6530f6ab908d3ff68228aa934bc..43f919fe961ce1a9058549da1e016d0abf36d28a 100644
--- a/pd/doc/5.reference/expr~-help.pd
+++ b/pd/doc/5.reference/expr~-help.pd
@@ -17,7 +17,7 @@ for Pd version 0.42.;
 #X text 12 105 OUTLET_N signal;
 #X text 12 45 DESCRIPTION expression evaluation of signal data (vector)
 ;
-#X text 12 165 WEBSITE http://crca.ucsd.edu/~syadegar/expr.html;
+#X text 12 165 WEBSITE https://yadegari.org/expr/expr.html;
 #X text 12 185 RELEASE_DATE 1999;
 #X text 12 25 LICENSE GPL v2;
 #X restore 500 597 pd META;
@@ -42,7 +42,7 @@ for Pd version 0.42.;
 -162280 0;
 #X text 98 252 float;
 #X text 98 343 symbol;
-#X obj 273 572 pddplink http://crca.ucsd.edu/~syadegar/expr.html;
+#X obj 273 572 pddplink ../8.topics/expr.htm;
 #X text 273 555 Expr family of objects by Shahrokh Yadegari;
 #X obj 506 11 expr~;
 #X obj 18 159 print~;
diff --git a/pd/doc/5.reference/fexpr~-help.pd b/pd/doc/5.reference/fexpr~-help.pd
index d067c08818c7e377ee461ad41f6d187434979a84..d9481f432d1fe9084cb4d40c13d85a913f49613f 100644
--- a/pd/doc/5.reference/fexpr~-help.pd
+++ b/pd/doc/5.reference/fexpr~-help.pd
@@ -1,14 +1,14 @@
-#N canvas 430 30 555 619 10;
+#N canvas 431 30 555 619 10;
 #X obj 0 595 cnv 15 552 21 empty \$0-pddp.cnv.footer empty 20 12 0
-14 -228856 -66577 0;
+14 #dcdcdc #404040 0;
 #X obj 0 0 cnv 15 552 40 empty \$0-pddp.cnv.header fexpr~ 3 12 0 18
--204280 -1 0;
+#c4dcdc #000000 0;
 #X obj 0 195 cnv 3 550 3 empty \$0-pddp.cnv.inlets inlets 8 12 0 13
--228856 -1 0;
+#dcdcdc #000000 0;
 #N canvas 487 280 494 344 META 0;
 #X text 12 140 LIBRARY internal;
 #X text 12 160 AUTHOR Shahrokh Yadegari;
-#X text 12 180 WEBSITE http://crca.ucsd.edu/~syadegar/expr.html;
+#X text 12 180 WEBSITE https://yadegari.org/expr/expr.html;
 #X text 13 220 HELP_PATCH_AUTHORS Updated for Pd 0.35 test 26 and expr*
 0.4. Jonathan Wilkes revised the patch to conform to the PDDP template
 for Pd version 0.42.;
@@ -22,27 +22,27 @@ level);
 #X text 12 25 LICENSE GPL v2;
 #X restore 500 597 pd META;
 #X obj 0 369 cnv 3 550 3 empty \$0-pddp.cnv.outlets outlets 8 12 0
-13 -228856 -1 0;
+13 #dcdcdc #000000 0;
 #X obj 0 401 cnv 3 550 3 empty \$0-pddp.cnv.argument arguments 8 12
-0 13 -228856 -1 0;
+0 13 #dcdcdc #000000 0;
 #X obj 0 489 cnv 3 550 3 empty \$0-pddp.cnv.more_info more_info 8 12
-0 13 -228856 -1 0;
+0 13 #dcdcdc #000000 0;
 #N canvas 221 514 428 109 Related_objects 0;
 #X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
-14 -204280 -1 0;
+14 #c4dcdc #000000 0;
 #X obj 22 43 expr;
 #X text 8 2 [fexpr~] Related Objects;
 #X obj 62 43 expr~;
 #X restore 101 597 pd Related_objects;
-#X obj 78 204 cnv 17 3 35 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
--162280 0;
-#X obj 78 378 cnv 17 3 17 empty \$0-pddp.cnv.let.n n 5 9 0 16 -228856
--162280 0;
-#X obj 78 245 cnv 17 3 115 empty \$0-pddp.cnv.let.n n 5 9 0 16 -228856
--162280 0;
+#X obj 78 204 cnv 17 3 35 empty \$0-pddp.cnv.let.0 0 5 9 0 16 #dcdcdc
+#9c9c9c 0;
+#X obj 78 378 cnv 17 3 17 empty \$0-pddp.cnv.let.n n 5 9 0 16 #dcdcdc
+#9c9c9c 0;
+#X obj 78 245 cnv 17 3 115 empty \$0-pddp.cnv.let.n n 5 9 0 16 #dcdcdc
+#9c9c9c 0;
 #X text 98 265 float;
 #X text 98 344 symbol;
-#X obj 143 577 pddplink http://crca.ucsd.edu/~syadegar/expr.html;
+#X obj 143 577 pddplink ../8.topics/expr.htm;
 #X text 143 563 Expr family of objects by Shahrokh Yadegari;
 #X text 98 203 signal;
 #X text 98 245 signal;
@@ -66,7 +66,7 @@ level);
 #X obj 151 145 *~ 0.1;
 #N canvas 118 43 428 526 More_fexpr~_examples 0;
 #X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
-14 -204280 -1 0;
+14 #c4dcdc #000000 0;
 #X floatatom 87 236 0 0 0 0 - - -;
 #X floatatom 247 257 0 0 0 0 - - -;
 #X obj 83 306 dac~;
@@ -157,8 +157,8 @@ an audible click in the output.;
 #X msg 300 62 18;
 #X msg 355 63 0.01;
 #X obj 58 346 dac~;
-#X obj 118 9 bng 15 250 50 0 empty empty empty 20 8 0 8 -262144 -1
--1;
+#X obj 118 9 bng 15 250 50 0 empty empty empty 20 8 0 8 #fcfcfc #000000
+#000000;
 #X text 191 9 <- turn audio on and bang here;
 #X text 162 142 if you hear a buzz \, you have probably gone unstable
 bang on the top again;
@@ -180,15 +180,15 @@ which generate chotic signals;
 #X obj 224 328 tabsend~ lorenz2a;
 #X obj 329 309 tabsend~ lorenz3a;
 #N canvas 0 0 450 300 (subpatch) 0;
-#X array lorenz1a 64 float 0;
+#X array lorenz1a 64 float 0 black black;
 #X coords 0 1 63 -1 100 60 1;
 #X restore 13 417 graph;
 #N canvas 0 0 450 300 (subpatch) 0;
-#X array lorenz2a 64 float 0;
+#X array lorenz2a 64 float 0 black black;
 #X coords 0 1 63 -1 100 60 1;
 #X restore 183 417 graph;
 #N canvas 0 0 450 300 (subpatch) 0;
-#X array lorenz3a 64 float 0;
+#X array lorenz3a 64 float 0 black black;
 #X coords 0 1 63 -1 100 60 1;
 #X restore 363 417 graph;
 #X text 191 365 You can see the graphs if you scroll down;
@@ -234,15 +234,15 @@ which generate chotic signals;
 #X msg 167 13 10;
 #X obj 221 10 expr 8./3;
 #N canvas 0 0 450 300 (subpatch) 0;
-#X array lorenz1 2048 float 0;
+#X array lorenz1 2048 float 0 black black;
 #X coords 0 -1 2047 1 100 60 1;
 #X restore 72 447 graph;
 #N canvas 0 0 450 300 (subpatch) 0;
-#X array lorenz2 2048 float 0;
+#X array lorenz2 2048 float 0 black black;
 #X coords 0 -1 2047 1 100 60 1;
 #X restore 217 447 graph;
 #N canvas 0 0 450 300 (subpatch) 0;
-#X array lorenz3 2048 float 0;
+#X array lorenz3 2048 float 0 black black;
 #X coords 0 -1 2047 1 100 60 1;
 #X restore 370 447 graph;
 #X msg 118 136 set 1.2 2.3 4.4;
@@ -253,8 +253,8 @@ which generate chotic signals;
 #X obj 349 69 v dt;
 #X msg 300 12 18;
 #X msg 345 13 0.01;
-#X obj 118 -41 bng 15 250 50 0 empty empty empty 20 8 0 8 -262144 -1
--1;
+#X obj 118 -41 bng 15 250 50 0 empty empty empty 20 8 0 8 #fcfcfc #000000
+#000000;
 #X text 191 -41 <- turn audio on and bang here;
 #X text 142 92 if you hear a buzz \, you have probably gone unstable
 bang on the top again;
@@ -315,7 +315,7 @@ which generate chotic signals;
 \, and -20 offset will filter audio at frequency of 1102.5;
 #N canvas 9 230 428 130 CPU_usage 0;
 #X obj 0 0 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
-14 -204280 -1 0;
+14 #c4dcdc #000000 0;
 #X text 7 1 [fexpr~] CPU Usage;
 #X text 19 37 NOTE: fexpr~ could use lots of CPU power. By default
 fexpr~ is on when it is loaded. In this help patch we are turning them
@@ -331,7 +331,7 @@ You can use the "start" and "stop" messages to start and stop fexpr~
 #X text 158 203 - the first inlet of [expr~] only accepts signals.
 For this reason \, you can't specify the $f1 or $s1 variables- only
 $x and $y variables are accepted.;
-#N canvas 39 43 508 524 $x_and_$y_variables 0;
+#N canvas 40 43 508 524 $x_and_$y_variables 0;
 #X text 92 198 $y -> $y1[-1];
 #X text 20 167 Shorthands: $x -> $x1[0];
 #X text 92 183 $x1 -> $x1[0] $x2 -> $x2[0] .....;
@@ -343,7 +343,7 @@ and y3[-3]=4.5;
 #X text 45 361 e.g. \, set 0.1 2.2 0.4 sets y1[-1]=0.1 y2[-1]=2.2 \,
 and y3[-1]=0.4;
 #X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
-14 -204280 -1 0;
+14 #c4dcdc #000000 0;
 #X text 8 2 [fexpr~] $x and $y Variables;
 #X text 20 38 The following dollarsign variables are only used for
 fexpr~:;
@@ -351,8 +351,6 @@ fexpr~:;
 #X text 20 91 $x#;
 #X text 70 91 - $x# is a shorthand for $x#[0] \, specifying the current
 sample;
-#X text 70 61 - the sample from inlet # indexed by n where n has to
-satisfy 0 => n >= -vector size;
 #X text 20 121 $y[n];
 #X text 70 121 - the output value indexed by n where n has to satisfy
 0 > n >= -vector size. (The vector size can be changed by the "block~"
@@ -380,28 +378,29 @@ at most nine variables in one [fexpr~] object.;
 #X text 21 273 stop;
 #X text 21 288 verbose;
 #X text 81 288 - toggle verbose mode;
+#X text 70 61 - the sample from inlet # indexed by n where n has to
+satisfy 0 >= n >= -vector size;
 #X restore 160 321 pd $x_and_$y_variables;
 #X text 158 244 - an extra inlet is added for each dollar-sign variable
 used in the expression ($s2 \, $f3 \, etc.). Extra inlets accept only
 one of the following: signals \, floats \, or symbols. Each variable
 is denoted by a dollarsign \, an "f" for float \, "s" for symbol \,
 or an "x" or "y" as specified in the following subpatch:;
-#N canvas 118 44 428 479 fexpr~_and_symbols 0;
+#N canvas 120 44 428 479 fexpr~_and_symbols 0;
 #N canvas 0 0 450 300 (subpatch) 0;
-#X array \$0-expr-array 515 float 2;
-#X coords 0 1 514 -1 200 140 1;
+#X array \$0-expr-array 515 float 2 black black;
+#X coords 0 1 515 -1 200 140 1;
 #X restore 24 329 graph;
 #X obj 240 386 loadbang;
-#X obj 105 176 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
--1 -1;
+#X obj 105 176 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
 #X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
-14 -204280 -1 0;
+14 #c4dcdc #000000 0;
 #X text 117 239 of the array will be clipped;
 #X text 117 224 index values outside the range;
 #X text 20 116 The following syntax outputs the y-value for the element
 specified by the left inlet.;
 #X text 124 174 click here first;
-#X obj 105 196 symbol \$0-expr~-array;
 #X floatatom 24 266 5 0 0 0 - - -, f 5;
 #X text 21 37 Symbolic arguments like $s1 \, $s2 \, and so on are currently
 used in [expr] \, [expr~] \, and [fexpr~] to get the name of an array
@@ -413,12 +412,13 @@ will get interpreted as an operator ("e.g. \, my minus table").;
 #X floatatom 24 177 5 0 0 0 - - -, f 5;
 #X obj 240 412 f \$0;
 #X msg 240 438 \; \$1-expr-array sinesum 512 1;
-#X connect 1 0 14 0;
-#X connect 2 0 8 0;
-#X connect 8 0 12 1;
-#X connect 12 0 9 0;
-#X connect 13 0 12 0;
-#X connect 14 0 15 0;
+#X obj 105 196 symbol \$0-expr-array;
+#X connect 1 0 13 0;
+#X connect 2 0 15 0;
+#X connect 11 0 8 0;
+#X connect 12 0 11 0;
+#X connect 13 0 14 0;
+#X connect 15 0 11 1;
 #X restore 160 344 pd fexpr~_and_symbols;
 #X text 11 23 expression evaluation of signal data (sample level);
 #X text 80 416 n) float;
diff --git a/pd/doc/5.reference/gatom-help.pd b/pd/doc/5.reference/gatom-help.pd
index d9e2d226d7e400d7757b2b7f81cc7e33a402a012..4d1e6369563a2433bad1acadc77579e6e16e9a38 100644
--- a/pd/doc/5.reference/gatom-help.pd
+++ b/pd/doc/5.reference/gatom-help.pd
@@ -1,11 +1,11 @@
-#N canvas 428 36 555 619 10;
-#X obj 0 595 cnv 15 552 21 empty \$0-pddp.cnv.footer empty 20 12 0
-14 -228856 -66577 0;
+#N canvas 428 58 555 749 10;
+#X obj 0 725 cnv 15 552 21 empty \$0-pddp.cnv.footer empty 20 12 0
+14 #dcdcdc #404040 0;
 #X obj 0 0 cnv 15 552 40 empty \$0-pddp.cnv.header gatom 3 12 0 18
--204280 -1 0;
-#X obj 0 231 cnv 3 550 3 empty \$0-pddp.cnv.inlets inlets 8 12 0 13
--228856 -1 0;
-#N canvas 486 289 494 344 META 0;
+#c4dcdc #000000 0;
+#X obj 0 311 cnv 3 550 3 empty \$0-pddp.cnv.inlets inlets 8 12 0 13
+#dcdcdc #000000 0;
+#N canvas 993 318 494 344 META 0;
 #X text 12 115 LIBRARY internal;
 #X text 12 155 WEBSITE http://crca.ucsd.edu/~msp/;
 #X text 12 35 LICENSE SIBSD;
@@ -16,45 +16,46 @@ Wilkes revised the patch to conform to the PDDP template for Pd version
 #X text 12 75 INLET_0 float bang symbol set;
 #X text 12 95 OUTLET_0 float;
 #X text 12 175 RELEASE_DATE 1997;
-#X text 12 55 DESCRIPTION atom (number box and symbol box);
 #X text 12 5 KEYWORDS control storage GUI nonlocal symbol_op;
-#X restore 500 597 pd META;
-#X obj 0 396 cnv 3 550 3 empty \$0-pddp.cnv.outlets outlets 8 12 0
-13 -228856 -1 0;
-#X obj 0 470 cnv 3 550 3 empty \$0-pddp.cnv.argument arguments 8 12
-0 13 -228856 -1 0;
-#X obj 0 499 cnv 3 550 3 empty \$0-pddp.cnv.more_info more_info 8 12
-0 13 -228856 -1 0;
-#X text 98 474 (none);
-#N canvas 214 517 428 109 Related_objects 0;
+#X text 12 55 DESCRIPTION atom (number \, symbol \, and list boxes)
+;
+#X restore 500 727 pd META;
+#X obj 0 486 cnv 3 550 3 empty \$0-pddp.cnv.outlets outlets 8 12 0
+13 #dcdcdc #000000 0;
+#X obj 0 600 cnv 3 550 3 empty \$0-pddp.cnv.argument arguments 8 12
+0 13 #dcdcdc #000000 0;
+#X obj 0 629 cnv 3 550 3 empty \$0-pddp.cnv.more_info more_info 8 12
+0 13 #dcdcdc #000000 0;
+#X text 98 604 (none);
+#N canvas 215 517 428 109 Related_objects 0;
 #X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
-14 -204280 -1 0;
+14 #c4dcdc #000000 0;
 #X text 47 1 Related Objects;
 #X floatatom 9 3 5 0 0 0 - - -, f 5;
 #X obj 21 42 float;
 #X obj 61 42 list;
 #X obj 102 45 nbx 5 14 -1e+37 1e+37 0 0 empty empty empty 0 -8 0 10
--262144 -1 -1 0 256 0;
+#fcfcfc #000000 #000000 0 256 0;
 #X obj 169 42 drawnumber;
-#X restore 102 597 pd Related_objects;
-#X obj 78 240 cnv 17 3 145 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
--162280 0;
-#X text 98 404 float;
-#X obj 78 405 cnv 17 3 52 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
--162280 0;
-#X floatatom 401 9 5 0 0 0 - - -, f 5;
+#X restore 102 727 pd Related_objects;
+#X obj 78 320 cnv 17 3 145 empty \$0-pddp.cnv.let.0 0 5 9 0 16 #dcdcdc
+#9c9c9c 0;
+#X text 98 494 float;
+#X obj 78 495 cnv 17 3 102 empty \$0-pddp.cnv.let.0 0 5 9 0 16 #dcdcdc
+#9c9c9c 0;
+#X floatatom 311 9 5 0 0 0 - - -, f 5;
 #X floatatom 25 58 0 0 0 0 - - -;
 #X floatatom 25 96 0 0 0 0 - - -;
 #X msg 469 76 set 45;
 #X floatatom 469 104 0 0 0 0 - - -;
-#X text 98 239 bang;
-#X text 98 259 float;
-#X text 98 289 list;
-#X text 98 309 symbol;
-#X text 98 339 set;
-#N canvas 98 96 430 514 Number_box_properties 0;
+#X text 98 319 bang;
+#X text 98 339 float;
+#X text 98 369 list;
+#X text 98 399 symbol;
+#X text 98 429 set;
+#N canvas 100 96 430 514 Number_box_properties 0;
 #X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
-14 -204280 -1 0;
+14 #c4dcdc #000000 0;
 #X floatatom 70 102 12 0 0 0 - - -, f 12;
 #X floatatom 71 223 1 0 0 0 - - -, f 1;
 #X text 50 2 Properties for gatom;
@@ -72,8 +73,8 @@ TIME. In a production patch \, you'll want to set a specific width.
 ;
 #X floatatom 70 143 0 0 0 0 - - -;
 #X text 148 143 width = 0 characters (read below);
-#X text 69 240 A width of one gives a clickable toggle switch a la Max.
-;
+#X text 69 240 A width of one gives a clickable toggle switch a la
+Max.;
 #X text 88 223 width = 1 character: toggle between 0 and 1;
 #X text 19 260 limits;
 #X floatatom 71 282 5 0 127 0 - - -, f 5;
@@ -104,17 +105,15 @@ to "gatom-help-snd";
 to "Number_box_7" when using non-local send and receive names. If you
 want to use both \, see the [nbx] object:;
 #X obj 71 626 nbx 5 14 -1e+37 1e+37 0 0 empty empty empty 0 -8 0 10
--262144 -1 -1 0 256 0;
+#fcfcfc #000000 #000000 0 256 0;
 #X floatatom 13 3 5 0 0 0 - - -, f 5;
 #X connect 27 0 31 0;
 #X connect 29 0 28 0;
-#X restore 102 571 pd Number_box_properties;
-#X obj 4 597 pddp/pddplink all_about_help_patches.pd -text Usage Guide
+#X restore 102 701 pd Number_box_properties;
+#X obj 4 727 pddp/pddplink all_about_help_patches.pd -text Usage Guide
 ;
 #X symbolatom 25 138 10 0 0 0 - - -, f 10;
-#X text 11 23 atom (number box and symbol box);
-#X symbolatom 481 9 10 0 0 0 - - -, f 10;
-#X text 445 9 and;
+#X symbolatom 351 9 10 0 0 0 - - -, f 10;
 #X symbolatom 25 174 10 0 0 0 - - -, f 10;
 #X text 61 52 A number box allows you to display a number or enter
 a number using the mouse and keyboard. When a number arrives at the
@@ -126,33 +125,127 @@ or enter one using the mouse and keyboard. Unlike a number box you
 cannot change the value by clicking and dragging.;
 #X text 96 174 The symbol box is called "Symbol" in the "Put" menu.
 ;
-#X text 168 239 - sends the current value to the outlet.;
+#X text 168 319 - sends the current value to the outlet.;
 #X msg 469 156 set foo;
 #X symbolatom 469 180 10 0 0 0 - - -, f 10;
-#X text 168 309 - symbol box only: an incoming symbol is displayed
+#X text 168 399 - symbol box only: an incoming symbol is displayed
 and output. (Number box will display and output zero.);
-#X text 168 259 - number box only: sets the current value and outputs
+#X text 168 339 - number box only: sets the current value and outputs
 it. (Symbol box will display 'float' and output 'symbol float'.);
-#X text 168 289 - a list will be truncated to the first item.;
-#X text 168 339 - displays the incoming value without outputting it
-(e.g. \, "set 23" will cause a number box to display 23). Sending a
-set message without a value does not change the current value of a
-number box or symbol box.;
-#X text 168 404 - number box only: outputs a float for each message
+#X text 168 494 - number box only: outputs a float for each message
 it receives (except set).;
-#X text 98 434 symbol;
-#X text 168 434 - symbol box only: outputs a symbol message for each
+#X text 98 524 symbol;
+#X text 168 524 - symbol box only: outputs a symbol message for each
 message it receives (except set).;
-#X text 100 537 Control-clicking (or command-clicking on a mac) toggles
+#X text 100 667 Control-clicking (or command-clicking on a mac) toggles
 the value between 0 and the last nonzero value.;
-#X floatatom 59 545 5 0 0 0 - - -, f 5;
-#X text 100 503 You can shift-click a number box and drag to change
-the number by hundredths instead of ones.;
+#X floatatom 59 675 5 0 0 0 - - -, f 5;
 #X text 61 118 The number box is called "Number" in the "Put" menu.
 ;
-#X text 67 197 To enter data simply click a number box or symbol box
+#X text 67 277 To enter data simply click a number box or symbol box
 and begin typing. Then click "Enter" to finish and output it.;
+#X text 168 371 - list box only: an incoming list \, symbol \, or number
+is displayed and output.;
+#X text 168 429 - displays the incoming value without outputting it
+(e.g. \, "set 23" will cause a number box to display 23). Sending a
+set message without a value does not change the current value of a
+number box or symbol box \, but clears a listbox.;
+#X text 98 558 list;
+#X text 168 558 - list box only: outputs a list \, symbol \, or number
+message for each message it receives (except set). Outputs bang for
+the empty list.;
+#X text 96 244 The list box is called "Listbox" in the "Put" menu.
+;
+#X listbox 25 208 10 0 0 0 - - -, f 10;
+#X listbox 25 244 10 0 0 0 - - -, f 10;
+#X listbox 469 251 10 0 0 0 - - -, f 10;
+#X msg 469 226 set foo 1 2 3;
+#X text 11 23 atom (number \, symbol \, and list boxes);
+#X listbox 420 9 20 0 0 0 - - -, f 20;
+#X text 97 204 A list box allows you to display a list \, symbol \,
+or number \, or enter one using the mouse and keyboard. You can also
+change the value of a number by clicking and dragging.;
+#X text 100 633 You can shift-click a number box (or a number in a
+listbox) and drag to change the number by hundredths instead of ones.
+;
+#N canvas 360 174 656 446 More_about_symbol_and_listbox 0;
+#X obj 1 1 cnv 15 650 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 #c4dcdc #000000 0;
+#X symbolatom 8 3 10 0 0 0 - - -, f 10;
+#X listbox 80 3 20 0 0 0 - - -, f 20;
+#X listbox 212 218 20 0 0 0 - - -, f 20;
+#X symbolatom 12 218 10 0 0 0 - - -, f 10;
+#X msg 102 38 set foo;
+#X msg 102 98 1 foo 2 3;
+#X msg 12 38 symbol bla;
+#X floatatom 12 68 5 0 0 0 - - -, f 5;
+#X msg 302 38 set foo;
+#X msg 302 98 1 foo 2 3;
+#X msg 212 38 symbol bla;
+#X floatatom 212 68 5 0 0 0 - - -, f 5;
+#X obj 212 108 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X msg 302 128 list foo 2 3;
+#X msg 302 158 foo 2 3;
+#X obj 12 108 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X msg 102 128 list foo 2 3;
+#X msg 102 158 foo 2 3;
+#X msg 102 68 set;
+#X msg 302 68 set;
+#X obj 12 258 print symbol;
+#X obj 212 258 print listbox;
+#X text 372 38 sets a symbol (both symbol and listbox);
+#X text 372 68 clears a listbox (no-op with symbol);
+#X text 402 111 list input (gives error with symbol);
+#X text 372 158 not a list -- gives error with both;
+#X msg 12 320 set foo;
+#X symbolatom 12 345 10 0 0 0 - - -, f 10;
+#X msg 210 320 set 1 2 foo bar;
+#X listbox 210 345 20 0 0 0 - - -, f 20;
+#X obj 12 291 loadbang;
+#X symbolatom 10 380 10 0 0 0 - symbox -, f 10;
+#X listbox 10 404 10 0 0 0 - - -, f 10;
+#X listbox 210 380 10 0 0 0 - listbox -, f 10;
+#X symbolatom 210 404 10 0 0 0 - - -, f 10;
+#X text 340 380 You can always send data from a symbol to a listbox
+\, but not the other way round \, unless the listbox contains a single
+symbol., f 46;
+#X text 340 340 You can ckick and drag numbers in a listbox \, like
+in a number box. Try it!, f 46;
+#X text 340 290 You can initialize both symbols and listboxes with
+loadbang and a set message \, or by sending data to a receiver (see
+below)., f 46;
+#X msg 83 380 \; symbox symbol bar \; listbox 4711;
+#X text 210 2 More about symbols and listboxes;
+#X connect 3 0 22 0;
+#X connect 4 0 21 0;
+#X connect 5 0 4 0;
+#X connect 6 0 4 0;
+#X connect 7 0 4 0;
+#X connect 8 0 4 0;
+#X connect 9 0 3 0;
+#X connect 10 0 3 0;
+#X connect 11 0 3 0;
+#X connect 12 0 3 0;
+#X connect 13 0 3 0;
+#X connect 14 0 3 0;
+#X connect 15 0 3 0;
+#X connect 16 0 4 0;
+#X connect 17 0 4 0;
+#X connect 18 0 4 0;
+#X connect 19 0 4 0;
+#X connect 20 0 3 0;
+#X connect 27 0 28 0;
+#X connect 29 0 30 0;
+#X connect 31 0 27 0;
+#X connect 31 0 29 0;
+#X connect 32 0 33 0;
+#X connect 34 0 35 0;
+#X restore 282 701 pd More_about_symbol_and_listbox;
 #X connect 13 0 14 0;
 #X connect 15 0 16 0;
-#X connect 24 0 28 0;
-#X connect 33 0 34 0;
+#X connect 24 0 26 0;
+#X connect 31 0 32 0;
+#X connect 47 0 48 0;
+#X connect 50 0 49 0;
diff --git a/pd/doc/5.reference/inlet~-help.pd b/pd/doc/5.reference/inlet~-help.pd
index 3407ebbd6c959ff6564d1a8c6f9cc10d73ce79d5..99d1516a26afbd3f0334c0ccb5cd878de5a3ff30 100644
--- a/pd/doc/5.reference/inlet~-help.pd
+++ b/pd/doc/5.reference/inlet~-help.pd
@@ -1,5 +1,5 @@
-#N canvas 436 61 555 619 10;
-#X obj 0 595 cnv 15 552 21 empty \$0-pddp.cnv.footer empty 20 12 0
+#N canvas 438 61 555 598 10;
+#X obj 0 575 cnv 15 552 21 empty \$0-pddp.cnv.footer empty 20 12 0
 14 #dcdcdc #404040 0;
 #X obj 0 0 cnv 15 552 40 empty \$0-pddp.cnv.header inlet~ 3 12 0 18
 #c4dcdc #000000 0;
@@ -17,12 +17,12 @@ Jonathan Wilkes to conform to the PDDP template for Pd version 0.42.
 #X text 12 65 OUTLET_0 signal;
 #X text 12 5 KEYWORDS signal nonlocal canvas_op;
 #X text 12 145 RELEASE_DATE 1997;
-#X restore 500 597 pd META;
+#X restore 500 577 pd META;
 #X obj 0 352 cnv 3 550 3 empty \$0-pddp.cnv.outlets outlets 8 12 0
 13 #dcdcdc #000000 0;
 #X obj 0 434 cnv 3 550 3 empty \$0-pddp.cnv.argument arguments 8 12
 0 13 #dcdcdc #000000 0;
-#X obj 0 566 cnv 3 550 3 empty \$0-pddp.cnv.more_info more_info 8 12
+#X obj 0 546 cnv 3 550 3 empty \$0-pddp.cnv.more_info more_info 8 12
 0 13 #dcdcdc #000000 0;
 #N canvas 220 515 428 109 Related_objects 0;
 #X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
@@ -34,7 +34,7 @@ Jonathan Wilkes to conform to the PDDP template for Pd version 0.42.
 #X obj 225 43 block~;
 #X text 8 2 [inlet~] Related Objects;
 #X obj 277 43 switch~;
-#X restore 102 598 pd Related_objects;
+#X restore 102 578 pd Related_objects;
 #X obj 78 361 cnv 17 3 60 empty \$0-pddp.cnv.let.0 0 5 9 0 16 #dcdcdc
 #9c9c9c 0;
 #X obj 369 234 print~;
@@ -45,7 +45,7 @@ Jonathan Wilkes to conform to the PDDP template for Pd version 0.42.
 #X text 339 151 audio in and out;
 #X obj 369 212 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
 #000000 #000000;
-#N canvas 50 247 428 293 subpatch-with-inlets-and-outlets 0;
+#N canvas 51 247 428 293 subpatch-with-inlets-and-outlets 0;
 #X obj 68 68 inlet;
 #X text 20 38 control inlet for receiving messages;
 #X floatatom 68 96 0 0 0 0 - - -;
@@ -72,29 +72,25 @@ Jonathan Wilkes to conform to the PDDP template for Pd version 0.42.
 #X text 11 23 signal inlet for a subpatch;
 #X obj 497 10 inlet~;
 #X text 98 360 signal;
-#N canvas 61 152 428 466 up/downsampling 0;
-#X obj 30 396 print~;
-#X obj 48 370 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#N canvas 62 152 428 466 up/downsampling 0;
+#X obj 38 370 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
 #000000;
-#X obj 112 396 print~;
-#X obj 130 372 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#X obj 120 372 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
 #000000 #000000;
-#X obj 195 396 print~;
-#X obj 213 370 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#X obj 203 370 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
 #000000 #000000;
 #N canvas 0 0 450 300 (subpatch) 0;
-#X array \$0-tab 64 float 3 black black;
+#X array \$0-tab 64 float 1 black black;
 #A 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;
-#X coords 0 1 64 -1 200 140 1;
+#X coords 0 1 63 -1 200 140 1;
 #X restore 216 181 graph;
-#X obj 274 368 s \$0-tab;
-#X msg 274 341 const 0 \, 0 0 1;
-#X obj 145 233 print~;
-#X obj 145 208 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#X obj 270 396 s \$0-tab;
+#X msg 270 368 const 0 \, 0 0 1;
+#X obj 142 207 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
 #000000 #000000;
-#X obj 23 181 tabreceive~ \$0-tab;
-#N canvas 81 269 585 267 test-subpatch-upsampled 0;
+#X obj 20 180 tabreceive~ \$0-tab;
+#N canvas 84 269 585 267 test-subpatch-upsampled 0;
 #X obj 40 17 block~ 128 1 2;
 #X obj 209 149 inlet~ hold;
 #X obj 367 153 inlet~ lin;
@@ -118,83 +114,92 @@ Jonathan Wilkes to conform to the PDDP template for Pd version 0.42.
 #X connect 6 0 5 0;
 #X connect 8 0 7 0;
 #X connect 13 0 3 0;
-#X restore 23 285 pd test-subpatch-upsampled;
-#N canvas 46 43 585 267 test-subpatch-downsampled 0;
+#X restore 20 284 pd test-subpatch-upsampled;
+#N canvas 50 43 585 267 test-subpatch-downsampled 0;
 #X obj 23 146 outlet~;
 #X obj 209 149 outlet~ hold;
 #X obj 367 153 outlet~ lin;
 #X text 206 173 sample/hold;
 #X text 364 177 linear interpolation;
-#X text 197 19 upsampling methods:;
 #X obj 40 17 block~ 32 1 0.5;
 #X text 18 169 interleaved zeros;
-#X obj 21 83 tabreceive~ \$0-tab;
-#X connect 8 0 0 0;
-#X connect 8 0 1 0;
-#X connect 8 0 2 0;
-#X restore 29 340 pd test-subpatch-downsampled;
+#X obj 23 83 tabreceive~ \$0-tab;
+#X text 197 19 downsampling methods:;
+#X connect 7 0 0 0;
+#X connect 7 0 1 0;
+#X connect 7 0 2 0;
+#X restore 20 340 pd test-subpatch-downsampled;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 #c4dcdc #000000 0;
+#X text 8 2 [inlet~] Up/downsampling;
 #X text 20 38 When a subpatch is reblocked to a higher or lower sample
 rate \, the inlet~ and outlet~ objects offer a choice of three upsampling
 methods. (The inlet~ upsamples when entering a subpatch with a higher
-sample rate \; the outlet~ upsamples when leaving a subpatch of _lower_
+sample rate and the outlet~ upsamples when leaving a subpatch of lower
 sample rate \, as demonstrated below.) There is no corresponding choice
 of downsampling method - downsampling is done simply by dropping the
 extra samples.;
-#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
-14 #c4dcdc #000000 0;
-#X text 8 2 [inlet~] Up/downsampling;
-#X connect 1 0 0 0;
-#X connect 3 0 2 0;
+#X obj 142 232 print~ in;
+#X obj 20 396 print~ pad;
+#X obj 102 396 print~ hold;
+#X obj 185 396 print~ lin;
+#X text 270 340 set table;
+#X connect 0 0 14 0;
+#X connect 1 0 15 0;
+#X connect 2 0 16 0;
 #X connect 5 0 4 0;
-#X connect 8 0 7 0;
-#X connect 10 0 9 0;
-#X connect 11 0 12 1;
-#X connect 11 0 12 2;
-#X connect 11 0 9 0;
-#X connect 11 0 12 0;
-#X connect 13 0 0 0;
-#X connect 13 1 2 0;
-#X connect 13 2 4 0;
-#X restore 171 513 pd up/downsampling;
-#X text 80 452 1) symbol atom;
+#X connect 6 0 13 0;
+#X connect 7 0 8 1;
+#X connect 7 0 8 2;
+#X connect 7 0 8 0;
+#X connect 7 0 13 0;
+#X connect 9 0 14 0;
+#X connect 9 1 15 0;
+#X connect 9 2 16 0;
+#X restore 171 523 pd up/downsampling;
+#X text 80 462 1) symbol atom;
 #X text 98 102 The subpatch below shows how to use [inlet] \, [inlet~]
 \, [outlet] \, and [outlet~] objects to get data into and out of a
 subpatch:;
-#X text 168 452 - (optional) The word "hold" will cause sample/hold
+#X text 168 462 - (optional) The word "hold" will cause sample/hold
 upsampling/downsampling \, and the word "lin" will cause linear upsampling/downsampling.
 See the subpatch below for more details:;
 #X text 98 62 The [inlet~] object allows signals to be sent to a subpatch
 from objects on the parent canvas.;
-#X obj 4 597 pddp/pddplink all_about_help_patches.pd -text Usage Guide
+#X obj 4 577 pddp/pddplink all_about_help_patches.pd -text Usage Guide
 ;
 #X text 168 360 - the [inlet~] object outputs the signal sent to the
 inlet of the subpatch in which it is found. When multiple [inlet~]
 or [inlet] objects are in one subpatch \, their horizontal order corresponds
 with the inlets drawn on the containing object in the parent patch.
 ;
-#N canvas 582 179 543 415 inlet~-forwarding 0;
-#X obj 173 182 inlet~ fwd;
+#N canvas 586 179 543 415 inlet~-forwarding 0;
 #X obj 106 145 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
 #000000 #000000;
 #X floatatom 131 145 5 0 0 0 - - -, f 5;
 #X msg 174 145 1 2 3;
 #X msg 221 145 poodle 50;
-#X obj 174 283 print~;
+#X obj 173 283 print~;
 #X text 206 254 (check that audio is on);
 #X obj 186 256 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
 #000000 #000000;
-#X text 58 16 you can pass "fwd" as an argument to inlet~ to ask for
-a second outlet that forwards messages. Float messages aren't forwarded
-though - instead \, they set the signal output value in case the parent
-inlet isn't connected. Messages to the inlet~ object are treated the
-same as messages to the inlet on the parent.;
 #X text 64 339 (note: inlet~ objects inside patches that are copied
 using clone~ are always connected to incoming signals \, so a float
 message to such an inlet~ has no effect.);
-#X obj 240 214 print fwd;
-#X connect 0 0 5 0;
-#X connect 0 1 10 0;
-#X connect 7 0 5 0;
+#X obj 206 214 print fwd;
+#X obj 173 182 inlet~;
+#X text 58 16 The second outlet forwards messages that aren't floats
+or signals. Float messages set the signal output value in case the
+parent inlet isn't connected. Other control messages to the [inlet~]
+object are treated the same as messages to the inlet on the parent.
+;
+#X connect 0 0 9 0;
+#X connect 1 0 9 0;
+#X connect 2 0 9 0;
+#X connect 3 0 9 0;
+#X connect 6 0 4 0;
+#X connect 9 0 4 0;
+#X connect 9 1 8 0;
 #X restore 118 294 pd inlet~-forwarding;
 #X obj 50 259 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
 #000000;
@@ -202,8 +207,6 @@ message to such an inlet~ has no effect.);
 #X msg 118 259 1 2 3;
 #X msg 165 259 poodle 50;
 #X text 267 293 <= catching messages to inlet~ objects;
-#X text 168 532 - the word "fwd" will allow non-signal message to be
-forwarded. See [pd inlet~-forwarding] above for details.;
 #X connect 10 0 16 1;
 #X connect 11 0 16 0;
 #X connect 15 0 9 0;
diff --git a/pd/doc/5.reference/math-help.pd b/pd/doc/5.reference/math-help.pd
index ae00e7fef720783a8bfe8625db2ad2930e9b604f..377781aae780eefc9ade380173b6a899c3aac5b4 100644
--- a/pd/doc/5.reference/math-help.pd
+++ b/pd/doc/5.reference/math-help.pd
@@ -1,10 +1,10 @@
-#N canvas 406 25 555 619 10;
+#N canvas 407 28 555 619 10;
 #X obj 0 595 cnv 15 552 21 empty \$0-pddp.cnv.footer empty 20 12 0
-14 -228856 -66577 0;
+14 #dcdcdc #404040 0;
 #X obj 0 0 cnv 15 552 40 empty \$0-pddp.cnv.header (math_functions)
-3 12 0 18 -204280 -1 0;
+3 12 0 18 #c4dcdc #000000 0;
 #X obj 0 315 cnv 3 550 3 empty \$0-pddp.cnv.inlets inlets 8 12 0 13
--228856 -1 0;
+#dcdcdc #000000 0;
 #N canvas 488 281 494 344 META 0;
 #X text 12 85 LIBRARY internal;
 #X text 12 125 WEBSITE http://crca.ucsd.edu/~msp/;
@@ -20,14 +20,14 @@ Pd. Revised by Jonathan Wilkes to conform to the PDDP template.;
 #X text 12 25 KEYWORDS control trigonometry;
 #X restore 500 597 pd META;
 #X obj 0 438 cnv 3 550 3 empty \$0-pddp.cnv.outlets outlets 8 12 0
-13 -228856 -1 0;
+13 #dcdcdc #000000 0;
 #X obj 0 474 cnv 3 550 3 empty \$0-pddp.cnv.argument arguments 8 12
-0 13 -228856 -1 0;
+0 13 #dcdcdc #000000 0;
 #X obj 0 522 cnv 3 550 3 empty \$0-pddp.cnv.more_info more_info 8 12
-0 13 -228856 -1 0;
+0 13 #dcdcdc #000000 0;
 #N canvas 219 515 428 109 Related_objects 0;
 #X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
-14 -204280 -1 0;
+14 #c4dcdc #000000 0;
 #X text 8 2 (math) Related Objects;
 #X obj 22 42 osc~;
 #X obj 58 42 cos~;
@@ -37,13 +37,13 @@ Pd. Revised by Jonathan Wilkes to conform to the PDDP template.;
 #X obj 210 42 sqrt~;
 #X obj 254 42 pow~;
 #X restore 102 598 pd Related_objects;
-#X obj 78 324 cnv 17 3 60 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
--162280 0;
+#X obj 78 324 cnv 17 3 60 empty \$0-pddp.cnv.let.0 0 5 9 0 16 #dcdcdc
+#9c9c9c 0;
 #X text 98 323 float;
 #X text 98 342 list;
 #X text 98 446 float;
-#X obj 78 447 cnv 17 3 17 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
--162280 0;
+#X obj 78 447 cnv 17 3 17 empty \$0-pddp.cnv.let.0 0 5 9 0 16 #dcdcdc
+#9c9c9c 0;
 #X text 11 23 higher math in Pd;
 #X obj 249 12 sin;
 #X obj 275 12 cos;
@@ -61,9 +61,6 @@ Pd. Revised by Jonathan Wilkes to conform to the PDDP template.;
 #X text 168 323 - the incoming value;
 #X text 168 342 - a list will be truncated.;
 #X text 168 446 - the outgoing value.;
-#X text 98 478 The [pow] object accepts one float argument to initialize
-the right inlet. All other math functions listed here take no arguments.
-;
 #X text 217 541 - binary arithmetic operators;
 #X obj 98 541 pddp/pddplink operators-help.pd;
 #X text 217 561 - relational and logical operators;
@@ -106,27 +103,30 @@ See their respective help patches (links above) for more info.);
 #X floatatom 442 201 5 0 0 0 - - -, f 5;
 #X floatatom 442 254 5 0 0 0 - - -, f 5;
 #X obj 442 227 wrap;
+#X text 98 478 The [atan2] and [pow] objects accept one float argument
+to initialize the right inlet. All other math functions listed here
+take no arguments.;
 #X connect 24 0 26 0;
 #X connect 25 0 24 0;
-#X connect 38 0 56 0;
-#X connect 40 0 57 0;
-#X connect 42 0 58 0;
-#X connect 44 0 59 0;
-#X connect 46 0 60 0;
-#X connect 48 0 61 0;
-#X connect 50 0 62 0;
-#X connect 52 0 63 0;
-#X connect 54 0 64 0;
-#X connect 56 0 39 0;
-#X connect 57 0 41 0;
-#X connect 58 0 43 0;
-#X connect 59 0 45 0;
-#X connect 60 0 47 0;
-#X connect 61 0 49 0;
-#X connect 62 0 51 0;
-#X connect 63 0 53 0;
-#X connect 64 0 55 0;
-#X connect 65 0 64 1;
-#X connect 66 0 59 1;
-#X connect 67 0 69 0;
-#X connect 69 0 68 0;
+#X connect 37 0 55 0;
+#X connect 39 0 56 0;
+#X connect 41 0 57 0;
+#X connect 43 0 58 0;
+#X connect 45 0 59 0;
+#X connect 47 0 60 0;
+#X connect 49 0 61 0;
+#X connect 51 0 62 0;
+#X connect 53 0 63 0;
+#X connect 55 0 38 0;
+#X connect 56 0 40 0;
+#X connect 57 0 42 0;
+#X connect 58 0 44 0;
+#X connect 59 0 46 0;
+#X connect 60 0 48 0;
+#X connect 61 0 50 0;
+#X connect 62 0 52 0;
+#X connect 63 0 54 0;
+#X connect 64 0 63 1;
+#X connect 65 0 58 1;
+#X connect 66 0 68 0;
+#X connect 68 0 67 0;
diff --git a/pd/doc/5.reference/midi-help.pd b/pd/doc/5.reference/midi-help.pd
index 437223b7ee118901d95ce9d70e99d0b486b7ea5e..4fa9b4875cd3f3588536106f6918837a31553a42 100644
--- a/pd/doc/5.reference/midi-help.pd
+++ b/pd/doc/5.reference/midi-help.pd
@@ -1,8 +1,8 @@
-#N canvas 1 53 555 619 10;
-#X obj 0 595 cnv 15 552 21 empty \$0-pddp.cnv.footer empty 20 12 0
-14 -228856 -66577 0;
+#N canvas 2 53 555 659 10;
+#X obj 0 635 cnv 15 552 21 empty \$0-pddp.cnv.footer empty 20 12 0
+14 #dcdcdc #404040 0;
 #X obj 0 0 cnv 15 552 40 empty \$0-pddp.cnv.header (MIDI) 3 12 0 18
--204280 -1 0;
+#c4dcdc #000000 0;
 #N canvas 403 185 494 367 META 0;
 #X text 12 105 LIBRARY internal;
 #X text 12 145 WEBSITE http://crca.ucsd.edu/~msp/;
@@ -17,88 +17,95 @@ Jonathan Wilkes to conform to the PDDP template for Pd version 0.42.
 touchin bendout ctlout midiout noteout pgmout polytouchout touchout
 ;
 #X text 12 165 RELEASE_DATE 1997;
-#X restore 500 597 pd META;
-#X obj 0 561 cnv 3 550 3 empty \$0-pddp.cnv.more_info more_info 8 12
-0 13 -228856 -1 0;
+#X restore 500 637 pd META;
+#X obj 0 601 cnv 3 550 3 empty \$0-pddp.cnv.more_info more_info 8 12
+0 13 #dcdcdc #000000 0;
 #N canvas 217 519 428 109 Related_objects 0;
 #X obj 62 43 makenote;
 #X obj 22 43 poly;
 #X obj 123 43 list;
 #X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
-14 -204280 -1 0;
+14 #c4dcdc #000000 0;
 #X text 8 2 (MIDI) Related Objects;
-#X restore 102 598 pd Related_objects;
+#X restore 102 638 pd Related_objects;
 #X text 11 23 MIDI input/output objects;
 #X obj 86 57 bendin;
-#X obj 86 343 bendout;
+#X obj 86 383 bendout;
 #X obj 86 113 ctlin;
-#X obj 86 403 ctlout;
-#X obj 85 237 notein;
-#X obj 267 343 noteout;
-#X obj 266 57 pgmin;
-#X obj 267 403 pgmout;
-#X obj 267 237 touchin;
-#X obj 267 113 polytouchin;
+#X obj 86 443 ctlout;
+#X obj 267 58 notein;
+#X obj 267 383 noteout;
+#X obj 266 114 pgmin;
+#X obj 267 443 pgmout;
+#X obj 267 231 touchin;
+#X obj 267 170 polytouchin;
 #X obj 85 177 midiin;
-#X obj 267 177 sysexin;
-#X obj 86 463 midiout;
-#X obj 267 463 polytouchout;
-#X obj 267 523 touchout;
+#X obj 85 231 sysexin;
+#X obj 86 503 midiout;
+#X obj 267 503 polytouchout;
+#X obj 267 563 touchout;
 #X text 10 57 MIDI input:;
-#X text 10 319 MIDI output:;
-#X obj 345 522 pddp/pddplink touchout-help.pd;
-#X obj 146 464 pddp/pddplink midiout-help.pd;
-#X obj 4 597 pddp/pddplink all_about_help_patches.pd -text Usage Guide
+#X text 10 359 MIDI output:;
+#X obj 345 562 pddp/pddplink touchout-help.pd;
+#X obj 146 504 pddp/pddplink midiout-help.pd;
+#X obj 4 637 pddp/pddplink all_about_help_patches.pd -text Usage Guide
 ;
 #X floatatom 86 78 5 0 0 0 - - -, f 5;
 #X floatatom 119 78 5 0 0 0 - - -, f 5;
 #X floatatom 86 141 5 0 0 0 - - -, f 5;
 #X floatatom 126 141 5 0 0 0 - - -, f 5;
 #X floatatom 166 141 5 0 0 0 - - -, f 5;
-#X obj 346 462 pddp/pddplink polytouchout-help.pd;
+#X obj 346 502 pddp/pddplink polytouchout-help.pd;
 #X floatatom 85 200 5 0 0 0 - - -, f 5;
 #X floatatom 125 200 5 0 0 0 - - -, f 5;
-#X floatatom 85 265 5 0 0 0 - - -, f 5;
-#X floatatom 125 265 5 0 0 0 - - -, f 5;
-#X floatatom 165 265 5 0 0 0 - - -, f 5;
-#X floatatom 266 79 5 0 0 0 - - -, f 5;
-#X floatatom 301 79 5 0 0 0 - - -, f 5;
-#X floatatom 267 135 5 0 0 0 - - -, f 5;
-#X floatatom 307 135 5 0 0 0 - - -, f 5;
-#X floatatom 347 135 5 0 0 0 - - -, f 5;
-#X floatatom 267 199 5 0 0 0 - - -, f 5;
-#X floatatom 307 199 5 0 0 0 - - -, f 5;
-#X floatatom 267 259 5 0 0 0 - - -, f 5;
-#X floatatom 307 259 5 0 0 0 - - -, f 5;
-#X floatatom 86 319 5 0 0 0 - - -, f 5;
-#X floatatom 125 319 5 0 0 0 - - -, f 5;
-#X floatatom 85 379 5 0 0 0 - - -, f 5;
-#X floatatom 124 379 5 0 0 0 - - -, f 5;
-#X floatatom 164 379 5 0 0 0 - - -, f 5;
-#X floatatom 86 439 5 0 0 0 - - -, f 5;
-#X floatatom 125 439 5 0 0 0 - - -, f 5;
-#X floatatom 267 319 5 0 0 0 - - -, f 5;
-#X floatatom 306 319 5 0 0 0 - - -, f 5;
-#X floatatom 346 319 5 0 0 0 - - -, f 5;
-#X floatatom 267 379 5 0 0 0 - - -, f 5;
-#X floatatom 306 379 5 0 0 0 - - -, f 5;
-#X floatatom 267 439 5 0 0 0 - - -, f 5;
-#X floatatom 306 439 5 0 0 0 - - -, f 5;
-#X floatatom 346 439 5 0 0 0 - - -, f 5;
-#X floatatom 267 499 5 0 0 0 - - -, f 5;
-#X floatatom 312 499 5 0 0 0 - - -, f 5;
+#X floatatom 267 86 5 0 0 0 - - -, f 5;
+#X floatatom 307 86 5 0 0 0 - - -, f 5;
+#X floatatom 347 86 5 0 0 0 - - -, f 5;
+#X floatatom 266 136 5 0 0 0 - - -, f 5;
+#X floatatom 301 136 5 0 0 0 - - -, f 5;
+#X floatatom 267 192 5 0 0 0 - - -, f 5;
+#X floatatom 307 192 5 0 0 0 - - -, f 5;
+#X floatatom 347 192 5 0 0 0 - - -, f 5;
+#X floatatom 85 253 5 0 0 0 - - -, f 5;
+#X floatatom 125 253 5 0 0 0 - - -, f 5;
+#X floatatom 267 253 5 0 0 0 - - -, f 5;
+#X floatatom 307 253 5 0 0 0 - - -, f 5;
+#X floatatom 86 359 5 0 0 0 - - -, f 5;
+#X floatatom 125 359 5 0 0 0 - - -, f 5;
+#X floatatom 85 419 5 0 0 0 - - -, f 5;
+#X floatatom 124 419 5 0 0 0 - - -, f 5;
+#X floatatom 164 419 5 0 0 0 - - -, f 5;
+#X floatatom 86 479 5 0 0 0 - - -, f 5;
+#X floatatom 125 479 5 0 0 0 - - -, f 5;
+#X floatatom 267 359 5 0 0 0 - - -, f 5;
+#X floatatom 306 359 5 0 0 0 - - -, f 5;
+#X floatatom 346 359 5 0 0 0 - - -, f 5;
+#X floatatom 267 419 5 0 0 0 - - -, f 5;
+#X floatatom 306 419 5 0 0 0 - - -, f 5;
+#X floatatom 267 479 5 0 0 0 - - -, f 5;
+#X floatatom 306 479 5 0 0 0 - - -, f 5;
+#X floatatom 346 479 5 0 0 0 - - -, f 5;
+#X floatatom 267 539 5 0 0 0 - - -, f 5;
+#X floatatom 312 539 5 0 0 0 - - -, f 5;
 #X obj 131 57 pddp/pddplink bendin-help.pd;
 #X obj 129 112 pddp/pddplink ctlin-help.pd;
 #X obj 131 177 pddp/pddplink midiin-help.pd;
-#X obj 131 237 pddp/pddplink notein-help.pd;
-#X obj 346 57 pddp/pddplink pgmin-help.pd;
-#X obj 347 113 pddp/pddplink polytouchin-help.pd;
-#X obj 347 177 pddp/pddplink sysexin-help.pd;
-#X obj 346 237 pddp/pddplink touchin-help.pd;
-#X obj 146 343 pddp/pddplink bendout-help.pd;
-#X obj 146 403 pddp/pddplink ctlout-help.pd;
-#X obj 347 343 pddp/pddplink noteout-help.pd;
-#X obj 347 403 pddp/pddplink pgmout-help.pd;
+#X obj 313 58 pddp/pddplink notein-help.pd;
+#X obj 346 114 pddp/pddplink pgmin-help.pd;
+#X obj 347 170 pddp/pddplink polytouchin-help.pd;
+#X obj 165 231 pddp/pddplink sysexin-help.pd;
+#X obj 346 231 pddp/pddplink touchin-help.pd;
+#X obj 146 383 pddp/pddplink bendout-help.pd;
+#X obj 146 443 pddp/pddplink ctlout-help.pd;
+#X obj 347 383 pddp/pddplink noteout-help.pd;
+#X obj 347 443 pddp/pddplink pgmout-help.pd;
+#X floatatom 85 303 5 0 0 0 - - -, f 5;
+#X floatatom 166 303 5 0 0 0 - - -, f 5;
+#X obj 85 281 midirealtimein;
+#X obj 185 281 pddp/pddplink midirealtimein-help.pd;
+#X text 20 530 NOTE: In order to use MIDI input or output objects \,
+be sure to set MIDI devices in:, f 32;
+#X text 80 572 Preferences --> MIDI;
 #X connect 6 0 26 0;
 #X connect 6 1 27 0;
 #X connect 8 0 28 0;
@@ -135,3 +142,5 @@ touchin bendout ctlout midiout noteout pgmout polytouchout touchout
 #X connect 60 0 19 2;
 #X connect 61 0 20 0;
 #X connect 62 0 20 1;
+#X connect 77 0 75 0;
+#X connect 77 1 76 0;
diff --git a/pd/doc/5.reference/midiin-help.pd b/pd/doc/5.reference/midiin-help.pd
index 10fe993efab68655a4e9fdfc1fd8e22a9a66ec1d..3f871bf196fa2575e4aed197955dee670246e1a1 100644
--- a/pd/doc/5.reference/midiin-help.pd
+++ b/pd/doc/5.reference/midiin-help.pd
@@ -1,10 +1,10 @@
-#N canvas 430 36 555 619 10;
+#N canvas 427 38 555 619 10;
 #X obj 0 595 cnv 15 552 21 empty \$0-pddp.cnv.footer empty 20 12 0
-14 -228856 -66577 0;
+14 #dcdcdc #404040 0;
 #X obj 0 0 cnv 15 552 40 empty \$0-pddp.cnv.header midiin 3 12 0 18
--204280 -1 0;
+#c4dcdc #000000 0;
 #X obj 0 441 cnv 3 550 3 empty \$0-pddp.cnv.inlets inlets 8 12 0 13
--228856 -1 0;
+#dcdcdc #000000 0;
 #N canvas 487 284 494 344 META 0;
 #X text 12 105 LIBRARY internal;
 #X text 12 145 WEBSITE http://crca.ucsd.edu/~msp/;
@@ -20,14 +20,14 @@ Wilkes revised the patch to conform to the PDDP template for Pd version
 #X text 12 5 KEYWORDS control MIDI;
 #X restore 500 597 pd META;
 #X obj 0 469 cnv 3 550 3 empty \$0-pddp.cnv.outlets outlets 8 12 0
-13 -228856 -1 0;
+13 #dcdcdc #000000 0;
 #X obj 0 526 cnv 3 550 3 empty \$0-pddp.cnv.argument arguments 8 12
-0 13 -228856 -1 0;
+0 13 #dcdcdc #000000 0;
 #X obj 0 568 cnv 3 550 3 empty \$0-pddp.cnv.more_info more_info 8 12
-0 13 -228856 -1 0;
+0 13 #dcdcdc #000000 0;
 #N canvas 208 213 441 414 Related_objects 0;
 #X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
-14 -204280 -1 0;
+14 #c4dcdc #000000 0;
 #X obj 78 80 ctlin;
 #X obj 221 80 pgmin;
 #X obj 28 80 bendin;
@@ -62,11 +62,11 @@ by Olaf Matthes);
 #X obj 26 385 pddp/helplink cyclone/midiflush;
 #X restore 102 597 pd Related_objects;
 #X text 98 477 float;
-#X obj 78 478 cnv 17 3 17 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
--162280 0;
+#X obj 78 478 cnv 17 3 17 empty \$0-pddp.cnv.let.0 0 5 9 0 16 #dcdcdc
+#9c9c9c 0;
 #X text 98 445 (none);
-#X obj 78 503 cnv 17 3 17 empty \$0-pddp.cnv.let.1 1 5 9 0 16 -228856
--162280 0;
+#X obj 78 503 cnv 17 3 17 empty \$0-pddp.cnv.let.1 1 5 9 0 16 #dcdcdc
+#9c9c9c 0;
 #X obj 364 572 pddp/pddplink all_about_midi_flags.pd -text all_about_midi_flags
 ;
 #X text 98 572 for an explanation of MIDI usage in Pd see:;
@@ -76,14 +76,13 @@ by Olaf Matthes);
 #X floatatom 258 184 0 0 0 0 - - -;
 #X text 164 230 This object is always omni and;
 #X text 163 246 outputs the port number instead;
-#X text 11 23 needs a description;
-#X text 168 477 - port number;
-#X text 98 502 ???;
-#X text 168 502 - ???;
-#X text 80 545 1) ???;
-#X text 168 545 - ???;
-#X text 164 264 of the channel (Linux only).;
 #X obj 4 597 pddp/pddplink all_about_help_patches.pd -text Usage Guide
 ;
+#X text 198 264 of the channel.;
+#X text 98 502 float;
+#X text 168 502 - port number;
+#X text 168 477 - raw MIDI byte;
+#X text 98 535 (none);
+#X text 11 23 raw MIDI input;
 #X connect 15 0 16 0;
 #X connect 15 1 17 0;
diff --git a/pd/doc/5.reference/midiout-help.pd b/pd/doc/5.reference/midiout-help.pd
index 937f8048299eb0573e299a1d912181ae8c705974..8c6208696992fb4b94b734f0accc4da076ce7847 100644
--- a/pd/doc/5.reference/midiout-help.pd
+++ b/pd/doc/5.reference/midiout-help.pd
@@ -1,10 +1,10 @@
-#N canvas 428 36 555 619 10;
+#N canvas 428 39 555 619 10;
 #X obj 0 595 cnv 15 552 21 empty \$0-pddp.cnv.footer empty 20 12 0
-14 -228856 -66577 0;
+14 #dcdcdc #404040 0;
 #X obj 0 0 cnv 15 552 40 empty \$0-pddp.cnv.header midiout 3 12 0 18
--204280 -1 0;
-#X obj 0 421 cnv 3 550 3 empty \$0-pddp.cnv.inlets inlets 8 12 0 13
--228856 -1 0;
+#c4dcdc #000000 0;
+#X obj 0 471 cnv 3 550 3 empty \$0-pddp.cnv.inlets outlets 8 12 0 13
+#dcdcdc #000000 0;
 #N canvas 486 284 494 344 META 0;
 #X text 12 105 LIBRARY internal;
 #X text 12 145 WEBSITE http://crca.ucsd.edu/~msp/;
@@ -21,15 +21,15 @@ to conform to the PDDP template for Pd version 0.42.;
 #X text 12 85 INLET_1 float;
 #X text 12 5 KEYWORDS control MIDI;
 #X restore 500 597 pd META;
-#X obj 0 449 cnv 3 550 3 empty \$0-pddp.cnv.outlets outlets 8 12 0
-13 -228856 -1 0;
+#X obj 0 389 cnv 3 550 3 empty \$0-pddp.cnv.outlets inlets 8 12 0 13
+#dcdcdc #000000 0;
 #X obj 0 506 cnv 3 550 3 empty \$0-pddp.cnv.argument arguments 8 12
-0 13 -228856 -1 0;
+0 13 #dcdcdc #000000 0;
 #X obj 0 568 cnv 3 550 3 empty \$0-pddp.cnv.more_info more_info 8 12
-0 13 -228856 -1 0;
+0 13 #dcdcdc #000000 0;
 #N canvas 210 192 428 435 Related_objects 0;
 #X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
-14 -204280 -1 0;
+14 #c4dcdc #000000 0;
 #X obj 78 80 ctlin;
 #X obj 221 80 pgmin;
 #X obj 28 80 bendin;
@@ -63,29 +63,36 @@ by Olaf Matthes);
 #X obj 25 385 pddp/helplink cyclone/midiparse;
 #X obj 25 400 pddp/helplink cyclone/midiflush;
 #X restore 102 597 pd Related_objects;
-#X text 98 457 float;
-#X obj 78 458 cnv 17 3 17 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
--162280 0;
-#X text 98 425 (none);
-#X text 98 482 float;
-#X obj 78 483 cnv 17 3 17 empty \$0-pddp.cnv.let.1 1 5 9 0 16 -228856
--162280 0;
+#X text 98 397 float;
+#X obj 78 398 cnv 17 3 17 empty \$0-pddp.cnv.let.0 0 5 9 0 16 #dcdcdc
+#9c9c9c 0;
+#X text 98 478 (none);
+#X text 98 442 float;
+#X obj 78 443 cnv 17 3 17 empty \$0-pddp.cnv.let.1 1 5 9 0 16 #dcdcdc
+#9c9c9c 0;
 #X obj 364 572 pddp/pddplink all_about_midi_flags.pd -text all_about_midi_flags
 ;
 #X text 98 572 for an explanation of MIDI usage in Pd see:;
-#X text 11 23 read incoming stream of MIDI notes;
 #X text 80 525 1) float;
 #X obj 220 244 midiout;
 #X text 168 268 use this to output raw MIDI;
-#X text 163 288 (the second inlet is the port;
 #X floatatom 220 212 5 0 0 0 - - -, f 5;
 #X floatatom 259 212 5 0 0 0 - - -, f 5;
 #X obj 495 11 midiout;
-#X text 168 482 - port number;
-#X text 168 457 - ???;
-#X text 168 525 - ???;
-#X text 166 306 number.) (Linux Only).;
+#X text 168 442 - port number;
 #X obj 4 597 pddp/pddplink all_about_help_patches.pd -text Usage Guide
 ;
-#X connect 20 0 17 0;
-#X connect 21 0 17 1;
+#X text 133 288 (the second inlet is the port number.);
+#X text 168 525 - port number;
+#X text 98 419 list;
+#X text 168 397 - raw MIDI stream (single MIDI bytes);
+#X text 168 419 - MIDI packets (list of MIDI bytes);
+#X msg 220 140 144 \, 68 \, 120;
+#X msg 220 170 128 68 100;
+#X text 90 130 note-on as a stream of raw MIDI, f 20;
+#X text 90 160 note-off as a MIDI packet list, f 20;
+#X text 11 23 raw MIDI output;
+#X connect 18 0 16 0;
+#X connect 19 0 16 1;
+#X connect 28 0 16 0;
+#X connect 29 0 16 0;
diff --git a/pd/doc/5.reference/midirealtimein-help.pd b/pd/doc/5.reference/midirealtimein-help.pd
new file mode 100644
index 0000000000000000000000000000000000000000..2229911abf14ce5a5f65740b9dc005e0b3a20e65
--- /dev/null
+++ b/pd/doc/5.reference/midirealtimein-help.pd
@@ -0,0 +1,88 @@
+#N canvas 428 38 555 619 10;
+#X obj 0 595 cnv 15 552 21 empty \$0-pddp.cnv.footer empty 20 12 0
+14 #dcdcdc #404040 0;
+#X obj 0 0 cnv 15 552 40 empty \$0-pddp.cnv.header midirealtimein 3
+12 0 18 #c4dcdc #000000 0;
+#X obj 0 441 cnv 3 550 3 empty \$0-pddp.cnv.inlets inlets 8 12 0 13
+#dcdcdc #000000 0;
+#N canvas 487 284 494 344 META 0;
+#X text 12 105 LIBRARY internal;
+#X text 12 145 WEBSITE http://crca.ucsd.edu/~msp/;
+#X text 12 165 RELEASE_DATE 2009-06-12;
+#X text 12 25 LICENSE SIBSD;
+#X text 12 125 AUTHOR Miller Puckette;
+#X text 12 185 HELP_PATCH_AUTHORS Updated for Pd version 0.35. Jonathan
+Wilkes revised the patch to conform to the PDDP template for Pd version
+0.42.;
+#X text 12 45 DESCRIPTION;
+#X text 12 65 OUTLET_0 float;
+#X text 12 85 OUTLET_1 float;
+#X text 12 5 KEYWORDS control MIDI;
+#X restore 500 597 pd META;
+#X obj 0 469 cnv 3 550 3 empty \$0-pddp.cnv.outlets outlets 8 12 0
+13 #dcdcdc #000000 0;
+#X obj 0 526 cnv 3 550 3 empty \$0-pddp.cnv.argument arguments 8 12
+0 13 #dcdcdc #000000 0;
+#X obj 0 568 cnv 3 550 3 empty \$0-pddp.cnv.more_info more_info 8 12
+0 13 #dcdcdc #000000 0;
+#N canvas 208 213 441 414 Related_objects 0;
+#X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
+14 #c4dcdc #000000 0;
+#X obj 78 80 ctlin;
+#X obj 221 80 pgmin;
+#X obj 28 80 bendin;
+#X obj 83 107 touchin;
+#X obj 265 80 polytouchin;
+#X obj 122 80 midiin;
+#X obj 27 32 sysexin;
+#X obj 183 167 noteout;
+#X obj 80 167 ctlout;
+#X obj 28 167 bendout;
+#X obj 370 167 touchout;
+#X obj 284 167 polytouchout;
+#X obj 127 167 midiout;
+#X obj 235 167 pgmout;
+#X obj 28 221 makenote;
+#X text 25 198 MIDI note construction:;
+#X text 25 140 MIDI output:;
+#X text 25 57 MIDI input:;
+#X obj 188 221 stripnote;
+#X obj 172 80 notein;
+#X text 185 198 MIDI note deconstruction:;
+#X text 8 2 [midiin] Related Objects;
+#X text 26 260 Additional useful objects for MIDI processing (Maxlib
+by Olaf Matthes);
+#X text 25 339 Also \, from cyclone (alpha) by Krzysztof Czaja:;
+#X text 26 241 Externals;
+#X obj 26 290 pddp/helplink maxlib/pitch;
+#X obj 26 305 pddp/helplink maxlib/score;
+#X obj 26 320 pddp/helplink maxlib/chord;
+#X obj 26 355 pddp/helplink cyclone/midiformat;
+#X obj 26 370 pddp/helplink cyclone/midiparse;
+#X obj 26 385 pddp/helplink cyclone/midiflush;
+#X restore 102 597 pd Related_objects;
+#X text 98 477 float;
+#X obj 78 478 cnv 17 3 17 empty \$0-pddp.cnv.let.0 0 5 9 0 16 #dcdcdc
+#9c9c9c 0;
+#X text 98 445 (none);
+#X obj 78 503 cnv 17 3 17 empty \$0-pddp.cnv.let.1 1 5 9 0 16 #dcdcdc
+#9c9c9c 0;
+#X obj 364 572 pddp/pddplink all_about_midi_flags.pd -text all_about_midi_flags
+;
+#X text 98 572 for an explanation of MIDI usage in Pd see:;
+#X floatatom 209 184 0 0 0 0 - - -;
+#X floatatom 290 184 0 0 0 0 - - -;
+#X text 164 230 This object is always omni and;
+#X text 163 246 outputs the port number instead;
+#X obj 4 597 pddp/pddplink all_about_help_patches.pd -text Usage Guide
+;
+#X text 198 264 of the channel.;
+#X text 98 502 float;
+#X text 168 502 - port number;
+#X text 98 535 (none);
+#X obj 455 12 midirealtimein;
+#X obj 209 153 midirealtimein;
+#X text 11 23 realtime MIDI input;
+#X text 168 477 - raw MIDI byte (realtime MIDI messages only);
+#X connect 24 0 14 0;
+#X connect 24 1 15 0;
diff --git a/pd/doc/5.reference/sysexin-help.pd b/pd/doc/5.reference/sysexin-help.pd
index 6df81a0290b4eee57cc6e6d31862ec14fcae5197..e19ffec04ea247814bb7e4f9e97f4559f7f9d470 100644
--- a/pd/doc/5.reference/sysexin-help.pd
+++ b/pd/doc/5.reference/sysexin-help.pd
@@ -1,10 +1,10 @@
-#N canvas 428 35 555 619 10;
+#N canvas 430 41 555 619 10;
 #X obj 0 595 cnv 15 552 21 empty \$0-pddp.cnv.footer empty 20 12 0
-14 -228856 -66577 0;
+14 #dcdcdc #404040 0;
 #X obj 0 0 cnv 15 552 40 empty \$0-pddp.cnv.header sysexin 3 12 0 18
--204280 -1 0;
+#c4dcdc #000000 0;
 #X obj 0 441 cnv 3 550 3 empty \$0-pddp.cnv.inlets inlets 8 12 0 13
--228856 -1 0;
+#dcdcdc #000000 0;
 #N canvas 480 286 494 344 META 0;
 #X text 12 105 LIBRARY internal;
 #X text 12 145 WEBSITE http://crca.ucsd.edu/~msp/;
@@ -20,14 +20,14 @@ Wilkes revised the patch to conform to the PDDP template for Pd version
 #X text 12 5 KEYWORDS control MIDI;
 #X restore 500 597 pd META;
 #X obj 0 469 cnv 3 550 3 empty \$0-pddp.cnv.outlets outlets 8 12 0
-13 -228856 -1 0;
+13 #dcdcdc #000000 0;
 #X obj 0 526 cnv 3 550 3 empty \$0-pddp.cnv.argument arguments 8 12
-0 13 -228856 -1 0;
+0 13 #dcdcdc #000000 0;
 #X obj 0 568 cnv 3 550 3 empty \$0-pddp.cnv.more_info more_info 8 12
-0 13 -228856 -1 0;
+0 13 #dcdcdc #000000 0;
 #N canvas 202 205 441 423 Related_objects 0;
 #X obj 1 1 cnv 15 425 20 empty \$0-pddp.cnv.subheading empty 3 12 0
-14 -204280 -1 0;
+14 #c4dcdc #000000 0;
 #X obj 78 80 ctlin;
 #X obj 221 80 pgmin;
 #X obj 28 80 bendin;
@@ -62,28 +62,27 @@ by Olaf Matthes);
 #X obj 26 390 pddp/helplink cyclone/midiflush;
 #X restore 102 597 pd Related_objects;
 #X text 98 477 float;
-#X obj 78 478 cnv 17 3 17 empty \$0-pddp.cnv.let.0 0 5 9 0 16 -228856
--162280 0;
+#X obj 78 478 cnv 17 3 17 empty \$0-pddp.cnv.let.0 0 5 9 0 16 #dcdcdc
+#9c9c9c 0;
 #X text 98 445 (none);
-#X obj 78 503 cnv 17 3 17 empty \$0-pddp.cnv.let.1 1 5 9 0 16 -228856
--162280 0;
+#X obj 78 503 cnv 17 3 17 empty \$0-pddp.cnv.let.1 1 5 9 0 16 #dcdcdc
+#9c9c9c 0;
 #X obj 364 572 pddp/pddplink all_about_midi_flags.pd -text all_about_midi_flags
 ;
 #X text 98 572 for an explanation of MIDI usage in Pd see:;
 #X floatatom 225 184 0 0 0 0 - - -;
 #X floatatom 264 184 0 0 0 0 - - -;
-#X text 164 264 of the channel (Linux only):;
 #X text 164 230 This object is always omni and;
 #X text 163 246 outputs the port number instead;
-#X text 11 23 needs a description;
-#X text 168 477 - port number;
-#X text 98 502 ???;
-#X text 168 502 - ???;
-#X text 80 545 1) ???;
-#X text 168 545 - ???;
 #X obj 490 11 sysexin;
 #X obj 225 153 sysexin;
 #X obj 4 597 pddp/pddplink all_about_help_patches.pd -text Usage Guide
 ;
-#X connect 26 0 14 0;
-#X connect 26 1 15 0;
+#X text 207 264 of the channel.;
+#X text 98 535 (none);
+#X text 168 502 - port number;
+#X text 98 502 float;
+#X text 11 23 system exclusive input;
+#X text 168 477 - raw MIDI byte (system exclusive messages only);
+#X connect 19 0 14 0;
+#X connect 19 1 15 0;
diff --git a/pd/doc/8.topics/expr.htm b/pd/doc/8.topics/expr.htm
new file mode 100644
index 0000000000000000000000000000000000000000..890afa339d967b045c324a29b28eb78a9d09a0e0
--- /dev/null
+++ b/pd/doc/8.topics/expr.htm
@@ -0,0 +1,922 @@
+<html>
+<head>
+
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta content="text/html; charset=utf-8" http-equiv="content-type">
+<title>Expr Family Objects by Shahrokh Yadegari</title>
+<style>
+
+HTML {
+	background:  #ffffff;
+	color: 	     #000000;
+	font-size:   12.7pt; /* this is because there were many <p> missing. We can change this value to 7pt to easily detect missing <p> */
+	line-height: 1.6;
+}
+BODY {
+	width: 	    6.5in;
+	margin-left: 0.8in;
+	font-family: Helvetica, Arial, sans-serif;
+	/*font-family: Times, Times New Roman, serif;*/
+	}
+H1 {
+	font-size:   32.7pt;
+	text-align:  center;
+}
+H2 {
+	font-size:   22.7pt;
+	text-align:  left;
+}
+H3 {
+	font-size:   14.7pt;
+	text-align:  left;
+}
+H4 {
+	font-size:   12.7pt;
+	text-align:  left;
+}
+H5 {
+	font-size:   10.7pt;
+	text-align:  left;
+}
+H6 {
+	font-size:   10.7pt;
+	text-align:  left;
+}
+PRE {
+   font-size: 80%;
+   background-color:rgb(240, 240, 240);
+   text-align:  left;
+   border-radius: 8px;
+   padding: 8px;
+}
+
+ol{
+	font-size:   14.5pt;
+	text-align:  left;
+	line-height: 1.6;
+	}
+
+
+p{
+	font-size:   12pt;
+	text-align:  left;
+	line-height: 1.6;
+}
+
+
+/* standard link */
+
+a:link {
+    text-decoration: none;
+	color: #333399;
+}
+
+a:visited {
+    text-decoration: none;
+	color: #333399;
+}
+
+a:hover {
+    text-decoration: underline;
+	/*color: grey;*/
+	color: black;
+	background-color:rgb(238, 238, 228);
+}
+
+a:active {
+    text-decoration: none;
+	color: #333399;
+}
+
+
+/* green link (like a button) */
+
+a.green:link {
+	font-family:sans-serif;
+	background-color: #4CAF50; /* Green */
+    border-radius: 4px;
+    color: white;
+    padding: 0px 8px ;
+    text-align: center;
+    text-decoration: none;
+    display: inline-block;
+    font-size: 80%;
+
+}
+
+a.green:hover {
+    text-decoration: none;
+	background-color: #4CAF50;
+}
+
+a.green:visited {
+	color: white;
+}
+
+/* standard images */
+
+IMG {
+
+    display: block;
+    margin: 0 auto;
+    width: auto;
+
+
+}
+
+mark {
+background-color: rgb(255, 240, 179);
+}
+
+p.fig {
+text-align: center;
+}
+
+/* responsive css for small "devices" */
+
+@media screen and (max-device-width: 700px) {
+    body {
+    padding: 10px;
+	width: 	    auto;
+	margin-left: 6px;
+    }
+}
+
+/* responsive css for small "browser window" */
+
+@media screen and (max-width: 701px) {
+    body {
+    padding: 10px;
+	width: 	    auto;
+	margin-left: 6px;
+    }
+}
+</style>
+
+</head>
+<body>
+
+<h2>
+<br>
+<font face="Helvetica, Arial, sans-serif">Expr family objects by</font>
+<font face="Helvetica, Arial, sans-serif"><a href="http://yadegari.org/"> Shahrokh  Yadegari</a>       </font></h2>
+
+<hr width="100%" size="2" align="left">
+
+<h2 id="Expr..Expr...Fexpr.">[expr], [expr~], [fexpr~]</h2>
+
+<p>Based on original sources from IRCAM&rsquo;s jMax
+Released under BSD License.</p>
+
+<p>The <strong>[expr]</strong> family is a set of C-like expression evaluation objects for the graphical music language Pure Data. It used to come as an &lsquo;extra&rsquo; external, but it is now a built-in native object.</p>
+
+<p><strong>[expr]</strong> runs in control rate and evaluates C-like expressions. See below for the list of operators. Multiple expressions separated by semicolons can be defined in a single <strong>[expr]</strong> object and this results in multiple outlets (up to 100, each for each expression). Expressions are evaluated from right to left (which means that the bottom expression will be the first executed.) The number of inlets in expr are defined by variables that take a few different forms: <strong>$i#</strong>, <strong>$i#</strong> and <strong>$s#</strong> for 'integers', 'floats' and 'symbols' ('#' is an inlet number from 1 up to 100, ordered from left to right). As an example, we can have 3 inlets defined as "$i1", "$f2" and "$s3", where:</p>
+
+<ul>
+<li><strong>$i1</strong> is the input from the first (left) inlet and is treated as an integer</li>
+<li><strong>$f2</strong> is the input from the second (middle) inlet and is treated as a float</li>
+<li><strong>$s3</strong> is the input from the third (middle) and expects a symbol</li>
+</ul>
+
+
+<p>Arrays and variables (defined using the [value] object) can be accessed the same way one dimensional arrays are accessed in C; for example, &ldquo;valx + 10&rdquo; will be evaluated to the value of variable &lsquo;valx&rsquo; + 10 and &ldquo;tabname[5]&rdquo; will be evaluated to be the 5th element of an array named &ldquo;tabname&rdquo;. The name of the arrays can also be given by an input; for example &ldquo;$s2[5]&rdquo; will be evaluated to be the 5 element of the array whose symbol has been passed in inlet 2.</p>
+
+<p>Type conversion from a float input to an integer is done automatically if the inlet is defined as an integer. Conversely, you can convert it explicitly by using functions (see below for the list of functions).</p>
+
+<p><strong>[expr]</strong> is also able to manipulate and output symbols. A symbol is written as a string with quotes around it, such as "hello", or as a symbol input <strong>$s#</strong> such as <strong> $s2</strong>. For more information about supported string manipulation functions see below.
+
+<p><strong>[expr~]</strong> is designed to efficiently combine signal and control stream processing by vector operations on the basis of the audio block size. The operations, functions, and syntax for <strong>[expr~]</strong> is just like <strong>[expr]</strong> with the addition of the <strong>$v#</strong> variable for signal vector input (also numbered up to 100). The '$v' is needed at least for the first and main input, so:</p>
+
+<ul>
+<li><strong>$v1</strong> - means the first inlet is a signal input</li>
+<li><strong>$i2</strong> - means the second inlet is an integer input</li>
+<li><strong>$f2</strong> - means the third inlet is a float input</li>
+<li><strong>$s4</strong> - means the fourth inlet is a symbol input</li>
+</ul>
+
+
+<p>The result of an expression from <strong>[expr~]</strong> is also an audio signal and multiple expressions up to 100 can also be defined via semicolons.</p>
+
+<p>Note for MSP users: Currently in the MSP version all signal inputs should come first followed by other types of inlet. (There seems to be no way of mixing signal and other types of inlets in their order in Max/MSP, if you know otherwise, please let me know.) This means that signal inlets cannot be mixed with other types of inlets. For example, [expr~ $v1 + $f2 + $v3] is not legal. The second and third inlet should be switched and [expr~ $v1 + $v2 + $f3] should be used instead. In Pd you can mix them in any way you want.</p>
+
+<p>The <strong>[fexpr~]</strong> object provides a flexible mechanism for building FIR and IIR filters by evaluating expressions on a sample by sample basis and providing access to prior samples of the input and output audio streams. When fractional offset is used, <strong>[fexpr~]</strong> uses linear interpolation to determine the value of the indexed sample. The operations, functions, and syntax for <strong>[fexpr~]</strong> is just like <strong>[expr]</strong> with the addition of <strong>$x#</strong> and <strong>$y#</strong> variables. The <strong>[fexpr~]</strong> object can access previous input and output samples up to the block size (64 by default).<p>
+
+
+<p><strong>$x#</strong> is used to denote a signal input whose samples we would like to access. The syntax is $x followed by '#' (the inlet number up to 100) and the samples indexed by brackets, for example $x1[-1] specifies the previous sample of the first inlet. Therefore, if we are to build a simple filter which replaces every sample by the average of that sample and its previous one, we would use <strong>[fexpr~ ($x1[0] + $x1[-1]) / 2]</strong>. For ease of when the brackets are omitted, the current sample is implied, so we can write the previous filter expression as follows: <strong>[fexpr~ ($x1 + $x1[-1]) / 2]</strong>. To build IIR filters <strong>$y#</strong> is used to access the previous output samples indexed from -1 inside brackets. Note now that '#' here is used to define the outlet number.</p>
+
+<p>The first inlet also needs to be a signal input ($x1), the output of <strong>[fexpr~]</strong> is a signal output and multiple expressions can also be defined via semicolons and each will correspond to an outlet that can be accessed by '$y#'. Note that '$v#' is not allowed in <strong>[fexpr~]</strong>, so:</p>
+
+<ul>
+<li><strong>$x1[n]</strong> - means the first inlet is a signal input and 'n' is an index from 0 to -block size</li>
+<li><strong>$y1[n]</strong> - is used to access output samples from the first expression and 'n' is an index from -1 to -block size</li>
+<li><strong>$i2</strong> - means the second inlet is an integer input</li>
+<li><strong>$f2</strong> - means the third inlet is a float input</li>
+<li><strong>$s4</strong> - means the fourth inlet is a symbol input</li>
+</ul>
+
+<hr width="100%" size="2" align="left">
+
+<h3 id="operators">The operators [expr], [expr~] and [fexpr~] support (listed from highest precedence to lowest) are as follows:</h3>
+
+<table>
+<thead>
+<tr>
+<th>  </th>
+<th>  </th>
+<th>  </th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td>~ </td>
+<td> One&rsquo;s complement</td>
+<td> </td>
+</tr>
+<tr>
+<td>*</td>
+<td> Multiply</td>
+<td> </td>
+</tr>
+<tr>
+<td>/ </td>
+<td>Divide</td>
+<td> </td>
+</tr>
+<tr>
+<td>%</td>
+<td> Modulo</td>
+<td> </td>
+</tr>
+<tr>
+<td>+ </td>
+<td>Add</td>
+<td> </td>
+</tr>
+<tr>
+<td>- </td>
+<td>Subtract</td>
+<td> </td>
+</tr>
+<tr>
+<td>&lt;&lt;</td>
+<td> Shift Left</td>
+<td> </td>
+</tr>
+<tr>
+<td> >></td>
+<td> Shift Right</td>
+<td> </td>
+</tr>
+<tr>
+<td>&lt; </td>
+<td>Less than (boolean)</td>
+<td> </td>
+</tr>
+<tr>
+<td>&lt;=</td>
+<td> Less than or equal (boolean)</td>
+<td> </td>
+</tr>
+<tr>
+<td>> </td>
+<td>Greater than (boolean)</td>
+<td> </td>
+</tr>
+<tr>
+<td> >= </td>
+<td>Greater than or equal (boolean)</td>
+<td> </td>
+</tr>
+<tr>
+<td> == </td>
+<td>Equal (boolean)</td>
+<td> </td>
+</tr>
+<tr>
+<td>!= </td>
+<td>Not equal (boolean)</td>
+<td> </td>
+</tr>
+<tr>
+<td>&amp; </td>
+<td>Bitwise And</td>
+<td> </td>
+</tr>
+<tr>
+<td>^</td>
+<td> Exclusive Or</td>
+<td> </td>
+</tr>
+<tr>
+<td>| </td>
+<td>Bitwise Or</td>
+<td> </td>
+</tr>
+<tr>
+<td> &amp;&amp;</td>
+<td> Logical And (boolean)</td>
+<td> </td>
+</tr>
+<tr>
+<td>|| </td>
+<td>Logical Or (boolean)</td>
+<td> </td>
+</tr>
+<tr>
+<td>! </td>
+<td>Logical Not (boolean)</td>
+<td> </td>
+</tr>
+</tbody>
+</table>
+
+<h3 id="functions">The supported functions for [expr], [expr~] and [fexpr~] are:</h3>
+
+<B>General Functions</B>
+
+<table border="1" cellpadding ="10">
+<thead>
+<tr>
+<th> Function <BR>Name </th>
+<th> # of <BR>Args </th>
+<th style="text-align: left">
+  Description </th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td> if() </td>
+<td>3</td>
+<td> conditional  - if (condition, IfTrue-expr, IfFalse-expr) - in [expr~] if &lsquo;condition&rsquo; is a signal, the result will be determined on sample by sample basis (added in version 0.4) </td>
+</tr>
+<tr>
+<td> int() </td>
+<td> 1 </td>
+<td> convert to integer </td>
+</tr>
+<tr>
+<td> rint()</td>
+<td> 1 </td>
+<td> round a float to a nearby integer </td>
+</tr>
+<tr>
+<td>floor()</td>
+<td>1</td>
+<td>largest integral value not greater than argument (added in version 0.4)</td>
+</tr>
+<tr>
+<td>ceil()</td>
+<td>1</td>
+<td>smallest integral value not less than argument (added in version 0.4)</td>
+</tr>
+<tr>
+<td>float()</td>
+<td> 1 </td>
+<td>convert to float </td>
+</tr>
+<tr>
+<td>min()</td>
+<td>2</td>
+<td>minimum</td>
+</tr>
+<tr>
+<td>max()</td>
+<td>2</td>
+<td>maximum</td>
+</tr>
+<tr>
+<td>abs()</td>
+<td>1</td>
+<td>absolute value (added in version 0.3)</td>
+</tr>
+<tr>
+<td>if()</td>
+<td>3</td>
+<td>conditional  - if (condition, IfTrue-expr, IfFalse-expr) - in [expr~] if &lsquo;condition&rsquo; is a signal, the result will be determined on sample by sample basis (added in version 0.4)</td>
+</tr>
+<tr>
+<td>isinf()</td>
+<td>1</td>
+<td>is the value infinite (added in version 0.4)</td>
+</tr>
+<tr>
+<td>finite()</td>
+<td>1</td>
+<td>is the value finite (added in version 0.4)</td>
+</tr>
+<tr>
+<td>isnan()</td>
+<td>1</td>
+<td>is the value non a number (added in version 0.4)</td>
+</tr>
+<tr>
+<td>copysign()</td>
+<td>1</td>
+<td>copy sign of a number(added in version 0.4)</td>
+</tr>
+<tr>
+<td>imodf()</td>
+<td>1</td>
+<td>   get signed integer value from floating point number(added in version 0.4)</td>
+</tr>
+<tr>
+<td>modf()</td>
+<td>1</td>
+<td>get signed fractional value from floating-point number(added in version 0.4)</td>
+</tr>
+<tr>
+<td>drem()</td>
+<td>2</td>
+<td>floating-point remainder function (added in version 0.4)</td>
+</tr>
+<tr>
+<td>fmod()</td>
+<td>1</td>
+<td> floating-point remainder function (added in version 0.4)</td>
+</tr>
+</tbody>
+</table>
+
+<p>
+<!-- Power Functions -->
+<B>Power Functions</B>
+
+<table border="1" cellpadding ="10">
+<thead>
+<tr>
+<th> Function <BR>Name </th>
+<th> # of <BR>Args </th>
+<th style="text-align: left">
+  Description </th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td>pow()</td>
+<td>2</td>
+<td>raise to the power of {e.g., pow(x,y) is x to the power of y}</td>
+</tr>
+<tr>
+<td>sqrt()</td>
+<td>1</td>
+<td>square root</td>
+</tr>
+<tr>
+<td>exp()</td>
+<td>1</td>
+<td>e raised to the power of the argument {e.g., exp(5.2) is e raised to the power of 5.2}</td>
+</tr>
+<tr>
+<td>ln() and log()</td>
+<td>1</td>
+<td>natural log</td>
+</tr>
+<tr>
+<td>log10()</td>
+<td>1</td>
+<td>log base 10</td>
+</tr>
+<tr>
+<td>fact()</td>
+<td>1</td>
+<td>factorial</td>
+</tr>
+<tr>
+<td>erf()</td>
+<td>1</td>
+<td>error function (added in version 0.4)</td>
+</tr>
+<tr>
+<td>erfc()</td>
+<td>1</td>
+<td>complementary error function (added in version 0.4)</td>
+</tr>
+<tr>
+<td>cbrt()</td>
+<td>1</td>
+<td>cube root (added in version 0.4)</td>
+</tr>
+<tr>
+<td>expm1()</td>
+<td>1</td>
+<td>exponential minus 1 (added in version 0.4)</td>
+</tr>
+<tr>
+<td>log1p()</td>
+<td>1</td>
+<td>logarithm of 1 plus (added in version 0.4)</td>
+</tr>
+<tr>
+<td>ldexp()</td>
+<td>1</td>
+<td>multiply floating-point number by integral power of 2 (added in version 0.4)</td>
+</tr>
+</tbody>
+</table>
+
+<p>
+<!-- Trigonometric Functions -->
+<B>Trigonometric (all trigonometric functions here expect radian values)</B>
+<table border="1" cellpadding ="10">
+<thead>
+<tr>
+<th> Function <BR>Name </th>
+<th> # of <BR>Args </th>
+<th style="text-align: left">
+  Description </th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td>sin()</td>
+<td>1</td>
+<td>sine</td>
+</tr>
+<tr>
+<td>cos()</td>
+<td>1</td>
+<td>cosine</td>
+</tr>
+<tr>
+<td>tan()</td>
+<td>1</td>
+<td>tangent</td>
+</tr>
+<tr>
+<td>asin()</td>
+<td>1</td>
+<td>arc sine</td>
+</tr>
+<tr>
+<td>acos()</td>
+<td>1</td>
+<td>arc cosine</td>
+</tr>
+<tr>
+<td>atan()</td>
+<td>1</td>
+<td>arc tangent</td>
+</tr>
+<tr>
+<td>atan2()</td>
+<td>2</td>
+<td>arc tangent of 2 variables</td>
+</tr>
+<tr>
+<td>sinh()</td>
+<td>1</td>
+<td>hyperbolic sine</td>
+</tr>
+<tr>
+<td>cosh()</td>
+<td>1</td>
+<td>hyperbolic cosine</td>
+</tr>
+<tr>
+<td>tanh()</td>
+<td>1</td>
+<td>hyperbolic tangent</td>
+</tr>
+<tr>
+<td>asinh()</td>
+<td>1</td>
+<td>inverse hyperbolic sine</td>
+</tr>
+<tr>
+<td>acosh()</td>
+<td>1</td>
+<td>inverse hyperbolic cosine</td>
+</tr>
+<tr>
+<td>atan()</td>
+<td>1</td>
+<td>inverse hyperbolic tangent</td>
+</tr>
+<tr>
+<td>hypot()</td>
+<td>2</td>
+<td> euclidean distance function (0 to this location)</td>
+</tr>
+</tbody>
+</table>
+
+
+<p>
+<!-- Table Functions -->
+<B> Table Functions </B>
+</p>
+<table border="1" cellpadding ="10">
+<thead>
+<tr>
+		<th> Function <BR> Name </th>
+		<th style="text-align:center;"> # of <BR> Args </th>
+		<th style="text-align:left;"> Description</th>
+</tr>
+</thead>
+<tbody>
+<tr>
+		<td>size()</td>
+		<td>1</td>
+		<td style="text-align:left;">size of a table</td>
+</tr>
+<tr>
+		<td>sum()</td>
+		<td>1</td>
+		<td style="text-align:left;">sum of all elements of a table</td>
+</tr>
+<tr>
+		<td>Sum()</td>
+		<td>3</td>
+		<td style="text-align:left;">sum of elements of a specified boundary of a table</td>
+</tr>
+<tr>
+		<td>avg()</td>
+		<td>1</td>
+		<td style="text-align:left;">averages all elements of a table</td>
+</tr>
+<tr>
+		<td>Avg()</td>
+		<td>3</td>
+		<td style="text-align:left;">averages elements of a specified boundary of a table</td>
+</tr>
+</tbody>
+</table>
+
+
+<p>
+<strong>
+Acoustics Functions
+</strong>
+</p>
+<table border="1" cellpadding ="10">
+<thead>
+<tr>
+		<th> Function <BR> Name </th>
+		<th> # of <BR>Args </th>
+<th style="text-align:left;"> Description </th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td> mtof()    </td>
+<td> 1         </td>
+<td style="text-align:left;"> convert MIDI pitch to frequency in hertz </td>
+</tr>
+<tr>
+<td> ftom()    </td>
+<td> 1         </td>
+<td style="text-align:left;"> convert frequency in hertz to MIDI pitch </td>
+</tr>
+<tr>
+<td> dbtorms() </td>
+<td> 1         </td>
+<td style="text-align:left;"> convert db to rms                        </td>
+</tr>
+<tr>
+<td> rmstodb() </td>
+<td> 1         </td>
+<td style="text-align:left;"> convert rms to db                        </td>
+</tr>
+<tr>
+<td> powtodb() </td>
+<td> 1         </td>
+<td style="text-align:left;"> convert power to db                      </td>
+</tr>
+<tr>
+<td> dbtopow() </td>
+<td> 1         </td>
+<td style="text-align:left;"> convert db to power                      </td>
+</tr>
+</tbody>
+</table>
+
+<p>
+<B> String Manipulation Functions (the ones that return a symbol only work for [expr])</b>
+<table border="1" cellpadding ="10">
+<thead>
+<tr>
+<th style="width:50%" align="left">Function <BR> Name  </th>
+<th> # of <BR> Args </th>
+<th> returns </th>
+<th style="text-align:left;width:30%"> Description  </th>
+</tr>
+</thead>
+<tbody>
+<tr style="vertical-align:top">
+	<td> symbol(int/float/symbol [, int X, int Y])<BR>sym(int/float/symbol) </td>
+<td> 0, 1, 2, or 3         </td>
+<td> symbol         </td>
+<td style="text-align:left;"> symbol formatted based on the type of the input
+<BR>
+<BR>
+0 argument will result in an empty symbol
+<BR>
+<BR>
+
+1 argument will produce a symbol from string/symbol, int, float, according to the %s, %d, %f syntax in sprintf() respectively
+<BR>
+<BR>
+2 argument (sym, X) will produce a symbol from string/symbol, int, float, according to the %Xs, %.Xd, %.Xf syntax in sprintf() respectively
+
+<BR>
+<BR>
+
+3 arguments (sym, X, Y) will produce a symbol from string/symbol, int, float, according to the %Y.Xs, %Y.Xd, %Y.Xf syntax in sprintf() respectively
+</tr>
+<tr style="vertical-align:top">
+	<td> var(symbol)</td>
+	<td> 1         </td>
+	<td> float         </td>
+	<td style="text-align:left;"> var() will treat the value of the symbol argument as a variable name and returns the value of the variable
+</tr>
+<tr>
+<td> strlen(symbol) </td>
+<td> 1         </td>
+<td> int         </td>
+<td style="text-align:left;"> length of symbol
+</tr>
+<tr style="vertical-align:top">
+<td> tolower(symbol)</td>
+<td> 1</td>
+<td> symbol         </td>
+<td stype="text-align:left;" valign="top"> convert all upper-case letters of the string to the corresponding lower-case letters
+</td>
+</tr>
+<tr style="vertical-align:top">
+<td> tonlower(symbol, int)</td>
+<td> 2</td>
+<td> symbol         </td>
+<td stype="text-align:left;" valign="top"> convert n'th character of the string from upper-case letter to the corresponding lower-case letter
+</td>
+</tr>
+<tr style="vertical-align:top">
+<td>
+toupper(symbol)</td>
+<td> 1</td>
+<td> symbol         </td>
+<td stype="text-align:left;"> convert all lower-case letters of the string to the corresponding upper-case letters
+</td>
+</tr>
+<tr style="vertical-align:top">
+<td> tonupper(symbol, int)</td>
+<td> 2</td>
+<td> symbol         </td>
+<td stype="text-align:left;"> convert n'th character of the string from lower-case letter to the corresponding upper-case letter
+</td>
+</tr>
+<tr style="vertical-align:top">
+<td> strcat(symbol, symbol, ...)</td>
+<td> var</td>
+<td> symbol         </td>
+<td stype="text-align:left;">  Concatenate two or more strings
+</td>
+</tr>
+<tr style="vertical-align:top">
+<td> strncat(symbol, symbol, int)</td>
+<td> 3</td>
+<td> symbol         </td>
+<td stype="text-align:left;">  Contatenate the first string, by no more than n characters of the second string
+</td>
+</tr>
+<tr style="vertical-align:top">
+<td> strcmp(symbol, symbol)</td>
+<td> 2</td>
+<td> int         </td>
+<td stype="text-align:left;"> Compare two strings; return an integer greater than, equal to, or less than 0, according as the first string is greater than,
+     equal to, or less than the second string.
+</td>
+</tr>
+<tr style="vertical-align:top">
+<td> strncmp(symbol, symbol, int)</td>
+<td> 3</td>
+<td> int         </td>
+<td stype="text-align:left;"> Compare no more than n characters of two strings; return an integer greater than, equal to, or less than 0, according as the first string is greater than,
+</tr>
+<tr style="vertical-align:top">
+<td> strcasecmp(symbol, symbol)</td>
+<td> 2</td>
+<td> int         </td>
+<td stype="text-align:left;"> similar to strcmp() but ignore case of the letters
+</td>
+</tr>
+<tr style="vertical-align:top">
+<td> strncasecmp(symbol, symbol, int)</td>
+<td> 3</td>
+<td> int         </td>
+<td stype="text-align:left;"> similar to strncmp() but ignore case of the letters
+</td>
+</tr>
+<tr style="vertical-align:top">
+<td> strpbrk(symbol, symbol)</td>
+<td> 2</td>
+<td> symbol         </td>
+<td stype="text-align:left;"> In the first string locate the first
+     occurrence of any character in the second (character set) string and
+	 return a substring of the first string starting with the found character.
+     If no characters from  second string is found return 0;
+</td>
+</tr>
+<tr style="vertical-align:top">
+<td> strspn(symbol, symbol)</td>
+<td> 2</td>
+<td> int         </td>
+<td stype="text-align:left;"> return the string array index of the first character of the first string which is not in the
+        second (charset) string, else return the index of the first null character.
+</td>
+</tr>
+<tr style="vertical-align:top">
+<td> strcspn(symbol, symbol)</td>
+<td> 2</td>
+<td> int         </td>
+<td stype="text-align:left;"> return the string array index of the first character of the
+        first string  which is also in charset, else return the index of the first null character.
+</td>
+</tr>
+</tbody>
+</table>
+
+
+<BR>
+<p>
+<hr width="100%" size="2" align="left">
+
+<h3 id="CHANGELOG:">CHANGELOG:</h3>
+
+<h3 id="version.0.58">version 0.58</h3>
+<ul>
+<li>Added string functions in [expr]; now expr can output symbols (major redesign) </li>
+<li>Provide better error messages; now expr prints the [expr] string when reporting errors
+<li>Fixed the [expr~] array[0]" bug
+<li>Fixed a memory issue were extra unused output vectors were <BR>
+  allocated for each inlet
+<li> NOTE: the syntax func("$s#", ...) is now deprecated and func($s#, ...) should be used
+</ul>
+
+<h3 id="version.0.57">version 0.57</h3>
+
+<ul>
+<li>fixed a bug in fact().</li>
+<li>fact() (factorial) now calculates and returns its value in double</li>
+<li>fixed the bad lvalue bug - &ldquo;4 + 5 = 3&rdquo; was not caught before</li>
+<li>Added mtof(), mtof(), dbtorms(), rmstodb(), powtodb(), dbtopow()</li>
+</ul>
+
+
+<h3 id="version.0.56">version 0.56</h3>
+
+<ul>
+<li>[fexpr~] now accepts a float in its first input.</li>
+<li>Added avg() and Avg() back to the list of functions</li>
+</ul>
+
+
+<h3 id="version.0.55">version 0.55</h3>
+
+<ul>
+<li>The arrays now redraw after a store into one of their members</li>
+<li>ex_if() (the &ldquo;if()&rdquo; function is reworked to only evaluate either the left or the right args depending on the truth  value of the condition. However, if the condition is an audio vector, both the left and the right are evaluated regardless.</li>
+<li>priority of &lsquo;,&rsquo; and &lsquo;=&rsquo; was switched to fix the bug of using store &ldquo;=&rdquo; in functions with multiple arguments, which caused  an error during execution.</li>
+<li>The number of inlet and outlets (MAX_VARS) is now set at 100</li>
+</ul>
+
+
+<h3 id="version.0.5">version 0.5</h3>
+
+<ul>
+<li>[expr], [expr~], and [fexpr~] are now built-in native objects.</li>
+<li>minor fixes/improvements.</li>
+</ul>
+
+
+<h3 id="version.0.4">version 0.4</h3>
+
+<ul>
+<li>[expr], [expr~], and [fexpr~] now support multiple expressions separated by semicolons which results in multiple outlets.</li>
+<li>Variables are supported now in the same way they are supported in C.  - Variables have to be defined with the &ldquo;value&rdquo; object prior to execution.</li>
+<li>A new if function  if (condition-expression, IfTrue-expression, IfFalse-expression) has been added.</li>
+<li>New math functions added.</li>
+<li>New shorthand notations for [fexpr~] have been added.
+
+<ul>
+<li>$x ->$x1[0]     $x# -> $x#[0]</li>
+<li>$y = $y1[-1] and $y# = $y#[-1]</li>
+</ul>
+</li>
+<li>New &lsquo;set&rsquo; and &lsquo;clear&rsquo; methods were added for [fexpr~]
+
+<ul>
+<li>clear - clears all the past input and output buffers</li>
+<li>clear x# - clears all the past values of the #th input</li>
+<li>clear y# - clears all the past values of the #th output</li>
+<li>set x# val-1 val-2 &hellip; - sets as many supplied value of the         #th input;
+e.g., &ldquo;set x2 3.4 0.4&rdquo;  - sets x2[-1]=3.4 and x2[-2]=0.4</li>
+<li>set y# val-1 val-2 &hellip; - sets as many supplied values of the #th output;
+e.g, &ldquo;set y3 1.1 3.3 4.5&rdquo; -  sets y3[-1]=1.1 y3[-2]=3.3 and y3[-3]=4.5;</li>
+<li>set val val &hellip; - sets the first past values of each output; e.g.,
+e.g., &ldquo;set 0.1 2.2 0.4&rdquo;  - sets y1[-1]=0.1, y2[-1]=2.2, y3[-1]=0.4</li>
+</ul>
+</li>
+</ul>
+
+</body>
+</html>
diff --git a/pd/doc/about/Purr-Data-Intro.pdf b/pd/doc/about/Purr-Data-Intro.pdf
new file mode 100644
index 0000000000000000000000000000000000000000..8b89ae8c722fc48fc51209446fa80ef5b6a81e11
Binary files /dev/null and b/pd/doc/about/Purr-Data-Intro.pdf differ
diff --git a/pd/doc/about/about.pd b/pd/doc/about/about.pd
index 2a094a2e5c63d4b0c2a5d572e13fb848737b77a5..a77e2102d5a94ca87dca29a16cc55ab20c9c80f6 100644
--- a/pd/doc/about/about.pd
+++ b/pd/doc/about/about.pd
@@ -1,5 +1,5 @@
 #N struct cat float x float y;
-#N canvas 337 210 527 463 12;
+#N canvas 339 210 527 463 12;
 #N canvas 634 205 452 371 version 0;
 #X msg 61 51 l2ork_version;
 #X obj 61 76 pdinfo;
@@ -43,15 +43,13 @@ OSX \, and Microsoft Windows.;
 any reasonable purpose. See the file:;
 #X obj 18 247 pddp/pddplink @pd_help/../manuals/Pd/License.html -text
 doc/manuals/Pd/License.html;
-#X obj 18 340 pddp/pddplink http://l2ork.music.vt.edu/main/;
-#X text 18 76 This is Purr Data \, the cross-platform \, JS-based version
-of Pd-l2ork. An introduction to Purr Data can be found at:, f 53;
+#X obj 18 340 pddp/pddplink https://agraef.github.io/purr-data/;
 #X obj 18 130 pddp/pddplink https://agraef.github.io/purr-data-intro/
 ;
 #X text 18 366 Reference documentation for Pd lives in:;
 #X obj 18 384 pddp/pddplink @pd_help/../1.manual/index.htm -text doc/1.manual/index.htm
 ;
-#X obj 36 21 cnv 15 432 33 empty \$0-about_text Purr-Data-2.18.1\ 20230117-rev.75a0ac65
+#X obj 36 21 cnv 15 432 33 empty \$0-about_text Purr-Data-2.19.4\ 20240908-rev.b2f63c6e
 20 12 0 18 #fcc048 #000000 0;
 #N canvas 430 372 450 323 cat 0;
 #X obj 16 180 draw sprite ./cat;
@@ -80,4 +78,8 @@ of Pd-l2ork. An introduction to Purr Data can be found at:, f 53;
 #X text 18 272 Purr-Data offers a rewrite of many of Pd's core routines
 for the purpose of improving editor functionality and stability. It
 is originally based on Pd-l2ork and distributed under the same license
-as Pd. For additional info about Pd-l2ork see:, f 66;
+as Pd. For additional info about Purr-Data see:, f 66;
+#X text 18 76 This is Purr Data \, a modern successor of Pd-extended
+which features many improvements. An introduction to Purr Data can
+be found at:, f 53;
+#X obj 310 130 pddplink Purr-Data-Intro.pdf -text (PDF);
diff --git a/pd/doc/games/Comet Blast/Art/Asteriod.png b/pd/doc/games/Comet Blast/Art/Asteriod.png
new file mode 100644
index 0000000000000000000000000000000000000000..c9f21de456ac2eb8b450952b6f2fd472dd37e7b9
Binary files /dev/null and b/pd/doc/games/Comet Blast/Art/Asteriod.png differ
diff --git a/pd/doc/games/Comet Blast/Art/Background.png b/pd/doc/games/Comet Blast/Art/Background.png
new file mode 100644
index 0000000000000000000000000000000000000000..48b5d55fbf6ba9acad93a8c06a8560fcaaa314e9
Binary files /dev/null and b/pd/doc/games/Comet Blast/Art/Background.png differ
diff --git a/pd/doc/games/Comet Blast/Art/CityBackground.png b/pd/doc/games/Comet Blast/Art/CityBackground.png
new file mode 100644
index 0000000000000000000000000000000000000000..9a14f3d6d1691d8b8f3190fa728909075657b795
Binary files /dev/null and b/pd/doc/games/Comet Blast/Art/CityBackground.png differ
diff --git a/pd/doc/games/Comet Blast/Art/LargeAlien.png b/pd/doc/games/Comet Blast/Art/LargeAlien.png
new file mode 100644
index 0000000000000000000000000000000000000000..f5137a1a41b048af916462bcc83f26c5ea6b4674
Binary files /dev/null and b/pd/doc/games/Comet Blast/Art/LargeAlien.png differ
diff --git a/pd/doc/games/Comet Blast/Art/Logo.png b/pd/doc/games/Comet Blast/Art/Logo.png
new file mode 100644
index 0000000000000000000000000000000000000000..adf63638f47b82e8894350cd95486ab9ae393760
Binary files /dev/null and b/pd/doc/games/Comet Blast/Art/Logo.png differ
diff --git a/pd/doc/games/Comet Blast/Art/Rock1.jpeg b/pd/doc/games/Comet Blast/Art/Rock1.jpeg
new file mode 100644
index 0000000000000000000000000000000000000000..4b19fdb82a7549bd11828979ceb1a224e8d6449e
Binary files /dev/null and b/pd/doc/games/Comet Blast/Art/Rock1.jpeg differ
diff --git a/pd/doc/games/Comet Blast/Art/Rock2.png b/pd/doc/games/Comet Blast/Art/Rock2.png
new file mode 100644
index 0000000000000000000000000000000000000000..c03eb1594e3efaf815d8fea0f05dacc1de34d668
Binary files /dev/null and b/pd/doc/games/Comet Blast/Art/Rock2.png differ
diff --git a/pd/doc/games/Comet Blast/Art/SpaceBackground.png b/pd/doc/games/Comet Blast/Art/SpaceBackground.png
new file mode 100644
index 0000000000000000000000000000000000000000..12e672e8891acfbe7195c91d6ebc4b0ff5a3421d
Binary files /dev/null and b/pd/doc/games/Comet Blast/Art/SpaceBackground.png differ
diff --git a/pd/doc/games/Comet Blast/Art/alien.jpg b/pd/doc/games/Comet Blast/Art/alien.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..3fcfa2ee3cf31f29863848f4d82511439f827e98
Binary files /dev/null and b/pd/doc/games/Comet Blast/Art/alien.jpg differ
diff --git a/pd/doc/games/Comet Blast/Art/play.jpg b/pd/doc/games/Comet Blast/Art/play.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..4d9cce58cadf9ce1693db41637d66eeae124bdd3
Binary files /dev/null and b/pd/doc/games/Comet Blast/Art/play.jpg differ
diff --git a/pd/doc/games/Comet Blast/Comet_Blast.pd b/pd/doc/games/Comet Blast/Comet_Blast.pd
new file mode 100644
index 0000000000000000000000000000000000000000..e951484867cdd57b499b0ed133b1df771e4f0622
--- /dev/null
+++ b/pd/doc/games/Comet Blast/Comet_Blast.pd	
@@ -0,0 +1,2993 @@
+#N canvas 76 123 711 527 10;
+#X obj 480 20 cnv 15 174 118 empty empty empty 20 12 0 14 #fc0400 #404040
+0;
+#X obj 490 30 cnv 15 156 99 empty empty empty 20 12 0 14 #fcfcfc #404040
+0;
+#N canvas 484 188 1038 458 background 0;
+#X obj 20 20 gemhead;
+#X obj 20 130 pix_image;
+#X obj 50 50 loadbang;
+#X obj 20 170 pix_texture;
+#X msg 30 80 open Art/SpaceBackground.png;
+#X obj 210 80 gemhead;
+#X obj 210 190 pix_image;
+#X obj 240 110 loadbang;
+#X obj 210 230 pix_texture;
+#X msg 240 140 open Art/CityBackground.png;
+#X obj 210 340 rotateXYZ 0 0 180;
+#X msg 210 40 set 52;
+#X obj 210 380 rectangle 1 1;
+#X obj 420 80 gemhead;
+#X obj 420 190 pix_image;
+#X obj 450 110 loadbang;
+#X obj 420 230 pix_texture;
+#X msg 450 140 open Art/CityBackground.png;
+#X obj 420 340 rotateXYZ 0 0 180;
+#X msg 420 40 set 52;
+#X obj 420 380 rectangle 1 1;
+#X obj 630 80 gemhead;
+#X obj 630 190 pix_image;
+#X obj 660 110 loadbang;
+#X obj 630 230 pix_texture;
+#X msg 660 140 open Art/CityBackground.png;
+#X obj 630 340 rotateXYZ 0 0 180;
+#X msg 630 40 set 52;
+#X obj 630 380 rectangle 1 1;
+#X obj 18 208 rectangle 4 4;
+#X obj 830 80 gemhead;
+#X obj 830 190 pix_image;
+#X obj 860 110 loadbang;
+#X obj 830 230 pix_texture;
+#X msg 860 140 open Art/CityBackground.png;
+#X obj 830 340 rotateXYZ 0 0 180;
+#X msg 830 40 set 52;
+#X obj 830 380 rectangle 1 1;
+#X obj 210 290 translateXYZ -3 -3.2 0;
+#X obj 420 290 translateXYZ -1 -3.2 0;
+#X obj 630 290 translateXYZ 1 -3.2 0;
+#X obj 830 290 translateXYZ 3 -3.2 0;
+#X obj 360 0 loadbang;
+#X connect 0 0 1 0;
+#X connect 1 0 3 0;
+#X connect 2 0 4 0;
+#X connect 3 0 29 0;
+#X connect 4 0 1 0;
+#X connect 5 0 6 0;
+#X connect 6 0 8 0;
+#X connect 7 0 9 0;
+#X connect 8 0 38 0;
+#X connect 9 0 6 0;
+#X connect 10 0 12 0;
+#X connect 11 0 5 0;
+#X connect 13 0 14 0;
+#X connect 14 0 16 0;
+#X connect 15 0 17 0;
+#X connect 16 0 39 0;
+#X connect 17 0 14 0;
+#X connect 18 0 20 0;
+#X connect 19 0 13 0;
+#X connect 21 0 22 0;
+#X connect 22 0 24 0;
+#X connect 23 0 25 0;
+#X connect 24 0 40 0;
+#X connect 25 0 22 0;
+#X connect 26 0 28 0;
+#X connect 27 0 21 0;
+#X connect 30 0 31 0;
+#X connect 31 0 33 0;
+#X connect 32 0 34 0;
+#X connect 33 0 41 0;
+#X connect 34 0 31 0;
+#X connect 35 0 37 0;
+#X connect 36 0 30 0;
+#X connect 38 0 10 0;
+#X connect 39 0 18 0;
+#X connect 40 0 26 0;
+#X connect 41 0 35 0;
+#X connect 42 0 11 0;
+#X connect 42 0 19 0;
+#X connect 42 0 27 0;
+#X connect 42 0 36 0;
+#X restore 32 357 pd background;
+#N canvas 608 56 474 434 score 0;
+#X obj 160 40 gemhead;
+#X obj 260 240 f;
+#X obj 320 90 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X floatatom 310 150 5 0 0 0 - - -, f 5;
+#X msg 280 210 float \$1;
+#X obj 160 220 colorRGB 1 1 1;
+#X obj 200 130 hsl 87 15 -6 6 0 0 empty empty empty -2 -8 0 10 #fcfcfc
+#000000 #000000 6350 1;
+#X obj 200 150 hsl 88 15 -6 6 0 0 empty empty empty -2 -8 0 10 #fcfcfc
+#000000 #000000 7150 1;
+#X msg 180 80 set \$1;
+#X msg 250 80 set \$1;
+#X msg 180 100 2.86047;
+#X msg 250 100 3.86207;
+#X obj 160 180 translateXYZ 0 0 0;
+#X floatatom 220 260 5 0 0 0 - - -, f 5;
+#X obj 230 40 loadbang;
+#X obj 160 280 text2d 0;
+#X obj 70 130 hsl 87 15 -6 6 0 0 empty empty empty -2 -8 0 10 #fcfcfc
+#000000 #000000 5750 1;
+#X obj 70 150 hsl 88 15 -6 6 0 0 empty empty empty -2 -8 0 10 #fcfcfc
+#000000 #000000 7150 1;
+#X msg 50 80 set \$1;
+#X msg 120 80 set \$1;
+#X msg 50 100 2.02326;
+#X msg 120 100 3.86207;
+#X obj 30 180 translateXYZ 0 0 0;
+#X floatatom 90 260 5 0 0 0 - - -, f 5;
+#X obj 100 40 loadbang;
+#X obj 30 40 gemhead;
+#X obj 30 220 colorRGB 1 1 1;
+#X obj 370 150 + 1;
+#X msg 320 120 1;
+#X obj 30 280 text2d Destroyed:;
+#X obj 320 50 receive score-space;
+#X msg 370 120 0;
+#X obj 350 200 send score-no;
+#X msg 30 10 set 65;
+#X msg 160 10 set 65;
+#X obj 370 90 receive start;
+#X connect 0 0 12 0;
+#X connect 1 0 15 0;
+#X connect 2 0 28 0;
+#X connect 3 0 27 1;
+#X connect 3 0 4 0;
+#X connect 3 0 32 0;
+#X connect 4 0 1 0;
+#X connect 5 0 15 0;
+#X connect 6 0 8 0;
+#X connect 6 0 12 1;
+#X connect 7 0 9 0;
+#X connect 7 0 12 2;
+#X connect 8 0 10 0;
+#X connect 9 0 11 0;
+#X connect 10 0 6 0;
+#X connect 11 0 7 0;
+#X connect 12 0 5 0;
+#X connect 13 0 15 1;
+#X connect 14 0 10 0;
+#X connect 14 0 11 0;
+#X connect 14 0 34 0;
+#X connect 16 0 18 0;
+#X connect 16 0 22 1;
+#X connect 17 0 19 0;
+#X connect 17 0 22 2;
+#X connect 18 0 20 0;
+#X connect 19 0 21 0;
+#X connect 20 0 16 0;
+#X connect 21 0 17 0;
+#X connect 22 0 26 0;
+#X connect 23 0 29 1;
+#X connect 24 0 20 0;
+#X connect 24 0 21 0;
+#X connect 24 0 33 0;
+#X connect 25 0 22 0;
+#X connect 26 0 29 0;
+#X connect 27 0 3 0;
+#X connect 28 0 27 0;
+#X connect 30 0 2 0;
+#X connect 31 0 3 0;
+#X connect 33 0 25 0;
+#X connect 34 0 0 0;
+#X connect 35 0 31 0;
+#X restore 32 317 pd score;
+#N canvas 760 88 762 438 Spawner 0;
+#X floatatom 130 60 5 0 0 1 - - -, f 5;
+#X obj 130 20 loadbang;
+#X msg 130 40 0.4;
+#X floatatom 290 60 5 0 0 1 - - -, f 5;
+#X obj 290 20 loadbang;
+#X floatatom 440 60 5 0 0 1 - - -, f 5;
+#X obj 440 20 loadbang;
+#X floatatom 590 60 5 0 0 1 - - -, f 5;
+#X obj 590 20 loadbang;
+#N canvas 936 196 586 442 comet_collision2 0;
+#X obj 410 40 inlet radius;
+#X obj 310 40 inlet reference;
+#X obj 270 90 gemhead;
+#X obj 270 300 translateXYZ;
+#X obj 340 80 unpack 0 0;
+#X obj 30 320 select 0 1;
+#X obj 230 40 inlet test;
+#N canvas 788 276 545 454 collide 0;
+#X obj 97 210 list-map2;
+#X obj 177 211 -;
+#X obj 177 258 *;
+#X obj 177 234 t a a;
+#X obj 90 333 sqrt;
+#X obj 97 285 list-reduce;
+#X obj 181 285 +;
+#X obj 130 343 t b a;
+#X obj 170 120 inlet reference;
+#X obj 100 120 inlet test;
+#X obj 300 240 inlet radius;
+#X obj 100 393 outlet;
+#X obj 100 363 <= 1;
+#X obj 130 90 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 160 90 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 190 90 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 80 60 spigot;
+#X obj 180 60 spigot;
+#X obj 80 30 receive reset;
+#X obj 250 80 loadbang;
+#X obj 200 30 receive start;
+#X obj 100 145 spigot;
+#X obj 170 145 spigot;
+#X connect 0 0 5 0;
+#X connect 0 1 1 0;
+#X connect 1 0 3 0;
+#X connect 2 0 0 2;
+#X connect 3 0 2 0;
+#X connect 3 1 2 1;
+#X connect 4 0 12 0;
+#X connect 5 0 4 0;
+#X connect 5 1 6 0;
+#X connect 6 0 5 1;
+#X connect 7 0 12 0;
+#X connect 7 1 12 1;
+#X connect 8 0 22 0;
+#X connect 9 0 21 0;
+#X connect 10 0 7 0;
+#X connect 12 0 11 0;
+#X connect 13 0 14 0;
+#X connect 13 0 16 1;
+#X connect 13 0 21 1;
+#X connect 13 0 22 1;
+#X connect 14 0 15 0;
+#X connect 15 0 17 1;
+#X connect 16 0 13 0;
+#X connect 17 0 13 0;
+#X connect 18 0 16 0;
+#X connect 19 0 15 0;
+#X connect 20 0 17 0;
+#X connect 21 0 0 0;
+#X connect 22 0 0 1;
+#X restore 30 110 pd collide;
+#X floatatom 370 330 5 0 0 0 - - -, f 5;
+#X msg 40 40 set 55;
+#X obj 30 360 send score-space;
+#X obj 40 10 loadbang;
+#X obj 270 370 circle 0.2;
+#X obj 270 340 color 1 0 0;
+#X obj 30 390 send respawn2;
+#X floatatom 430 140 5 0 0 0 - - -, f 5;
+#X obj 430 240 send reset;
+#X obj 430 170 == -2;
+#X obj 30 420 send destroyed;
+#X obj 270 200 pix_image;
+#X obj 300 120 loadbang;
+#X obj 270 270 pix_texture;
+#X msg 300 150 open Art/Asteriod.png;
+#X floatatom 290 230 5 0 0 0 - - -, f 5;
+#X msg 340 220 env \$1;
+#X obj 340 200 hradio 15 1 0 6 empty empty empty 0 -6 0 8 #fcfcfc #000000
+#000000 2;
+#X msg 340 170 2;
+#X obj 30 150 tgl 24 0 empty empty hit? 28 7 1 10 #fcfcfc #000000 #000000
+0 1;
+#X obj 63 247 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 93 247 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 123 247 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 13 217 spigot;
+#X obj 113 217 spigot;
+#X obj 13 187 receive reset;
+#X obj 183 237 loadbang;
+#X obj 133 187 receive start;
+#X obj 33 287 spigot;
+#X obj 460 210 select 1;
+#X obj 130 90 loadbang;
+#X obj 133 122 delay 100;
+#X connect 0 0 7 2;
+#X connect 1 0 4 0;
+#X connect 1 0 7 1;
+#X connect 2 0 19 0;
+#X connect 3 0 13 0;
+#X connect 4 0 3 1;
+#X connect 4 1 3 2;
+#X connect 4 1 15 0;
+#X connect 5 1 10 0;
+#X connect 5 1 14 0;
+#X connect 5 1 18 0;
+#X connect 6 0 7 0;
+#X connect 7 0 27 0;
+#X connect 8 0 12 1;
+#X connect 9 0 2 0;
+#X connect 11 0 9 0;
+#X connect 13 0 12 0;
+#X connect 15 0 17 0;
+#X connect 17 0 37 0;
+#X connect 19 0 21 0;
+#X connect 20 0 22 0;
+#X connect 20 0 26 0;
+#X connect 21 0 3 0;
+#X connect 22 0 19 0;
+#X connect 23 0 21 0;
+#X connect 24 0 21 0;
+#X connect 25 0 24 0;
+#X connect 25 0 21 0;
+#X connect 26 0 25 0;
+#X connect 27 0 36 0;
+#X connect 28 0 29 0;
+#X connect 28 0 31 1;
+#X connect 28 0 36 1;
+#X connect 29 0 30 0;
+#X connect 30 0 32 1;
+#X connect 31 0 28 0;
+#X connect 32 0 28 0;
+#X connect 33 0 31 0;
+#X connect 34 0 30 0;
+#X connect 35 0 32 0;
+#X connect 36 0 5 0;
+#X connect 37 0 16 0;
+#X connect 38 0 39 0;
+#X connect 39 0 27 0;
+#X restore 200 90 pd comet_collision2;
+#N canvas 724 156 706 562 comet_collision1 0;
+#X obj 430 50 inlet radius;
+#X obj 330 50 inlet reference;
+#X obj 290 100 gemhead;
+#X obj 280 310 translateXYZ;
+#X obj 360 90 unpack 0 0;
+#X obj 20 310 select 0 1;
+#X obj 250 50 inlet test;
+#N canvas 280 232 541 493 collide 0;
+#X obj 91 217 list-map2;
+#X obj 171 218 -;
+#X obj 171 265 *;
+#X obj 171 241 t a a;
+#X obj 84 340 sqrt;
+#X obj 84 290 list-reduce;
+#X obj 170 290 +;
+#X obj 124 360 t b a;
+#X obj 150 130 inlet reference;
+#X obj 80 130 inlet test;
+#X obj 294 247 inlet radius;
+#X obj 94 410 outlet;
+#X obj 94 380 <= 1;
+#X obj 110 90 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 140 90 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 170 90 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 60 60 spigot;
+#X obj 160 60 spigot;
+#X obj 60 30 receive reset;
+#X obj 230 80 loadbang;
+#X obj 180 30 receive start;
+#X obj 80 160 spigot;
+#X obj 150 155 spigot;
+#X connect 0 0 5 0;
+#X connect 0 1 1 0;
+#X connect 1 0 3 0;
+#X connect 2 0 0 2;
+#X connect 3 0 2 0;
+#X connect 3 1 2 1;
+#X connect 4 0 12 0;
+#X connect 5 0 4 0;
+#X connect 5 1 6 0;
+#X connect 6 0 5 1;
+#X connect 7 0 12 0;
+#X connect 7 1 12 1;
+#X connect 8 0 22 0;
+#X connect 9 0 21 0;
+#X connect 10 0 7 0;
+#X connect 12 0 11 0;
+#X connect 13 0 14 0;
+#X connect 13 0 16 1;
+#X connect 13 0 21 1;
+#X connect 13 0 22 1;
+#X connect 14 0 15 0;
+#X connect 15 0 17 1;
+#X connect 16 0 13 0;
+#X connect 17 0 13 0;
+#X connect 18 0 16 0;
+#X connect 19 0 15 0;
+#X connect 20 0 17 0;
+#X connect 21 0 0 0;
+#X connect 22 0 0 1;
+#X restore 30 110 pd collide;
+#X obj 50 140 tgl 24 0 empty empty hit? 28 7 1 10 #fcfcfc #000000 #000000
+0 1;
+#X msg 40 40 set 55;
+#X obj 20 350 send score-space;
+#X obj 40 10 loadbang;
+#X obj 20 380 send respawn1;
+#X floatatom 450 160 5 0 0 0 - - -, f 5;
+#X obj 450 190 == -1.8;
+#X obj 20 410 send destroyed;
+#X obj 280 210 pix_image;
+#X obj 310 130 loadbang;
+#X obj 280 280 pix_texture;
+#X obj 280 375 circle 0.4;
+#X floatatom 300 240 5 0 0 0 - - -, f 5;
+#X msg 350 230 env \$1;
+#X obj 350 210 hradio 15 1 0 6 empty empty empty 0 -6 0 8 #fcfcfc #000000
+#000000 2;
+#X msg 350 180 2;
+#X obj 280 350 colorRGB 1 0 0;
+#X msg 310 160 open Art/Rock1.jpeg;
+#X obj 450 230 select 1;
+#X obj 450 260 send reset;
+#X obj 130 110 loadbang;
+#X obj 73 232 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 103 232 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 133 232 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 23 202 spigot;
+#X obj 123 202 spigot;
+#X obj 23 172 receive reset;
+#X obj 193 222 loadbang;
+#X obj 143 172 receive start;
+#X obj 43 272 spigot;
+#X obj 130 140 delay 100;
+#X connect 0 0 7 2;
+#X connect 1 0 4 0;
+#X connect 1 0 7 1;
+#X connect 2 0 16 0;
+#X connect 3 0 24 0;
+#X connect 4 0 3 1;
+#X connect 4 1 3 2;
+#X connect 4 1 13 0;
+#X connect 5 1 10 0;
+#X connect 5 1 12 0;
+#X connect 5 1 15 0;
+#X connect 6 0 7 0;
+#X connect 7 0 8 0;
+#X connect 8 0 37 0;
+#X connect 9 0 2 0;
+#X connect 11 0 9 0;
+#X connect 13 0 14 0;
+#X connect 14 0 26 0;
+#X connect 16 0 18 0;
+#X connect 17 0 25 0;
+#X connect 17 0 23 0;
+#X connect 18 0 3 0;
+#X connect 20 0 18 0;
+#X connect 21 0 18 0;
+#X connect 22 0 21 0;
+#X connect 22 0 18 0;
+#X connect 23 0 22 0;
+#X connect 24 0 19 0;
+#X connect 25 0 16 0;
+#X connect 26 0 27 0;
+#X connect 28 0 38 0;
+#X connect 29 0 30 0;
+#X connect 29 0 32 1;
+#X connect 29 0 37 1;
+#X connect 30 0 31 0;
+#X connect 31 0 33 1;
+#X connect 32 0 29 0;
+#X connect 33 0 29 0;
+#X connect 34 0 32 0;
+#X connect 35 0 31 0;
+#X connect 36 0 33 0;
+#X connect 37 0 5 0;
+#X connect 38 0 8 0;
+#X restore 40 90 pd comet_collision1;
+#N canvas 804 152 722 581 comet_collision3 0;
+#X obj 420 60 inlet radius;
+#X obj 320 60 inlet reference;
+#X obj 280 110 gemhead;
+#X obj 280 340 translateXYZ;
+#X obj 350 100 unpack 0 0;
+#X obj 40 330 select 0 1;
+#X obj 240 60 inlet test;
+#N canvas 708 160 538 450 collide 0;
+#X obj 103 248 list-map2;
+#X obj 180 246 -;
+#X obj 180 293 *;
+#X obj 180 269 t a a;
+#X obj 93 368 sqrt;
+#X obj 100 320 list-reduce;
+#X obj 184 320 +;
+#X obj 133 378 t b a;
+#X obj 129 144 inlet reference;
+#X obj 100 120 inlet test;
+#X obj 303 275 inlet radius;
+#X obj 103 428 outlet;
+#X obj 103 398 <= 1;
+#X obj 100 90 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 130 90 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 160 90 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 50 60 spigot;
+#X obj 150 60 spigot;
+#X obj 50 30 receive reset;
+#X obj 220 80 loadbang;
+#X obj 170 30 receive start;
+#X obj 90 180 spigot;
+#X obj 160 175 spigot;
+#X connect 0 0 5 0;
+#X connect 0 1 1 0;
+#X connect 1 0 3 0;
+#X connect 2 0 0 2;
+#X connect 3 0 2 0;
+#X connect 3 1 2 1;
+#X connect 4 0 12 0;
+#X connect 5 0 4 0;
+#X connect 5 1 6 0;
+#X connect 6 0 5 1;
+#X connect 7 0 12 0;
+#X connect 7 1 12 1;
+#X connect 8 0 22 0;
+#X connect 9 0 21 0;
+#X connect 10 0 7 0;
+#X connect 12 0 11 0;
+#X connect 13 0 14 0;
+#X connect 13 0 16 1;
+#X connect 13 0 21 1;
+#X connect 13 0 22 1;
+#X connect 14 0 15 0;
+#X connect 15 0 17 1;
+#X connect 16 0 13 0;
+#X connect 17 0 13 0;
+#X connect 18 0 16 0;
+#X connect 19 0 15 0;
+#X connect 20 0 17 0;
+#X connect 21 0 0 0;
+#X connect 22 0 0 1;
+#X restore 30 110 pd collide;
+#X floatatom 410 370 5 0 0 0 - - -, f 5;
+#X msg 40 40 set 55;
+#X obj 40 370 send score-space;
+#X obj 40 10 loadbang;
+#X obj 280 410 circle 0.6;
+#X obj 40 400 send respawn3;
+#X floatatom 470 140 5 0 0 0 - - -, f 5;
+#X obj 470 240 send reset;
+#X obj 470 170 == -1.6;
+#X obj 40 430 send destroyed;
+#X obj 282 232 pix_image;
+#X obj 312 152 loadbang;
+#X obj 282 302 pix_texture;
+#X floatatom 302 262 5 0 0 0 - - -, f 5;
+#X msg 352 252 env \$1;
+#X obj 352 232 hradio 15 1 0 6 empty empty empty 0 -6 0 8 #fcfcfc #000000
+#000000 2;
+#X msg 352 202 2;
+#X msg 312 182 open Art/Rock2.png;
+#X obj 280 370 color 1 0 0;
+#X obj 470 200 select 1;
+#X obj 51 147 tgl 24 0 empty empty hit? 28 7 1 10 #fcfcfc #000000 #000000
+0 1;
+#X obj 61 247 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 91 247 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 121 247 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 11 217 spigot;
+#X obj 111 217 spigot;
+#X obj 11 187 receive reset;
+#X obj 181 237 loadbang;
+#X obj 131 187 receive start;
+#X obj 31 287 spigot;
+#X obj 130 120 loadbang;
+#X obj 131 152 delay 100;
+#X connect 0 0 7 2;
+#X connect 1 0 4 0;
+#X connect 1 0 7 1;
+#X connect 2 0 18 0;
+#X connect 3 0 26 0;
+#X connect 4 0 3 1;
+#X connect 4 1 3 2;
+#X connect 4 1 14 0;
+#X connect 5 1 10 0;
+#X connect 5 1 13 0;
+#X connect 5 1 17 0;
+#X connect 6 0 7 0;
+#X connect 7 0 28 0;
+#X connect 8 0 12 1;
+#X connect 9 0 2 0;
+#X connect 11 0 9 0;
+#X connect 14 0 16 0;
+#X connect 16 0 27 0;
+#X connect 18 0 20 0;
+#X connect 19 0 25 0;
+#X connect 19 0 24 0;
+#X connect 20 0 3 0;
+#X connect 21 0 20 0;
+#X connect 22 0 20 0;
+#X connect 23 0 22 0;
+#X connect 23 0 20 0;
+#X connect 24 0 23 0;
+#X connect 25 0 18 0;
+#X connect 26 0 12 0;
+#X connect 27 0 15 0;
+#X connect 28 0 37 0;
+#X connect 29 0 30 0;
+#X connect 29 0 32 1;
+#X connect 29 0 37 1;
+#X connect 30 0 31 0;
+#X connect 31 0 33 1;
+#X connect 32 0 29 0;
+#X connect 33 0 29 0;
+#X connect 34 0 32 0;
+#X connect 35 0 31 0;
+#X connect 36 0 33 0;
+#X connect 37 0 5 0;
+#X connect 38 0 39 0;
+#X connect 39 0 28 0;
+#X restore 350 90 pd comet_collision3;
+#N canvas 744 136 714 578 comet_collision4 0;
+#X obj 420 60 inlet radius;
+#X obj 320 60 inlet reference;
+#X obj 280 110 gemhead;
+#X obj 280 350 translateXYZ;
+#X obj 350 100 unpack 0 0;
+#X obj 30 350 select 0 1;
+#X obj 240 60 inlet test;
+#N canvas 708 160 538 450 collide 0;
+#X obj 110 245 list-map2;
+#X obj 190 246 -;
+#X obj 190 293 *;
+#X obj 190 269 t a a;
+#X obj 103 368 sqrt;
+#X obj 110 320 list-reduce;
+#X obj 194 320 +;
+#X obj 143 378 t b a;
+#X obj 139 154 inlet reference;
+#X obj 110 130 inlet test;
+#X obj 313 275 inlet radius;
+#X obj 113 428 outlet;
+#X obj 113 398 <= 1;
+#X obj 100 180 spigot;
+#X obj 170 175 spigot;
+#X obj 100 100 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 130 100 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 160 100 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 50 70 spigot;
+#X obj 150 70 spigot;
+#X obj 50 40 receive reset;
+#X obj 220 90 loadbang;
+#X obj 170 40 receive start;
+#X connect 0 0 5 0;
+#X connect 0 1 1 0;
+#X connect 1 0 3 0;
+#X connect 2 0 0 2;
+#X connect 3 0 2 0;
+#X connect 3 1 2 1;
+#X connect 4 0 12 0;
+#X connect 5 0 4 0;
+#X connect 5 1 6 0;
+#X connect 6 0 5 1;
+#X connect 7 0 12 0;
+#X connect 7 1 12 1;
+#X connect 8 0 14 0;
+#X connect 9 0 13 0;
+#X connect 10 0 7 0;
+#X connect 12 0 11 0;
+#X connect 13 0 0 0;
+#X connect 14 0 0 1;
+#X connect 15 0 16 0;
+#X connect 15 0 18 1;
+#X connect 15 0 13 1;
+#X connect 15 0 14 1;
+#X connect 16 0 17 0;
+#X connect 17 0 19 1;
+#X connect 18 0 15 0;
+#X connect 19 0 15 0;
+#X connect 20 0 18 0;
+#X connect 21 0 17 0;
+#X connect 22 0 19 0;
+#X restore 30 110 pd collide;
+#X floatatom 410 390 5 0 0 0 - - -, f 5;
+#X msg 40 40 set 55;
+#X obj 30 390 send score-space;
+#X obj 40 10 loadbang;
+#X obj 280 420 circle 0.3;
+#X obj 30 420 send respawn4;
+#X floatatom 440 140 5 0 0 0 - - -, f 5;
+#X obj 440 240 send reset;
+#X obj 440 170 == -1.88;
+#X obj 30 450 send destroyed;
+#X obj 273 221 pix_image;
+#X obj 303 141 loadbang;
+#X obj 273 291 pix_texture;
+#X floatatom 293 251 5 0 0 0 - - -, f 5;
+#X msg 343 241 env \$1;
+#X obj 343 221 hradio 15 1 0 6 empty empty empty 0 -6 0 8 #fcfcfc #000000
+#000000 2;
+#X msg 343 191 2;
+#X obj 280 390 color 1 0 0;
+#X msg 303 171 open Art/Rock1.jpeg;
+#X obj 440 195 select 1;
+#X obj 62 158 tgl 24 0 empty empty hit? 28 7 1 10 #fcfcfc #000000 #000000
+0 1;
+#X obj 72 258 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 102 258 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 132 258 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 22 228 spigot;
+#X obj 122 228 spigot;
+#X obj 22 198 receive reset;
+#X obj 192 248 loadbang;
+#X obj 142 198 receive start;
+#X obj 42 298 spigot;
+#X obj 141 131 loadbang;
+#X obj 142 163 delay 100;
+#X connect 0 0 7 2;
+#X connect 1 0 4 0;
+#X connect 1 0 7 1;
+#X connect 2 0 18 0;
+#X connect 3 0 25 0;
+#X connect 4 0 3 1;
+#X connect 4 1 3 2;
+#X connect 4 1 14 0;
+#X connect 5 1 10 0;
+#X connect 5 1 13 0;
+#X connect 5 1 17 0;
+#X connect 6 0 7 0;
+#X connect 7 0 28 0;
+#X connect 8 0 12 1;
+#X connect 9 0 2 0;
+#X connect 11 0 9 0;
+#X connect 14 0 16 0;
+#X connect 16 0 27 0;
+#X connect 18 0 20 0;
+#X connect 19 0 26 0;
+#X connect 19 0 24 0;
+#X connect 20 0 3 0;
+#X connect 21 0 20 0;
+#X connect 22 0 20 0;
+#X connect 23 0 22 0;
+#X connect 23 0 20 0;
+#X connect 24 0 23 0;
+#X connect 25 0 12 0;
+#X connect 26 0 18 0;
+#X connect 27 0 15 0;
+#X connect 28 0 37 0;
+#X connect 29 0 30 0;
+#X connect 29 0 32 1;
+#X connect 29 0 37 1;
+#X connect 30 0 31 0;
+#X connect 31 0 33 1;
+#X connect 32 0 29 0;
+#X connect 33 0 29 0;
+#X connect 34 0 32 0;
+#X connect 35 0 31 0;
+#X connect 36 0 33 0;
+#X connect 37 0 5 0;
+#X connect 38 0 39 0;
+#X connect 39 0 28 0;
+#X restore 500 90 pd comet_collision4;
+#N canvas 768 194 531 512 Comet1 0;
+#X obj 200 480 outlet;
+#N canvas 540 264 394 350 mover 0;
+#X obj 60 140 line;
+#X obj 200 140 line;
+#X msg 70 100 \$1 3000;
+#X msg 200 100 \$1 3000;
+#X obj 110 190 pack 0 0;
+#X floatatom 40 180 5 0 0 0 - - -, f 5;
+#X floatatom 210 180 5 0 0 0 - - -, f 5;
+#X obj 50 60 unpack 0 0, f 13;
+#X obj 180 60 unpack 0 0, f 11;
+#X obj 50 20 inlet from;
+#X obj 180 20 inlet to;
+#X obj 110 215 outlet atm;
+#X connect 0 0 4 0;
+#X connect 0 0 5 0;
+#X connect 1 0 4 1;
+#X connect 1 0 6 0;
+#X connect 2 0 0 0;
+#X connect 3 0 1 0;
+#X connect 4 0 11 0;
+#X connect 7 0 0 0;
+#X connect 7 1 1 0;
+#X connect 8 0 2 0;
+#X connect 8 1 3 0;
+#X connect 9 0 7 0;
+#X connect 10 0 8 0;
+#X restore 200 430 pd mover;
+#X obj 180 220 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 260 30 receive respawn1;
+#X obj 260 60 delay 2000;
+#X obj 120 60 receive start;
+#X floatatom 270 305 5 0 0 0 - - -, f 5;
+#X obj 270 220 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 270 330 - 3;
+#X obj 270 280 random 6;
+#X obj 340 280 random 1000;
+#X obj 340 305 / 1000;
+#X obj 270 360 +;
+#X floatatom 180 305 5 0 0 0 - - -, f 5;
+#X obj 100 280 random 1000;
+#X obj 100 305 / 1000;
+#X obj 180 360 +;
+#X msg 180 390 \$1 6;
+#X obj 20 180 receive reset;
+#X obj 180 280 random 6;
+#X obj 180 330 - 3;
+#X msg 270 390 \$1 -1.8;
+#X obj 180 250 t b b;
+#X obj 270 250 t b b;
+#X obj 183 162 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 213 162 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 243 162 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 133 132 spigot;
+#X obj 233 132 spigot;
+#X obj 133 102 receive reset;
+#X obj 303 152 loadbang;
+#X obj 253 102 receive start;
+#X obj 133 172 spigot;
+#X obj 233 192 spigot;
+#X obj 120 85 delay 500;
+#X connect 1 0 0 0;
+#X connect 2 0 22 0;
+#X connect 3 0 4 0;
+#X connect 3 0 2 0;
+#X connect 4 0 33 0;
+#X connect 5 0 34 0;
+#X connect 6 0 8 0;
+#X connect 7 0 23 0;
+#X connect 8 0 12 0;
+#X connect 9 0 6 0;
+#X connect 10 0 11 0;
+#X connect 11 0 12 1;
+#X connect 12 0 21 0;
+#X connect 13 0 20 0;
+#X connect 14 0 15 0;
+#X connect 15 0 16 1;
+#X connect 16 0 17 0;
+#X connect 17 0 1 0;
+#X connect 18 0 2 0;
+#X connect 19 0 13 0;
+#X connect 20 0 16 0;
+#X connect 21 0 1 1;
+#X connect 22 0 19 0;
+#X connect 22 1 14 0;
+#X connect 23 0 9 0;
+#X connect 23 1 10 0;
+#X connect 24 0 25 0;
+#X connect 24 0 27 1;
+#X connect 24 0 32 1;
+#X connect 24 0 33 1;
+#X connect 25 0 26 0;
+#X connect 26 0 28 1;
+#X connect 27 0 24 0;
+#X connect 28 0 24 0;
+#X connect 29 0 27 0;
+#X connect 30 0 26 0;
+#X connect 31 0 28 0;
+#X connect 32 0 2 0;
+#X connect 32 0 7 0;
+#X connect 33 0 7 0;
+#X connect 34 0 32 0;
+#X restore 60 60 pd Comet1;
+#N canvas 968 116 498 566 Comet2 0;
+#X obj 200 520 outlet;
+#N canvas 963 124 359 270 mover 0;
+#X obj 60 140 line;
+#X obj 200 140 line;
+#X obj 110 190 pack 0 0;
+#X floatatom 40 180 5 0 0 0 - - -, f 5;
+#X floatatom 210 180 5 0 0 0 - - -, f 5;
+#X obj 50 60 unpack 0 0, f 13;
+#X obj 180 60 unpack 0 0, f 11;
+#X obj 50 20 inlet from;
+#X obj 180 20 inlet to;
+#X obj 110 215 outlet atm;
+#X msg 70 100 \$1 4000;
+#X msg 200 100 \$1 4000;
+#X connect 0 0 2 0;
+#X connect 0 0 3 0;
+#X connect 1 0 2 1;
+#X connect 1 0 4 0;
+#X connect 2 0 9 0;
+#X connect 5 0 0 0;
+#X connect 5 1 1 0;
+#X connect 6 0 10 0;
+#X connect 6 1 11 0;
+#X connect 7 0 5 0;
+#X connect 8 0 6 0;
+#X connect 10 0 0 0;
+#X connect 11 0 1 0;
+#X restore 200 470 pd mover;
+#X obj 169 297 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 150 50 receive start;
+#X floatatom 270 345 5 0 0 0 - - -, f 5;
+#X obj 259 297 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 270 370 - 3;
+#X obj 270 320 random 6;
+#X obj 340 320 random 1000;
+#X obj 340 345 / 1000;
+#X obj 270 400 +;
+#X floatatom 180 345 5 0 0 0 - - -, f 5;
+#X obj 100 320 random 1000;
+#X obj 100 345 / 1000;
+#X obj 180 400 +;
+#X obj 180 320 random 9;
+#X obj 180 370 - 4;
+#X msg 180 430 \$1 6;
+#X obj 40 240 receive reset;
+#X obj 150 75 delay 1000;
+#X obj 270 120 delay 2500;
+#X obj 270 90 receive respawn2;
+#X msg 270 430 \$1 -2;
+#X obj 212 232 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 242 232 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 272 232 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 162 202 spigot;
+#X obj 262 202 spigot;
+#X obj 162 172 receive reset;
+#X obj 332 222 loadbang;
+#X obj 282 172 receive start;
+#X obj 162 242 spigot;
+#X obj 262 262 spigot;
+#X connect 1 0 0 0;
+#X connect 2 0 12 0;
+#X connect 2 0 15 0;
+#X connect 3 0 19 0;
+#X connect 4 0 6 0;
+#X connect 5 0 7 0;
+#X connect 5 0 8 0;
+#X connect 6 0 10 0;
+#X connect 7 0 4 0;
+#X connect 8 0 9 0;
+#X connect 9 0 10 1;
+#X connect 10 0 22 0;
+#X connect 11 0 16 0;
+#X connect 12 0 13 0;
+#X connect 13 0 14 1;
+#X connect 14 0 17 0;
+#X connect 15 0 11 0;
+#X connect 16 0 14 0;
+#X connect 17 0 1 0;
+#X connect 18 0 2 0;
+#X connect 19 0 31 0;
+#X connect 20 0 32 0;
+#X connect 21 0 2 0;
+#X connect 21 0 20 0;
+#X connect 22 0 1 1;
+#X connect 23 0 24 0;
+#X connect 23 0 26 1;
+#X connect 23 0 31 1;
+#X connect 23 0 32 1;
+#X connect 24 0 25 0;
+#X connect 25 0 27 1;
+#X connect 26 0 23 0;
+#X connect 27 0 23 0;
+#X connect 28 0 26 0;
+#X connect 29 0 25 0;
+#X connect 30 0 27 0;
+#X connect 31 0 2 0;
+#X connect 31 0 5 0;
+#X connect 32 0 5 0;
+#X restore 220 60 pd Comet2;
+#N canvas 812 172 490 530 Comet3 0;
+#X obj 210 510 outlet;
+#N canvas 688 376 358 270 mover 0;
+#X obj 60 140 line;
+#X obj 200 140 line;
+#X obj 110 190 pack 0 0;
+#X floatatom 40 180 5 0 0 0 - - -, f 5;
+#X floatatom 210 180 5 0 0 0 - - -, f 5;
+#X obj 50 60 unpack 0 0, f 13;
+#X obj 180 60 unpack 0 0, f 11;
+#X obj 50 20 inlet from;
+#X obj 180 20 inlet to;
+#X obj 110 215 outlet atm;
+#X msg 200 100 \$1 4000;
+#X msg 70 100 \$1 6000;
+#X connect 0 0 2 0;
+#X connect 0 0 3 0;
+#X connect 1 0 2 1;
+#X connect 1 0 4 0;
+#X connect 2 0 9 0;
+#X connect 5 0 0 0;
+#X connect 5 1 1 0;
+#X connect 6 0 11 0;
+#X connect 6 1 10 0;
+#X connect 7 0 5 0;
+#X connect 8 0 6 0;
+#X connect 10 0 1 0;
+#X connect 11 0 0 0;
+#X restore 210 460 pd mover;
+#X obj 190 280 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 150 20 receive start;
+#X floatatom 280 335 5 0 0 0 - - -, f 5;
+#X obj 280 280 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 280 360 - 3;
+#X obj 280 310 random 6;
+#X obj 350 310 random 1000;
+#X obj 350 335 / 1000;
+#X obj 280 390 +;
+#X floatatom 190 335 5 0 0 0 - - -, f 5;
+#X obj 110 310 random 1000;
+#X obj 110 335 / 1000;
+#X obj 190 390 +;
+#X obj 190 310 random 9;
+#X obj 190 360 - 4;
+#X msg 190 420 \$1 6;
+#X obj 50 220 receive reset;
+#X obj 270 60 receive respawn3;
+#X obj 150 45 delay 2000;
+#X obj 270 90 delay 500;
+#X msg 280 420 \$1 -1.6;
+#X obj 202 202 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 232 202 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 262 202 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 152 172 spigot;
+#X obj 252 172 spigot;
+#X obj 152 142 receive reset;
+#X obj 320 190 loadbang;
+#X obj 272 142 receive start;
+#X obj 152 212 spigot;
+#X obj 252 232 spigot;
+#X connect 1 0 0 0;
+#X connect 2 0 12 0;
+#X connect 2 0 15 0;
+#X connect 3 0 20 0;
+#X connect 4 0 6 0;
+#X connect 5 0 7 0;
+#X connect 5 0 8 0;
+#X connect 6 0 10 0;
+#X connect 7 0 4 0;
+#X connect 8 0 9 0;
+#X connect 9 0 10 1;
+#X connect 10 0 22 0;
+#X connect 11 0 16 0;
+#X connect 12 0 13 0;
+#X connect 13 0 14 1;
+#X connect 14 0 17 0;
+#X connect 15 0 11 0;
+#X connect 16 0 14 0;
+#X connect 17 0 1 0;
+#X connect 18 0 2 0;
+#X connect 19 0 2 0;
+#X connect 19 0 21 0;
+#X connect 20 0 31 0;
+#X connect 21 0 32 0;
+#X connect 22 0 1 1;
+#X connect 23 0 24 0;
+#X connect 23 0 26 1;
+#X connect 23 0 31 1;
+#X connect 23 0 32 1;
+#X connect 24 0 25 0;
+#X connect 25 0 27 1;
+#X connect 26 0 23 0;
+#X connect 27 0 23 0;
+#X connect 28 0 26 0;
+#X connect 29 0 25 0;
+#X connect 30 0 27 0;
+#X connect 31 0 2 0;
+#X connect 31 0 5 0;
+#X connect 32 0 5 0;
+#X restore 370 60 pd Comet3;
+#N canvas 708 112 498 534 Comet4 0;
+#X obj 200 500 outlet;
+#N canvas 688 376 358 270 mover 0;
+#X obj 60 140 line;
+#X obj 200 140 line;
+#X obj 110 190 pack 0 0;
+#X floatatom 40 180 5 0 0 0 - - -, f 5;
+#X floatatom 210 180 5 0 0 0 - - -, f 5;
+#X obj 50 60 unpack 0 0, f 13;
+#X obj 180 60 unpack 0 0, f 11;
+#X obj 50 20 inlet from;
+#X obj 180 20 inlet to;
+#X obj 110 215 outlet atm;
+#X msg 200 100 \$1 4000;
+#X msg 70 100 \$1 6000;
+#X connect 0 0 2 0;
+#X connect 0 0 3 0;
+#X connect 1 0 2 1;
+#X connect 1 0 4 0;
+#X connect 2 0 9 0;
+#X connect 5 0 0 0;
+#X connect 5 1 1 0;
+#X connect 6 0 11 0;
+#X connect 6 1 10 0;
+#X connect 7 0 5 0;
+#X connect 8 0 6 0;
+#X connect 10 0 1 0;
+#X connect 11 0 0 0;
+#X restore 200 450 pd mover;
+#X obj 180 270 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 150 80 receive start;
+#X floatatom 270 325 5 0 0 0 - - -, f 5;
+#X obj 270 270 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 270 350 - 3;
+#X obj 270 300 random 6;
+#X obj 340 300 random 1000;
+#X obj 340 325 / 1000;
+#X obj 270 380 +;
+#X floatatom 180 325 5 0 0 0 - - -, f 5;
+#X obj 100 300 random 1000;
+#X obj 100 325 / 1000;
+#X obj 180 380 +;
+#X msg 180 410 \$1 6;
+#X obj 50 210 receive reset;
+#X obj 280 50 receive respawn4;
+#X obj 180 300 random 11;
+#X obj 180 350 - 5;
+#X obj 280 80 delay 4000;
+#X msg 267 408 \$1 -1.88;
+#X obj 203 202 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 233 202 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 263 202 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 153 172 spigot;
+#X obj 253 172 spigot;
+#X obj 150 140 receive reset;
+#X obj 323 192 loadbang;
+#X obj 273 142 receive start;
+#X obj 153 212 spigot;
+#X obj 253 232 spigot;
+#X obj 150 105 delay 4500;
+#X connect 1 0 0 0;
+#X connect 2 0 12 0;
+#X connect 2 0 18 0;
+#X connect 3 0 32 0;
+#X connect 4 0 6 0;
+#X connect 5 0 7 0;
+#X connect 5 0 8 0;
+#X connect 6 0 10 0;
+#X connect 7 0 4 0;
+#X connect 8 0 9 0;
+#X connect 9 0 10 1;
+#X connect 10 0 21 0;
+#X connect 11 0 19 0;
+#X connect 12 0 13 0;
+#X connect 13 0 14 1;
+#X connect 14 0 15 0;
+#X connect 15 0 1 0;
+#X connect 16 0 2 0;
+#X connect 17 0 2 0;
+#X connect 17 0 20 0;
+#X connect 18 0 11 0;
+#X connect 19 0 14 0;
+#X connect 20 0 31 0;
+#X connect 21 0 1 1;
+#X connect 22 0 23 0;
+#X connect 22 0 25 1;
+#X connect 22 0 30 1;
+#X connect 22 0 31 1;
+#X connect 23 0 24 0;
+#X connect 24 0 26 1;
+#X connect 25 0 22 0;
+#X connect 26 0 22 0;
+#X connect 27 0 25 0;
+#X connect 28 0 24 0;
+#X connect 29 0 26 0;
+#X connect 30 0 2 0;
+#X connect 30 0 5 0;
+#X connect 31 0 5 0;
+#X connect 32 0 30 0;
+#X restore 520 60 pd Comet4;
+#X msg 290 40 0.2;
+#X msg 440 40 0.6;
+#X msg 590 40 0.3;
+#X floatatom 200 250 5 0 0 1 - - -, f 5;
+#X obj 200 210 loadbang;
+#X msg 200 230 0.3;
+#X floatatom 380 260 5 0 0 1 - - -, f 5;
+#X obj 380 220 loadbang;
+#X msg 380 240 0.4;
+#N canvas 704 144 502 534 Comet5 0;
+#X obj 190 510 outlet;
+#N canvas 688 376 358 270 mover 0;
+#X obj 60 140 line;
+#X obj 200 140 line;
+#X obj 110 190 pack 0 0;
+#X floatatom 40 180 5 0 0 0 - - -, f 5;
+#X floatatom 210 180 5 0 0 0 - - -, f 5;
+#X obj 50 60 unpack 0 0, f 13;
+#X obj 180 60 unpack 0 0, f 11;
+#X obj 50 20 inlet from;
+#X obj 180 20 inlet to;
+#X obj 110 215 outlet atm;
+#X msg 70 100 \$1 2500;
+#X msg 200 100 \$1 2500;
+#X connect 0 0 2 0;
+#X connect 0 0 3 0;
+#X connect 1 0 2 1;
+#X connect 1 0 4 0;
+#X connect 2 0 9 0;
+#X connect 5 0 0 0;
+#X connect 5 1 1 0;
+#X connect 6 0 10 0;
+#X connect 6 1 11 0;
+#X connect 7 0 5 0;
+#X connect 8 0 6 0;
+#X connect 10 0 0 0;
+#X connect 11 0 1 0;
+#X restore 190 460 pd mover;
+#X obj 170 280 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 150 100 receive start;
+#X floatatom 260 335 5 0 0 0 - - -, f 5;
+#X obj 260 280 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 260 360 - 3;
+#X obj 260 310 random 6;
+#X obj 330 310 random 1000;
+#X obj 330 335 / 1000;
+#X obj 260 390 +;
+#X floatatom 170 335 5 0 0 0 - - -, f 5;
+#X obj 90 310 random 1000;
+#X obj 90 335 / 1000;
+#X obj 170 390 +;
+#X msg 170 420 \$1 6;
+#X obj 20 220 receive reset;
+#X obj 170 310 random 11;
+#X obj 170 360 - 5;
+#X msg 257 418 \$1 -1.88;
+#X obj 273 102 receive respawn5;
+#X obj 273 132 delay 2200;
+#X obj 205 224 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 235 224 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 265 224 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 155 194 spigot;
+#X obj 255 194 spigot;
+#X obj 155 164 receive reset;
+#X obj 325 214 loadbang;
+#X obj 275 164 receive start;
+#X obj 150 230 spigot;
+#X obj 260 250 spigot;
+#X obj 150 125 delay 6000;
+#X connect 1 0 0 0;
+#X connect 2 0 12 0;
+#X connect 2 0 17 0;
+#X connect 3 0 32 0;
+#X connect 4 0 6 0;
+#X connect 5 0 7 0;
+#X connect 5 0 8 0;
+#X connect 6 0 10 0;
+#X connect 7 0 4 0;
+#X connect 8 0 9 0;
+#X connect 9 0 10 1;
+#X connect 10 0 19 0;
+#X connect 11 0 18 0;
+#X connect 12 0 13 0;
+#X connect 13 0 14 1;
+#X connect 14 0 15 0;
+#X connect 15 0 1 0;
+#X connect 16 0 2 0;
+#X connect 17 0 11 0;
+#X connect 18 0 14 0;
+#X connect 19 0 1 1;
+#X connect 20 0 2 0;
+#X connect 20 0 21 0;
+#X connect 21 0 31 0;
+#X connect 22 0 23 0;
+#X connect 22 0 25 1;
+#X connect 22 0 30 1;
+#X connect 22 0 31 1;
+#X connect 23 0 24 0;
+#X connect 24 0 26 1;
+#X connect 25 0 22 0;
+#X connect 26 0 22 0;
+#X connect 27 0 25 0;
+#X connect 28 0 24 0;
+#X connect 29 0 26 0;
+#X connect 30 0 2 0;
+#X connect 30 0 5 0;
+#X connect 31 0 5 0;
+#X connect 32 0 30 0;
+#X restore 130 250 pd Comet5;
+#N canvas 76 52 534 630 Comet6 0;
+#X obj 190 560 outlet;
+#N canvas 540 264 394 350 mover 0;
+#X obj 60 140 line;
+#X obj 200 140 line;
+#X obj 110 190 pack 0 0;
+#X floatatom 40 180 5 0 0 0 - - -, f 5;
+#X floatatom 210 180 5 0 0 0 - - -, f 5;
+#X obj 50 60 unpack 0 0, f 13;
+#X obj 180 60 unpack 0 0, f 11;
+#X obj 50 20 inlet from;
+#X obj 180 20 inlet to;
+#X obj 110 215 outlet atm;
+#X msg 70 100 \$1 2200;
+#X msg 200 100 \$1 2200;
+#X connect 0 0 2 0;
+#X connect 0 0 3 0;
+#X connect 1 0 2 1;
+#X connect 1 0 4 0;
+#X connect 2 0 9 0;
+#X connect 5 0 0 0;
+#X connect 5 1 1 0;
+#X connect 6 0 10 0;
+#X connect 6 1 11 0;
+#X connect 7 0 5 0;
+#X connect 8 0 6 0;
+#X connect 10 0 0 0;
+#X connect 11 0 1 0;
+#X restore 190 510 pd mover;
+#X obj 170 250 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 150 60 receive start;
+#X floatatom 260 385 5 0 0 0 - - -, f 5;
+#X obj 260 250 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 260 410 - 3;
+#X obj 260 360 random 6;
+#X obj 330 360 random 1000;
+#X obj 330 385 / 1000;
+#X obj 260 440 +;
+#X floatatom 170 385 5 0 0 0 - - -, f 5;
+#X obj 90 360 random 1000;
+#X obj 90 385 / 1000;
+#X obj 170 440 +;
+#X msg 170 470 \$1 6;
+#X obj 50 190 receive reset;
+#X obj 170 360 random 6;
+#X obj 170 410 - 3;
+#X msg 260 470 \$1 -1.8;
+#X obj 170 280 t b b;
+#X obj 260 280 t b b;
+#X obj 320 90 delay 3200;
+#X obj 320 60 receive respawn6;
+#X obj 200 180 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 230 180 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 260 180 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 150 150 spigot;
+#X obj 250 150 spigot;
+#X obj 150 120 receive reset;
+#X obj 320 170 loadbang;
+#X obj 270 120 receive start;
+#X obj 150 190 spigot;
+#X obj 250 210 spigot;
+#X obj 150 85 delay 8000;
+#X connect 1 0 0 0;
+#X connect 2 0 20 0;
+#X connect 3 0 34 0;
+#X connect 4 0 6 0;
+#X connect 5 0 21 0;
+#X connect 6 0 10 0;
+#X connect 7 0 4 0;
+#X connect 8 0 9 0;
+#X connect 9 0 10 1;
+#X connect 10 0 19 0;
+#X connect 11 0 18 0;
+#X connect 12 0 13 0;
+#X connect 13 0 14 1;
+#X connect 14 0 15 0;
+#X connect 15 0 1 0;
+#X connect 16 0 2 0;
+#X connect 17 0 11 0;
+#X connect 18 0 14 0;
+#X connect 19 0 1 1;
+#X connect 20 0 17 0;
+#X connect 20 1 12 0;
+#X connect 21 0 7 0;
+#X connect 21 1 8 0;
+#X connect 22 0 33 0;
+#X connect 23 0 2 0;
+#X connect 23 0 22 0;
+#X connect 24 0 25 0;
+#X connect 24 0 27 1;
+#X connect 24 0 32 1;
+#X connect 24 0 33 1;
+#X connect 25 0 26 0;
+#X connect 26 0 28 1;
+#X connect 27 0 24 0;
+#X connect 28 0 24 0;
+#X connect 29 0 27 0;
+#X connect 30 0 26 0;
+#X connect 31 0 28 0;
+#X connect 32 0 2 0;
+#X connect 32 0 5 0;
+#X connect 33 0 5 0;
+#X connect 34 0 32 0;
+#X restore 310 260 pd Comet6;
+#N canvas 724 156 706 562 comet_collision6 0;
+#X obj 430 50 inlet radius;
+#X obj 330 50 inlet reference;
+#X obj 290 100 gemhead;
+#X obj 280 310 translateXYZ;
+#X obj 360 90 unpack 0 0;
+#X obj 20 310 select 0 1;
+#X obj 250 50 inlet test;
+#N canvas 280 232 541 493 collide 0;
+#X obj 91 217 list-map2;
+#X obj 171 218 -;
+#X obj 171 265 *;
+#X obj 171 241 t a a;
+#X obj 84 340 sqrt;
+#X obj 84 290 list-reduce;
+#X obj 170 290 +;
+#X obj 124 360 t b a;
+#X obj 150 130 inlet reference;
+#X obj 80 130 inlet test;
+#X obj 294 247 inlet radius;
+#X obj 94 410 outlet;
+#X obj 94 380 <= 1;
+#X obj 110 90 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 140 90 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 170 90 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 60 60 spigot;
+#X obj 160 60 spigot;
+#X obj 60 30 receive reset;
+#X obj 230 80 loadbang;
+#X obj 180 30 receive start;
+#X obj 80 160 spigot;
+#X obj 150 155 spigot;
+#X connect 0 0 5 0;
+#X connect 0 1 1 0;
+#X connect 1 0 3 0;
+#X connect 2 0 0 2;
+#X connect 3 0 2 0;
+#X connect 3 1 2 1;
+#X connect 4 0 12 0;
+#X connect 5 0 4 0;
+#X connect 5 1 6 0;
+#X connect 6 0 5 1;
+#X connect 7 0 12 0;
+#X connect 7 1 12 1;
+#X connect 8 0 22 0;
+#X connect 9 0 21 0;
+#X connect 10 0 7 0;
+#X connect 12 0 11 0;
+#X connect 13 0 14 0;
+#X connect 13 0 16 1;
+#X connect 13 0 21 1;
+#X connect 13 0 22 1;
+#X connect 14 0 15 0;
+#X connect 15 0 17 1;
+#X connect 16 0 13 0;
+#X connect 17 0 13 0;
+#X connect 18 0 16 0;
+#X connect 19 0 15 0;
+#X connect 20 0 17 0;
+#X connect 21 0 0 0;
+#X connect 22 0 0 1;
+#X restore 30 110 pd collide;
+#X obj 50 140 tgl 24 0 empty empty hit? 28 7 1 10 #fcfcfc #000000 #000000
+0 1;
+#X msg 40 40 set 55;
+#X obj 20 350 send score-space;
+#X obj 40 10 loadbang;
+#X floatatom 450 160 5 0 0 0 - - -, f 5;
+#X obj 450 190 == -1.8;
+#X obj 20 410 send destroyed;
+#X obj 280 210 pix_image;
+#X obj 310 130 loadbang;
+#X obj 280 280 pix_texture;
+#X obj 280 375 circle 0.4;
+#X floatatom 300 240 5 0 0 0 - - -, f 5;
+#X msg 350 230 env \$1;
+#X obj 350 210 hradio 15 1 0 6 empty empty empty 0 -6 0 8 #fcfcfc #000000
+#000000 2;
+#X msg 350 180 2;
+#X obj 280 350 colorRGB 1 0 0;
+#X obj 450 230 select 1;
+#X obj 450 260 send reset;
+#X obj 130 110 loadbang;
+#X obj 73 232 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 103 232 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 133 232 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 23 202 spigot;
+#X obj 123 202 spigot;
+#X obj 23 172 receive reset;
+#X obj 193 222 loadbang;
+#X obj 143 172 receive start;
+#X obj 43 272 spigot;
+#X obj 130 140 delay 100;
+#X obj 20 380 send respawn6;
+#X msg 310 160 open Art/Rock2.png;
+#X connect 0 0 7 2;
+#X connect 1 0 4 0;
+#X connect 1 0 7 1;
+#X connect 2 0 15 0;
+#X connect 3 0 23 0;
+#X connect 4 0 3 1;
+#X connect 4 1 3 2;
+#X connect 4 1 12 0;
+#X connect 5 1 10 0;
+#X connect 5 1 14 0;
+#X connect 5 1 37 0;
+#X connect 6 0 7 0;
+#X connect 7 0 8 0;
+#X connect 8 0 35 0;
+#X connect 9 0 2 0;
+#X connect 11 0 9 0;
+#X connect 12 0 13 0;
+#X connect 13 0 24 0;
+#X connect 15 0 17 0;
+#X connect 16 0 38 0;
+#X connect 16 0 22 0;
+#X connect 17 0 3 0;
+#X connect 19 0 17 0;
+#X connect 20 0 17 0;
+#X connect 21 0 20 0;
+#X connect 21 0 17 0;
+#X connect 22 0 21 0;
+#X connect 23 0 18 0;
+#X connect 24 0 25 0;
+#X connect 26 0 36 0;
+#X connect 27 0 28 0;
+#X connect 27 0 30 1;
+#X connect 27 0 35 1;
+#X connect 28 0 29 0;
+#X connect 29 0 31 1;
+#X connect 30 0 27 0;
+#X connect 31 0 27 0;
+#X connect 32 0 30 0;
+#X connect 33 0 29 0;
+#X connect 34 0 31 0;
+#X connect 35 0 5 0;
+#X connect 36 0 8 0;
+#X connect 38 0 15 0;
+#X restore 290 290 pd comet_collision6;
+#N canvas 733 213 717 581 comet_collision5 0;
+#X obj 420 60 inlet radius;
+#X obj 320 60 inlet reference;
+#X obj 280 110 gemhead;
+#X obj 280 350 translateXYZ;
+#X obj 350 100 unpack 0 0;
+#X obj 30 350 select 0 1;
+#X obj 240 60 inlet test;
+#N canvas 708 160 538 450 collide 0;
+#X obj 110 245 list-map2;
+#X obj 190 246 -;
+#X obj 190 293 *;
+#X obj 190 269 t a a;
+#X obj 103 368 sqrt;
+#X obj 110 320 list-reduce;
+#X obj 194 320 +;
+#X obj 143 378 t b a;
+#X obj 139 154 inlet reference;
+#X obj 110 130 inlet test;
+#X obj 313 275 inlet radius;
+#X obj 113 428 outlet;
+#X obj 113 398 <= 1;
+#X obj 100 180 spigot;
+#X obj 170 175 spigot;
+#X obj 100 100 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 130 100 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 160 100 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 50 70 spigot;
+#X obj 150 70 spigot;
+#X obj 50 40 receive reset;
+#X obj 220 90 loadbang;
+#X obj 170 40 receive start;
+#X connect 0 0 5 0;
+#X connect 0 1 1 0;
+#X connect 1 0 3 0;
+#X connect 2 0 0 2;
+#X connect 3 0 2 0;
+#X connect 3 1 2 1;
+#X connect 4 0 12 0;
+#X connect 5 0 4 0;
+#X connect 5 1 6 0;
+#X connect 6 0 5 1;
+#X connect 7 0 12 0;
+#X connect 7 1 12 1;
+#X connect 8 0 14 0;
+#X connect 9 0 13 0;
+#X connect 10 0 7 0;
+#X connect 12 0 11 0;
+#X connect 13 0 0 0;
+#X connect 14 0 0 1;
+#X connect 15 0 16 0;
+#X connect 15 0 18 1;
+#X connect 15 0 13 1;
+#X connect 15 0 14 1;
+#X connect 16 0 17 0;
+#X connect 17 0 19 1;
+#X connect 18 0 15 0;
+#X connect 19 0 15 0;
+#X connect 20 0 18 0;
+#X connect 21 0 17 0;
+#X connect 22 0 19 0;
+#X restore 30 110 pd collide;
+#X floatatom 410 390 5 0 0 0 - - -, f 5;
+#X msg 40 40 set 55;
+#X obj 30 390 send score-space;
+#X obj 40 10 loadbang;
+#X obj 280 420 circle 0.3;
+#X floatatom 440 140 5 0 0 0 - - -, f 5;
+#X obj 440 240 send reset;
+#X obj 440 170 == -1.88;
+#X obj 30 450 send destroyed;
+#X obj 273 221 pix_image;
+#X obj 303 141 loadbang;
+#X obj 273 291 pix_texture;
+#X floatatom 293 251 5 0 0 0 - - -, f 5;
+#X msg 343 241 env \$1;
+#X obj 343 221 hradio 15 1 0 6 empty empty empty 0 -6 0 8 #fcfcfc #000000
+#000000 2;
+#X msg 343 191 2;
+#X obj 280 390 color 1 0 0;
+#X msg 303 171 open Art/Rock1.jpeg;
+#X obj 440 195 select 1;
+#X obj 62 158 tgl 24 0 empty empty hit? 28 7 1 10 #fcfcfc #000000 #000000
+0 1;
+#X obj 72 258 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 102 258 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 132 258 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 22 228 spigot;
+#X obj 122 228 spigot;
+#X obj 22 198 receive reset;
+#X obj 192 248 loadbang;
+#X obj 142 198 receive start;
+#X obj 42 298 spigot;
+#X obj 141 131 loadbang;
+#X obj 142 163 delay 100;
+#X obj 30 420 send respawn5;
+#X connect 0 0 7 2;
+#X connect 1 0 4 0;
+#X connect 1 0 7 1;
+#X connect 2 0 17 0;
+#X connect 3 0 24 0;
+#X connect 4 0 3 1;
+#X connect 4 1 3 2;
+#X connect 4 1 13 0;
+#X connect 5 1 10 0;
+#X connect 5 1 16 0;
+#X connect 5 1 39 0;
+#X connect 6 0 7 0;
+#X connect 7 0 27 0;
+#X connect 8 0 12 1;
+#X connect 9 0 2 0;
+#X connect 11 0 9 0;
+#X connect 13 0 15 0;
+#X connect 15 0 26 0;
+#X connect 17 0 19 0;
+#X connect 18 0 25 0;
+#X connect 18 0 23 0;
+#X connect 19 0 3 0;
+#X connect 20 0 19 0;
+#X connect 21 0 19 0;
+#X connect 22 0 21 0;
+#X connect 22 0 19 0;
+#X connect 23 0 22 0;
+#X connect 24 0 12 0;
+#X connect 25 0 17 0;
+#X connect 26 0 14 0;
+#X connect 27 0 36 0;
+#X connect 28 0 29 0;
+#X connect 28 0 31 1;
+#X connect 28 0 36 1;
+#X connect 29 0 30 0;
+#X connect 30 0 32 1;
+#X connect 31 0 28 0;
+#X connect 32 0 28 0;
+#X connect 33 0 31 0;
+#X connect 34 0 30 0;
+#X connect 35 0 32 0;
+#X connect 36 0 5 0;
+#X connect 37 0 38 0;
+#X connect 38 0 27 0;
+#X restore 110 280 pd comet_collision5;
+#N canvas 1032 308 494 358 gemmouse 0;
+#X obj 100 60 gemmouse 8 8;
+#X obj 144 98 swap 8;
+#X obj 144 124 -;
+#X obj 144 146 - 4;
+#X obj 100 167 pack 0 0;
+#X obj 100 194 spigot;
+#X obj 100 280 outlet;
+#X obj 99 131 - 4;
+#X obj 120 220 delay 10;
+#X floatatom 210 80 5 0 0 0 - - -, f 5;
+#X obj 290 70 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 320 70 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 350 70 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 240 40 spigot;
+#X obj 340 40 spigot;
+#X obj 430 60 loadbang;
+#X obj 210 140 bng 17 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X floatatom 210 210 5 0 0 0 - - -, f 5;
+#X msg 210 170 1;
+#X obj 240 160 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X msg 240 180 0;
+#X obj 240 140 delay 100;
+#X obj 120 250 pack 10 10;
+#X obj 210 104 sel 1;
+#X connect 0 0 7 0;
+#X connect 0 1 1 0;
+#X connect 0 2 9 0;
+#X connect 1 0 2 0;
+#X connect 1 1 2 1;
+#X connect 2 0 3 0;
+#X connect 3 0 4 1;
+#X connect 4 0 5 0;
+#X connect 5 0 6 0;
+#X connect 5 0 8 0;
+#X connect 7 0 4 0;
+#X connect 8 0 22 0;
+#X connect 9 0 23 0;
+#X connect 10 0 11 0;
+#X connect 11 0 12 0;
+#X connect 12 0 14 1;
+#X connect 12 0 13 1;
+#X connect 13 0 10 0;
+#X connect 14 0 10 0;
+#X connect 15 0 12 0;
+#X connect 16 0 18 0;
+#X connect 16 0 21 0;
+#X connect 17 0 5 1;
+#X connect 18 0 17 0;
+#X connect 19 0 20 0;
+#X connect 20 0 17 0;
+#X connect 21 0 19 0;
+#X connect 22 0 6 0;
+#X connect 23 0 16 0;
+#X restore 460 210 pd gemmouse;
+#X floatatom 550 260 5 0 0 1 - - -, f 5;
+#X obj 550 220 loadbang;
+#N canvas 724 156 706 562 comet_collision6 0;
+#X obj 430 50 inlet radius;
+#X obj 330 50 inlet reference;
+#X obj 290 100 gemhead;
+#X obj 280 310 translateXYZ;
+#X obj 360 90 unpack 0 0;
+#X obj 20 310 select 0 1;
+#X obj 250 50 inlet test;
+#N canvas 280 232 541 493 collide 0;
+#X obj 91 217 list-map2;
+#X obj 171 218 -;
+#X obj 171 265 *;
+#X obj 171 241 t a a;
+#X obj 84 340 sqrt;
+#X obj 84 290 list-reduce;
+#X obj 170 290 +;
+#X obj 124 360 t b a;
+#X obj 150 130 inlet reference;
+#X obj 80 130 inlet test;
+#X obj 294 247 inlet radius;
+#X obj 94 410 outlet;
+#X obj 94 380 <= 1;
+#X obj 110 90 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 140 90 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 170 90 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 60 60 spigot;
+#X obj 160 60 spigot;
+#X obj 60 30 receive reset;
+#X obj 230 80 loadbang;
+#X obj 180 30 receive start;
+#X obj 80 160 spigot;
+#X obj 150 155 spigot;
+#X connect 0 0 5 0;
+#X connect 0 1 1 0;
+#X connect 1 0 3 0;
+#X connect 2 0 0 2;
+#X connect 3 0 2 0;
+#X connect 3 1 2 1;
+#X connect 4 0 12 0;
+#X connect 5 0 4 0;
+#X connect 5 1 6 0;
+#X connect 6 0 5 1;
+#X connect 7 0 12 0;
+#X connect 7 1 12 1;
+#X connect 8 0 22 0;
+#X connect 9 0 21 0;
+#X connect 10 0 7 0;
+#X connect 12 0 11 0;
+#X connect 13 0 14 0;
+#X connect 13 0 16 1;
+#X connect 13 0 21 1;
+#X connect 13 0 22 1;
+#X connect 14 0 15 0;
+#X connect 15 0 17 1;
+#X connect 16 0 13 0;
+#X connect 17 0 13 0;
+#X connect 18 0 16 0;
+#X connect 19 0 15 0;
+#X connect 20 0 17 0;
+#X connect 21 0 0 0;
+#X connect 22 0 0 1;
+#X restore 30 110 pd collide;
+#X obj 50 140 tgl 24 0 empty empty hit? 28 7 1 10 #fcfcfc #000000 #000000
+0 1;
+#X msg 40 40 set 55;
+#X obj 20 350 send score-space;
+#X obj 40 10 loadbang;
+#X floatatom 450 160 5 0 0 0 - - -, f 5;
+#X obj 20 410 send destroyed;
+#X obj 280 210 pix_image;
+#X obj 310 130 loadbang;
+#X obj 280 280 pix_texture;
+#X floatatom 300 240 5 0 0 0 - - -, f 5;
+#X msg 350 230 env \$1;
+#X obj 350 210 hradio 15 1 0 6 empty empty empty 0 -6 0 8 #fcfcfc #000000
+#000000 2;
+#X msg 350 180 2;
+#X obj 280 350 colorRGB 1 0 0;
+#X obj 450 230 select 1;
+#X obj 450 260 send reset;
+#X obj 130 110 loadbang;
+#X obj 73 232 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 103 232 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 133 232 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 23 202 spigot;
+#X obj 123 202 spigot;
+#X obj 23 172 receive reset;
+#X obj 193 222 loadbang;
+#X obj 143 172 receive start;
+#X obj 43 272 spigot;
+#X obj 130 140 delay 100;
+#X msg 310 160 open Art/Rock2.png;
+#X obj 20 380 send respawn7;
+#X obj 280 375 circle 0.3;
+#X obj 450 190 == -1.8;
+#X connect 0 0 7 2;
+#X connect 1 0 4 0;
+#X connect 1 0 7 1;
+#X connect 2 0 14 0;
+#X connect 3 0 21 0;
+#X connect 4 0 3 1;
+#X connect 4 1 3 2;
+#X connect 4 1 12 0;
+#X connect 5 1 10 0;
+#X connect 5 1 13 0;
+#X connect 5 1 36 0;
+#X connect 6 0 7 0;
+#X connect 7 0 8 0;
+#X connect 8 0 33 0;
+#X connect 9 0 2 0;
+#X connect 11 0 9 0;
+#X connect 12 0 38 0;
+#X connect 14 0 16 0;
+#X connect 15 0 35 0;
+#X connect 15 0 20 0;
+#X connect 16 0 3 0;
+#X connect 17 0 16 0;
+#X connect 18 0 16 0;
+#X connect 19 0 18 0;
+#X connect 19 0 16 0;
+#X connect 20 0 19 0;
+#X connect 21 0 37 0;
+#X connect 22 0 23 0;
+#X connect 24 0 34 0;
+#X connect 25 0 26 0;
+#X connect 25 0 28 1;
+#X connect 25 0 33 1;
+#X connect 26 0 27 0;
+#X connect 27 0 29 1;
+#X connect 28 0 25 0;
+#X connect 29 0 25 0;
+#X connect 30 0 28 0;
+#X connect 31 0 27 0;
+#X connect 32 0 29 0;
+#X connect 33 0 5 0;
+#X connect 34 0 8 0;
+#X connect 35 0 14 0;
+#X connect 38 0 22 0;
+#X restore 460 290 pd comet_collision6;
+#N canvas 76 52 534 630 Comet7 0;
+#X obj 190 560 outlet;
+#N canvas 540 264 394 350 mover 0;
+#X obj 60 140 line;
+#X obj 200 140 line;
+#X obj 110 190 pack 0 0;
+#X floatatom 40 180 5 0 0 0 - - -, f 5;
+#X floatatom 210 180 5 0 0 0 - - -, f 5;
+#X obj 50 60 unpack 0 0, f 13;
+#X obj 180 60 unpack 0 0, f 11;
+#X obj 50 20 inlet from;
+#X obj 180 20 inlet to;
+#X obj 110 215 outlet atm;
+#X msg 70 100 \$1 2000;
+#X msg 200 100 \$1 2000;
+#X connect 0 0 2 0;
+#X connect 0 0 3 0;
+#X connect 1 0 2 1;
+#X connect 1 0 4 0;
+#X connect 2 0 9 0;
+#X connect 5 0 0 0;
+#X connect 5 1 1 0;
+#X connect 6 0 10 0;
+#X connect 6 1 11 0;
+#X connect 7 0 5 0;
+#X connect 8 0 6 0;
+#X connect 10 0 0 0;
+#X connect 11 0 1 0;
+#X restore 190 510 pd mover;
+#X obj 170 250 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 150 60 receive start;
+#X floatatom 260 385 5 0 0 0 - - -, f 5;
+#X obj 260 250 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 260 410 - 3;
+#X obj 260 360 random 6;
+#X obj 330 360 random 1000;
+#X obj 330 385 / 1000;
+#X obj 260 440 +;
+#X floatatom 170 385 5 0 0 0 - - -, f 5;
+#X obj 90 360 random 1000;
+#X obj 90 385 / 1000;
+#X obj 170 440 +;
+#X msg 170 470 \$1 6;
+#X obj 50 190 receive reset;
+#X obj 170 360 random 6;
+#X obj 170 410 - 3;
+#X msg 260 470 \$1 -1.8;
+#X obj 170 280 t b b;
+#X obj 260 280 t b b;
+#X obj 200 180 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 230 180 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 260 180 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 150 150 spigot;
+#X obj 250 150 spigot;
+#X obj 150 120 receive reset;
+#X obj 320 170 loadbang;
+#X obj 270 120 receive start;
+#X obj 150 190 spigot;
+#X obj 250 210 spigot;
+#X obj 150 85 delay 12000;
+#X obj 320 60 receive respawn7;
+#X obj 320 90 delay 5000;
+#X connect 1 0 0 0;
+#X connect 2 0 20 0;
+#X connect 3 0 32 0;
+#X connect 4 0 6 0;
+#X connect 5 0 21 0;
+#X connect 6 0 10 0;
+#X connect 7 0 4 0;
+#X connect 8 0 9 0;
+#X connect 9 0 10 1;
+#X connect 10 0 19 0;
+#X connect 11 0 18 0;
+#X connect 12 0 13 0;
+#X connect 13 0 14 1;
+#X connect 14 0 15 0;
+#X connect 15 0 1 0;
+#X connect 16 0 2 0;
+#X connect 17 0 11 0;
+#X connect 18 0 14 0;
+#X connect 19 0 1 1;
+#X connect 20 0 17 0;
+#X connect 20 1 12 0;
+#X connect 21 0 7 0;
+#X connect 21 1 8 0;
+#X connect 22 0 23 0;
+#X connect 22 0 25 1;
+#X connect 22 0 30 1;
+#X connect 22 0 31 1;
+#X connect 23 0 24 0;
+#X connect 24 0 26 1;
+#X connect 25 0 22 0;
+#X connect 26 0 22 0;
+#X connect 27 0 25 0;
+#X connect 28 0 24 0;
+#X connect 29 0 26 0;
+#X connect 30 0 2 0;
+#X connect 30 0 5 0;
+#X connect 31 0 5 0;
+#X connect 32 0 30 0;
+#X connect 33 0 2 0;
+#X connect 33 0 34 0;
+#X connect 34 0 31 0;
+#X restore 480 260 pd Comet7;
+#X msg 550 240 0.3;
+#N canvas 1032 308 494 358 gemmouse 0;
+#X obj 100 60 gemmouse 8 8;
+#X obj 144 98 swap 8;
+#X obj 144 124 -;
+#X obj 144 146 - 4;
+#X obj 100 167 pack 0 0;
+#X obj 100 194 spigot;
+#X obj 100 280 outlet;
+#X obj 99 131 - 4;
+#X obj 120 220 delay 10;
+#X floatatom 210 80 5 0 0 0 - - -, f 5;
+#X obj 290 70 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 320 70 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 350 70 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 240 40 spigot;
+#X obj 340 40 spigot;
+#X obj 430 60 loadbang;
+#X obj 210 140 bng 17 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X floatatom 210 210 5 0 0 0 - - -, f 5;
+#X msg 210 170 1;
+#X obj 240 160 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X msg 240 180 0;
+#X obj 240 140 delay 100;
+#X obj 120 250 pack 10 10;
+#X obj 210 104 sel 1;
+#X connect 0 0 7 0;
+#X connect 0 1 1 0;
+#X connect 0 2 9 0;
+#X connect 1 0 2 0;
+#X connect 1 1 2 1;
+#X connect 2 0 3 0;
+#X connect 3 0 4 1;
+#X connect 4 0 5 0;
+#X connect 5 0 6 0;
+#X connect 5 0 8 0;
+#X connect 7 0 4 0;
+#X connect 8 0 22 0;
+#X connect 9 0 23 0;
+#X connect 10 0 11 0;
+#X connect 11 0 12 0;
+#X connect 12 0 14 1;
+#X connect 12 0 13 1;
+#X connect 13 0 10 0;
+#X connect 14 0 10 0;
+#X connect 15 0 12 0;
+#X connect 16 0 18 0;
+#X connect 16 0 21 0;
+#X connect 17 0 5 1;
+#X connect 18 0 17 0;
+#X connect 19 0 20 0;
+#X connect 20 0 17 0;
+#X connect 21 0 19 0;
+#X connect 22 0 6 0;
+#X connect 23 0 16 0;
+#X restore 40 30 pd gemmouse;
+#N canvas 1032 308 494 358 gemmouse 0;
+#X obj 100 60 gemmouse 8 8;
+#X obj 144 98 swap 8;
+#X obj 144 124 -;
+#X obj 144 146 - 4;
+#X obj 100 167 pack 0 0;
+#X obj 100 194 spigot;
+#X obj 100 280 outlet;
+#X obj 99 131 - 4;
+#X obj 120 220 delay 10;
+#X floatatom 210 80 5 0 0 0 - - -, f 5;
+#X obj 290 70 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 320 70 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 350 70 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 240 40 spigot;
+#X obj 340 40 spigot;
+#X obj 430 60 loadbang;
+#X obj 210 140 bng 17 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X floatatom 210 210 5 0 0 0 - - -, f 5;
+#X msg 210 170 1;
+#X obj 240 160 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X msg 240 180 0;
+#X obj 240 140 delay 100;
+#X obj 120 250 pack 10 10;
+#X obj 210 104 sel 1;
+#X connect 0 0 7 0;
+#X connect 0 1 1 0;
+#X connect 0 2 9 0;
+#X connect 1 0 2 0;
+#X connect 1 1 2 1;
+#X connect 2 0 3 0;
+#X connect 3 0 4 1;
+#X connect 4 0 5 0;
+#X connect 5 0 6 0;
+#X connect 5 0 8 0;
+#X connect 7 0 4 0;
+#X connect 8 0 22 0;
+#X connect 9 0 23 0;
+#X connect 10 0 11 0;
+#X connect 11 0 12 0;
+#X connect 12 0 14 1;
+#X connect 12 0 13 1;
+#X connect 13 0 10 0;
+#X connect 14 0 10 0;
+#X connect 15 0 12 0;
+#X connect 16 0 18 0;
+#X connect 16 0 21 0;
+#X connect 17 0 5 1;
+#X connect 18 0 17 0;
+#X connect 19 0 20 0;
+#X connect 20 0 17 0;
+#X connect 21 0 19 0;
+#X connect 22 0 6 0;
+#X connect 23 0 16 0;
+#X restore 200 20 pd gemmouse;
+#N canvas 1032 308 494 358 gemmouse 0;
+#X obj 100 60 gemmouse 8 8;
+#X obj 144 98 swap 8;
+#X obj 144 124 -;
+#X obj 144 146 - 4;
+#X obj 100 167 pack 0 0;
+#X obj 100 194 spigot;
+#X obj 100 280 outlet;
+#X obj 99 131 - 4;
+#X obj 120 220 delay 10;
+#X floatatom 210 80 5 0 0 0 - - -, f 5;
+#X obj 290 70 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 320 70 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 350 70 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 240 40 spigot;
+#X obj 340 40 spigot;
+#X obj 430 60 loadbang;
+#X obj 210 140 bng 17 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X floatatom 210 210 5 0 0 0 - - -, f 5;
+#X msg 210 170 1;
+#X obj 240 160 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X msg 240 180 0;
+#X obj 240 140 delay 100;
+#X obj 120 250 pack 10 10;
+#X obj 210 104 sel 1;
+#X connect 0 0 7 0;
+#X connect 0 1 1 0;
+#X connect 0 2 9 0;
+#X connect 1 0 2 0;
+#X connect 1 1 2 1;
+#X connect 2 0 3 0;
+#X connect 3 0 4 1;
+#X connect 4 0 5 0;
+#X connect 5 0 6 0;
+#X connect 5 0 8 0;
+#X connect 7 0 4 0;
+#X connect 8 0 22 0;
+#X connect 9 0 23 0;
+#X connect 10 0 11 0;
+#X connect 11 0 12 0;
+#X connect 12 0 14 1;
+#X connect 12 0 13 1;
+#X connect 13 0 10 0;
+#X connect 14 0 10 0;
+#X connect 15 0 12 0;
+#X connect 16 0 18 0;
+#X connect 16 0 21 0;
+#X connect 17 0 5 1;
+#X connect 18 0 17 0;
+#X connect 19 0 20 0;
+#X connect 20 0 17 0;
+#X connect 21 0 19 0;
+#X connect 22 0 6 0;
+#X connect 23 0 16 0;
+#X restore 350 20 pd gemmouse;
+#N canvas 1032 308 494 358 gemmouse 0;
+#X obj 100 60 gemmouse 8 8;
+#X obj 144 98 swap 8;
+#X obj 144 124 -;
+#X obj 144 146 - 4;
+#X obj 100 167 pack 0 0;
+#X obj 100 194 spigot;
+#X obj 100 280 outlet;
+#X obj 99 131 - 4;
+#X obj 120 220 delay 10;
+#X floatatom 210 80 5 0 0 0 - - -, f 5;
+#X obj 290 70 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 320 70 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 350 70 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 240 40 spigot;
+#X obj 340 40 spigot;
+#X obj 430 60 loadbang;
+#X obj 210 140 bng 17 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X floatatom 210 210 5 0 0 0 - - -, f 5;
+#X msg 210 170 1;
+#X obj 240 160 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X msg 240 180 0;
+#X obj 240 140 delay 100;
+#X obj 120 250 pack 10 10;
+#X obj 210 104 sel 1;
+#X connect 0 0 7 0;
+#X connect 0 1 1 0;
+#X connect 0 2 9 0;
+#X connect 1 0 2 0;
+#X connect 1 1 2 1;
+#X connect 2 0 3 0;
+#X connect 3 0 4 1;
+#X connect 4 0 5 0;
+#X connect 5 0 6 0;
+#X connect 5 0 8 0;
+#X connect 7 0 4 0;
+#X connect 8 0 22 0;
+#X connect 9 0 23 0;
+#X connect 10 0 11 0;
+#X connect 11 0 12 0;
+#X connect 12 0 14 1;
+#X connect 12 0 13 1;
+#X connect 13 0 10 0;
+#X connect 14 0 10 0;
+#X connect 15 0 12 0;
+#X connect 16 0 18 0;
+#X connect 16 0 21 0;
+#X connect 17 0 5 1;
+#X connect 18 0 17 0;
+#X connect 19 0 20 0;
+#X connect 20 0 17 0;
+#X connect 21 0 19 0;
+#X connect 22 0 6 0;
+#X connect 23 0 16 0;
+#X restore 500 20 pd gemmouse;
+#N canvas 1032 308 494 358 gemmouse 0;
+#X obj 100 60 gemmouse 8 8;
+#X obj 144 98 swap 8;
+#X obj 144 124 -;
+#X obj 144 146 - 4;
+#X obj 100 167 pack 0 0;
+#X obj 100 194 spigot;
+#X obj 100 280 outlet;
+#X obj 99 131 - 4;
+#X obj 120 220 delay 10;
+#X floatatom 210 80 5 0 0 0 - - -, f 5;
+#X obj 290 70 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 320 70 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 350 70 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 240 40 spigot;
+#X obj 340 40 spigot;
+#X obj 430 60 loadbang;
+#X obj 210 140 bng 17 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X floatatom 210 210 5 0 0 0 - - -, f 5;
+#X msg 210 170 1;
+#X obj 240 160 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X msg 240 180 0;
+#X obj 240 140 delay 100;
+#X obj 120 250 pack 10 10;
+#X obj 210 104 sel 1;
+#X connect 0 0 7 0;
+#X connect 0 1 1 0;
+#X connect 0 2 9 0;
+#X connect 1 0 2 0;
+#X connect 1 1 2 1;
+#X connect 2 0 3 0;
+#X connect 3 0 4 1;
+#X connect 4 0 5 0;
+#X connect 5 0 6 0;
+#X connect 5 0 8 0;
+#X connect 7 0 4 0;
+#X connect 8 0 22 0;
+#X connect 9 0 23 0;
+#X connect 10 0 11 0;
+#X connect 11 0 12 0;
+#X connect 12 0 14 1;
+#X connect 12 0 13 1;
+#X connect 13 0 10 0;
+#X connect 14 0 10 0;
+#X connect 15 0 12 0;
+#X connect 16 0 18 0;
+#X connect 16 0 21 0;
+#X connect 17 0 5 1;
+#X connect 18 0 17 0;
+#X connect 19 0 20 0;
+#X connect 20 0 17 0;
+#X connect 21 0 19 0;
+#X connect 22 0 6 0;
+#X connect 23 0 16 0;
+#X restore 290 210 pd gemmouse;
+#N canvas 1032 308 494 358 gemmouse 0;
+#X obj 100 60 gemmouse 8 8;
+#X obj 144 98 swap 8;
+#X obj 144 124 -;
+#X obj 144 146 - 4;
+#X obj 100 167 pack 0 0;
+#X obj 100 194 spigot;
+#X obj 100 280 outlet;
+#X obj 99 131 - 4;
+#X obj 120 220 delay 10;
+#X floatatom 210 80 5 0 0 0 - - -, f 5;
+#X obj 290 70 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 320 70 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 350 70 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 240 40 spigot;
+#X obj 340 40 spigot;
+#X obj 430 60 loadbang;
+#X obj 210 140 bng 17 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X floatatom 210 210 5 0 0 0 - - -, f 5;
+#X msg 210 170 1;
+#X obj 240 160 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X msg 240 180 0;
+#X obj 240 140 delay 100;
+#X obj 120 250 pack 10 10;
+#X obj 210 104 sel 1;
+#X connect 0 0 7 0;
+#X connect 0 1 1 0;
+#X connect 0 2 9 0;
+#X connect 1 0 2 0;
+#X connect 1 1 2 1;
+#X connect 2 0 3 0;
+#X connect 3 0 4 1;
+#X connect 4 0 5 0;
+#X connect 5 0 6 0;
+#X connect 5 0 8 0;
+#X connect 7 0 4 0;
+#X connect 8 0 22 0;
+#X connect 9 0 23 0;
+#X connect 10 0 11 0;
+#X connect 11 0 12 0;
+#X connect 12 0 14 1;
+#X connect 12 0 13 1;
+#X connect 13 0 10 0;
+#X connect 14 0 10 0;
+#X connect 15 0 12 0;
+#X connect 16 0 18 0;
+#X connect 16 0 21 0;
+#X connect 17 0 5 1;
+#X connect 18 0 17 0;
+#X connect 19 0 20 0;
+#X connect 20 0 17 0;
+#X connect 21 0 19 0;
+#X connect 22 0 6 0;
+#X connect 23 0 16 0;
+#X restore 110 210 pd gemmouse;
+#X connect 0 0 10 2;
+#X connect 1 0 2 0;
+#X connect 2 0 0 0;
+#X connect 3 0 9 2;
+#X connect 4 0 17 0;
+#X connect 5 0 11 2;
+#X connect 6 0 18 0;
+#X connect 7 0 12 2;
+#X connect 8 0 19 0;
+#X connect 13 0 10 1;
+#X connect 14 0 9 1;
+#X connect 15 0 11 1;
+#X connect 16 0 12 1;
+#X connect 17 0 3 0;
+#X connect 18 0 5 0;
+#X connect 19 0 7 0;
+#X connect 20 0 29 2;
+#X connect 21 0 22 0;
+#X connect 22 0 20 0;
+#X connect 23 0 28 2;
+#X connect 24 0 25 0;
+#X connect 25 0 23 0;
+#X connect 26 0 29 1;
+#X connect 27 0 28 1;
+#X connect 30 0 33 0;
+#X connect 31 0 33 2;
+#X connect 32 0 35 0;
+#X connect 34 0 33 1;
+#X connect 35 0 31 0;
+#X connect 36 0 10 0;
+#X connect 37 0 9 0;
+#X connect 38 0 11 0;
+#X connect 39 0 12 0;
+#X connect 40 0 28 0;
+#X connect 41 0 29 0;
+#X restore 32 337 pd Spawner;
+#N canvas 444 72 1038 518 Game_startScreen 0;
+#X obj 370 10 loadbang;
+#X obj 270 10 send reset;
+#X obj 13 141 gemhead;
+#X obj 53 221 hsl 87 15 -6 6 0 0 empty empty empty -2 -8 0 10 #fcfcfc
+#000000 #000000 4300 1;
+#X obj 53 241 hsl 88 15 -6 6 0 0 empty empty empty -2 -8 0 10 #fcfcfc
+#000000 #000000 5800 1;
+#X msg 33 171 set \$1;
+#X msg 103 171 set \$1;
+#X obj 13 271 translateXYZ 0 0 0;
+#X obj 70 120 loadbang, f 9;
+#X obj 160 135 gemhead;
+#X obj 210 220 hsl 87 15 -6 6 0 0 empty empty empty -2 -8 0 10 #fcfcfc
+#000000 #000000 4300 1;
+#X obj 210 240 hsl 88 15 -6 6 0 0 empty empty empty -2 -8 0 10 #fcfcfc
+#000000 #000000 5437 1;
+#X msg 190 170 set \$1;
+#X msg 260 170 set \$1;
+#X obj 170 270 translateXYZ 0 0 0;
+#X obj 310 135 gemhead;
+#X obj 360 220 hsl 87 15 -6 6 0 0 empty empty empty -2 -8 0 10 #fcfcfc
+#000000 #000000 4300 1;
+#X obj 360 240 hsl 88 15 -6 6 0 0 empty empty empty -2 -8 0 10 #fcfcfc
+#000000 #000000 5075 1;
+#X msg 340 170 set \$1;
+#X msg 410 170 set \$1;
+#X obj 230 100 loadbang, f 9;
+#X obj 380 110 loadbang, f 9;
+#X msg 13 111 set 58;
+#X msg 160 110 set 58;
+#X msg 310 110 set 58;
+#X obj 13 311 colorRGB 0 0 1;
+#X obj 160 310 colorRGB 0 0 1;
+#X floatatom 30 425 5 0 0 0 - - -, f 5;
+#X obj 30 380 loadbang;
+#X msg 30 400 20;
+#X floatatom 170 435 5 0 0 0 - - -, f 5;
+#X obj 170 390 loadbang;
+#X msg 170 410 20;
+#X floatatom 317 424 5 0 0 0 - - -, f 5;
+#X obj 317 379 loadbang;
+#X msg 317 399 20;
+#X obj 320 270 translateXYZ 0 0 0;
+#X obj 317 319 colorRGB 0 0 1;
+#X obj 470 135 gemhead;
+#X obj 520 220 hsl 87 15 -6 6 0 0 empty empty empty -2 -8 0 10 #fcfcfc
+#000000 #000000 4300 1;
+#X obj 520 240 hsl 88 15 -6 6 0 0 empty empty empty -2 -8 0 10 #fcfcfc
+#000000 #000000 4712 1;
+#X msg 500 170 set \$1;
+#X msg 570 170 set \$1;
+#X msg 500 190 0;
+#X obj 540 110 loadbang, f 9;
+#X msg 470 110 set 58;
+#X floatatom 460 455 5 0 0 0 - - -, f 5;
+#X obj 460 410 loadbang;
+#X msg 460 430 20;
+#X obj 480 270 translateXYZ 0 0 0;
+#X obj 477 319 colorRGB 0 0 1;
+#X obj 620 135 gemhead;
+#X obj 670 220 hsl 87 15 -6 6 0 0 empty empty empty -2 -8 0 10 #fcfcfc
+#000000 #000000 4300 1;
+#X obj 670 240 hsl 88 15 -6 6 0 0 empty empty empty -2 -8 0 10 #fcfcfc
+#000000 #000000 4350 1;
+#X msg 650 170 set \$1;
+#X msg 720 170 set \$1;
+#X obj 690 110 loadbang, f 9;
+#X msg 620 110 set 58;
+#X floatatom 640 495 5 0 0 0 - - -, f 5;
+#X obj 640 450 loadbang;
+#X msg 640 470 20;
+#X obj 630 270 translateXYZ 0 0 0;
+#X msg 33 191 0;
+#X msg 190 190 0;
+#X msg 340 190 0;
+#X msg 650 190 0;
+#X msg 103 191 2;
+#X msg 260 190 1.5;
+#X msg 410 190 1;
+#X msg 570 190 0.5;
+#X msg 720 190 0;
+#X obj 450 10 receive start;
+#X msg 450 35 set 40;
+#X obj -30 330 text2d Suddenly a peaceful night turns chaotic;
+#X obj 60 360 text2d the cosmos has his own plan;
+#X obj 240 340 text2d Some strange power is attracting great peril
+;
+#X obj 400 370 text2d on your beloved town;
+#X obj 630 320 colorRGB 0 1 0;
+#X obj 450 390 text2d The question being how many can you protect against??
+;
+#X obj 840 50 key 1;
+#X obj 840 75 sel 101 113;
+#X obj 840 150 send start;
+#X obj 850 120 send reset;
+#X connect 0 0 1 0;
+#X connect 0 0 22 0;
+#X connect 0 0 23 0;
+#X connect 0 0 24 0;
+#X connect 0 0 45 0;
+#X connect 0 0 57 0;
+#X connect 2 0 7 0;
+#X connect 3 0 5 0;
+#X connect 3 0 7 1;
+#X connect 4 0 6 0;
+#X connect 4 0 7 2;
+#X connect 5 0 62 0;
+#X connect 6 0 66 0;
+#X connect 7 0 25 0;
+#X connect 8 0 62 0;
+#X connect 8 0 66 0;
+#X connect 9 0 14 0;
+#X connect 10 0 12 0;
+#X connect 10 0 14 1;
+#X connect 11 0 13 0;
+#X connect 11 0 14 2;
+#X connect 12 0 63 0;
+#X connect 13 0 67 0;
+#X connect 14 0 26 0;
+#X connect 15 0 36 0;
+#X connect 16 0 18 0;
+#X connect 16 0 36 1;
+#X connect 17 0 19 0;
+#X connect 17 0 36 2;
+#X connect 18 0 64 0;
+#X connect 19 0 68 0;
+#X connect 20 0 63 0;
+#X connect 20 0 67 0;
+#X connect 21 0 64 0;
+#X connect 21 0 68 0;
+#X connect 22 0 2 0;
+#X connect 23 0 9 0;
+#X connect 24 0 15 0;
+#X connect 25 0 73 0;
+#X connect 26 0 74 0;
+#X connect 27 0 73 1;
+#X connect 28 0 29 0;
+#X connect 29 0 27 0;
+#X connect 30 0 74 1;
+#X connect 31 0 32 0;
+#X connect 32 0 30 0;
+#X connect 33 0 75 1;
+#X connect 34 0 35 0;
+#X connect 35 0 33 0;
+#X connect 36 0 37 0;
+#X connect 37 0 75 0;
+#X connect 38 0 49 0;
+#X connect 39 0 41 0;
+#X connect 39 0 49 1;
+#X connect 40 0 42 0;
+#X connect 40 0 49 2;
+#X connect 41 0 43 0;
+#X connect 42 0 69 0;
+#X connect 43 0 39 0;
+#X connect 44 0 43 0;
+#X connect 44 0 69 0;
+#X connect 45 0 38 0;
+#X connect 46 0 76 1;
+#X connect 47 0 48 0;
+#X connect 48 0 46 0;
+#X connect 49 0 50 0;
+#X connect 50 0 76 0;
+#X connect 51 0 61 0;
+#X connect 52 0 54 0;
+#X connect 52 0 61 1;
+#X connect 53 0 55 0;
+#X connect 53 0 61 2;
+#X connect 54 0 65 0;
+#X connect 55 0 70 0;
+#X connect 56 0 65 0;
+#X connect 56 0 70 0;
+#X connect 57 0 51 0;
+#X connect 58 0 78 1;
+#X connect 59 0 60 0;
+#X connect 60 0 58 0;
+#X connect 61 0 77 0;
+#X connect 62 0 3 0;
+#X connect 63 0 10 0;
+#X connect 64 0 16 0;
+#X connect 65 0 52 0;
+#X connect 66 0 4 0;
+#X connect 67 0 11 0;
+#X connect 68 0 17 0;
+#X connect 69 0 40 0;
+#X connect 70 0 53 0;
+#X connect 71 0 72 0;
+#X connect 72 0 2 0;
+#X connect 72 0 9 0;
+#X connect 72 0 15 0;
+#X connect 72 0 38 0;
+#X connect 72 0 51 0;
+#X connect 77 0 78 0;
+#X connect 79 0 80 0;
+#X connect 80 0 81 0;
+#X connect 80 1 82 0;
+#X restore 32 397 pd Game_startScreen;
+#N canvas 852 16 590 562 Music_Controller 0;
+#X obj 59 338 readsf~;
+#X obj 59 373 *~ 0.5;
+#X obj 59 408 dac~;
+#X msg 59 308 open Sound/Ambience.wav \, 1;
+#X obj 119 238 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X msg 279 268 stop;
+#X msg 179 268 stop;
+#X obj 239 238 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 239 338 readsf~;
+#X obj 239 373 *~ 0.5;
+#X obj 239 408 dac~;
+#X msg 239 308 open Sound/GameLoop.wav \, 1;
+#X obj 409 338 readsf~;
+#X obj 409 373 *~ 0.5;
+#X obj 409 408 dac~;
+#X msg 409 308 open Sound/Destroy.wav \, 1;
+#X obj 409 278 receive destroyed;
+#X obj 340 220 receive close;
+#X obj 120 10 receive open;
+#X obj 250 70 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 280 70 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 310 70 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 200 40 spigot;
+#X obj 300 40 spigot;
+#X obj 200 10 receive reset;
+#X obj 370 60 loadbang;
+#X obj 320 10 receive start;
+#X obj 210 100 sel 1 0;
+#X obj 330 170 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 360 170 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 390 170 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 280 140 spigot;
+#X obj 380 140 spigot;
+#X obj 450 160 loadbang;
+#X obj 280 110 receive close;
+#X obj 400 110 receive open;
+#X obj 180 160 spigot;
+#X obj 230 180 spigot;
+#X obj 310 340 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X connect 0 0 1 0;
+#X connect 1 0 2 0;
+#X connect 1 0 2 1;
+#X connect 3 0 0 0;
+#X connect 4 0 3 0;
+#X connect 5 0 0 0;
+#X connect 6 0 8 0;
+#X connect 7 0 11 0;
+#X connect 8 0 9 0;
+#X connect 8 1 38 0;
+#X connect 9 0 10 0;
+#X connect 9 0 10 1;
+#X connect 11 0 8 0;
+#X connect 12 0 13 0;
+#X connect 13 0 14 0;
+#X connect 13 0 14 1;
+#X connect 15 0 12 0;
+#X connect 16 0 15 0;
+#X connect 17 0 6 0;
+#X connect 17 0 5 0;
+#X connect 18 0 4 0;
+#X connect 18 0 6 0;
+#X connect 19 0 20 0;
+#X connect 19 0 22 1;
+#X connect 20 0 21 0;
+#X connect 21 0 23 1;
+#X connect 21 0 27 0;
+#X connect 22 0 19 0;
+#X connect 23 0 19 0;
+#X connect 24 0 22 0;
+#X connect 25 0 21 0;
+#X connect 26 0 23 0;
+#X connect 27 0 36 0;
+#X connect 27 1 37 0;
+#X connect 28 0 29 0;
+#X connect 28 0 31 1;
+#X connect 28 0 36 1;
+#X connect 28 0 37 1;
+#X connect 29 0 30 0;
+#X connect 30 0 32 1;
+#X connect 31 0 28 0;
+#X connect 32 0 28 0;
+#X connect 33 0 30 0;
+#X connect 34 0 31 0;
+#X connect 35 0 32 0;
+#X connect 36 0 6 0;
+#X connect 36 0 4 0;
+#X connect 37 0 5 0;
+#X connect 37 0 7 0;
+#X connect 38 0 37 0;
+#X restore 32 417 pd Music_Controller;
+#N canvas 564 100 962 550 Game_overScreen 0;
+#X msg 20 170 set 57;
+#X obj 20 195 gemhead;
+#X obj 20 225 colorRGB 1 0 0;
+#X obj 20 250 text2d GAME OVER;
+#X floatatom 120 225 5 0 0 0 - - -, f 5;
+#X msg 120 200 69;
+#X obj 120 180 loadbang;
+#X obj 200 170 gemhead;
+#X obj 320 370 f;
+#X obj 240 250 hsl 87 15 -6 6 0 0 empty empty empty -2 -8 0 10 #fcfcfc
+#000000 #000000 5000 1;
+#X obj 240 270 hsl 88 15 -6 6 0 0 empty empty empty -2 -8 0 10 #fcfcfc
+#000000 #000000 3900 1;
+#X msg 220 200 set \$1;
+#X msg 290 200 set \$1;
+#X msg 220 220 0.976744;
+#X msg 290 220 -0.62069;
+#X obj 200 300 translateXYZ 0 0 0;
+#X obj 350 200 loadbang, f 9;
+#X msg 430 140 set 57;
+#X obj 430 165 gemhead;
+#X obj 430 420 colorRGB 1 0 0;
+#X obj 480 290 hsl 87 15 -6 6 0 0 empty empty empty -2 -8 0 10 #fcfcfc
+#000000 #000000 3700 1;
+#X obj 480 310 hsl 88 15 -6 6 0 0 empty empty empty -2 -8 0 10 #fcfcfc
+#000000 #000000 3900 1;
+#X msg 460 240 set \$1;
+#X msg 530 240 set \$1;
+#X msg 460 260 -0.837209;
+#X msg 530 260 -0.62069;
+#X obj 440 340 translateXYZ 0 0 0;
+#X obj 320 330 receive score-no;
+#X obj 420 455 text2d You protected the city from;
+#X obj 200 340 colorRGB 1 1 1;
+#X msg 650 130 set 57;
+#X obj 650 155 gemhead;
+#X obj 650 420 colorRGB 1 0 0;
+#X obj 700 290 hsl 87 15 -6 6 0 0 empty empty empty -2 -8 0 10 #fcfcfc
+#000000 #000000 5600 1;
+#X obj 700 310 hsl 88 15 -6 6 0 0 empty empty empty -2 -8 0 10 #fcfcfc
+#000000 #000000 3900 1;
+#X msg 680 240 set \$1;
+#X msg 750 240 set \$1;
+#X msg 680 260 1.81395;
+#X msg 750 260 -0.62069;
+#X obj 660 340 translateXYZ 0 0 0;
+#X obj 640 460 text2d asteroids;
+#X obj 200 440 text2d 0;
+#X msg 200 140 set 57;
+#X obj 510 200 loadbang, f 9;
+#X obj 720 200 loadbang, f 9;
+#X obj 410 70 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 440 70 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 470 70 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 320 50 spigot;
+#X obj 460 40 spigot;
+#X obj 320 20 receive reset;
+#X obj 530 60 loadbang;
+#X obj 480 10 receive start;
+#X obj 620 30 loadbang;
+#X msg 610 80 set 45;
+#X obj 620 55 delay 100;
+#X floatatom 250 415 5 0 0 0 - - -, f 5;
+#X obj 250 370 loadbang;
+#X floatatom 580 425 5 0 0 0 - - -, f 5;
+#X obj 580 380 loadbang;
+#X floatatom 750 415 5 0 0 0 - - -, f 5;
+#X obj 750 370 loadbang;
+#X msg 750 390 20;
+#X msg 580 400 20;
+#X msg 250 390 20;
+#X connect 0 0 1 0;
+#X connect 1 0 2 0;
+#X connect 2 0 3 0;
+#X connect 4 0 3 1;
+#X connect 5 0 4 0;
+#X connect 6 0 5 0;
+#X connect 7 0 15 0;
+#X connect 8 0 41 0;
+#X connect 9 0 11 0;
+#X connect 9 0 15 1;
+#X connect 10 0 12 0;
+#X connect 10 0 15 2;
+#X connect 11 0 13 0;
+#X connect 12 0 14 0;
+#X connect 13 0 9 0;
+#X connect 14 0 10 0;
+#X connect 15 0 29 0;
+#X connect 16 0 13 0;
+#X connect 16 0 14 0;
+#X connect 17 0 18 0;
+#X connect 18 0 26 0;
+#X connect 19 0 28 0;
+#X connect 20 0 22 0;
+#X connect 20 0 26 1;
+#X connect 21 0 23 0;
+#X connect 21 0 26 2;
+#X connect 22 0 24 0;
+#X connect 23 0 25 0;
+#X connect 24 0 20 0;
+#X connect 25 0 21 0;
+#X connect 26 0 19 0;
+#X connect 27 0 8 0;
+#X connect 29 0 41 0;
+#X connect 30 0 31 0;
+#X connect 31 0 39 0;
+#X connect 32 0 40 0;
+#X connect 33 0 35 0;
+#X connect 33 0 39 1;
+#X connect 34 0 36 0;
+#X connect 34 0 39 2;
+#X connect 35 0 37 0;
+#X connect 36 0 38 0;
+#X connect 37 0 33 0;
+#X connect 38 0 34 0;
+#X connect 39 0 32 0;
+#X connect 42 0 7 0;
+#X connect 43 0 24 0;
+#X connect 43 0 25 0;
+#X connect 44 0 37 0;
+#X connect 44 0 38 0;
+#X connect 45 0 46 0;
+#X connect 45 0 48 1;
+#X connect 46 0 47 0;
+#X connect 47 0 49 1;
+#X connect 47 0 1 0;
+#X connect 47 0 7 0;
+#X connect 47 0 18 0;
+#X connect 47 0 31 0;
+#X connect 48 0 45 0;
+#X connect 48 0 0 0;
+#X connect 48 0 42 0;
+#X connect 48 0 17 0;
+#X connect 48 0 30 0;
+#X connect 49 0 45 0;
+#X connect 50 0 48 0;
+#X connect 51 0 47 0;
+#X connect 52 0 49 0;
+#X connect 53 0 55 0;
+#X connect 54 0 1 0;
+#X connect 54 0 7 0;
+#X connect 54 0 18 0;
+#X connect 54 0 31 0;
+#X connect 55 0 54 0;
+#X connect 56 0 41 1;
+#X connect 57 0 64 0;
+#X connect 58 0 28 1;
+#X connect 59 0 63 0;
+#X connect 60 0 40 1;
+#X connect 61 0 62 0;
+#X connect 62 0 60 0;
+#X connect 63 0 58 0;
+#X connect 64 0 56 0;
+#X restore 32 377 pd Game_overScreen;
+#N canvas 536 225 450 303 gem 0;
+#X obj 30 150 gemwin;
+#X msg 70 120 destroy;
+#X msg 30 90 dimen 750 750 \, create \, 1;
+#X obj 30 60 receive open;
+#X obj 130 60 receive close;
+#X obj 130 120 send reset;
+#X obj 100 170 receive start;
+#X msg 60 210 \; pd-Comet_Blast.pd vis 1;
+#X connect 1 0 0 0;
+#X connect 2 0 0 0;
+#X connect 3 0 2 0;
+#X connect 3 0 7 0;
+#X connect 4 0 1 0;
+#X connect 4 0 5 0;
+#X connect 6 0 7 0;
+#X restore 32 297 pd gem;
+#X obj 480 210 cnv 15 174 118 empty empty empty 20 12 0 14 #fc0400
+#404040 0;
+#X obj 490 220 cnv 15 156 99 empty empty empty 20 12 0 14 #fcfcfc #404040
+0;
+#X obj 500 280 send start;
+#X obj 570 280 send reset;
+#X obj 500 240 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 570 240 bng 14 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 500 80 send open;
+#X obj 500 40 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 570 40 bng 14 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 570 80 send close;
+#X obj 10 150 cnv 15 430 49 empty empty empty 20 12 0 14 #e0e0e0 #404040
+0;
+#X obj 10 100 cnv 15 430 40 empty empty empty 20 12 0 14 #bcbcbc #404040
+0;
+#X obj 12 -13 cnv 15 430 98 empty empty empty 20 12 0 14 #e0e0e0 #404040
+0;
+#X text 20 160 CONTROLS;
+#X text 18 103 OBJECTIVE;
+#X text 20 10 The night has fallen and the citizens wild asleep;
+#X text 20 -10 DESCRIPTION;
+#X text 20 120 Destory as many as comets as possible.;
+#X text 70 180 Mouse Click;
+#X obj 10 220 cnv 15 430 54 empty empty empty 20 12 0 14 #bcbcbc #404040
+0;
+#X text 20 230 NOTE;
+#X text 50 250 Don't forget to enjoy!;
+#X text 510 0 Controlling GEM;
+#X text 510 190 Controlling GAME;
+#X text 20 30 But how long before them and their sweet dreams turn
+into a living nightmare;
+#X text 20 60 Only you can answer that!;
+#X text 490 150 Don't go FullScreen mode;
+#X obj 512 361 cnv 15 119 104 empty empty empty 20 12 0 14 #fc0400
+#404040 0;
+#X obj 522 371 cnv 15 99 82 empty empty empty 20 12 0 14 #fcfcfc #404040
+0;
+#X obj 540 400 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#N canvas 536 225 450 303 Music 0;
+#X obj 100 50 inlet;
+#X obj 100 75 sel 0 1;
+#X msg 100 110 \; pd dsp 0;
+#X msg 160 110 \; pd dsp 1;
+#X obj 180 80 loadbang;
+#X connect 0 0 1 0;
+#X connect 1 0 2 0;
+#X connect 1 1 3 0;
+#X connect 4 0 3 0;
+#X restore 540 420 pd Music;
+#X text 520 340 Controlling MUSIC;
+#X obj 540 380 loadbang;
+#X text 130 -40 COMET BLAST;
+#N canvas 846 168 685 531 License 0;
+#X text 50 80 Permission is hereby granted \, free of charge \, to
+any person obtaining a copy of this software and associated documentation
+files (the "Software") \, to deal in the Software without restriction
+\, including without limitation the rights to use \, copy \, modify
+\, merge \, publish \, distribute \, sublicense \, and/or sell copies
+of the Software \, and to permit persons to whom the Software is furnished
+to do so \, subject to the following conditions:, f 86;
+#X text 60 180 1.)Acknowledgment of Third-Party Assets: Parts of this
+software include art and sound assets that are either created by me
+\, the developer \, or sourced from publicly available art and Pixabay.
+Users of this software acknowledge that some assets are not original
+and have been obtained from public domain sources or Pixabay., f 86
+;
+#X text 60 250 2.)Non-Exclusive License for Public Domain and Pixabay
+Assets: Any art or sound assets not created by me but used under public
+domain or Pixabay terms are provided "as is \, " without any warranty
+of any kind \, express or implied \, including but not limited to the
+warranties of merchantability \, fitness for a particular purpose \,
+and non-infringement. Users are responsible for ensuring compliance
+with the terms under which these assets are provided., f 86;
+#X text 60 340 3.)No Warranty: THE SOFTWARE IS PROVIDED "AS IS \, "
+WITHOUT WARRANTY OF ANY KIND \, EXPRESS OR IMPLIED \, INCLUDING BUT
+NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY \, FITNESS FOR A PARTICULAR
+PURPOSE \, AND NON-INFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+HOLDERS BE LIABLE FOR ANY CLAIM \, DAMAGES \, OR OTHER LIABILITY \,
+WHETHER IN AN ACTION OF CONTRACT \, TORT \, OR OTHERWISE \, ARISING
+FROM \, OUT OF \, OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+OTHER DEALINGS IN THE SOFTWARE., f 86;
+#X text 50 40 Copyright (c) [2024] [Sushant Sudan], f 86;
+#X text 50 440 End of License, f 86;
+#X restore 120 310 pd License;
+#X connect 13 0 11 0;
+#X connect 14 0 12 0;
+#X connect 16 0 15 0;
+#X connect 17 0 18 0;
+#X connect 38 0 39 0;
+#X connect 41 0 38 0;
diff --git a/pd/doc/games/Comet Blast/Sound/Ambience.wav b/pd/doc/games/Comet Blast/Sound/Ambience.wav
new file mode 100644
index 0000000000000000000000000000000000000000..c363ccbfd6c77cef66d7bdebefec6e4b690924f6
Binary files /dev/null and b/pd/doc/games/Comet Blast/Sound/Ambience.wav differ
diff --git a/pd/doc/games/Comet Blast/Sound/Destroy.wav b/pd/doc/games/Comet Blast/Sound/Destroy.wav
new file mode 100644
index 0000000000000000000000000000000000000000..7b6df16919279c2acb2c02ab014f4896f256fa3a
Binary files /dev/null and b/pd/doc/games/Comet Blast/Sound/Destroy.wav differ
diff --git a/pd/doc/games/Comet Blast/Sound/GameLoop.wav b/pd/doc/games/Comet Blast/Sound/GameLoop.wav
new file mode 100644
index 0000000000000000000000000000000000000000..74384d949113451ebdf8da2df33e1b62842ec8f9
Binary files /dev/null and b/pd/doc/games/Comet Blast/Sound/GameLoop.wav differ
diff --git a/pd/doc/games/Musical Land/Art/Grass1.png b/pd/doc/games/Musical Land/Art/Grass1.png
new file mode 100644
index 0000000000000000000000000000000000000000..e22ef1df34bc262c714573586aad08dea993cd2b
Binary files /dev/null and b/pd/doc/games/Musical Land/Art/Grass1.png differ
diff --git a/pd/doc/games/Musical Land/Art/Grass2.png b/pd/doc/games/Musical Land/Art/Grass2.png
new file mode 100644
index 0000000000000000000000000000000000000000..b8aaaa87796c4aa0327770708616fb760f63cf94
Binary files /dev/null and b/pd/doc/games/Musical Land/Art/Grass2.png differ
diff --git a/pd/doc/games/Musical Land/Art/Sand.png b/pd/doc/games/Musical Land/Art/Sand.png
new file mode 100644
index 0000000000000000000000000000000000000000..373ebdf3f070cdb51a142cb70e29ff28d717a58b
Binary files /dev/null and b/pd/doc/games/Musical Land/Art/Sand.png differ
diff --git a/pd/doc/games/Musical Land/Art/Water.png b/pd/doc/games/Musical Land/Art/Water.png
new file mode 100644
index 0000000000000000000000000000000000000000..85f531ad733124b988af343959999fd1be3ddaed
Binary files /dev/null and b/pd/doc/games/Musical Land/Art/Water.png differ
diff --git a/pd/doc/games/Musical Land/Art/Water1.png b/pd/doc/games/Musical Land/Art/Water1.png
new file mode 100644
index 0000000000000000000000000000000000000000..47a57dd37853a5a52c1fd6b57dd1d70e04be7b4b
Binary files /dev/null and b/pd/doc/games/Musical Land/Art/Water1.png differ
diff --git a/pd/doc/games/Musical Land/Art/Water2.png b/pd/doc/games/Musical Land/Art/Water2.png
new file mode 100644
index 0000000000000000000000000000000000000000..ea903b5c8fed2103fba433feb154709c7b8c4d43
Binary files /dev/null and b/pd/doc/games/Musical Land/Art/Water2.png differ
diff --git a/pd/doc/games/Musical Land/Art/Water3.png b/pd/doc/games/Musical Land/Art/Water3.png
new file mode 100644
index 0000000000000000000000000000000000000000..6918e99ad18e161e075968ba53f64b5097614c7d
Binary files /dev/null and b/pd/doc/games/Musical Land/Art/Water3.png differ
diff --git a/pd/doc/games/Musical Land/Art/Water4.png b/pd/doc/games/Musical Land/Art/Water4.png
new file mode 100644
index 0000000000000000000000000000000000000000..5b82372bfcf08ee5699ea459410b49393d2b6824
Binary files /dev/null and b/pd/doc/games/Musical Land/Art/Water4.png differ
diff --git a/pd/doc/games/Musical Land/Art/Water5.png b/pd/doc/games/Musical Land/Art/Water5.png
new file mode 100644
index 0000000000000000000000000000000000000000..0dda78f8d342d6306b93e0b829d2cac5367c399d
Binary files /dev/null and b/pd/doc/games/Musical Land/Art/Water5.png differ
diff --git a/pd/doc/games/Musical Land/Art/Water6.png b/pd/doc/games/Musical Land/Art/Water6.png
new file mode 100644
index 0000000000000000000000000000000000000000..be7ebb31fe87ea90c8ee827d91dcc329ab2d31ce
Binary files /dev/null and b/pd/doc/games/Musical Land/Art/Water6.png differ
diff --git a/pd/doc/games/Musical Land/Music/Bass.wav b/pd/doc/games/Musical Land/Music/Bass.wav
new file mode 100644
index 0000000000000000000000000000000000000000..ed7fb243accf2b8af5068fe7bd56b455beacd403
Binary files /dev/null and b/pd/doc/games/Musical Land/Music/Bass.wav differ
diff --git a/pd/doc/games/Musical Land/Music/Calm.wav b/pd/doc/games/Musical Land/Music/Calm.wav
new file mode 100644
index 0000000000000000000000000000000000000000..e2db15a1c7d4b29581d543e420d8bde421fd4c39
Binary files /dev/null and b/pd/doc/games/Musical Land/Music/Calm.wav differ
diff --git a/pd/doc/games/Musical Land/Music/Kick.wav b/pd/doc/games/Musical Land/Music/Kick.wav
new file mode 100644
index 0000000000000000000000000000000000000000..38dae25edf53c8ca9fe27e83256a9751e88b5466
Binary files /dev/null and b/pd/doc/games/Musical Land/Music/Kick.wav differ
diff --git a/pd/doc/games/Musical Land/Music/Mystery.wav b/pd/doc/games/Musical Land/Music/Mystery.wav
new file mode 100644
index 0000000000000000000000000000000000000000..239372e6891c11306778597e1bfbd700e72ad3cf
Binary files /dev/null and b/pd/doc/games/Musical Land/Music/Mystery.wav differ
diff --git a/pd/doc/games/Musical Land/Music/OPDrum.wav b/pd/doc/games/Musical Land/Music/OPDrum.wav
new file mode 100644
index 0000000000000000000000000000000000000000..ac38aa3ddb991f24444ccc89eed2fc3994c5343b
Binary files /dev/null and b/pd/doc/games/Musical Land/Music/OPDrum.wav differ
diff --git a/pd/doc/games/Musical Land/Music/Point.wav b/pd/doc/games/Musical Land/Music/Point.wav
new file mode 100644
index 0000000000000000000000000000000000000000..feec37368525a12fb5d7a1639dcad7f4d957009f
Binary files /dev/null and b/pd/doc/games/Musical Land/Music/Point.wav differ
diff --git a/pd/doc/games/Musical Land/Music/Point1.wav b/pd/doc/games/Musical Land/Music/Point1.wav
new file mode 100644
index 0000000000000000000000000000000000000000..e1ce95324ca21aa9cd3de25c3fff4472f47c522b
Binary files /dev/null and b/pd/doc/games/Musical Land/Music/Point1.wav differ
diff --git a/pd/doc/games/Musical Land/Music/Snare.wav b/pd/doc/games/Musical Land/Music/Snare.wav
new file mode 100644
index 0000000000000000000000000000000000000000..da6e2b18d4ce790f41e91f68be2a5dc843701399
Binary files /dev/null and b/pd/doc/games/Musical Land/Music/Snare.wav differ
diff --git a/pd/doc/games/Musical Land/Music/Stereo.wav b/pd/doc/games/Musical Land/Music/Stereo.wav
new file mode 100644
index 0000000000000000000000000000000000000000..3d81425e74f8f1ffd46fe320e1fb85432a7b9d53
Binary files /dev/null and b/pd/doc/games/Musical Land/Music/Stereo.wav differ
diff --git a/pd/doc/games/Musical Land/Music/Water.wav b/pd/doc/games/Musical Land/Music/Water.wav
new file mode 100644
index 0000000000000000000000000000000000000000..a4c88436c1127fffbba814ab3e3f6565601d0e08
Binary files /dev/null and b/pd/doc/games/Musical Land/Music/Water.wav differ
diff --git a/pd/doc/games/Musical Land/Musical_Land.pd b/pd/doc/games/Musical Land/Musical_Land.pd
new file mode 100644
index 0000000000000000000000000000000000000000..3d595167b499de6baffd104b8fdcb01b85f9f900
--- /dev/null
+++ b/pd/doc/games/Musical Land/Musical_Land.pd	
@@ -0,0 +1,4743 @@
+#N canvas 744 129 720 552 10;
+#N canvas 48 72 1438 670 beat-sequencer 0;
+#X obj 329 -361 metro;
+#X obj 329 -336 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 329 -293 int 1;
+#X floatatom 329 -261 5 0 0 0 - - -, f 5;
+#X obj 399 -251 + 1;
+#X obj 269 -371 sel 0;
+#X obj 269 -346 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X msg 269 -323 -1;
+#X obj 209 -371 loadbang;
+#X obj 359 -461 loadbang;
+#X obj 329 -212 + 1;
+#X floatatom 330 -190 5 0 0 0 - - -, f 5;
+#X obj 329 -121 sel 1;
+#X obj 329 -96 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 329 -73 s One;
+#X obj 379 -96 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 429 -96 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 479 -96 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 529 -96 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 579 -96 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 629 -96 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 679 -96 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 379 -121 sel 2;
+#X obj 379 -73 s Two;
+#X obj 429 -121 sel 3;
+#X obj 429 -73 s Three;
+#X obj 479 -121 sel 4;
+#X obj 479 -73 s Four;
+#X obj 529 -121 sel 5;
+#X obj 529 -73 s Five;
+#X obj 579 -121 sel 6;
+#X obj 579 -73 s Six;
+#X obj 629 -121 sel 7;
+#X obj 629 -73 s Seven;
+#X obj 679 -121 sel 8;
+#X obj 679 -73 s Eight;
+#X floatatom 359 -411 5 0 0 0 - - -, f 5;
+#X obj 110 62 receive One;
+#X obj 110 92 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 110 120 spigot;
+#X obj 110 145 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 150 92 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 190 92 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 190 120 spigot;
+#X obj 190 145 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 230 92 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 270 92 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 270 120 spigot;
+#X obj 270 145 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 310 92 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 360 92 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 360 120 spigot;
+#X obj 360 145 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 400 92 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 440 92 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 440 120 spigot;
+#X obj 440 145 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 480 92 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 520 92 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 520 120 spigot;
+#X obj 520 145 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 560 92 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 600 92 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 600 120 spigot;
+#X obj 600 145 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 640 92 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 690 92 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 690 122 spigot;
+#X obj 690 145 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 730 92 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 190 62 receive Two;
+#X obj 270 62 receive Three;
+#X obj 360 62 receive Four;
+#X obj 440 62 receive Five;
+#X obj 520 62 receive Six;
+#X obj 600 62 receive Seven;
+#X obj 690 62 receive Eight;
+#X obj 110 -30 send red;
+#X obj 840 200 send blue;
+#X obj 220 -280 send all;
+#X obj 310 -390 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 140 -400 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 170 -400 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 200 -400 tgl 16 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 102 -439 spigot;
+#X obj 202 -439 spigot;
+#X obj 252 -439 loadbang;
+#X obj 80 -470 receive reset;
+#X obj 220 -470 receive start;
+#X obj 450 -360 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 450 -290 readsf~;
+#X obj 450 -255 *~ 0.5;
+#X obj 450 -220 dac~;
+#N canvas 688 376 146 70 Drums 0;
+#X obj 20 60 receive One;
+#X obj 20 100 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 20 128 spigot;
+#X obj 20 153 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 60 100 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 170 100 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 170 128 spigot;
+#X obj 170 150 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 220 100 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 340 100 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 340 128 spigot;
+#X obj 340 150 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 380 100 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 490 100 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 490 128 spigot;
+#X obj 490 153 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 530 100 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 650 100 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 650 128 spigot;
+#X obj 650 160 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 690 100 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 800 100 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 800 128 spigot;
+#X obj 800 160 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 840 100 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 950 100 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 950 128 spigot;
+#X obj 950 160 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 990 100 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 1100 100 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 1100 130 spigot;
+#X obj 1100 160 bng 16 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 1140 100 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 170 70 receive Two;
+#X obj 340 70 receive Three;
+#X obj 490 70 receive Four;
+#X obj 650 70 receive Five;
+#X obj 800 70 receive Six;
+#X obj 950 70 receive Seven;
+#X obj 1100 70 receive Eight;
+#X obj 110 10 r new_pattern;
+#X obj 110 35 random 100;
+#X floatatom 110 60 5 0 0 0 - - -, f 5;
+#X obj 110 80 < 100;
+#X obj 260 10 r new_pattern;
+#X obj 260 35 random 100;
+#X floatatom 260 60 5 0 0 0 - - -, f 5;
+#X obj 430 10 r new_pattern;
+#X obj 430 35 random 100;
+#X floatatom 430 60 5 0 0 0 - - -, f 5;
+#X obj 580 10 r new_pattern;
+#X obj 580 35 random 100;
+#X floatatom 580 60 5 0 0 0 - - -, f 5;
+#X obj 730 10 r new_pattern;
+#X obj 730 35 random 100;
+#X floatatom 730 60 5 0 0 0 - - -, f 5;
+#X obj 730 80 < 100;
+#X obj 880 10 r new_pattern;
+#X obj 880 35 random 100;
+#X floatatom 880 60 5 0 0 0 - - -, f 5;
+#X obj 1040 10 r new_pattern;
+#X obj 1040 35 random 100;
+#X floatatom 1040 60 5 0 0 0 - - -, f 5;
+#X obj 1200 10 r new_pattern;
+#X obj 1200 35 random 100;
+#X floatatom 1200 60 5 0 0 0 - - -, f 5;
+#X obj 260 80 < 25;
+#X obj 430 80 < 70;
+#X obj 580 80 < 25;
+#X obj 880 80 < 25;
+#X obj 1040 80 < 70;
+#X obj 1200 80 < 25;
+#X obj 40 410 receive One;
+#X obj 40 450 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 40 478 spigot;
+#X obj 40 503 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 80 450 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 190 450 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 190 478 spigot;
+#X obj 190 500 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 240 450 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 360 450 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 360 478 spigot;
+#X obj 360 500 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 400 450 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 510 450 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 510 478 spigot;
+#X obj 510 503 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 550 450 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 670 450 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 670 478 spigot;
+#X obj 670 510 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 710 450 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 820 450 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 820 478 spigot;
+#X obj 820 510 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 860 450 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 970 450 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 970 478 spigot;
+#X obj 970 510 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 1010 450 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 1120 450 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 1120 480 spigot;
+#X obj 1120 510 bng 16 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 1160 450 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 190 420 receive Two;
+#X obj 360 420 receive Three;
+#X obj 510 420 receive Four;
+#X obj 670 420 receive Five;
+#X obj 820 420 receive Six;
+#X obj 970 420 receive Seven;
+#X obj 1120 420 receive Eight;
+#X obj 130 360 r new_pattern;
+#X obj 130 385 random 100;
+#X floatatom 130 410 5 0 0 0 - - -, f 5;
+#X obj 280 360 r new_pattern;
+#X obj 280 385 random 100;
+#X floatatom 280 410 5 0 0 0 - - -, f 5;
+#X obj 450 360 r new_pattern;
+#X obj 450 385 random 100;
+#X floatatom 450 410 5 0 0 0 - - -, f 5;
+#X obj 600 360 r new_pattern;
+#X obj 600 385 random 100;
+#X floatatom 600 410 5 0 0 0 - - -, f 5;
+#X obj 750 360 r new_pattern;
+#X obj 750 385 random 100;
+#X floatatom 750 410 5 0 0 0 - - -, f 5;
+#X obj 900 360 r new_pattern;
+#X obj 900 385 random 100;
+#X floatatom 900 410 5 0 0 0 - - -, f 5;
+#X obj 1060 360 r new_pattern;
+#X obj 1060 385 random 100;
+#X floatatom 1060 410 5 0 0 0 - - -, f 5;
+#X obj 1220 360 r new_pattern;
+#X obj 1220 385 random 100;
+#X floatatom 1220 410 5 0 0 0 - - -, f 5;
+#X obj 600 430 < 25;
+#X obj 1220 430 < 25;
+#X obj 30 790 receive One;
+#X obj 30 830 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 30 858 spigot;
+#X obj 30 883 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 70 830 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 180 830 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 180 858 spigot;
+#X obj 180 880 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 230 830 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 350 830 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 350 858 spigot;
+#X obj 350 880 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 390 830 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 500 830 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 500 858 spigot;
+#X obj 500 883 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 540 830 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 660 830 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 660 858 spigot;
+#X obj 660 890 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 700 830 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 810 830 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 810 858 spigot;
+#X obj 810 890 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 850 830 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 960 830 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 960 858 spigot;
+#X obj 960 890 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 1000 830 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 1110 830 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 1110 860 spigot;
+#X obj 1110 890 bng 16 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 1150 830 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 180 800 receive Two;
+#X obj 350 800 receive Three;
+#X obj 500 800 receive Four;
+#X obj 660 800 receive Five;
+#X obj 810 800 receive Six;
+#X obj 960 800 receive Seven;
+#X obj 1110 800 receive Eight;
+#X obj 120 740 r new_pattern;
+#X obj 120 765 random 100;
+#X floatatom 120 790 5 0 0 0 - - -, f 5;
+#X obj 120 810 < 100;
+#X obj 270 740 r new_pattern;
+#X obj 270 765 random 100;
+#X floatatom 270 790 5 0 0 0 - - -, f 5;
+#X obj 440 740 r new_pattern;
+#X obj 440 765 random 100;
+#X floatatom 440 790 5 0 0 0 - - -, f 5;
+#X obj 590 740 r new_pattern;
+#X obj 590 765 random 100;
+#X floatatom 590 790 5 0 0 0 - - -, f 5;
+#X obj 740 740 r new_pattern;
+#X obj 740 765 random 100;
+#X floatatom 740 790 5 0 0 0 - - -, f 5;
+#X obj 740 810 < 100;
+#X obj 890 740 r new_pattern;
+#X obj 890 765 random 100;
+#X floatatom 890 790 5 0 0 0 - - -, f 5;
+#X obj 1050 740 r new_pattern;
+#X obj 1050 765 random 100;
+#X floatatom 1050 790 5 0 0 0 - - -, f 5;
+#X obj 1210 740 r new_pattern;
+#X obj 1210 765 random 100;
+#X floatatom 1210 790 5 0 0 0 - - -, f 5;
+#X obj 440 810 < 70;
+#X obj 890 810 < 25;
+#X obj 1210 810 < 25;
+#X obj 540 920 send Third;
+#X obj 530 190 send First;
+#X obj 550 540 send Second;
+#X obj 130 430 < 1;
+#X obj 280 430 < 1;
+#X obj 451 430 < 100;
+#X obj 1060 430 < 100;
+#X obj 900 430 < 25;
+#X obj 750 430 < 75;
+#X obj 270 810 < 85;
+#X obj 590 810 < 65;
+#X obj 1040 820 < 90;
+#X obj 210 260 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 210 288 spigot;
+#X obj 210 313 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 250 260 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 300 260 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 300 288 spigot;
+#X obj 300 313 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 340 260 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 390 260 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 390 288 spigot;
+#X obj 390 313 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 430 260 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 480 260 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 480 288 spigot;
+#X obj 480 313 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 520 260 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 570 260 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 570 288 spigot;
+#X obj 570 313 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 610 260 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 670 260 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 670 288 spigot;
+#X obj 670 313 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 710 260 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 780 260 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 780 288 spigot;
+#X obj 780 313 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 820 260 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 880 260 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 880 290 spigot;
+#X obj 880 313 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 210 230 receive Ninth;
+#X obj 300 230 receive Tenth;
+#X obj 390 230 receive Eleven;
+#X obj 480 230 receive Twelve;
+#X obj 570 230 receive Thirteen;
+#X obj 670 230 receive Fourteen;
+#X obj 780 230 receive Fifteen;
+#X obj 880 230 receive Sixteen;
+#X obj 910 260 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 280 650 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 280 678 spigot;
+#X obj 280 703 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 320 650 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 370 650 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 370 678 spigot;
+#X obj 370 703 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 410 650 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 460 650 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 460 678 spigot;
+#X obj 460 703 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 500 650 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 550 650 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 550 678 spigot;
+#X obj 550 703 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 590 650 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 640 650 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 640 678 spigot;
+#X obj 640 703 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 680 650 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 740 650 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 740 678 spigot;
+#X obj 740 703 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 780 650 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 850 650 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 850 678 spigot;
+#X obj 850 703 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 890 650 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 950 650 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 950 680 spigot;
+#X obj 950 703 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 280 620 receive Ninth;
+#X obj 370 620 receive Tenth;
+#X obj 460 620 receive Eleven;
+#X obj 550 620 receive Twelve;
+#X obj 640 620 receive Thirteen;
+#X obj 740 620 receive Fourteen;
+#X obj 850 620 receive Fifteen;
+#X obj 950 620 receive Sixteen;
+#X obj 980 650 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 230 990 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 230 1018 spigot;
+#X obj 230 1043 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 270 990 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 320 990 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 320 1018 spigot;
+#X obj 320 1043 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 360 990 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 410 990 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 410 1018 spigot;
+#X obj 410 1043 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 450 990 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 500 990 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 500 1018 spigot;
+#X obj 500 1043 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 540 990 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 590 990 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 590 1018 spigot;
+#X obj 590 1043 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 630 990 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 690 990 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 690 1018 spigot;
+#X obj 690 1043 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 730 990 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 800 990 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 800 1018 spigot;
+#X obj 800 1043 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 840 990 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 900 990 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 900 1020 spigot;
+#X obj 900 1043 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 230 960 receive Ninth;
+#X obj 320 960 receive Tenth;
+#X obj 410 960 receive Eleven;
+#X obj 500 960 receive Twelve;
+#X obj 590 960 receive Thirteen;
+#X obj 690 960 receive Fourteen;
+#X obj 800 960 receive Fifteen;
+#X obj 900 960 receive Sixteen;
+#X obj 930 990 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X connect 0 0 1 0;
+#X connect 1 0 2 0;
+#X connect 2 0 3 0;
+#X connect 3 0 208 0;
+#X connect 4 0 2 1;
+#X connect 5 0 6 0;
+#X connect 6 0 7 0;
+#X connect 7 0 208 0;
+#X connect 8 0 6 1;
+#X connect 9 0 10 0;
+#X connect 10 0 11 0;
+#X connect 11 0 208 0;
+#X connect 12 0 10 1;
+#X connect 13 0 14 0;
+#X connect 14 0 15 0;
+#X connect 15 0 208 0;
+#X connect 16 0 14 1;
+#X connect 17 0 18 0;
+#X connect 18 0 19 0;
+#X connect 19 0 208 0;
+#X connect 20 0 18 1;
+#X connect 21 0 22 0;
+#X connect 22 0 23 0;
+#X connect 23 0 208 0;
+#X connect 24 0 22 1;
+#X connect 25 0 26 0;
+#X connect 26 0 27 0;
+#X connect 27 0 208 0;
+#X connect 28 0 26 1;
+#X connect 29 0 30 0;
+#X connect 30 0 31 0;
+#X connect 31 0 208 0;
+#X connect 32 0 30 1;
+#X connect 32 0 258 0;
+#X connect 33 0 5 0;
+#X connect 34 0 9 0;
+#X connect 35 0 13 0;
+#X connect 36 0 17 0;
+#X connect 37 0 21 0;
+#X connect 38 0 25 0;
+#X connect 39 0 29 0;
+#X connect 40 0 41 0;
+#X connect 41 0 42 0;
+#X connect 42 0 43 0;
+#X connect 43 0 4 0;
+#X connect 43 0 222 0;
+#X connect 44 0 45 0;
+#X connect 45 0 46 0;
+#X connect 46 0 66 0;
+#X connect 47 0 48 0;
+#X connect 48 0 49 0;
+#X connect 49 0 67 0;
+#X connect 50 0 51 0;
+#X connect 51 0 52 0;
+#X connect 52 0 68 0;
+#X connect 53 0 54 0;
+#X connect 54 0 55 0;
+#X connect 55 0 56 0;
+#X connect 56 0 20 0;
+#X connect 56 0 238 0;
+#X connect 57 0 58 0;
+#X connect 58 0 59 0;
+#X connect 59 0 69 0;
+#X connect 60 0 61 0;
+#X connect 61 0 62 0;
+#X connect 62 0 70 0;
+#X connect 63 0 64 0;
+#X connect 64 0 65 0;
+#X connect 65 0 71 0;
+#X connect 66 0 8 0;
+#X connect 66 0 226 0;
+#X connect 67 0 12 0;
+#X connect 67 0 230 0;
+#X connect 68 0 16 0;
+#X connect 68 0 234 0;
+#X connect 69 0 24 0;
+#X connect 69 0 242 0;
+#X connect 70 0 28 0;
+#X connect 70 0 246 0;
+#X connect 71 0 32 0;
+#X connect 72 0 73 0;
+#X connect 73 0 74 0;
+#X connect 74 0 75 0;
+#X connect 75 0 209 0;
+#X connect 76 0 74 1;
+#X connect 77 0 78 0;
+#X connect 78 0 79 0;
+#X connect 79 0 209 0;
+#X connect 80 0 78 1;
+#X connect 81 0 82 0;
+#X connect 82 0 83 0;
+#X connect 83 0 209 0;
+#X connect 84 0 82 1;
+#X connect 85 0 86 0;
+#X connect 86 0 87 0;
+#X connect 87 0 209 0;
+#X connect 88 0 86 1;
+#X connect 89 0 90 0;
+#X connect 90 0 91 0;
+#X connect 91 0 209 0;
+#X connect 92 0 90 1;
+#X connect 93 0 94 0;
+#X connect 94 0 95 0;
+#X connect 95 0 209 0;
+#X connect 96 0 94 1;
+#X connect 97 0 98 0;
+#X connect 98 0 99 0;
+#X connect 99 0 209 0;
+#X connect 100 0 98 1;
+#X connect 101 0 102 0;
+#X connect 102 0 103 0;
+#X connect 103 0 209 0;
+#X connect 104 0 102 1;
+#X connect 105 0 77 0;
+#X connect 106 0 81 0;
+#X connect 107 0 85 0;
+#X connect 108 0 89 0;
+#X connect 109 0 93 0;
+#X connect 110 0 97 0;
+#X connect 111 0 101 0;
+#X connect 112 0 113 0;
+#X connect 113 0 114 0;
+#X connect 114 0 210 0;
+#X connect 115 0 116 0;
+#X connect 116 0 117 0;
+#X connect 117 0 211 0;
+#X connect 118 0 119 0;
+#X connect 119 0 120 0;
+#X connect 120 0 212 0;
+#X connect 121 0 122 0;
+#X connect 122 0 123 0;
+#X connect 123 0 136 0;
+#X connect 124 0 125 0;
+#X connect 125 0 126 0;
+#X connect 126 0 215 0;
+#X connect 127 0 128 0;
+#X connect 128 0 129 0;
+#X connect 129 0 214 0;
+#X connect 130 0 131 0;
+#X connect 131 0 132 0;
+#X connect 132 0 213 0;
+#X connect 133 0 134 0;
+#X connect 134 0 135 0;
+#X connect 135 0 137 0;
+#X connect 136 0 88 0;
+#X connect 136 0 274 0;
+#X connect 137 0 104 0;
+#X connect 137 0 298 0;
+#X connect 138 0 139 0;
+#X connect 139 0 140 0;
+#X connect 140 0 141 0;
+#X connect 141 0 207 0;
+#X connect 142 0 140 1;
+#X connect 143 0 144 0;
+#X connect 144 0 145 0;
+#X connect 145 0 207 0;
+#X connect 146 0 144 1;
+#X connect 147 0 148 0;
+#X connect 148 0 149 0;
+#X connect 149 0 207 0;
+#X connect 150 0 148 1;
+#X connect 151 0 152 0;
+#X connect 152 0 153 0;
+#X connect 153 0 207 0;
+#X connect 154 0 152 1;
+#X connect 155 0 156 0;
+#X connect 156 0 157 0;
+#X connect 157 0 207 0;
+#X connect 158 0 156 1;
+#X connect 159 0 160 0;
+#X connect 160 0 161 0;
+#X connect 161 0 207 0;
+#X connect 162 0 160 1;
+#X connect 163 0 164 0;
+#X connect 164 0 165 0;
+#X connect 165 0 207 0;
+#X connect 166 0 164 1;
+#X connect 167 0 168 0;
+#X connect 168 0 169 0;
+#X connect 169 0 207 0;
+#X connect 170 0 168 1;
+#X connect 171 0 143 0;
+#X connect 172 0 147 0;
+#X connect 173 0 151 0;
+#X connect 174 0 155 0;
+#X connect 175 0 159 0;
+#X connect 176 0 163 0;
+#X connect 177 0 167 0;
+#X connect 178 0 179 0;
+#X connect 179 0 180 0;
+#X connect 180 0 181 0;
+#X connect 181 0 142 0;
+#X connect 181 0 302 0;
+#X connect 182 0 183 0;
+#X connect 183 0 184 0;
+#X connect 184 0 216 0;
+#X connect 185 0 186 0;
+#X connect 186 0 187 0;
+#X connect 187 0 204 0;
+#X connect 188 0 189 0;
+#X connect 189 0 190 0;
+#X connect 190 0 217 0;
+#X connect 191 0 192 0;
+#X connect 192 0 193 0;
+#X connect 193 0 194 0;
+#X connect 194 0 158 0;
+#X connect 194 0 318 0;
+#X connect 195 0 196 0;
+#X connect 196 0 197 0;
+#X connect 197 0 205 0;
+#X connect 198 0 199 0;
+#X connect 199 0 200 0;
+#X connect 200 0 218 0;
+#X connect 201 0 202 0;
+#X connect 202 0 203 0;
+#X connect 203 0 206 0;
+#X connect 204 0 150 0;
+#X connect 204 0 310 0;
+#X connect 205 0 162 0;
+#X connect 205 0 322 0;
+#X connect 206 0 170 0;
+#X connect 206 0 338 0;
+#X connect 210 0 76 0;
+#X connect 210 0 262 0;
+#X connect 211 0 80 0;
+#X connect 211 0 266 0;
+#X connect 212 0 84 0;
+#X connect 212 0 270 0;
+#X connect 213 0 100 0;
+#X connect 213 0 286 0;
+#X connect 214 0 96 0;
+#X connect 214 0 282 0;
+#X connect 215 0 92 0;
+#X connect 215 0 278 0;
+#X connect 216 0 146 0;
+#X connect 216 0 306 0;
+#X connect 217 0 154 0;
+#X connect 217 0 314 0;
+#X connect 218 0 166 0;
+#X connect 218 0 326 0;
+#X connect 219 0 220 0;
+#X connect 220 0 221 0;
+#X connect 221 0 208 0;
+#X connect 222 0 220 1;
+#X connect 223 0 224 0;
+#X connect 224 0 225 0;
+#X connect 225 0 208 0;
+#X connect 226 0 224 1;
+#X connect 227 0 228 0;
+#X connect 228 0 229 0;
+#X connect 229 0 208 0;
+#X connect 230 0 228 1;
+#X connect 231 0 232 0;
+#X connect 232 0 233 0;
+#X connect 233 0 208 0;
+#X connect 234 0 232 1;
+#X connect 235 0 236 0;
+#X connect 236 0 237 0;
+#X connect 237 0 208 0;
+#X connect 238 0 236 1;
+#X connect 239 0 240 0;
+#X connect 240 0 241 0;
+#X connect 241 0 208 0;
+#X connect 242 0 240 1;
+#X connect 243 0 244 0;
+#X connect 244 0 245 0;
+#X connect 245 0 208 0;
+#X connect 246 0 244 1;
+#X connect 247 0 248 0;
+#X connect 248 0 249 0;
+#X connect 249 0 208 0;
+#X connect 250 0 219 0;
+#X connect 251 0 223 0;
+#X connect 252 0 227 0;
+#X connect 253 0 231 0;
+#X connect 254 0 235 0;
+#X connect 255 0 239 0;
+#X connect 256 0 243 0;
+#X connect 257 0 247 0;
+#X connect 258 0 248 1;
+#X connect 259 0 260 0;
+#X connect 260 0 261 0;
+#X connect 261 0 209 0;
+#X connect 262 0 260 1;
+#X connect 263 0 264 0;
+#X connect 264 0 265 0;
+#X connect 265 0 209 0;
+#X connect 266 0 264 1;
+#X connect 267 0 268 0;
+#X connect 268 0 269 0;
+#X connect 269 0 209 0;
+#X connect 270 0 268 1;
+#X connect 271 0 272 0;
+#X connect 272 0 273 0;
+#X connect 273 0 209 0;
+#X connect 274 0 272 1;
+#X connect 275 0 276 0;
+#X connect 276 0 277 0;
+#X connect 277 0 209 0;
+#X connect 278 0 276 1;
+#X connect 279 0 280 0;
+#X connect 280 0 281 0;
+#X connect 281 0 209 0;
+#X connect 282 0 280 1;
+#X connect 283 0 284 0;
+#X connect 284 0 285 0;
+#X connect 285 0 209 0;
+#X connect 286 0 284 1;
+#X connect 287 0 288 0;
+#X connect 288 0 289 0;
+#X connect 289 0 209 0;
+#X connect 290 0 259 0;
+#X connect 291 0 263 0;
+#X connect 292 0 267 0;
+#X connect 293 0 271 0;
+#X connect 294 0 275 0;
+#X connect 295 0 279 0;
+#X connect 296 0 283 0;
+#X connect 297 0 287 0;
+#X connect 298 0 288 1;
+#X connect 299 0 300 0;
+#X connect 300 0 301 0;
+#X connect 301 0 207 0;
+#X connect 302 0 300 1;
+#X connect 303 0 304 0;
+#X connect 304 0 305 0;
+#X connect 305 0 207 0;
+#X connect 306 0 304 1;
+#X connect 307 0 308 0;
+#X connect 308 0 309 0;
+#X connect 309 0 207 0;
+#X connect 310 0 308 1;
+#X connect 311 0 312 0;
+#X connect 312 0 313 0;
+#X connect 313 0 207 0;
+#X connect 314 0 312 1;
+#X connect 315 0 316 0;
+#X connect 316 0 317 0;
+#X connect 317 0 207 0;
+#X connect 318 0 316 1;
+#X connect 319 0 320 0;
+#X connect 320 0 321 0;
+#X connect 321 0 207 0;
+#X connect 322 0 320 1;
+#X connect 323 0 324 0;
+#X connect 324 0 325 0;
+#X connect 325 0 207 0;
+#X connect 326 0 324 1;
+#X connect 327 0 328 0;
+#X connect 328 0 329 0;
+#X connect 329 0 207 0;
+#X connect 330 0 299 0;
+#X connect 331 0 303 0;
+#X connect 332 0 307 0;
+#X connect 333 0 311 0;
+#X connect 334 0 315 0;
+#X connect 335 0 319 0;
+#X connect 336 0 323 0;
+#X connect 337 0 327 0;
+#X connect 338 0 328 1;
+#X restore 1030 -410 pd Drums;
+#X obj 450 -390 receive First;
+#X obj 610 -360 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 610 -290 readsf~;
+#X obj 610 -255 *~ 0.5;
+#X obj 610 -220 dac~;
+#X obj 760 -360 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 760 -290 readsf~;
+#X obj 760 -255 *~ 0.5;
+#X obj 760 -220 dac~;
+#X obj 610 -390 receive Second;
+#X obj 760 -390 receive Third;
+#X msg 760 -320 open Music/Snare.wav \, 1;
+#X msg 610 -320 open Music/Bass.wav \, 1;
+#X msg 450 -320 open Music/Kick.wav \, 1;
+#X floatatom 263 -164 5 0 0 0 - - -, f 5;
+#X obj 233 -139 select 0;
+#X obj 203 -109 send new_pattern;
+#X obj 263 -189 % 16;
+#X obj 730 -95 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 780 -95 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 830 -95 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 890 -95 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 950 -95 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 1020 -100 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 1100 -100 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 1180 -95 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 730 -120 sel 9;
+#X obj 730 -72 s Ninth;
+#X obj 780 -72 s Tenth;
+#X obj 830 -72 s Eleven;
+#X obj 890 -72 s Twelve;
+#X obj 950 -70 s Thirteen;
+#X obj 1020 -72 s Fourteen;
+#X obj 1100 -72 s Fifteen;
+#X obj 1180 -70 s Sixteen;
+#X obj 1180 -120 sel 16;
+#X obj 1100 -120 sel 15;
+#X obj 1020 -120 sel 14;
+#X obj 950 -120 sel 13;
+#X obj 890 -120 sel 12;
+#X obj 830 -120 sel 11;
+#X obj 780 -120 sel 10;
+#X obj 780 92 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 780 120 spigot;
+#X obj 780 145 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 820 92 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 870 92 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 870 120 spigot;
+#X obj 870 145 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 910 92 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 960 92 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 960 120 spigot;
+#X obj 1000 92 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 1050 92 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 1050 120 spigot;
+#X obj 1050 145 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 1090 92 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 1140 92 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 1140 120 spigot;
+#X obj 1140 145 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 1180 92 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 1240 92 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 1240 120 spigot;
+#X obj 1240 145 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 1280 92 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 1350 92 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 1350 120 spigot;
+#X obj 1350 145 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 1390 92 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 1450 92 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 1450 122 spigot;
+#X obj 1450 145 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 780 62 receive Ninth;
+#X obj 870 62 receive Tenth;
+#X obj 960 62 receive Eleven;
+#X obj 1050 62 receive Twelve;
+#X obj 1140 62 receive Thirteen;
+#X obj 1240 62 receive Fourteen;
+#X obj 1350 62 receive Fifteen;
+#X obj 1450 62 receive Sixteen;
+#X obj 1480 92 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X msg 359 -436 500;
+#X obj 329 -237 % 16;
+#N canvas 738 60 440 313 Music 0;
+#X obj 50 140 readsf~;
+#X obj 50 175 *~ 0.5;
+#X obj 50 210 dac~;
+#X msg 50 110 open Music/Calm.wav \, 1;
+#X obj 200 140 readsf~;
+#X obj 200 175 *~ 0.5;
+#X obj 200 210 dac~;
+#X msg 200 110 open Music/Mystery.wav \, 1;
+#X obj 70 10 receive start;
+#X obj 180 10 receive reset;
+#X msg 180 35 stop;
+#X obj 280 10 receive close;
+#X connect 0 0 1 0;
+#X connect 0 1 7 0;
+#X connect 1 0 2 0;
+#X connect 1 0 2 1;
+#X connect 3 0 0 0;
+#X connect 4 0 5 0;
+#X connect 4 1 3 0;
+#X connect 5 0 6 0;
+#X connect 5 0 6 1;
+#X connect 7 0 4 0;
+#X connect 8 0 3 0;
+#X connect 9 0 10 0;
+#X connect 10 0 0 0;
+#X connect 10 0 4 0;
+#X connect 11 0 10 0;
+#X restore 1030 -430 pd Music;
+#X obj 180 -40 r new_pattern;
+#X obj 180 -15 random 100;
+#X floatatom 180 10 5 0 0 0 - - -, f 5;
+#X obj 940 -340 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 940 -270 readsf~;
+#X obj 940 -200 dac~;
+#X obj 940 -370 receive change;
+#X obj 940 -235 *~ 1;
+#X obj 110 -60 receive start;
+#X obj 180 30 < 75;
+#X obj 810 -40 r new_pattern;
+#X obj 810 -15 random 100;
+#X floatatom 810 10 5 0 0 0 - - -, f 5;
+#X obj 200 230 send red;
+#X msg 940 -300 open Music/Water.wav \, 1;
+#X obj 80 280 send change;
+#X obj 640 -30 r new_pattern;
+#X obj 640 -5 random 100;
+#X floatatom 640 20 5 0 0 0 - - -, f 5;
+#X obj 1400 -40 r new_pattern;
+#X obj 1400 -15 random 100;
+#X floatatom 1400 10 5 0 0 0 - - -, f 5;
+#X obj 600 170 s spawn;
+#X obj 1350 170 s spawn;
+#X obj 1020 -40 r new_pattern;
+#X obj 1020 -15 random 100;
+#X floatatom 1020 10 5 0 0 0 - - -, f 5;
+#X obj 330 -40 r new_pattern;
+#X obj 330 -15 random 100;
+#X floatatom 330 10 5 0 0 0 - - -, f 5;
+#X obj 330 30 < 10;
+#X obj 960 150 s spawn;
+#X obj 270 170 s spawn;
+#X obj 810 30 < 85;
+#X obj 200 200 delay 1500;
+#X obj 840 170 delay 1500;
+#X obj 110 170 receive blue;
+#X obj 110 190 spigot;
+#X obj 30 170 receive red;
+#X obj 30 190 spigot;
+#X obj 60 220 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 30 220 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 90 220 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 130 220 loadbang;
+#X obj 80 250 spigot;
+#X obj 714 280 send change;
+#X obj 744 190 spigot;
+#X obj 664 190 spigot;
+#X obj 694 220 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 664 220 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 724 220 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 764 220 loadbang;
+#X obj 714 250 spigot;
+#X obj 744 170 receive red;
+#X obj 664 170 receive blue;
+#X obj 1020 30 < 5;
+#X obj 1400 30 < 70;
+#X obj 640 40 < 15;
+#X obj 1100 -340 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 1100 -270 readsf~;
+#X obj 1100 -200 dac~;
+#X obj 1100 -370 receive spawn;
+#X msg 1100 -300 open Music/Point.wav \, 1;
+#X obj 1260 -340 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 1260 -270 readsf~;
+#X obj 1260 -200 dac~;
+#X obj 1260 -370 receive respawn;
+#X msg 1260 -300 open Music/Point1.wav \, 1;
+#X obj 1260 -240 *~ 0.2;
+#X obj 1100 -235 *~ 0.3;
+#X obj 0 -440 receive close;
+#X connect 0 0 1 0;
+#X connect 1 0 2 0;
+#X connect 2 0 3 0;
+#X connect 2 0 4 0;
+#X connect 3 0 111 0;
+#X connect 3 0 176 0;
+#X connect 4 0 2 1;
+#X connect 5 0 6 0;
+#X connect 6 0 7 0;
+#X connect 6 0 79 0;
+#X connect 7 0 2 0;
+#X connect 8 0 6 0;
+#X connect 9 0 175 0;
+#X connect 10 0 11 0;
+#X connect 11 0 12 0;
+#X connect 11 0 34 0;
+#X connect 11 0 32 0;
+#X connect 11 0 30 0;
+#X connect 11 0 28 0;
+#X connect 11 0 26 0;
+#X connect 11 0 24 0;
+#X connect 11 0 22 0;
+#X connect 11 0 120 0;
+#X connect 11 0 135 0;
+#X connect 11 0 134 0;
+#X connect 11 0 133 0;
+#X connect 11 0 132 0;
+#X connect 11 0 131 0;
+#X connect 11 0 130 0;
+#X connect 11 0 129 0;
+#X connect 12 0 13 0;
+#X connect 13 0 14 0;
+#X connect 15 0 23 0;
+#X connect 16 0 25 0;
+#X connect 17 0 27 0;
+#X connect 18 0 29 0;
+#X connect 19 0 31 0;
+#X connect 20 0 33 0;
+#X connect 21 0 35 0;
+#X connect 22 0 15 0;
+#X connect 24 0 16 0;
+#X connect 26 0 17 0;
+#X connect 28 0 18 0;
+#X connect 30 0 19 0;
+#X connect 32 0 20 0;
+#X connect 34 0 21 0;
+#X connect 36 0 0 1;
+#X connect 37 0 38 0;
+#X connect 38 0 39 0;
+#X connect 39 0 40 0;
+#X connect 40 0 212 0;
+#X connect 40 0 222 0;
+#X connect 41 0 39 1;
+#X connect 42 0 43 0;
+#X connect 43 0 44 0;
+#X connect 45 0 43 1;
+#X connect 46 0 47 0;
+#X connect 47 0 48 0;
+#X connect 48 0 210 0;
+#X connect 49 0 47 1;
+#X connect 50 0 51 0;
+#X connect 51 0 52 0;
+#X connect 53 0 51 1;
+#X connect 54 0 55 0;
+#X connect 55 0 56 0;
+#X connect 57 0 55 1;
+#X connect 58 0 59 0;
+#X connect 59 0 60 0;
+#X connect 61 0 59 1;
+#X connect 62 0 63 0;
+#X connect 63 0 64 0;
+#X connect 64 0 200 0;
+#X connect 65 0 63 1;
+#X connect 66 0 67 0;
+#X connect 67 0 68 0;
+#X connect 69 0 67 1;
+#X connect 70 0 42 0;
+#X connect 71 0 46 0;
+#X connect 72 0 50 0;
+#X connect 73 0 54 0;
+#X connect 74 0 58 0;
+#X connect 75 0 62 0;
+#X connect 76 0 66 0;
+#X connect 80 0 5 0;
+#X connect 80 0 0 0;
+#X connect 81 0 82 0;
+#X connect 81 0 84 1;
+#X connect 81 0 80 0;
+#X connect 82 0 83 0;
+#X connect 83 0 85 1;
+#X connect 84 0 81 0;
+#X connect 85 0 81 0;
+#X connect 86 0 83 0;
+#X connect 87 0 84 0;
+#X connect 88 0 85 0;
+#X connect 89 0 107 0;
+#X connect 90 0 91 0;
+#X connect 91 0 92 0;
+#X connect 91 0 92 1;
+#X connect 94 0 89 0;
+#X connect 95 0 106 0;
+#X connect 96 0 97 0;
+#X connect 97 0 98 0;
+#X connect 97 0 98 1;
+#X connect 99 0 105 0;
+#X connect 100 0 101 0;
+#X connect 101 0 102 0;
+#X connect 101 0 102 1;
+#X connect 103 0 95 0;
+#X connect 104 0 99 0;
+#X connect 105 0 100 0;
+#X connect 106 0 96 0;
+#X connect 107 0 90 0;
+#X connect 108 0 109 0;
+#X connect 109 0 110 0;
+#X connect 111 0 108 0;
+#X connect 112 0 121 0;
+#X connect 113 0 122 0;
+#X connect 114 0 123 0;
+#X connect 115 0 124 0;
+#X connect 116 0 125 0;
+#X connect 117 0 126 0;
+#X connect 118 0 127 0;
+#X connect 119 0 128 0;
+#X connect 120 0 112 0;
+#X connect 129 0 119 0;
+#X connect 130 0 118 0;
+#X connect 131 0 117 0;
+#X connect 132 0 116 0;
+#X connect 133 0 115 0;
+#X connect 134 0 114 0;
+#X connect 135 0 113 0;
+#X connect 136 0 137 0;
+#X connect 137 0 138 0;
+#X connect 138 0 213 0;
+#X connect 138 0 230 0;
+#X connect 139 0 137 1;
+#X connect 140 0 141 0;
+#X connect 141 0 142 0;
+#X connect 143 0 141 1;
+#X connect 144 0 145 0;
+#X connect 145 0 209 0;
+#X connect 146 0 145 1;
+#X connect 147 0 148 0;
+#X connect 148 0 149 0;
+#X connect 150 0 148 1;
+#X connect 151 0 152 0;
+#X connect 152 0 153 0;
+#X connect 154 0 152 1;
+#X connect 155 0 156 0;
+#X connect 156 0 157 0;
+#X connect 158 0 156 1;
+#X connect 159 0 160 0;
+#X connect 160 0 161 0;
+#X connect 161 0 201 0;
+#X connect 162 0 160 1;
+#X connect 163 0 164 0;
+#X connect 164 0 165 0;
+#X connect 166 0 136 0;
+#X connect 167 0 140 0;
+#X connect 168 0 144 0;
+#X connect 169 0 147 0;
+#X connect 170 0 151 0;
+#X connect 171 0 155 0;
+#X connect 172 0 159 0;
+#X connect 173 0 163 0;
+#X connect 174 0 164 1;
+#X connect 175 0 36 0;
+#X connect 176 0 10 0;
+#X connect 178 0 179 0;
+#X connect 179 0 180 0;
+#X connect 180 0 187 0;
+#X connect 181 0 192 0;
+#X connect 182 0 185 0;
+#X connect 184 0 181 0;
+#X connect 185 0 183 0;
+#X connect 185 0 183 1;
+#X connect 186 0 77 0;
+#X connect 187 0 41 0;
+#X connect 188 0 189 0;
+#X connect 189 0 190 0;
+#X connect 190 0 211 0;
+#X connect 192 0 182 0;
+#X connect 194 0 195 0;
+#X connect 195 0 196 0;
+#X connect 196 0 235 0;
+#X connect 197 0 198 0;
+#X connect 198 0 199 0;
+#X connect 199 0 234 0;
+#X connect 202 0 203 0;
+#X connect 203 0 204 0;
+#X connect 204 0 233 0;
+#X connect 205 0 206 0;
+#X connect 206 0 207 0;
+#X connect 207 0 208 0;
+#X connect 208 0 49 0;
+#X connect 211 0 139 0;
+#X connect 212 0 191 0;
+#X connect 213 0 78 0;
+#X connect 214 0 215 0;
+#X connect 215 0 219 0;
+#X connect 216 0 217 0;
+#X connect 217 0 219 0;
+#X connect 218 0 220 0;
+#X connect 219 0 218 0;
+#X connect 219 0 217 1;
+#X connect 219 0 222 1;
+#X connect 220 0 215 1;
+#X connect 221 0 220 0;
+#X connect 222 0 193 0;
+#X connect 224 0 227 0;
+#X connect 225 0 227 0;
+#X connect 226 0 228 0;
+#X connect 227 0 226 0;
+#X connect 227 0 225 1;
+#X connect 227 0 230 1;
+#X connect 228 0 224 1;
+#X connect 229 0 228 0;
+#X connect 230 0 223 0;
+#X connect 231 0 224 0;
+#X connect 232 0 225 0;
+#X connect 233 0 146 0;
+#X connect 234 0 162 0;
+#X connect 235 0 65 0;
+#X connect 236 0 240 0;
+#X connect 237 0 247 0;
+#X connect 239 0 236 0;
+#X connect 240 0 237 0;
+#X connect 241 0 245 0;
+#X connect 242 0 246 0;
+#X connect 244 0 241 0;
+#X connect 245 0 242 0;
+#X connect 246 0 243 0;
+#X connect 246 0 243 1;
+#X connect 247 0 238 0;
+#X connect 247 0 238 1;
+#X connect 248 0 84 0;
+#X restore 40 500 pd beat-sequencer;
+#N canvas 772 76 466 382 score 0;
+#X obj 160 40 gemhead;
+#X obj 260 240 f;
+#X obj 320 90 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X floatatom 310 150 5 0 0 0 - - -, f 5;
+#X msg 280 210 float \$1;
+#X msg 160 10 set 69;
+#X obj 160 220 colorRGB 1 1 1;
+#X obj 200 130 hsl 87 15 -6 6 0 0 empty empty empty -2 -8 0 10 #fcfcfc
+#000000 #000000 6850 1;
+#X obj 200 150 hsl 88 15 -6 6 0 0 empty empty empty -2 -8 0 10 #fcfcfc
+#000000 #000000 7150 1;
+#X msg 180 80 set \$1;
+#X msg 250 80 set \$1;
+#X msg 180 100 3.55814;
+#X msg 250 100 3.86207;
+#X obj 160 180 translateXYZ 0 0 0;
+#X floatatom 220 260 5 0 0 0 - - -, f 5;
+#X obj 230 40 loadbang;
+#X obj 160 280 text2d 0;
+#X obj 70 130 hsl 87 15 -6 6 0 0 empty empty empty -2 -8 0 10 #fcfcfc
+#000000 #000000 6450 1;
+#X obj 70 150 hsl 88 15 -6 6 0 0 empty empty empty -2 -8 0 10 #fcfcfc
+#000000 #000000 7150 1;
+#X msg 50 80 set \$1;
+#X msg 120 80 set \$1;
+#X msg 50 100 3;
+#X msg 120 100 3.86207;
+#X obj 30 180 translateXYZ 0 0 0;
+#X floatatom 90 260 5 0 0 0 - - -, f 5;
+#X obj 100 40 loadbang;
+#X obj 30 40 gemhead;
+#X msg 30 10 set 69;
+#X obj 30 280 text2d Score:;
+#X obj 30 220 colorRGB 1 1 1;
+#X obj 320 50 receive score;
+#X obj 370 150 + 1;
+#X msg 320 120 1;
+#X msg 400 100 0;
+#X obj 320 190 send score-no;
+#X obj 320 20 receive start;
+#X obj 320 0 receive close;
+#X connect 0 0 13 0;
+#X connect 1 0 16 0;
+#X connect 2 0 32 0;
+#X connect 3 0 31 1;
+#X connect 3 0 4 0;
+#X connect 3 0 34 0;
+#X connect 4 0 1 0;
+#X connect 5 0 0 0;
+#X connect 6 0 16 0;
+#X connect 7 0 9 0;
+#X connect 7 0 13 1;
+#X connect 8 0 10 0;
+#X connect 8 0 13 2;
+#X connect 9 0 11 0;
+#X connect 10 0 12 0;
+#X connect 11 0 7 0;
+#X connect 12 0 8 0;
+#X connect 13 0 6 0;
+#X connect 14 0 16 1;
+#X connect 15 0 11 0;
+#X connect 15 0 12 0;
+#X connect 15 0 5 0;
+#X connect 17 0 19 0;
+#X connect 17 0 23 1;
+#X connect 18 0 20 0;
+#X connect 18 0 23 2;
+#X connect 19 0 21 0;
+#X connect 20 0 22 0;
+#X connect 21 0 17 0;
+#X connect 22 0 18 0;
+#X connect 23 0 29 0;
+#X connect 24 0 28 1;
+#X connect 25 0 21 0;
+#X connect 25 0 22 0;
+#X connect 25 0 27 0;
+#X connect 26 0 23 0;
+#X connect 27 0 26 0;
+#X connect 29 0 28 0;
+#X connect 30 0 2 0;
+#X connect 31 0 3 0;
+#X connect 32 0 31 0;
+#X connect 33 0 3 0;
+#X connect 35 0 33 0;
+#X connect 36 0 33 0;
+#X restore 40 460 pd score;
+#N canvas 572 12 922 738 Green_Tiles 0;
+#X obj 190 -90 hsl 87 15 -6 6 0 0 empty empty empty -2 -8 0 10 #fcfcfc
+#000000 #000000 4300 1;
+#X obj 190 -70 hsl 88 15 -6 6 0 0 empty empty empty -2 -8 0 10 #fcfcfc
+#000000 #000000 4350 1;
+#X floatatom 190 -20 4 0 0 0 - - -, f 4;
+#X floatatom 220 -20 4 0 0 0 - - -, f 4;
+#X floatatom 250 -20 4 0 0 0 - - -, f 4;
+#X obj 170 -160 gemhead;
+#X msg 190 -140 set \$1;
+#X msg 260 -140 set \$1;
+#X obj 170 -40 translateXYZ 0 0 0;
+#X obj 440 -90 hsl 87 15 -6 6 0 0 empty empty empty -2 -8 0 10 #fcfcfc
+#000000 #000000 6593 1;
+#X obj 440 -70 hsl 88 15 -6 6 0 0 empty empty empty -2 -8 0 10 #fcfcfc
+#000000 #000000 5510 1;
+#X floatatom 420 -20 4 0 0 0 - - -, f 4;
+#X floatatom 450 -20 4 0 0 0 - - -, f 4;
+#X floatatom 480 -20 4 0 0 0 - - -, f 4;
+#X obj 400 -160 gemhead;
+#X msg 420 -140 set \$1;
+#X msg 490 -140 set \$1;
+#X obj 400 -40 translateXYZ 0 0 0;
+#X obj 208 348 hsl 87 15 -6 6 0 0 empty empty empty -2 -8 0 10 #fcfcfc
+#000000 #000000 2007 1;
+#X obj 208 368 hsl 88 15 -6 6 0 0 empty empty empty -2 -8 0 10 #fcfcfc
+#000000 #000000 3190 1;
+#X floatatom 188 418 4 0 0 0 - - -, f 4;
+#X floatatom 218 418 4 0 0 0 - - -, f 4;
+#X floatatom 248 418 4 0 0 0 - - -, f 4;
+#X obj 168 278 gemhead;
+#X msg 188 298 set \$1;
+#X msg 258 298 set \$1;
+#X obj 168 398 translateXYZ 0 0 0;
+#X obj 308 -82 loadbang;
+#X obj 548 -72 loadbang;
+#X obj 306 386 loadbang;
+#X obj 438 348 hsl 87 15 -6 6 0 0 empty empty empty -2 -8 0 10 #fcfcfc
+#000000 #000000 5447 1;
+#X obj 438 368 hsl 88 15 -6 6 0 0 empty empty empty -2 -8 0 10 #fcfcfc
+#000000 #000000 2030 1;
+#X floatatom 418 418 4 0 0 0 - - -, f 4;
+#X floatatom 448 418 4 0 0 0 - - -, f 4;
+#X floatatom 478 418 4 0 0 0 - - -, f 4;
+#X obj 398 278 gemhead;
+#X msg 418 298 set \$1;
+#X msg 488 298 set \$1;
+#X obj 398 398 translateXYZ 0 0 0;
+#X obj 540 430 loadbang;
+#X obj 170 10 colorRGB 0 1 0;
+#X obj 400 10 colorRGB 0 1 0;
+#X obj 398 448 colorRGB 0 1 0;
+#X obj 168 448 colorRGB 0 1 0;
+#X obj 170 130 pix_image;
+#X obj 200 50 loadbang;
+#X obj 170 200 pix_texture;
+#X msg 252 162 env \$1;
+#X obj 252 142 hradio 15 1 0 6 empty empty empty 0 -6 0 8 #fcfcfc #000000
+#000000 1;
+#X msg 252 112 1;
+#X obj 394 133 pix_image;
+#X obj 424 53 loadbang;
+#X obj 394 203 pix_texture;
+#X msg 476 165 env \$1;
+#X obj 476 145 hradio 15 1 0 6 empty empty empty 0 -6 0 8 #fcfcfc #000000
+#000000 1;
+#X msg 476 115 1;
+#X obj 402 551 pix_image;
+#X obj 432 471 loadbang;
+#X obj 402 621 pix_texture;
+#X msg 484 583 env \$1;
+#X obj 484 563 hradio 15 1 0 6 empty empty empty 0 -6 0 8 #fcfcfc #000000
+#000000 1;
+#X msg 484 533 1;
+#X obj 173 542 pix_image;
+#X obj 200 470 loadbang;
+#X obj 170 610 pix_texture;
+#X msg 255 574 env \$1;
+#X obj 255 554 hradio 15 1 0 6 empty empty empty 0 -6 0 8 #fcfcfc #000000
+#000000 1;
+#X msg 255 524 1;
+#X msg 424 83 open Art/Grass1.png;
+#X msg 200 80 open Art/Grass1.png;
+#X msg 432 501 open Art/Grass1.png;
+#X msg 203 492 open Art/Grass1.png;
+#X obj 650 -90 hsl 87 15 -6 6 0 0 empty empty empty -2 -8 0 10 #fcfcfc
+#000000 #000000 3153 1;
+#X obj 650 -70 hsl 88 15 -6 6 0 0 empty empty empty -2 -8 0 10 #fcfcfc
+#000000 #000000 6670 1;
+#X floatatom 630 -20 4 0 0 0 - - -, f 4;
+#X floatatom 660 -20 4 0 0 0 - - -, f 4;
+#X floatatom 690 -20 4 0 0 0 - - -, f 4;
+#X obj 610 -160 gemhead;
+#X msg 630 -140 set \$1;
+#X msg 700 -140 set \$1;
+#X obj 610 -40 translateXYZ 0 0 0;
+#X obj 758 -72 loadbang;
+#X obj 610 10 colorRGB 0 1 0;
+#X obj 604 133 pix_image;
+#X obj 634 53 loadbang;
+#X obj 604 203 pix_texture;
+#X msg 686 165 env \$1;
+#X obj 686 145 hradio 15 1 0 6 empty empty empty 0 -6 0 8 #fcfcfc #000000
+#000000 1;
+#X msg 686 115 1;
+#X msg 634 83 open Art/Grass1.png;
+#X msg 190 -120 0;
+#X msg 260 -120 0;
+#X obj 170 240 square 0.8;
+#X obj 400 250 square 0.8;
+#X obj 610 250 square 0.8;
+#X obj 400 660 square 0.8;
+#X obj 170 650 square 0.8;
+#X msg 490 -120 1.6;
+#X msg 630 -120 -1.6;
+#X msg 700 -120 3.2;
+#X msg 488 318 -3.2;
+#X msg 258 318 -1.6;
+#X msg 418 318 1.6;
+#X msg 190 320 -3.2;
+#X msg 420 -120 3.2;
+#X connect 0 0 6 0;
+#X connect 0 0 8 1;
+#X connect 1 0 7 0;
+#X connect 1 0 8 2;
+#X connect 2 0 40 1;
+#X connect 3 0 40 2;
+#X connect 4 0 40 3;
+#X connect 5 0 8 0;
+#X connect 6 0 90 0;
+#X connect 7 0 91 0;
+#X connect 8 0 40 0;
+#X connect 9 0 15 0;
+#X connect 9 0 17 1;
+#X connect 10 0 16 0;
+#X connect 10 0 17 2;
+#X connect 11 0 41 1;
+#X connect 12 0 41 2;
+#X connect 13 0 41 3;
+#X connect 14 0 17 0;
+#X connect 15 0 104 0;
+#X connect 16 0 97 0;
+#X connect 17 0 41 0;
+#X connect 18 0 24 0;
+#X connect 18 0 26 1;
+#X connect 19 0 25 0;
+#X connect 19 0 26 2;
+#X connect 20 0 43 1;
+#X connect 21 0 43 2;
+#X connect 22 0 43 3;
+#X connect 23 0 26 0;
+#X connect 24 0 103 0;
+#X connect 25 0 101 0;
+#X connect 26 0 43 0;
+#X connect 27 0 90 0;
+#X connect 27 0 91 0;
+#X connect 28 0 104 0;
+#X connect 28 0 97 0;
+#X connect 29 0 103 0;
+#X connect 29 0 101 0;
+#X connect 30 0 36 0;
+#X connect 30 0 38 1;
+#X connect 31 0 37 0;
+#X connect 31 0 38 2;
+#X connect 32 0 42 1;
+#X connect 33 0 42 2;
+#X connect 34 0 42 3;
+#X connect 35 0 38 0;
+#X connect 36 0 102 0;
+#X connect 37 0 100 0;
+#X connect 38 0 42 0;
+#X connect 39 0 102 0;
+#X connect 39 0 100 0;
+#X connect 40 0 44 0;
+#X connect 41 0 50 0;
+#X connect 42 0 56 0;
+#X connect 43 0 62 0;
+#X connect 44 0 46 0;
+#X connect 45 0 69 0;
+#X connect 45 0 49 0;
+#X connect 46 0 92 0;
+#X connect 47 0 46 0;
+#X connect 48 0 47 0;
+#X connect 48 0 46 0;
+#X connect 49 0 48 0;
+#X connect 50 0 52 0;
+#X connect 51 0 68 0;
+#X connect 51 0 55 0;
+#X connect 52 0 93 0;
+#X connect 53 0 52 0;
+#X connect 54 0 53 0;
+#X connect 54 0 52 0;
+#X connect 55 0 54 0;
+#X connect 56 0 58 0;
+#X connect 57 0 70 0;
+#X connect 57 0 61 0;
+#X connect 58 0 95 0;
+#X connect 59 0 58 0;
+#X connect 60 0 59 0;
+#X connect 60 0 58 0;
+#X connect 61 0 60 0;
+#X connect 62 0 64 0;
+#X connect 63 0 71 0;
+#X connect 63 0 67 0;
+#X connect 64 0 96 0;
+#X connect 65 0 64 0;
+#X connect 66 0 65 0;
+#X connect 66 0 64 0;
+#X connect 67 0 66 0;
+#X connect 68 0 50 0;
+#X connect 69 0 44 0;
+#X connect 70 0 56 0;
+#X connect 71 0 62 0;
+#X connect 72 0 78 0;
+#X connect 72 0 80 1;
+#X connect 73 0 79 0;
+#X connect 73 0 80 2;
+#X connect 74 0 82 1;
+#X connect 75 0 82 2;
+#X connect 76 0 82 3;
+#X connect 77 0 80 0;
+#X connect 78 0 98 0;
+#X connect 79 0 99 0;
+#X connect 80 0 82 0;
+#X connect 81 0 98 0;
+#X connect 81 0 99 0;
+#X connect 82 0 83 0;
+#X connect 83 0 85 0;
+#X connect 84 0 89 0;
+#X connect 84 0 88 0;
+#X connect 85 0 94 0;
+#X connect 86 0 85 0;
+#X connect 87 0 86 0;
+#X connect 87 0 85 0;
+#X connect 88 0 87 0;
+#X connect 89 0 83 0;
+#X connect 90 0 0 0;
+#X connect 90 0 8 1;
+#X connect 91 0 8 2;
+#X connect 91 0 1 0;
+#X connect 97 0 17 2;
+#X connect 97 0 10 0;
+#X connect 98 0 72 0;
+#X connect 98 0 80 1;
+#X connect 99 0 80 2;
+#X connect 99 0 73 0;
+#X connect 100 0 38 2;
+#X connect 100 0 31 0;
+#X connect 101 0 26 2;
+#X connect 101 0 19 0;
+#X connect 102 0 30 0;
+#X connect 102 0 38 1;
+#X connect 103 0 18 0;
+#X connect 103 0 26 1;
+#X connect 104 0 9 0;
+#X connect 104 0 17 1;
+#X restore 170 510 pd Green_Tiles;
+#N canvas 481 0 559 754 WaterBlue_Tiles 0;
+#X obj 160 150 hsl 87 15 -6 6 0 0 empty empty empty -2 -8 0 10 #fcfcfc
+#000000 #000000 2007 1;
+#X obj 160 170 hsl 88 15 -6 6 0 0 empty empty empty -2 -8 0 10 #fcfcfc
+#000000 #000000 2030 1;
+#X floatatom 140 220 4 0 0 0 - - -, f 4;
+#X floatatom 170 220 4 0 0 0 - - -, f 4;
+#X floatatom 200 220 4 0 0 0 - - -, f 4;
+#X obj 120 80 gemhead;
+#X msg 140 100 set \$1;
+#X msg 210 100 set \$1;
+#X obj 120 200 translateXYZ 0 0 0;
+#X obj 560 140 hsl 87 15 -6 6 0 0 empty empty empty -2 -8 0 10 #fcfcfc
+#000000 #000000 3153 1;
+#X obj 560 160 hsl 88 15 -6 6 0 0 empty empty empty -2 -8 0 10 #fcfcfc
+#000000 #000000 2030 1;
+#X floatatom 540 210 4 0 0 0 - - -, f 4;
+#X floatatom 570 210 4 0 0 0 - - -, f 4;
+#X floatatom 600 210 4 0 0 0 - - -, f 4;
+#X obj 520 70 gemhead;
+#X msg 540 90 set \$1;
+#X msg 610 90 set \$1;
+#X obj 1030 130 hsl 87 15 -6 6 0 0 empty empty empty -2 -8 0 10 #fcfcfc
+#000000 #000000 4300 1;
+#X obj 1030 150 hsl 88 15 -6 6 0 0 empty empty empty -2 -8 0 10 #fcfcfc
+#000000 #000000 2030 1;
+#X floatatom 1010 200 4 0 0 0 - - -, f 4;
+#X floatatom 1040 200 4 0 0 0 - - -, f 4;
+#X floatatom 1070 200 4 0 0 0 - - -, f 4;
+#X obj 990 60 gemhead;
+#X msg 1010 80 set \$1;
+#X msg 1080 80 set \$1;
+#X obj 1120 190 loadbang;
+#X obj 670 190 loadbang;
+#X obj 270 200 loadbang;
+#X obj 150 640 hsl 87 15 -6 6 0 0 empty empty empty -2 -8 0 10 #fcfcfc
+#000000 #000000 3153 1;
+#X obj 150 660 hsl 88 15 -6 6 0 0 empty empty empty -2 -8 0 10 #fcfcfc
+#000000 #000000 4350 1;
+#X floatatom 130 710 4 0 0 0 - - -, f 4;
+#X floatatom 160 710 4 0 0 0 - - -, f 4;
+#X floatatom 190 710 4 0 0 0 - - -, f 4;
+#X obj 110 570 gemhead;
+#X msg 130 590 set \$1;
+#X msg 200 590 set \$1;
+#X obj 110 690 translateXYZ 0 0 0;
+#X obj 240 710 loadbang;
+#X obj 550 650 hsl 87 15 -6 6 0 0 empty empty empty -2 -8 0 10 #fcfcfc
+#000000 #000000 3153 1;
+#X obj 550 670 hsl 88 15 -6 6 0 0 empty empty empty -2 -8 0 10 #fcfcfc
+#000000 #000000 5510 1;
+#X floatatom 530 720 4 0 0 0 - - -, f 4;
+#X floatatom 560 720 4 0 0 0 - - -, f 4;
+#X floatatom 590 720 4 0 0 0 - - -, f 4;
+#X obj 510 580 gemhead;
+#X msg 530 600 set \$1;
+#X msg 600 600 set \$1;
+#X obj 510 700 translateXYZ 0 0 0;
+#X obj 630 730 loadbang;
+#X obj 1020 650 hsl 87 15 -6 6 0 0 empty empty empty -2 -8 0 10 #fcfcfc
+#000000 #000000 4300 1;
+#X obj 1020 670 hsl 88 15 -6 6 0 0 empty empty empty -2 -8 0 10 #fcfcfc
+#000000 #000000 6670 1;
+#X floatatom 1000 720 4 0 0 0 - - -, f 4;
+#X floatatom 1030 720 4 0 0 0 - - -, f 4;
+#X floatatom 1060 720 4 0 0 0 - - -, f 4;
+#X obj 980 580 gemhead;
+#X msg 1000 600 set \$1;
+#X msg 1070 600 set \$1;
+#X obj 980 700 translateXYZ 0 0 0;
+#X obj 1100 740 loadbang;
+#X obj 520 190 translateXYZ 0 0 0;
+#X obj 990 180 translateXYZ 0 0 0;
+#X obj 120 360 pix_image;
+#X obj 140 280 loadbang;
+#X obj 120 420 pix_texture;
+#X msg 190 390 env \$1;
+#X obj 190 360 hradio 15 1 0 6 empty empty empty 0 -6 0 8 #fcfcfc #000000
+#000000 1;
+#X msg 190 330 1;
+#X obj 520 360 pix_image;
+#X obj 540 270 loadbang;
+#X obj 520 410 pix_texture;
+#X msg 590 380 env \$1;
+#X obj 590 360 hradio 15 1 0 6 empty empty empty 0 -6 0 8 #fcfcfc #000000
+#000000 1;
+#X msg 590 330 1;
+#X obj 990 340 pix_image;
+#X obj 1020 270 loadbang;
+#X obj 990 401 pix_texture;
+#X msg 1072 363 env \$1;
+#X obj 1072 343 hradio 15 1 0 6 empty empty empty 0 -6 0 8 #fcfcfc
+#000000 #000000 1;
+#X msg 1070 320 1;
+#X obj 110 890 pix_image;
+#X obj 130 790 loadbang;
+#X obj 110 940 pix_texture;
+#X msg 190 910 env \$1;
+#X obj 190 880 hradio 15 1 0 6 empty empty empty 0 -6 0 8 #fcfcfc #000000
+#000000 1;
+#X msg 190 860 1;
+#X obj 510 890 pix_image;
+#X obj 530 800 loadbang;
+#X obj 510 950 pix_texture;
+#X msg 580 920 env \$1;
+#X obj 580 890 hradio 15 1 0 6 empty empty empty 0 -6 0 8 #fcfcfc #000000
+#000000 1;
+#X msg 580 860 1;
+#X obj 980 900 pix_image;
+#X obj 1000 800 loadbang;
+#X obj 980 940 pix_texture;
+#X msg 1060 940 env \$1;
+#X obj 1060 900 hradio 15 1 0 6 empty empty empty 0 -6 0 8 #fcfcfc
+#000000 #000000 1;
+#X msg 1060 870 1;
+#X msg 140 310 open Art/Water.png;
+#X msg 540 300 open Art/Water.png;
+#X msg 1020 300 open Art/Water.png;
+#X msg 1000 840 open Art/Water.png;
+#X msg 530 830 open Art/Water.png;
+#X msg 130 830 open Art/Water.png;
+#X obj 230 280 receive red;
+#X obj 310 280 receive blue;
+#X obj 610 270 receive red;
+#X obj 720 270 receive blue;
+#X obj 1110 270 receive red;
+#X obj 1190 270 receive blue;
+#X obj 1090 810 receive red;
+#X obj 1170 810 receive blue;
+#X obj 600 800 receive red;
+#X obj 700 800 receive blue;
+#X obj 220 800 receive red;
+#X obj 300 800 receive blue;
+#X msg 270 310 open Art/Sand.png;
+#X msg 680 300 open Art/Sand.png;
+#X msg 1150 300 open Art/Sand.png;
+#X msg 1130 840 open Art/Sand.png;
+#X msg 660 830 open Art/Sand.png;
+#X msg 260 830 open Art/Sand.png;
+#X obj 1410 140 hsl 87 15 -6 6 0 0 empty empty empty -2 -8 0 10 #fcfcfc
+#000000 #000000 5447 1;
+#X obj 1410 160 hsl 88 15 -6 6 0 0 empty empty empty -2 -8 0 10 #fcfcfc
+#000000 #000000 4350 1;
+#X floatatom 1390 210 4 0 0 0 - - -, f 4;
+#X floatatom 1420 210 4 0 0 0 - - -, f 4;
+#X floatatom 1450 210 4 0 0 0 - - -, f 4;
+#X obj 1370 70 gemhead;
+#X msg 1390 90 set \$1;
+#X msg 1460 90 set \$1;
+#X obj 1500 200 loadbang;
+#X obj 1370 190 translateXYZ 0 0 0;
+#X obj 1370 350 pix_image;
+#X obj 1400 280 loadbang;
+#X obj 1370 411 pix_texture;
+#X msg 1452 373 env \$1;
+#X obj 1452 353 hradio 15 1 0 6 empty empty empty 0 -6 0 8 #fcfcfc
+#000000 #000000 1;
+#X msg 1450 330 1;
+#X msg 1400 310 open Art/Water.png;
+#X obj 1490 280 receive red;
+#X obj 1570 280 receive blue;
+#X msg 1530 310 open Art/Sand.png;
+#X obj 1800 140 hsl 87 15 -6 6 0 0 empty empty empty -2 -8 0 10 #fcfcfc
+#000000 #000000 5447 1;
+#X obj 1800 160 hsl 88 15 -6 6 0 0 empty empty empty -2 -8 0 10 #fcfcfc
+#000000 #000000 3190 1;
+#X floatatom 1780 210 4 0 0 0 - - -, f 4;
+#X floatatom 1810 210 4 0 0 0 - - -, f 4;
+#X floatatom 1840 210 4 0 0 0 - - -, f 4;
+#X obj 1760 70 gemhead;
+#X msg 1780 90 set \$1;
+#X msg 1850 90 set \$1;
+#X obj 1890 200 loadbang;
+#X obj 1760 190 translateXYZ 0 0 0;
+#X obj 1760 350 pix_image;
+#X obj 1790 280 loadbang;
+#X obj 1760 411 pix_texture;
+#X msg 1842 373 env \$1;
+#X obj 1842 353 hradio 15 1 0 6 empty empty empty 0 -6 0 8 #fcfcfc
+#000000 #000000 1;
+#X msg 1840 330 1;
+#X msg 1790 310 open Art/Water.png;
+#X obj 1880 280 receive red;
+#X obj 1960 280 receive blue;
+#X msg 1920 310 open Art/Sand.png;
+#X obj 1420 670 hsl 87 15 -6 6 0 0 empty empty empty -2 -8 0 10 #fcfcfc
+#000000 #000000 5447 1;
+#X obj 1420 690 hsl 88 15 -6 6 0 0 empty empty empty -2 -8 0 10 #fcfcfc
+#000000 #000000 6670 1;
+#X floatatom 1400 740 4 0 0 0 - - -, f 4;
+#X floatatom 1430 740 4 0 0 0 - - -, f 4;
+#X floatatom 1460 740 4 0 0 0 - - -, f 4;
+#X obj 1380 600 gemhead;
+#X msg 1400 620 set \$1;
+#X msg 1470 620 set \$1;
+#X obj 1510 730 loadbang;
+#X obj 1380 720 translateXYZ 0 0 0;
+#X obj 1380 880 pix_image;
+#X obj 1410 810 loadbang;
+#X obj 1380 941 pix_texture;
+#X msg 1462 903 env \$1;
+#X obj 1462 883 hradio 15 1 0 6 empty empty empty 0 -6 0 8 #fcfcfc
+#000000 #000000 1;
+#X msg 1460 860 1;
+#X msg 1410 840 open Art/Water.png;
+#X obj 1500 810 receive red;
+#X obj 1580 810 receive blue;
+#X msg 1540 840 open Art/Sand.png;
+#X obj 1800 670 hsl 87 15 -6 6 0 0 empty empty empty -2 -8 0 10 #fcfcfc
+#000000 #000000 6593 1;
+#X obj 1800 690 hsl 88 15 -6 6 0 0 empty empty empty -2 -8 0 10 #fcfcfc
+#000000 #000000 6670 1;
+#X floatatom 1780 740 4 0 0 0 - - -, f 4;
+#X floatatom 1810 740 4 0 0 0 - - -, f 4;
+#X floatatom 1840 740 4 0 0 0 - - -, f 4;
+#X obj 1760 600 gemhead;
+#X msg 1780 620 set \$1;
+#X msg 1850 620 set \$1;
+#X obj 1890 730 loadbang;
+#X obj 1760 720 translateXYZ 0 0 0;
+#X obj 1760 880 pix_image;
+#X obj 1790 810 loadbang;
+#X obj 1760 941 pix_texture;
+#X msg 1842 903 env \$1;
+#X obj 1842 883 hradio 15 1 0 6 empty empty empty 0 -6 0 8 #fcfcfc
+#000000 #000000 1;
+#X msg 1840 860 1;
+#X msg 1790 840 open Art/Water.png;
+#X obj 1880 810 receive red;
+#X obj 1960 810 receive blue;
+#X msg 1920 840 open Art/Sand.png;
+#X msg 140 120 -3.2;
+#X msg 210 120 -3.2;
+#X msg 610 110 -3.2;
+#X msg 1010 100 0;
+#X msg 1080 100 -3.2;
+#X msg 1390 110 1.6;
+#X msg 1780 110 1.6;
+#X msg 1850 110 -1.6;
+#X msg 200 610 0;
+#X msg 530 620 -1.6;
+#X msg 600 620 1.6;
+#X msg 1000 620 0;
+#X msg 1070 620 3.2;
+#X msg 1400 640 1.6;
+#X msg 1470 640 3.2;
+#X msg 1780 640 3.2;
+#X msg 1850 640 3.2;
+#X obj 120 460 square 0.8;
+#X obj 520 460 square 0.8;
+#X msg 540 110 -1.6;
+#X obj 990 430 square 0.8;
+#X obj 1370 440 square 0.8;
+#X obj 1760 440 square 0.8;
+#X obj 1760 970 square 0.8;
+#X obj 1380 970 square 0.8;
+#X obj 980 990 square 0.8;
+#X obj 510 990 square 0.8;
+#X obj 110 980 square 0.8;
+#X msg 130 610 -1.6;
+#X msg 1460 110 0;
+#X text 1000 10 WATER;
+#X obj 410 170 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 430 170 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 460 170 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 310 140 spigot;
+#X obj 360 140 spigot;
+#X obj 410 140 loadbang;
+#X obj 840 550 send red;
+#X obj 900 550 send blue;
+#X obj 840 520 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 900 510 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 340 200 spigot;
+#X obj 300 170 receive mistake1;
+#X obj 120 250 colorRGB 1 0 0 0;
+#X obj 520 240 colorRGB 1 0 0 0;
+#X obj 990 230 colorRGB 1 0 0 0;
+#X obj 1370 240 colorRGB 1 0 0 0;
+#X obj 1760 240 colorRGB 1 0 0 0;
+#X obj 1760 770 colorRGB 1 0 0 0;
+#X obj 1380 770 colorRGB 1 0 0 0;
+#X obj 980 750 colorRGB 1 0 0 0;
+#X obj 510 750 colorRGB 1 0 0 0;
+#X obj 110 740 colorRGB 1 0 0 0;
+#X msg 340 225 0;
+#X obj 310 110 receive blue;
+#X obj 390 110 receive red;
+#X obj 830 160 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 850 160 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 880 160 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 730 130 spigot;
+#X obj 780 130 spigot;
+#X obj 830 130 loadbang;
+#X obj 760 190 spigot;
+#X msg 760 215 0;
+#X obj 730 100 receive blue;
+#X obj 810 100 receive red;
+#X obj 1280 160 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 1300 160 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 1330 160 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 1180 130 spigot;
+#X obj 1230 130 spigot;
+#X obj 1280 130 loadbang;
+#X obj 1210 190 spigot;
+#X msg 1210 215 0;
+#X obj 1180 100 receive blue;
+#X obj 1260 100 receive red;
+#X obj 1650 160 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 1670 160 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 1700 160 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 1550 130 spigot;
+#X obj 1600 130 spigot;
+#X obj 1650 130 loadbang;
+#X obj 1580 190 spigot;
+#X msg 1580 215 0;
+#X obj 1550 100 receive blue;
+#X obj 1630 100 receive red;
+#X obj 2040 160 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 2060 160 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 2090 160 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 1940 130 spigot;
+#X obj 1990 130 spigot;
+#X obj 2040 130 loadbang;
+#X obj 1970 190 spigot;
+#X msg 1970 215 0;
+#X obj 1940 100 receive blue;
+#X obj 2020 100 receive red;
+#X obj 2050 700 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 2070 700 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 2100 700 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 1950 670 spigot;
+#X obj 2000 670 spigot;
+#X obj 2050 670 loadbang;
+#X obj 1980 730 spigot;
+#X msg 1980 755 0;
+#X obj 1950 640 receive blue;
+#X obj 2030 640 receive red;
+#X obj 1660 700 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 1680 700 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 1710 700 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 1560 670 spigot;
+#X obj 1610 670 spigot;
+#X obj 1660 670 loadbang;
+#X obj 1590 730 spigot;
+#X msg 1590 755 0;
+#X obj 1560 640 receive blue;
+#X obj 1640 640 receive red;
+#X obj 1260 700 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 1280 700 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 1310 700 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 1160 670 spigot;
+#X obj 1210 670 spigot;
+#X obj 1260 670 loadbang;
+#X obj 1190 730 spigot;
+#X msg 1190 755 0;
+#X obj 1160 640 receive blue;
+#X obj 1240 640 receive red;
+#X obj 800 690 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 820 690 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 850 690 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 700 660 spigot;
+#X obj 750 660 spigot;
+#X obj 800 660 loadbang;
+#X obj 730 720 spigot;
+#X msg 730 745 0;
+#X obj 700 630 receive blue;
+#X obj 780 630 receive red;
+#X obj 400 680 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 420 680 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 450 680 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 300 650 spigot;
+#X obj 350 650 spigot;
+#X obj 400 650 loadbang;
+#X obj 330 710 spigot;
+#X msg 330 735 0;
+#X obj 300 620 receive blue;
+#X obj 380 620 receive red;
+#X obj 720 160 receive mistake2;
+#X obj 1170 160 receive mistake3;
+#X obj 1540 160 receive mistake4;
+#X obj 1930 160 receive mistake5;
+#X obj 1940 700 receive mistake10;
+#X obj 1550 700 receive mistake9;
+#X obj 1150 700 receive mistake8;
+#X obj 690 690 receive mistake7;
+#X obj 290 680 receive mistake6;
+#X connect 0 0 6 0;
+#X connect 0 0 8 1;
+#X connect 1 0 7 0;
+#X connect 1 0 8 2;
+#X connect 2 0 243 1;
+#X connect 3 0 243 2;
+#X connect 4 0 243 3;
+#X connect 5 0 8 0;
+#X connect 6 0 200 0;
+#X connect 7 0 201 0;
+#X connect 8 0 243 0;
+#X connect 9 0 15 0;
+#X connect 9 0 58 1;
+#X connect 10 0 16 0;
+#X connect 10 0 58 2;
+#X connect 11 0 244 1;
+#X connect 12 0 244 2;
+#X connect 13 0 244 3;
+#X connect 14 0 58 0;
+#X connect 15 0 219 0;
+#X connect 16 0 202 0;
+#X connect 17 0 23 0;
+#X connect 17 0 59 1;
+#X connect 18 0 24 0;
+#X connect 18 0 59 2;
+#X connect 19 0 245 1;
+#X connect 20 0 245 2;
+#X connect 21 0 245 3;
+#X connect 22 0 59 0;
+#X connect 23 0 203 0;
+#X connect 24 0 204 0;
+#X connect 25 0 203 0;
+#X connect 25 0 204 0;
+#X connect 26 0 219 0;
+#X connect 26 0 202 0;
+#X connect 27 0 200 0;
+#X connect 27 0 201 0;
+#X connect 28 0 34 0;
+#X connect 28 0 36 1;
+#X connect 29 0 36 2;
+#X connect 30 0 252 1;
+#X connect 31 0 252 2;
+#X connect 32 0 252 3;
+#X connect 33 0 36 0;
+#X connect 34 0 228 0;
+#X connect 35 0 208 0;
+#X connect 36 0 252 0;
+#X connect 37 0 228 0;
+#X connect 37 0 208 0;
+#X connect 38 0 44 0;
+#X connect 38 0 46 1;
+#X connect 39 0 46 2;
+#X connect 40 0 251 1;
+#X connect 41 0 251 2;
+#X connect 42 0 251 3;
+#X connect 43 0 46 0;
+#X connect 44 0 209 0;
+#X connect 45 0 210 0;
+#X connect 46 0 251 0;
+#X connect 47 0 209 0;
+#X connect 47 0 210 0;
+#X connect 48 0 54 0;
+#X connect 48 0 56 1;
+#X connect 49 0 56 2;
+#X connect 50 0 250 1;
+#X connect 51 0 250 2;
+#X connect 52 0 250 3;
+#X connect 53 0 56 0;
+#X connect 54 0 211 0;
+#X connect 55 0 212 0;
+#X connect 56 0 250 0;
+#X connect 57 0 211 0;
+#X connect 57 0 212 0;
+#X connect 58 0 244 0;
+#X connect 59 0 245 0;
+#X connect 60 0 62 0;
+#X connect 61 0 96 0;
+#X connect 61 0 65 0;
+#X connect 62 0 217 0;
+#X connect 63 0 62 0;
+#X connect 64 0 63 0;
+#X connect 64 0 62 0;
+#X connect 65 0 64 0;
+#X connect 66 0 68 0;
+#X connect 67 0 97 0;
+#X connect 67 0 71 0;
+#X connect 68 0 218 0;
+#X connect 69 0 68 0;
+#X connect 70 0 69 0;
+#X connect 70 0 68 0;
+#X connect 71 0 70 0;
+#X connect 72 0 74 0;
+#X connect 73 0 98 0;
+#X connect 73 0 77 0;
+#X connect 74 0 220 0;
+#X connect 75 0 74 0;
+#X connect 76 0 75 0;
+#X connect 76 0 74 0;
+#X connect 77 0 76 0;
+#X connect 78 0 80 0;
+#X connect 79 0 101 0;
+#X connect 79 0 83 0;
+#X connect 80 0 227 0;
+#X connect 81 0 80 0;
+#X connect 82 0 81 0;
+#X connect 82 0 80 0;
+#X connect 83 0 82 0;
+#X connect 84 0 86 0;
+#X connect 85 0 100 0;
+#X connect 85 0 89 0;
+#X connect 86 0 226 0;
+#X connect 87 0 86 0;
+#X connect 88 0 87 0;
+#X connect 88 0 86 0;
+#X connect 89 0 88 0;
+#X connect 90 0 92 0;
+#X connect 91 0 99 0;
+#X connect 91 0 95 0;
+#X connect 92 0 225 0;
+#X connect 93 0 92 0;
+#X connect 94 0 93 0;
+#X connect 94 0 92 0;
+#X connect 95 0 94 0;
+#X connect 96 0 60 0;
+#X connect 96 0 65 0;
+#X connect 97 0 66 0;
+#X connect 97 0 71 0;
+#X connect 98 0 72 0;
+#X connect 98 0 77 0;
+#X connect 99 0 90 0;
+#X connect 99 0 95 0;
+#X connect 100 0 84 0;
+#X connect 100 0 89 0;
+#X connect 101 0 78 0;
+#X connect 101 0 83 0;
+#X connect 102 0 96 0;
+#X connect 103 0 114 0;
+#X connect 104 0 97 0;
+#X connect 105 0 115 0;
+#X connect 106 0 98 0;
+#X connect 107 0 116 0;
+#X connect 108 0 99 0;
+#X connect 109 0 117 0;
+#X connect 110 0 100 0;
+#X connect 111 0 118 0;
+#X connect 112 0 101 0;
+#X connect 113 0 119 0;
+#X connect 114 0 65 0;
+#X connect 114 0 60 0;
+#X connect 115 0 71 0;
+#X connect 115 0 66 0;
+#X connect 116 0 77 0;
+#X connect 116 0 72 0;
+#X connect 117 0 95 0;
+#X connect 117 0 90 0;
+#X connect 118 0 89 0;
+#X connect 118 0 84 0;
+#X connect 119 0 83 0;
+#X connect 119 0 78 0;
+#X connect 120 0 126 0;
+#X connect 120 0 129 1;
+#X connect 121 0 127 0;
+#X connect 121 0 129 2;
+#X connect 122 0 246 1;
+#X connect 123 0 246 2;
+#X connect 124 0 246 3;
+#X connect 125 0 129 0;
+#X connect 126 0 205 0;
+#X connect 127 0 229 0;
+#X connect 128 0 205 0;
+#X connect 128 0 229 0;
+#X connect 129 0 246 0;
+#X connect 130 0 132 0;
+#X connect 131 0 136 0;
+#X connect 131 0 135 0;
+#X connect 132 0 221 0;
+#X connect 133 0 132 0;
+#X connect 134 0 133 0;
+#X connect 134 0 132 0;
+#X connect 135 0 134 0;
+#X connect 136 0 130 0;
+#X connect 136 0 135 0;
+#X connect 137 0 136 0;
+#X connect 138 0 139 0;
+#X connect 139 0 135 0;
+#X connect 139 0 130 0;
+#X connect 140 0 146 0;
+#X connect 140 0 149 1;
+#X connect 141 0 147 0;
+#X connect 141 0 149 2;
+#X connect 142 0 247 1;
+#X connect 143 0 247 2;
+#X connect 144 0 247 3;
+#X connect 145 0 149 0;
+#X connect 146 0 206 0;
+#X connect 147 0 207 0;
+#X connect 148 0 206 0;
+#X connect 148 0 207 0;
+#X connect 149 0 247 0;
+#X connect 150 0 152 0;
+#X connect 151 0 156 0;
+#X connect 151 0 155 0;
+#X connect 152 0 222 0;
+#X connect 153 0 152 0;
+#X connect 154 0 153 0;
+#X connect 154 0 152 0;
+#X connect 155 0 154 0;
+#X connect 156 0 150 0;
+#X connect 156 0 155 0;
+#X connect 157 0 156 0;
+#X connect 158 0 159 0;
+#X connect 159 0 155 0;
+#X connect 159 0 150 0;
+#X connect 160 0 166 0;
+#X connect 160 0 169 1;
+#X connect 161 0 167 0;
+#X connect 161 0 169 2;
+#X connect 162 0 249 1;
+#X connect 163 0 249 2;
+#X connect 164 0 249 3;
+#X connect 165 0 169 0;
+#X connect 166 0 213 0;
+#X connect 167 0 214 0;
+#X connect 168 0 213 0;
+#X connect 168 0 214 0;
+#X connect 169 0 249 0;
+#X connect 170 0 172 0;
+#X connect 171 0 176 0;
+#X connect 171 0 175 0;
+#X connect 172 0 224 0;
+#X connect 173 0 172 0;
+#X connect 174 0 173 0;
+#X connect 174 0 172 0;
+#X connect 175 0 174 0;
+#X connect 176 0 170 0;
+#X connect 176 0 175 0;
+#X connect 177 0 176 0;
+#X connect 178 0 179 0;
+#X connect 179 0 175 0;
+#X connect 179 0 170 0;
+#X connect 180 0 186 0;
+#X connect 180 0 189 1;
+#X connect 181 0 187 0;
+#X connect 181 0 189 2;
+#X connect 182 0 248 1;
+#X connect 183 0 248 2;
+#X connect 184 0 248 3;
+#X connect 185 0 189 0;
+#X connect 186 0 215 0;
+#X connect 187 0 216 0;
+#X connect 188 0 215 0;
+#X connect 188 0 216 0;
+#X connect 189 0 248 0;
+#X connect 190 0 192 0;
+#X connect 191 0 196 0;
+#X connect 191 0 195 0;
+#X connect 192 0 223 0;
+#X connect 193 0 192 0;
+#X connect 194 0 193 0;
+#X connect 194 0 192 0;
+#X connect 195 0 194 0;
+#X connect 196 0 190 0;
+#X connect 196 0 195 0;
+#X connect 197 0 196 0;
+#X connect 198 0 199 0;
+#X connect 199 0 195 0;
+#X connect 199 0 190 0;
+#X connect 200 0 0 0;
+#X connect 200 0 8 1;
+#X connect 201 0 8 2;
+#X connect 201 0 1 0;
+#X connect 202 0 10 0;
+#X connect 202 0 58 2;
+#X connect 203 0 17 0;
+#X connect 203 0 59 1;
+#X connect 204 0 18 0;
+#X connect 204 0 59 2;
+#X connect 205 0 120 0;
+#X connect 205 0 129 1;
+#X connect 206 0 140 0;
+#X connect 206 0 149 1;
+#X connect 207 0 141 0;
+#X connect 207 0 149 2;
+#X connect 208 0 36 2;
+#X connect 208 0 29 0;
+#X connect 209 0 38 0;
+#X connect 209 0 46 1;
+#X connect 210 0 46 2;
+#X connect 210 0 39 0;
+#X connect 211 0 48 0;
+#X connect 211 0 56 1;
+#X connect 212 0 56 2;
+#X connect 212 0 49 0;
+#X connect 213 0 160 0;
+#X connect 213 0 169 1;
+#X connect 214 0 161 0;
+#X connect 214 0 169 2;
+#X connect 215 0 180 0;
+#X connect 215 0 189 1;
+#X connect 216 0 181 0;
+#X connect 216 0 189 2;
+#X connect 219 0 9 0;
+#X connect 219 0 58 1;
+#X connect 228 0 28 0;
+#X connect 228 0 36 1;
+#X connect 229 0 121 0;
+#X connect 229 0 129 2;
+#X connect 231 0 232 0;
+#X connect 231 0 234 1;
+#X connect 231 0 241 1;
+#X connect 232 0 233 0;
+#X connect 233 0 235 1;
+#X connect 234 0 231 0;
+#X connect 235 0 231 0;
+#X connect 236 0 233 0;
+#X connect 239 0 237 0;
+#X connect 240 0 238 0;
+#X connect 241 0 253 0;
+#X connect 242 0 241 0;
+#X connect 243 0 60 0;
+#X connect 244 0 66 0;
+#X connect 245 0 72 0;
+#X connect 246 0 130 0;
+#X connect 247 0 150 0;
+#X connect 248 0 190 0;
+#X connect 249 0 170 0;
+#X connect 250 0 90 0;
+#X connect 251 0 84 0;
+#X connect 252 0 78 0;
+#X connect 253 0 64 0;
+#X connect 254 0 234 0;
+#X connect 255 0 235 0;
+#X connect 256 0 257 0;
+#X connect 256 0 259 1;
+#X connect 256 0 262 1;
+#X connect 257 0 258 0;
+#X connect 258 0 260 1;
+#X connect 259 0 256 0;
+#X connect 260 0 256 0;
+#X connect 261 0 258 0;
+#X connect 262 0 263 0;
+#X connect 263 0 70 0;
+#X connect 264 0 259 0;
+#X connect 265 0 260 0;
+#X connect 266 0 267 0;
+#X connect 266 0 269 1;
+#X connect 266 0 272 1;
+#X connect 267 0 268 0;
+#X connect 268 0 270 1;
+#X connect 269 0 266 0;
+#X connect 270 0 266 0;
+#X connect 271 0 268 0;
+#X connect 272 0 273 0;
+#X connect 273 0 76 0;
+#X connect 274 0 269 0;
+#X connect 275 0 270 0;
+#X connect 276 0 277 0;
+#X connect 276 0 279 1;
+#X connect 276 0 282 1;
+#X connect 277 0 278 0;
+#X connect 278 0 280 1;
+#X connect 279 0 276 0;
+#X connect 280 0 276 0;
+#X connect 281 0 278 0;
+#X connect 282 0 283 0;
+#X connect 283 0 134 0;
+#X connect 284 0 279 0;
+#X connect 285 0 280 0;
+#X connect 286 0 287 0;
+#X connect 286 0 289 1;
+#X connect 286 0 292 1;
+#X connect 287 0 288 0;
+#X connect 288 0 290 1;
+#X connect 289 0 286 0;
+#X connect 290 0 286 0;
+#X connect 291 0 288 0;
+#X connect 292 0 293 0;
+#X connect 293 0 154 0;
+#X connect 294 0 289 0;
+#X connect 295 0 290 0;
+#X connect 296 0 297 0;
+#X connect 296 0 299 1;
+#X connect 296 0 302 1;
+#X connect 297 0 298 0;
+#X connect 298 0 300 1;
+#X connect 299 0 296 0;
+#X connect 300 0 296 0;
+#X connect 301 0 298 0;
+#X connect 302 0 303 0;
+#X connect 303 0 194 0;
+#X connect 304 0 299 0;
+#X connect 305 0 300 0;
+#X connect 306 0 307 0;
+#X connect 306 0 309 1;
+#X connect 306 0 312 1;
+#X connect 307 0 308 0;
+#X connect 308 0 310 1;
+#X connect 309 0 306 0;
+#X connect 310 0 306 0;
+#X connect 311 0 308 0;
+#X connect 312 0 313 0;
+#X connect 313 0 174 0;
+#X connect 314 0 309 0;
+#X connect 315 0 310 0;
+#X connect 316 0 317 0;
+#X connect 316 0 319 1;
+#X connect 316 0 322 1;
+#X connect 317 0 318 0;
+#X connect 318 0 320 1;
+#X connect 319 0 316 0;
+#X connect 320 0 316 0;
+#X connect 321 0 318 0;
+#X connect 322 0 323 0;
+#X connect 323 0 94 0;
+#X connect 324 0 319 0;
+#X connect 325 0 320 0;
+#X connect 326 0 327 0;
+#X connect 326 0 329 1;
+#X connect 326 0 332 1;
+#X connect 327 0 328 0;
+#X connect 328 0 330 1;
+#X connect 329 0 326 0;
+#X connect 330 0 326 0;
+#X connect 331 0 328 0;
+#X connect 332 0 333 0;
+#X connect 333 0 88 0;
+#X connect 334 0 329 0;
+#X connect 335 0 330 0;
+#X connect 336 0 337 0;
+#X connect 336 0 339 1;
+#X connect 336 0 342 1;
+#X connect 337 0 338 0;
+#X connect 338 0 340 1;
+#X connect 339 0 336 0;
+#X connect 340 0 336 0;
+#X connect 341 0 338 0;
+#X connect 342 0 343 0;
+#X connect 343 0 82 0;
+#X connect 344 0 339 0;
+#X connect 345 0 340 0;
+#X connect 346 0 262 0;
+#X connect 347 0 272 0;
+#X connect 348 0 282 0;
+#X connect 349 0 292 0;
+#X connect 350 0 302 0;
+#X connect 351 0 312 0;
+#X connect 352 0 322 0;
+#X connect 353 0 332 0;
+#X connect 354 0 342 0;
+#X restore 170 490 pd WaterBlue_Tiles;
+#N canvas 0 0 114 0 SandRed_Tiles 0;
+#X obj 162 72 hsl 87 15 -6 6 0 0 empty empty empty -2 -8 0 10 #fcfcfc
+#000000 #000000 2007 1;
+#X obj 162 92 hsl 88 15 -6 6 0 0 empty empty empty -2 -8 0 10 #fcfcfc
+#000000 #000000 6670 1;
+#X floatatom 160 140 6 0 0 0 - - -, f 6;
+#X floatatom 210 140 6 0 0 0 - - -, f 6;
+#X floatatom 260 140 6 0 0 0 - - -, f 6;
+#X obj 142 2 gemhead;
+#X msg 162 22 set \$1;
+#X msg 232 22 set \$1;
+#X obj 142 122 translateXYZ 0 0 0;
+#X obj 590 90 hsl 87 15 -6 6 0 0 empty empty empty -2 -8 0 10 #fcfcfc
+#000000 #000000 2007 1;
+#X obj 590 110 hsl 88 15 -6 6 0 0 empty empty empty -2 -8 0 10 #fcfcfc
+#000000 #000000 5510 1;
+#X floatatom 570 160 4 0 0 0 - - -, f 4;
+#X floatatom 600 160 4 0 0 0 - - -, f 4;
+#X floatatom 630 160 4 0 0 0 - - -, f 4;
+#X obj 550 20 gemhead;
+#X msg 570 40 set \$1;
+#X msg 640 40 set \$1;
+#X obj 550 140 translateXYZ 0 0 0;
+#X obj 1010 80 hsl 87 15 -6 6 0 0 empty empty empty -2 -8 0 10 #fcfcfc
+#000000 #000000 2007 1;
+#X obj 1010 100 hsl 88 15 -6 6 0 0 empty empty empty -2 -8 0 10 #fcfcfc
+#000000 #000000 4350 1;
+#X floatatom 990 150 4 0 0 0 - - -, f 4;
+#X floatatom 1020 150 4 0 0 0 - - -, f 4;
+#X floatatom 1050 150 4 0 0 0 - - -, f 4;
+#X obj 970 10 gemhead;
+#X msg 990 30 set \$1;
+#X msg 1060 30 set \$1;
+#X obj 970 130 translateXYZ 0 0 0;
+#X obj 180 520 hsl 87 15 -6 6 0 0 empty empty empty -2 -8 0 10 #fcfcfc
+#000000 #000000 4300 1;
+#X obj 180 540 hsl 88 15 -6 6 0 0 empty empty empty -2 -8 0 10 #fcfcfc
+#000000 #000000 5510 1;
+#X floatatom 160 590 4 0 0 0 - - -, f 4;
+#X floatatom 190 590 4 0 0 0 - - -, f 4;
+#X floatatom 220 590 4 0 0 0 - - -, f 4;
+#X obj 140 450 gemhead;
+#X msg 160 470 set \$1;
+#X msg 230 470 set \$1;
+#X obj 140 570 translateXYZ 0 0 0;
+#X obj 280 80 loadbang;
+#X obj 698 108 loadbang;
+#X obj 278 558 loadbang;
+#X obj 1108 98 loadbang;
+#X obj 590 510 hsl 87 15 -6 6 0 0 empty empty empty -2 -8 0 10 #fcfcfc
+#000000 #000000 5447 1;
+#X obj 590 530 hsl 88 15 -6 6 0 0 empty empty empty -2 -8 0 10 #fcfcfc
+#000000 #000000 5510 1;
+#X floatatom 570 580 4 0 0 0 - - -, f 4;
+#X floatatom 600 580 4 0 0 0 - - -, f 4;
+#X floatatom 630 580 4 0 0 0 - - -, f 4;
+#X obj 550 440 gemhead;
+#X msg 570 460 set \$1;
+#X msg 640 460 set \$1;
+#X obj 550 560 translateXYZ 0 0 0;
+#X obj 688 548 loadbang;
+#X obj 1008 488 hsl 87 15 -6 6 0 0 empty empty empty -2 -8 0 10 #fcfcfc
+#000000 #000000 6593 1;
+#X obj 1008 508 hsl 88 15 -6 6 0 0 empty empty empty -2 -8 0 10 #fcfcfc
+#000000 #000000 4350 1;
+#X floatatom 988 558 4 0 0 0 - - -, f 4;
+#X floatatom 1018 558 4 0 0 0 - - -, f 4;
+#X floatatom 1048 558 4 0 0 0 - - -, f 4;
+#X obj 968 418 gemhead;
+#X msg 988 438 set \$1;
+#X msg 1058 438 set \$1;
+#X obj 968 538 translateXYZ 0 0 0;
+#X obj 1106 526 loadbang;
+#X obj 970 290 pix_image;
+#X obj 1000 210 loadbang;
+#X obj 970 360 pix_texture;
+#X msg 1052 322 env \$1;
+#X obj 1052 302 hradio 15 1 0 6 empty empty empty 0 -6 0 8 #fcfcfc
+#000000 #000000 1;
+#X msg 1052 272 1;
+#X obj 970 700 pix_image;
+#X obj 1004 620 loadbang;
+#X obj 970 770 pix_texture;
+#X msg 1056 732 env \$1;
+#X obj 1056 712 hradio 15 1 0 6 empty empty empty 0 -6 0 8 #fcfcfc
+#000000 #000000 1;
+#X msg 1056 682 1;
+#X obj 550 300 pix_image;
+#X obj 592 222 loadbang;
+#X obj 550 370 pix_texture;
+#X msg 630 340 env \$1;
+#X obj 630 310 hradio 15 1 0 6 empty empty empty 0 -6 0 8 #fcfcfc #000000
+#000000 1;
+#X msg 644 284 1;
+#X obj 550 727 pix_image;
+#X obj 580 647 loadbang;
+#X obj 550 797 pix_texture;
+#X msg 632 759 env \$1;
+#X obj 632 739 hradio 15 1 0 6 empty empty empty 0 -6 0 8 #fcfcfc #000000
+#000000 1;
+#X msg 632 709 1;
+#X obj 142 301 pix_image;
+#X obj 172 221 loadbang;
+#X obj 142 371 pix_texture;
+#X msg 224 333 env \$1;
+#X obj 224 313 hradio 15 1 0 6 empty empty empty 0 -6 0 8 #fcfcfc #000000
+#000000 1;
+#X msg 224 283 1;
+#X obj 142 732 pix_image;
+#X obj 172 652 loadbang;
+#X obj 142 802 pix_texture;
+#X msg 224 764 env \$1;
+#X obj 224 744 hradio 15 1 0 6 empty empty empty 0 -6 0 8 #fcfcfc #000000
+#000000 1;
+#X msg 224 714 1;
+#X msg 170 250 open Art/Sand.png;
+#X msg 172 682 open Art/Sand.png;
+#X msg 580 677 open Art/Sand.png;
+#X msg 1004 650 open Art/Sand.png;
+#X msg 1000 240 open Art/Sand.png;
+#X msg 592 252 open Art/Sand.png;
+#X msg 290 250 open Art/Water.png;
+#X obj 250 220 receive red;
+#X obj 330 220 receive blue;
+#X msg 710 250 open Art/Water.png;
+#X obj 670 220 receive red;
+#X obj 750 220 receive blue;
+#X msg 1120 240 open Art/Water.png;
+#X obj 1080 210 receive red;
+#X obj 1160 210 receive blue;
+#X msg 1130 650 open Art/Water.png;
+#X obj 1080 620 receive red;
+#X obj 1160 620 receive blue;
+#X msg 700 670 open Art/Water.png;
+#X obj 660 640 receive red;
+#X obj 740 640 receive blue;
+#X msg 290 680 open Art/Water.png;
+#X obj 250 650 receive red;
+#X obj 330 650 receive blue;
+#X obj 1380 80 hsl 87 15 -6 6 0 0 empty empty empty -2 -8 0 10 #fcfcfc
+#000000 #000000 3153 1;
+#X obj 1380 100 hsl 88 15 -6 6 0 0 empty empty empty -2 -8 0 10 #fcfcfc
+#000000 #000000 3190 1;
+#X floatatom 1360 150 4 0 0 0 - - -, f 4;
+#X floatatom 1390 150 4 0 0 0 - - -, f 4;
+#X floatatom 1420 150 4 0 0 0 - - -, f 4;
+#X obj 1340 10 gemhead;
+#X msg 1360 30 set \$1;
+#X msg 1430 30 set \$1;
+#X obj 1340 130 translateXYZ 0 0 0;
+#X obj 1800 70 hsl 87 15 -6 6 0 0 empty empty empty -2 -8 0 10 #fcfcfc
+#000000 #000000 4300 1;
+#X obj 1800 90 hsl 88 15 -6 6 0 0 empty empty empty -2 -8 0 10 #fcfcfc
+#000000 #000000 3190 1;
+#X floatatom 1780 140 4 0 0 0 - - -, f 4;
+#X floatatom 1810 140 4 0 0 0 - - -, f 4;
+#X floatatom 1840 140 4 0 0 0 - - -, f 4;
+#X obj 1760 0 gemhead;
+#X msg 1780 20 set \$1;
+#X msg 1850 20 set \$1;
+#X obj 1760 120 translateXYZ 0 0 0;
+#X obj 1488 98 loadbang;
+#X obj 1898 88 loadbang;
+#X obj 1380 500 hsl 87 15 -6 6 0 0 empty empty empty -2 -8 0 10 #fcfcfc
+#000000 #000000 6593 1;
+#X obj 1380 520 hsl 88 15 -6 6 0 0 empty empty empty -2 -8 0 10 #fcfcfc
+#000000 #000000 3190 1;
+#X floatatom 1360 570 4 0 0 0 - - -, f 4;
+#X floatatom 1390 570 4 0 0 0 - - -, f 4;
+#X floatatom 1420 570 4 0 0 0 - - -, f 4;
+#X obj 1340 430 gemhead;
+#X msg 1360 450 set \$1;
+#X msg 1430 450 set \$1;
+#X obj 1340 550 translateXYZ 0 0 0;
+#X obj 1478 538 loadbang;
+#X obj 1798 478 hsl 87 15 -6 6 0 0 empty empty empty -2 -8 0 10 #fcfcfc
+#000000 #000000 6593 1;
+#X obj 1798 498 hsl 88 15 -6 6 0 0 empty empty empty -2 -8 0 10 #fcfcfc
+#000000 #000000 2030 1;
+#X floatatom 1778 548 4 0 0 0 - - -, f 4;
+#X floatatom 1808 548 4 0 0 0 - - -, f 4;
+#X floatatom 1838 548 4 0 0 0 - - -, f 4;
+#X obj 1758 408 gemhead;
+#X msg 1778 428 set \$1;
+#X msg 1848 428 set \$1;
+#X obj 1758 528 translateXYZ 0 0 0;
+#X obj 1896 516 loadbang;
+#X obj 1760 280 pix_image;
+#X obj 1790 200 loadbang;
+#X obj 1760 350 pix_texture;
+#X msg 1842 312 env \$1;
+#X obj 1842 292 hradio 15 1 0 6 empty empty empty 0 -6 0 8 #fcfcfc
+#000000 #000000 1;
+#X msg 1842 262 1;
+#X obj 1760 690 pix_image;
+#X obj 1794 610 loadbang;
+#X obj 1760 760 pix_texture;
+#X msg 1840 720 env \$1;
+#X obj 1840 700 hradio 15 1 0 6 empty empty empty 0 -6 0 8 #fcfcfc
+#000000 #000000 1;
+#X msg 1846 672 1;
+#X obj 1340 290 pix_image;
+#X obj 1382 212 loadbang;
+#X obj 1340 360 pix_texture;
+#X msg 1420 330 env \$1;
+#X obj 1420 300 hradio 15 1 0 6 empty empty empty 0 -6 0 8 #fcfcfc
+#000000 #000000 1;
+#X msg 1434 274 1;
+#X obj 1340 717 pix_image;
+#X obj 1370 637 loadbang;
+#X obj 1340 787 pix_texture;
+#X msg 1422 749 env \$1;
+#X obj 1422 729 hradio 15 1 0 6 empty empty empty 0 -6 0 8 #fcfcfc
+#000000 #000000 1;
+#X msg 1422 699 1;
+#X msg 1370 667 open Art/Sand.png;
+#X msg 1794 640 open Art/Sand.png;
+#X msg 1790 230 open Art/Sand.png;
+#X msg 1382 242 open Art/Sand.png;
+#X msg 1500 240 open Art/Water.png;
+#X obj 1460 210 receive red;
+#X obj 1540 210 receive blue;
+#X msg 1910 230 open Art/Water.png;
+#X obj 1870 200 receive red;
+#X obj 1950 200 receive blue;
+#X msg 1920 640 open Art/Water.png;
+#X obj 1870 610 receive red;
+#X obj 1950 610 receive blue;
+#X msg 1490 660 open Art/Water.png;
+#X obj 1450 630 receive red;
+#X obj 1530 630 receive blue;
+#X obj 140 420 square 0.8;
+#X obj 550 400 square 0.8;
+#X obj 970 390 square 0.8;
+#X obj 1340 390 square 0.8;
+#X obj 1760 380 square 0.8;
+#X obj 1760 790 square 0.8;
+#X obj 1340 830 square 0.8;
+#X obj 970 800 square 0.8;
+#X obj 550 840 square 0.8;
+#X obj 140 830 square 0.8;
+#X msg 162 42 -3.2;
+#X msg 232 42 3.2;
+#X msg 570 60 -3.2;
+#X msg 640 60 1.6;
+#X msg 990 50 -3.2;
+#X msg 1060 50 0;
+#X msg 1360 50 -1.6;
+#X msg 1780 40 0;
+#X msg 1850 40 -1.6;
+#X msg 1430 50 -1.6;
+#X msg 160 490 0;
+#X msg 230 490 1.6;
+#X msg 570 480 1.6;
+#X msg 640 480 1.6;
+#X msg 988 458 3.2;
+#X msg 1058 458 0;
+#X msg 1360 470 3.2;
+#X msg 1430 470 -1.6;
+#X msg 1778 448 3.2;
+#X msg 1848 448 -3.2;
+#X text 850 20 RED;
+#X obj 453 95 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 473 95 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 503 95 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 353 65 spigot;
+#X obj 403 65 spigot;
+#X obj 453 65 loadbang;
+#X obj 383 125 spigot;
+#X obj 343 95 receive mistake1;
+#X msg 383 150 0;
+#X obj 353 35 receive red;
+#X obj 433 35 receive blue;
+#X obj 142 172 colorRGB 1 0 0 0;
+#X obj 1760 170 colorRGB 1 0 0 0;
+#X obj 1340 180 colorRGB 1 0 0 0;
+#X obj 970 180 colorRGB 1 0 0 0;
+#X obj 550 190 colorRGB 1 0 0 0;
+#X obj 140 620 colorRGB 1 0 0 0;
+#X obj 550 610 colorRGB 1 0 0 0;
+#X obj 968 588 colorRGB 1 0 0 0;
+#X obj 1340 600 colorRGB 1 0 0 0;
+#X obj 1758 578 colorRGB 1 0 0 0;
+#X obj 870 110 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 890 110 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 920 110 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 770 80 spigot;
+#X obj 820 80 spigot;
+#X obj 870 80 loadbang;
+#X obj 800 140 spigot;
+#X msg 800 165 0;
+#X obj 770 50 receive red;
+#X obj 850 50 receive blue;
+#X obj 760 110 receive mistake2;
+#X obj 1280 90 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 1300 90 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 1330 90 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 1180 60 spigot;
+#X obj 1230 60 spigot;
+#X obj 1280 60 loadbang;
+#X obj 1210 120 spigot;
+#X msg 1210 145 0;
+#X obj 1180 30 receive red;
+#X obj 1260 30 receive blue;
+#X obj 1660 100 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 1680 100 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 1710 100 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 1560 70 spigot;
+#X obj 1610 70 spigot;
+#X obj 1660 70 loadbang;
+#X obj 1590 130 spigot;
+#X msg 1590 155 0;
+#X obj 1560 40 receive red;
+#X obj 1640 40 receive blue;
+#X obj 2070 90 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 2090 90 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 2120 90 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 1970 60 spigot;
+#X obj 2020 60 spigot;
+#X obj 2070 60 loadbang;
+#X obj 2000 120 spigot;
+#X msg 2000 145 0;
+#X obj 1970 30 receive red;
+#X obj 2050 30 receive blue;
+#X obj 2050 470 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 2070 470 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 2100 470 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 1950 440 spigot;
+#X obj 2000 440 spigot;
+#X obj 2050 440 loadbang;
+#X obj 1980 500 spigot;
+#X msg 1980 525 0;
+#X obj 1950 410 receive red;
+#X obj 2030 410 receive blue;
+#X obj 1640 510 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 1660 510 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 1690 510 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 1540 480 spigot;
+#X obj 1590 480 spigot;
+#X obj 1640 480 loadbang;
+#X obj 1570 540 spigot;
+#X msg 1570 565 0;
+#X obj 1540 450 receive red;
+#X obj 1620 450 receive blue;
+#X obj 1250 490 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 1270 490 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 1300 490 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 1150 460 spigot;
+#X obj 1200 460 spigot;
+#X obj 1250 460 loadbang;
+#X obj 1180 520 spigot;
+#X msg 1180 545 0;
+#X obj 1150 430 receive red;
+#X obj 1230 430 receive blue;
+#X obj 850 510 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 870 510 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 900 510 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 750 480 spigot;
+#X obj 800 480 spigot;
+#X obj 850 480 loadbang;
+#X obj 780 540 spigot;
+#X msg 780 565 0;
+#X obj 750 450 receive red;
+#X obj 830 450 receive blue;
+#X obj 450 520 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 470 520 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 500 520 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 350 490 spigot;
+#X obj 400 490 spigot;
+#X obj 450 490 loadbang;
+#X obj 380 550 spigot;
+#X msg 380 575 0;
+#X obj 350 460 receive red;
+#X obj 430 460 receive blue;
+#X obj 1170 90 receive mistake3;
+#X obj 1550 100 receive mistake4;
+#X obj 1960 90 receive mistake5;
+#X obj 1940 470 receive mistake10;
+#X obj 1530 510 receive mistake9;
+#X obj 1140 490 receive mistake8;
+#X obj 740 510 receive mistake7;
+#X obj 340 520 receive mistake6;
+#X connect 0 0 6 0;
+#X connect 0 0 8 1;
+#X connect 1 0 7 0;
+#X connect 1 0 8 2;
+#X connect 2 0 242 1;
+#X connect 3 0 242 2;
+#X connect 4 0 242 3;
+#X connect 5 0 8 0;
+#X connect 6 0 210 0;
+#X connect 7 0 211 0;
+#X connect 8 0 242 0;
+#X connect 9 0 15 0;
+#X connect 9 0 17 1;
+#X connect 10 0 16 0;
+#X connect 10 0 17 2;
+#X connect 11 0 246 1;
+#X connect 12 0 246 2;
+#X connect 13 0 246 3;
+#X connect 14 0 17 0;
+#X connect 15 0 212 0;
+#X connect 16 0 213 0;
+#X connect 17 0 246 0;
+#X connect 18 0 24 0;
+#X connect 18 0 26 1;
+#X connect 19 0 25 0;
+#X connect 19 0 26 2;
+#X connect 20 0 245 1;
+#X connect 21 0 245 2;
+#X connect 22 0 245 3;
+#X connect 23 0 26 0;
+#X connect 24 0 214 0;
+#X connect 25 0 215 0;
+#X connect 26 0 245 0;
+#X connect 27 0 33 0;
+#X connect 27 0 35 1;
+#X connect 28 0 34 0;
+#X connect 28 0 35 2;
+#X connect 29 0 247 1;
+#X connect 30 0 247 2;
+#X connect 31 0 247 3;
+#X connect 32 0 35 0;
+#X connect 33 0 220 0;
+#X connect 34 0 221 0;
+#X connect 35 0 247 0;
+#X connect 36 0 210 0;
+#X connect 36 0 211 0;
+#X connect 37 0 212 0;
+#X connect 37 0 213 0;
+#X connect 38 0 220 0;
+#X connect 38 0 221 0;
+#X connect 39 0 214 0;
+#X connect 39 0 215 0;
+#X connect 40 0 46 0;
+#X connect 40 0 48 1;
+#X connect 41 0 47 0;
+#X connect 41 0 48 2;
+#X connect 42 0 248 1;
+#X connect 43 0 248 2;
+#X connect 44 0 248 3;
+#X connect 45 0 48 0;
+#X connect 46 0 222 0;
+#X connect 47 0 223 0;
+#X connect 48 0 248 0;
+#X connect 49 0 222 0;
+#X connect 49 0 223 0;
+#X connect 50 0 56 0;
+#X connect 50 0 58 1;
+#X connect 51 0 57 0;
+#X connect 51 0 58 2;
+#X connect 52 0 249 1;
+#X connect 53 0 249 2;
+#X connect 54 0 249 3;
+#X connect 55 0 58 0;
+#X connect 56 0 224 0;
+#X connect 57 0 225 0;
+#X connect 58 0 249 0;
+#X connect 59 0 224 0;
+#X connect 59 0 225 0;
+#X connect 60 0 62 0;
+#X connect 61 0 100 0;
+#X connect 61 0 65 0;
+#X connect 62 0 202 0;
+#X connect 63 0 62 0;
+#X connect 64 0 63 0;
+#X connect 64 0 62 0;
+#X connect 65 0 64 0;
+#X connect 66 0 68 0;
+#X connect 67 0 99 0;
+#X connect 67 0 71 0;
+#X connect 68 0 207 0;
+#X connect 69 0 68 0;
+#X connect 70 0 69 0;
+#X connect 70 0 68 0;
+#X connect 71 0 70 0;
+#X connect 72 0 74 0;
+#X connect 73 0 101 0;
+#X connect 73 0 77 0;
+#X connect 74 0 201 0;
+#X connect 75 0 74 0;
+#X connect 76 0 75 0;
+#X connect 76 0 74 0;
+#X connect 77 0 76 0;
+#X connect 78 0 80 0;
+#X connect 79 0 98 0;
+#X connect 79 0 83 0;
+#X connect 80 0 208 0;
+#X connect 81 0 80 0;
+#X connect 82 0 81 0;
+#X connect 82 0 80 0;
+#X connect 83 0 82 0;
+#X connect 84 0 86 0;
+#X connect 85 0 96 0;
+#X connect 85 0 89 0;
+#X connect 86 0 200 0;
+#X connect 87 0 86 0;
+#X connect 88 0 87 0;
+#X connect 88 0 86 0;
+#X connect 89 0 88 0;
+#X connect 90 0 92 0;
+#X connect 91 0 97 0;
+#X connect 91 0 95 0;
+#X connect 92 0 209 0;
+#X connect 93 0 92 0;
+#X connect 94 0 93 0;
+#X connect 94 0 92 0;
+#X connect 95 0 94 0;
+#X connect 96 0 84 0;
+#X connect 96 0 89 0;
+#X connect 97 0 90 0;
+#X connect 97 0 95 0;
+#X connect 98 0 78 0;
+#X connect 98 0 83 0;
+#X connect 99 0 66 0;
+#X connect 99 0 71 0;
+#X connect 100 0 60 0;
+#X connect 100 0 65 0;
+#X connect 101 0 72 0;
+#X connect 101 0 77 0;
+#X connect 102 0 89 0;
+#X connect 102 0 84 0;
+#X connect 103 0 96 0;
+#X connect 104 0 102 0;
+#X connect 105 0 77 0;
+#X connect 105 0 72 0;
+#X connect 106 0 101 0;
+#X connect 107 0 105 0;
+#X connect 108 0 65 0;
+#X connect 108 0 60 0;
+#X connect 109 0 100 0;
+#X connect 110 0 108 0;
+#X connect 111 0 71 0;
+#X connect 111 0 66 0;
+#X connect 112 0 99 0;
+#X connect 113 0 111 0;
+#X connect 114 0 83 0;
+#X connect 114 0 78 0;
+#X connect 115 0 98 0;
+#X connect 116 0 114 0;
+#X connect 117 0 90 0;
+#X connect 117 0 95 0;
+#X connect 118 0 97 0;
+#X connect 119 0 117 0;
+#X connect 120 0 126 0;
+#X connect 120 0 128 1;
+#X connect 121 0 127 0;
+#X connect 121 0 128 2;
+#X connect 122 0 244 1;
+#X connect 123 0 244 2;
+#X connect 124 0 244 3;
+#X connect 125 0 128 0;
+#X connect 126 0 216 0;
+#X connect 127 0 219 0;
+#X connect 128 0 244 0;
+#X connect 129 0 135 0;
+#X connect 129 0 137 1;
+#X connect 130 0 136 0;
+#X connect 130 0 137 2;
+#X connect 131 0 243 1;
+#X connect 132 0 243 2;
+#X connect 133 0 243 3;
+#X connect 134 0 137 0;
+#X connect 135 0 217 0;
+#X connect 136 0 218 0;
+#X connect 137 0 243 0;
+#X connect 138 0 216 0;
+#X connect 138 0 219 0;
+#X connect 139 0 217 0;
+#X connect 139 0 218 0;
+#X connect 140 0 146 0;
+#X connect 140 0 148 1;
+#X connect 141 0 147 0;
+#X connect 141 0 148 2;
+#X connect 142 0 250 1;
+#X connect 143 0 250 2;
+#X connect 144 0 250 3;
+#X connect 145 0 148 0;
+#X connect 146 0 226 0;
+#X connect 147 0 227 0;
+#X connect 148 0 250 0;
+#X connect 149 0 226 0;
+#X connect 149 0 227 0;
+#X connect 150 0 156 0;
+#X connect 150 0 158 1;
+#X connect 151 0 157 0;
+#X connect 151 0 158 2;
+#X connect 152 0 251 1;
+#X connect 153 0 251 2;
+#X connect 154 0 251 3;
+#X connect 155 0 158 0;
+#X connect 156 0 228 0;
+#X connect 157 0 229 0;
+#X connect 158 0 251 0;
+#X connect 159 0 228 0;
+#X connect 159 0 229 0;
+#X connect 160 0 162 0;
+#X connect 161 0 186 0;
+#X connect 161 0 165 0;
+#X connect 162 0 204 0;
+#X connect 163 0 162 0;
+#X connect 164 0 163 0;
+#X connect 164 0 162 0;
+#X connect 165 0 164 0;
+#X connect 166 0 168 0;
+#X connect 167 0 185 0;
+#X connect 167 0 171 0;
+#X connect 168 0 205 0;
+#X connect 169 0 168 0;
+#X connect 170 0 169 0;
+#X connect 170 0 168 0;
+#X connect 171 0 170 0;
+#X connect 172 0 174 0;
+#X connect 173 0 187 0;
+#X connect 173 0 177 0;
+#X connect 174 0 203 0;
+#X connect 175 0 174 0;
+#X connect 176 0 175 0;
+#X connect 176 0 174 0;
+#X connect 177 0 176 0;
+#X connect 178 0 180 0;
+#X connect 179 0 184 0;
+#X connect 179 0 183 0;
+#X connect 180 0 206 0;
+#X connect 181 0 180 0;
+#X connect 182 0 181 0;
+#X connect 182 0 180 0;
+#X connect 183 0 182 0;
+#X connect 184 0 178 0;
+#X connect 184 0 183 0;
+#X connect 185 0 166 0;
+#X connect 185 0 171 0;
+#X connect 186 0 160 0;
+#X connect 186 0 165 0;
+#X connect 187 0 172 0;
+#X connect 187 0 177 0;
+#X connect 188 0 177 0;
+#X connect 188 0 172 0;
+#X connect 189 0 187 0;
+#X connect 190 0 188 0;
+#X connect 191 0 165 0;
+#X connect 191 0 160 0;
+#X connect 192 0 186 0;
+#X connect 193 0 191 0;
+#X connect 194 0 171 0;
+#X connect 194 0 166 0;
+#X connect 195 0 185 0;
+#X connect 196 0 194 0;
+#X connect 197 0 183 0;
+#X connect 197 0 178 0;
+#X connect 198 0 184 0;
+#X connect 199 0 197 0;
+#X connect 210 0 0 0;
+#X connect 210 0 8 1;
+#X connect 211 0 8 2;
+#X connect 211 0 1 0;
+#X connect 212 0 9 0;
+#X connect 212 0 17 1;
+#X connect 213 0 17 2;
+#X connect 213 0 10 0;
+#X connect 214 0 18 0;
+#X connect 214 0 26 1;
+#X connect 215 0 26 2;
+#X connect 215 0 19 0;
+#X connect 216 0 120 0;
+#X connect 216 0 128 1;
+#X connect 217 0 129 0;
+#X connect 217 0 137 1;
+#X connect 218 0 137 2;
+#X connect 218 0 130 0;
+#X connect 219 0 128 2;
+#X connect 219 0 121 0;
+#X connect 220 0 27 0;
+#X connect 220 0 35 1;
+#X connect 221 0 35 2;
+#X connect 221 0 28 0;
+#X connect 222 0 40 0;
+#X connect 222 0 48 1;
+#X connect 223 0 48 2;
+#X connect 223 0 41 0;
+#X connect 224 0 50 0;
+#X connect 224 0 58 1;
+#X connect 225 0 58 2;
+#X connect 225 0 51 0;
+#X connect 226 0 140 0;
+#X connect 226 0 148 1;
+#X connect 227 0 148 2;
+#X connect 227 0 141 0;
+#X connect 228 0 150 0;
+#X connect 228 0 158 1;
+#X connect 229 0 158 2;
+#X connect 229 0 151 0;
+#X connect 231 0 232 0;
+#X connect 231 0 234 1;
+#X connect 231 0 237 1;
+#X connect 232 0 233 0;
+#X connect 233 0 235 1;
+#X connect 234 0 231 0;
+#X connect 235 0 231 0;
+#X connect 236 0 233 0;
+#X connect 237 0 239 0;
+#X connect 238 0 237 0;
+#X connect 239 0 88 0;
+#X connect 240 0 234 0;
+#X connect 241 0 235 0;
+#X connect 242 0 84 0;
+#X connect 243 0 160 0;
+#X connect 244 0 172 0;
+#X connect 245 0 60 0;
+#X connect 246 0 72 0;
+#X connect 247 0 90 0;
+#X connect 248 0 78 0;
+#X connect 249 0 66 0;
+#X connect 250 0 178 0;
+#X connect 251 0 166 0;
+#X connect 252 0 253 0;
+#X connect 252 0 255 1;
+#X connect 252 0 258 1;
+#X connect 253 0 254 0;
+#X connect 254 0 256 1;
+#X connect 255 0 252 0;
+#X connect 256 0 252 0;
+#X connect 257 0 254 0;
+#X connect 258 0 259 0;
+#X connect 259 0 76 0;
+#X connect 260 0 255 0;
+#X connect 261 0 256 0;
+#X connect 262 0 258 0;
+#X connect 263 0 264 0;
+#X connect 263 0 266 1;
+#X connect 263 0 269 1;
+#X connect 264 0 265 0;
+#X connect 265 0 267 1;
+#X connect 266 0 263 0;
+#X connect 267 0 263 0;
+#X connect 268 0 265 0;
+#X connect 269 0 270 0;
+#X connect 270 0 64 0;
+#X connect 271 0 266 0;
+#X connect 272 0 267 0;
+#X connect 273 0 274 0;
+#X connect 273 0 276 1;
+#X connect 273 0 279 1;
+#X connect 274 0 275 0;
+#X connect 275 0 277 1;
+#X connect 276 0 273 0;
+#X connect 277 0 273 0;
+#X connect 278 0 275 0;
+#X connect 279 0 280 0;
+#X connect 280 0 176 0;
+#X connect 281 0 276 0;
+#X connect 282 0 277 0;
+#X connect 283 0 284 0;
+#X connect 283 0 286 1;
+#X connect 283 0 289 1;
+#X connect 284 0 285 0;
+#X connect 285 0 287 1;
+#X connect 286 0 283 0;
+#X connect 287 0 283 0;
+#X connect 288 0 285 0;
+#X connect 289 0 290 0;
+#X connect 290 0 164 0;
+#X connect 291 0 286 0;
+#X connect 292 0 287 0;
+#X connect 293 0 294 0;
+#X connect 293 0 296 1;
+#X connect 293 0 299 1;
+#X connect 294 0 295 0;
+#X connect 295 0 297 1;
+#X connect 296 0 293 0;
+#X connect 297 0 293 0;
+#X connect 298 0 295 0;
+#X connect 299 0 300 0;
+#X connect 300 0 170 0;
+#X connect 301 0 296 0;
+#X connect 302 0 297 0;
+#X connect 303 0 304 0;
+#X connect 303 0 306 1;
+#X connect 303 0 309 1;
+#X connect 304 0 305 0;
+#X connect 305 0 307 1;
+#X connect 306 0 303 0;
+#X connect 307 0 303 0;
+#X connect 308 0 305 0;
+#X connect 309 0 310 0;
+#X connect 310 0 182 0;
+#X connect 311 0 306 0;
+#X connect 312 0 307 0;
+#X connect 313 0 314 0;
+#X connect 313 0 316 1;
+#X connect 313 0 319 1;
+#X connect 314 0 315 0;
+#X connect 315 0 317 1;
+#X connect 316 0 313 0;
+#X connect 317 0 313 0;
+#X connect 318 0 315 0;
+#X connect 319 0 320 0;
+#X connect 320 0 70 0;
+#X connect 321 0 316 0;
+#X connect 322 0 317 0;
+#X connect 323 0 324 0;
+#X connect 323 0 326 1;
+#X connect 323 0 329 1;
+#X connect 324 0 325 0;
+#X connect 325 0 327 1;
+#X connect 326 0 323 0;
+#X connect 327 0 323 0;
+#X connect 328 0 325 0;
+#X connect 329 0 330 0;
+#X connect 330 0 82 0;
+#X connect 331 0 326 0;
+#X connect 332 0 327 0;
+#X connect 333 0 334 0;
+#X connect 333 0 336 1;
+#X connect 333 0 339 1;
+#X connect 334 0 335 0;
+#X connect 335 0 337 1;
+#X connect 336 0 333 0;
+#X connect 337 0 333 0;
+#X connect 338 0 335 0;
+#X connect 339 0 340 0;
+#X connect 340 0 94 0;
+#X connect 341 0 336 0;
+#X connect 342 0 337 0;
+#X connect 343 0 269 0;
+#X connect 344 0 279 0;
+#X connect 345 0 289 0;
+#X connect 346 0 299 0;
+#X connect 347 0 309 0;
+#X connect 348 0 319 0;
+#X connect 349 0 329 0;
+#X connect 350 0 339 0;
+#X restore 170 470 pd SandRed_Tiles;
+#N canvas 512 252 456 309 gem 0;
+#X obj 30 150 gemwin;
+#X msg 70 120 destroy;
+#X msg 30 90 dimen 750 750 \, create \, 1;
+#X obj 30 60 receive open;
+#X obj 130 60 receive close;
+#X obj 251 142 key 1;
+#X obj 251 242 send start;
+#X obj 261 212 send reset;
+#X obj 251 167 sel 101 114;
+#X msg 50 200 \; pd-Musical_Land.pd vis 1;
+#X obj 80 160 receive start;
+#X connect 1 0 0 0;
+#X connect 2 0 0 0;
+#X connect 3 0 2 0;
+#X connect 3 0 9 0;
+#X connect 4 0 1 0;
+#X connect 5 0 8 0;
+#X connect 8 0 6 0;
+#X connect 8 1 7 0;
+#X connect 10 0 9 0;
+#X restore 40 440 pd gem;
+#N canvas 868 160 314 210 GameLogic 0;
+#X floatatom 77 87 5 0 0 0 - - -, f 5;
+#X obj 97 17 loadbang;
+#N canvas 184 60 750 606 collision 0;
+#X obj 240 50 inlet radius;
+#X obj 130 30 inlet reference;
+#X obj 182 220 gemhead;
+#X obj 182 253 translateXYZ;
+#X obj 240 220 unpack 0 0;
+#X obj 40 30 inlet test;
+#N canvas 532 356 434 302 collide 0;
+#X obj 20 109 list-map2;
+#X obj 115 108 -;
+#X obj 115 133 abs;
+#X obj 115 165 <= 1;
+#X obj 49 35 inlet reference;
+#X obj 163 10 inlet radius;
+#X obj 20 190 list-reduce;
+#X obj 106 190 &&;
+#X obj 20 10 inlet test;
+#X obj 20 222 outlet;
+#X obj 163 53 t b a;
+#X obj 120 240 print;
+#X connect 0 0 6 0;
+#X connect 0 1 1 0;
+#X connect 1 0 2 0;
+#X connect 2 0 3 0;
+#X connect 3 0 0 2;
+#X connect 4 0 0 1;
+#X connect 5 0 10 0;
+#X connect 6 0 9 0;
+#X connect 6 1 7 0;
+#X connect 7 0 6 1;
+#X connect 8 0 0 0;
+#X connect 10 0 0 0;
+#X connect 10 1 3 1;
+#X restore 40 100 pd collide;
+#X obj 40 150 tgl 24 0 empty empty hit? 28 7 1 10 #fcfcfc #000000 #000000
+0 1;
+#X obj 182 417 circle 0.08;
+#X obj 224 334 loadbang;
+#X msg 224 374 draw fill;
+#X msg 180 180 set 52;
+#X obj 180 150 loadbang;
+#X obj 184 304 colorRGB 1 0 0;
+#X obj 270 150 receive score;
+#X obj 180 120 receive new_point;
+#X obj 40 250 send score;
+#X obj 40 220 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 40 190 sel 1;
+#X msg 240 180 10;
+#X obj 100 60 pack 10 10;
+#X obj 370 150 receive reset;
+#X obj 40 280 send respawn;
+#X connect 0 0 6 2;
+#X connect 1 0 4 0;
+#X connect 1 0 6 1;
+#X connect 2 0 3 0;
+#X connect 3 0 13 0;
+#X connect 4 0 3 1;
+#X connect 4 1 3 2;
+#X connect 5 0 6 0;
+#X connect 6 0 7 0;
+#X connect 7 0 18 0;
+#X connect 9 0 10 0;
+#X connect 10 0 8 0;
+#X connect 11 0 2 0;
+#X connect 12 0 11 0;
+#X connect 13 0 8 0;
+#X connect 14 0 19 0;
+#X connect 14 0 20 0;
+#X connect 15 0 11 0;
+#X connect 17 0 16 0;
+#X connect 17 0 22 0;
+#X connect 18 0 17 0;
+#X connect 19 0 3 1;
+#X connect 19 0 3 2;
+#X connect 20 0 6 1;
+#X connect 21 0 19 0;
+#X connect 21 0 20 0;
+#X restore 27 107 pd collision;
+#N canvas 436 44 1034 726 Collision 0;
+#X obj 40 90 inlet player_pos;
+#N canvas 688 376 330 306 collide 0;
+#X obj 20 109 list-map2;
+#X obj 115 108 -;
+#X obj 115 133 abs;
+#X obj 115 165 <= 1;
+#X obj 49 35 inlet reference;
+#X obj 163 10 inlet radius;
+#X obj 20 190 list-reduce;
+#X obj 106 190 &&;
+#X obj 20 10 inlet test;
+#X obj 20 222 outlet;
+#X obj 163 53 t b a;
+#X connect 0 0 6 0;
+#X connect 0 1 1 0;
+#X connect 1 0 2 0;
+#X connect 2 0 3 0;
+#X connect 3 0 0 2;
+#X connect 4 0 0 1;
+#X connect 5 0 10 0;
+#X connect 6 0 9 0;
+#X connect 6 1 7 0;
+#X connect 7 0 6 1;
+#X connect 8 0 0 0;
+#X connect 10 0 0 0;
+#X connect 10 1 3 1;
+#X restore 120 390 pd collide;
+#N canvas 688 376 346 278 collide 0;
+#X obj 20 109 list-map2;
+#X obj 115 108 -;
+#X obj 115 133 abs;
+#X obj 115 165 <= 1;
+#X obj 49 35 inlet reference;
+#X obj 163 10 inlet radius;
+#X obj 20 190 list-reduce;
+#X obj 106 190 &&;
+#X obj 20 10 inlet test;
+#X obj 20 222 outlet;
+#X obj 163 53 t b a;
+#X connect 0 0 6 0;
+#X connect 0 1 1 0;
+#X connect 1 0 2 0;
+#X connect 2 0 3 0;
+#X connect 3 0 0 2;
+#X connect 4 0 0 1;
+#X connect 5 0 10 0;
+#X connect 6 0 9 0;
+#X connect 6 1 7 0;
+#X connect 7 0 6 1;
+#X connect 8 0 0 0;
+#X connect 10 0 0 0;
+#X connect 10 1 3 1;
+#X restore 200 390 pd collide;
+#N canvas 688 376 454 338 collide 0;
+#X obj 20 109 list-map2;
+#X obj 115 108 -;
+#X obj 115 133 abs;
+#X obj 115 165 <= 1;
+#X obj 49 35 inlet reference;
+#X obj 163 10 inlet radius;
+#X obj 20 190 list-reduce;
+#X obj 106 190 &&;
+#X obj 20 10 inlet test;
+#X obj 20 222 outlet;
+#X obj 163 53 t b a;
+#X connect 0 0 6 0;
+#X connect 0 1 1 0;
+#X connect 1 0 2 0;
+#X connect 2 0 3 0;
+#X connect 3 0 0 2;
+#X connect 4 0 0 1;
+#X connect 5 0 10 0;
+#X connect 6 0 9 0;
+#X connect 6 1 7 0;
+#X connect 7 0 6 1;
+#X connect 8 0 0 0;
+#X connect 10 0 0 0;
+#X connect 10 1 3 1;
+#X restore 280 390 pd collide;
+#N canvas 688 376 462 314 collide 0;
+#X obj 20 109 list-map2;
+#X obj 115 108 -;
+#X obj 115 133 abs;
+#X obj 115 165 <= 1;
+#X obj 49 35 inlet reference;
+#X obj 163 10 inlet radius;
+#X obj 20 190 list-reduce;
+#X obj 106 190 &&;
+#X obj 20 10 inlet test;
+#X obj 20 222 outlet;
+#X obj 160 40 t b a;
+#X connect 0 0 6 0;
+#X connect 0 1 1 0;
+#X connect 1 0 2 0;
+#X connect 2 0 3 0;
+#X connect 3 0 0 2;
+#X connect 4 0 0 1;
+#X connect 5 0 10 0;
+#X connect 6 0 9 0;
+#X connect 6 1 7 0;
+#X connect 7 0 6 1;
+#X connect 8 0 0 0;
+#X connect 10 0 0 0;
+#X connect 10 1 3 1;
+#X restore 360 390 pd collide;
+#N canvas 688 376 434 346 collide 0;
+#X obj 20 109 list-map2;
+#X obj 115 108 -;
+#X obj 115 133 abs;
+#X obj 115 165 <= 1;
+#X obj 49 35 inlet reference;
+#X obj 163 10 inlet radius;
+#X obj 20 190 list-reduce;
+#X obj 106 190 &&;
+#X obj 20 10 inlet test;
+#X obj 20 222 outlet;
+#X obj 163 53 t b a;
+#X connect 0 0 6 0;
+#X connect 0 1 1 0;
+#X connect 1 0 2 0;
+#X connect 2 0 3 0;
+#X connect 3 0 0 2;
+#X connect 4 0 0 1;
+#X connect 5 0 10 0;
+#X connect 6 0 9 0;
+#X connect 6 1 7 0;
+#X connect 7 0 6 1;
+#X connect 8 0 0 0;
+#X connect 10 0 0 0;
+#X connect 10 1 3 1;
+#X restore 440 390 pd collide;
+#X floatatom 850 130 5 0 0 0 - - -, f 5;
+#N canvas 688 376 362 314 collide 0;
+#X obj 20 109 list-map2;
+#X obj 115 108 -;
+#X obj 115 133 abs;
+#X obj 115 165 <= 1;
+#X obj 49 35 inlet reference;
+#X obj 163 10 inlet radius;
+#X obj 20 190 list-reduce;
+#X obj 106 190 &&;
+#X obj 20 10 inlet test;
+#X obj 20 222 outlet;
+#X obj 163 53 t b a;
+#X connect 0 0 6 0;
+#X connect 0 1 1 0;
+#X connect 1 0 2 0;
+#X connect 2 0 3 0;
+#X connect 3 0 0 2;
+#X connect 4 0 0 1;
+#X connect 5 0 10 0;
+#X connect 6 0 9 0;
+#X connect 6 1 7 0;
+#X connect 7 0 6 1;
+#X connect 8 0 0 0;
+#X connect 10 0 0 0;
+#X connect 10 1 3 1;
+#X restore 40 390 pd collide;
+#X obj 40 420 tgl 24 0 empty empty hit? 28 7 1 10 #fcfcfc #000000 #000000
+0 1;
+#X obj 40 490 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 40 460 sel 1;
+#X obj 850 90 loadbang;
+#X obj 130 420 tgl 24 0 empty empty hit? 28 7 1 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 130 490 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 130 460 sel 1;
+#X obj 230 420 tgl 24 0 empty empty hit? 28 7 1 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 230 490 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 230 460 sel 1;
+#X obj 320 420 tgl 24 0 empty empty hit? 28 7 1 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 320 490 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 320 460 sel 1;
+#X obj 410 420 tgl 24 0 empty empty hit? 28 7 1 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 410 490 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 410 460 sel 1;
+#X obj 500 420 tgl 24 0 empty empty hit? 28 7 1 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 500 490 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 500 460 sel 1;
+#X obj 370 150 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 490 130 receive blue;
+#X obj 510 150 bng 14 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 350 130 receive red;
+#X obj 440 90 receive reset;
+#X msg 440 120 10 10;
+#N canvas 688 376 434 346 collide 0;
+#X obj 20 109 list-map2;
+#X obj 115 108 -;
+#X obj 115 133 abs;
+#X obj 115 165 <= 1;
+#X obj 49 35 inlet reference;
+#X obj 163 10 inlet radius;
+#X obj 20 190 list-reduce;
+#X obj 106 190 &&;
+#X obj 20 10 inlet test;
+#X obj 20 222 outlet;
+#X obj 163 53 t b a;
+#X connect 0 0 6 0;
+#X connect 0 1 1 0;
+#X connect 1 0 2 0;
+#X connect 2 0 3 0;
+#X connect 3 0 0 2;
+#X connect 4 0 0 1;
+#X connect 5 0 10 0;
+#X connect 6 0 9 0;
+#X connect 6 1 7 0;
+#X connect 7 0 6 1;
+#X connect 8 0 0 0;
+#X connect 10 0 0 0;
+#X connect 10 1 3 1;
+#X restore 530 390 pd collide;
+#X obj 590 420 tgl 24 0 empty empty hit? 28 7 1 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 590 490 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 590 460 sel 1;
+#N canvas 688 376 434 346 collide 0;
+#X obj 20 109 list-map2;
+#X obj 115 108 -;
+#X obj 115 133 abs;
+#X obj 115 165 <= 1;
+#X obj 49 35 inlet reference;
+#X obj 163 10 inlet radius;
+#X obj 20 190 list-reduce;
+#X obj 106 190 &&;
+#X obj 20 10 inlet test;
+#X obj 20 222 outlet;
+#X obj 163 53 t b a;
+#X connect 0 0 6 0;
+#X connect 0 1 1 0;
+#X connect 1 0 2 0;
+#X connect 2 0 3 0;
+#X connect 3 0 0 2;
+#X connect 4 0 0 1;
+#X connect 5 0 10 0;
+#X connect 6 0 9 0;
+#X connect 6 1 7 0;
+#X connect 7 0 6 1;
+#X connect 8 0 0 0;
+#X connect 10 0 0 0;
+#X connect 10 1 3 1;
+#X restore 620 390 pd collide;
+#X obj 680 420 tgl 24 0 empty empty hit? 28 7 1 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 680 490 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 680 460 sel 1;
+#N canvas 688 376 434 346 collide 0;
+#X obj 20 109 list-map2;
+#X obj 115 108 -;
+#X obj 115 133 abs;
+#X obj 115 165 <= 1;
+#X obj 49 35 inlet reference;
+#X obj 163 10 inlet radius;
+#X obj 20 190 list-reduce;
+#X obj 106 190 &&;
+#X obj 20 10 inlet test;
+#X obj 20 222 outlet;
+#X obj 163 53 t b a;
+#X connect 0 0 6 0;
+#X connect 0 1 1 0;
+#X connect 1 0 2 0;
+#X connect 2 0 3 0;
+#X connect 3 0 0 2;
+#X connect 4 0 0 1;
+#X connect 5 0 10 0;
+#X connect 6 0 9 0;
+#X connect 6 1 7 0;
+#X connect 7 0 6 1;
+#X connect 8 0 0 0;
+#X connect 10 0 0 0;
+#X connect 10 1 3 1;
+#X restore 710 390 pd collide;
+#X obj 770 420 tgl 24 0 empty empty hit? 28 7 1 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 770 490 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 770 460 sel 1;
+#N canvas 688 376 434 346 collide 0;
+#X obj 20 109 list-map2;
+#X obj 115 108 -;
+#X obj 115 133 abs;
+#X obj 115 165 <= 1;
+#X obj 49 35 inlet reference;
+#X obj 163 10 inlet radius;
+#X obj 20 190 list-reduce;
+#X obj 106 190 &&;
+#X obj 20 10 inlet test;
+#X obj 20 222 outlet;
+#X obj 163 53 t b a;
+#X connect 0 0 6 0;
+#X connect 0 1 1 0;
+#X connect 1 0 2 0;
+#X connect 2 0 3 0;
+#X connect 3 0 0 2;
+#X connect 4 0 0 1;
+#X connect 5 0 10 0;
+#X connect 6 0 9 0;
+#X connect 6 1 7 0;
+#X connect 7 0 6 1;
+#X connect 8 0 0 0;
+#X connect 10 0 0 0;
+#X connect 10 1 3 1;
+#X restore 800 390 pd collide;
+#X obj 860 420 tgl 24 0 empty empty hit? 28 7 1 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 860 490 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 860 460 sel 1;
+#X msg 60 350 -3.2 3.2;
+#X msg 150 350 -3.2 1.6;
+#X msg 230 350 -3.2 0;
+#X msg 300 350 -1.6 -1.6;
+#X msg 380 350 0 -1.6;
+#X msg 460 350 0 1.6;
+#X msg 550 350 1.6 1.6;
+#X msg 640 350 3.2 0;
+#X msg 730 350 3.2 -1.6;
+#X msg 820 350 3.2 -3.2;
+#X msg 60 320 -3.2 -3.2;
+#X msg 150 320 -1.6 -3.2;
+#X msg 230 320 0 -3.2;
+#X msg 460 320 -1.6 0;
+#X msg 550 320 -1.6 1.6;
+#X msg 640 320 0 3.2;
+#X msg 730 320 1.6 3.2;
+#X msg 820 320 3.2 3.2;
+#X msg 850 110 0.96;
+#X obj 10 550 send mistake1;
+#X msg 300 320 1.6 0;
+#X msg 380 320 1.6 -1.6;
+#X obj 200 550 send mistake3;
+#X obj 290 550 send mistake4;
+#X obj 650 550 send mistake8;
+#X obj 740 550 send mistake9;
+#X obj 830 550 send mistake10;
+#X obj 560 550 send mistake7;
+#X obj 470 550 send mistake6;
+#X obj 380 550 send mistake5;
+#X obj 10 620 send reset;
+#X obj 100 620 send reset;
+#X obj 200 620 send reset;
+#X obj 290 620 send reset;
+#X obj 380 620 send reset;
+#X obj 470 620 send reset;
+#X obj 560 620 send reset;
+#X obj 650 620 send reset;
+#X obj 740 620 send reset;
+#X obj 830 620 send reset;
+#X obj 100 550 send mistake2;
+#X connect 0 0 7 0;
+#X connect 0 0 5 0;
+#X connect 0 0 4 0;
+#X connect 0 0 3 0;
+#X connect 0 0 2 0;
+#X connect 0 0 1 0;
+#X connect 0 0 33 0;
+#X connect 0 0 45 0;
+#X connect 0 0 41 0;
+#X connect 0 0 37 0;
+#X connect 1 0 12 0;
+#X connect 2 0 15 0;
+#X connect 3 0 18 0;
+#X connect 4 0 21 0;
+#X connect 5 0 24 0;
+#X connect 6 0 5 2;
+#X connect 6 0 7 2;
+#X connect 6 0 4 2;
+#X connect 6 0 3 2;
+#X connect 6 0 2 2;
+#X connect 6 0 1 2;
+#X connect 6 0 33 2;
+#X connect 6 0 37 2;
+#X connect 6 0 45 2;
+#X connect 6 0 41 2;
+#X connect 7 0 8 0;
+#X connect 8 0 10 0;
+#X connect 9 0 68 0;
+#X connect 9 0 79 0;
+#X connect 10 0 9 0;
+#X connect 11 0 67 0;
+#X connect 12 0 14 0;
+#X connect 13 0 80 0;
+#X connect 13 0 89 0;
+#X connect 14 0 13 0;
+#X connect 15 0 17 0;
+#X connect 16 0 71 0;
+#X connect 16 0 81 0;
+#X connect 17 0 16 0;
+#X connect 18 0 20 0;
+#X connect 19 0 72 0;
+#X connect 19 0 82 0;
+#X connect 20 0 19 0;
+#X connect 21 0 23 0;
+#X connect 22 0 78 0;
+#X connect 22 0 83 0;
+#X connect 23 0 22 0;
+#X connect 24 0 26 0;
+#X connect 25 0 77 0;
+#X connect 25 0 84 0;
+#X connect 26 0 25 0;
+#X connect 27 0 59 0;
+#X connect 27 0 66 0;
+#X connect 27 0 65 0;
+#X connect 27 0 64 0;
+#X connect 27 0 63 0;
+#X connect 27 0 62 0;
+#X connect 27 0 70 0;
+#X connect 27 0 69 0;
+#X connect 27 0 61 0;
+#X connect 27 0 60 0;
+#X connect 28 0 29 0;
+#X connect 29 0 49 0;
+#X connect 29 0 58 0;
+#X connect 29 0 57 0;
+#X connect 29 0 56 0;
+#X connect 29 0 55 0;
+#X connect 29 0 54 0;
+#X connect 29 0 53 0;
+#X connect 29 0 52 0;
+#X connect 29 0 51 0;
+#X connect 29 0 50 0;
+#X connect 30 0 27 0;
+#X connect 31 0 32 0;
+#X connect 32 0 7 1;
+#X connect 32 0 5 1;
+#X connect 32 0 4 1;
+#X connect 32 0 3 1;
+#X connect 32 0 2 1;
+#X connect 32 0 1 1;
+#X connect 32 0 33 1;
+#X connect 32 0 45 1;
+#X connect 32 0 41 1;
+#X connect 32 0 37 1;
+#X connect 33 0 34 0;
+#X connect 34 0 36 0;
+#X connect 35 0 76 0;
+#X connect 35 0 85 0;
+#X connect 36 0 35 0;
+#X connect 37 0 38 0;
+#X connect 38 0 40 0;
+#X connect 39 0 73 0;
+#X connect 39 0 86 0;
+#X connect 40 0 39 0;
+#X connect 41 0 42 0;
+#X connect 42 0 44 0;
+#X connect 43 0 74 0;
+#X connect 43 0 87 0;
+#X connect 44 0 43 0;
+#X connect 45 0 46 0;
+#X connect 46 0 48 0;
+#X connect 47 0 75 0;
+#X connect 47 0 88 0;
+#X connect 48 0 47 0;
+#X connect 49 0 7 1;
+#X connect 50 0 1 1;
+#X connect 51 0 2 1;
+#X connect 52 0 3 1;
+#X connect 53 0 4 1;
+#X connect 54 0 5 1;
+#X connect 55 0 33 1;
+#X connect 56 0 37 1;
+#X connect 57 0 41 1;
+#X connect 58 0 45 1;
+#X connect 59 0 7 1;
+#X connect 60 0 1 1;
+#X connect 61 0 2 1;
+#X connect 62 0 5 1;
+#X connect 63 0 33 1;
+#X connect 64 0 37 1;
+#X connect 65 0 41 1;
+#X connect 66 0 45 1;
+#X connect 67 0 6 0;
+#X connect 69 0 3 1;
+#X connect 70 0 4 1;
+#X restore 157 107 pd Collision Logic;
+#N canvas 244 106 888 568 spawner 0;
+#X obj 320 470 pack 0 0;
+#X floatatom 240 470 7 0 0 0 - - -, f 7;
+#X floatatom 430 470 6 0 0 0 - - -, f 6;
+#X obj 350 230 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 200 340 random 1000;
+#X obj 200 365 / 1000;
+#X obj 270 420 +;
+#X obj 470 340 random 1000;
+#X obj 470 365 / 1000;
+#X obj 320 530 outlet;
+#X obj 354 324 -;
+#X obj 300 270 random 7;
+#X obj 370 270 random 7;
+#X obj 354 304 swap 7;
+#X obj 300 358 - 3.5;
+#X obj 364 354 - 3.5;
+#X obj 304 424 send new_point;
+#X obj 400 420 -;
+#X obj 310 40 receive reset;
+#X obj 100 100 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 130 100 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 160 100 tgl 16 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 62 61 spigot;
+#X obj 162 61 spigot;
+#X obj 212 61 loadbang;
+#X obj 40 30 receive reset;
+#X obj 180 30 receive start;
+#X obj 100 123 sel 1;
+#X obj 180 150 metro 4000;
+#X obj 110 180 spigot;
+#X obj 350 170 receive start;
+#X obj 510 440 receive reset;
+#X msg 510 465 10 10;
+#X obj 360 200 receive respawn;
+#X obj 440 170 receive spawn;
+#X connect 0 0 9 0;
+#X connect 3 0 4 0;
+#X connect 3 0 7 0;
+#X connect 3 0 11 0;
+#X connect 3 0 12 0;
+#X connect 3 0 16 0;
+#X connect 4 0 5 0;
+#X connect 5 0 6 1;
+#X connect 6 0 1 0;
+#X connect 6 0 0 0;
+#X connect 7 0 8 0;
+#X connect 8 0 17 1;
+#X connect 10 0 15 0;
+#X connect 11 0 14 0;
+#X connect 12 0 13 0;
+#X connect 13 0 10 0;
+#X connect 13 1 10 1;
+#X connect 14 0 6 0;
+#X connect 15 0 17 0;
+#X connect 17 0 2 0;
+#X connect 17 0 0 1;
+#X connect 19 0 20 0;
+#X connect 19 0 22 1;
+#X connect 19 0 27 0;
+#X connect 19 0 29 1;
+#X connect 20 0 21 0;
+#X connect 21 0 23 1;
+#X connect 22 0 19 0;
+#X connect 23 0 19 0;
+#X connect 24 0 21 0;
+#X connect 25 0 22 0;
+#X connect 26 0 23 0;
+#X connect 27 0 28 0;
+#X connect 28 0 29 0;
+#X connect 30 0 3 0;
+#X connect 31 0 32 0;
+#X connect 32 0 9 0;
+#X connect 33 0 3 0;
+#X connect 34 0 3 0;
+#X restore 47 47 pd spawner;
+#X msg 77 67 0.28;
+#N canvas 892 68 490 666 Player1 0;
+#X obj 150 530 outlet;
+#X obj 30 0 key 1;
+#X obj 160 260 f;
+#X floatatom 94 435 5 0 0 0 - - -, f 5;
+#X obj 92 395 line;
+#X obj 92 303 route 1 2;
+#X msg 82 216 1;
+#X msg 132 216 2;
+#X obj 82 245 t f b;
+#X obj 310 260 f;
+#X floatatom 234 435 5 0 0 0 - - -, f 5;
+#X obj 232 395 line;
+#X obj 232 303 route 1 2;
+#X msg 222 216 1;
+#X msg 272 216 2;
+#X obj 222 245 t f b;
+#X obj 140 180 select 100 97 119 115;
+#X obj 150 420 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 50 540 gemhead;
+#X msg 50 510 set 51;
+#X obj 50 480 loadbang;
+#X obj 90 270 pack f f;
+#X obj 232 274 pack f f;
+#X obj 0 340 receive reset;
+#X msg 0 365 0;
+#X obj 120 640 square 0.16;
+#X obj 80 580 translateXYZ 0 0 0;
+#X obj 150 470 pack 0 0;
+#X msg 340 450 0 0;
+#X obj 85 116 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 105 116 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 135 116 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 70 80 spigot;
+#X obj 120 80 spigot;
+#X obj 170 80 loadbang;
+#X obj 160 50 receive start;
+#X obj 60 50 receive reset;
+#X obj 110 150 spigot;
+#X obj 20 160 receive reset;
+#X msg 20 185 0;
+#X obj 330 150 receive reset;
+#X msg 320 185 0;
+#X obj 360 410 receive reset;
+#X obj 330 340 receive reset;
+#X msg 330 365 0;
+#X obj 120 610 colorRGB 0.709 0.423 0.419;
+#X obj 160 500 metro 100;
+#X obj 92 332 + 0.15;
+#X obj 140 330 - 0.15;
+#X obj 230 330 + 0.15;
+#X obj 280 330 - 0.15;
+#X msg 232 366 \$1 30;
+#X msg 92 366 \$1 30;
+#X connect 1 0 37 0;
+#X connect 2 0 21 1;
+#X connect 3 0 2 1;
+#X connect 3 0 27 0;
+#X connect 4 0 3 0;
+#X connect 5 0 47 0;
+#X connect 5 1 48 0;
+#X connect 6 0 8 0;
+#X connect 7 0 8 0;
+#X connect 8 0 21 0;
+#X connect 8 1 2 0;
+#X connect 9 0 22 1;
+#X connect 10 0 9 1;
+#X connect 10 0 17 0;
+#X connect 10 0 27 1;
+#X connect 11 0 10 0;
+#X connect 12 0 49 0;
+#X connect 12 1 50 0;
+#X connect 13 0 15 0;
+#X connect 14 0 15 0;
+#X connect 15 0 22 0;
+#X connect 15 1 9 0;
+#X connect 16 0 6 0;
+#X connect 16 1 7 0;
+#X connect 16 2 13 0;
+#X connect 16 3 14 0;
+#X connect 17 0 27 0;
+#X connect 19 0 18 0;
+#X connect 20 0 19 0;
+#X connect 21 0 5 0;
+#X connect 22 0 12 0;
+#X connect 23 0 24 0;
+#X connect 24 0 3 0;
+#X connect 26 0 45 0;
+#X connect 27 0 0 0;
+#X connect 27 0 46 0;
+#X connect 28 0 0 0;
+#X connect 29 0 30 0;
+#X connect 29 0 32 1;
+#X connect 29 0 37 1;
+#X connect 30 0 31 0;
+#X connect 31 0 33 1;
+#X connect 32 0 29 0;
+#X connect 33 0 29 0;
+#X connect 34 0 31 0;
+#X connect 35 0 33 0;
+#X connect 36 0 32 0;
+#X connect 37 0 16 0;
+#X connect 38 0 39 0;
+#X connect 40 0 41 0;
+#X connect 41 0 9 1;
+#X connect 42 0 28 0;
+#X connect 43 0 44 0;
+#X connect 44 0 10 0;
+#X connect 45 0 25 0;
+#X connect 46 0 0 0;
+#X connect 47 0 52 0;
+#X connect 48 0 52 0;
+#X connect 49 0 51 0;
+#X connect 50 0 51 0;
+#X connect 51 0 11 0;
+#X connect 52 0 4 0;
+#X restore 20 0 pd Player1;
+#N canvas 416 0 690 754 Player 0;
+#X obj 220 570 outlet;
+#X obj 450 -20 key 1;
+#X obj 170 170 f;
+#X obj 102 305 line;
+#X obj 102 213 route 1 2;
+#X msg 92 126 1;
+#X msg 142 126 2;
+#X obj 92 155 t f b;
+#X obj 320 170 f;
+#X obj 242 305 line;
+#X obj 242 213 route 1 2;
+#X msg 232 126 1;
+#X msg 282 126 2;
+#X obj 232 155 t f b;
+#X obj 150 90 select 100 97 119 115;
+#X obj 20 620 gemhead;
+#X msg 20 590 set 51;
+#X obj 20 560 loadbang;
+#X msg 242 276 \$1 5;
+#X msg 102 276 \$1 5;
+#X obj 102 242 + 0.15;
+#X obj 150 240 - 0.15;
+#X obj 240 240 + 0.15;
+#X obj 290 240 - 0.15;
+#X obj 100 180 pack f f;
+#X obj 242 184 pack f f;
+#X obj 350 230 receive reset;
+#X msg 350 255 0;
+#X obj 130 650 square 0.16;
+#X obj 90 590 translateXYZ 0 0 0;
+#X obj 160 460 pack 0 0;
+#X obj 505 96 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 525 96 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 555 96 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 490 60 spigot;
+#X obj 540 60 spigot;
+#X obj 590 60 loadbang;
+#X obj 580 30 receive start;
+#X obj 480 30 receive reset;
+#X obj 420 20 spigot;
+#X obj 130 620 colorRGB 0.709 0.423 0.419;
+#X obj 170 410 t b f f;
+#X obj 100 380 t f f;
+#X obj 100 340 f;
+#X obj 230 350 f;
+#X floatatom 260 390 5 0 0 0 - - -, f 5;
+#X floatatom 60 380 5 0 0 0 - - -, f 5;
+#X obj 350 337 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 350 380 int 1;
+#X floatatom 350 412 5 0 0 0 - - -, f 5;
+#X obj 420 422 + 1;
+#X obj 313 323 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X msg 313 346 -1;
+#X obj 350 436 % 8;
+#X obj 350 461 + 1;
+#X floatatom 350 486 5 0 0 0 - - -, f 5;
+#X obj 350 510 sel 1 2 3 4;
+#X obj 220 520 spigot;
+#X obj 350 280 t f f f f b;
+#X obj 150 0 receive reset;
+#X msg 130 60 100;
+#X msg 190 60 119;
+#X obj 120 30 delay 5;
+#X obj 180 30 delay 10;
+#X obj 260 550 metro 100;
+#X connect 1 0 39 0;
+#X connect 2 0 24 1;
+#X connect 3 0 43 0;
+#X connect 4 0 20 0;
+#X connect 4 1 21 0;
+#X connect 5 0 7 0;
+#X connect 6 0 7 0;
+#X connect 7 0 24 0;
+#X connect 7 1 2 0;
+#X connect 8 0 25 1;
+#X connect 9 0 44 0;
+#X connect 10 0 22 0;
+#X connect 10 1 23 0;
+#X connect 11 0 13 0;
+#X connect 12 0 13 0;
+#X connect 13 0 25 0;
+#X connect 13 1 8 0;
+#X connect 14 0 5 0;
+#X connect 14 1 6 0;
+#X connect 14 2 11 0;
+#X connect 14 3 12 0;
+#X connect 15 0 29 0;
+#X connect 16 0 15 0;
+#X connect 17 0 16 0;
+#X connect 18 0 9 0;
+#X connect 19 0 3 0;
+#X connect 20 0 19 0;
+#X connect 21 0 19 0;
+#X connect 22 0 18 0;
+#X connect 23 0 18 0;
+#X connect 24 0 4 0;
+#X connect 25 0 10 0;
+#X connect 26 0 27 0;
+#X connect 27 0 58 0;
+#X connect 29 0 40 0;
+#X connect 30 0 57 0;
+#X connect 30 0 47 0;
+#X connect 31 0 32 0;
+#X connect 31 0 34 1;
+#X connect 31 0 39 1;
+#X connect 32 0 33 0;
+#X connect 33 0 35 1;
+#X connect 34 0 31 0;
+#X connect 35 0 31 0;
+#X connect 36 0 33 0;
+#X connect 37 0 35 0;
+#X connect 38 0 34 0;
+#X connect 39 0 14 0;
+#X connect 40 0 28 0;
+#X connect 41 0 30 0;
+#X connect 41 1 30 1;
+#X connect 41 2 8 1;
+#X connect 41 2 29 2;
+#X connect 42 0 30 0;
+#X connect 42 1 29 1;
+#X connect 42 1 2 1;
+#X connect 43 0 42 0;
+#X connect 43 0 46 0;
+#X connect 44 0 41 0;
+#X connect 44 0 45 0;
+#X connect 47 0 48 0;
+#X connect 48 0 49 0;
+#X connect 48 0 50 0;
+#X connect 49 0 53 0;
+#X connect 50 0 48 1;
+#X connect 51 0 52 0;
+#X connect 52 0 48 0;
+#X connect 53 0 54 0;
+#X connect 54 0 55 0;
+#X connect 55 0 56 0;
+#X connect 56 4 57 1;
+#X connect 57 0 0 0;
+#X connect 57 0 64 0;
+#X connect 58 0 43 0;
+#X connect 58 1 44 0;
+#X connect 58 2 2 1;
+#X connect 58 3 8 1;
+#X connect 58 4 51 0;
+#X connect 59 0 62 0;
+#X connect 59 0 63 0;
+#X connect 60 0 14 0;
+#X connect 61 0 14 0;
+#X connect 62 0 60 0;
+#X connect 63 0 61 0;
+#X connect 64 0 0 0;
+#X restore 10 30 pd Player;
+#X connect 0 0 2 2;
+#X connect 1 0 5 0;
+#X connect 4 0 2 1;
+#X connect 5 0 0 0;
+#X connect 7 0 2 0;
+#X connect 7 0 3 0;
+#X restore 40 480 pd GameLogic;
+#N canvas 626 56 878 583 Game_overScreen 0;
+#X msg 30 160 set 57;
+#X obj 30 185 gemhead;
+#X obj 30 240 text2d GAME OVER;
+#X floatatom 130 215 5 0 0 0 - - -, f 5;
+#X msg 130 190 69;
+#X obj 130 170 loadbang;
+#X obj 200 170 gemhead;
+#X msg 200 140 set 57;
+#X obj 190 70 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 220 70 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 250 70 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 100 50 spigot;
+#X obj 240 40 spigot;
+#X obj 100 20 receive reset;
+#X obj 310 60 loadbang;
+#X obj 260 10 receive start;
+#X obj 400 20 loadbang;
+#X msg 370 80 set 45;
+#X obj 400 45 delay 100;
+#X obj 30 215 colorRGB 1 1 1;
+#X obj 360 170 gemhead;
+#X msg 360 140 set 57;
+#X obj 520 170 gemhead;
+#X msg 520 140 set 57;
+#X obj 305 402 f;
+#X obj 225 282 hsl 87 15 -6 6 0 0 empty empty empty -2 -8 0 10 #fcfcfc
+#000000 #000000 4500 1;
+#X obj 225 302 hsl 88 15 -6 6 0 0 empty empty empty -2 -8 0 10 #fcfcfc
+#000000 #000000 3900 1;
+#X msg 205 232 set \$1;
+#X msg 275 232 set \$1;
+#X msg 205 252 0.27907;
+#X msg 275 252 -0.62069;
+#X obj 185 332 translateXYZ 0 0 0;
+#X obj 335 232 loadbang, f 9;
+#X obj 465 322 hsl 87 15 -6 6 0 0 empty empty empty -2 -8 0 10 #fcfcfc
+#000000 #000000 3900 1;
+#X obj 465 342 hsl 88 15 -6 6 0 0 empty empty empty -2 -8 0 10 #fcfcfc
+#000000 #000000 3900 1;
+#X msg 445 272 set \$1;
+#X msg 515 272 set \$1;
+#X msg 445 292 -0.55814;
+#X msg 515 292 -0.62069;
+#X obj 305 362 receive score-no;
+#X obj 685 322 hsl 87 15 -6 6 0 0 empty empty empty -2 -8 0 10 #fcfcfc
+#000000 #000000 4900 1;
+#X obj 685 342 hsl 88 15 -6 6 0 0 empty empty empty -2 -8 0 10 #fcfcfc
+#000000 #000000 3900 1;
+#X msg 665 272 set \$1;
+#X msg 735 272 set \$1;
+#X msg 665 292 0.837209;
+#X msg 735 292 -0.62069;
+#X obj 495 232 loadbang, f 9;
+#X obj 705 232 loadbang, f 9;
+#X floatatom 235 447 5 0 0 0 - - -, f 5;
+#X obj 235 402 loadbang;
+#X floatatom 565 457 5 0 0 0 - - -, f 5;
+#X obj 565 412 loadbang;
+#X floatatom 735 447 5 0 0 0 - - -, f 5;
+#X obj 735 402 loadbang;
+#X msg 735 422 20;
+#X msg 565 432 20;
+#X msg 235 422 20;
+#X obj 425 372 translateXYZ 0 0 0;
+#X obj 645 372 translateXYZ 0 0 0;
+#X obj 635 452 colorRGB 1 1 1;
+#X obj 415 452 colorRGB 1 1 1;
+#X obj 185 372 colorRGB 1 1 0;
+#X obj 405 487 text2d You scored;
+#X obj 625 492 text2d points;
+#X obj 185 472 text2d 0;
+#X connect 0 0 1 0;
+#X connect 1 0 19 0;
+#X connect 3 0 2 1;
+#X connect 4 0 3 0;
+#X connect 5 0 4 0;
+#X connect 6 0 31 0;
+#X connect 7 0 6 0;
+#X connect 8 0 9 0;
+#X connect 8 0 11 1;
+#X connect 9 0 10 0;
+#X connect 10 0 12 1;
+#X connect 10 0 1 0;
+#X connect 10 0 6 0;
+#X connect 10 0 20 0;
+#X connect 10 0 22 0;
+#X connect 11 0 8 0;
+#X connect 11 0 0 0;
+#X connect 11 0 7 0;
+#X connect 11 0 21 0;
+#X connect 11 0 23 0;
+#X connect 12 0 8 0;
+#X connect 13 0 11 0;
+#X connect 14 0 10 0;
+#X connect 15 0 12 0;
+#X connect 16 0 18 0;
+#X connect 17 0 1 0;
+#X connect 17 0 6 0;
+#X connect 17 0 20 0;
+#X connect 17 0 22 0;
+#X connect 18 0 17 0;
+#X connect 19 0 2 0;
+#X connect 20 0 57 0;
+#X connect 21 0 20 0;
+#X connect 22 0 58 0;
+#X connect 23 0 22 0;
+#X connect 24 0 64 0;
+#X connect 25 0 27 0;
+#X connect 25 0 31 1;
+#X connect 26 0 28 0;
+#X connect 26 0 31 2;
+#X connect 27 0 29 0;
+#X connect 28 0 30 0;
+#X connect 29 0 25 0;
+#X connect 30 0 26 0;
+#X connect 31 0 61 0;
+#X connect 32 0 29 0;
+#X connect 32 0 30 0;
+#X connect 33 0 35 0;
+#X connect 33 0 57 1;
+#X connect 34 0 36 0;
+#X connect 34 0 57 2;
+#X connect 35 0 37 0;
+#X connect 36 0 38 0;
+#X connect 37 0 33 0;
+#X connect 38 0 34 0;
+#X connect 39 0 24 0;
+#X connect 40 0 42 0;
+#X connect 40 0 58 1;
+#X connect 41 0 43 0;
+#X connect 41 0 58 2;
+#X connect 42 0 44 0;
+#X connect 43 0 45 0;
+#X connect 44 0 40 0;
+#X connect 45 0 41 0;
+#X connect 46 0 37 0;
+#X connect 46 0 38 0;
+#X connect 47 0 44 0;
+#X connect 47 0 45 0;
+#X connect 48 0 64 1;
+#X connect 49 0 56 0;
+#X connect 50 0 62 1;
+#X connect 51 0 55 0;
+#X connect 52 0 63 1;
+#X connect 53 0 54 0;
+#X connect 54 0 52 0;
+#X connect 55 0 50 0;
+#X connect 56 0 48 0;
+#X connect 57 0 60 0;
+#X connect 58 0 59 0;
+#X connect 59 0 63 0;
+#X connect 60 0 62 0;
+#X connect 61 0 64 0;
+#X restore 40 520 pd Game_overScreen;
+#X obj 500 230 cnv 15 174 118 empty empty empty 20 12 0 14 #fc0400
+#404040 0;
+#X obj 510 240 cnv 15 156 99 empty empty empty 20 12 0 14 #fcfcfc #404040
+0;
+#X obj 500 60 cnv 15 174 118 empty empty empty 20 12 0 14 #fc0400 #404040
+0;
+#X obj 510 70 cnv 15 156 99 empty empty empty 20 12 0 14 #fcfcfc #404040
+0;
+#X obj 520 90 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 590 90 bng 14 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 590 130 send close;
+#X obj 520 130 send open;
+#X obj 520 260 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 520 300 send start;
+#X obj 590 260 bng 14 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 590 300 send reset;
+#X text 540 40 Controlling GEM;
+#X text 530 210 Controlling GAME;
+#X obj 20 210 cnv 15 430 78 empty empty empty 20 12 0 14 #e0e0e0 #404040
+0;
+#X obj 20 160 cnv 15 430 40 empty empty empty 20 12 0 14 #bcbcbc #404040
+0;
+#X obj 22 47 cnv 15 430 98 empty empty empty 20 12 0 14 #e0e0e0 #404040
+0;
+#X text 30 220 CONTROLS;
+#X text 28 163 OBJECTIVE;
+#X text 30 50 DESCRIPTION;
+#X obj 20 310 cnv 15 430 101 empty empty empty 20 12 0 14 #bcbcbc #404040
+0;
+#X text 30 320 NOTE;
+#X text 140 20 Musical Land;
+#X text 30 70 Welcome to the land of music here beats control time
+and space, f 63;
+#X text 30 90 Live in it and experience it for yourself the musical
+beat ambience of this land we have got a world made of Sand and Water
+, f 65;
+#X text 80 240 WSAD - Movement, f 26;
+#X text 30 180 Collect as mmany points while staying on land;
+#X text 60 380 LISTEN TO THE DROP \, NOT THE BEAT DROP LITERALLY THE
+DROP;
+#X text 60 360 There is no boundary so if you go out of screen just
+reset;
+#X text 30 120 On the noise of Splash the sand turns into water and
+vice versa, f 67;
+#X text 480 180 Do not go fullscreen in GEM Window;
+#X obj 532 381 cnv 15 119 104 empty empty empty 20 12 0 14 #fc0400
+#404040 0;
+#X obj 542 391 cnv 15 99 82 empty empty empty 20 12 0 14 #fcfcfc #404040
+0;
+#X obj 560 420 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#N canvas 536 225 450 303 Music 0;
+#X obj 100 50 inlet;
+#X obj 100 75 sel 0 1;
+#X msg 100 110 \; pd dsp 0;
+#X msg 160 110 \; pd dsp 1;
+#X obj 180 70 loadbang;
+#X connect 0 0 1 0;
+#X connect 1 0 2 0;
+#X connect 1 1 3 0;
+#X connect 4 0 3 0;
+#X restore 560 440 pd Music;
+#X text 540 360 Controlling MUSIC;
+#X text 60 340 KEEP THE PATCH IN FOCUS FOR GAME TO TAKE INPUTS;
+#X obj 560 400 loadbang;
+#X text 80 260 E -Start R - Reset, f 42;
+#N canvas 846 168 685 531 License 0;
+#X text 50 80 Permission is hereby granted \, free of charge \, to
+any person obtaining a copy of this software and associated documentation
+files (the "Software") \, to deal in the Software without restriction
+\, including without limitation the rights to use \, copy \, modify
+\, merge \, publish \, distribute \, sublicense \, and/or sell copies
+of the Software \, and to permit persons to whom the Software is furnished
+to do so \, subject to the following conditions:, f 86;
+#X text 60 180 1.)Acknowledgment of Third-Party Assets: Parts of this
+software include art and sound assets that are either created by me
+\, the developer \, or sourced from publicly available art and Pixabay.
+Users of this software acknowledge that some assets are not original
+and have been obtained from public domain sources or Pixabay., f 86
+;
+#X text 60 250 2.)Non-Exclusive License for Public Domain and Pixabay
+Assets: Any art or sound assets not created by me but used under public
+domain or Pixabay terms are provided "as is \, " without any warranty
+of any kind \, express or implied \, including but not limited to the
+warranties of merchantability \, fitness for a particular purpose \,
+and non-infringement. Users are responsible for ensuring compliance
+with the terms under which these assets are provided., f 86;
+#X text 60 340 3.)No Warranty: THE SOFTWARE IS PROVIDED "AS IS \, "
+WITHOUT WARRANTY OF ANY KIND \, EXPRESS OR IMPLIED \, INCLUDING BUT
+NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY \, FITNESS FOR A PARTICULAR
+PURPOSE \, AND NON-INFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+HOLDERS BE LIABLE FOR ANY CLAIM \, DAMAGES \, OR OTHER LIABILITY \,
+WHETHER IN AN ACTION OF CONTRACT \, TORT \, OR OTHERWISE \, ARISING
+FROM \, OUT OF \, OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+OTHER DEALINGS IN THE SOFTWARE., f 86;
+#X text 50 40 Copyright (c) [2024] [Sushant Sudan], f 86;
+#X text 50 440 End of License, f 86;
+#X restore 300 440 pd License;
+#X connect 12 0 15 0;
+#X connect 13 0 14 0;
+#X connect 16 0 17 0;
+#X connect 18 0 19 0;
+#X connect 41 0 42 0;
+#X connect 45 0 41 0;
diff --git a/pd/doc/games/Sky Force/Art/Enemy1.png b/pd/doc/games/Sky Force/Art/Enemy1.png
new file mode 100644
index 0000000000000000000000000000000000000000..4a29debed7ede9176559a002a8b6b00d8233b92c
Binary files /dev/null and b/pd/doc/games/Sky Force/Art/Enemy1.png differ
diff --git a/pd/doc/games/Sky Force/Art/Enemy2.png b/pd/doc/games/Sky Force/Art/Enemy2.png
new file mode 100644
index 0000000000000000000000000000000000000000..2a004a577e2f68b7dd91d6d454145aa16886f9ce
Binary files /dev/null and b/pd/doc/games/Sky Force/Art/Enemy2.png differ
diff --git a/pd/doc/games/Sky Force/Art/Enemy3.png b/pd/doc/games/Sky Force/Art/Enemy3.png
new file mode 100644
index 0000000000000000000000000000000000000000..b3bdcc95e0fccac4cf1607b168541e651fa4171f
Binary files /dev/null and b/pd/doc/games/Sky Force/Art/Enemy3.png differ
diff --git a/pd/doc/games/Sky Force/Art/Enemy4.png b/pd/doc/games/Sky Force/Art/Enemy4.png
new file mode 100644
index 0000000000000000000000000000000000000000..79166be96612b0ec9d0c6dd5e6a2501d8d2fbfd2
Binary files /dev/null and b/pd/doc/games/Sky Force/Art/Enemy4.png differ
diff --git a/pd/doc/games/Sky Force/Art/Enemy5.png b/pd/doc/games/Sky Force/Art/Enemy5.png
new file mode 100644
index 0000000000000000000000000000000000000000..1ed77b99a3203b03aa0d358dd4e88c2d20d611fb
Binary files /dev/null and b/pd/doc/games/Sky Force/Art/Enemy5.png differ
diff --git a/pd/doc/games/Sky Force/Art/Enemy6.png b/pd/doc/games/Sky Force/Art/Enemy6.png
new file mode 100644
index 0000000000000000000000000000000000000000..f929bbcbca9694cedabed19a957b8fcd396725ef
Binary files /dev/null and b/pd/doc/games/Sky Force/Art/Enemy6.png differ
diff --git a/pd/doc/games/Sky Force/Art/SpaceCraft1.png b/pd/doc/games/Sky Force/Art/SpaceCraft1.png
new file mode 100644
index 0000000000000000000000000000000000000000..07f7c851826d31faad5c3e6b41e1fbd39a6657df
Binary files /dev/null and b/pd/doc/games/Sky Force/Art/SpaceCraft1.png differ
diff --git a/pd/doc/games/Sky Force/Sky_Force.pd b/pd/doc/games/Sky Force/Sky_Force.pd
new file mode 100644
index 0000000000000000000000000000000000000000..6c50a8fc39e0a577db8535a048928bb1003125a3
--- /dev/null
+++ b/pd/doc/games/Sky Force/Sky_Force.pd	
@@ -0,0 +1,16004 @@
+#N canvas 696 108 722 566 10;
+#N canvas 432 388 645 451 SpaceCraft 0;
+#X obj 10 40 gemhead;
+#X obj 10 300 translateXYZ;
+#X obj 10 120 pix_image;
+#X obj 70 20 loadbang;
+#X obj 10 190 pix_texture;
+#X floatatom 30 150 5 0 0 0 - - -, f 5;
+#X msg 80 140 env \$1;
+#X obj 80 120 hradio 15 1 0 6 empty empty empty 0 -6 0 8 #fcfcfc #000000
+#000000 2;
+#X msg 80 90 2;
+#X obj 190 10 key 1;
+#X obj 200 140 f;
+#X floatatom 110 300 5 0 0 0 - - -, f 5;
+#X msg 132 246 \$1 100;
+#X obj 132 275 line;
+#X obj 132 154 pack f f;
+#X obj 132 183 route 1 2;
+#X msg 192 76 1;
+#X msg 242 76 2;
+#X obj 192 105 t f b;
+#X obj 190 40 select 100 97;
+#X obj 50 220 loadbang;
+#X floatatom 50 270 5 0 0 0 - - -, f 5;
+#X msg 40 70 open Art/SpaceCraft1.png;
+#X obj 132 212 + 0.4;
+#X obj 172 212 - 0.4;
+#X msg 10 20 set 55;
+#X obj 110 340 send attack_pos;
+#X obj 10 330 colorRGB 0 1 1;
+#X obj 190 260 receive attack;
+#X msg 50 250 -3.2;
+#X obj 10 355 square 0.4;
+#X obj 260 310 receive attack_pos;
+#X floatatom 260 335 5 0 0 0 - - -, f 5;
+#X connect 0 0 2 0;
+#X connect 1 0 27 0;
+#X connect 2 0 4 0;
+#X connect 3 0 22 0;
+#X connect 3 0 8 0;
+#X connect 3 0 25 0;
+#X connect 4 0 1 0;
+#X connect 5 0 4 0;
+#X connect 6 0 4 0;
+#X connect 7 0 6 0;
+#X connect 7 0 4 0;
+#X connect 8 0 7 0;
+#X connect 9 0 19 0;
+#X connect 10 0 14 1;
+#X connect 11 0 10 1;
+#X connect 11 0 1 1;
+#X connect 11 0 26 0;
+#X connect 12 0 13 0;
+#X connect 13 0 11 0;
+#X connect 14 0 15 0;
+#X connect 15 0 23 0;
+#X connect 15 1 24 0;
+#X connect 16 0 18 0;
+#X connect 17 0 18 0;
+#X connect 18 0 14 0;
+#X connect 18 1 10 0;
+#X connect 19 0 16 0;
+#X connect 19 1 17 0;
+#X connect 20 0 29 0;
+#X connect 21 0 1 2;
+#X connect 22 0 2 0;
+#X connect 23 0 12 0;
+#X connect 24 0 12 0;
+#X connect 25 0 0 0;
+#X connect 27 0 30 0;
+#X connect 28 0 11 0;
+#X connect 29 0 21 0;
+#X connect 31 0 32 0;
+#X restore 40 490 pd SpaceCraft;
+#N canvas 424 283 463 363 Attack_Beam 0;
+#X obj 30 150 receive attack_pos;
+#X obj 10 130 gemhead;
+#X obj 10 190 translateXYZ 0 1 0;
+#X obj 10 250 rectangle 0.02 4;
+#X obj 10 40 receive attack;
+#X obj 10 100 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 30 70 delay 200;
+#X obj 160 60 key;
+#X obj 160 85 select 32;
+#X obj 160 190 send attack;
+#X obj 160 160 spigot;
+#X obj 180 130 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 230 90 loadbang;
+#X obj 230 110 receive attack;
+#X obj 230 140 delay 1200;
+#X obj 10 220 colorRGB 0 1 1;
+#X floatatom 30 175 5 0 0 0 - - -, f 5;
+#X obj 92 3 loadbang;
+#X obj 152 -17 loadbang;
+#X obj 152 8 delay 100;
+#X obj 152 33 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X connect 0 0 2 1;
+#X connect 0 0 16 0;
+#X connect 1 0 2 0;
+#X connect 2 0 15 0;
+#X connect 4 0 5 0;
+#X connect 4 0 6 0;
+#X connect 5 0 1 0;
+#X connect 6 0 5 0;
+#X connect 7 0 8 0;
+#X connect 8 0 10 0;
+#X connect 10 0 9 0;
+#X connect 11 0 10 1;
+#X connect 12 0 11 0;
+#X connect 13 0 11 0;
+#X connect 13 0 14 0;
+#X connect 14 0 11 0;
+#X connect 15 0 3 0;
+#X connect 17 0 20 0;
+#X connect 18 0 19 0;
+#X connect 19 0 20 0;
+#X connect 20 0 1 0;
+#X restore 40 530 pd Attack_Beam;
+#N canvas 688 204 694 491 Enemy_shape 0;
+#X obj 40 220 pix_image;
+#X obj 70 140 loadbang;
+#X obj 40 290 pix_texture;
+#X msg 110 240 env \$1;
+#X obj 110 220 hradio 15 1 0 6 empty empty empty 0 -6 0 8 #fcfcfc #000000
+#000000 2;
+#X obj 40 320 colorRGB 1 0 0;
+#X obj 40 350 translateXYZ -2 1 0;
+#X obj 220 230 pix_image;
+#X obj 250 150 loadbang;
+#X obj 220 300 pix_texture;
+#X msg 290 250 env \$1;
+#X obj 290 230 hradio 15 1 0 6 empty empty empty 0 -6 0 8 #fcfcfc #000000
+#000000 2;
+#X msg 110 200 2;
+#X obj 40 110 gemhead;
+#X obj 240 110 gemhead;
+#X obj 390 230 pix_image;
+#X obj 420 150 loadbang;
+#X obj 390 300 pix_texture;
+#X msg 460 250 env \$1;
+#X obj 460 230 hradio 15 1 0 6 empty empty empty 0 -6 0 8 #fcfcfc #000000
+#000000 2;
+#X obj 410 110 gemhead;
+#X msg 290 200 2;
+#X msg 460 200 2;
+#X obj 40 70 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000 #000000
+0 1;
+#X obj 240 70 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 410 70 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X msg 70 170 open Art/Enemy1.png;
+#X obj 40 380 square 0.3;
+#X msg 250 180 open Art/Enemy2.png;
+#X obj 220 390 square 0.3;
+#X obj 390 390 square 0.3;
+#X obj 220 325 colorRGB 0 0 1;
+#X msg 420 180 open Art/Enemy3.png;
+#X obj 390 325 colorRGB 1 1 0;
+#X obj 220 360 translateXYZ 0 1 0;
+#X obj 390 360 translateXYZ 2 1 0;
+#X obj 40 10 loadbang;
+#X obj 60 40 delay 100;
+#X obj 230 10 loadbang;
+#X obj 250 40 delay 100;
+#X obj 410 10 loadbang;
+#X obj 430 40 delay 100;
+#X connect 0 0 2 0;
+#X connect 1 0 26 0;
+#X connect 1 0 12 0;
+#X connect 2 0 5 0;
+#X connect 3 0 2 0;
+#X connect 4 0 3 0;
+#X connect 4 0 2 0;
+#X connect 5 0 6 0;
+#X connect 6 0 27 0;
+#X connect 7 0 9 0;
+#X connect 8 0 28 0;
+#X connect 8 0 21 0;
+#X connect 9 0 31 0;
+#X connect 10 0 9 0;
+#X connect 11 0 10 0;
+#X connect 11 0 9 0;
+#X connect 12 0 4 0;
+#X connect 13 0 0 0;
+#X connect 14 0 7 0;
+#X connect 15 0 17 0;
+#X connect 16 0 32 0;
+#X connect 16 0 22 0;
+#X connect 17 0 33 0;
+#X connect 18 0 17 0;
+#X connect 19 0 18 0;
+#X connect 19 0 17 0;
+#X connect 20 0 15 0;
+#X connect 21 0 11 0;
+#X connect 22 0 19 0;
+#X connect 23 0 13 0;
+#X connect 24 0 14 0;
+#X connect 25 0 20 0;
+#X connect 26 0 0 0;
+#X connect 28 0 7 0;
+#X connect 31 0 34 0;
+#X connect 32 0 15 0;
+#X connect 33 0 35 0;
+#X connect 34 0 29 0;
+#X connect 35 0 30 0;
+#X connect 36 0 23 0;
+#X connect 36 0 37 0;
+#X connect 37 0 23 0;
+#X connect 38 0 39 0;
+#X connect 38 0 24 0;
+#X connect 39 0 24 0;
+#X connect 40 0 41 0;
+#X connect 40 0 25 0;
+#X connect 41 0 25 0;
+#X restore 40 510 pd Enemy_shape;
+#N canvas 892 28 474 439 score 0;
+#X obj 160 40 gemhead;
+#X obj 320 90 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X floatatom 310 150 5 0 0 0 - - -, f 5;
+#X msg 280 210 float \$1;
+#X obj 160 220 colorRGB 1 1 1;
+#X obj 200 130 hsl 87 15 -6 6 0 0 empty empty empty -2 -8 0 10 #fcfcfc
+#000000 #000000 6350 1;
+#X obj 200 150 hsl 88 15 -6 6 0 0 empty empty empty -2 -8 0 10 #fcfcfc
+#000000 #000000 7150 1;
+#X msg 180 80 set \$1;
+#X msg 250 80 set \$1;
+#X msg 180 100 2.86047;
+#X msg 250 100 3.86207;
+#X obj 160 180 translateXYZ 0 0 0;
+#X obj 230 40 loadbang;
+#X obj 160 280 text2d 0;
+#X obj 70 130 hsl 87 15 -6 6 0 0 empty empty empty -2 -8 0 10 #fcfcfc
+#000000 #000000 5750 1;
+#X obj 70 150 hsl 88 15 -6 6 0 0 empty empty empty -2 -8 0 10 #fcfcfc
+#000000 #000000 7150 1;
+#X msg 50 80 set \$1;
+#X msg 120 80 set \$1;
+#X msg 50 100 2.02326;
+#X msg 120 100 3.86207;
+#X obj 30 180 translateXYZ 0 0 0;
+#X floatatom 90 260 5 0 0 0 - - -, f 5;
+#X obj 100 40 loadbang;
+#X obj 30 40 gemhead;
+#X obj 30 220 colorRGB 1 1 1;
+#X obj 370 150 + 1;
+#X msg 320 120 1;
+#X obj 320 50 receive score-space;
+#X msg 370 120 0;
+#X obj 350 200 send score-no;
+#X msg 30 10 set 65;
+#X msg 160 10 set 65;
+#X obj 370 90 receive start;
+#X obj 30 280 text2d Score:;
+#X obj 220 340 send round2;
+#X obj 220 300 sel 1;
+#X obj 220 280 == 12;
+#X obj 320 300 sel 1;
+#X obj 320 340 send round3;
+#X obj 220 320 delay 2000;
+#X obj 320 320 delay 2000;
+#X obj 260 240 f;
+#X obj 410 330 send win;
+#X obj 410 305 sel 1;
+#X obj 320 280 == 24;
+#X obj 410 280 == 36;
+#X connect 0 0 11 0;
+#X connect 1 0 26 0;
+#X connect 2 0 25 1;
+#X connect 2 0 3 0;
+#X connect 2 0 29 0;
+#X connect 2 0 36 0;
+#X connect 2 0 44 0;
+#X connect 2 0 45 0;
+#X connect 3 0 41 0;
+#X connect 5 0 7 0;
+#X connect 5 0 11 1;
+#X connect 6 0 8 0;
+#X connect 6 0 11 2;
+#X connect 7 0 9 0;
+#X connect 8 0 10 0;
+#X connect 9 0 5 0;
+#X connect 10 0 6 0;
+#X connect 11 0 4 0;
+#X connect 12 0 9 0;
+#X connect 12 0 10 0;
+#X connect 12 0 31 0;
+#X connect 14 0 16 0;
+#X connect 14 0 20 1;
+#X connect 15 0 17 0;
+#X connect 15 0 20 2;
+#X connect 16 0 18 0;
+#X connect 17 0 19 0;
+#X connect 18 0 14 0;
+#X connect 19 0 15 0;
+#X connect 20 0 24 0;
+#X connect 21 0 33 1;
+#X connect 22 0 18 0;
+#X connect 22 0 19 0;
+#X connect 22 0 30 0;
+#X connect 23 0 20 0;
+#X connect 25 0 2 0;
+#X connect 26 0 25 0;
+#X connect 27 0 1 0;
+#X connect 28 0 2 0;
+#X connect 30 0 23 0;
+#X connect 31 0 0 0;
+#X connect 32 0 28 0;
+#X connect 35 0 39 0;
+#X connect 36 0 35 0;
+#X connect 37 0 40 0;
+#X connect 39 0 34 0;
+#X connect 40 0 38 0;
+#X connect 41 0 13 0;
+#X connect 43 0 42 0;
+#X connect 44 0 37 0;
+#X connect 45 0 43 0;
+#X restore 40 470 pd score;
+#N canvas 216 20 826 699 Enemies_layers 0;
+#X floatatom 100 70 5 0 0 1 - - -, f 5;
+#X obj 100 30 loadbang;
+#N canvas 104 60 606 678 Enemy1 0;
+#X obj 360 350 receive hit1;
+#X obj 10 540 receive reset;
+#X obj 200 600 outlet;
+#X obj 200 580 pack 0 0;
+#X obj 220 550 t b f;
+#X msg 360 400 -10;
+#X msg 390 400 -10;
+#X obj 160 210 metro;
+#X obj 160 235 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 230 190 int 1;
+#X floatatom 230 222 5 0 0 0 - - -, f 5;
+#X obj 300 232 + 1;
+#X obj 100 200 sel 0;
+#X obj 100 225 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X msg 100 248 -1;
+#X obj 40 200 loadbang;
+#X obj 190 110 loadbang;
+#X obj 230 271 + 1;
+#X floatatom 230 300 5 0 0 0 - - -, f 5;
+#X floatatom 190 160 5 0 0 0 - - -, f 5;
+#X obj 40 570 receive start;
+#X obj 40 600 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 60 150 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 90 150 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 120 150 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 10 120 spigot;
+#X obj 110 120 spigot;
+#X obj 10 90 receive reset;
+#X obj 130 90 receive start;
+#X obj 250 350 sel 4 8;
+#X obj 230 242 % 8;
+#X msg 250 450 \$1;
+#X floatatom 220 500 5 0 0 0 - - -, f 5;
+#X obj 250 390 f 4;
+#X obj 150 350 sel 5 6 7;
+#X obj 70 350 sel 1 2 3;
+#X obj 250 425 - 0.5;
+#X msg 80 380 1;
+#X msg 150 380 2;
+#X obj 100 439 pack f f;
+#X obj 100 468 route 1 2;
+#X obj 90 410 t f b;
+#X obj 100 500 + 0.5;
+#X obj 140 500 - 0.5;
+#X floatatom 120 540 5 0 0 0 - - -, f 5;
+#X obj 170 430 f -3;
+#X msg 40 623 -3;
+#X msg 190 135 750;
+#X obj 20 60 receive hit1;
+#X obj 30 510 loadbang;
+#X msg 100 620 3;
+#X connect 0 0 5 0;
+#X connect 0 0 6 0;
+#X connect 1 0 21 0;
+#X connect 3 0 2 0;
+#X connect 4 0 3 0;
+#X connect 4 1 3 1;
+#X connect 5 0 3 0;
+#X connect 6 0 4 0;
+#X connect 7 0 8 0;
+#X connect 8 0 9 0;
+#X connect 9 0 10 0;
+#X connect 9 0 11 0;
+#X connect 10 0 30 0;
+#X connect 11 0 9 1;
+#X connect 12 0 13 0;
+#X connect 13 0 14 0;
+#X connect 14 0 9 0;
+#X connect 15 0 13 0;
+#X connect 16 0 47 0;
+#X connect 16 0 24 0;
+#X connect 17 0 18 0;
+#X connect 18 0 29 0;
+#X connect 18 0 34 0;
+#X connect 18 0 35 0;
+#X connect 19 0 7 1;
+#X connect 20 0 21 0;
+#X connect 21 0 46 0;
+#X connect 21 0 50 0;
+#X connect 22 0 23 0;
+#X connect 22 0 25 1;
+#X connect 22 0 12 0;
+#X connect 22 0 7 0;
+#X connect 23 0 24 0;
+#X connect 24 0 26 1;
+#X connect 25 0 22 0;
+#X connect 26 0 22 0;
+#X connect 27 0 25 0;
+#X connect 28 0 26 0;
+#X connect 29 0 33 0;
+#X connect 29 1 33 0;
+#X connect 30 0 17 0;
+#X connect 31 0 32 0;
+#X connect 32 0 4 0;
+#X connect 32 0 33 1;
+#X connect 33 0 36 0;
+#X connect 34 0 38 0;
+#X connect 34 1 38 0;
+#X connect 34 2 38 0;
+#X connect 35 0 37 0;
+#X connect 35 1 37 0;
+#X connect 35 2 37 0;
+#X connect 36 0 31 0;
+#X connect 37 0 41 0;
+#X connect 38 0 41 0;
+#X connect 39 0 40 0;
+#X connect 40 0 42 0;
+#X connect 40 1 43 0;
+#X connect 41 0 39 0;
+#X connect 41 1 45 0;
+#X connect 42 0 44 0;
+#X connect 43 0 44 0;
+#X connect 44 0 45 1;
+#X connect 44 0 3 0;
+#X connect 45 0 39 1;
+#X connect 46 0 3 0;
+#X connect 46 0 44 0;
+#X connect 47 0 19 0;
+#X connect 48 0 25 0;
+#X connect 49 0 21 0;
+#X connect 50 0 4 0;
+#X connect 50 0 32 0;
+#X restore 30 70 pd Enemy1;
+#N canvas 868 136 502 414 attack 0;
+#X obj 130 180 outlet;
+#X obj 30 30 receive attack_pos;
+#X obj 171 31 receive attack;
+#X obj 171 91 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 191 61 delay 200;
+#X obj 130 130 spigot;
+#X floatatom 90 160 5 0 0 0 - - -, f 5;
+#X connect 1 0 5 0;
+#X connect 2 0 3 0;
+#X connect 2 0 4 0;
+#X connect 3 0 5 1;
+#X connect 4 0 3 0;
+#X connect 5 0 0 0;
+#X connect 5 0 6 0;
+#X restore 10 20 pd attack;
+#N canvas 640 184 746 626 attack_collision 0;
+#X obj 340 50 inlet radius;
+#X obj 230 50 inlet reference;
+#X obj 290 100 gemhead;
+#X obj 390 80 unpack 0 0;
+#X obj 20 310 select 0 1;
+#X obj 30 0 inlet test;
+#N canvas 876 256 554 530 collide 0;
+#X obj 91 217 list-map2;
+#X obj 171 218 -;
+#X obj 171 265 *;
+#X obj 171 241 t a a;
+#X obj 84 340 sqrt;
+#X obj 84 290 list-reduce;
+#X obj 170 290 +;
+#X obj 124 360 t b a;
+#X obj 150 130 inlet reference;
+#X obj 80 130 inlet test;
+#X obj 294 247 inlet radius;
+#X obj 94 410 outlet;
+#X obj 94 380 <= 1;
+#X floatatom 40 320 5 0 0 0 - - -, f 5;
+#X connect 0 0 5 0;
+#X connect 0 1 1 0;
+#X connect 1 0 3 0;
+#X connect 2 0 0 2;
+#X connect 3 0 2 0;
+#X connect 3 1 2 1;
+#X connect 4 0 12 0;
+#X connect 5 0 4 0;
+#X connect 5 0 13 0;
+#X connect 5 1 6 0;
+#X connect 6 0 5 1;
+#X connect 7 0 12 0;
+#X connect 7 1 12 1;
+#X connect 8 0 0 1;
+#X connect 9 0 0 0;
+#X connect 10 0 7 0;
+#X connect 12 0 11 0;
+#X restore 30 110 pd collide;
+#X obj 50 140 tgl 24 0 empty empty hit? 28 7 1 10 #fcfcfc #000000 #000000
+0 1;
+#X obj 130 110 loadbang;
+#X obj 73 232 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 103 232 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 133 232 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 23 202 spigot;
+#X obj 123 202 spigot;
+#X obj 23 172 receive reset;
+#X obj 193 222 loadbang;
+#X obj 143 172 receive start;
+#X obj 43 272 spigot;
+#X obj 130 140 delay 100;
+#X obj 290 210 pix_image;
+#X obj 290 280 pix_texture;
+#X msg 360 230 env \$1;
+#X obj 360 210 hradio 15 1 0 6 empty empty empty 0 -6 0 8 #fcfcfc #000000
+#000000 0;
+#X obj 290 370 translateXYZ -2 1 0;
+#X msg 360 190 2;
+#X msg 320 160 open Art/Enemy1.png;
+#X obj 30 70 pack 0 0;
+#X obj 20 360 send hit1;
+#X obj 50 30 delay 100;
+#X msg 50 50 10;
+#X obj 290 400 square 0.25;
+#X obj 20 380 send score-space;
+#X obj 20 400 send destroyed;
+#X msg 500 230 env \$1;
+#X obj 500 210 hradio 15 1 0 6 empty empty empty 0 -6 0 8 #fcfcfc #000000
+#000000 0;
+#X msg 500 190 2;
+#X msg 460 160 open Art/Enemy3.png;
+#X obj 460 130 receive round3;
+#X obj 320 130 receive start;
+#X msg 630 230 env \$1;
+#X obj 630 210 hradio 15 1 0 6 empty empty empty 0 -6 0 8 #fcfcfc #000000
+#000000 0;
+#X msg 630 190 2;
+#X obj 590 130 receive round2;
+#X msg 590 160 open Art/Enemy1.png;
+#X obj 290 340 color 1 0 0;
+#X msg 380 280 1 0 0;
+#X msg 450 280 1 1 0;
+#X msg 510 280 0 0 1;
+#X connect 0 0 6 2;
+#X connect 1 0 3 0;
+#X connect 1 0 6 1;
+#X connect 2 0 19 0;
+#X connect 3 0 23 1;
+#X connect 3 1 23 2;
+#X connect 3 1 26 1;
+#X connect 4 1 27 0;
+#X connect 4 1 31 0;
+#X connect 4 1 32 0;
+#X connect 5 0 26 0;
+#X connect 5 0 28 0;
+#X connect 6 0 7 0;
+#X connect 7 0 17 0;
+#X connect 8 0 18 0;
+#X connect 9 0 10 0;
+#X connect 9 0 12 1;
+#X connect 9 0 17 1;
+#X connect 10 0 11 0;
+#X connect 11 0 13 1;
+#X connect 12 0 9 0;
+#X connect 13 0 9 0;
+#X connect 14 0 12 0;
+#X connect 15 0 11 0;
+#X connect 16 0 13 0;
+#X connect 17 0 4 0;
+#X connect 18 0 7 0;
+#X connect 19 0 20 0;
+#X connect 20 0 44 0;
+#X connect 21 0 20 0;
+#X connect 22 0 21 0;
+#X connect 22 0 20 0;
+#X connect 23 0 30 0;
+#X connect 24 0 22 0;
+#X connect 25 0 19 0;
+#X connect 26 0 6 0;
+#X connect 28 0 29 0;
+#X connect 29 0 26 0;
+#X connect 33 0 20 0;
+#X connect 34 0 33 0;
+#X connect 34 0 20 0;
+#X connect 35 0 34 0;
+#X connect 36 0 19 0;
+#X connect 37 0 36 0;
+#X connect 37 0 35 0;
+#X connect 37 0 46 0;
+#X connect 38 0 25 0;
+#X connect 38 0 24 0;
+#X connect 38 0 45 0;
+#X connect 39 0 20 0;
+#X connect 40 0 39 0;
+#X connect 40 0 20 0;
+#X connect 41 0 40 0;
+#X connect 42 0 43 0;
+#X connect 42 0 41 0;
+#X connect 42 0 47 0;
+#X connect 43 0 19 0;
+#X connect 44 0 23 0;
+#X connect 45 0 44 1;
+#X connect 46 0 44 1;
+#X connect 47 0 44 1;
+#X restore 10 120 pd attack_collision;
+#X floatatom 260 70 5 0 0 1 - - -, f 5;
+#X obj 260 30 loadbang;
+#N canvas 868 136 502 414 attack 0;
+#X obj 130 180 outlet;
+#X obj 30 30 receive attack_pos;
+#X obj 171 31 receive attack;
+#X obj 171 91 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 191 61 delay 200;
+#X obj 130 130 spigot;
+#X floatatom 90 160 5 0 0 0 - - -, f 5;
+#X connect 1 0 5 0;
+#X connect 2 0 3 0;
+#X connect 2 0 4 0;
+#X connect 3 0 5 1;
+#X connect 4 0 3 0;
+#X connect 5 0 0 0;
+#X connect 5 0 6 0;
+#X restore 170 20 pd attack;
+#N canvas 724 184 734 598 attack_collision 0;
+#X obj 340 50 inlet radius;
+#X obj 240 50 inlet reference;
+#X obj 390 80 unpack 0 0, f 11;
+#X obj 20 310 select 0 1;
+#X obj 30 0 inlet test;
+#N canvas 876 256 554 530 collide 0;
+#X obj 91 217 list-map2;
+#X obj 171 218 -;
+#X obj 171 265 *;
+#X obj 171 241 t a a;
+#X obj 84 340 sqrt;
+#X obj 84 290 list-reduce;
+#X obj 170 290 +;
+#X obj 124 360 t b a;
+#X obj 150 130 inlet reference;
+#X obj 80 130 inlet test;
+#X obj 294 247 inlet radius;
+#X obj 94 410 outlet;
+#X obj 94 380 <= 1;
+#X floatatom 40 320 5 0 0 0 - - -, f 5;
+#X connect 0 0 5 0;
+#X connect 0 1 1 0;
+#X connect 1 0 3 0;
+#X connect 2 0 0 2;
+#X connect 3 0 2 0;
+#X connect 3 1 2 1;
+#X connect 4 0 12 0;
+#X connect 5 0 4 0;
+#X connect 5 0 13 0;
+#X connect 5 1 6 0;
+#X connect 6 0 5 1;
+#X connect 7 0 12 0;
+#X connect 7 1 12 1;
+#X connect 8 0 0 1;
+#X connect 9 0 0 0;
+#X connect 10 0 7 0;
+#X connect 12 0 11 0;
+#X restore 30 110 pd collide;
+#X obj 50 140 tgl 24 0 empty empty hit? 28 7 1 10 #fcfcfc #000000 #000000
+0 1;
+#X obj 130 110 loadbang;
+#X obj 73 232 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 103 232 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 133 232 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 23 202 spigot;
+#X obj 123 202 spigot;
+#X obj 23 172 receive reset;
+#X obj 193 222 loadbang;
+#X obj 143 172 receive start;
+#X obj 43 272 spigot;
+#X obj 130 140 delay 100;
+#X obj 30 70 pack 0 0;
+#X obj 50 30 delay 100;
+#X msg 50 50 10;
+#X obj 20 360 send hit2;
+#X obj 20 390 send score-space;
+#X obj 20 410 send destroyed;
+#X obj 280 110 gemhead;
+#X obj 280 220 pix_image;
+#X obj 280 290 pix_texture;
+#X msg 350 240 env \$1;
+#X obj 350 220 hradio 15 1 0 6 empty empty empty 0 -6 0 8 #fcfcfc #000000
+#000000 0;
+#X obj 280 380 translateXYZ -2 1 0;
+#X msg 350 200 2;
+#X msg 310 170 open Art/Enemy1.png;
+#X obj 280 410 square 0.25;
+#X msg 490 240 env \$1;
+#X obj 490 220 hradio 15 1 0 6 empty empty empty 0 -6 0 8 #fcfcfc #000000
+#000000 0;
+#X msg 490 200 2;
+#X msg 450 170 open Art/Enemy3.png;
+#X obj 450 140 receive round3;
+#X obj 310 140 receive start;
+#X msg 620 240 env \$1;
+#X obj 620 220 hradio 15 1 0 6 empty empty empty 0 -6 0 8 #fcfcfc #000000
+#000000 0;
+#X msg 620 200 2;
+#X obj 580 140 receive round2;
+#X msg 580 170 open Art/Enemy1.png;
+#X obj 280 350 color 1 0 0;
+#X msg 370 290 1 0 0;
+#X msg 440 290 1 1 0;
+#X msg 500 290 0 0 1;
+#X connect 0 0 5 2;
+#X connect 1 0 2 0;
+#X connect 1 0 5 1;
+#X connect 2 0 29 1;
+#X connect 2 1 18 1;
+#X connect 2 1 29 2;
+#X connect 3 1 21 0;
+#X connect 3 1 22 0;
+#X connect 3 1 23 0;
+#X connect 4 0 18 0;
+#X connect 4 0 19 0;
+#X connect 5 0 6 0;
+#X connect 6 0 16 0;
+#X connect 7 0 17 0;
+#X connect 8 0 9 0;
+#X connect 8 0 11 1;
+#X connect 8 0 16 1;
+#X connect 9 0 10 0;
+#X connect 10 0 12 1;
+#X connect 11 0 8 0;
+#X connect 12 0 8 0;
+#X connect 13 0 11 0;
+#X connect 14 0 10 0;
+#X connect 15 0 12 0;
+#X connect 16 0 3 0;
+#X connect 17 0 6 0;
+#X connect 18 0 5 0;
+#X connect 19 0 20 0;
+#X connect 20 0 18 0;
+#X connect 24 0 25 0;
+#X connect 25 0 26 0;
+#X connect 26 0 44 0;
+#X connect 27 0 26 0;
+#X connect 28 0 27 0;
+#X connect 28 0 26 0;
+#X connect 29 0 32 0;
+#X connect 30 0 28 0;
+#X connect 31 0 25 0;
+#X connect 33 0 26 0;
+#X connect 34 0 33 0;
+#X connect 34 0 26 0;
+#X connect 35 0 34 0;
+#X connect 36 0 25 0;
+#X connect 37 0 36 0;
+#X connect 37 0 35 0;
+#X connect 37 0 46 0;
+#X connect 38 0 31 0;
+#X connect 38 0 30 0;
+#X connect 38 0 45 0;
+#X connect 39 0 26 0;
+#X connect 40 0 39 0;
+#X connect 40 0 26 0;
+#X connect 41 0 40 0;
+#X connect 42 0 43 0;
+#X connect 42 0 41 0;
+#X connect 42 0 47 0;
+#X connect 43 0 25 0;
+#X connect 44 0 29 0;
+#X connect 45 0 44 1;
+#X connect 46 0 44 1;
+#X connect 47 0 44 1;
+#X restore 170 120 pd attack_collision;
+#X floatatom 410 70 5 0 0 1 - - -, f 5;
+#X obj 410 30 loadbang;
+#N canvas 868 136 502 414 attack 0;
+#X obj 130 180 outlet;
+#X obj 30 30 receive attack_pos;
+#X obj 171 31 receive attack;
+#X obj 171 91 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 191 61 delay 200;
+#X obj 130 130 spigot;
+#X floatatom 90 160 5 0 0 0 - - -, f 5;
+#X connect 1 0 5 0;
+#X connect 2 0 3 0;
+#X connect 2 0 4 0;
+#X connect 3 0 5 1;
+#X connect 4 0 3 0;
+#X connect 5 0 0 0;
+#X connect 5 0 6 0;
+#X restore 320 20 pd attack;
+#N canvas 732 212 738 598 attack_collision 0;
+#X obj 340 50 inlet radius;
+#X obj 240 50 inlet reference;
+#X obj 390 80 unpack 0 0;
+#X obj 20 310 select 0 1;
+#X obj 30 0 inlet test;
+#N canvas 876 256 554 529 collide 0;
+#X obj 91 217 list-map2;
+#X obj 171 218 -;
+#X obj 171 265 *;
+#X obj 171 241 t a a;
+#X obj 84 340 sqrt;
+#X obj 84 290 list-reduce;
+#X obj 170 290 +;
+#X obj 124 360 t b a;
+#X obj 150 130 inlet reference;
+#X obj 80 130 inlet test;
+#X obj 294 247 inlet radius;
+#X obj 94 410 outlet;
+#X obj 94 380 <= 1;
+#X floatatom 40 320 5 0 0 0 - - -, f 5;
+#X connect 0 0 5 0;
+#X connect 0 1 1 0;
+#X connect 1 0 3 0;
+#X connect 2 0 0 2;
+#X connect 3 0 2 0;
+#X connect 3 1 2 1;
+#X connect 4 0 12 0;
+#X connect 5 0 4 0;
+#X connect 5 0 13 0;
+#X connect 5 1 6 0;
+#X connect 6 0 5 1;
+#X connect 7 0 12 0;
+#X connect 7 1 12 1;
+#X connect 8 0 0 1;
+#X connect 9 0 0 0;
+#X connect 10 0 7 0;
+#X connect 12 0 11 0;
+#X restore 30 110 pd collide;
+#X obj 50 140 tgl 24 0 empty empty hit? 28 7 1 10 #fcfcfc #000000 #000000
+0 1;
+#X obj 130 110 loadbang;
+#X obj 73 232 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 103 232 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 133 232 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 23 202 spigot;
+#X obj 123 202 spigot;
+#X obj 23 172 receive reset;
+#X obj 193 222 loadbang;
+#X obj 143 172 receive start;
+#X obj 43 272 spigot;
+#X obj 130 140 delay 100;
+#X obj 30 70 pack 0 0;
+#X obj 50 30 delay 100;
+#X msg 50 50 10;
+#X obj 20 360 send hit3;
+#X obj 20 380 send score-space;
+#X obj 20 400 send destroyed;
+#X obj 360 120 gemhead;
+#X obj 360 230 pix_image;
+#X obj 360 300 pix_texture;
+#X msg 430 250 env \$1;
+#X obj 430 230 hradio 15 1 0 6 empty empty empty 0 -6 0 8 #fcfcfc #000000
+#000000 0;
+#X obj 360 390 translateXYZ -2 1 0;
+#X msg 430 210 2;
+#X msg 390 180 open Art/Enemy1.png;
+#X obj 360 420 square 0.25;
+#X msg 570 250 env \$1;
+#X obj 570 230 hradio 15 1 0 6 empty empty empty 0 -6 0 8 #fcfcfc #000000
+#000000 0;
+#X msg 570 210 2;
+#X msg 530 180 open Art/Enemy3.png;
+#X obj 530 150 receive round3;
+#X obj 390 150 receive start;
+#X msg 700 250 env \$1;
+#X obj 700 230 hradio 15 1 0 6 empty empty empty 0 -6 0 8 #fcfcfc #000000
+#000000 0;
+#X msg 700 210 2;
+#X obj 660 150 receive round2;
+#X msg 660 180 open Art/Enemy1.png;
+#X obj 360 360 color 1 0 0;
+#X msg 450 300 1 0 0;
+#X msg 520 300 1 1 0;
+#X msg 580 300 0 0 1;
+#X connect 0 0 5 2;
+#X connect 1 0 2 0;
+#X connect 1 0 5 1;
+#X connect 2 0 29 1;
+#X connect 2 1 18 1;
+#X connect 2 1 29 2;
+#X connect 3 1 21 0;
+#X connect 3 1 22 0;
+#X connect 3 1 23 0;
+#X connect 4 0 18 0;
+#X connect 4 0 19 0;
+#X connect 5 0 6 0;
+#X connect 6 0 16 0;
+#X connect 7 0 17 0;
+#X connect 8 0 9 0;
+#X connect 8 0 11 1;
+#X connect 8 0 16 1;
+#X connect 9 0 10 0;
+#X connect 10 0 12 1;
+#X connect 11 0 8 0;
+#X connect 12 0 8 0;
+#X connect 13 0 11 0;
+#X connect 14 0 10 0;
+#X connect 15 0 12 0;
+#X connect 16 0 3 0;
+#X connect 17 0 6 0;
+#X connect 18 0 5 0;
+#X connect 19 0 20 0;
+#X connect 20 0 18 0;
+#X connect 24 0 25 0;
+#X connect 25 0 26 0;
+#X connect 26 0 44 0;
+#X connect 27 0 26 0;
+#X connect 28 0 27 0;
+#X connect 28 0 26 0;
+#X connect 29 0 32 0;
+#X connect 30 0 28 0;
+#X connect 31 0 25 0;
+#X connect 33 0 26 0;
+#X connect 34 0 33 0;
+#X connect 34 0 26 0;
+#X connect 35 0 34 0;
+#X connect 36 0 25 0;
+#X connect 37 0 36 0;
+#X connect 37 0 35 0;
+#X connect 37 0 46 0;
+#X connect 38 0 31 0;
+#X connect 38 0 30 0;
+#X connect 38 0 45 0;
+#X connect 39 0 26 0;
+#X connect 40 0 39 0;
+#X connect 40 0 26 0;
+#X connect 41 0 40 0;
+#X connect 42 0 43 0;
+#X connect 42 0 41 0;
+#X connect 42 0 47 0;
+#X connect 43 0 25 0;
+#X connect 44 0 29 0;
+#X connect 45 0 44 1;
+#X connect 46 0 44 1;
+#X connect 47 0 44 1;
+#X restore 320 120 pd attack_collision;
+#X floatatom 560 70 5 0 0 1 - - -, f 5;
+#X obj 560 30 loadbang;
+#N canvas 868 136 502 414 attack 0;
+#X obj 130 180 outlet;
+#X obj 30 30 receive attack_pos;
+#X obj 171 31 receive attack;
+#X obj 171 91 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 191 61 delay 200;
+#X obj 130 130 spigot;
+#X floatatom 90 160 5 0 0 0 - - -, f 5;
+#X connect 1 0 5 0;
+#X connect 2 0 3 0;
+#X connect 2 0 4 0;
+#X connect 3 0 5 1;
+#X connect 4 0 3 0;
+#X connect 5 0 0 0;
+#X connect 5 0 6 0;
+#X restore 470 20 pd attack;
+#N canvas 692 242 730 623 attack_collision 0;
+#X obj 340 50 inlet radius;
+#X obj 240 50 inlet reference;
+#X obj 390 80 unpack 0 0;
+#X obj 20 310 select 0 1;
+#X obj 30 0 inlet test;
+#N canvas 876 256 554 529 collide 0;
+#X obj 91 217 list-map2;
+#X obj 171 218 -;
+#X obj 171 265 *;
+#X obj 171 241 t a a;
+#X obj 84 340 sqrt;
+#X obj 84 290 list-reduce;
+#X obj 170 290 +;
+#X obj 124 360 t b a;
+#X obj 150 130 inlet reference;
+#X obj 80 130 inlet test;
+#X obj 294 247 inlet radius;
+#X obj 94 410 outlet;
+#X obj 94 380 <= 1;
+#X floatatom 40 320 5 0 0 0 - - -, f 5;
+#X connect 0 0 5 0;
+#X connect 0 1 1 0;
+#X connect 1 0 3 0;
+#X connect 2 0 0 2;
+#X connect 3 0 2 0;
+#X connect 3 1 2 1;
+#X connect 4 0 12 0;
+#X connect 5 0 4 0;
+#X connect 5 0 13 0;
+#X connect 5 1 6 0;
+#X connect 6 0 5 1;
+#X connect 7 0 12 0;
+#X connect 7 1 12 1;
+#X connect 8 0 0 1;
+#X connect 9 0 0 0;
+#X connect 10 0 7 0;
+#X connect 12 0 11 0;
+#X restore 30 110 pd collide;
+#X obj 50 140 tgl 24 0 empty empty hit? 28 7 1 10 #fcfcfc #000000 #000000
+0 1;
+#X obj 130 110 loadbang;
+#X obj 73 232 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 103 232 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 133 232 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 23 202 spigot;
+#X obj 123 202 spigot;
+#X obj 23 172 receive reset;
+#X obj 193 222 loadbang;
+#X obj 143 172 receive start;
+#X obj 43 272 spigot;
+#X obj 130 140 delay 100;
+#X obj 30 70 pack 0 0;
+#X obj 50 30 delay 100;
+#X msg 50 50 10;
+#X obj 20 360 send hit4;
+#X obj 20 380 send score-space;
+#X obj 20 400 send destroyed;
+#X obj 260 170 gemhead;
+#X obj 260 280 pix_image;
+#X obj 260 350 pix_texture;
+#X msg 330 300 env \$1;
+#X obj 330 280 hradio 15 1 0 6 empty empty empty 0 -6 0 8 #fcfcfc #000000
+#000000 0;
+#X obj 260 440 translateXYZ -2 1 0;
+#X msg 330 260 2;
+#X msg 290 230 open Art/Enemy1.png;
+#X obj 260 470 square 0.25;
+#X msg 470 300 env \$1;
+#X obj 470 280 hradio 15 1 0 6 empty empty empty 0 -6 0 8 #fcfcfc #000000
+#000000 0;
+#X msg 470 260 2;
+#X msg 430 230 open Art/Enemy3.png;
+#X obj 430 200 receive round3;
+#X obj 290 200 receive start;
+#X msg 600 300 env \$1;
+#X obj 600 280 hradio 15 1 0 6 empty empty empty 0 -6 0 8 #fcfcfc #000000
+#000000 0;
+#X msg 600 260 2;
+#X obj 560 200 receive round2;
+#X msg 560 230 open Art/Enemy1.png;
+#X obj 260 410 color 1 0 0;
+#X msg 350 350 1 0 0;
+#X msg 420 350 1 1 0;
+#X msg 480 350 0 0 1;
+#X connect 0 0 5 2;
+#X connect 1 0 2 0;
+#X connect 1 0 5 1;
+#X connect 2 0 29 1;
+#X connect 2 1 18 1;
+#X connect 2 1 29 2;
+#X connect 3 1 21 0;
+#X connect 3 1 22 0;
+#X connect 3 1 23 0;
+#X connect 4 0 18 0;
+#X connect 4 0 19 0;
+#X connect 5 0 6 0;
+#X connect 6 0 16 0;
+#X connect 7 0 17 0;
+#X connect 8 0 9 0;
+#X connect 8 0 11 1;
+#X connect 8 0 16 1;
+#X connect 9 0 10 0;
+#X connect 10 0 12 1;
+#X connect 11 0 8 0;
+#X connect 12 0 8 0;
+#X connect 13 0 11 0;
+#X connect 14 0 10 0;
+#X connect 15 0 12 0;
+#X connect 16 0 3 0;
+#X connect 17 0 6 0;
+#X connect 18 0 5 0;
+#X connect 19 0 20 0;
+#X connect 20 0 18 0;
+#X connect 24 0 25 0;
+#X connect 25 0 26 0;
+#X connect 26 0 44 0;
+#X connect 27 0 26 0;
+#X connect 28 0 27 0;
+#X connect 28 0 26 0;
+#X connect 29 0 32 0;
+#X connect 30 0 28 0;
+#X connect 31 0 25 0;
+#X connect 33 0 26 0;
+#X connect 34 0 33 0;
+#X connect 34 0 26 0;
+#X connect 35 0 34 0;
+#X connect 36 0 25 0;
+#X connect 37 0 36 0;
+#X connect 37 0 35 0;
+#X connect 37 0 46 0;
+#X connect 38 0 31 0;
+#X connect 38 0 30 0;
+#X connect 38 0 45 0;
+#X connect 39 0 26 0;
+#X connect 40 0 39 0;
+#X connect 40 0 26 0;
+#X connect 41 0 40 0;
+#X connect 42 0 43 0;
+#X connect 42 0 41 0;
+#X connect 42 0 47 0;
+#X connect 43 0 25 0;
+#X connect 44 0 29 0;
+#X connect 45 0 44 1;
+#X connect 46 0 44 1;
+#X connect 47 0 44 1;
+#X restore 470 120 pd attack_collision;
+#N canvas 860 72 602 674 Enemy2 0;
+#X obj 10 540 receive reset;
+#X obj 200 600 outlet;
+#X obj 200 580 pack 0 0;
+#X obj 220 550 t b f;
+#X msg 360 400 -10;
+#X msg 390 400 -10;
+#X obj 160 210 metro;
+#X obj 160 235 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 230 190 int 1;
+#X floatatom 230 222 5 0 0 0 - - -, f 5;
+#X obj 300 232 + 1;
+#X obj 100 200 sel 0;
+#X obj 100 225 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X msg 100 248 -1;
+#X obj 40 200 loadbang;
+#X obj 190 110 loadbang;
+#X obj 230 271 + 1;
+#X floatatom 230 300 5 0 0 0 - - -, f 5;
+#X floatatom 190 160 5 0 0 0 - - -, f 5;
+#X obj 40 570 receive start;
+#X obj 40 600 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 60 150 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 90 150 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 120 150 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 10 120 spigot;
+#X obj 110 120 spigot;
+#X obj 10 90 receive reset;
+#X obj 130 90 receive start;
+#X obj 250 350 sel 4 8;
+#X obj 230 242 % 8;
+#X msg 250 450 \$1;
+#X floatatom 220 500 5 0 0 0 - - -, f 5;
+#X obj 250 390 f 4;
+#X obj 150 350 sel 5 6 7;
+#X obj 70 350 sel 1 2 3;
+#X obj 250 425 - 0.5;
+#X msg 80 380 1;
+#X msg 150 380 2;
+#X obj 100 439 pack f f;
+#X obj 100 468 route 1 2;
+#X obj 90 410 t f b;
+#X obj 100 500 + 0.5;
+#X obj 140 500 - 0.5;
+#X floatatom 120 540 5 0 0 0 - - -, f 5;
+#X obj 170 430 f -3;
+#X msg 190 135 750;
+#X obj 30 510 loadbang;
+#X obj 20 60 receive hit2;
+#X obj 360 350 receive hit2;
+#X msg 40 623 -2;
+#X msg 100 620 3;
+#X connect 0 0 20 0;
+#X connect 2 0 1 0;
+#X connect 3 0 2 0;
+#X connect 3 1 2 1;
+#X connect 4 0 2 0;
+#X connect 5 0 3 0;
+#X connect 6 0 7 0;
+#X connect 7 0 8 0;
+#X connect 8 0 9 0;
+#X connect 8 0 10 0;
+#X connect 9 0 29 0;
+#X connect 10 0 8 1;
+#X connect 11 0 12 0;
+#X connect 12 0 13 0;
+#X connect 13 0 8 0;
+#X connect 14 0 12 0;
+#X connect 15 0 45 0;
+#X connect 15 0 23 0;
+#X connect 16 0 17 0;
+#X connect 17 0 28 0;
+#X connect 17 0 33 0;
+#X connect 17 0 34 0;
+#X connect 18 0 6 1;
+#X connect 19 0 20 0;
+#X connect 20 0 49 0;
+#X connect 20 0 50 0;
+#X connect 21 0 22 0;
+#X connect 21 0 24 1;
+#X connect 21 0 11 0;
+#X connect 21 0 6 0;
+#X connect 22 0 23 0;
+#X connect 23 0 25 1;
+#X connect 24 0 21 0;
+#X connect 25 0 21 0;
+#X connect 26 0 24 0;
+#X connect 27 0 25 0;
+#X connect 28 0 32 0;
+#X connect 28 1 32 0;
+#X connect 29 0 16 0;
+#X connect 30 0 31 0;
+#X connect 31 0 3 0;
+#X connect 31 0 32 1;
+#X connect 32 0 35 0;
+#X connect 33 0 37 0;
+#X connect 33 1 37 0;
+#X connect 33 2 37 0;
+#X connect 34 0 36 0;
+#X connect 34 1 36 0;
+#X connect 34 2 36 0;
+#X connect 35 0 30 0;
+#X connect 36 0 40 0;
+#X connect 37 0 40 0;
+#X connect 38 0 39 0;
+#X connect 39 0 41 0;
+#X connect 39 1 42 0;
+#X connect 40 0 38 0;
+#X connect 40 1 44 0;
+#X connect 41 0 43 0;
+#X connect 42 0 43 0;
+#X connect 43 0 44 1;
+#X connect 43 0 2 0;
+#X connect 44 0 38 1;
+#X connect 45 0 18 0;
+#X connect 46 0 20 0;
+#X connect 47 0 24 0;
+#X connect 48 0 4 0;
+#X connect 48 0 5 0;
+#X connect 49 0 2 0;
+#X connect 49 0 43 0;
+#X connect 50 0 3 0;
+#X connect 50 0 31 0;
+#X restore 190 70 pd Enemy2;
+#X floatatom 710 70 5 0 0 1 - - -, f 5;
+#X obj 710 30 loadbang;
+#N canvas 868 136 502 414 attack 0;
+#X obj 130 180 outlet;
+#X obj 30 30 receive attack_pos;
+#X obj 171 31 receive attack;
+#X obj 171 91 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 191 61 delay 200;
+#X obj 130 130 spigot;
+#X floatatom 90 160 5 0 0 0 - - -, f 5;
+#X connect 1 0 5 0;
+#X connect 2 0 3 0;
+#X connect 2 0 4 0;
+#X connect 3 0 5 1;
+#X connect 4 0 3 0;
+#X connect 5 0 0 0;
+#X connect 5 0 6 0;
+#X restore 620 20 pd attack;
+#N canvas 680 244 734 621 attack_collision 0;
+#X obj 340 50 inlet radius;
+#X obj 240 50 inlet reference;
+#X obj 390 80 unpack 0 0;
+#X obj 20 310 select 0 1;
+#X obj 30 0 inlet test;
+#N canvas 876 256 554 529 collide 0;
+#X obj 91 217 list-map2;
+#X obj 171 218 -;
+#X obj 171 265 *;
+#X obj 171 241 t a a;
+#X obj 84 340 sqrt;
+#X obj 84 290 list-reduce;
+#X obj 170 290 +;
+#X obj 124 360 t b a;
+#X obj 150 130 inlet reference;
+#X obj 80 130 inlet test;
+#X obj 294 247 inlet radius;
+#X obj 94 410 outlet;
+#X obj 94 380 <= 1;
+#X floatatom 40 320 5 0 0 0 - - -, f 5;
+#X connect 0 0 5 0;
+#X connect 0 1 1 0;
+#X connect 1 0 3 0;
+#X connect 2 0 0 2;
+#X connect 3 0 2 0;
+#X connect 3 1 2 1;
+#X connect 4 0 12 0;
+#X connect 5 0 4 0;
+#X connect 5 0 13 0;
+#X connect 5 1 6 0;
+#X connect 6 0 5 1;
+#X connect 7 0 12 0;
+#X connect 7 1 12 1;
+#X connect 8 0 0 1;
+#X connect 9 0 0 0;
+#X connect 10 0 7 0;
+#X connect 12 0 11 0;
+#X restore 30 110 pd collide;
+#X obj 50 140 tgl 24 0 empty empty hit? 28 7 1 10 #fcfcfc #000000 #000000
+0 1;
+#X obj 130 110 loadbang;
+#X obj 73 232 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 103 232 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 133 232 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 23 202 spigot;
+#X obj 123 202 spigot;
+#X obj 23 172 receive reset;
+#X obj 193 222 loadbang;
+#X obj 143 172 receive start;
+#X obj 43 272 spigot;
+#X obj 130 140 delay 100;
+#X obj 30 70 pack 0 0;
+#X obj 50 30 delay 100;
+#X msg 50 50 10;
+#X obj 20 360 send hit5;
+#X obj 20 380 send score-space;
+#X obj 20 400 send destroyed;
+#X obj 270 120 gemhead;
+#X obj 270 230 pix_image;
+#X obj 270 300 pix_texture;
+#X msg 340 250 env \$1;
+#X obj 340 230 hradio 15 1 0 6 empty empty empty 0 -6 0 8 #fcfcfc #000000
+#000000 0;
+#X obj 270 390 translateXYZ -2 1 0;
+#X msg 340 210 2;
+#X msg 300 180 open Art/Enemy1.png;
+#X obj 270 420 square 0.25;
+#X msg 480 250 env \$1;
+#X obj 480 230 hradio 15 1 0 6 empty empty empty 0 -6 0 8 #fcfcfc #000000
+#000000 0;
+#X msg 480 210 2;
+#X msg 440 180 open Art/Enemy3.png;
+#X obj 440 150 receive round3;
+#X obj 300 150 receive start;
+#X msg 610 250 env \$1;
+#X obj 610 230 hradio 15 1 0 6 empty empty empty 0 -6 0 8 #fcfcfc #000000
+#000000 0;
+#X msg 610 210 2;
+#X obj 570 150 receive round2;
+#X msg 570 180 open Art/Enemy1.png;
+#X obj 270 360 color 1 0 0;
+#X msg 360 300 1 0 0;
+#X msg 430 300 1 1 0;
+#X msg 490 300 0 0 1;
+#X connect 0 0 5 2;
+#X connect 1 0 2 0;
+#X connect 1 0 5 1;
+#X connect 2 0 29 1;
+#X connect 2 1 18 1;
+#X connect 2 1 29 2;
+#X connect 3 1 21 0;
+#X connect 3 1 22 0;
+#X connect 3 1 23 0;
+#X connect 4 0 18 0;
+#X connect 4 0 19 0;
+#X connect 5 0 6 0;
+#X connect 6 0 16 0;
+#X connect 7 0 17 0;
+#X connect 8 0 9 0;
+#X connect 8 0 11 1;
+#X connect 8 0 16 1;
+#X connect 9 0 10 0;
+#X connect 10 0 12 1;
+#X connect 11 0 8 0;
+#X connect 12 0 8 0;
+#X connect 13 0 11 0;
+#X connect 14 0 10 0;
+#X connect 15 0 12 0;
+#X connect 16 0 3 0;
+#X connect 17 0 6 0;
+#X connect 18 0 5 0;
+#X connect 19 0 20 0;
+#X connect 20 0 18 0;
+#X connect 24 0 25 0;
+#X connect 25 0 26 0;
+#X connect 26 0 44 0;
+#X connect 27 0 26 0;
+#X connect 28 0 27 0;
+#X connect 28 0 26 0;
+#X connect 29 0 32 0;
+#X connect 30 0 28 0;
+#X connect 31 0 25 0;
+#X connect 33 0 26 0;
+#X connect 34 0 33 0;
+#X connect 34 0 26 0;
+#X connect 35 0 34 0;
+#X connect 36 0 25 0;
+#X connect 37 0 36 0;
+#X connect 37 0 35 0;
+#X connect 37 0 46 0;
+#X connect 38 0 31 0;
+#X connect 38 0 30 0;
+#X connect 38 0 45 0;
+#X connect 39 0 26 0;
+#X connect 40 0 39 0;
+#X connect 40 0 26 0;
+#X connect 41 0 40 0;
+#X connect 42 0 43 0;
+#X connect 42 0 41 0;
+#X connect 42 0 47 0;
+#X connect 43 0 25 0;
+#X connect 44 0 29 0;
+#X connect 45 0 44 1;
+#X connect 46 0 44 1;
+#X connect 47 0 44 1;
+#X restore 620 120 pd attack_collision;
+#X floatatom 860 70 5 0 0 1 - - -, f 5;
+#X obj 860 30 loadbang;
+#N canvas 868 136 502 414 attack 0;
+#X obj 130 180 outlet;
+#X obj 30 30 receive attack_pos;
+#X obj 171 31 receive attack;
+#X obj 171 91 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 191 61 delay 200;
+#X obj 130 130 spigot;
+#X floatatom 90 160 5 0 0 0 - - -, f 5;
+#X connect 1 0 5 0;
+#X connect 2 0 3 0;
+#X connect 2 0 4 0;
+#X connect 3 0 5 1;
+#X connect 4 0 3 0;
+#X connect 5 0 0 0;
+#X connect 5 0 6 0;
+#X restore 770 20 pd attack;
+#N canvas 668 156 730 590 attack_collision 0;
+#X obj 340 50 inlet radius;
+#X obj 240 50 inlet reference;
+#X obj 390 80 unpack 0 0;
+#X obj 20 310 select 0 1;
+#X obj 30 0 inlet test;
+#N canvas 876 256 554 529 collide 0;
+#X obj 91 217 list-map2;
+#X obj 171 218 -;
+#X obj 171 265 *;
+#X obj 171 241 t a a;
+#X obj 84 340 sqrt;
+#X obj 84 290 list-reduce;
+#X obj 170 290 +;
+#X obj 124 360 t b a;
+#X obj 150 130 inlet reference;
+#X obj 80 130 inlet test;
+#X obj 294 247 inlet radius;
+#X obj 94 410 outlet;
+#X obj 94 380 <= 1;
+#X floatatom 40 320 5 0 0 0 - - -, f 5;
+#X connect 0 0 5 0;
+#X connect 0 1 1 0;
+#X connect 1 0 3 0;
+#X connect 2 0 0 2;
+#X connect 3 0 2 0;
+#X connect 3 1 2 1;
+#X connect 4 0 12 0;
+#X connect 5 0 4 0;
+#X connect 5 0 13 0;
+#X connect 5 1 6 0;
+#X connect 6 0 5 1;
+#X connect 7 0 12 0;
+#X connect 7 1 12 1;
+#X connect 8 0 0 1;
+#X connect 9 0 0 0;
+#X connect 10 0 7 0;
+#X connect 12 0 11 0;
+#X restore 30 110 pd collide;
+#X obj 50 140 tgl 24 0 empty empty hit? 28 7 1 10 #fcfcfc #000000 #000000
+0 1;
+#X obj 130 110 loadbang;
+#X obj 73 232 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 103 232 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 133 232 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 23 202 spigot;
+#X obj 123 202 spigot;
+#X obj 23 172 receive reset;
+#X obj 193 222 loadbang;
+#X obj 143 172 receive start;
+#X obj 43 272 spigot;
+#X obj 130 140 delay 100;
+#X obj 30 70 pack 0 0;
+#X obj 50 30 delay 100;
+#X msg 50 50 10;
+#X obj 20 360 send hit6;
+#X obj 20 380 send score-space;
+#X obj 20 400 send destroyed;
+#X obj 270 170 gemhead;
+#X obj 270 280 pix_image;
+#X obj 270 350 pix_texture;
+#X msg 340 300 env \$1;
+#X obj 340 280 hradio 15 1 0 6 empty empty empty 0 -6 0 8 #fcfcfc #000000
+#000000 0;
+#X obj 270 440 translateXYZ -2 1 0;
+#X msg 340 260 2;
+#X msg 300 230 open Art/Enemy1.png;
+#X obj 270 470 square 0.25;
+#X msg 480 300 env \$1;
+#X obj 480 280 hradio 15 1 0 6 empty empty empty 0 -6 0 8 #fcfcfc #000000
+#000000 0;
+#X msg 480 260 2;
+#X msg 440 230 open Art/Enemy3.png;
+#X obj 440 200 receive round3;
+#X obj 300 200 receive start;
+#X msg 610 300 env \$1;
+#X obj 610 280 hradio 15 1 0 6 empty empty empty 0 -6 0 8 #fcfcfc #000000
+#000000 0;
+#X msg 610 260 2;
+#X obj 570 200 receive round2;
+#X msg 570 230 open Art/Enemy1.png;
+#X obj 270 410 color 1 0 0;
+#X msg 360 350 1 0 0;
+#X msg 430 350 1 1 0;
+#X msg 490 350 0 0 1;
+#X connect 0 0 5 2;
+#X connect 1 0 2 0;
+#X connect 1 0 5 1;
+#X connect 2 0 29 1;
+#X connect 2 1 18 1;
+#X connect 2 1 29 2;
+#X connect 3 1 21 0;
+#X connect 3 1 22 0;
+#X connect 3 1 23 0;
+#X connect 4 0 18 0;
+#X connect 4 0 19 0;
+#X connect 5 0 6 0;
+#X connect 6 0 16 0;
+#X connect 7 0 17 0;
+#X connect 8 0 9 0;
+#X connect 8 0 11 1;
+#X connect 8 0 16 1;
+#X connect 9 0 10 0;
+#X connect 10 0 12 1;
+#X connect 11 0 8 0;
+#X connect 12 0 8 0;
+#X connect 13 0 11 0;
+#X connect 14 0 10 0;
+#X connect 15 0 12 0;
+#X connect 16 0 3 0;
+#X connect 17 0 6 0;
+#X connect 18 0 5 0;
+#X connect 19 0 20 0;
+#X connect 20 0 18 0;
+#X connect 24 0 25 0;
+#X connect 25 0 26 0;
+#X connect 26 0 44 0;
+#X connect 27 0 26 0;
+#X connect 28 0 27 0;
+#X connect 28 0 26 0;
+#X connect 29 0 32 0;
+#X connect 30 0 28 0;
+#X connect 31 0 25 0;
+#X connect 33 0 26 0;
+#X connect 34 0 33 0;
+#X connect 34 0 26 0;
+#X connect 35 0 34 0;
+#X connect 36 0 25 0;
+#X connect 37 0 36 0;
+#X connect 37 0 35 0;
+#X connect 37 0 46 0;
+#X connect 38 0 31 0;
+#X connect 38 0 30 0;
+#X connect 38 0 45 0;
+#X connect 39 0 26 0;
+#X connect 40 0 39 0;
+#X connect 40 0 26 0;
+#X connect 41 0 40 0;
+#X connect 42 0 43 0;
+#X connect 42 0 41 0;
+#X connect 42 0 47 0;
+#X connect 43 0 25 0;
+#X connect 44 0 29 0;
+#X connect 45 0 44 1;
+#X connect 46 0 44 1;
+#X connect 47 0 44 1;
+#X restore 770 120 pd attack_collision;
+#N canvas 688 84 598 670 Enemy3 0;
+#X obj 10 540 receive reset;
+#X obj 200 600 outlet;
+#X obj 200 580 pack 0 0;
+#X obj 220 550 t b f;
+#X msg 360 400 -10;
+#X msg 390 400 -10;
+#X obj 160 210 metro;
+#X obj 160 235 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 230 190 int 1;
+#X floatatom 230 222 5 0 0 0 - - -, f 5;
+#X obj 300 232 + 1;
+#X obj 100 200 sel 0;
+#X obj 100 225 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X msg 100 248 -1;
+#X obj 40 200 loadbang;
+#X obj 190 110 loadbang;
+#X obj 230 271 + 1;
+#X floatatom 230 300 5 0 0 0 - - -, f 5;
+#X floatatom 190 160 5 0 0 0 - - -, f 5;
+#X obj 40 570 receive start;
+#X obj 40 600 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 60 150 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 90 150 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 120 150 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 10 120 spigot;
+#X obj 110 120 spigot;
+#X obj 10 90 receive reset;
+#X obj 130 90 receive start;
+#X obj 250 350 sel 4 8;
+#X obj 230 242 % 8;
+#X msg 250 450 \$1;
+#X floatatom 220 500 5 0 0 0 - - -, f 5;
+#X obj 250 390 f 4;
+#X obj 150 350 sel 5 6 7;
+#X obj 70 350 sel 1 2 3;
+#X obj 250 425 - 0.5;
+#X msg 80 380 1;
+#X msg 150 380 2;
+#X obj 100 439 pack f f;
+#X obj 100 468 route 1 2;
+#X obj 90 410 t f b;
+#X obj 100 500 + 0.5;
+#X obj 140 500 - 0.5;
+#X floatatom 120 540 5 0 0 0 - - -, f 5;
+#X obj 170 430 f -3;
+#X msg 190 135 750;
+#X obj 30 510 loadbang;
+#X msg 40 623 -1;
+#X obj 360 350 receive hit3;
+#X obj 20 60 receive hit3;
+#X msg 100 620 3;
+#X connect 0 0 20 0;
+#X connect 2 0 1 0;
+#X connect 3 0 2 0;
+#X connect 3 1 2 1;
+#X connect 4 0 2 0;
+#X connect 5 0 3 0;
+#X connect 6 0 7 0;
+#X connect 7 0 8 0;
+#X connect 8 0 9 0;
+#X connect 8 0 10 0;
+#X connect 9 0 29 0;
+#X connect 10 0 8 1;
+#X connect 11 0 12 0;
+#X connect 12 0 13 0;
+#X connect 13 0 8 0;
+#X connect 14 0 12 0;
+#X connect 15 0 45 0;
+#X connect 15 0 23 0;
+#X connect 16 0 17 0;
+#X connect 17 0 28 0;
+#X connect 17 0 33 0;
+#X connect 17 0 34 0;
+#X connect 18 0 6 1;
+#X connect 19 0 20 0;
+#X connect 20 0 47 0;
+#X connect 20 0 50 0;
+#X connect 21 0 22 0;
+#X connect 21 0 24 1;
+#X connect 21 0 11 0;
+#X connect 21 0 6 0;
+#X connect 22 0 23 0;
+#X connect 23 0 25 1;
+#X connect 24 0 21 0;
+#X connect 25 0 21 0;
+#X connect 26 0 24 0;
+#X connect 27 0 25 0;
+#X connect 28 0 32 0;
+#X connect 28 1 32 0;
+#X connect 29 0 16 0;
+#X connect 30 0 31 0;
+#X connect 31 0 3 0;
+#X connect 31 0 32 1;
+#X connect 32 0 35 0;
+#X connect 33 0 37 0;
+#X connect 33 1 37 0;
+#X connect 33 2 37 0;
+#X connect 34 0 36 0;
+#X connect 34 1 36 0;
+#X connect 34 2 36 0;
+#X connect 35 0 30 0;
+#X connect 36 0 40 0;
+#X connect 37 0 40 0;
+#X connect 38 0 39 0;
+#X connect 39 0 41 0;
+#X connect 39 1 42 0;
+#X connect 40 0 38 0;
+#X connect 40 1 44 0;
+#X connect 41 0 43 0;
+#X connect 42 0 43 0;
+#X connect 43 0 44 1;
+#X connect 43 0 2 0;
+#X connect 44 0 38 1;
+#X connect 45 0 18 0;
+#X connect 46 0 20 0;
+#X connect 47 0 2 0;
+#X connect 47 0 43 0;
+#X connect 48 0 4 0;
+#X connect 48 0 5 0;
+#X connect 49 0 24 0;
+#X connect 50 0 3 0;
+#X connect 50 0 31 0;
+#X restore 340 70 pd Enemy3;
+#N canvas 688 84 598 670 Enemy4 0;
+#X obj 10 540 receive reset;
+#X obj 200 600 outlet;
+#X obj 200 580 pack 0 0;
+#X obj 220 550 t b f;
+#X msg 360 400 -10;
+#X msg 390 400 -10;
+#X obj 160 210 metro;
+#X obj 160 235 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 230 190 int 1;
+#X floatatom 230 222 5 0 0 0 - - -, f 5;
+#X obj 300 232 + 1;
+#X obj 100 200 sel 0;
+#X obj 100 225 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X msg 100 248 -1;
+#X obj 40 200 loadbang;
+#X obj 190 110 loadbang;
+#X obj 230 271 + 1;
+#X floatatom 230 300 5 0 0 0 - - -, f 5;
+#X floatatom 190 160 5 0 0 0 - - -, f 5;
+#X obj 40 570 receive start;
+#X obj 40 600 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 60 150 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 90 150 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 120 150 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 10 120 spigot;
+#X obj 110 120 spigot;
+#X obj 10 90 receive reset;
+#X obj 130 90 receive start;
+#X obj 250 350 sel 4 8;
+#X obj 230 242 % 8;
+#X msg 250 450 \$1;
+#X floatatom 220 500 5 0 0 0 - - -, f 5;
+#X obj 250 390 f 4;
+#X obj 150 350 sel 5 6 7;
+#X obj 70 350 sel 1 2 3;
+#X obj 250 425 - 0.5;
+#X msg 80 380 1;
+#X msg 150 380 2;
+#X obj 100 439 pack f f;
+#X obj 100 468 route 1 2;
+#X obj 90 410 t f b;
+#X obj 100 500 + 0.5;
+#X obj 140 500 - 0.5;
+#X floatatom 120 540 5 0 0 0 - - -, f 5;
+#X obj 170 430 f -3;
+#X msg 190 135 750;
+#X obj 40 510 loadbang;
+#X obj 360 350 receive hit4;
+#X obj 20 60 receive hit4;
+#X msg 40 623 0;
+#X msg 100 620 3;
+#X connect 0 0 20 0;
+#X connect 2 0 1 0;
+#X connect 3 0 2 0;
+#X connect 3 1 2 1;
+#X connect 4 0 2 0;
+#X connect 5 0 3 0;
+#X connect 6 0 7 0;
+#X connect 7 0 8 0;
+#X connect 8 0 9 0;
+#X connect 8 0 10 0;
+#X connect 9 0 29 0;
+#X connect 10 0 8 1;
+#X connect 11 0 12 0;
+#X connect 12 0 13 0;
+#X connect 13 0 8 0;
+#X connect 14 0 12 0;
+#X connect 15 0 45 0;
+#X connect 15 0 23 0;
+#X connect 16 0 17 0;
+#X connect 17 0 28 0;
+#X connect 17 0 33 0;
+#X connect 17 0 34 0;
+#X connect 18 0 6 1;
+#X connect 19 0 20 0;
+#X connect 20 0 49 0;
+#X connect 20 0 50 0;
+#X connect 21 0 22 0;
+#X connect 21 0 24 1;
+#X connect 21 0 11 0;
+#X connect 21 0 6 0;
+#X connect 22 0 23 0;
+#X connect 23 0 25 1;
+#X connect 24 0 21 0;
+#X connect 25 0 21 0;
+#X connect 26 0 24 0;
+#X connect 27 0 25 0;
+#X connect 28 0 32 0;
+#X connect 28 1 32 0;
+#X connect 29 0 16 0;
+#X connect 30 0 31 0;
+#X connect 31 0 3 0;
+#X connect 31 0 32 1;
+#X connect 32 0 35 0;
+#X connect 33 0 37 0;
+#X connect 33 1 37 0;
+#X connect 33 2 37 0;
+#X connect 34 0 36 0;
+#X connect 34 1 36 0;
+#X connect 34 2 36 0;
+#X connect 35 0 30 0;
+#X connect 36 0 40 0;
+#X connect 37 0 40 0;
+#X connect 38 0 39 0;
+#X connect 39 0 41 0;
+#X connect 39 1 42 0;
+#X connect 40 0 38 0;
+#X connect 40 1 44 0;
+#X connect 41 0 43 0;
+#X connect 42 0 43 0;
+#X connect 43 0 44 1;
+#X connect 43 0 2 0;
+#X connect 44 0 38 1;
+#X connect 45 0 18 0;
+#X connect 46 0 20 0;
+#X connect 47 0 4 0;
+#X connect 47 0 5 0;
+#X connect 48 0 24 0;
+#X connect 49 0 2 0;
+#X connect 49 0 43 0;
+#X connect 50 0 3 0;
+#X connect 50 0 31 0;
+#X restore 490 70 pd Enemy4;
+#N canvas 688 84 598 670 Enemy5 0;
+#X obj 10 540 receive reset;
+#X obj 200 600 outlet;
+#X obj 200 580 pack 0 0;
+#X obj 220 550 t b f;
+#X msg 360 400 -10;
+#X msg 390 400 -10;
+#X obj 160 210 metro;
+#X obj 160 235 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 230 190 int 1;
+#X floatatom 230 222 5 0 0 0 - - -, f 5;
+#X obj 300 232 + 1;
+#X obj 100 200 sel 0;
+#X obj 100 225 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X msg 100 248 -1;
+#X obj 40 200 loadbang;
+#X obj 190 110 loadbang;
+#X obj 230 271 + 1;
+#X floatatom 230 300 5 0 0 0 - - -, f 5;
+#X floatatom 190 160 5 0 0 0 - - -, f 5;
+#X obj 40 570 receive start;
+#X obj 40 600 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 60 150 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 90 150 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 120 150 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 10 120 spigot;
+#X obj 110 120 spigot;
+#X obj 10 90 receive reset;
+#X obj 130 90 receive start;
+#X obj 250 350 sel 4 8;
+#X obj 230 242 % 8;
+#X msg 250 450 \$1;
+#X floatatom 220 500 5 0 0 0 - - -, f 5;
+#X obj 250 390 f 4;
+#X obj 150 350 sel 5 6 7;
+#X obj 70 350 sel 1 2 3;
+#X obj 250 425 - 0.5;
+#X msg 80 380 1;
+#X msg 150 380 2;
+#X obj 100 439 pack f f;
+#X obj 100 468 route 1 2;
+#X obj 90 410 t f b;
+#X obj 100 500 + 0.5;
+#X obj 140 500 - 0.5;
+#X floatatom 120 540 5 0 0 0 - - -, f 5;
+#X obj 170 430 f -3;
+#X msg 190 135 750;
+#X obj 40 510 loadbang;
+#X obj 360 350 receive hit5;
+#X obj 20 60 receive hit5;
+#X msg 40 623 1;
+#X msg 100 620 3;
+#X connect 0 0 20 0;
+#X connect 2 0 1 0;
+#X connect 3 0 2 0;
+#X connect 3 1 2 1;
+#X connect 4 0 2 0;
+#X connect 5 0 3 0;
+#X connect 6 0 7 0;
+#X connect 7 0 8 0;
+#X connect 8 0 9 0;
+#X connect 8 0 10 0;
+#X connect 9 0 29 0;
+#X connect 10 0 8 1;
+#X connect 11 0 12 0;
+#X connect 12 0 13 0;
+#X connect 13 0 8 0;
+#X connect 14 0 12 0;
+#X connect 15 0 45 0;
+#X connect 15 0 23 0;
+#X connect 16 0 17 0;
+#X connect 17 0 28 0;
+#X connect 17 0 33 0;
+#X connect 17 0 34 0;
+#X connect 18 0 6 1;
+#X connect 19 0 20 0;
+#X connect 20 0 49 0;
+#X connect 20 0 50 0;
+#X connect 21 0 22 0;
+#X connect 21 0 24 1;
+#X connect 21 0 11 0;
+#X connect 21 0 6 0;
+#X connect 22 0 23 0;
+#X connect 23 0 25 1;
+#X connect 24 0 21 0;
+#X connect 25 0 21 0;
+#X connect 26 0 24 0;
+#X connect 27 0 25 0;
+#X connect 28 0 32 0;
+#X connect 28 1 32 0;
+#X connect 29 0 16 0;
+#X connect 30 0 31 0;
+#X connect 31 0 3 0;
+#X connect 31 0 32 1;
+#X connect 32 0 35 0;
+#X connect 33 0 37 0;
+#X connect 33 1 37 0;
+#X connect 33 2 37 0;
+#X connect 34 0 36 0;
+#X connect 34 1 36 0;
+#X connect 34 2 36 0;
+#X connect 35 0 30 0;
+#X connect 36 0 40 0;
+#X connect 37 0 40 0;
+#X connect 38 0 39 0;
+#X connect 39 0 41 0;
+#X connect 39 1 42 0;
+#X connect 40 0 38 0;
+#X connect 40 1 44 0;
+#X connect 41 0 43 0;
+#X connect 42 0 43 0;
+#X connect 43 0 44 1;
+#X connect 43 0 2 0;
+#X connect 44 0 38 1;
+#X connect 45 0 18 0;
+#X connect 46 0 20 0;
+#X connect 47 0 4 0;
+#X connect 47 0 5 0;
+#X connect 48 0 24 0;
+#X connect 49 0 2 0;
+#X connect 49 0 43 0;
+#X connect 50 0 3 0;
+#X connect 50 0 31 0;
+#X restore 640 70 pd Enemy5;
+#N canvas 688 84 598 670 Enemy6 0;
+#X obj 10 540 receive reset;
+#X obj 200 600 outlet;
+#X obj 200 580 pack 0 0;
+#X obj 220 550 t b f;
+#X msg 360 400 -10;
+#X msg 390 400 -10;
+#X obj 160 210 metro;
+#X obj 160 235 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 230 190 int 1;
+#X floatatom 230 222 5 0 0 0 - - -, f 5;
+#X obj 300 232 + 1;
+#X obj 100 200 sel 0;
+#X obj 100 225 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X msg 100 248 -1;
+#X obj 40 200 loadbang;
+#X obj 190 110 loadbang;
+#X obj 230 271 + 1;
+#X floatatom 230 300 5 0 0 0 - - -, f 5;
+#X floatatom 190 160 5 0 0 0 - - -, f 5;
+#X obj 40 570 receive start;
+#X obj 40 600 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 60 150 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 90 150 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 120 150 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 10 120 spigot;
+#X obj 110 120 spigot;
+#X obj 10 90 receive reset;
+#X obj 130 90 receive start;
+#X obj 250 350 sel 4 8;
+#X obj 230 242 % 8;
+#X msg 250 450 \$1;
+#X floatatom 220 500 5 0 0 0 - - -, f 5;
+#X obj 250 390 f 4;
+#X obj 150 350 sel 5 6 7;
+#X obj 70 350 sel 1 2 3;
+#X obj 250 425 - 0.5;
+#X msg 80 380 1;
+#X msg 150 380 2;
+#X obj 100 439 pack f f;
+#X obj 100 468 route 1 2;
+#X obj 90 410 t f b;
+#X obj 100 500 + 0.5;
+#X obj 140 500 - 0.5;
+#X floatatom 120 540 5 0 0 0 - - -, f 5;
+#X obj 170 430 f -3;
+#X msg 190 135 750;
+#X obj 40 510 loadbang;
+#X obj 360 350 receive hit6;
+#X obj 20 60 receive hit6;
+#X msg 40 623 2;
+#X msg 100 620 3;
+#X connect 0 0 20 0;
+#X connect 2 0 1 0;
+#X connect 3 0 2 0;
+#X connect 3 1 2 1;
+#X connect 4 0 2 0;
+#X connect 5 0 3 0;
+#X connect 6 0 7 0;
+#X connect 7 0 8 0;
+#X connect 8 0 9 0;
+#X connect 8 0 10 0;
+#X connect 9 0 29 0;
+#X connect 10 0 8 1;
+#X connect 11 0 12 0;
+#X connect 12 0 13 0;
+#X connect 13 0 8 0;
+#X connect 14 0 12 0;
+#X connect 15 0 45 0;
+#X connect 15 0 23 0;
+#X connect 16 0 17 0;
+#X connect 17 0 28 0;
+#X connect 17 0 33 0;
+#X connect 17 0 34 0;
+#X connect 18 0 6 1;
+#X connect 19 0 20 0;
+#X connect 20 0 49 0;
+#X connect 20 0 50 0;
+#X connect 21 0 22 0;
+#X connect 21 0 24 1;
+#X connect 21 0 11 0;
+#X connect 21 0 6 0;
+#X connect 22 0 23 0;
+#X connect 23 0 25 1;
+#X connect 24 0 21 0;
+#X connect 25 0 21 0;
+#X connect 26 0 24 0;
+#X connect 27 0 25 0;
+#X connect 28 0 32 0;
+#X connect 28 1 32 0;
+#X connect 29 0 16 0;
+#X connect 30 0 31 0;
+#X connect 31 0 3 0;
+#X connect 31 0 32 1;
+#X connect 32 0 35 0;
+#X connect 33 0 37 0;
+#X connect 33 1 37 0;
+#X connect 33 2 37 0;
+#X connect 34 0 36 0;
+#X connect 34 1 36 0;
+#X connect 34 2 36 0;
+#X connect 35 0 30 0;
+#X connect 36 0 40 0;
+#X connect 37 0 40 0;
+#X connect 38 0 39 0;
+#X connect 39 0 41 0;
+#X connect 39 1 42 0;
+#X connect 40 0 38 0;
+#X connect 40 1 44 0;
+#X connect 41 0 43 0;
+#X connect 42 0 43 0;
+#X connect 43 0 44 1;
+#X connect 43 0 2 0;
+#X connect 44 0 38 1;
+#X connect 45 0 18 0;
+#X connect 46 0 20 0;
+#X connect 47 0 4 0;
+#X connect 47 0 5 0;
+#X connect 48 0 24 0;
+#X connect 49 0 2 0;
+#X connect 49 0 43 0;
+#X connect 50 0 3 0;
+#X connect 50 0 31 0;
+#X restore 790 70 pd Enemy6;
+#X msg 100 50 0.25;
+#X msg 260 50 0.25;
+#X msg 410 50 0.25;
+#X msg 560 50 0.25;
+#X msg 710 50 0.25;
+#X floatatom 100 200 5 0 0 1 - - -, f 5;
+#X obj 100 160 loadbang;
+#N canvas 868 136 502 414 attack 0;
+#X obj 130 180 outlet;
+#X obj 30 30 receive attack_pos;
+#X obj 171 31 receive attack;
+#X obj 171 91 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 191 61 delay 200;
+#X obj 130 130 spigot;
+#X floatatom 90 160 5 0 0 0 - - -, f 5;
+#X connect 1 0 5 0;
+#X connect 2 0 3 0;
+#X connect 2 0 4 0;
+#X connect 3 0 5 1;
+#X connect 4 0 3 0;
+#X connect 5 0 0 0;
+#X connect 5 0 6 0;
+#X restore 10 150 pd attack;
+#N canvas 444 136 634 482 attack_collision 0;
+#X obj 340 50 inlet radius;
+#X obj 240 50 inlet reference;
+#X obj 390 80 unpack 0 0;
+#X obj 20 310 select 0 1;
+#X obj 30 0 inlet test;
+#N canvas 876 256 554 529 collide 0;
+#X obj 91 217 list-map2;
+#X obj 171 218 -;
+#X obj 171 265 *;
+#X obj 171 241 t a a;
+#X obj 84 340 sqrt;
+#X obj 84 290 list-reduce;
+#X obj 170 290 +;
+#X obj 124 360 t b a;
+#X obj 150 130 inlet reference;
+#X obj 80 130 inlet test;
+#X obj 294 247 inlet radius;
+#X obj 94 410 outlet;
+#X obj 94 380 <= 1;
+#X floatatom 40 320 5 0 0 0 - - -, f 5;
+#X connect 0 0 5 0;
+#X connect 0 1 1 0;
+#X connect 1 0 3 0;
+#X connect 2 0 0 2;
+#X connect 3 0 2 0;
+#X connect 3 1 2 1;
+#X connect 4 0 12 0;
+#X connect 5 0 4 0;
+#X connect 5 0 13 0;
+#X connect 5 1 6 0;
+#X connect 6 0 5 1;
+#X connect 7 0 12 0;
+#X connect 7 1 12 1;
+#X connect 8 0 0 1;
+#X connect 9 0 0 0;
+#X connect 10 0 7 0;
+#X connect 12 0 11 0;
+#X restore 30 110 pd collide;
+#X obj 50 140 tgl 24 0 empty empty hit? 28 7 1 10 #fcfcfc #000000 #000000
+0 1;
+#X obj 130 110 loadbang;
+#X obj 73 232 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 103 232 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 133 232 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 23 202 spigot;
+#X obj 123 202 spigot;
+#X obj 23 172 receive reset;
+#X obj 193 222 loadbang;
+#X obj 143 172 receive start;
+#X obj 43 272 spigot;
+#X obj 130 140 delay 100;
+#X obj 30 70 pack 0 0;
+#X obj 50 30 delay 100;
+#X msg 50 50 10;
+#X obj 20 360 send hit7;
+#X obj 20 380 send score-space;
+#X obj 20 400 send destroyed;
+#X obj 280 130 gemhead;
+#X obj 280 240 pix_image;
+#X obj 280 310 pix_texture;
+#X msg 350 260 env \$1;
+#X obj 350 240 hradio 15 1 0 6 empty empty empty 0 -6 0 8 #fcfcfc #000000
+#000000 0;
+#X obj 280 400 translateXYZ -2 1 0;
+#X msg 350 220 2;
+#X msg 310 190 open Art/Enemy1.png;
+#X obj 280 430 square 0.25;
+#X msg 490 260 env \$1;
+#X obj 490 240 hradio 15 1 0 6 empty empty empty 0 -6 0 8 #fcfcfc #000000
+#000000 0;
+#X msg 490 220 2;
+#X msg 450 190 open Art/Enemy3.png;
+#X obj 450 160 receive round3;
+#X obj 310 160 receive start;
+#X msg 620 260 env \$1;
+#X obj 620 240 hradio 15 1 0 6 empty empty empty 0 -6 0 8 #fcfcfc #000000
+#000000 0;
+#X msg 620 220 2;
+#X obj 580 160 receive round2;
+#X msg 580 190 open Art/Enemy1.png;
+#X obj 280 370 color 1 0 0;
+#X msg 370 310 1 0 0;
+#X msg 440 310 1 1 0;
+#X msg 500 310 0 0 1;
+#X connect 0 0 5 2;
+#X connect 1 0 2 0;
+#X connect 1 0 5 1;
+#X connect 2 0 29 1;
+#X connect 2 1 18 1;
+#X connect 2 1 29 2;
+#X connect 3 1 21 0;
+#X connect 3 1 22 0;
+#X connect 3 1 23 0;
+#X connect 4 0 18 0;
+#X connect 4 0 19 0;
+#X connect 5 0 6 0;
+#X connect 6 0 16 0;
+#X connect 7 0 17 0;
+#X connect 8 0 9 0;
+#X connect 8 0 11 1;
+#X connect 8 0 16 1;
+#X connect 9 0 10 0;
+#X connect 10 0 12 1;
+#X connect 11 0 8 0;
+#X connect 12 0 8 0;
+#X connect 13 0 11 0;
+#X connect 14 0 10 0;
+#X connect 15 0 12 0;
+#X connect 16 0 3 0;
+#X connect 17 0 6 0;
+#X connect 18 0 5 0;
+#X connect 19 0 20 0;
+#X connect 20 0 18 0;
+#X connect 24 0 25 0;
+#X connect 25 0 26 0;
+#X connect 26 0 44 0;
+#X connect 27 0 26 0;
+#X connect 28 0 27 0;
+#X connect 28 0 26 0;
+#X connect 29 0 32 0;
+#X connect 30 0 28 0;
+#X connect 31 0 25 0;
+#X connect 33 0 26 0;
+#X connect 34 0 33 0;
+#X connect 34 0 26 0;
+#X connect 35 0 34 0;
+#X connect 36 0 25 0;
+#X connect 37 0 36 0;
+#X connect 37 0 35 0;
+#X connect 37 0 46 0;
+#X connect 38 0 31 0;
+#X connect 38 0 30 0;
+#X connect 38 0 45 0;
+#X connect 39 0 26 0;
+#X connect 40 0 39 0;
+#X connect 40 0 26 0;
+#X connect 41 0 40 0;
+#X connect 42 0 43 0;
+#X connect 42 0 41 0;
+#X connect 42 0 47 0;
+#X connect 43 0 25 0;
+#X connect 44 0 29 0;
+#X connect 45 0 44 1;
+#X connect 46 0 44 1;
+#X connect 47 0 44 1;
+#X restore 10 250 pd attack_collision;
+#X floatatom 260 200 5 0 0 1 - - -, f 5;
+#X obj 260 160 loadbang;
+#N canvas 868 136 502 414 attack 0;
+#X obj 130 180 outlet;
+#X obj 30 30 receive attack_pos;
+#X obj 171 31 receive attack;
+#X obj 171 91 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 191 61 delay 200;
+#X obj 130 130 spigot;
+#X floatatom 90 160 5 0 0 0 - - -, f 5;
+#X connect 1 0 5 0;
+#X connect 2 0 3 0;
+#X connect 2 0 4 0;
+#X connect 3 0 5 1;
+#X connect 4 0 3 0;
+#X connect 5 0 0 0;
+#X connect 5 0 6 0;
+#X restore 170 150 pd attack;
+#N canvas 668 264 734 594 attack_collision 0;
+#X obj 340 50 inlet radius;
+#X obj 240 50 inlet reference;
+#X obj 390 80 unpack 0 0;
+#X obj 20 310 select 0 1;
+#X obj 30 0 inlet test;
+#N canvas 876 256 554 529 collide 0;
+#X obj 91 217 list-map2;
+#X obj 171 218 -;
+#X obj 171 265 *;
+#X obj 171 241 t a a;
+#X obj 84 340 sqrt;
+#X obj 84 290 list-reduce;
+#X obj 170 290 +;
+#X obj 124 360 t b a;
+#X obj 150 130 inlet reference;
+#X obj 80 130 inlet test;
+#X obj 294 247 inlet radius;
+#X obj 94 410 outlet;
+#X obj 94 380 <= 1;
+#X floatatom 40 320 5 0 0 0 - - -, f 5;
+#X connect 0 0 5 0;
+#X connect 0 1 1 0;
+#X connect 1 0 3 0;
+#X connect 2 0 0 2;
+#X connect 3 0 2 0;
+#X connect 3 1 2 1;
+#X connect 4 0 12 0;
+#X connect 5 0 4 0;
+#X connect 5 0 13 0;
+#X connect 5 1 6 0;
+#X connect 6 0 5 1;
+#X connect 7 0 12 0;
+#X connect 7 1 12 1;
+#X connect 8 0 0 1;
+#X connect 9 0 0 0;
+#X connect 10 0 7 0;
+#X connect 12 0 11 0;
+#X restore 30 110 pd collide;
+#X obj 50 140 tgl 24 0 empty empty hit? 28 7 1 10 #fcfcfc #000000 #000000
+0 1;
+#X obj 130 110 loadbang;
+#X obj 73 232 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 103 232 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 133 232 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 23 202 spigot;
+#X obj 123 202 spigot;
+#X obj 23 172 receive reset;
+#X obj 193 222 loadbang;
+#X obj 143 172 receive start;
+#X obj 43 272 spigot;
+#X obj 130 140 delay 100;
+#X obj 30 70 pack 0 0;
+#X obj 50 30 delay 100;
+#X msg 50 50 10;
+#X obj 20 360 send hit8;
+#X obj 20 380 send score-space;
+#X obj 20 400 send destroyed;
+#X obj 270 140 gemhead;
+#X obj 270 250 pix_image;
+#X obj 270 320 pix_texture;
+#X msg 340 270 env \$1;
+#X obj 340 250 hradio 15 1 0 6 empty empty empty 0 -6 0 8 #fcfcfc #000000
+#000000 0;
+#X obj 270 410 translateXYZ -2 1 0;
+#X msg 340 230 2;
+#X msg 300 200 open Art/Enemy1.png;
+#X obj 270 440 square 0.25;
+#X msg 480 270 env \$1;
+#X obj 480 250 hradio 15 1 0 6 empty empty empty 0 -6 0 8 #fcfcfc #000000
+#000000 0;
+#X msg 480 230 2;
+#X msg 440 200 open Art/Enemy3.png;
+#X obj 440 170 receive round3;
+#X obj 300 170 receive start;
+#X msg 610 270 env \$1;
+#X obj 610 250 hradio 15 1 0 6 empty empty empty 0 -6 0 8 #fcfcfc #000000
+#000000 0;
+#X msg 610 230 2;
+#X obj 570 170 receive round2;
+#X msg 570 200 open Art/Enemy1.png;
+#X obj 270 380 color 1 0 0;
+#X msg 360 320 1 0 0;
+#X msg 430 320 1 1 0;
+#X msg 490 320 0 0 1;
+#X connect 0 0 5 2;
+#X connect 1 0 2 0;
+#X connect 1 0 5 1;
+#X connect 2 0 29 1;
+#X connect 2 1 18 1;
+#X connect 2 1 29 2;
+#X connect 3 1 21 0;
+#X connect 3 1 22 0;
+#X connect 3 1 23 0;
+#X connect 4 0 18 0;
+#X connect 4 0 19 0;
+#X connect 5 0 6 0;
+#X connect 6 0 16 0;
+#X connect 7 0 17 0;
+#X connect 8 0 9 0;
+#X connect 8 0 11 1;
+#X connect 8 0 16 1;
+#X connect 9 0 10 0;
+#X connect 10 0 12 1;
+#X connect 11 0 8 0;
+#X connect 12 0 8 0;
+#X connect 13 0 11 0;
+#X connect 14 0 10 0;
+#X connect 15 0 12 0;
+#X connect 16 0 3 0;
+#X connect 17 0 6 0;
+#X connect 18 0 5 0;
+#X connect 19 0 20 0;
+#X connect 20 0 18 0;
+#X connect 24 0 25 0;
+#X connect 25 0 26 0;
+#X connect 26 0 44 0;
+#X connect 27 0 26 0;
+#X connect 28 0 27 0;
+#X connect 28 0 26 0;
+#X connect 29 0 32 0;
+#X connect 30 0 28 0;
+#X connect 31 0 25 0;
+#X connect 33 0 26 0;
+#X connect 34 0 33 0;
+#X connect 34 0 26 0;
+#X connect 35 0 34 0;
+#X connect 36 0 25 0;
+#X connect 37 0 36 0;
+#X connect 37 0 35 0;
+#X connect 37 0 46 0;
+#X connect 38 0 31 0;
+#X connect 38 0 30 0;
+#X connect 38 0 45 0;
+#X connect 39 0 26 0;
+#X connect 40 0 39 0;
+#X connect 40 0 26 0;
+#X connect 41 0 40 0;
+#X connect 42 0 43 0;
+#X connect 42 0 41 0;
+#X connect 42 0 47 0;
+#X connect 43 0 25 0;
+#X connect 44 0 29 0;
+#X connect 45 0 44 1;
+#X connect 46 0 44 1;
+#X connect 47 0 44 1;
+#X restore 170 250 pd attack_collision;
+#X floatatom 410 200 5 0 0 1 - - -, f 5;
+#X obj 410 160 loadbang;
+#N canvas 868 136 502 414 attack 0;
+#X obj 130 180 outlet;
+#X obj 30 30 receive attack_pos;
+#X obj 171 31 receive attack;
+#X obj 171 91 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 191 61 delay 200;
+#X obj 130 130 spigot;
+#X floatatom 90 160 5 0 0 0 - - -, f 5;
+#X connect 1 0 5 0;
+#X connect 2 0 3 0;
+#X connect 2 0 4 0;
+#X connect 3 0 5 1;
+#X connect 4 0 3 0;
+#X connect 5 0 0 0;
+#X connect 5 0 6 0;
+#X restore 320 150 pd attack;
+#N canvas 676 260 734 594 attack_collision 0;
+#X obj 340 50 inlet radius;
+#X obj 240 50 inlet reference;
+#X obj 390 80 unpack 0 0;
+#X obj 20 310 select 0 1;
+#X obj 30 0 inlet test;
+#N canvas 876 256 554 529 collide 0;
+#X obj 91 217 list-map2;
+#X obj 171 218 -;
+#X obj 171 265 *;
+#X obj 171 241 t a a;
+#X obj 84 340 sqrt;
+#X obj 84 290 list-reduce;
+#X obj 170 290 +;
+#X obj 124 360 t b a;
+#X obj 150 130 inlet reference;
+#X obj 80 130 inlet test;
+#X obj 294 247 inlet radius;
+#X obj 94 410 outlet;
+#X obj 94 380 <= 1;
+#X floatatom 40 320 5 0 0 0 - - -, f 5;
+#X connect 0 0 5 0;
+#X connect 0 1 1 0;
+#X connect 1 0 3 0;
+#X connect 2 0 0 2;
+#X connect 3 0 2 0;
+#X connect 3 1 2 1;
+#X connect 4 0 12 0;
+#X connect 5 0 4 0;
+#X connect 5 0 13 0;
+#X connect 5 1 6 0;
+#X connect 6 0 5 1;
+#X connect 7 0 12 0;
+#X connect 7 1 12 1;
+#X connect 8 0 0 1;
+#X connect 9 0 0 0;
+#X connect 10 0 7 0;
+#X connect 12 0 11 0;
+#X restore 30 110 pd collide;
+#X obj 50 140 tgl 24 0 empty empty hit? 28 7 1 10 #fcfcfc #000000 #000000
+0 1;
+#X obj 130 110 loadbang;
+#X obj 73 232 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 103 232 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 133 232 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 23 202 spigot;
+#X obj 123 202 spigot;
+#X obj 23 172 receive reset;
+#X obj 193 222 loadbang;
+#X obj 143 172 receive start;
+#X obj 43 272 spigot;
+#X obj 130 140 delay 100;
+#X obj 30 70 pack 0 0;
+#X obj 50 30 delay 100;
+#X msg 50 50 10;
+#X obj 20 360 send hit9;
+#X obj 20 380 send score-space;
+#X obj 20 400 send destroyed;
+#X obj 290 160 gemhead;
+#X obj 290 270 pix_image;
+#X obj 290 340 pix_texture;
+#X msg 360 290 env \$1;
+#X obj 360 270 hradio 15 1 0 6 empty empty empty 0 -6 0 8 #fcfcfc #000000
+#000000 0;
+#X obj 290 430 translateXYZ -2 1 0;
+#X msg 360 250 2;
+#X msg 320 220 open Art/Enemy1.png;
+#X obj 290 460 square 0.25;
+#X msg 500 290 env \$1;
+#X obj 500 270 hradio 15 1 0 6 empty empty empty 0 -6 0 8 #fcfcfc #000000
+#000000 0;
+#X msg 500 250 2;
+#X msg 460 220 open Art/Enemy3.png;
+#X obj 460 190 receive round3;
+#X obj 320 190 receive start;
+#X msg 630 290 env \$1;
+#X obj 630 270 hradio 15 1 0 6 empty empty empty 0 -6 0 8 #fcfcfc #000000
+#000000 0;
+#X msg 630 250 2;
+#X obj 590 190 receive round2;
+#X msg 590 220 open Art/Enemy1.png;
+#X obj 290 400 color 1 0 0;
+#X msg 380 340 1 0 0;
+#X msg 450 340 1 1 0;
+#X msg 510 340 0 0 1;
+#X connect 0 0 5 2;
+#X connect 1 0 2 0;
+#X connect 1 0 5 1;
+#X connect 2 0 29 1;
+#X connect 2 1 18 1;
+#X connect 2 1 29 2;
+#X connect 3 1 21 0;
+#X connect 3 1 22 0;
+#X connect 3 1 23 0;
+#X connect 4 0 18 0;
+#X connect 4 0 19 0;
+#X connect 5 0 6 0;
+#X connect 6 0 16 0;
+#X connect 7 0 17 0;
+#X connect 8 0 9 0;
+#X connect 8 0 11 1;
+#X connect 8 0 16 1;
+#X connect 9 0 10 0;
+#X connect 10 0 12 1;
+#X connect 11 0 8 0;
+#X connect 12 0 8 0;
+#X connect 13 0 11 0;
+#X connect 14 0 10 0;
+#X connect 15 0 12 0;
+#X connect 16 0 3 0;
+#X connect 17 0 6 0;
+#X connect 18 0 5 0;
+#X connect 19 0 20 0;
+#X connect 20 0 18 0;
+#X connect 24 0 25 0;
+#X connect 25 0 26 0;
+#X connect 26 0 44 0;
+#X connect 27 0 26 0;
+#X connect 28 0 27 0;
+#X connect 28 0 26 0;
+#X connect 29 0 32 0;
+#X connect 30 0 28 0;
+#X connect 31 0 25 0;
+#X connect 33 0 26 0;
+#X connect 34 0 33 0;
+#X connect 34 0 26 0;
+#X connect 35 0 34 0;
+#X connect 36 0 25 0;
+#X connect 37 0 36 0;
+#X connect 37 0 35 0;
+#X connect 37 0 46 0;
+#X connect 38 0 31 0;
+#X connect 38 0 30 0;
+#X connect 38 0 45 0;
+#X connect 39 0 26 0;
+#X connect 40 0 39 0;
+#X connect 40 0 26 0;
+#X connect 41 0 40 0;
+#X connect 42 0 43 0;
+#X connect 42 0 41 0;
+#X connect 42 0 47 0;
+#X connect 43 0 25 0;
+#X connect 44 0 29 0;
+#X connect 45 0 44 1;
+#X connect 46 0 44 1;
+#X connect 47 0 44 1;
+#X restore 320 250 pd attack_collision;
+#X floatatom 560 200 5 0 0 1 - - -, f 5;
+#X obj 560 160 loadbang;
+#N canvas 868 136 502 414 attack 0;
+#X obj 130 180 outlet;
+#X obj 30 30 receive attack_pos;
+#X obj 171 31 receive attack;
+#X obj 171 91 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 191 61 delay 200;
+#X obj 130 130 spigot;
+#X floatatom 90 160 5 0 0 0 - - -, f 5;
+#X connect 1 0 5 0;
+#X connect 2 0 3 0;
+#X connect 2 0 4 0;
+#X connect 3 0 5 1;
+#X connect 4 0 3 0;
+#X connect 5 0 0 0;
+#X connect 5 0 6 0;
+#X restore 470 150 pd attack;
+#N canvas 692 232 730 633 attack_collision 0;
+#X obj 340 50 inlet radius;
+#X obj 240 50 inlet reference;
+#X obj 390 80 unpack 0 0, f 11;
+#X obj 20 310 select 0 1;
+#X obj 30 0 inlet test;
+#N canvas 876 256 554 529 collide 0;
+#X obj 91 217 list-map2;
+#X obj 171 218 -;
+#X obj 171 265 *;
+#X obj 171 241 t a a;
+#X obj 84 340 sqrt;
+#X obj 84 290 list-reduce;
+#X obj 170 290 +;
+#X obj 124 360 t b a;
+#X obj 150 130 inlet reference;
+#X obj 80 130 inlet test;
+#X obj 294 247 inlet radius;
+#X obj 94 410 outlet;
+#X obj 94 380 <= 1;
+#X floatatom 40 320 5 0 0 0 - - -, f 5;
+#X connect 0 0 5 0;
+#X connect 0 1 1 0;
+#X connect 1 0 3 0;
+#X connect 2 0 0 2;
+#X connect 3 0 2 0;
+#X connect 3 1 2 1;
+#X connect 4 0 12 0;
+#X connect 5 0 4 0;
+#X connect 5 0 13 0;
+#X connect 5 1 6 0;
+#X connect 6 0 5 1;
+#X connect 7 0 12 0;
+#X connect 7 1 12 1;
+#X connect 8 0 0 1;
+#X connect 9 0 0 0;
+#X connect 10 0 7 0;
+#X connect 12 0 11 0;
+#X restore 30 110 pd collide;
+#X obj 50 140 tgl 24 0 empty empty hit? 28 7 1 10 #fcfcfc #000000 #000000
+0 1;
+#X obj 130 110 loadbang;
+#X obj 73 232 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 103 232 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 133 232 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 23 202 spigot;
+#X obj 123 202 spigot;
+#X obj 23 172 receive reset;
+#X obj 193 222 loadbang;
+#X obj 143 172 receive start;
+#X obj 43 272 spigot;
+#X obj 130 140 delay 100;
+#X obj 30 70 pack 0 0;
+#X obj 50 30 delay 100;
+#X msg 50 50 10;
+#X obj 20 360 send hit10;
+#X obj 20 380 send score-space;
+#X obj 20 400 send destroyed;
+#X obj 270 130 gemhead;
+#X obj 270 240 pix_image;
+#X obj 270 310 pix_texture;
+#X msg 340 260 env \$1;
+#X obj 340 240 hradio 15 1 0 6 empty empty empty 0 -6 0 8 #fcfcfc #000000
+#000000 0;
+#X obj 270 400 translateXYZ -2 1 0;
+#X msg 340 220 2;
+#X msg 300 190 open Art/Enemy1.png;
+#X obj 270 430 square 0.25;
+#X msg 480 260 env \$1;
+#X obj 480 240 hradio 15 1 0 6 empty empty empty 0 -6 0 8 #fcfcfc #000000
+#000000 0;
+#X msg 480 220 2;
+#X msg 440 190 open Art/Enemy3.png;
+#X obj 440 160 receive round3;
+#X obj 300 160 receive start;
+#X msg 610 260 env \$1;
+#X obj 610 240 hradio 15 1 0 6 empty empty empty 0 -6 0 8 #fcfcfc #000000
+#000000 0;
+#X msg 610 220 2;
+#X obj 570 160 receive round2;
+#X msg 570 190 open Art/Enemy1.png;
+#X obj 270 370 color 1 0 0;
+#X msg 360 310 1 0 0;
+#X msg 430 310 1 1 0;
+#X msg 490 310 0 0 1;
+#X connect 0 0 5 2;
+#X connect 1 0 2 0;
+#X connect 1 0 5 1;
+#X connect 2 0 29 1;
+#X connect 2 1 18 1;
+#X connect 2 1 29 2;
+#X connect 3 1 21 0;
+#X connect 3 1 22 0;
+#X connect 3 1 23 0;
+#X connect 4 0 18 0;
+#X connect 4 0 19 0;
+#X connect 5 0 6 0;
+#X connect 6 0 16 0;
+#X connect 7 0 17 0;
+#X connect 8 0 9 0;
+#X connect 8 0 11 1;
+#X connect 8 0 16 1;
+#X connect 9 0 10 0;
+#X connect 10 0 12 1;
+#X connect 11 0 8 0;
+#X connect 12 0 8 0;
+#X connect 13 0 11 0;
+#X connect 14 0 10 0;
+#X connect 15 0 12 0;
+#X connect 16 0 3 0;
+#X connect 17 0 6 0;
+#X connect 18 0 5 0;
+#X connect 19 0 20 0;
+#X connect 20 0 18 0;
+#X connect 24 0 25 0;
+#X connect 25 0 26 0;
+#X connect 26 0 44 0;
+#X connect 27 0 26 0;
+#X connect 28 0 27 0;
+#X connect 28 0 26 0;
+#X connect 29 0 32 0;
+#X connect 30 0 28 0;
+#X connect 31 0 25 0;
+#X connect 33 0 26 0;
+#X connect 34 0 33 0;
+#X connect 34 0 26 0;
+#X connect 35 0 34 0;
+#X connect 36 0 25 0;
+#X connect 37 0 36 0;
+#X connect 37 0 35 0;
+#X connect 37 0 46 0;
+#X connect 38 0 31 0;
+#X connect 38 0 30 0;
+#X connect 38 0 45 0;
+#X connect 39 0 26 0;
+#X connect 40 0 39 0;
+#X connect 40 0 26 0;
+#X connect 41 0 40 0;
+#X connect 42 0 43 0;
+#X connect 42 0 41 0;
+#X connect 42 0 47 0;
+#X connect 43 0 25 0;
+#X connect 44 0 29 0;
+#X connect 45 0 44 1;
+#X connect 46 0 44 1;
+#X connect 47 0 44 1;
+#X restore 470 250 pd attack_collision;
+#X floatatom 710 200 5 0 0 1 - - -, f 5;
+#X obj 710 160 loadbang;
+#N canvas 868 136 502 414 attack 0;
+#X obj 130 180 outlet;
+#X obj 30 30 receive attack_pos;
+#X obj 171 31 receive attack;
+#X obj 171 91 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 191 61 delay 200;
+#X obj 130 130 spigot;
+#X floatatom 90 160 5 0 0 0 - - -, f 5;
+#X connect 1 0 5 0;
+#X connect 2 0 3 0;
+#X connect 2 0 4 0;
+#X connect 3 0 5 1;
+#X connect 4 0 3 0;
+#X connect 5 0 0 0;
+#X connect 5 0 6 0;
+#X restore 620 150 pd attack;
+#N canvas 680 240 734 625 attack_collision 0;
+#X obj 340 50 inlet radius;
+#X obj 240 50 inlet reference;
+#X obj 390 80 unpack 0 0;
+#X obj 20 310 select 0 1;
+#X obj 30 0 inlet test;
+#N canvas 876 256 554 529 collide 0;
+#X obj 91 217 list-map2;
+#X obj 171 218 -;
+#X obj 171 265 *;
+#X obj 171 241 t a a;
+#X obj 84 340 sqrt;
+#X obj 84 290 list-reduce;
+#X obj 170 290 +;
+#X obj 124 360 t b a;
+#X obj 150 130 inlet reference;
+#X obj 80 130 inlet test;
+#X obj 294 247 inlet radius;
+#X obj 94 410 outlet;
+#X obj 94 380 <= 1;
+#X floatatom 40 320 5 0 0 0 - - -, f 5;
+#X connect 0 0 5 0;
+#X connect 0 1 1 0;
+#X connect 1 0 3 0;
+#X connect 2 0 0 2;
+#X connect 3 0 2 0;
+#X connect 3 1 2 1;
+#X connect 4 0 12 0;
+#X connect 5 0 4 0;
+#X connect 5 0 13 0;
+#X connect 5 1 6 0;
+#X connect 6 0 5 1;
+#X connect 7 0 12 0;
+#X connect 7 1 12 1;
+#X connect 8 0 0 1;
+#X connect 9 0 0 0;
+#X connect 10 0 7 0;
+#X connect 12 0 11 0;
+#X restore 30 110 pd collide;
+#X obj 50 140 tgl 24 0 empty empty hit? 28 7 1 10 #fcfcfc #000000 #000000
+0 1;
+#X obj 130 110 loadbang;
+#X obj 73 232 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 103 232 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 133 232 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 23 202 spigot;
+#X obj 123 202 spigot;
+#X obj 23 172 receive reset;
+#X obj 193 222 loadbang;
+#X obj 143 172 receive start;
+#X obj 43 272 spigot;
+#X obj 130 140 delay 100;
+#X obj 30 70 pack 0 0;
+#X obj 50 30 delay 100;
+#X msg 50 50 10;
+#X obj 20 360 send hit11;
+#X obj 20 380 send score-space;
+#X obj 20 400 send destroyed;
+#X obj 250 160 gemhead;
+#X obj 250 270 pix_image;
+#X obj 250 340 pix_texture;
+#X msg 320 290 env \$1;
+#X obj 320 270 hradio 15 1 0 6 empty empty empty 0 -6 0 8 #fcfcfc #000000
+#000000 0;
+#X obj 250 430 translateXYZ -2 1 0;
+#X msg 320 250 2;
+#X msg 280 220 open Art/Enemy1.png;
+#X obj 250 460 square 0.25;
+#X msg 460 290 env \$1;
+#X obj 460 270 hradio 15 1 0 6 empty empty empty 0 -6 0 8 #fcfcfc #000000
+#000000 0;
+#X msg 460 250 2;
+#X msg 420 220 open Art/Enemy3.png;
+#X obj 420 190 receive round3;
+#X obj 280 190 receive start;
+#X msg 590 290 env \$1;
+#X obj 590 270 hradio 15 1 0 6 empty empty empty 0 -6 0 8 #fcfcfc #000000
+#000000 0;
+#X msg 590 250 2;
+#X obj 550 190 receive round2;
+#X msg 550 220 open Art/Enemy1.png;
+#X obj 250 400 color 1 0 0;
+#X msg 340 340 1 0 0;
+#X msg 410 340 1 1 0;
+#X msg 470 340 0 0 1;
+#X connect 0 0 5 2;
+#X connect 1 0 2 0;
+#X connect 1 0 5 1;
+#X connect 2 0 29 1;
+#X connect 2 1 18 1;
+#X connect 2 1 29 2;
+#X connect 3 1 21 0;
+#X connect 3 1 22 0;
+#X connect 3 1 23 0;
+#X connect 4 0 18 0;
+#X connect 4 0 19 0;
+#X connect 5 0 6 0;
+#X connect 6 0 16 0;
+#X connect 7 0 17 0;
+#X connect 8 0 9 0;
+#X connect 8 0 11 1;
+#X connect 8 0 16 1;
+#X connect 9 0 10 0;
+#X connect 10 0 12 1;
+#X connect 11 0 8 0;
+#X connect 12 0 8 0;
+#X connect 13 0 11 0;
+#X connect 14 0 10 0;
+#X connect 15 0 12 0;
+#X connect 16 0 3 0;
+#X connect 17 0 6 0;
+#X connect 18 0 5 0;
+#X connect 19 0 20 0;
+#X connect 20 0 18 0;
+#X connect 24 0 25 0;
+#X connect 25 0 26 0;
+#X connect 26 0 44 0;
+#X connect 27 0 26 0;
+#X connect 28 0 27 0;
+#X connect 28 0 26 0;
+#X connect 29 0 32 0;
+#X connect 30 0 28 0;
+#X connect 31 0 25 0;
+#X connect 33 0 26 0;
+#X connect 34 0 33 0;
+#X connect 34 0 26 0;
+#X connect 35 0 34 0;
+#X connect 36 0 25 0;
+#X connect 37 0 36 0;
+#X connect 37 0 35 0;
+#X connect 37 0 46 0;
+#X connect 38 0 31 0;
+#X connect 38 0 30 0;
+#X connect 38 0 45 0;
+#X connect 39 0 26 0;
+#X connect 40 0 39 0;
+#X connect 40 0 26 0;
+#X connect 41 0 40 0;
+#X connect 42 0 43 0;
+#X connect 42 0 41 0;
+#X connect 42 0 47 0;
+#X connect 43 0 25 0;
+#X connect 44 0 29 0;
+#X connect 45 0 44 1;
+#X connect 46 0 44 1;
+#X connect 47 0 44 1;
+#X restore 620 250 pd attack_collision;
+#X floatatom 860 200 5 0 0 1 - - -, f 5;
+#X obj 860 160 loadbang;
+#N canvas 868 136 502 414 attack 0;
+#X obj 130 180 outlet;
+#X obj 30 30 receive attack_pos;
+#X obj 171 31 receive attack;
+#X obj 171 91 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 191 61 delay 200;
+#X obj 130 130 spigot;
+#X floatatom 90 160 5 0 0 0 - - -, f 5;
+#X connect 1 0 5 0;
+#X connect 2 0 3 0;
+#X connect 2 0 4 0;
+#X connect 3 0 5 1;
+#X connect 4 0 3 0;
+#X connect 5 0 0 0;
+#X connect 5 0 6 0;
+#X restore 770 150 pd attack;
+#N canvas 668 156 730 590 attack_collision 0;
+#X obj 340 50 inlet radius;
+#X obj 240 50 inlet reference;
+#X obj 390 80 unpack 0 0;
+#X obj 20 310 select 0 1;
+#X obj 30 0 inlet test;
+#N canvas 876 256 554 529 collide 0;
+#X obj 91 217 list-map2;
+#X obj 171 218 -;
+#X obj 171 265 *;
+#X obj 171 241 t a a;
+#X obj 84 340 sqrt;
+#X obj 84 290 list-reduce;
+#X obj 170 290 +;
+#X obj 124 360 t b a;
+#X obj 150 130 inlet reference;
+#X obj 80 130 inlet test;
+#X obj 294 247 inlet radius;
+#X obj 94 410 outlet;
+#X obj 94 380 <= 1;
+#X floatatom 40 320 5 0 0 0 - - -, f 5;
+#X connect 0 0 5 0;
+#X connect 0 1 1 0;
+#X connect 1 0 3 0;
+#X connect 2 0 0 2;
+#X connect 3 0 2 0;
+#X connect 3 1 2 1;
+#X connect 4 0 12 0;
+#X connect 5 0 4 0;
+#X connect 5 0 13 0;
+#X connect 5 1 6 0;
+#X connect 6 0 5 1;
+#X connect 7 0 12 0;
+#X connect 7 1 12 1;
+#X connect 8 0 0 1;
+#X connect 9 0 0 0;
+#X connect 10 0 7 0;
+#X connect 12 0 11 0;
+#X restore 30 110 pd collide;
+#X obj 50 140 tgl 24 0 empty empty hit? 28 7 1 10 #fcfcfc #000000 #000000
+0 1;
+#X obj 130 110 loadbang;
+#X obj 73 232 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 103 232 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 133 232 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 23 202 spigot;
+#X obj 123 202 spigot;
+#X obj 23 172 receive reset;
+#X obj 193 222 loadbang;
+#X obj 143 172 receive start;
+#X obj 43 272 spigot;
+#X obj 130 140 delay 100;
+#X obj 30 70 pack 0 0;
+#X obj 50 30 delay 100;
+#X msg 50 50 10;
+#X obj 20 360 send hit12;
+#X obj 20 380 send score-space;
+#X obj 20 400 send destroyed;
+#X obj 290 150 gemhead;
+#X obj 290 260 pix_image;
+#X obj 290 330 pix_texture;
+#X msg 360 280 env \$1;
+#X obj 360 260 hradio 15 1 0 6 empty empty empty 0 -6 0 8 #fcfcfc #000000
+#000000 0;
+#X obj 290 420 translateXYZ -2 1 0;
+#X msg 360 240 2;
+#X msg 320 210 open Art/Enemy1.png;
+#X obj 290 450 square 0.25;
+#X msg 500 280 env \$1;
+#X obj 500 260 hradio 15 1 0 6 empty empty empty 0 -6 0 8 #fcfcfc #000000
+#000000 0;
+#X msg 500 240 2;
+#X msg 460 210 open Art/Enemy3.png;
+#X obj 460 180 receive round3;
+#X obj 320 180 receive start;
+#X msg 630 280 env \$1;
+#X obj 630 260 hradio 15 1 0 6 empty empty empty 0 -6 0 8 #fcfcfc #000000
+#000000 0;
+#X msg 630 240 2;
+#X obj 590 180 receive round2;
+#X msg 590 210 open Art/Enemy1.png;
+#X obj 290 390 color 1 0 0;
+#X msg 380 330 1 0 0;
+#X msg 450 330 1 1 0;
+#X msg 510 330 0 0 1;
+#X connect 0 0 5 2;
+#X connect 1 0 2 0;
+#X connect 1 0 5 1;
+#X connect 2 0 29 1;
+#X connect 2 1 18 1;
+#X connect 2 1 29 2;
+#X connect 3 1 21 0;
+#X connect 3 1 22 0;
+#X connect 3 1 23 0;
+#X connect 4 0 18 0;
+#X connect 4 0 19 0;
+#X connect 5 0 6 0;
+#X connect 6 0 16 0;
+#X connect 7 0 17 0;
+#X connect 8 0 9 0;
+#X connect 8 0 11 1;
+#X connect 8 0 16 1;
+#X connect 9 0 10 0;
+#X connect 10 0 12 1;
+#X connect 11 0 8 0;
+#X connect 12 0 8 0;
+#X connect 13 0 11 0;
+#X connect 14 0 10 0;
+#X connect 15 0 12 0;
+#X connect 16 0 3 0;
+#X connect 17 0 6 0;
+#X connect 18 0 5 0;
+#X connect 19 0 20 0;
+#X connect 20 0 18 0;
+#X connect 24 0 25 0;
+#X connect 25 0 26 0;
+#X connect 26 0 44 0;
+#X connect 27 0 26 0;
+#X connect 28 0 27 0;
+#X connect 28 0 26 0;
+#X connect 29 0 32 0;
+#X connect 30 0 28 0;
+#X connect 31 0 25 0;
+#X connect 33 0 26 0;
+#X connect 34 0 33 0;
+#X connect 34 0 26 0;
+#X connect 35 0 34 0;
+#X connect 36 0 25 0;
+#X connect 37 0 36 0;
+#X connect 37 0 35 0;
+#X connect 37 0 46 0;
+#X connect 38 0 31 0;
+#X connect 38 0 30 0;
+#X connect 38 0 45 0;
+#X connect 39 0 26 0;
+#X connect 40 0 39 0;
+#X connect 40 0 26 0;
+#X connect 41 0 40 0;
+#X connect 42 0 43 0;
+#X connect 42 0 41 0;
+#X connect 42 0 47 0;
+#X connect 43 0 25 0;
+#X connect 44 0 29 0;
+#X connect 45 0 44 1;
+#X connect 46 0 44 1;
+#X connect 47 0 44 1;
+#X restore 770 250 pd attack_collision;
+#X msg 100 180 0.25;
+#X msg 260 180 0.25;
+#X msg 410 180 0.25;
+#X msg 560 180 0.25;
+#X msg 710 180 0.25;
+#X msg 860 180 0.25;
+#N canvas 688 84 598 670 Enemy12 0;
+#X obj 10 540 receive reset;
+#X obj 200 600 outlet;
+#X obj 200 580 pack 0 0;
+#X obj 220 550 t b f;
+#X msg 360 400 -10;
+#X msg 390 400 -10;
+#X obj 160 210 metro;
+#X obj 160 235 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 230 190 int 1;
+#X floatatom 230 222 5 0 0 0 - - -, f 5;
+#X obj 300 232 + 1;
+#X obj 100 200 sel 0;
+#X obj 100 225 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X msg 100 248 -1;
+#X obj 40 200 loadbang;
+#X obj 190 110 loadbang;
+#X obj 230 271 + 1;
+#X floatatom 230 300 5 0 0 0 - - -, f 5;
+#X floatatom 190 160 5 0 0 0 - - -, f 5;
+#X obj 40 570 receive start;
+#X obj 40 600 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 60 150 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 90 150 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 120 150 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 10 120 spigot;
+#X obj 110 120 spigot;
+#X obj 10 90 receive reset;
+#X obj 130 90 receive start;
+#X obj 250 350 sel 4 8;
+#X obj 230 242 % 8;
+#X msg 250 450 \$1;
+#X floatatom 220 500 5 0 0 0 - - -, f 5;
+#X obj 250 390 f 4;
+#X obj 150 350 sel 5 6 7;
+#X obj 70 350 sel 1 2 3;
+#X obj 250 425 - 0.5;
+#X msg 80 380 1;
+#X msg 150 380 2;
+#X obj 100 439 pack f f;
+#X obj 100 468 route 1 2;
+#X obj 90 410 t f b;
+#X obj 100 500 + 0.5;
+#X obj 140 500 - 0.5;
+#X floatatom 120 540 5 0 0 0 - - -, f 5;
+#X obj 170 430 f -3;
+#X msg 190 135 750;
+#X obj 40 510 loadbang;
+#X obj 360 350 receive hit12;
+#X obj 20 60 receive hit12;
+#X msg 40 623 2.5;
+#X msg 100 620 3.5;
+#X connect 0 0 20 0;
+#X connect 2 0 1 0;
+#X connect 3 0 2 0;
+#X connect 3 1 2 1;
+#X connect 4 0 2 0;
+#X connect 5 0 3 0;
+#X connect 6 0 7 0;
+#X connect 7 0 8 0;
+#X connect 8 0 9 0;
+#X connect 8 0 10 0;
+#X connect 9 0 29 0;
+#X connect 10 0 8 1;
+#X connect 11 0 12 0;
+#X connect 12 0 13 0;
+#X connect 13 0 8 0;
+#X connect 14 0 12 0;
+#X connect 15 0 45 0;
+#X connect 15 0 23 0;
+#X connect 16 0 17 0;
+#X connect 17 0 28 0;
+#X connect 17 0 33 0;
+#X connect 17 0 34 0;
+#X connect 18 0 6 1;
+#X connect 19 0 20 0;
+#X connect 20 0 49 0;
+#X connect 20 0 50 0;
+#X connect 21 0 22 0;
+#X connect 21 0 24 1;
+#X connect 21 0 11 0;
+#X connect 21 0 6 0;
+#X connect 22 0 23 0;
+#X connect 23 0 25 1;
+#X connect 24 0 21 0;
+#X connect 25 0 21 0;
+#X connect 26 0 24 0;
+#X connect 27 0 25 0;
+#X connect 28 0 32 0;
+#X connect 28 1 32 0;
+#X connect 29 0 16 0;
+#X connect 30 0 31 0;
+#X connect 31 0 3 0;
+#X connect 31 0 32 1;
+#X connect 32 0 35 0;
+#X connect 33 0 37 0;
+#X connect 33 1 37 0;
+#X connect 33 2 37 0;
+#X connect 34 0 36 0;
+#X connect 34 1 36 0;
+#X connect 34 2 36 0;
+#X connect 35 0 30 0;
+#X connect 36 0 40 0;
+#X connect 37 0 40 0;
+#X connect 38 0 39 0;
+#X connect 39 0 41 0;
+#X connect 39 1 42 0;
+#X connect 40 0 38 0;
+#X connect 40 1 44 0;
+#X connect 41 0 43 0;
+#X connect 42 0 43 0;
+#X connect 43 0 44 1;
+#X connect 43 0 2 0;
+#X connect 44 0 38 1;
+#X connect 45 0 18 0;
+#X connect 46 0 20 0;
+#X connect 47 0 4 0;
+#X connect 47 0 5 0;
+#X connect 48 0 24 0;
+#X connect 49 0 2 0;
+#X connect 49 0 43 0;
+#X connect 50 0 3 0;
+#X connect 50 0 31 0;
+#X restore 790 200 pd Enemy12;
+#N canvas 688 84 598 670 Enemy11 0;
+#X obj 10 540 receive reset;
+#X obj 200 600 outlet;
+#X obj 200 580 pack 0 0;
+#X obj 220 550 t b f;
+#X msg 360 400 -10;
+#X msg 390 400 -10;
+#X obj 160 210 metro;
+#X obj 160 235 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 230 190 int 1;
+#X floatatom 230 222 5 0 0 0 - - -, f 5;
+#X obj 300 232 + 1;
+#X obj 100 200 sel 0;
+#X obj 100 225 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X msg 100 248 -1;
+#X obj 40 200 loadbang;
+#X obj 190 110 loadbang;
+#X obj 230 271 + 1;
+#X floatatom 230 300 5 0 0 0 - - -, f 5;
+#X floatatom 190 160 5 0 0 0 - - -, f 5;
+#X obj 40 570 receive start;
+#X obj 40 600 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 60 150 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 90 150 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 120 150 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 10 120 spigot;
+#X obj 110 120 spigot;
+#X obj 10 90 receive reset;
+#X obj 130 90 receive start;
+#X obj 250 350 sel 4 8;
+#X obj 230 242 % 8;
+#X msg 250 450 \$1;
+#X floatatom 220 500 5 0 0 0 - - -, f 5;
+#X obj 250 390 f 4;
+#X obj 150 350 sel 5 6 7;
+#X obj 70 350 sel 1 2 3;
+#X obj 250 425 - 0.5;
+#X msg 80 380 1;
+#X msg 150 380 2;
+#X obj 100 439 pack f f;
+#X obj 100 468 route 1 2;
+#X obj 90 410 t f b;
+#X obj 100 500 + 0.5;
+#X obj 140 500 - 0.5;
+#X floatatom 120 540 5 0 0 0 - - -, f 5;
+#X obj 170 430 f -3;
+#X msg 190 135 750;
+#X obj 40 510 loadbang;
+#X obj 360 350 receive hit11;
+#X obj 20 60 receive hit11;
+#X msg 40 623 1.5;
+#X msg 100 620 3.5;
+#X connect 0 0 20 0;
+#X connect 2 0 1 0;
+#X connect 3 0 2 0;
+#X connect 3 1 2 1;
+#X connect 4 0 2 0;
+#X connect 5 0 3 0;
+#X connect 6 0 7 0;
+#X connect 7 0 8 0;
+#X connect 8 0 9 0;
+#X connect 8 0 10 0;
+#X connect 9 0 29 0;
+#X connect 10 0 8 1;
+#X connect 11 0 12 0;
+#X connect 12 0 13 0;
+#X connect 13 0 8 0;
+#X connect 14 0 12 0;
+#X connect 15 0 45 0;
+#X connect 15 0 23 0;
+#X connect 16 0 17 0;
+#X connect 17 0 28 0;
+#X connect 17 0 33 0;
+#X connect 17 0 34 0;
+#X connect 18 0 6 1;
+#X connect 19 0 20 0;
+#X connect 20 0 49 0;
+#X connect 20 0 50 0;
+#X connect 21 0 22 0;
+#X connect 21 0 24 1;
+#X connect 21 0 11 0;
+#X connect 21 0 6 0;
+#X connect 22 0 23 0;
+#X connect 23 0 25 1;
+#X connect 24 0 21 0;
+#X connect 25 0 21 0;
+#X connect 26 0 24 0;
+#X connect 27 0 25 0;
+#X connect 28 0 32 0;
+#X connect 28 1 32 0;
+#X connect 29 0 16 0;
+#X connect 30 0 31 0;
+#X connect 31 0 3 0;
+#X connect 31 0 32 1;
+#X connect 32 0 35 0;
+#X connect 33 0 37 0;
+#X connect 33 1 37 0;
+#X connect 33 2 37 0;
+#X connect 34 0 36 0;
+#X connect 34 1 36 0;
+#X connect 34 2 36 0;
+#X connect 35 0 30 0;
+#X connect 36 0 40 0;
+#X connect 37 0 40 0;
+#X connect 38 0 39 0;
+#X connect 39 0 41 0;
+#X connect 39 1 42 0;
+#X connect 40 0 38 0;
+#X connect 40 1 44 0;
+#X connect 41 0 43 0;
+#X connect 42 0 43 0;
+#X connect 43 0 44 1;
+#X connect 43 0 2 0;
+#X connect 44 0 38 1;
+#X connect 45 0 18 0;
+#X connect 46 0 20 0;
+#X connect 47 0 4 0;
+#X connect 47 0 5 0;
+#X connect 48 0 24 0;
+#X connect 49 0 2 0;
+#X connect 49 0 43 0;
+#X connect 50 0 3 0;
+#X connect 50 0 31 0;
+#X restore 640 200 pd Enemy11;
+#N canvas 688 84 598 670 Enemy10 0;
+#X obj 10 540 receive reset;
+#X obj 200 600 outlet;
+#X obj 200 580 pack 0 0;
+#X obj 220 550 t b f;
+#X msg 360 400 -10;
+#X msg 390 400 -10;
+#X obj 160 210 metro;
+#X obj 160 235 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 230 190 int 1;
+#X floatatom 230 222 5 0 0 0 - - -, f 5;
+#X obj 300 232 + 1;
+#X obj 100 200 sel 0;
+#X obj 100 225 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X msg 100 248 -1;
+#X obj 40 200 loadbang;
+#X obj 190 110 loadbang;
+#X obj 230 271 + 1;
+#X floatatom 230 300 5 0 0 0 - - -, f 5;
+#X floatatom 190 160 5 0 0 0 - - -, f 5;
+#X obj 40 570 receive start;
+#X obj 40 600 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 60 150 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 90 150 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 120 150 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 10 120 spigot;
+#X obj 110 120 spigot;
+#X obj 10 90 receive reset;
+#X obj 130 90 receive start;
+#X obj 250 350 sel 4 8;
+#X obj 230 242 % 8;
+#X msg 250 450 \$1;
+#X floatatom 220 500 5 0 0 0 - - -, f 5;
+#X obj 250 390 f 4;
+#X obj 150 350 sel 5 6 7;
+#X obj 70 350 sel 1 2 3;
+#X obj 250 425 - 0.5;
+#X msg 80 380 1;
+#X msg 150 380 2;
+#X obj 100 439 pack f f;
+#X obj 100 468 route 1 2;
+#X obj 90 410 t f b;
+#X obj 100 500 + 0.5;
+#X obj 140 500 - 0.5;
+#X floatatom 120 540 5 0 0 0 - - -, f 5;
+#X obj 170 430 f -3;
+#X msg 190 135 750;
+#X obj 40 510 loadbang;
+#X obj 20 60 receive hit10;
+#X obj 360 350 receive hit10;
+#X msg 40 623 0.5;
+#X msg 100 620 3.5;
+#X connect 0 0 20 0;
+#X connect 2 0 1 0;
+#X connect 3 0 2 0;
+#X connect 3 1 2 1;
+#X connect 4 0 2 0;
+#X connect 5 0 3 0;
+#X connect 6 0 7 0;
+#X connect 7 0 8 0;
+#X connect 8 0 9 0;
+#X connect 8 0 10 0;
+#X connect 9 0 29 0;
+#X connect 10 0 8 1;
+#X connect 11 0 12 0;
+#X connect 12 0 13 0;
+#X connect 13 0 8 0;
+#X connect 14 0 12 0;
+#X connect 15 0 45 0;
+#X connect 15 0 23 0;
+#X connect 16 0 17 0;
+#X connect 17 0 28 0;
+#X connect 17 0 33 0;
+#X connect 17 0 34 0;
+#X connect 18 0 6 1;
+#X connect 19 0 20 0;
+#X connect 20 0 49 0;
+#X connect 20 0 50 0;
+#X connect 21 0 22 0;
+#X connect 21 0 24 1;
+#X connect 21 0 11 0;
+#X connect 21 0 6 0;
+#X connect 22 0 23 0;
+#X connect 23 0 25 1;
+#X connect 24 0 21 0;
+#X connect 25 0 21 0;
+#X connect 26 0 24 0;
+#X connect 27 0 25 0;
+#X connect 28 0 32 0;
+#X connect 28 1 32 0;
+#X connect 29 0 16 0;
+#X connect 30 0 31 0;
+#X connect 31 0 3 0;
+#X connect 31 0 32 1;
+#X connect 32 0 35 0;
+#X connect 33 0 37 0;
+#X connect 33 1 37 0;
+#X connect 33 2 37 0;
+#X connect 34 0 36 0;
+#X connect 34 1 36 0;
+#X connect 34 2 36 0;
+#X connect 35 0 30 0;
+#X connect 36 0 40 0;
+#X connect 37 0 40 0;
+#X connect 38 0 39 0;
+#X connect 39 0 41 0;
+#X connect 39 1 42 0;
+#X connect 40 0 38 0;
+#X connect 40 1 44 0;
+#X connect 41 0 43 0;
+#X connect 42 0 43 0;
+#X connect 43 0 44 1;
+#X connect 43 0 2 0;
+#X connect 44 0 38 1;
+#X connect 45 0 18 0;
+#X connect 46 0 20 0;
+#X connect 47 0 24 0;
+#X connect 48 0 4 0;
+#X connect 48 0 5 0;
+#X connect 49 0 2 0;
+#X connect 49 0 43 0;
+#X connect 50 0 3 0;
+#X connect 50 0 31 0;
+#X restore 490 200 pd Enemy10;
+#N canvas 688 84 598 670 Enemy9 0;
+#X obj 10 540 receive reset;
+#X obj 200 600 outlet;
+#X obj 200 580 pack 0 0;
+#X obj 220 550 t b f;
+#X msg 360 400 -10;
+#X msg 390 400 -10;
+#X obj 160 210 metro;
+#X obj 160 235 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 230 190 int 1;
+#X floatatom 230 222 5 0 0 0 - - -, f 5;
+#X obj 300 232 + 1;
+#X obj 100 200 sel 0;
+#X obj 100 225 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X msg 100 248 -1;
+#X obj 40 200 loadbang;
+#X obj 190 110 loadbang;
+#X obj 230 271 + 1;
+#X floatatom 230 300 5 0 0 0 - - -, f 5;
+#X floatatom 190 160 5 0 0 0 - - -, f 5;
+#X obj 40 570 receive start;
+#X obj 40 600 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 60 150 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 90 150 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 120 150 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 10 120 spigot;
+#X obj 110 120 spigot;
+#X obj 10 90 receive reset;
+#X obj 130 90 receive start;
+#X obj 250 350 sel 4 8;
+#X obj 230 242 % 8;
+#X msg 250 450 \$1;
+#X floatatom 220 500 5 0 0 0 - - -, f 5;
+#X obj 250 390 f 4;
+#X obj 150 350 sel 5 6 7;
+#X obj 70 350 sel 1 2 3;
+#X obj 250 425 - 0.5;
+#X msg 80 380 1;
+#X msg 150 380 2;
+#X obj 100 439 pack f f;
+#X obj 100 468 route 1 2;
+#X obj 90 410 t f b;
+#X obj 100 500 + 0.5;
+#X obj 140 500 - 0.5;
+#X floatatom 120 540 5 0 0 0 - - -, f 5;
+#X obj 170 430 f -3;
+#X msg 190 135 750;
+#X obj 30 510 loadbang;
+#X obj 20 60 receive hit9;
+#X obj 360 350 receive hit9;
+#X msg 40 623 -0.5;
+#X msg 100 620 3.5;
+#X connect 0 0 20 0;
+#X connect 2 0 1 0;
+#X connect 3 0 2 0;
+#X connect 3 1 2 1;
+#X connect 4 0 2 0;
+#X connect 5 0 3 0;
+#X connect 6 0 7 0;
+#X connect 7 0 8 0;
+#X connect 8 0 9 0;
+#X connect 8 0 10 0;
+#X connect 9 0 29 0;
+#X connect 10 0 8 1;
+#X connect 11 0 12 0;
+#X connect 12 0 13 0;
+#X connect 13 0 8 0;
+#X connect 14 0 12 0;
+#X connect 15 0 45 0;
+#X connect 15 0 23 0;
+#X connect 16 0 17 0;
+#X connect 17 0 28 0;
+#X connect 17 0 33 0;
+#X connect 17 0 34 0;
+#X connect 18 0 6 1;
+#X connect 19 0 20 0;
+#X connect 20 0 49 0;
+#X connect 20 0 50 0;
+#X connect 21 0 22 0;
+#X connect 21 0 24 1;
+#X connect 21 0 11 0;
+#X connect 21 0 6 0;
+#X connect 22 0 23 0;
+#X connect 23 0 25 1;
+#X connect 24 0 21 0;
+#X connect 25 0 21 0;
+#X connect 26 0 24 0;
+#X connect 27 0 25 0;
+#X connect 28 0 32 0;
+#X connect 28 1 32 0;
+#X connect 29 0 16 0;
+#X connect 30 0 31 0;
+#X connect 31 0 3 0;
+#X connect 31 0 32 1;
+#X connect 32 0 35 0;
+#X connect 33 0 37 0;
+#X connect 33 1 37 0;
+#X connect 33 2 37 0;
+#X connect 34 0 36 0;
+#X connect 34 1 36 0;
+#X connect 34 2 36 0;
+#X connect 35 0 30 0;
+#X connect 36 0 40 0;
+#X connect 37 0 40 0;
+#X connect 38 0 39 0;
+#X connect 39 0 41 0;
+#X connect 39 1 42 0;
+#X connect 40 0 38 0;
+#X connect 40 1 44 0;
+#X connect 41 0 43 0;
+#X connect 42 0 43 0;
+#X connect 43 0 44 1;
+#X connect 43 0 2 0;
+#X connect 44 0 38 1;
+#X connect 45 0 18 0;
+#X connect 46 0 20 0;
+#X connect 47 0 24 0;
+#X connect 48 0 4 0;
+#X connect 48 0 5 0;
+#X connect 49 0 2 0;
+#X connect 49 0 43 0;
+#X connect 50 0 3 0;
+#X connect 50 0 31 0;
+#X restore 340 200 pd Enemy9;
+#N canvas 860 72 602 674 Enemy8 0;
+#X obj 10 540 receive reset;
+#X obj 200 600 outlet;
+#X obj 200 580 pack 0 0;
+#X obj 220 550 t b f;
+#X msg 360 400 -10;
+#X msg 390 400 -10;
+#X obj 160 210 metro;
+#X obj 160 235 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 230 190 int 1;
+#X floatatom 230 222 5 0 0 0 - - -, f 5;
+#X obj 300 232 + 1;
+#X obj 100 200 sel 0;
+#X obj 100 225 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X msg 100 248 -1;
+#X obj 40 200 loadbang;
+#X obj 190 110 loadbang;
+#X obj 230 271 + 1;
+#X floatatom 230 300 5 0 0 0 - - -, f 5;
+#X floatatom 190 160 5 0 0 0 - - -, f 5;
+#X obj 40 570 receive start;
+#X obj 40 600 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 60 150 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 90 150 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 120 150 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 10 120 spigot;
+#X obj 110 120 spigot;
+#X obj 10 90 receive reset;
+#X obj 130 90 receive start;
+#X obj 250 350 sel 4 8;
+#X obj 230 242 % 8;
+#X msg 250 450 \$1;
+#X floatatom 220 500 5 0 0 0 - - -, f 5;
+#X obj 250 390 f 4;
+#X obj 150 350 sel 5 6 7;
+#X obj 70 350 sel 1 2 3;
+#X obj 250 425 - 0.5;
+#X msg 80 380 1;
+#X msg 150 380 2;
+#X obj 100 439 pack f f;
+#X obj 100 468 route 1 2;
+#X obj 90 410 t f b;
+#X obj 100 500 + 0.5;
+#X obj 140 500 - 0.5;
+#X floatatom 120 540 5 0 0 0 - - -, f 5;
+#X obj 170 430 f -3;
+#X msg 190 135 750;
+#X obj 30 510 loadbang;
+#X msg 40 623 -1.5;
+#X obj 360 350 receive hit8;
+#X obj 20 60 receive hit8;
+#X msg 100 620 3.5;
+#X connect 0 0 20 0;
+#X connect 2 0 1 0;
+#X connect 3 0 2 0;
+#X connect 3 1 2 1;
+#X connect 4 0 2 0;
+#X connect 5 0 3 0;
+#X connect 6 0 7 0;
+#X connect 7 0 8 0;
+#X connect 8 0 9 0;
+#X connect 8 0 10 0;
+#X connect 9 0 29 0;
+#X connect 10 0 8 1;
+#X connect 11 0 12 0;
+#X connect 12 0 13 0;
+#X connect 13 0 8 0;
+#X connect 14 0 12 0;
+#X connect 15 0 45 0;
+#X connect 15 0 23 0;
+#X connect 16 0 17 0;
+#X connect 17 0 28 0;
+#X connect 17 0 33 0;
+#X connect 17 0 34 0;
+#X connect 18 0 6 1;
+#X connect 19 0 20 0;
+#X connect 20 0 47 0;
+#X connect 20 0 50 0;
+#X connect 21 0 22 0;
+#X connect 21 0 24 1;
+#X connect 21 0 11 0;
+#X connect 21 0 6 0;
+#X connect 22 0 23 0;
+#X connect 23 0 25 1;
+#X connect 24 0 21 0;
+#X connect 25 0 21 0;
+#X connect 26 0 24 0;
+#X connect 27 0 25 0;
+#X connect 28 0 32 0;
+#X connect 28 1 32 0;
+#X connect 29 0 16 0;
+#X connect 30 0 31 0;
+#X connect 31 0 3 0;
+#X connect 31 0 32 1;
+#X connect 32 0 35 0;
+#X connect 33 0 37 0;
+#X connect 33 1 37 0;
+#X connect 33 2 37 0;
+#X connect 34 0 36 0;
+#X connect 34 1 36 0;
+#X connect 34 2 36 0;
+#X connect 35 0 30 0;
+#X connect 36 0 40 0;
+#X connect 37 0 40 0;
+#X connect 38 0 39 0;
+#X connect 39 0 41 0;
+#X connect 39 1 42 0;
+#X connect 40 0 38 0;
+#X connect 40 1 44 0;
+#X connect 41 0 43 0;
+#X connect 42 0 43 0;
+#X connect 43 0 44 1;
+#X connect 43 0 2 0;
+#X connect 44 0 38 1;
+#X connect 45 0 18 0;
+#X connect 46 0 20 0;
+#X connect 47 0 2 0;
+#X connect 47 0 43 0;
+#X connect 48 0 4 0;
+#X connect 48 0 5 0;
+#X connect 49 0 24 0;
+#X connect 50 0 3 0;
+#X connect 50 0 31 0;
+#X restore 190 200 pd Enemy8;
+#N canvas 688 84 598 670 Enemy7 0;
+#X obj 10 540 receive reset;
+#X obj 200 600 outlet;
+#X obj 200 580 pack 0 0;
+#X obj 220 550 t b f;
+#X msg 360 400 -10;
+#X msg 390 400 -10;
+#X obj 160 210 metro;
+#X obj 160 235 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 230 190 int 1;
+#X floatatom 230 222 5 0 0 0 - - -, f 5;
+#X obj 300 232 + 1;
+#X obj 100 200 sel 0;
+#X obj 100 225 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X msg 100 248 -1;
+#X obj 40 200 loadbang;
+#X obj 190 110 loadbang;
+#X obj 230 271 + 1;
+#X floatatom 230 300 5 0 0 0 - - -, f 5;
+#X floatatom 190 160 5 0 0 0 - - -, f 5;
+#X obj 40 570 receive start;
+#X obj 40 600 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 60 150 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 90 150 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 120 150 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 10 120 spigot;
+#X obj 110 120 spigot;
+#X obj 10 90 receive reset;
+#X obj 130 90 receive start;
+#X obj 250 350 sel 4 8;
+#X obj 230 242 % 8;
+#X msg 250 450 \$1;
+#X floatatom 220 500 5 0 0 0 - - -, f 5;
+#X obj 250 390 f 4;
+#X obj 150 350 sel 5 6 7;
+#X obj 70 350 sel 1 2 3;
+#X obj 250 425 - 0.5;
+#X msg 80 380 1;
+#X msg 150 380 2;
+#X obj 100 439 pack f f;
+#X obj 100 468 route 1 2;
+#X obj 90 410 t f b;
+#X obj 100 500 + 0.5;
+#X obj 140 500 - 0.5;
+#X floatatom 120 540 5 0 0 0 - - -, f 5;
+#X obj 170 430 f -3;
+#X msg 190 135 750;
+#X obj 30 510 loadbang;
+#X msg 40 623 -2.5;
+#X obj 20 60 receive hit7;
+#X obj 360 350 receive hit7;
+#X msg 100 620 3.5;
+#X connect 0 0 20 0;
+#X connect 2 0 1 0;
+#X connect 3 0 2 0;
+#X connect 3 1 2 1;
+#X connect 4 0 2 0;
+#X connect 5 0 3 0;
+#X connect 6 0 7 0;
+#X connect 7 0 8 0;
+#X connect 8 0 9 0;
+#X connect 8 0 10 0;
+#X connect 9 0 29 0;
+#X connect 10 0 8 1;
+#X connect 11 0 12 0;
+#X connect 12 0 13 0;
+#X connect 13 0 8 0;
+#X connect 14 0 12 0;
+#X connect 15 0 45 0;
+#X connect 15 0 23 0;
+#X connect 16 0 17 0;
+#X connect 17 0 28 0;
+#X connect 17 0 33 0;
+#X connect 17 0 34 0;
+#X connect 18 0 6 1;
+#X connect 19 0 20 0;
+#X connect 20 0 47 0;
+#X connect 20 0 50 0;
+#X connect 21 0 22 0;
+#X connect 21 0 24 1;
+#X connect 21 0 11 0;
+#X connect 21 0 6 0;
+#X connect 22 0 23 0;
+#X connect 23 0 25 1;
+#X connect 24 0 21 0;
+#X connect 25 0 21 0;
+#X connect 26 0 24 0;
+#X connect 27 0 25 0;
+#X connect 28 0 32 0;
+#X connect 28 1 32 0;
+#X connect 29 0 16 0;
+#X connect 30 0 31 0;
+#X connect 31 0 3 0;
+#X connect 31 0 32 1;
+#X connect 32 0 35 0;
+#X connect 33 0 37 0;
+#X connect 33 1 37 0;
+#X connect 33 2 37 0;
+#X connect 34 0 36 0;
+#X connect 34 1 36 0;
+#X connect 34 2 36 0;
+#X connect 35 0 30 0;
+#X connect 36 0 40 0;
+#X connect 37 0 40 0;
+#X connect 38 0 39 0;
+#X connect 39 0 41 0;
+#X connect 39 1 42 0;
+#X connect 40 0 38 0;
+#X connect 40 1 44 0;
+#X connect 41 0 43 0;
+#X connect 42 0 43 0;
+#X connect 43 0 44 1;
+#X connect 43 0 2 0;
+#X connect 44 0 38 1;
+#X connect 45 0 18 0;
+#X connect 46 0 20 0;
+#X connect 47 0 2 0;
+#X connect 47 0 43 0;
+#X connect 48 0 24 0;
+#X connect 49 0 4 0;
+#X connect 49 0 5 0;
+#X connect 50 0 3 0;
+#X connect 50 0 31 0;
+#X restore 30 200 pd Enemy7;
+#X floatatom 110 390 5 0 0 1 - - -, f 5;
+#X obj 110 350 loadbang;
+#N canvas 104 60 606 678 Enemy1 0;
+#X obj 360 350 receive hit1;
+#X obj 10 540 receive reset;
+#X obj 200 600 outlet;
+#X obj 200 580 pack 0 0;
+#X obj 220 550 t b f;
+#X msg 360 400 -10;
+#X msg 390 400 -10;
+#X obj 160 210 metro;
+#X obj 160 235 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 230 190 int 1;
+#X floatatom 230 222 5 0 0 0 - - -, f 5;
+#X obj 300 232 + 1;
+#X obj 100 200 sel 0;
+#X obj 100 225 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X msg 100 248 -1;
+#X obj 40 200 loadbang;
+#X obj 190 110 loadbang;
+#X obj 230 271 + 1;
+#X floatatom 230 300 5 0 0 0 - - -, f 5;
+#X floatatom 190 160 5 0 0 0 - - -, f 5;
+#X obj 40 570 receive start;
+#X obj 40 600 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 60 150 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 90 150 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 120 150 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 10 120 spigot;
+#X obj 110 120 spigot;
+#X obj 10 90 receive reset;
+#X obj 130 90 receive start;
+#X obj 250 350 sel 4 8;
+#X obj 230 242 % 8;
+#X msg 250 450 \$1;
+#X floatatom 220 500 5 0 0 0 - - -, f 5;
+#X obj 250 390 f 4;
+#X obj 150 350 sel 5 6 7;
+#X obj 70 350 sel 1 2 3;
+#X obj 250 425 - 0.5;
+#X msg 80 380 1;
+#X msg 150 380 2;
+#X obj 100 439 pack f f;
+#X obj 100 468 route 1 2;
+#X obj 90 410 t f b;
+#X obj 100 500 + 0.5;
+#X obj 140 500 - 0.5;
+#X floatatom 120 540 5 0 0 0 - - -, f 5;
+#X obj 170 430 f -3;
+#X msg 40 623 -3;
+#X msg 190 135 750;
+#X obj 20 60 receive hit1;
+#X obj 30 510 loadbang;
+#X msg 100 620 3;
+#X connect 0 0 5 0;
+#X connect 0 0 6 0;
+#X connect 1 0 21 0;
+#X connect 3 0 2 0;
+#X connect 4 0 3 0;
+#X connect 4 1 3 1;
+#X connect 5 0 3 0;
+#X connect 6 0 4 0;
+#X connect 7 0 8 0;
+#X connect 8 0 9 0;
+#X connect 9 0 10 0;
+#X connect 9 0 11 0;
+#X connect 10 0 30 0;
+#X connect 11 0 9 1;
+#X connect 12 0 13 0;
+#X connect 13 0 14 0;
+#X connect 14 0 9 0;
+#X connect 15 0 13 0;
+#X connect 16 0 47 0;
+#X connect 16 0 24 0;
+#X connect 17 0 18 0;
+#X connect 18 0 29 0;
+#X connect 18 0 34 0;
+#X connect 18 0 35 0;
+#X connect 19 0 7 1;
+#X connect 20 0 21 0;
+#X connect 21 0 46 0;
+#X connect 21 0 50 0;
+#X connect 22 0 23 0;
+#X connect 22 0 25 1;
+#X connect 22 0 12 0;
+#X connect 22 0 7 0;
+#X connect 23 0 24 0;
+#X connect 24 0 26 1;
+#X connect 25 0 22 0;
+#X connect 26 0 22 0;
+#X connect 27 0 25 0;
+#X connect 28 0 26 0;
+#X connect 29 0 33 0;
+#X connect 29 1 33 0;
+#X connect 30 0 17 0;
+#X connect 31 0 32 0;
+#X connect 32 0 4 0;
+#X connect 32 0 33 1;
+#X connect 33 0 36 0;
+#X connect 34 0 38 0;
+#X connect 34 1 38 0;
+#X connect 34 2 38 0;
+#X connect 35 0 37 0;
+#X connect 35 1 37 0;
+#X connect 35 2 37 0;
+#X connect 36 0 31 0;
+#X connect 37 0 41 0;
+#X connect 38 0 41 0;
+#X connect 39 0 40 0;
+#X connect 40 0 42 0;
+#X connect 40 1 43 0;
+#X connect 41 0 39 0;
+#X connect 41 1 45 0;
+#X connect 42 0 44 0;
+#X connect 43 0 44 0;
+#X connect 44 0 45 1;
+#X connect 44 0 3 0;
+#X connect 45 0 39 1;
+#X connect 46 0 3 0;
+#X connect 46 0 44 0;
+#X connect 47 0 19 0;
+#X connect 48 0 25 0;
+#X connect 49 0 21 0;
+#X connect 50 0 4 0;
+#X connect 50 0 32 0;
+#X restore 40 390 pd Enemy1;
+#N canvas 668 156 748 622 attack_collision 0;
+#X obj 340 50 inlet radius;
+#X obj 230 50 inlet reference;
+#X obj 390 80 unpack 0 0;
+#X obj 20 310 select 0 1;
+#X obj 30 30 inlet test;
+#N canvas 876 256 554 530 collide 0;
+#X obj 91 217 list-map2;
+#X obj 171 218 -;
+#X obj 171 265 *;
+#X obj 171 241 t a a;
+#X obj 84 340 sqrt;
+#X obj 84 290 list-reduce;
+#X obj 170 290 +;
+#X obj 124 360 t b a;
+#X obj 150 130 inlet reference;
+#X obj 80 130 inlet test;
+#X obj 294 247 inlet radius;
+#X obj 94 410 outlet;
+#X obj 94 380 <= 1;
+#X floatatom 40 320 5 0 0 0 - - -, f 5;
+#X connect 0 0 5 0;
+#X connect 0 1 1 0;
+#X connect 1 0 3 0;
+#X connect 2 0 0 2;
+#X connect 3 0 2 0;
+#X connect 3 1 2 1;
+#X connect 4 0 12 0;
+#X connect 5 0 4 0;
+#X connect 5 0 13 0;
+#X connect 5 1 6 0;
+#X connect 6 0 5 1;
+#X connect 7 0 12 0;
+#X connect 7 1 12 1;
+#X connect 8 0 0 1;
+#X connect 9 0 0 0;
+#X connect 10 0 7 0;
+#X connect 12 0 11 0;
+#X restore 30 110 pd collide;
+#X obj 50 140 tgl 24 0 empty empty hit? 28 7 1 10 #fcfcfc #000000 #000000
+1 1;
+#X obj 130 110 loadbang;
+#X obj 73 232 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 103 232 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 133 232 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 23 202 spigot;
+#X obj 123 202 spigot;
+#X obj 23 172 receive reset;
+#X obj 193 222 loadbang;
+#X obj 143 172 receive start;
+#X obj 43 272 spigot;
+#X obj 130 140 delay 100;
+#X obj 30 70 pack 0 0;
+#X obj 20 340 send reset;
+#X obj 280 110 gemhead;
+#X obj 280 220 pix_image;
+#X obj 280 290 pix_texture;
+#X msg 350 240 env \$1;
+#X obj 350 220 hradio 15 1 0 6 empty empty empty 0 -6 0 8 #fcfcfc #000000
+#000000 0;
+#X obj 280 380 translateXYZ -2 1 0;
+#X msg 350 200 2;
+#X msg 310 170 open Art/Enemy1.png;
+#X obj 280 410 square 0.25;
+#X msg 490 240 env \$1;
+#X obj 490 220 hradio 15 1 0 6 empty empty empty 0 -6 0 8 #fcfcfc #000000
+#000000 0;
+#X msg 490 200 2;
+#X msg 450 170 open Art/Enemy3.png;
+#X obj 450 140 receive round3;
+#X obj 310 140 receive start;
+#X msg 620 240 env \$1;
+#X obj 620 220 hradio 15 1 0 6 empty empty empty 0 -6 0 8 #fcfcfc #000000
+#000000 0;
+#X msg 620 200 2;
+#X obj 580 140 receive round2;
+#X msg 580 170 open Art/Enemy1.png;
+#X obj 280 350 color 1 0 0;
+#X msg 370 290 1 0 0;
+#X msg 440 290 1 1 0;
+#X msg 500 290 0 0 1;
+#X connect 0 0 5 2;
+#X connect 1 0 2 0;
+#X connect 1 0 5 1;
+#X connect 2 0 18 0;
+#X connect 2 0 25 1;
+#X connect 2 1 25 2;
+#X connect 3 1 19 0;
+#X connect 4 0 18 1;
+#X connect 5 0 6 0;
+#X connect 6 0 16 0;
+#X connect 7 0 17 0;
+#X connect 8 0 9 0;
+#X connect 8 0 11 1;
+#X connect 8 0 16 1;
+#X connect 9 0 10 0;
+#X connect 10 0 12 1;
+#X connect 11 0 8 0;
+#X connect 12 0 8 0;
+#X connect 13 0 11 0;
+#X connect 14 0 10 0;
+#X connect 15 0 12 0;
+#X connect 16 0 3 0;
+#X connect 17 0 6 0;
+#X connect 18 0 5 0;
+#X connect 20 0 21 0;
+#X connect 21 0 22 0;
+#X connect 22 0 40 0;
+#X connect 23 0 22 0;
+#X connect 24 0 23 0;
+#X connect 24 0 22 0;
+#X connect 25 0 28 0;
+#X connect 26 0 24 0;
+#X connect 27 0 21 0;
+#X connect 29 0 22 0;
+#X connect 30 0 29 0;
+#X connect 30 0 22 0;
+#X connect 31 0 30 0;
+#X connect 32 0 21 0;
+#X connect 33 0 32 0;
+#X connect 33 0 31 0;
+#X connect 33 0 42 0;
+#X connect 34 0 27 0;
+#X connect 34 0 26 0;
+#X connect 34 0 41 0;
+#X connect 35 0 22 0;
+#X connect 36 0 35 0;
+#X connect 36 0 22 0;
+#X connect 37 0 36 0;
+#X connect 38 0 39 0;
+#X connect 38 0 37 0;
+#X connect 38 0 43 0;
+#X connect 39 0 21 0;
+#X connect 40 0 25 0;
+#X connect 41 0 40 1;
+#X connect 42 0 40 1;
+#X connect 43 0 40 1;
+#X restore 20 440 pd attack_collision;
+#X floatatom 110 520 5 0 0 1 - - -, f 5;
+#X obj 110 480 loadbang;
+#N canvas 688 84 598 670 Enemy7 0;
+#X obj 10 540 receive reset;
+#X obj 200 600 outlet;
+#X obj 200 580 pack 0 0;
+#X obj 220 550 t b f;
+#X msg 360 400 -10;
+#X msg 390 400 -10;
+#X obj 160 210 metro;
+#X obj 160 235 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 230 190 int 1;
+#X floatatom 230 222 5 0 0 0 - - -, f 5;
+#X obj 300 232 + 1;
+#X obj 100 200 sel 0;
+#X obj 100 225 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X msg 100 248 -1;
+#X obj 40 200 loadbang;
+#X obj 190 110 loadbang;
+#X obj 230 271 + 1;
+#X floatatom 230 300 5 0 0 0 - - -, f 5;
+#X floatatom 190 160 5 0 0 0 - - -, f 5;
+#X obj 40 570 receive start;
+#X obj 40 600 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 60 150 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 90 150 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 120 150 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 10 120 spigot;
+#X obj 110 120 spigot;
+#X obj 10 90 receive reset;
+#X obj 130 90 receive start;
+#X obj 250 350 sel 4 8;
+#X obj 230 242 % 8;
+#X msg 250 450 \$1;
+#X floatatom 220 500 5 0 0 0 - - -, f 5;
+#X obj 250 390 f 4;
+#X obj 150 350 sel 5 6 7;
+#X obj 70 350 sel 1 2 3;
+#X obj 250 425 - 0.5;
+#X msg 80 380 1;
+#X msg 150 380 2;
+#X obj 100 439 pack f f;
+#X obj 100 468 route 1 2;
+#X obj 90 410 t f b;
+#X obj 100 500 + 0.5;
+#X obj 140 500 - 0.5;
+#X floatatom 120 540 5 0 0 0 - - -, f 5;
+#X obj 170 430 f -3;
+#X msg 190 135 750;
+#X obj 30 510 loadbang;
+#X msg 40 623 -2.5;
+#X obj 20 60 receive hit7;
+#X obj 360 350 receive hit7;
+#X msg 100 620 3.5;
+#X connect 0 0 20 0;
+#X connect 2 0 1 0;
+#X connect 3 0 2 0;
+#X connect 3 1 2 1;
+#X connect 4 0 2 0;
+#X connect 5 0 3 0;
+#X connect 6 0 7 0;
+#X connect 7 0 8 0;
+#X connect 8 0 9 0;
+#X connect 8 0 10 0;
+#X connect 9 0 29 0;
+#X connect 10 0 8 1;
+#X connect 11 0 12 0;
+#X connect 12 0 13 0;
+#X connect 13 0 8 0;
+#X connect 14 0 12 0;
+#X connect 15 0 45 0;
+#X connect 15 0 23 0;
+#X connect 16 0 17 0;
+#X connect 17 0 28 0;
+#X connect 17 0 33 0;
+#X connect 17 0 34 0;
+#X connect 18 0 6 1;
+#X connect 19 0 20 0;
+#X connect 20 0 47 0;
+#X connect 20 0 50 0;
+#X connect 21 0 22 0;
+#X connect 21 0 24 1;
+#X connect 21 0 11 0;
+#X connect 21 0 6 0;
+#X connect 22 0 23 0;
+#X connect 23 0 25 1;
+#X connect 24 0 21 0;
+#X connect 25 0 21 0;
+#X connect 26 0 24 0;
+#X connect 27 0 25 0;
+#X connect 28 0 32 0;
+#X connect 28 1 32 0;
+#X connect 29 0 16 0;
+#X connect 30 0 31 0;
+#X connect 31 0 3 0;
+#X connect 31 0 32 1;
+#X connect 32 0 35 0;
+#X connect 33 0 37 0;
+#X connect 33 1 37 0;
+#X connect 33 2 37 0;
+#X connect 34 0 36 0;
+#X connect 34 1 36 0;
+#X connect 34 2 36 0;
+#X connect 35 0 30 0;
+#X connect 36 0 40 0;
+#X connect 37 0 40 0;
+#X connect 38 0 39 0;
+#X connect 39 0 41 0;
+#X connect 39 1 42 0;
+#X connect 40 0 38 0;
+#X connect 40 1 44 0;
+#X connect 41 0 43 0;
+#X connect 42 0 43 0;
+#X connect 43 0 44 1;
+#X connect 43 0 2 0;
+#X connect 44 0 38 1;
+#X connect 45 0 18 0;
+#X connect 46 0 20 0;
+#X connect 47 0 2 0;
+#X connect 47 0 43 0;
+#X connect 48 0 24 0;
+#X connect 49 0 4 0;
+#X connect 49 0 5 0;
+#X connect 50 0 3 0;
+#X connect 50 0 31 0;
+#X restore 40 520 pd Enemy7;
+#N canvas 868 136 502 414 hit 0;
+#X obj 180 240 outlet;
+#X obj 210 130 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 240 130 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 270 130 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 160 100 spigot;
+#X obj 260 100 spigot;
+#X obj 160 70 receive reset;
+#X obj 330 120 loadbang;
+#X obj 280 70 receive start;
+#X obj 180 210 spigot;
+#X msg 150 160 -3;
+#X obj 80 130 delay 1000;
+#X obj 30 160 receive round3;
+#X msg 30 185 -2.5;
+#X connect 1 0 2 0;
+#X connect 1 0 4 1;
+#X connect 1 0 9 1;
+#X connect 2 0 3 0;
+#X connect 3 0 5 1;
+#X connect 4 0 1 0;
+#X connect 5 0 1 0;
+#X connect 6 0 4 0;
+#X connect 7 0 3 0;
+#X connect 8 0 5 0;
+#X connect 8 0 11 0;
+#X connect 9 0 0 0;
+#X connect 10 0 9 0;
+#X connect 11 0 10 0;
+#X connect 12 0 13 0;
+#X connect 13 0 9 0;
+#X restore 20 340 pd hit;
+#N canvas 868 136 502 414 hit 0;
+#X obj 180 240 outlet;
+#X obj 210 130 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 240 130 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 270 130 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 160 100 spigot;
+#X obj 260 100 spigot;
+#X obj 160 70 receive reset;
+#X obj 330 120 loadbang;
+#X obj 280 70 receive start;
+#X obj 180 210 spigot;
+#X msg 150 160 -3;
+#X obj 80 130 delay 1000;
+#X obj 20 185 receive round3;
+#X msg 20 210 -2.5;
+#X connect 1 0 2 0;
+#X connect 1 0 4 1;
+#X connect 1 0 9 1;
+#X connect 2 0 3 0;
+#X connect 3 0 5 1;
+#X connect 4 0 1 0;
+#X connect 5 0 1 0;
+#X connect 6 0 4 0;
+#X connect 7 0 3 0;
+#X connect 8 0 5 0;
+#X connect 8 0 11 0;
+#X connect 9 0 0 0;
+#X connect 10 0 9 0;
+#X connect 11 0 10 0;
+#X connect 12 0 13 0;
+#X connect 13 0 9 0;
+#X restore 20 470 pd hit;
+#X floatatom 270 390 5 0 0 1 - - -, f 5;
+#X obj 270 350 loadbang;
+#X floatatom 420 390 5 0 0 1 - - -, f 5;
+#X obj 420 350 loadbang;
+#X floatatom 570 390 5 0 0 1 - - -, f 5;
+#X obj 570 350 loadbang;
+#N canvas 860 72 602 674 Enemy2 0;
+#X obj 10 540 receive reset;
+#X obj 200 600 outlet;
+#X obj 200 580 pack 0 0;
+#X obj 220 550 t b f;
+#X msg 360 400 -10;
+#X msg 390 400 -10;
+#X obj 160 210 metro;
+#X obj 160 235 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 230 190 int 1;
+#X floatatom 230 222 5 0 0 0 - - -, f 5;
+#X obj 300 232 + 1;
+#X obj 100 200 sel 0;
+#X obj 100 225 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X msg 100 248 -1;
+#X obj 40 200 loadbang;
+#X obj 190 110 loadbang;
+#X obj 230 271 + 1;
+#X floatatom 230 300 5 0 0 0 - - -, f 5;
+#X floatatom 190 160 5 0 0 0 - - -, f 5;
+#X obj 40 570 receive start;
+#X obj 40 600 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 60 150 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 90 150 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 120 150 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 10 120 spigot;
+#X obj 110 120 spigot;
+#X obj 10 90 receive reset;
+#X obj 130 90 receive start;
+#X obj 250 350 sel 4 8;
+#X obj 230 242 % 8;
+#X msg 250 450 \$1;
+#X floatatom 220 500 5 0 0 0 - - -, f 5;
+#X obj 250 390 f 4;
+#X obj 150 350 sel 5 6 7;
+#X obj 70 350 sel 1 2 3;
+#X obj 250 425 - 0.5;
+#X msg 80 380 1;
+#X msg 150 380 2;
+#X obj 100 439 pack f f;
+#X obj 100 468 route 1 2;
+#X obj 90 410 t f b;
+#X obj 100 500 + 0.5;
+#X obj 140 500 - 0.5;
+#X floatatom 120 540 5 0 0 0 - - -, f 5;
+#X obj 170 430 f -3;
+#X msg 190 135 750;
+#X obj 30 510 loadbang;
+#X obj 20 60 receive hit2;
+#X obj 360 350 receive hit2;
+#X msg 40 623 -2;
+#X msg 100 620 3;
+#X connect 0 0 20 0;
+#X connect 2 0 1 0;
+#X connect 3 0 2 0;
+#X connect 3 1 2 1;
+#X connect 4 0 2 0;
+#X connect 5 0 3 0;
+#X connect 6 0 7 0;
+#X connect 7 0 8 0;
+#X connect 8 0 9 0;
+#X connect 8 0 10 0;
+#X connect 9 0 29 0;
+#X connect 10 0 8 1;
+#X connect 11 0 12 0;
+#X connect 12 0 13 0;
+#X connect 13 0 8 0;
+#X connect 14 0 12 0;
+#X connect 15 0 45 0;
+#X connect 15 0 23 0;
+#X connect 16 0 17 0;
+#X connect 17 0 28 0;
+#X connect 17 0 33 0;
+#X connect 17 0 34 0;
+#X connect 18 0 6 1;
+#X connect 19 0 20 0;
+#X connect 20 0 49 0;
+#X connect 20 0 50 0;
+#X connect 21 0 22 0;
+#X connect 21 0 24 1;
+#X connect 21 0 11 0;
+#X connect 21 0 6 0;
+#X connect 22 0 23 0;
+#X connect 23 0 25 1;
+#X connect 24 0 21 0;
+#X connect 25 0 21 0;
+#X connect 26 0 24 0;
+#X connect 27 0 25 0;
+#X connect 28 0 32 0;
+#X connect 28 1 32 0;
+#X connect 29 0 16 0;
+#X connect 30 0 31 0;
+#X connect 31 0 3 0;
+#X connect 31 0 32 1;
+#X connect 32 0 35 0;
+#X connect 33 0 37 0;
+#X connect 33 1 37 0;
+#X connect 33 2 37 0;
+#X connect 34 0 36 0;
+#X connect 34 1 36 0;
+#X connect 34 2 36 0;
+#X connect 35 0 30 0;
+#X connect 36 0 40 0;
+#X connect 37 0 40 0;
+#X connect 38 0 39 0;
+#X connect 39 0 41 0;
+#X connect 39 1 42 0;
+#X connect 40 0 38 0;
+#X connect 40 1 44 0;
+#X connect 41 0 43 0;
+#X connect 42 0 43 0;
+#X connect 43 0 44 1;
+#X connect 43 0 2 0;
+#X connect 44 0 38 1;
+#X connect 45 0 18 0;
+#X connect 46 0 20 0;
+#X connect 47 0 24 0;
+#X connect 48 0 4 0;
+#X connect 48 0 5 0;
+#X connect 49 0 2 0;
+#X connect 49 0 43 0;
+#X connect 50 0 3 0;
+#X connect 50 0 31 0;
+#X restore 200 390 pd Enemy2;
+#X floatatom 720 390 5 0 0 1 - - -, f 5;
+#X obj 720 350 loadbang;
+#X floatatom 870 390 5 0 0 1 - - -, f 5;
+#X obj 870 350 loadbang;
+#N canvas 688 84 598 670 Enemy3 0;
+#X obj 10 540 receive reset;
+#X obj 200 600 outlet;
+#X obj 200 580 pack 0 0;
+#X obj 220 550 t b f;
+#X msg 360 400 -10;
+#X msg 390 400 -10;
+#X obj 160 210 metro;
+#X obj 160 235 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 230 190 int 1;
+#X floatatom 230 222 5 0 0 0 - - -, f 5;
+#X obj 300 232 + 1;
+#X obj 100 200 sel 0;
+#X obj 100 225 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X msg 100 248 -1;
+#X obj 40 200 loadbang;
+#X obj 190 110 loadbang;
+#X obj 230 271 + 1;
+#X floatatom 230 300 5 0 0 0 - - -, f 5;
+#X floatatom 190 160 5 0 0 0 - - -, f 5;
+#X obj 40 570 receive start;
+#X obj 40 600 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 60 150 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 90 150 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 120 150 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 10 120 spigot;
+#X obj 110 120 spigot;
+#X obj 10 90 receive reset;
+#X obj 130 90 receive start;
+#X obj 250 350 sel 4 8;
+#X obj 230 242 % 8;
+#X msg 250 450 \$1;
+#X floatatom 220 500 5 0 0 0 - - -, f 5;
+#X obj 250 390 f 4;
+#X obj 150 350 sel 5 6 7;
+#X obj 70 350 sel 1 2 3;
+#X obj 250 425 - 0.5;
+#X msg 80 380 1;
+#X msg 150 380 2;
+#X obj 100 439 pack f f;
+#X obj 100 468 route 1 2;
+#X obj 90 410 t f b;
+#X obj 100 500 + 0.5;
+#X obj 140 500 - 0.5;
+#X floatatom 120 540 5 0 0 0 - - -, f 5;
+#X obj 170 430 f -3;
+#X msg 190 135 750;
+#X obj 30 510 loadbang;
+#X msg 40 623 -1;
+#X obj 360 350 receive hit3;
+#X obj 20 60 receive hit3;
+#X msg 100 620 3;
+#X connect 0 0 20 0;
+#X connect 2 0 1 0;
+#X connect 3 0 2 0;
+#X connect 3 1 2 1;
+#X connect 4 0 2 0;
+#X connect 5 0 3 0;
+#X connect 6 0 7 0;
+#X connect 7 0 8 0;
+#X connect 8 0 9 0;
+#X connect 8 0 10 0;
+#X connect 9 0 29 0;
+#X connect 10 0 8 1;
+#X connect 11 0 12 0;
+#X connect 12 0 13 0;
+#X connect 13 0 8 0;
+#X connect 14 0 12 0;
+#X connect 15 0 45 0;
+#X connect 15 0 23 0;
+#X connect 16 0 17 0;
+#X connect 17 0 28 0;
+#X connect 17 0 33 0;
+#X connect 17 0 34 0;
+#X connect 18 0 6 1;
+#X connect 19 0 20 0;
+#X connect 20 0 47 0;
+#X connect 20 0 50 0;
+#X connect 21 0 22 0;
+#X connect 21 0 24 1;
+#X connect 21 0 11 0;
+#X connect 21 0 6 0;
+#X connect 22 0 23 0;
+#X connect 23 0 25 1;
+#X connect 24 0 21 0;
+#X connect 25 0 21 0;
+#X connect 26 0 24 0;
+#X connect 27 0 25 0;
+#X connect 28 0 32 0;
+#X connect 28 1 32 0;
+#X connect 29 0 16 0;
+#X connect 30 0 31 0;
+#X connect 31 0 3 0;
+#X connect 31 0 32 1;
+#X connect 32 0 35 0;
+#X connect 33 0 37 0;
+#X connect 33 1 37 0;
+#X connect 33 2 37 0;
+#X connect 34 0 36 0;
+#X connect 34 1 36 0;
+#X connect 34 2 36 0;
+#X connect 35 0 30 0;
+#X connect 36 0 40 0;
+#X connect 37 0 40 0;
+#X connect 38 0 39 0;
+#X connect 39 0 41 0;
+#X connect 39 1 42 0;
+#X connect 40 0 38 0;
+#X connect 40 1 44 0;
+#X connect 41 0 43 0;
+#X connect 42 0 43 0;
+#X connect 43 0 44 1;
+#X connect 43 0 2 0;
+#X connect 44 0 38 1;
+#X connect 45 0 18 0;
+#X connect 46 0 20 0;
+#X connect 47 0 2 0;
+#X connect 47 0 43 0;
+#X connect 48 0 4 0;
+#X connect 48 0 5 0;
+#X connect 49 0 24 0;
+#X connect 50 0 3 0;
+#X connect 50 0 31 0;
+#X restore 350 390 pd Enemy3;
+#N canvas 688 84 598 670 Enemy4 0;
+#X obj 10 540 receive reset;
+#X obj 200 600 outlet;
+#X obj 200 580 pack 0 0;
+#X obj 220 550 t b f;
+#X msg 360 400 -10;
+#X msg 390 400 -10;
+#X obj 160 210 metro;
+#X obj 160 235 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 230 190 int 1;
+#X floatatom 230 222 5 0 0 0 - - -, f 5;
+#X obj 300 232 + 1;
+#X obj 100 200 sel 0;
+#X obj 100 225 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X msg 100 248 -1;
+#X obj 40 200 loadbang;
+#X obj 190 110 loadbang;
+#X obj 230 271 + 1;
+#X floatatom 230 300 5 0 0 0 - - -, f 5;
+#X floatatom 190 160 5 0 0 0 - - -, f 5;
+#X obj 40 570 receive start;
+#X obj 40 600 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 60 150 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 90 150 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 120 150 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 10 120 spigot;
+#X obj 110 120 spigot;
+#X obj 10 90 receive reset;
+#X obj 130 90 receive start;
+#X obj 250 350 sel 4 8;
+#X obj 230 242 % 8;
+#X msg 250 450 \$1;
+#X floatatom 220 500 5 0 0 0 - - -, f 5;
+#X obj 250 390 f 4;
+#X obj 150 350 sel 5 6 7;
+#X obj 70 350 sel 1 2 3;
+#X obj 250 425 - 0.5;
+#X msg 80 380 1;
+#X msg 150 380 2;
+#X obj 100 439 pack f f;
+#X obj 100 468 route 1 2;
+#X obj 90 410 t f b;
+#X obj 100 500 + 0.5;
+#X obj 140 500 - 0.5;
+#X floatatom 120 540 5 0 0 0 - - -, f 5;
+#X obj 170 430 f -3;
+#X msg 190 135 750;
+#X obj 40 510 loadbang;
+#X obj 360 350 receive hit4;
+#X obj 20 60 receive hit4;
+#X msg 40 623 0;
+#X msg 100 620 3;
+#X connect 0 0 20 0;
+#X connect 2 0 1 0;
+#X connect 3 0 2 0;
+#X connect 3 1 2 1;
+#X connect 4 0 2 0;
+#X connect 5 0 3 0;
+#X connect 6 0 7 0;
+#X connect 7 0 8 0;
+#X connect 8 0 9 0;
+#X connect 8 0 10 0;
+#X connect 9 0 29 0;
+#X connect 10 0 8 1;
+#X connect 11 0 12 0;
+#X connect 12 0 13 0;
+#X connect 13 0 8 0;
+#X connect 14 0 12 0;
+#X connect 15 0 45 0;
+#X connect 15 0 23 0;
+#X connect 16 0 17 0;
+#X connect 17 0 28 0;
+#X connect 17 0 33 0;
+#X connect 17 0 34 0;
+#X connect 18 0 6 1;
+#X connect 19 0 20 0;
+#X connect 20 0 49 0;
+#X connect 20 0 50 0;
+#X connect 21 0 22 0;
+#X connect 21 0 24 1;
+#X connect 21 0 11 0;
+#X connect 21 0 6 0;
+#X connect 22 0 23 0;
+#X connect 23 0 25 1;
+#X connect 24 0 21 0;
+#X connect 25 0 21 0;
+#X connect 26 0 24 0;
+#X connect 27 0 25 0;
+#X connect 28 0 32 0;
+#X connect 28 1 32 0;
+#X connect 29 0 16 0;
+#X connect 30 0 31 0;
+#X connect 31 0 3 0;
+#X connect 31 0 32 1;
+#X connect 32 0 35 0;
+#X connect 33 0 37 0;
+#X connect 33 1 37 0;
+#X connect 33 2 37 0;
+#X connect 34 0 36 0;
+#X connect 34 1 36 0;
+#X connect 34 2 36 0;
+#X connect 35 0 30 0;
+#X connect 36 0 40 0;
+#X connect 37 0 40 0;
+#X connect 38 0 39 0;
+#X connect 39 0 41 0;
+#X connect 39 1 42 0;
+#X connect 40 0 38 0;
+#X connect 40 1 44 0;
+#X connect 41 0 43 0;
+#X connect 42 0 43 0;
+#X connect 43 0 44 1;
+#X connect 43 0 2 0;
+#X connect 44 0 38 1;
+#X connect 45 0 18 0;
+#X connect 46 0 20 0;
+#X connect 47 0 4 0;
+#X connect 47 0 5 0;
+#X connect 48 0 24 0;
+#X connect 49 0 2 0;
+#X connect 49 0 43 0;
+#X connect 50 0 3 0;
+#X connect 50 0 31 0;
+#X restore 500 390 pd Enemy4;
+#N canvas 688 84 598 670 Enemy5 0;
+#X obj 10 540 receive reset;
+#X obj 200 600 outlet;
+#X obj 200 580 pack 0 0;
+#X obj 220 550 t b f;
+#X msg 360 400 -10;
+#X msg 390 400 -10;
+#X obj 160 210 metro;
+#X obj 160 235 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 230 190 int 1;
+#X floatatom 230 222 5 0 0 0 - - -, f 5;
+#X obj 300 232 + 1;
+#X obj 100 200 sel 0;
+#X obj 100 225 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X msg 100 248 -1;
+#X obj 40 200 loadbang;
+#X obj 190 110 loadbang;
+#X obj 230 271 + 1;
+#X floatatom 230 300 5 0 0 0 - - -, f 5;
+#X floatatom 190 160 5 0 0 0 - - -, f 5;
+#X obj 40 570 receive start;
+#X obj 40 600 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 60 150 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 90 150 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 120 150 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 10 120 spigot;
+#X obj 110 120 spigot;
+#X obj 10 90 receive reset;
+#X obj 130 90 receive start;
+#X obj 250 350 sel 4 8;
+#X obj 230 242 % 8;
+#X msg 250 450 \$1;
+#X floatatom 220 500 5 0 0 0 - - -, f 5;
+#X obj 250 390 f 4;
+#X obj 150 350 sel 5 6 7;
+#X obj 70 350 sel 1 2 3;
+#X obj 250 425 - 0.5;
+#X msg 80 380 1;
+#X msg 150 380 2;
+#X obj 100 439 pack f f;
+#X obj 100 468 route 1 2;
+#X obj 90 410 t f b;
+#X obj 100 500 + 0.5;
+#X obj 140 500 - 0.5;
+#X floatatom 120 540 5 0 0 0 - - -, f 5;
+#X obj 170 430 f -3;
+#X msg 190 135 750;
+#X obj 40 510 loadbang;
+#X obj 360 350 receive hit5;
+#X obj 20 60 receive hit5;
+#X msg 40 623 1;
+#X msg 100 620 3;
+#X connect 0 0 20 0;
+#X connect 2 0 1 0;
+#X connect 3 0 2 0;
+#X connect 3 1 2 1;
+#X connect 4 0 2 0;
+#X connect 5 0 3 0;
+#X connect 6 0 7 0;
+#X connect 7 0 8 0;
+#X connect 8 0 9 0;
+#X connect 8 0 10 0;
+#X connect 9 0 29 0;
+#X connect 10 0 8 1;
+#X connect 11 0 12 0;
+#X connect 12 0 13 0;
+#X connect 13 0 8 0;
+#X connect 14 0 12 0;
+#X connect 15 0 45 0;
+#X connect 15 0 23 0;
+#X connect 16 0 17 0;
+#X connect 17 0 28 0;
+#X connect 17 0 33 0;
+#X connect 17 0 34 0;
+#X connect 18 0 6 1;
+#X connect 19 0 20 0;
+#X connect 20 0 49 0;
+#X connect 20 0 50 0;
+#X connect 21 0 22 0;
+#X connect 21 0 24 1;
+#X connect 21 0 11 0;
+#X connect 21 0 6 0;
+#X connect 22 0 23 0;
+#X connect 23 0 25 1;
+#X connect 24 0 21 0;
+#X connect 25 0 21 0;
+#X connect 26 0 24 0;
+#X connect 27 0 25 0;
+#X connect 28 0 32 0;
+#X connect 28 1 32 0;
+#X connect 29 0 16 0;
+#X connect 30 0 31 0;
+#X connect 31 0 3 0;
+#X connect 31 0 32 1;
+#X connect 32 0 35 0;
+#X connect 33 0 37 0;
+#X connect 33 1 37 0;
+#X connect 33 2 37 0;
+#X connect 34 0 36 0;
+#X connect 34 1 36 0;
+#X connect 34 2 36 0;
+#X connect 35 0 30 0;
+#X connect 36 0 40 0;
+#X connect 37 0 40 0;
+#X connect 38 0 39 0;
+#X connect 39 0 41 0;
+#X connect 39 1 42 0;
+#X connect 40 0 38 0;
+#X connect 40 1 44 0;
+#X connect 41 0 43 0;
+#X connect 42 0 43 0;
+#X connect 43 0 44 1;
+#X connect 43 0 2 0;
+#X connect 44 0 38 1;
+#X connect 45 0 18 0;
+#X connect 46 0 20 0;
+#X connect 47 0 4 0;
+#X connect 47 0 5 0;
+#X connect 48 0 24 0;
+#X connect 49 0 2 0;
+#X connect 49 0 43 0;
+#X connect 50 0 3 0;
+#X connect 50 0 31 0;
+#X restore 650 390 pd Enemy5;
+#N canvas 688 84 598 670 Enemy6 0;
+#X obj 10 540 receive reset;
+#X obj 200 600 outlet;
+#X obj 200 580 pack 0 0;
+#X obj 220 550 t b f;
+#X msg 360 400 -10;
+#X msg 390 400 -10;
+#X obj 160 210 metro;
+#X obj 160 235 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 230 190 int 1;
+#X floatatom 230 222 5 0 0 0 - - -, f 5;
+#X obj 300 232 + 1;
+#X obj 100 200 sel 0;
+#X obj 100 225 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X msg 100 248 -1;
+#X obj 40 200 loadbang;
+#X obj 190 110 loadbang;
+#X obj 230 271 + 1;
+#X floatatom 230 300 5 0 0 0 - - -, f 5;
+#X floatatom 190 160 5 0 0 0 - - -, f 5;
+#X obj 40 570 receive start;
+#X obj 40 600 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 60 150 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 90 150 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 120 150 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 10 120 spigot;
+#X obj 110 120 spigot;
+#X obj 10 90 receive reset;
+#X obj 130 90 receive start;
+#X obj 250 350 sel 4 8;
+#X obj 230 242 % 8;
+#X msg 250 450 \$1;
+#X floatatom 220 500 5 0 0 0 - - -, f 5;
+#X obj 250 390 f 4;
+#X obj 150 350 sel 5 6 7;
+#X obj 70 350 sel 1 2 3;
+#X obj 250 425 - 0.5;
+#X msg 80 380 1;
+#X msg 150 380 2;
+#X obj 100 439 pack f f;
+#X obj 100 468 route 1 2;
+#X obj 90 410 t f b;
+#X obj 100 500 + 0.5;
+#X obj 140 500 - 0.5;
+#X floatatom 120 540 5 0 0 0 - - -, f 5;
+#X obj 170 430 f -3;
+#X msg 190 135 750;
+#X obj 40 510 loadbang;
+#X obj 360 350 receive hit6;
+#X obj 20 60 receive hit6;
+#X msg 40 623 2;
+#X msg 100 620 3;
+#X connect 0 0 20 0;
+#X connect 2 0 1 0;
+#X connect 3 0 2 0;
+#X connect 3 1 2 1;
+#X connect 4 0 2 0;
+#X connect 5 0 3 0;
+#X connect 6 0 7 0;
+#X connect 7 0 8 0;
+#X connect 8 0 9 0;
+#X connect 8 0 10 0;
+#X connect 9 0 29 0;
+#X connect 10 0 8 1;
+#X connect 11 0 12 0;
+#X connect 12 0 13 0;
+#X connect 13 0 8 0;
+#X connect 14 0 12 0;
+#X connect 15 0 45 0;
+#X connect 15 0 23 0;
+#X connect 16 0 17 0;
+#X connect 17 0 28 0;
+#X connect 17 0 33 0;
+#X connect 17 0 34 0;
+#X connect 18 0 6 1;
+#X connect 19 0 20 0;
+#X connect 20 0 49 0;
+#X connect 20 0 50 0;
+#X connect 21 0 22 0;
+#X connect 21 0 24 1;
+#X connect 21 0 11 0;
+#X connect 21 0 6 0;
+#X connect 22 0 23 0;
+#X connect 23 0 25 1;
+#X connect 24 0 21 0;
+#X connect 25 0 21 0;
+#X connect 26 0 24 0;
+#X connect 27 0 25 0;
+#X connect 28 0 32 0;
+#X connect 28 1 32 0;
+#X connect 29 0 16 0;
+#X connect 30 0 31 0;
+#X connect 31 0 3 0;
+#X connect 31 0 32 1;
+#X connect 32 0 35 0;
+#X connect 33 0 37 0;
+#X connect 33 1 37 0;
+#X connect 33 2 37 0;
+#X connect 34 0 36 0;
+#X connect 34 1 36 0;
+#X connect 34 2 36 0;
+#X connect 35 0 30 0;
+#X connect 36 0 40 0;
+#X connect 37 0 40 0;
+#X connect 38 0 39 0;
+#X connect 39 0 41 0;
+#X connect 39 1 42 0;
+#X connect 40 0 38 0;
+#X connect 40 1 44 0;
+#X connect 41 0 43 0;
+#X connect 42 0 43 0;
+#X connect 43 0 44 1;
+#X connect 43 0 2 0;
+#X connect 44 0 38 1;
+#X connect 45 0 18 0;
+#X connect 46 0 20 0;
+#X connect 47 0 4 0;
+#X connect 47 0 5 0;
+#X connect 48 0 24 0;
+#X connect 49 0 2 0;
+#X connect 49 0 43 0;
+#X connect 50 0 3 0;
+#X connect 50 0 31 0;
+#X restore 800 390 pd Enemy6;
+#X floatatom 270 520 5 0 0 1 - - -, f 5;
+#X obj 270 480 loadbang;
+#X floatatom 420 520 5 0 0 1 - - -, f 5;
+#X obj 420 480 loadbang;
+#X floatatom 570 520 5 0 0 1 - - -, f 5;
+#X obj 570 480 loadbang;
+#X floatatom 720 520 5 0 0 1 - - -, f 5;
+#X obj 720 480 loadbang;
+#X floatatom 870 520 5 0 0 1 - - -, f 5;
+#X obj 870 480 loadbang;
+#N canvas 688 84 598 670 Enemy12 0;
+#X obj 10 540 receive reset;
+#X obj 200 600 outlet;
+#X obj 200 580 pack 0 0;
+#X obj 220 550 t b f;
+#X msg 360 400 -10;
+#X msg 390 400 -10;
+#X obj 160 210 metro;
+#X obj 160 235 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 230 190 int 1;
+#X floatatom 230 222 5 0 0 0 - - -, f 5;
+#X obj 300 232 + 1;
+#X obj 100 200 sel 0;
+#X obj 100 225 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X msg 100 248 -1;
+#X obj 40 200 loadbang;
+#X obj 190 110 loadbang;
+#X obj 230 271 + 1;
+#X floatatom 230 300 5 0 0 0 - - -, f 5;
+#X floatatom 190 160 5 0 0 0 - - -, f 5;
+#X obj 40 570 receive start;
+#X obj 40 600 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 60 150 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 90 150 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 120 150 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 10 120 spigot;
+#X obj 110 120 spigot;
+#X obj 10 90 receive reset;
+#X obj 130 90 receive start;
+#X obj 250 350 sel 4 8;
+#X obj 230 242 % 8;
+#X msg 250 450 \$1;
+#X floatatom 220 500 5 0 0 0 - - -, f 5;
+#X obj 250 390 f 4;
+#X obj 150 350 sel 5 6 7;
+#X obj 70 350 sel 1 2 3;
+#X obj 250 425 - 0.5;
+#X msg 80 380 1;
+#X msg 150 380 2;
+#X obj 100 439 pack f f;
+#X obj 100 468 route 1 2;
+#X obj 90 410 t f b;
+#X obj 100 500 + 0.5;
+#X obj 140 500 - 0.5;
+#X floatatom 120 540 5 0 0 0 - - -, f 5;
+#X obj 170 430 f -3;
+#X msg 190 135 750;
+#X obj 40 510 loadbang;
+#X obj 360 350 receive hit12;
+#X obj 20 60 receive hit12;
+#X msg 40 623 2.5;
+#X msg 100 620 3.5;
+#X connect 0 0 20 0;
+#X connect 2 0 1 0;
+#X connect 3 0 2 0;
+#X connect 3 1 2 1;
+#X connect 4 0 2 0;
+#X connect 5 0 3 0;
+#X connect 6 0 7 0;
+#X connect 7 0 8 0;
+#X connect 8 0 9 0;
+#X connect 8 0 10 0;
+#X connect 9 0 29 0;
+#X connect 10 0 8 1;
+#X connect 11 0 12 0;
+#X connect 12 0 13 0;
+#X connect 13 0 8 0;
+#X connect 14 0 12 0;
+#X connect 15 0 45 0;
+#X connect 15 0 23 0;
+#X connect 16 0 17 0;
+#X connect 17 0 28 0;
+#X connect 17 0 33 0;
+#X connect 17 0 34 0;
+#X connect 18 0 6 1;
+#X connect 19 0 20 0;
+#X connect 20 0 49 0;
+#X connect 20 0 50 0;
+#X connect 21 0 22 0;
+#X connect 21 0 24 1;
+#X connect 21 0 11 0;
+#X connect 21 0 6 0;
+#X connect 22 0 23 0;
+#X connect 23 0 25 1;
+#X connect 24 0 21 0;
+#X connect 25 0 21 0;
+#X connect 26 0 24 0;
+#X connect 27 0 25 0;
+#X connect 28 0 32 0;
+#X connect 28 1 32 0;
+#X connect 29 0 16 0;
+#X connect 30 0 31 0;
+#X connect 31 0 3 0;
+#X connect 31 0 32 1;
+#X connect 32 0 35 0;
+#X connect 33 0 37 0;
+#X connect 33 1 37 0;
+#X connect 33 2 37 0;
+#X connect 34 0 36 0;
+#X connect 34 1 36 0;
+#X connect 34 2 36 0;
+#X connect 35 0 30 0;
+#X connect 36 0 40 0;
+#X connect 37 0 40 0;
+#X connect 38 0 39 0;
+#X connect 39 0 41 0;
+#X connect 39 1 42 0;
+#X connect 40 0 38 0;
+#X connect 40 1 44 0;
+#X connect 41 0 43 0;
+#X connect 42 0 43 0;
+#X connect 43 0 44 1;
+#X connect 43 0 2 0;
+#X connect 44 0 38 1;
+#X connect 45 0 18 0;
+#X connect 46 0 20 0;
+#X connect 47 0 4 0;
+#X connect 47 0 5 0;
+#X connect 48 0 24 0;
+#X connect 49 0 2 0;
+#X connect 49 0 43 0;
+#X connect 50 0 3 0;
+#X connect 50 0 31 0;
+#X restore 800 520 pd Enemy12;
+#N canvas 688 84 598 670 Enemy11 0;
+#X obj 10 540 receive reset;
+#X obj 200 600 outlet;
+#X obj 200 580 pack 0 0;
+#X obj 220 550 t b f;
+#X msg 360 400 -10;
+#X msg 390 400 -10;
+#X obj 160 210 metro;
+#X obj 160 235 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 230 190 int 1;
+#X floatatom 230 222 5 0 0 0 - - -, f 5;
+#X obj 300 232 + 1;
+#X obj 100 200 sel 0;
+#X obj 100 225 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X msg 100 248 -1;
+#X obj 40 200 loadbang;
+#X obj 190 110 loadbang;
+#X obj 230 271 + 1;
+#X floatatom 230 300 5 0 0 0 - - -, f 5;
+#X floatatom 190 160 5 0 0 0 - - -, f 5;
+#X obj 40 570 receive start;
+#X obj 40 600 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 60 150 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 90 150 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 120 150 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 10 120 spigot;
+#X obj 110 120 spigot;
+#X obj 10 90 receive reset;
+#X obj 130 90 receive start;
+#X obj 250 350 sel 4 8;
+#X obj 230 242 % 8;
+#X msg 250 450 \$1;
+#X floatatom 220 500 5 0 0 0 - - -, f 5;
+#X obj 250 390 f 4;
+#X obj 150 350 sel 5 6 7;
+#X obj 70 350 sel 1 2 3;
+#X obj 250 425 - 0.5;
+#X msg 80 380 1;
+#X msg 150 380 2;
+#X obj 100 439 pack f f;
+#X obj 100 468 route 1 2;
+#X obj 90 410 t f b;
+#X obj 100 500 + 0.5;
+#X obj 140 500 - 0.5;
+#X floatatom 120 540 5 0 0 0 - - -, f 5;
+#X obj 170 430 f -3;
+#X msg 190 135 750;
+#X obj 40 510 loadbang;
+#X obj 360 350 receive hit11;
+#X obj 20 60 receive hit11;
+#X msg 40 623 1.5;
+#X msg 100 620 3.5;
+#X connect 0 0 20 0;
+#X connect 2 0 1 0;
+#X connect 3 0 2 0;
+#X connect 3 1 2 1;
+#X connect 4 0 2 0;
+#X connect 5 0 3 0;
+#X connect 6 0 7 0;
+#X connect 7 0 8 0;
+#X connect 8 0 9 0;
+#X connect 8 0 10 0;
+#X connect 9 0 29 0;
+#X connect 10 0 8 1;
+#X connect 11 0 12 0;
+#X connect 12 0 13 0;
+#X connect 13 0 8 0;
+#X connect 14 0 12 0;
+#X connect 15 0 45 0;
+#X connect 15 0 23 0;
+#X connect 16 0 17 0;
+#X connect 17 0 28 0;
+#X connect 17 0 33 0;
+#X connect 17 0 34 0;
+#X connect 18 0 6 1;
+#X connect 19 0 20 0;
+#X connect 20 0 49 0;
+#X connect 20 0 50 0;
+#X connect 21 0 22 0;
+#X connect 21 0 24 1;
+#X connect 21 0 11 0;
+#X connect 21 0 6 0;
+#X connect 22 0 23 0;
+#X connect 23 0 25 1;
+#X connect 24 0 21 0;
+#X connect 25 0 21 0;
+#X connect 26 0 24 0;
+#X connect 27 0 25 0;
+#X connect 28 0 32 0;
+#X connect 28 1 32 0;
+#X connect 29 0 16 0;
+#X connect 30 0 31 0;
+#X connect 31 0 3 0;
+#X connect 31 0 32 1;
+#X connect 32 0 35 0;
+#X connect 33 0 37 0;
+#X connect 33 1 37 0;
+#X connect 33 2 37 0;
+#X connect 34 0 36 0;
+#X connect 34 1 36 0;
+#X connect 34 2 36 0;
+#X connect 35 0 30 0;
+#X connect 36 0 40 0;
+#X connect 37 0 40 0;
+#X connect 38 0 39 0;
+#X connect 39 0 41 0;
+#X connect 39 1 42 0;
+#X connect 40 0 38 0;
+#X connect 40 1 44 0;
+#X connect 41 0 43 0;
+#X connect 42 0 43 0;
+#X connect 43 0 44 1;
+#X connect 43 0 2 0;
+#X connect 44 0 38 1;
+#X connect 45 0 18 0;
+#X connect 46 0 20 0;
+#X connect 47 0 4 0;
+#X connect 47 0 5 0;
+#X connect 48 0 24 0;
+#X connect 49 0 2 0;
+#X connect 49 0 43 0;
+#X connect 50 0 3 0;
+#X connect 50 0 31 0;
+#X restore 650 520 pd Enemy11;
+#N canvas 688 84 598 670 Enemy10 0;
+#X obj 10 540 receive reset;
+#X obj 200 600 outlet;
+#X obj 200 580 pack 0 0;
+#X obj 220 550 t b f;
+#X msg 360 400 -10;
+#X msg 390 400 -10;
+#X obj 160 210 metro;
+#X obj 160 235 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 230 190 int 1;
+#X floatatom 230 222 5 0 0 0 - - -, f 5;
+#X obj 300 232 + 1;
+#X obj 100 200 sel 0;
+#X obj 100 225 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X msg 100 248 -1;
+#X obj 40 200 loadbang;
+#X obj 190 110 loadbang;
+#X obj 230 271 + 1;
+#X floatatom 230 300 5 0 0 0 - - -, f 5;
+#X floatatom 190 160 5 0 0 0 - - -, f 5;
+#X obj 40 570 receive start;
+#X obj 40 600 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 60 150 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 90 150 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 120 150 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 10 120 spigot;
+#X obj 110 120 spigot;
+#X obj 10 90 receive reset;
+#X obj 130 90 receive start;
+#X obj 250 350 sel 4 8;
+#X obj 230 242 % 8;
+#X msg 250 450 \$1;
+#X floatatom 220 500 5 0 0 0 - - -, f 5;
+#X obj 250 390 f 4;
+#X obj 150 350 sel 5 6 7;
+#X obj 70 350 sel 1 2 3;
+#X obj 250 425 - 0.5;
+#X msg 80 380 1;
+#X msg 150 380 2;
+#X obj 100 439 pack f f;
+#X obj 100 468 route 1 2;
+#X obj 90 410 t f b;
+#X obj 100 500 + 0.5;
+#X obj 140 500 - 0.5;
+#X floatatom 120 540 5 0 0 0 - - -, f 5;
+#X obj 170 430 f -3;
+#X msg 190 135 750;
+#X obj 40 510 loadbang;
+#X obj 20 60 receive hit10;
+#X obj 360 350 receive hit10;
+#X msg 40 623 0.5;
+#X msg 100 620 3.5;
+#X connect 0 0 20 0;
+#X connect 2 0 1 0;
+#X connect 3 0 2 0;
+#X connect 3 1 2 1;
+#X connect 4 0 2 0;
+#X connect 5 0 3 0;
+#X connect 6 0 7 0;
+#X connect 7 0 8 0;
+#X connect 8 0 9 0;
+#X connect 8 0 10 0;
+#X connect 9 0 29 0;
+#X connect 10 0 8 1;
+#X connect 11 0 12 0;
+#X connect 12 0 13 0;
+#X connect 13 0 8 0;
+#X connect 14 0 12 0;
+#X connect 15 0 45 0;
+#X connect 15 0 23 0;
+#X connect 16 0 17 0;
+#X connect 17 0 28 0;
+#X connect 17 0 33 0;
+#X connect 17 0 34 0;
+#X connect 18 0 6 1;
+#X connect 19 0 20 0;
+#X connect 20 0 49 0;
+#X connect 20 0 50 0;
+#X connect 21 0 22 0;
+#X connect 21 0 24 1;
+#X connect 21 0 11 0;
+#X connect 21 0 6 0;
+#X connect 22 0 23 0;
+#X connect 23 0 25 1;
+#X connect 24 0 21 0;
+#X connect 25 0 21 0;
+#X connect 26 0 24 0;
+#X connect 27 0 25 0;
+#X connect 28 0 32 0;
+#X connect 28 1 32 0;
+#X connect 29 0 16 0;
+#X connect 30 0 31 0;
+#X connect 31 0 3 0;
+#X connect 31 0 32 1;
+#X connect 32 0 35 0;
+#X connect 33 0 37 0;
+#X connect 33 1 37 0;
+#X connect 33 2 37 0;
+#X connect 34 0 36 0;
+#X connect 34 1 36 0;
+#X connect 34 2 36 0;
+#X connect 35 0 30 0;
+#X connect 36 0 40 0;
+#X connect 37 0 40 0;
+#X connect 38 0 39 0;
+#X connect 39 0 41 0;
+#X connect 39 1 42 0;
+#X connect 40 0 38 0;
+#X connect 40 1 44 0;
+#X connect 41 0 43 0;
+#X connect 42 0 43 0;
+#X connect 43 0 44 1;
+#X connect 43 0 2 0;
+#X connect 44 0 38 1;
+#X connect 45 0 18 0;
+#X connect 46 0 20 0;
+#X connect 47 0 24 0;
+#X connect 48 0 4 0;
+#X connect 48 0 5 0;
+#X connect 49 0 2 0;
+#X connect 49 0 43 0;
+#X connect 50 0 3 0;
+#X connect 50 0 31 0;
+#X restore 500 520 pd Enemy10;
+#N canvas 688 84 598 670 Enemy9 0;
+#X obj 10 540 receive reset;
+#X obj 200 600 outlet;
+#X obj 200 580 pack 0 0;
+#X obj 220 550 t b f;
+#X msg 360 400 -10;
+#X msg 390 400 -10;
+#X obj 160 210 metro;
+#X obj 160 235 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 230 190 int 1;
+#X floatatom 230 222 5 0 0 0 - - -, f 5;
+#X obj 300 232 + 1;
+#X obj 100 200 sel 0;
+#X obj 100 225 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X msg 100 248 -1;
+#X obj 40 200 loadbang;
+#X obj 190 110 loadbang;
+#X obj 230 271 + 1;
+#X floatatom 230 300 5 0 0 0 - - -, f 5;
+#X floatatom 190 160 5 0 0 0 - - -, f 5;
+#X obj 40 570 receive start;
+#X obj 40 600 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 60 150 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 90 150 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 120 150 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 10 120 spigot;
+#X obj 110 120 spigot;
+#X obj 10 90 receive reset;
+#X obj 130 90 receive start;
+#X obj 250 350 sel 4 8;
+#X obj 230 242 % 8;
+#X msg 250 450 \$1;
+#X floatatom 220 500 5 0 0 0 - - -, f 5;
+#X obj 250 390 f 4;
+#X obj 150 350 sel 5 6 7;
+#X obj 70 350 sel 1 2 3;
+#X obj 250 425 - 0.5;
+#X msg 80 380 1;
+#X msg 150 380 2;
+#X obj 100 439 pack f f;
+#X obj 100 468 route 1 2;
+#X obj 90 410 t f b;
+#X obj 100 500 + 0.5;
+#X obj 140 500 - 0.5;
+#X floatatom 120 540 5 0 0 0 - - -, f 5;
+#X obj 170 430 f -3;
+#X msg 190 135 750;
+#X obj 30 510 loadbang;
+#X obj 20 60 receive hit9;
+#X obj 360 350 receive hit9;
+#X msg 40 623 -0.5;
+#X msg 100 620 3.5;
+#X connect 0 0 20 0;
+#X connect 2 0 1 0;
+#X connect 3 0 2 0;
+#X connect 3 1 2 1;
+#X connect 4 0 2 0;
+#X connect 5 0 3 0;
+#X connect 6 0 7 0;
+#X connect 7 0 8 0;
+#X connect 8 0 9 0;
+#X connect 8 0 10 0;
+#X connect 9 0 29 0;
+#X connect 10 0 8 1;
+#X connect 11 0 12 0;
+#X connect 12 0 13 0;
+#X connect 13 0 8 0;
+#X connect 14 0 12 0;
+#X connect 15 0 45 0;
+#X connect 15 0 23 0;
+#X connect 16 0 17 0;
+#X connect 17 0 28 0;
+#X connect 17 0 33 0;
+#X connect 17 0 34 0;
+#X connect 18 0 6 1;
+#X connect 19 0 20 0;
+#X connect 20 0 49 0;
+#X connect 20 0 50 0;
+#X connect 21 0 22 0;
+#X connect 21 0 24 1;
+#X connect 21 0 11 0;
+#X connect 21 0 6 0;
+#X connect 22 0 23 0;
+#X connect 23 0 25 1;
+#X connect 24 0 21 0;
+#X connect 25 0 21 0;
+#X connect 26 0 24 0;
+#X connect 27 0 25 0;
+#X connect 28 0 32 0;
+#X connect 28 1 32 0;
+#X connect 29 0 16 0;
+#X connect 30 0 31 0;
+#X connect 31 0 3 0;
+#X connect 31 0 32 1;
+#X connect 32 0 35 0;
+#X connect 33 0 37 0;
+#X connect 33 1 37 0;
+#X connect 33 2 37 0;
+#X connect 34 0 36 0;
+#X connect 34 1 36 0;
+#X connect 34 2 36 0;
+#X connect 35 0 30 0;
+#X connect 36 0 40 0;
+#X connect 37 0 40 0;
+#X connect 38 0 39 0;
+#X connect 39 0 41 0;
+#X connect 39 1 42 0;
+#X connect 40 0 38 0;
+#X connect 40 1 44 0;
+#X connect 41 0 43 0;
+#X connect 42 0 43 0;
+#X connect 43 0 44 1;
+#X connect 43 0 2 0;
+#X connect 44 0 38 1;
+#X connect 45 0 18 0;
+#X connect 46 0 20 0;
+#X connect 47 0 24 0;
+#X connect 48 0 4 0;
+#X connect 48 0 5 0;
+#X connect 49 0 2 0;
+#X connect 49 0 43 0;
+#X connect 50 0 3 0;
+#X connect 50 0 31 0;
+#X restore 350 520 pd Enemy9;
+#N canvas 860 72 602 674 Enemy8 0;
+#X obj 10 540 receive reset;
+#X obj 200 600 outlet;
+#X obj 200 580 pack 0 0;
+#X obj 220 550 t b f;
+#X msg 360 400 -10;
+#X msg 390 400 -10;
+#X obj 160 210 metro;
+#X obj 160 235 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 230 190 int 1;
+#X floatatom 230 222 5 0 0 0 - - -, f 5;
+#X obj 300 232 + 1;
+#X obj 100 200 sel 0;
+#X obj 100 225 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X msg 100 248 -1;
+#X obj 40 200 loadbang;
+#X obj 190 110 loadbang;
+#X obj 230 271 + 1;
+#X floatatom 230 300 5 0 0 0 - - -, f 5;
+#X floatatom 190 160 5 0 0 0 - - -, f 5;
+#X obj 40 570 receive start;
+#X obj 40 600 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 60 150 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 90 150 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 120 150 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 10 120 spigot;
+#X obj 110 120 spigot;
+#X obj 10 90 receive reset;
+#X obj 130 90 receive start;
+#X obj 250 350 sel 4 8;
+#X obj 230 242 % 8;
+#X msg 250 450 \$1;
+#X floatatom 220 500 5 0 0 0 - - -, f 5;
+#X obj 250 390 f 4;
+#X obj 150 350 sel 5 6 7;
+#X obj 70 350 sel 1 2 3;
+#X obj 250 425 - 0.5;
+#X msg 80 380 1;
+#X msg 150 380 2;
+#X obj 100 439 pack f f;
+#X obj 100 468 route 1 2;
+#X obj 90 410 t f b;
+#X obj 100 500 + 0.5;
+#X obj 140 500 - 0.5;
+#X floatatom 120 540 5 0 0 0 - - -, f 5;
+#X obj 170 430 f -3;
+#X msg 190 135 750;
+#X obj 30 510 loadbang;
+#X msg 40 623 -1.5;
+#X obj 360 350 receive hit8;
+#X obj 20 60 receive hit8;
+#X msg 100 620 3.5;
+#X connect 0 0 20 0;
+#X connect 2 0 1 0;
+#X connect 3 0 2 0;
+#X connect 3 1 2 1;
+#X connect 4 0 2 0;
+#X connect 5 0 3 0;
+#X connect 6 0 7 0;
+#X connect 7 0 8 0;
+#X connect 8 0 9 0;
+#X connect 8 0 10 0;
+#X connect 9 0 29 0;
+#X connect 10 0 8 1;
+#X connect 11 0 12 0;
+#X connect 12 0 13 0;
+#X connect 13 0 8 0;
+#X connect 14 0 12 0;
+#X connect 15 0 45 0;
+#X connect 15 0 23 0;
+#X connect 16 0 17 0;
+#X connect 17 0 28 0;
+#X connect 17 0 33 0;
+#X connect 17 0 34 0;
+#X connect 18 0 6 1;
+#X connect 19 0 20 0;
+#X connect 20 0 47 0;
+#X connect 20 0 50 0;
+#X connect 21 0 22 0;
+#X connect 21 0 24 1;
+#X connect 21 0 11 0;
+#X connect 21 0 6 0;
+#X connect 22 0 23 0;
+#X connect 23 0 25 1;
+#X connect 24 0 21 0;
+#X connect 25 0 21 0;
+#X connect 26 0 24 0;
+#X connect 27 0 25 0;
+#X connect 28 0 32 0;
+#X connect 28 1 32 0;
+#X connect 29 0 16 0;
+#X connect 30 0 31 0;
+#X connect 31 0 3 0;
+#X connect 31 0 32 1;
+#X connect 32 0 35 0;
+#X connect 33 0 37 0;
+#X connect 33 1 37 0;
+#X connect 33 2 37 0;
+#X connect 34 0 36 0;
+#X connect 34 1 36 0;
+#X connect 34 2 36 0;
+#X connect 35 0 30 0;
+#X connect 36 0 40 0;
+#X connect 37 0 40 0;
+#X connect 38 0 39 0;
+#X connect 39 0 41 0;
+#X connect 39 1 42 0;
+#X connect 40 0 38 0;
+#X connect 40 1 44 0;
+#X connect 41 0 43 0;
+#X connect 42 0 43 0;
+#X connect 43 0 44 1;
+#X connect 43 0 2 0;
+#X connect 44 0 38 1;
+#X connect 45 0 18 0;
+#X connect 46 0 20 0;
+#X connect 47 0 2 0;
+#X connect 47 0 43 0;
+#X connect 48 0 4 0;
+#X connect 48 0 5 0;
+#X connect 49 0 24 0;
+#X connect 50 0 3 0;
+#X connect 50 0 31 0;
+#X restore 200 520 pd Enemy8;
+#N canvas 868 136 502 414 hit 0;
+#X obj 180 240 outlet;
+#X obj 210 130 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 240 130 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 270 130 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 160 100 spigot;
+#X obj 260 100 spigot;
+#X obj 160 70 receive reset;
+#X obj 330 120 loadbang;
+#X obj 280 70 receive start;
+#X obj 180 210 spigot;
+#X msg 150 160 -3;
+#X obj 80 130 delay 1000;
+#X obj 43 176 receive round3;
+#X msg 43 201 -2.5;
+#X connect 1 0 2 0;
+#X connect 1 0 4 1;
+#X connect 1 0 9 1;
+#X connect 2 0 3 0;
+#X connect 3 0 5 1;
+#X connect 4 0 1 0;
+#X connect 5 0 1 0;
+#X connect 6 0 4 0;
+#X connect 7 0 3 0;
+#X connect 8 0 5 0;
+#X connect 8 0 11 0;
+#X connect 9 0 0 0;
+#X connect 10 0 9 0;
+#X connect 11 0 10 0;
+#X connect 12 0 13 0;
+#X connect 13 0 9 0;
+#X restore 180 350 pd hit;
+#N canvas 868 136 502 414 hit 0;
+#X obj 180 240 outlet;
+#X obj 210 130 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 240 130 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 270 130 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 160 100 spigot;
+#X obj 260 100 spigot;
+#X obj 160 70 receive reset;
+#X obj 330 120 loadbang;
+#X obj 280 70 receive start;
+#X obj 180 210 spigot;
+#X msg 150 160 -3;
+#X obj 80 130 delay 1000;
+#X obj 30 175 receive round3;
+#X msg 30 200 -2.5;
+#X connect 1 0 2 0;
+#X connect 1 0 4 1;
+#X connect 1 0 9 1;
+#X connect 2 0 3 0;
+#X connect 3 0 5 1;
+#X connect 4 0 1 0;
+#X connect 5 0 1 0;
+#X connect 6 0 4 0;
+#X connect 7 0 3 0;
+#X connect 8 0 5 0;
+#X connect 8 0 11 0;
+#X connect 9 0 0 0;
+#X connect 10 0 9 0;
+#X connect 11 0 10 0;
+#X connect 12 0 13 0;
+#X connect 13 0 9 0;
+#X restore 330 350 pd hit;
+#N canvas 868 136 502 414 hit 0;
+#X obj 180 240 outlet;
+#X obj 210 130 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 240 130 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 270 130 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 160 100 spigot;
+#X obj 260 100 spigot;
+#X obj 160 70 receive reset;
+#X obj 330 120 loadbang;
+#X obj 280 70 receive start;
+#X obj 180 210 spigot;
+#X msg 150 160 -3;
+#X obj 80 130 delay 1000;
+#X obj 30 165 receive round3;
+#X msg 30 190 -2.5;
+#X connect 1 0 2 0;
+#X connect 1 0 4 1;
+#X connect 1 0 9 1;
+#X connect 2 0 3 0;
+#X connect 3 0 5 1;
+#X connect 4 0 1 0;
+#X connect 5 0 1 0;
+#X connect 6 0 4 0;
+#X connect 7 0 3 0;
+#X connect 8 0 5 0;
+#X connect 8 0 11 0;
+#X connect 9 0 0 0;
+#X connect 10 0 9 0;
+#X connect 11 0 10 0;
+#X connect 12 0 13 0;
+#X connect 13 0 9 0;
+#X restore 480 350 pd hit;
+#N canvas 868 136 502 414 hit 0;
+#X obj 180 240 outlet;
+#X obj 210 130 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 240 130 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 270 130 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 160 100 spigot;
+#X obj 260 100 spigot;
+#X obj 160 70 receive reset;
+#X obj 330 120 loadbang;
+#X obj 280 70 receive start;
+#X obj 180 210 spigot;
+#X msg 150 160 -3;
+#X obj 80 130 delay 1000;
+#X obj 40 175 receive round3;
+#X msg 40 200 -2.5;
+#X connect 1 0 2 0;
+#X connect 1 0 4 1;
+#X connect 1 0 9 1;
+#X connect 2 0 3 0;
+#X connect 3 0 5 1;
+#X connect 4 0 1 0;
+#X connect 5 0 1 0;
+#X connect 6 0 4 0;
+#X connect 7 0 3 0;
+#X connect 8 0 5 0;
+#X connect 8 0 11 0;
+#X connect 9 0 0 0;
+#X connect 10 0 9 0;
+#X connect 11 0 10 0;
+#X connect 12 0 13 0;
+#X connect 13 0 9 0;
+#X restore 630 350 pd hit;
+#N canvas 868 136 502 414 hit 0;
+#X obj 180 240 outlet;
+#X obj 210 130 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 240 130 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 270 130 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 160 100 spigot;
+#X obj 260 100 spigot;
+#X obj 160 70 receive reset;
+#X obj 330 120 loadbang;
+#X obj 280 70 receive start;
+#X obj 180 210 spigot;
+#X msg 150 160 -3;
+#X obj 80 130 delay 1000;
+#X obj 30 175 receive round3;
+#X msg 30 200 -2.5;
+#X connect 1 0 2 0;
+#X connect 1 0 4 1;
+#X connect 1 0 9 1;
+#X connect 2 0 3 0;
+#X connect 3 0 5 1;
+#X connect 4 0 1 0;
+#X connect 5 0 1 0;
+#X connect 6 0 4 0;
+#X connect 7 0 3 0;
+#X connect 8 0 5 0;
+#X connect 8 0 11 0;
+#X connect 9 0 0 0;
+#X connect 10 0 9 0;
+#X connect 11 0 10 0;
+#X connect 12 0 13 0;
+#X connect 13 0 9 0;
+#X restore 780 350 pd hit;
+#N canvas 868 136 502 414 hit 0;
+#X obj 180 240 outlet;
+#X obj 210 130 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 240 130 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 270 130 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 160 100 spigot;
+#X obj 260 100 spigot;
+#X obj 160 70 receive reset;
+#X obj 330 120 loadbang;
+#X obj 280 70 receive start;
+#X obj 180 210 spigot;
+#X msg 150 160 -3;
+#X obj 80 130 delay 1000;
+#X obj 20 155 receive round3;
+#X msg 20 180 -2.5;
+#X connect 1 0 2 0;
+#X connect 1 0 4 1;
+#X connect 1 0 9 1;
+#X connect 2 0 3 0;
+#X connect 3 0 5 1;
+#X connect 4 0 1 0;
+#X connect 5 0 1 0;
+#X connect 6 0 4 0;
+#X connect 7 0 3 0;
+#X connect 8 0 5 0;
+#X connect 8 0 11 0;
+#X connect 9 0 0 0;
+#X connect 10 0 9 0;
+#X connect 11 0 10 0;
+#X connect 12 0 13 0;
+#X connect 13 0 9 0;
+#X restore 780 480 pd hit;
+#N canvas 868 136 502 414 hit 0;
+#X obj 180 240 outlet;
+#X obj 210 130 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 240 130 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 270 130 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 160 100 spigot;
+#X obj 260 100 spigot;
+#X obj 160 70 receive reset;
+#X obj 330 120 loadbang;
+#X obj 280 70 receive start;
+#X obj 180 210 spigot;
+#X msg 150 160 -3;
+#X obj 80 130 delay 1000;
+#X obj 20 175 receive round3;
+#X msg 20 200 -2.5;
+#X connect 1 0 2 0;
+#X connect 1 0 4 1;
+#X connect 1 0 9 1;
+#X connect 2 0 3 0;
+#X connect 3 0 5 1;
+#X connect 4 0 1 0;
+#X connect 5 0 1 0;
+#X connect 6 0 4 0;
+#X connect 7 0 3 0;
+#X connect 8 0 5 0;
+#X connect 8 0 11 0;
+#X connect 9 0 0 0;
+#X connect 10 0 9 0;
+#X connect 11 0 10 0;
+#X connect 12 0 13 0;
+#X connect 13 0 9 0;
+#X restore 630 480 pd hit;
+#N canvas 868 136 502 414 hit 0;
+#X obj 180 240 outlet;
+#X obj 210 130 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 240 130 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 270 130 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 160 100 spigot;
+#X obj 260 100 spigot;
+#X obj 160 70 receive reset;
+#X obj 330 120 loadbang;
+#X obj 280 70 receive start;
+#X obj 180 210 spigot;
+#X msg 150 160 -3;
+#X obj 80 130 delay 1000;
+#X obj 50 185 receive round3;
+#X msg 50 210 -2.5;
+#X connect 1 0 2 0;
+#X connect 1 0 4 1;
+#X connect 1 0 9 1;
+#X connect 2 0 3 0;
+#X connect 3 0 5 1;
+#X connect 4 0 1 0;
+#X connect 5 0 1 0;
+#X connect 6 0 4 0;
+#X connect 7 0 3 0;
+#X connect 8 0 5 0;
+#X connect 8 0 11 0;
+#X connect 9 0 0 0;
+#X connect 10 0 9 0;
+#X connect 11 0 10 0;
+#X connect 12 0 13 0;
+#X connect 13 0 9 0;
+#X restore 480 480 pd hit;
+#N canvas 868 136 502 414 hit 0;
+#X obj 180 240 outlet;
+#X obj 210 130 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 240 130 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 270 130 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 160 100 spigot;
+#X obj 260 100 spigot;
+#X obj 160 70 receive reset;
+#X obj 330 120 loadbang;
+#X obj 280 70 receive start;
+#X obj 180 210 spigot;
+#X msg 150 160 -3;
+#X obj 80 130 delay 1000;
+#X obj 30 175 receive round3;
+#X msg 30 200 -2.5;
+#X connect 1 0 2 0;
+#X connect 1 0 4 1;
+#X connect 1 0 9 1;
+#X connect 2 0 3 0;
+#X connect 3 0 5 1;
+#X connect 4 0 1 0;
+#X connect 5 0 1 0;
+#X connect 6 0 4 0;
+#X connect 7 0 3 0;
+#X connect 8 0 5 0;
+#X connect 8 0 11 0;
+#X connect 9 0 0 0;
+#X connect 10 0 9 0;
+#X connect 11 0 10 0;
+#X connect 12 0 13 0;
+#X connect 13 0 9 0;
+#X restore 330 480 pd hit;
+#N canvas 868 136 502 414 hit 0;
+#X obj 180 240 outlet;
+#X obj 210 130 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 240 130 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 270 130 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 160 100 spigot;
+#X obj 260 100 spigot;
+#X obj 160 70 receive reset;
+#X obj 330 120 loadbang;
+#X obj 280 70 receive start;
+#X obj 180 210 spigot;
+#X msg 150 160 -3;
+#X obj 80 130 delay 1000;
+#X obj 40 195 receive round3;
+#X msg 40 220 -2.5;
+#X connect 1 0 2 0;
+#X connect 1 0 4 1;
+#X connect 1 0 9 1;
+#X connect 2 0 3 0;
+#X connect 3 0 5 1;
+#X connect 4 0 1 0;
+#X connect 5 0 1 0;
+#X connect 6 0 4 0;
+#X connect 7 0 3 0;
+#X connect 8 0 5 0;
+#X connect 8 0 11 0;
+#X connect 9 0 0 0;
+#X connect 10 0 9 0;
+#X connect 11 0 10 0;
+#X connect 12 0 13 0;
+#X connect 13 0 9 0;
+#X restore 180 480 pd hit;
+#N canvas 344 132 742 598 attack_collision 0;
+#X obj 340 50 inlet radius;
+#X obj 230 50 inlet reference;
+#X obj 390 80 unpack 0 0;
+#X obj 20 310 select 0 1;
+#X obj 30 30 inlet test;
+#N canvas 876 256 554 530 collide 0;
+#X obj 91 217 list-map2;
+#X obj 171 218 -;
+#X obj 171 265 *;
+#X obj 171 241 t a a;
+#X obj 84 340 sqrt;
+#X obj 84 290 list-reduce;
+#X obj 170 290 +;
+#X obj 124 360 t b a;
+#X obj 150 130 inlet reference;
+#X obj 80 130 inlet test;
+#X obj 294 247 inlet radius;
+#X obj 94 410 outlet;
+#X obj 94 380 <= 1;
+#X floatatom 40 320 5 0 0 0 - - -, f 5;
+#X connect 0 0 5 0;
+#X connect 0 1 1 0;
+#X connect 1 0 3 0;
+#X connect 2 0 0 2;
+#X connect 3 0 2 0;
+#X connect 3 1 2 1;
+#X connect 4 0 12 0;
+#X connect 5 0 4 0;
+#X connect 5 0 13 0;
+#X connect 5 1 6 0;
+#X connect 6 0 5 1;
+#X connect 7 0 12 0;
+#X connect 7 1 12 1;
+#X connect 8 0 0 1;
+#X connect 9 0 0 0;
+#X connect 10 0 7 0;
+#X connect 12 0 11 0;
+#X restore 30 110 pd collide;
+#X obj 50 140 tgl 24 0 empty empty hit? 28 7 1 10 #fcfcfc #000000 #000000
+1 1;
+#X obj 130 110 loadbang;
+#X obj 73 232 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 103 232 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 133 232 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 23 202 spigot;
+#X obj 123 202 spigot;
+#X obj 23 172 receive reset;
+#X obj 193 222 loadbang;
+#X obj 143 172 receive start;
+#X obj 43 272 spigot;
+#X obj 130 140 delay 100;
+#X obj 30 70 pack 0 0;
+#X obj 20 340 send reset;
+#X obj 290 120 gemhead;
+#X obj 290 230 pix_image;
+#X obj 290 300 pix_texture;
+#X msg 360 250 env \$1;
+#X obj 360 230 hradio 15 1 0 6 empty empty empty 0 -6 0 8 #fcfcfc #000000
+#000000 0;
+#X obj 290 390 translateXYZ -2 1 0;
+#X msg 360 210 2;
+#X msg 320 180 open Art/Enemy1.png;
+#X obj 290 420 square 0.25;
+#X msg 500 250 env \$1;
+#X obj 500 230 hradio 15 1 0 6 empty empty empty 0 -6 0 8 #fcfcfc #000000
+#000000 0;
+#X msg 500 210 2;
+#X msg 460 180 open Art/Enemy3.png;
+#X obj 460 150 receive round3;
+#X obj 320 150 receive start;
+#X msg 630 250 env \$1;
+#X obj 630 230 hradio 15 1 0 6 empty empty empty 0 -6 0 8 #fcfcfc #000000
+#000000 0;
+#X msg 630 210 2;
+#X obj 590 150 receive round2;
+#X msg 590 180 open Art/Enemy1.png;
+#X obj 290 360 color 1 0 0;
+#X msg 380 300 1 0 0;
+#X msg 450 300 1 1 0;
+#X msg 510 300 0 0 1;
+#X connect 0 0 5 2;
+#X connect 1 0 2 0;
+#X connect 1 0 5 1;
+#X connect 2 0 18 0;
+#X connect 2 0 25 1;
+#X connect 2 1 25 2;
+#X connect 3 1 19 0;
+#X connect 4 0 18 1;
+#X connect 5 0 6 0;
+#X connect 6 0 16 0;
+#X connect 7 0 17 0;
+#X connect 8 0 9 0;
+#X connect 8 0 11 1;
+#X connect 8 0 16 1;
+#X connect 9 0 10 0;
+#X connect 10 0 12 1;
+#X connect 11 0 8 0;
+#X connect 12 0 8 0;
+#X connect 13 0 11 0;
+#X connect 14 0 10 0;
+#X connect 15 0 12 0;
+#X connect 16 0 3 0;
+#X connect 17 0 6 0;
+#X connect 18 0 5 0;
+#X connect 20 0 21 0;
+#X connect 21 0 22 0;
+#X connect 22 0 40 0;
+#X connect 23 0 22 0;
+#X connect 24 0 23 0;
+#X connect 24 0 22 0;
+#X connect 25 0 28 0;
+#X connect 26 0 24 0;
+#X connect 27 0 21 0;
+#X connect 29 0 22 0;
+#X connect 30 0 29 0;
+#X connect 30 0 22 0;
+#X connect 31 0 30 0;
+#X connect 32 0 21 0;
+#X connect 33 0 32 0;
+#X connect 33 0 31 0;
+#X connect 33 0 42 0;
+#X connect 34 0 27 0;
+#X connect 34 0 26 0;
+#X connect 34 0 41 0;
+#X connect 35 0 22 0;
+#X connect 36 0 35 0;
+#X connect 36 0 22 0;
+#X connect 37 0 36 0;
+#X connect 38 0 39 0;
+#X connect 38 0 37 0;
+#X connect 38 0 43 0;
+#X connect 39 0 21 0;
+#X connect 40 0 25 0;
+#X connect 41 0 40 1;
+#X connect 42 0 40 1;
+#X connect 43 0 40 1;
+#X restore 180 440 pd attack_collision;
+#N canvas 344 132 742 598 attack_collision 0;
+#X obj 340 50 inlet radius;
+#X obj 230 50 inlet reference;
+#X obj 390 80 unpack 0 0;
+#X obj 20 310 select 0 1;
+#X obj 30 30 inlet test;
+#N canvas 876 256 554 530 collide 0;
+#X obj 91 217 list-map2;
+#X obj 171 218 -;
+#X obj 171 265 *;
+#X obj 171 241 t a a;
+#X obj 84 340 sqrt;
+#X obj 84 290 list-reduce;
+#X obj 170 290 +;
+#X obj 124 360 t b a;
+#X obj 150 130 inlet reference;
+#X obj 80 130 inlet test;
+#X obj 294 247 inlet radius;
+#X obj 94 410 outlet;
+#X obj 94 380 <= 1;
+#X floatatom 40 320 5 0 0 0 - - -, f 5;
+#X connect 0 0 5 0;
+#X connect 0 1 1 0;
+#X connect 1 0 3 0;
+#X connect 2 0 0 2;
+#X connect 3 0 2 0;
+#X connect 3 1 2 1;
+#X connect 4 0 12 0;
+#X connect 5 0 4 0;
+#X connect 5 0 13 0;
+#X connect 5 1 6 0;
+#X connect 6 0 5 1;
+#X connect 7 0 12 0;
+#X connect 7 1 12 1;
+#X connect 8 0 0 1;
+#X connect 9 0 0 0;
+#X connect 10 0 7 0;
+#X connect 12 0 11 0;
+#X restore 30 110 pd collide;
+#X obj 50 140 tgl 24 0 empty empty hit? 28 7 1 10 #fcfcfc #000000 #000000
+1 1;
+#X obj 130 110 loadbang;
+#X obj 73 232 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 103 232 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 133 232 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 23 202 spigot;
+#X obj 123 202 spigot;
+#X obj 23 172 receive reset;
+#X obj 193 222 loadbang;
+#X obj 143 172 receive start;
+#X obj 43 272 spigot;
+#X obj 130 140 delay 100;
+#X obj 30 70 pack 0 0;
+#X obj 20 340 send reset;
+#X obj 280 130 gemhead;
+#X obj 280 240 pix_image;
+#X obj 280 310 pix_texture;
+#X msg 350 260 env \$1;
+#X obj 350 240 hradio 15 1 0 6 empty empty empty 0 -6 0 8 #fcfcfc #000000
+#000000 0;
+#X obj 280 400 translateXYZ -2 1 0;
+#X msg 350 220 2;
+#X msg 310 190 open Art/Enemy1.png;
+#X obj 280 430 square 0.25;
+#X msg 490 260 env \$1;
+#X obj 490 240 hradio 15 1 0 6 empty empty empty 0 -6 0 8 #fcfcfc #000000
+#000000 0;
+#X msg 490 220 2;
+#X msg 450 190 open Art/Enemy3.png;
+#X obj 450 160 receive round3;
+#X obj 310 160 receive start;
+#X msg 620 260 env \$1;
+#X obj 620 240 hradio 15 1 0 6 empty empty empty 0 -6 0 8 #fcfcfc #000000
+#000000 0;
+#X msg 620 220 2;
+#X obj 580 160 receive round2;
+#X msg 580 190 open Art/Enemy1.png;
+#X obj 280 370 color 1 0 0;
+#X msg 370 310 1 0 0;
+#X msg 440 310 1 1 0;
+#X msg 500 310 0 0 1;
+#X connect 0 0 5 2;
+#X connect 1 0 2 0;
+#X connect 1 0 5 1;
+#X connect 2 0 18 0;
+#X connect 2 0 25 1;
+#X connect 2 1 25 2;
+#X connect 3 1 19 0;
+#X connect 4 0 18 1;
+#X connect 5 0 6 0;
+#X connect 6 0 16 0;
+#X connect 7 0 17 0;
+#X connect 8 0 9 0;
+#X connect 8 0 11 1;
+#X connect 8 0 16 1;
+#X connect 9 0 10 0;
+#X connect 10 0 12 1;
+#X connect 11 0 8 0;
+#X connect 12 0 8 0;
+#X connect 13 0 11 0;
+#X connect 14 0 10 0;
+#X connect 15 0 12 0;
+#X connect 16 0 3 0;
+#X connect 17 0 6 0;
+#X connect 18 0 5 0;
+#X connect 20 0 21 0;
+#X connect 21 0 22 0;
+#X connect 22 0 40 0;
+#X connect 23 0 22 0;
+#X connect 24 0 23 0;
+#X connect 24 0 22 0;
+#X connect 25 0 28 0;
+#X connect 26 0 24 0;
+#X connect 27 0 21 0;
+#X connect 29 0 22 0;
+#X connect 30 0 29 0;
+#X connect 30 0 22 0;
+#X connect 31 0 30 0;
+#X connect 32 0 21 0;
+#X connect 33 0 32 0;
+#X connect 33 0 31 0;
+#X connect 33 0 42 0;
+#X connect 34 0 27 0;
+#X connect 34 0 26 0;
+#X connect 34 0 41 0;
+#X connect 35 0 22 0;
+#X connect 36 0 35 0;
+#X connect 36 0 22 0;
+#X connect 37 0 36 0;
+#X connect 38 0 39 0;
+#X connect 38 0 37 0;
+#X connect 38 0 43 0;
+#X connect 39 0 21 0;
+#X connect 40 0 25 0;
+#X connect 41 0 40 1;
+#X connect 42 0 40 1;
+#X connect 43 0 40 1;
+#X restore 330 440 pd attack_collision;
+#N canvas 344 132 742 598 attack_collision 0;
+#X obj 340 50 inlet radius;
+#X obj 230 50 inlet reference;
+#X obj 390 80 unpack 0 0;
+#X obj 20 310 select 0 1;
+#X obj 30 30 inlet test;
+#N canvas 876 256 554 530 collide 0;
+#X obj 91 217 list-map2;
+#X obj 171 218 -;
+#X obj 171 265 *;
+#X obj 171 241 t a a;
+#X obj 84 340 sqrt;
+#X obj 84 290 list-reduce;
+#X obj 170 290 +;
+#X obj 124 360 t b a;
+#X obj 150 130 inlet reference;
+#X obj 80 130 inlet test;
+#X obj 294 247 inlet radius;
+#X obj 94 410 outlet;
+#X obj 94 380 <= 1;
+#X floatatom 40 320 5 0 0 0 - - -, f 5;
+#X connect 0 0 5 0;
+#X connect 0 1 1 0;
+#X connect 1 0 3 0;
+#X connect 2 0 0 2;
+#X connect 3 0 2 0;
+#X connect 3 1 2 1;
+#X connect 4 0 12 0;
+#X connect 5 0 4 0;
+#X connect 5 0 13 0;
+#X connect 5 1 6 0;
+#X connect 6 0 5 1;
+#X connect 7 0 12 0;
+#X connect 7 1 12 1;
+#X connect 8 0 0 1;
+#X connect 9 0 0 0;
+#X connect 10 0 7 0;
+#X connect 12 0 11 0;
+#X restore 30 110 pd collide;
+#X obj 50 140 tgl 24 0 empty empty hit? 28 7 1 10 #fcfcfc #000000 #000000
+1 1;
+#X obj 130 110 loadbang;
+#X obj 73 232 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 103 232 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 133 232 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 23 202 spigot;
+#X obj 123 202 spigot;
+#X obj 23 172 receive reset;
+#X obj 193 222 loadbang;
+#X obj 143 172 receive start;
+#X obj 43 272 spigot;
+#X obj 130 140 delay 100;
+#X obj 30 70 pack 0 0;
+#X obj 20 340 send reset;
+#X obj 280 130 gemhead;
+#X obj 280 240 pix_image;
+#X obj 280 310 pix_texture;
+#X msg 350 260 env \$1;
+#X obj 350 240 hradio 15 1 0 6 empty empty empty 0 -6 0 8 #fcfcfc #000000
+#000000 0;
+#X obj 280 400 translateXYZ -2 1 0;
+#X msg 350 220 2;
+#X msg 310 190 open Art/Enemy1.png;
+#X obj 280 430 square 0.25;
+#X msg 490 260 env \$1;
+#X obj 490 240 hradio 15 1 0 6 empty empty empty 0 -6 0 8 #fcfcfc #000000
+#000000 0;
+#X msg 490 220 2;
+#X msg 450 190 open Art/Enemy3.png;
+#X obj 450 160 receive round3;
+#X obj 310 160 receive start;
+#X msg 620 260 env \$1;
+#X obj 620 240 hradio 15 1 0 6 empty empty empty 0 -6 0 8 #fcfcfc #000000
+#000000 0;
+#X msg 620 220 2;
+#X obj 580 160 receive round2;
+#X msg 580 190 open Art/Enemy1.png;
+#X obj 280 370 color 1 0 0;
+#X msg 370 310 1 0 0;
+#X msg 440 310 1 1 0;
+#X msg 500 310 0 0 1;
+#X connect 0 0 5 2;
+#X connect 1 0 2 0;
+#X connect 1 0 5 1;
+#X connect 2 0 18 0;
+#X connect 2 0 25 1;
+#X connect 2 1 25 2;
+#X connect 3 1 19 0;
+#X connect 4 0 18 1;
+#X connect 5 0 6 0;
+#X connect 6 0 16 0;
+#X connect 7 0 17 0;
+#X connect 8 0 9 0;
+#X connect 8 0 11 1;
+#X connect 8 0 16 1;
+#X connect 9 0 10 0;
+#X connect 10 0 12 1;
+#X connect 11 0 8 0;
+#X connect 12 0 8 0;
+#X connect 13 0 11 0;
+#X connect 14 0 10 0;
+#X connect 15 0 12 0;
+#X connect 16 0 3 0;
+#X connect 17 0 6 0;
+#X connect 18 0 5 0;
+#X connect 20 0 21 0;
+#X connect 21 0 22 0;
+#X connect 22 0 40 0;
+#X connect 23 0 22 0;
+#X connect 24 0 23 0;
+#X connect 24 0 22 0;
+#X connect 25 0 28 0;
+#X connect 26 0 24 0;
+#X connect 27 0 21 0;
+#X connect 29 0 22 0;
+#X connect 30 0 29 0;
+#X connect 30 0 22 0;
+#X connect 31 0 30 0;
+#X connect 32 0 21 0;
+#X connect 33 0 32 0;
+#X connect 33 0 31 0;
+#X connect 33 0 42 0;
+#X connect 34 0 27 0;
+#X connect 34 0 26 0;
+#X connect 34 0 41 0;
+#X connect 35 0 22 0;
+#X connect 36 0 35 0;
+#X connect 36 0 22 0;
+#X connect 37 0 36 0;
+#X connect 38 0 39 0;
+#X connect 38 0 37 0;
+#X connect 38 0 43 0;
+#X connect 39 0 21 0;
+#X connect 40 0 25 0;
+#X connect 41 0 40 1;
+#X connect 42 0 40 1;
+#X connect 43 0 40 1;
+#X restore 480 440 pd attack_collision;
+#N canvas 344 132 742 598 attack_collision 0;
+#X obj 340 50 inlet radius;
+#X obj 230 50 inlet reference;
+#X obj 390 80 unpack 0 0;
+#X obj 20 310 select 0 1;
+#X obj 30 30 inlet test;
+#N canvas 876 256 554 530 collide 0;
+#X obj 91 217 list-map2;
+#X obj 171 218 -;
+#X obj 171 265 *;
+#X obj 171 241 t a a;
+#X obj 84 340 sqrt;
+#X obj 84 290 list-reduce;
+#X obj 170 290 +;
+#X obj 124 360 t b a;
+#X obj 150 130 inlet reference;
+#X obj 80 130 inlet test;
+#X obj 294 247 inlet radius;
+#X obj 94 410 outlet;
+#X obj 94 380 <= 1;
+#X floatatom 40 320 5 0 0 0 - - -, f 5;
+#X connect 0 0 5 0;
+#X connect 0 1 1 0;
+#X connect 1 0 3 0;
+#X connect 2 0 0 2;
+#X connect 3 0 2 0;
+#X connect 3 1 2 1;
+#X connect 4 0 12 0;
+#X connect 5 0 4 0;
+#X connect 5 0 13 0;
+#X connect 5 1 6 0;
+#X connect 6 0 5 1;
+#X connect 7 0 12 0;
+#X connect 7 1 12 1;
+#X connect 8 0 0 1;
+#X connect 9 0 0 0;
+#X connect 10 0 7 0;
+#X connect 12 0 11 0;
+#X restore 30 110 pd collide;
+#X obj 50 140 tgl 24 0 empty empty hit? 28 7 1 10 #fcfcfc #000000 #000000
+1 1;
+#X obj 130 110 loadbang;
+#X obj 73 232 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 103 232 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 133 232 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 23 202 spigot;
+#X obj 123 202 spigot;
+#X obj 23 172 receive reset;
+#X obj 193 222 loadbang;
+#X obj 143 172 receive start;
+#X obj 43 272 spigot;
+#X obj 130 140 delay 100;
+#X obj 30 70 pack 0 0;
+#X obj 20 340 send reset;
+#X obj 260 120 gemhead;
+#X obj 260 230 pix_image;
+#X obj 260 300 pix_texture;
+#X msg 330 250 env \$1;
+#X obj 330 230 hradio 15 1 0 6 empty empty empty 0 -6 0 8 #fcfcfc #000000
+#000000 0;
+#X obj 260 390 translateXYZ -2 1 0;
+#X msg 330 210 2;
+#X msg 290 180 open Art/Enemy1.png;
+#X obj 260 420 square 0.25;
+#X msg 470 250 env \$1;
+#X obj 470 230 hradio 15 1 0 6 empty empty empty 0 -6 0 8 #fcfcfc #000000
+#000000 0;
+#X msg 470 210 2;
+#X msg 430 180 open Art/Enemy3.png;
+#X obj 430 150 receive round3;
+#X obj 290 150 receive start;
+#X msg 600 250 env \$1;
+#X obj 600 230 hradio 15 1 0 6 empty empty empty 0 -6 0 8 #fcfcfc #000000
+#000000 0;
+#X msg 600 210 2;
+#X obj 560 150 receive round2;
+#X msg 560 180 open Art/Enemy1.png;
+#X obj 260 360 color 1 0 0;
+#X msg 350 300 1 0 0;
+#X msg 420 300 1 1 0;
+#X msg 480 300 0 0 1;
+#X connect 0 0 5 2;
+#X connect 1 0 2 0;
+#X connect 1 0 5 1;
+#X connect 2 0 18 0;
+#X connect 2 0 25 1;
+#X connect 2 1 25 2;
+#X connect 3 1 19 0;
+#X connect 4 0 18 1;
+#X connect 5 0 6 0;
+#X connect 6 0 16 0;
+#X connect 7 0 17 0;
+#X connect 8 0 9 0;
+#X connect 8 0 11 1;
+#X connect 8 0 16 1;
+#X connect 9 0 10 0;
+#X connect 10 0 12 1;
+#X connect 11 0 8 0;
+#X connect 12 0 8 0;
+#X connect 13 0 11 0;
+#X connect 14 0 10 0;
+#X connect 15 0 12 0;
+#X connect 16 0 3 0;
+#X connect 17 0 6 0;
+#X connect 18 0 5 0;
+#X connect 20 0 21 0;
+#X connect 21 0 22 0;
+#X connect 22 0 40 0;
+#X connect 23 0 22 0;
+#X connect 24 0 23 0;
+#X connect 24 0 22 0;
+#X connect 25 0 28 0;
+#X connect 26 0 24 0;
+#X connect 27 0 21 0;
+#X connect 29 0 22 0;
+#X connect 30 0 29 0;
+#X connect 30 0 22 0;
+#X connect 31 0 30 0;
+#X connect 32 0 21 0;
+#X connect 33 0 32 0;
+#X connect 33 0 31 0;
+#X connect 33 0 42 0;
+#X connect 34 0 27 0;
+#X connect 34 0 26 0;
+#X connect 34 0 41 0;
+#X connect 35 0 22 0;
+#X connect 36 0 35 0;
+#X connect 36 0 22 0;
+#X connect 37 0 36 0;
+#X connect 38 0 39 0;
+#X connect 38 0 37 0;
+#X connect 38 0 43 0;
+#X connect 39 0 21 0;
+#X connect 40 0 25 0;
+#X connect 41 0 40 1;
+#X connect 42 0 40 1;
+#X connect 43 0 40 1;
+#X restore 630 440 pd attack_collision;
+#N canvas 344 132 742 598 attack_collision 0;
+#X obj 340 50 inlet radius;
+#X obj 230 50 inlet reference;
+#X obj 390 80 unpack 0 0;
+#X obj 20 310 select 0 1;
+#X obj 30 30 inlet test;
+#N canvas 876 256 554 530 collide 0;
+#X obj 91 217 list-map2;
+#X obj 171 218 -;
+#X obj 171 265 *;
+#X obj 171 241 t a a;
+#X obj 84 340 sqrt;
+#X obj 84 290 list-reduce;
+#X obj 170 290 +;
+#X obj 124 360 t b a;
+#X obj 150 130 inlet reference;
+#X obj 80 130 inlet test;
+#X obj 294 247 inlet radius;
+#X obj 94 410 outlet;
+#X obj 94 380 <= 1;
+#X floatatom 40 320 5 0 0 0 - - -, f 5;
+#X connect 0 0 5 0;
+#X connect 0 1 1 0;
+#X connect 1 0 3 0;
+#X connect 2 0 0 2;
+#X connect 3 0 2 0;
+#X connect 3 1 2 1;
+#X connect 4 0 12 0;
+#X connect 5 0 4 0;
+#X connect 5 0 13 0;
+#X connect 5 1 6 0;
+#X connect 6 0 5 1;
+#X connect 7 0 12 0;
+#X connect 7 1 12 1;
+#X connect 8 0 0 1;
+#X connect 9 0 0 0;
+#X connect 10 0 7 0;
+#X connect 12 0 11 0;
+#X restore 30 110 pd collide;
+#X obj 50 140 tgl 24 0 empty empty hit? 28 7 1 10 #fcfcfc #000000 #000000
+1 1;
+#X obj 130 110 loadbang;
+#X obj 73 232 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 103 232 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 133 232 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 23 202 spigot;
+#X obj 123 202 spigot;
+#X obj 23 172 receive reset;
+#X obj 193 222 loadbang;
+#X obj 143 172 receive start;
+#X obj 43 272 spigot;
+#X obj 130 140 delay 100;
+#X obj 30 70 pack 0 0;
+#X obj 20 340 send reset;
+#X obj 280 120 gemhead;
+#X obj 280 230 pix_image;
+#X obj 280 300 pix_texture;
+#X msg 350 250 env \$1;
+#X obj 350 230 hradio 15 1 0 6 empty empty empty 0 -6 0 8 #fcfcfc #000000
+#000000 0;
+#X obj 280 390 translateXYZ -2 1 0;
+#X msg 350 210 2;
+#X msg 310 180 open Art/Enemy1.png;
+#X obj 280 420 square 0.25;
+#X msg 490 250 env \$1;
+#X obj 490 230 hradio 15 1 0 6 empty empty empty 0 -6 0 8 #fcfcfc #000000
+#000000 0;
+#X msg 490 210 2;
+#X msg 450 180 open Art/Enemy3.png;
+#X obj 450 150 receive round3;
+#X obj 310 150 receive start;
+#X msg 620 250 env \$1;
+#X obj 620 230 hradio 15 1 0 6 empty empty empty 0 -6 0 8 #fcfcfc #000000
+#000000 0;
+#X msg 620 210 2;
+#X obj 580 150 receive round2;
+#X msg 580 180 open Art/Enemy1.png;
+#X obj 280 360 color 1 0 0;
+#X msg 370 300 1 0 0;
+#X msg 440 300 1 1 0;
+#X msg 500 300 0 0 1;
+#X connect 0 0 5 2;
+#X connect 1 0 2 0;
+#X connect 1 0 5 1;
+#X connect 2 0 18 0;
+#X connect 2 0 25 1;
+#X connect 2 1 25 2;
+#X connect 3 1 19 0;
+#X connect 4 0 18 1;
+#X connect 5 0 6 0;
+#X connect 6 0 16 0;
+#X connect 7 0 17 0;
+#X connect 8 0 9 0;
+#X connect 8 0 11 1;
+#X connect 8 0 16 1;
+#X connect 9 0 10 0;
+#X connect 10 0 12 1;
+#X connect 11 0 8 0;
+#X connect 12 0 8 0;
+#X connect 13 0 11 0;
+#X connect 14 0 10 0;
+#X connect 15 0 12 0;
+#X connect 16 0 3 0;
+#X connect 17 0 6 0;
+#X connect 18 0 5 0;
+#X connect 20 0 21 0;
+#X connect 21 0 22 0;
+#X connect 22 0 40 0;
+#X connect 23 0 22 0;
+#X connect 24 0 23 0;
+#X connect 24 0 22 0;
+#X connect 25 0 28 0;
+#X connect 26 0 24 0;
+#X connect 27 0 21 0;
+#X connect 29 0 22 0;
+#X connect 30 0 29 0;
+#X connect 30 0 22 0;
+#X connect 31 0 30 0;
+#X connect 32 0 21 0;
+#X connect 33 0 32 0;
+#X connect 33 0 31 0;
+#X connect 33 0 42 0;
+#X connect 34 0 27 0;
+#X connect 34 0 26 0;
+#X connect 34 0 41 0;
+#X connect 35 0 22 0;
+#X connect 36 0 35 0;
+#X connect 36 0 22 0;
+#X connect 37 0 36 0;
+#X connect 38 0 39 0;
+#X connect 38 0 37 0;
+#X connect 38 0 43 0;
+#X connect 39 0 21 0;
+#X connect 40 0 25 0;
+#X connect 41 0 40 1;
+#X connect 42 0 40 1;
+#X connect 43 0 40 1;
+#X restore 780 440 pd attack_collision;
+#N canvas 344 132 742 598 attack_collision 0;
+#X obj 340 50 inlet radius;
+#X obj 230 50 inlet reference;
+#X obj 390 80 unpack 0 0;
+#X obj 20 310 select 0 1;
+#X obj 30 30 inlet test;
+#N canvas 876 256 554 530 collide 0;
+#X obj 91 217 list-map2;
+#X obj 171 218 -;
+#X obj 171 265 *;
+#X obj 171 241 t a a;
+#X obj 84 340 sqrt;
+#X obj 84 290 list-reduce;
+#X obj 170 290 +;
+#X obj 124 360 t b a;
+#X obj 150 130 inlet reference;
+#X obj 80 130 inlet test;
+#X obj 294 247 inlet radius;
+#X obj 94 410 outlet;
+#X obj 94 380 <= 1;
+#X floatatom 40 320 5 0 0 0 - - -, f 5;
+#X connect 0 0 5 0;
+#X connect 0 1 1 0;
+#X connect 1 0 3 0;
+#X connect 2 0 0 2;
+#X connect 3 0 2 0;
+#X connect 3 1 2 1;
+#X connect 4 0 12 0;
+#X connect 5 0 4 0;
+#X connect 5 0 13 0;
+#X connect 5 1 6 0;
+#X connect 6 0 5 1;
+#X connect 7 0 12 0;
+#X connect 7 1 12 1;
+#X connect 8 0 0 1;
+#X connect 9 0 0 0;
+#X connect 10 0 7 0;
+#X connect 12 0 11 0;
+#X restore 30 110 pd collide;
+#X obj 50 140 tgl 24 0 empty empty hit? 28 7 1 10 #fcfcfc #000000 #000000
+1 1;
+#X obj 130 110 loadbang;
+#X obj 73 232 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 103 232 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 133 232 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 23 202 spigot;
+#X obj 123 202 spigot;
+#X obj 23 172 receive reset;
+#X obj 193 222 loadbang;
+#X obj 143 172 receive start;
+#X obj 43 272 spigot;
+#X obj 130 140 delay 100;
+#X obj 30 70 pack 0 0;
+#X obj 20 340 send reset;
+#X obj 260 120 gemhead;
+#X obj 260 230 pix_image;
+#X obj 260 300 pix_texture;
+#X msg 330 250 env \$1;
+#X obj 330 230 hradio 15 1 0 6 empty empty empty 0 -6 0 8 #fcfcfc #000000
+#000000 0;
+#X obj 260 390 translateXYZ -2 1 0;
+#X msg 330 210 2;
+#X msg 290 180 open Art/Enemy1.png;
+#X obj 260 420 square 0.25;
+#X msg 470 250 env \$1;
+#X obj 470 230 hradio 15 1 0 6 empty empty empty 0 -6 0 8 #fcfcfc #000000
+#000000 0;
+#X msg 470 210 2;
+#X msg 430 180 open Art/Enemy3.png;
+#X obj 430 150 receive round3;
+#X obj 290 150 receive start;
+#X msg 600 250 env \$1;
+#X obj 600 230 hradio 15 1 0 6 empty empty empty 0 -6 0 8 #fcfcfc #000000
+#000000 0;
+#X msg 600 210 2;
+#X obj 560 150 receive round2;
+#X msg 560 180 open Art/Enemy1.png;
+#X obj 260 360 color 1 0 0;
+#X msg 350 300 1 0 0;
+#X msg 420 300 1 1 0;
+#X msg 480 300 0 0 1;
+#X connect 0 0 5 2;
+#X connect 1 0 2 0;
+#X connect 1 0 5 1;
+#X connect 2 0 18 0;
+#X connect 2 0 25 1;
+#X connect 2 1 25 2;
+#X connect 3 1 19 0;
+#X connect 4 0 18 1;
+#X connect 5 0 6 0;
+#X connect 6 0 16 0;
+#X connect 7 0 17 0;
+#X connect 8 0 9 0;
+#X connect 8 0 11 1;
+#X connect 8 0 16 1;
+#X connect 9 0 10 0;
+#X connect 10 0 12 1;
+#X connect 11 0 8 0;
+#X connect 12 0 8 0;
+#X connect 13 0 11 0;
+#X connect 14 0 10 0;
+#X connect 15 0 12 0;
+#X connect 16 0 3 0;
+#X connect 17 0 6 0;
+#X connect 18 0 5 0;
+#X connect 20 0 21 0;
+#X connect 21 0 22 0;
+#X connect 22 0 40 0;
+#X connect 23 0 22 0;
+#X connect 24 0 23 0;
+#X connect 24 0 22 0;
+#X connect 25 0 28 0;
+#X connect 26 0 24 0;
+#X connect 27 0 21 0;
+#X connect 29 0 22 0;
+#X connect 30 0 29 0;
+#X connect 30 0 22 0;
+#X connect 31 0 30 0;
+#X connect 32 0 21 0;
+#X connect 33 0 32 0;
+#X connect 33 0 31 0;
+#X connect 33 0 42 0;
+#X connect 34 0 27 0;
+#X connect 34 0 26 0;
+#X connect 34 0 41 0;
+#X connect 35 0 22 0;
+#X connect 36 0 35 0;
+#X connect 36 0 22 0;
+#X connect 37 0 36 0;
+#X connect 38 0 39 0;
+#X connect 38 0 37 0;
+#X connect 38 0 43 0;
+#X connect 39 0 21 0;
+#X connect 40 0 25 0;
+#X connect 41 0 40 1;
+#X connect 42 0 40 1;
+#X connect 43 0 40 1;
+#X restore 780 570 pd attack_collision;
+#N canvas 640 188 746 602 attack_collision 0;
+#X obj 340 50 inlet radius;
+#X obj 230 50 inlet reference;
+#X obj 390 80 unpack 0 0;
+#X obj 20 310 select 0 1;
+#X obj 30 30 inlet test;
+#N canvas 876 256 554 530 collide 0;
+#X obj 91 217 list-map2;
+#X obj 171 218 -;
+#X obj 171 265 *;
+#X obj 171 241 t a a;
+#X obj 84 340 sqrt;
+#X obj 84 290 list-reduce;
+#X obj 170 290 +;
+#X obj 124 360 t b a;
+#X obj 150 130 inlet reference;
+#X obj 80 130 inlet test;
+#X obj 294 247 inlet radius;
+#X obj 94 410 outlet;
+#X obj 94 380 <= 1;
+#X floatatom 40 320 5 0 0 0 - - -, f 5;
+#X connect 0 0 5 0;
+#X connect 0 1 1 0;
+#X connect 1 0 3 0;
+#X connect 2 0 0 2;
+#X connect 3 0 2 0;
+#X connect 3 1 2 1;
+#X connect 4 0 12 0;
+#X connect 5 0 4 0;
+#X connect 5 0 13 0;
+#X connect 5 1 6 0;
+#X connect 6 0 5 1;
+#X connect 7 0 12 0;
+#X connect 7 1 12 1;
+#X connect 8 0 0 1;
+#X connect 9 0 0 0;
+#X connect 10 0 7 0;
+#X connect 12 0 11 0;
+#X restore 30 110 pd collide;
+#X obj 50 140 tgl 24 0 empty empty hit? 28 7 1 10 #fcfcfc #000000 #000000
+1 1;
+#X obj 130 110 loadbang;
+#X obj 73 232 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 103 232 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 133 232 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 23 202 spigot;
+#X obj 123 202 spigot;
+#X obj 23 172 receive reset;
+#X obj 193 222 loadbang;
+#X obj 143 172 receive start;
+#X obj 43 272 spigot;
+#X obj 130 140 delay 100;
+#X obj 30 70 pack 0 0;
+#X obj 20 340 send reset;
+#X obj 270 120 gemhead;
+#X obj 270 230 pix_image;
+#X obj 270 300 pix_texture;
+#X msg 340 250 env \$1;
+#X obj 340 230 hradio 15 1 0 6 empty empty empty 0 -6 0 8 #fcfcfc #000000
+#000000 0;
+#X obj 270 390 translateXYZ -2 1 0;
+#X msg 340 210 2;
+#X msg 300 180 open Art/Enemy1.png;
+#X obj 270 420 square 0.25;
+#X msg 480 250 env \$1;
+#X obj 480 230 hradio 15 1 0 6 empty empty empty 0 -6 0 8 #fcfcfc #000000
+#000000 0;
+#X msg 480 210 2;
+#X msg 440 180 open Art/Enemy3.png;
+#X obj 440 150 receive round3;
+#X obj 300 150 receive start;
+#X msg 610 250 env \$1;
+#X obj 610 230 hradio 15 1 0 6 empty empty empty 0 -6 0 8 #fcfcfc #000000
+#000000 0;
+#X msg 610 210 2;
+#X obj 570 150 receive round2;
+#X msg 570 180 open Art/Enemy1.png;
+#X obj 270 360 color 1 0 0;
+#X msg 360 300 1 0 0;
+#X msg 430 300 1 1 0;
+#X msg 490 300 0 0 1;
+#X connect 0 0 5 2;
+#X connect 1 0 2 0;
+#X connect 1 0 5 1;
+#X connect 2 0 18 0;
+#X connect 2 0 25 1;
+#X connect 2 1 25 2;
+#X connect 3 1 19 0;
+#X connect 4 0 18 1;
+#X connect 5 0 6 0;
+#X connect 6 0 16 0;
+#X connect 7 0 17 0;
+#X connect 8 0 9 0;
+#X connect 8 0 11 1;
+#X connect 8 0 16 1;
+#X connect 9 0 10 0;
+#X connect 10 0 12 1;
+#X connect 11 0 8 0;
+#X connect 12 0 8 0;
+#X connect 13 0 11 0;
+#X connect 14 0 10 0;
+#X connect 15 0 12 0;
+#X connect 16 0 3 0;
+#X connect 17 0 6 0;
+#X connect 18 0 5 0;
+#X connect 20 0 21 0;
+#X connect 21 0 22 0;
+#X connect 22 0 40 0;
+#X connect 23 0 22 0;
+#X connect 24 0 23 0;
+#X connect 24 0 22 0;
+#X connect 25 0 28 0;
+#X connect 26 0 24 0;
+#X connect 27 0 21 0;
+#X connect 29 0 22 0;
+#X connect 30 0 29 0;
+#X connect 30 0 22 0;
+#X connect 31 0 30 0;
+#X connect 32 0 21 0;
+#X connect 33 0 32 0;
+#X connect 33 0 31 0;
+#X connect 33 0 42 0;
+#X connect 34 0 27 0;
+#X connect 34 0 26 0;
+#X connect 34 0 41 0;
+#X connect 35 0 22 0;
+#X connect 36 0 35 0;
+#X connect 36 0 22 0;
+#X connect 37 0 36 0;
+#X connect 38 0 39 0;
+#X connect 38 0 37 0;
+#X connect 38 0 43 0;
+#X connect 39 0 21 0;
+#X connect 40 0 25 0;
+#X connect 41 0 40 1;
+#X connect 42 0 40 1;
+#X connect 43 0 40 1;
+#X restore 630 570 pd attack_collision;
+#N canvas 344 132 742 598 attack_collision 0;
+#X obj 340 50 inlet radius;
+#X obj 230 50 inlet reference;
+#X obj 390 80 unpack 0 0;
+#X obj 20 310 select 0 1;
+#X obj 30 30 inlet test;
+#N canvas 876 256 554 530 collide 0;
+#X obj 91 217 list-map2;
+#X obj 171 218 -;
+#X obj 171 265 *;
+#X obj 171 241 t a a;
+#X obj 84 340 sqrt;
+#X obj 84 290 list-reduce;
+#X obj 170 290 +;
+#X obj 124 360 t b a;
+#X obj 150 130 inlet reference;
+#X obj 80 130 inlet test;
+#X obj 294 247 inlet radius;
+#X obj 94 410 outlet;
+#X obj 94 380 <= 1;
+#X floatatom 40 320 5 0 0 0 - - -, f 5;
+#X connect 0 0 5 0;
+#X connect 0 1 1 0;
+#X connect 1 0 3 0;
+#X connect 2 0 0 2;
+#X connect 3 0 2 0;
+#X connect 3 1 2 1;
+#X connect 4 0 12 0;
+#X connect 5 0 4 0;
+#X connect 5 0 13 0;
+#X connect 5 1 6 0;
+#X connect 6 0 5 1;
+#X connect 7 0 12 0;
+#X connect 7 1 12 1;
+#X connect 8 0 0 1;
+#X connect 9 0 0 0;
+#X connect 10 0 7 0;
+#X connect 12 0 11 0;
+#X restore 30 110 pd collide;
+#X obj 50 140 tgl 24 0 empty empty hit? 28 7 1 10 #fcfcfc #000000 #000000
+1 1;
+#X obj 130 110 loadbang;
+#X obj 73 232 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 103 232 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 133 232 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 23 202 spigot;
+#X obj 123 202 spigot;
+#X obj 23 172 receive reset;
+#X obj 193 222 loadbang;
+#X obj 143 172 receive start;
+#X obj 43 272 spigot;
+#X obj 130 140 delay 100;
+#X obj 30 70 pack 0 0;
+#X obj 20 340 send reset;
+#X obj 260 140 gemhead;
+#X obj 260 250 pix_image;
+#X obj 260 320 pix_texture;
+#X msg 330 270 env \$1;
+#X obj 330 250 hradio 15 1 0 6 empty empty empty 0 -6 0 8 #fcfcfc #000000
+#000000 0;
+#X obj 260 410 translateXYZ -2 1 0;
+#X msg 330 230 2;
+#X msg 290 200 open Art/Enemy1.png;
+#X obj 260 440 square 0.25;
+#X msg 470 270 env \$1;
+#X obj 470 250 hradio 15 1 0 6 empty empty empty 0 -6 0 8 #fcfcfc #000000
+#000000 0;
+#X msg 470 230 2;
+#X msg 430 200 open Art/Enemy3.png;
+#X obj 430 170 receive round3;
+#X obj 290 170 receive start;
+#X msg 600 270 env \$1;
+#X obj 600 250 hradio 15 1 0 6 empty empty empty 0 -6 0 8 #fcfcfc #000000
+#000000 0;
+#X msg 600 230 2;
+#X obj 560 170 receive round2;
+#X msg 560 200 open Art/Enemy1.png;
+#X obj 260 380 color 1 0 0;
+#X msg 350 320 1 0 0;
+#X msg 420 320 1 1 0;
+#X msg 480 320 0 0 1;
+#X connect 0 0 5 2;
+#X connect 1 0 2 0;
+#X connect 1 0 5 1;
+#X connect 2 0 18 0;
+#X connect 2 0 25 1;
+#X connect 2 1 25 2;
+#X connect 3 1 19 0;
+#X connect 4 0 18 1;
+#X connect 5 0 6 0;
+#X connect 6 0 16 0;
+#X connect 7 0 17 0;
+#X connect 8 0 9 0;
+#X connect 8 0 11 1;
+#X connect 8 0 16 1;
+#X connect 9 0 10 0;
+#X connect 10 0 12 1;
+#X connect 11 0 8 0;
+#X connect 12 0 8 0;
+#X connect 13 0 11 0;
+#X connect 14 0 10 0;
+#X connect 15 0 12 0;
+#X connect 16 0 3 0;
+#X connect 17 0 6 0;
+#X connect 18 0 5 0;
+#X connect 20 0 21 0;
+#X connect 21 0 22 0;
+#X connect 22 0 40 0;
+#X connect 23 0 22 0;
+#X connect 24 0 23 0;
+#X connect 24 0 22 0;
+#X connect 25 0 28 0;
+#X connect 26 0 24 0;
+#X connect 27 0 21 0;
+#X connect 29 0 22 0;
+#X connect 30 0 29 0;
+#X connect 30 0 22 0;
+#X connect 31 0 30 0;
+#X connect 32 0 21 0;
+#X connect 33 0 32 0;
+#X connect 33 0 31 0;
+#X connect 33 0 42 0;
+#X connect 34 0 27 0;
+#X connect 34 0 26 0;
+#X connect 34 0 41 0;
+#X connect 35 0 22 0;
+#X connect 36 0 35 0;
+#X connect 36 0 22 0;
+#X connect 37 0 36 0;
+#X connect 38 0 39 0;
+#X connect 38 0 37 0;
+#X connect 38 0 43 0;
+#X connect 39 0 21 0;
+#X connect 40 0 25 0;
+#X connect 41 0 40 1;
+#X connect 42 0 40 1;
+#X connect 43 0 40 1;
+#X restore 480 570 pd attack_collision;
+#N canvas 344 132 742 598 attack_collision 0;
+#X obj 340 50 inlet radius;
+#X obj 230 50 inlet reference;
+#X obj 390 80 unpack 0 0;
+#X obj 20 310 select 0 1;
+#X obj 30 30 inlet test;
+#N canvas 876 256 554 530 collide 0;
+#X obj 91 217 list-map2;
+#X obj 171 218 -;
+#X obj 171 265 *;
+#X obj 171 241 t a a;
+#X obj 84 340 sqrt;
+#X obj 84 290 list-reduce;
+#X obj 170 290 +;
+#X obj 124 360 t b a;
+#X obj 150 130 inlet reference;
+#X obj 80 130 inlet test;
+#X obj 294 247 inlet radius;
+#X obj 94 410 outlet;
+#X obj 94 380 <= 1;
+#X floatatom 40 320 5 0 0 0 - - -, f 5;
+#X connect 0 0 5 0;
+#X connect 0 1 1 0;
+#X connect 1 0 3 0;
+#X connect 2 0 0 2;
+#X connect 3 0 2 0;
+#X connect 3 1 2 1;
+#X connect 4 0 12 0;
+#X connect 5 0 4 0;
+#X connect 5 0 13 0;
+#X connect 5 1 6 0;
+#X connect 6 0 5 1;
+#X connect 7 0 12 0;
+#X connect 7 1 12 1;
+#X connect 8 0 0 1;
+#X connect 9 0 0 0;
+#X connect 10 0 7 0;
+#X connect 12 0 11 0;
+#X restore 30 110 pd collide;
+#X obj 50 140 tgl 24 0 empty empty hit? 28 7 1 10 #fcfcfc #000000 #000000
+1 1;
+#X obj 130 110 loadbang;
+#X obj 73 232 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 103 232 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 133 232 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 23 202 spigot;
+#X obj 123 202 spigot;
+#X obj 23 172 receive reset;
+#X obj 193 222 loadbang;
+#X obj 143 172 receive start;
+#X obj 43 272 spigot;
+#X obj 130 140 delay 100;
+#X obj 30 70 pack 0 0;
+#X obj 20 340 send reset;
+#X obj 280 130 gemhead;
+#X obj 280 240 pix_image;
+#X obj 280 310 pix_texture;
+#X msg 350 260 env \$1;
+#X obj 350 240 hradio 15 1 0 6 empty empty empty 0 -6 0 8 #fcfcfc #000000
+#000000 0;
+#X obj 280 400 translateXYZ -2 1 0;
+#X msg 350 220 2;
+#X msg 310 190 open Art/Enemy1.png;
+#X obj 280 430 square 0.25;
+#X msg 490 260 env \$1;
+#X obj 490 240 hradio 15 1 0 6 empty empty empty 0 -6 0 8 #fcfcfc #000000
+#000000 0;
+#X msg 490 220 2;
+#X msg 450 190 open Art/Enemy3.png;
+#X obj 450 160 receive round3;
+#X obj 310 160 receive start;
+#X msg 620 260 env \$1;
+#X obj 620 240 hradio 15 1 0 6 empty empty empty 0 -6 0 8 #fcfcfc #000000
+#000000 0;
+#X msg 620 220 2;
+#X obj 580 160 receive round2;
+#X msg 580 190 open Art/Enemy1.png;
+#X obj 280 370 color 1 0 0;
+#X msg 370 310 1 0 0;
+#X msg 440 310 1 1 0;
+#X msg 500 310 0 0 1;
+#X connect 0 0 5 2;
+#X connect 1 0 2 0;
+#X connect 1 0 5 1;
+#X connect 2 0 18 0;
+#X connect 2 0 25 1;
+#X connect 2 1 25 2;
+#X connect 3 1 19 0;
+#X connect 4 0 18 1;
+#X connect 5 0 6 0;
+#X connect 6 0 16 0;
+#X connect 7 0 17 0;
+#X connect 8 0 9 0;
+#X connect 8 0 11 1;
+#X connect 8 0 16 1;
+#X connect 9 0 10 0;
+#X connect 10 0 12 1;
+#X connect 11 0 8 0;
+#X connect 12 0 8 0;
+#X connect 13 0 11 0;
+#X connect 14 0 10 0;
+#X connect 15 0 12 0;
+#X connect 16 0 3 0;
+#X connect 17 0 6 0;
+#X connect 18 0 5 0;
+#X connect 20 0 21 0;
+#X connect 21 0 22 0;
+#X connect 22 0 40 0;
+#X connect 23 0 22 0;
+#X connect 24 0 23 0;
+#X connect 24 0 22 0;
+#X connect 25 0 28 0;
+#X connect 26 0 24 0;
+#X connect 27 0 21 0;
+#X connect 29 0 22 0;
+#X connect 30 0 29 0;
+#X connect 30 0 22 0;
+#X connect 31 0 30 0;
+#X connect 32 0 21 0;
+#X connect 33 0 32 0;
+#X connect 33 0 31 0;
+#X connect 33 0 42 0;
+#X connect 34 0 27 0;
+#X connect 34 0 26 0;
+#X connect 34 0 41 0;
+#X connect 35 0 22 0;
+#X connect 36 0 35 0;
+#X connect 36 0 22 0;
+#X connect 37 0 36 0;
+#X connect 38 0 39 0;
+#X connect 38 0 37 0;
+#X connect 38 0 43 0;
+#X connect 39 0 21 0;
+#X connect 40 0 25 0;
+#X connect 41 0 40 1;
+#X connect 42 0 40 1;
+#X connect 43 0 40 1;
+#X restore 330 570 pd attack_collision;
+#N canvas 344 132 742 598 attack_collision 0;
+#X obj 340 50 inlet radius;
+#X obj 230 50 inlet reference;
+#X obj 390 80 unpack 0 0;
+#X obj 20 310 select 0 1;
+#X obj 30 30 inlet test;
+#N canvas 876 256 554 530 collide 0;
+#X obj 91 217 list-map2;
+#X obj 171 218 -;
+#X obj 171 265 *;
+#X obj 171 241 t a a;
+#X obj 84 340 sqrt;
+#X obj 84 290 list-reduce;
+#X obj 170 290 +;
+#X obj 124 360 t b a;
+#X obj 150 130 inlet reference;
+#X obj 80 130 inlet test;
+#X obj 294 247 inlet radius;
+#X obj 94 410 outlet;
+#X obj 94 380 <= 1;
+#X floatatom 40 320 5 0 0 0 - - -, f 5;
+#X connect 0 0 5 0;
+#X connect 0 1 1 0;
+#X connect 1 0 3 0;
+#X connect 2 0 0 2;
+#X connect 3 0 2 0;
+#X connect 3 1 2 1;
+#X connect 4 0 12 0;
+#X connect 5 0 4 0;
+#X connect 5 0 13 0;
+#X connect 5 1 6 0;
+#X connect 6 0 5 1;
+#X connect 7 0 12 0;
+#X connect 7 1 12 1;
+#X connect 8 0 0 1;
+#X connect 9 0 0 0;
+#X connect 10 0 7 0;
+#X connect 12 0 11 0;
+#X restore 30 110 pd collide;
+#X obj 50 140 tgl 24 0 empty empty hit? 28 7 1 10 #fcfcfc #000000 #000000
+1 1;
+#X obj 130 110 loadbang;
+#X obj 73 232 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 103 232 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 133 232 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 23 202 spigot;
+#X obj 123 202 spigot;
+#X obj 23 172 receive reset;
+#X obj 193 222 loadbang;
+#X obj 143 172 receive start;
+#X obj 43 272 spigot;
+#X obj 130 140 delay 100;
+#X obj 30 70 pack 0 0;
+#X obj 20 340 send reset;
+#X obj 270 120 gemhead;
+#X obj 270 230 pix_image;
+#X obj 270 300 pix_texture;
+#X msg 340 250 env \$1;
+#X obj 340 230 hradio 15 1 0 6 empty empty empty 0 -6 0 8 #fcfcfc #000000
+#000000 0;
+#X obj 270 390 translateXYZ -2 1 0;
+#X msg 340 210 2;
+#X msg 300 180 open Art/Enemy1.png;
+#X obj 270 420 square 0.25;
+#X msg 480 250 env \$1;
+#X obj 480 230 hradio 15 1 0 6 empty empty empty 0 -6 0 8 #fcfcfc #000000
+#000000 0;
+#X msg 480 210 2;
+#X msg 440 180 open Art/Enemy3.png;
+#X obj 440 150 receive round3;
+#X obj 300 150 receive start;
+#X msg 610 250 env \$1;
+#X obj 610 230 hradio 15 1 0 6 empty empty empty 0 -6 0 8 #fcfcfc #000000
+#000000 0;
+#X msg 610 210 2;
+#X obj 570 150 receive round2;
+#X msg 570 180 open Art/Enemy1.png;
+#X obj 270 360 color 1 0 0;
+#X msg 360 300 1 0 0;
+#X msg 430 300 1 1 0;
+#X msg 490 300 0 0 1;
+#X connect 0 0 5 2;
+#X connect 1 0 2 0;
+#X connect 1 0 5 1;
+#X connect 2 0 18 0;
+#X connect 2 0 25 1;
+#X connect 2 1 25 2;
+#X connect 3 1 19 0;
+#X connect 4 0 18 1;
+#X connect 5 0 6 0;
+#X connect 6 0 16 0;
+#X connect 7 0 17 0;
+#X connect 8 0 9 0;
+#X connect 8 0 11 1;
+#X connect 8 0 16 1;
+#X connect 9 0 10 0;
+#X connect 10 0 12 1;
+#X connect 11 0 8 0;
+#X connect 12 0 8 0;
+#X connect 13 0 11 0;
+#X connect 14 0 10 0;
+#X connect 15 0 12 0;
+#X connect 16 0 3 0;
+#X connect 17 0 6 0;
+#X connect 18 0 5 0;
+#X connect 20 0 21 0;
+#X connect 21 0 22 0;
+#X connect 22 0 40 0;
+#X connect 23 0 22 0;
+#X connect 24 0 23 0;
+#X connect 24 0 22 0;
+#X connect 25 0 28 0;
+#X connect 26 0 24 0;
+#X connect 27 0 21 0;
+#X connect 29 0 22 0;
+#X connect 30 0 29 0;
+#X connect 30 0 22 0;
+#X connect 31 0 30 0;
+#X connect 32 0 21 0;
+#X connect 33 0 32 0;
+#X connect 33 0 31 0;
+#X connect 33 0 42 0;
+#X connect 34 0 27 0;
+#X connect 34 0 26 0;
+#X connect 34 0 41 0;
+#X connect 35 0 22 0;
+#X connect 36 0 35 0;
+#X connect 36 0 22 0;
+#X connect 37 0 36 0;
+#X connect 38 0 39 0;
+#X connect 38 0 37 0;
+#X connect 38 0 43 0;
+#X connect 39 0 21 0;
+#X connect 40 0 25 0;
+#X connect 41 0 40 1;
+#X connect 42 0 40 1;
+#X connect 43 0 40 1;
+#X restore 180 570 pd attack_collision;
+#N canvas 344 132 742 598 attack_collision 0;
+#X obj 340 50 inlet radius;
+#X obj 230 50 inlet reference;
+#X obj 390 80 unpack 0 0, f 11;
+#X obj 20 310 select 0 1;
+#X obj 30 30 inlet test;
+#N canvas 876 256 554 530 collide 0;
+#X obj 91 217 list-map2;
+#X obj 171 218 -;
+#X obj 171 265 *;
+#X obj 171 241 t a a;
+#X obj 84 340 sqrt;
+#X obj 84 290 list-reduce;
+#X obj 170 290 +;
+#X obj 124 360 t b a;
+#X obj 150 130 inlet reference;
+#X obj 80 130 inlet test;
+#X obj 294 247 inlet radius;
+#X obj 94 410 outlet;
+#X obj 94 380 <= 1;
+#X floatatom 40 320 5 0 0 0 - - -, f 5;
+#X connect 0 0 5 0;
+#X connect 0 1 1 0;
+#X connect 1 0 3 0;
+#X connect 2 0 0 2;
+#X connect 3 0 2 0;
+#X connect 3 1 2 1;
+#X connect 4 0 12 0;
+#X connect 5 0 4 0;
+#X connect 5 0 13 0;
+#X connect 5 1 6 0;
+#X connect 6 0 5 1;
+#X connect 7 0 12 0;
+#X connect 7 1 12 1;
+#X connect 8 0 0 1;
+#X connect 9 0 0 0;
+#X connect 10 0 7 0;
+#X connect 12 0 11 0;
+#X restore 30 110 pd collide;
+#X obj 50 140 tgl 24 0 empty empty hit? 28 7 1 10 #fcfcfc #000000 #000000
+1 1;
+#X obj 130 110 loadbang;
+#X obj 73 232 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 103 232 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 133 232 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 23 202 spigot;
+#X obj 123 202 spigot;
+#X obj 23 172 receive reset;
+#X obj 193 222 loadbang;
+#X obj 143 172 receive start;
+#X obj 43 272 spigot;
+#X obj 130 140 delay 100;
+#X obj 30 70 pack 0 0;
+#X obj 20 340 send reset;
+#X obj 270 130 gemhead;
+#X obj 270 240 pix_image;
+#X obj 270 310 pix_texture;
+#X msg 340 260 env \$1;
+#X obj 340 240 hradio 15 1 0 6 empty empty empty 0 -6 0 8 #fcfcfc #000000
+#000000 0;
+#X obj 270 400 translateXYZ -2 1 0;
+#X msg 340 220 2;
+#X msg 300 190 open Art/Enemy1.png;
+#X obj 270 430 square 0.25;
+#X msg 480 260 env \$1;
+#X obj 480 240 hradio 15 1 0 6 empty empty empty 0 -6 0 8 #fcfcfc #000000
+#000000 0;
+#X msg 480 220 2;
+#X msg 440 190 open Art/Enemy3.png;
+#X obj 440 160 receive round3;
+#X obj 300 160 receive start;
+#X msg 610 260 env \$1;
+#X obj 610 240 hradio 15 1 0 6 empty empty empty 0 -6 0 8 #fcfcfc #000000
+#000000 0;
+#X msg 610 220 2;
+#X obj 570 160 receive round2;
+#X msg 570 190 open Art/Enemy1.png;
+#X obj 270 370 color 1 0 0;
+#X msg 360 310 1 0 0;
+#X msg 430 310 1 1 0;
+#X msg 490 310 0 0 1;
+#X connect 0 0 5 2;
+#X connect 1 0 2 0;
+#X connect 1 0 5 1;
+#X connect 2 0 18 0;
+#X connect 2 0 25 1;
+#X connect 2 1 25 2;
+#X connect 3 1 19 0;
+#X connect 4 0 18 1;
+#X connect 5 0 6 0;
+#X connect 6 0 16 0;
+#X connect 7 0 17 0;
+#X connect 8 0 9 0;
+#X connect 8 0 11 1;
+#X connect 8 0 16 1;
+#X connect 9 0 10 0;
+#X connect 10 0 12 1;
+#X connect 11 0 8 0;
+#X connect 12 0 8 0;
+#X connect 13 0 11 0;
+#X connect 14 0 10 0;
+#X connect 15 0 12 0;
+#X connect 16 0 3 0;
+#X connect 17 0 6 0;
+#X connect 18 0 5 0;
+#X connect 20 0 21 0;
+#X connect 21 0 22 0;
+#X connect 22 0 40 0;
+#X connect 23 0 22 0;
+#X connect 24 0 23 0;
+#X connect 24 0 22 0;
+#X connect 25 0 28 0;
+#X connect 26 0 24 0;
+#X connect 27 0 21 0;
+#X connect 29 0 22 0;
+#X connect 30 0 29 0;
+#X connect 30 0 22 0;
+#X connect 31 0 30 0;
+#X connect 32 0 21 0;
+#X connect 33 0 32 0;
+#X connect 33 0 31 0;
+#X connect 33 0 42 0;
+#X connect 34 0 27 0;
+#X connect 34 0 26 0;
+#X connect 34 0 41 0;
+#X connect 35 0 22 0;
+#X connect 36 0 35 0;
+#X connect 36 0 22 0;
+#X connect 37 0 36 0;
+#X connect 38 0 39 0;
+#X connect 38 0 37 0;
+#X connect 38 0 43 0;
+#X connect 39 0 21 0;
+#X connect 40 0 25 0;
+#X connect 41 0 40 1;
+#X connect 42 0 40 1;
+#X connect 43 0 40 1;
+#X restore 20 570 pd attack_collision;
+#X msg 860 50 0.25;
+#X msg 110 370 0.75;
+#X msg 270 370 0.75;
+#X msg 420 370 0.75;
+#X msg 570 370 0.75;
+#X msg 720 370 0.75;
+#X msg 870 370 0.75;
+#X msg 870 500 0.75;
+#X msg 720 500 0.75;
+#X msg 570 500 0.75;
+#X msg 420 500 0.75;
+#X msg 270 500 0.75;
+#X msg 110 500 0.75;
+#N canvas 472 20 606 706 Enemy27 0;
+#X obj 200 580 pack 0 0;
+#X obj 220 550 t b f;
+#X msg 480 240 -10;
+#X msg 510 240 -10;
+#X obj 160 210 metro;
+#X obj 160 235 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 230 190 int 1;
+#X floatatom 230 222 5 0 0 0 - - -, f 5;
+#X obj 300 232 + 1;
+#X obj 100 200 sel 0;
+#X obj 100 225 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X msg 100 248 -1;
+#X obj 40 200 loadbang;
+#X obj 190 110 loadbang;
+#X obj 230 271 + 1;
+#X floatatom 230 300 5 0 0 0 - - -, f 5;
+#X floatatom 190 160 5 0 0 0 - - -, f 5;
+#X obj 60 150 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 90 150 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 120 150 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 10 120 spigot;
+#X obj 110 120 spigot;
+#X obj 10 90 receive reset;
+#X msg 250 450 \$1;
+#X floatatom 220 500 5 0 0 0 - - -, f 5;
+#X obj 250 390 f 4;
+#X msg 80 380 1;
+#X msg 150 380 2;
+#X obj 100 439 pack f f;
+#X obj 100 468 route 1 2;
+#X obj 90 410 t f b;
+#X floatatom 120 540 5 0 0 0 - - -, f 5;
+#X obj 170 430 f -3;
+#X obj 10 565 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 10 540 receive round3;
+#X obj 120 80 receive round3;
+#X obj 230 242 % 12;
+#X obj 80 350 sel 1 2 3 4 5;
+#X obj 300 350 sel 6 12;
+#X obj 180 350 sel 7 8 9 10 11;
+#X msg 190 135 550;
+#X msg 60 600 3.5;
+#X obj 100 500 + 1;
+#X obj 140 500 - 1;
+#X msg 10 600 -2;
+#X obj 250 425 - 0.8;
+#X obj 480 190 receive hit2;
+#X obj 21 60 receive hit2;
+#X obj 203 673 outlet;
+#X obj 313 653 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 343 653 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 373 653 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 263 623 spigot;
+#X obj 363 623 spigot;
+#X obj 263 593 receive reset;
+#X obj 203 633 spigot;
+#X obj 424 624 loadbang;
+#X connect 0 0 55 0;
+#X connect 1 0 0 0;
+#X connect 1 1 0 1;
+#X connect 2 0 0 0;
+#X connect 3 0 1 0;
+#X connect 4 0 5 0;
+#X connect 5 0 6 0;
+#X connect 6 0 7 0;
+#X connect 6 0 8 0;
+#X connect 7 0 36 0;
+#X connect 8 0 6 1;
+#X connect 9 0 10 0;
+#X connect 10 0 11 0;
+#X connect 11 0 6 0;
+#X connect 12 0 10 0;
+#X connect 13 0 40 0;
+#X connect 13 0 19 0;
+#X connect 14 0 15 0;
+#X connect 15 0 37 0;
+#X connect 15 0 38 0;
+#X connect 15 0 39 0;
+#X connect 16 0 4 1;
+#X connect 17 0 18 0;
+#X connect 17 0 20 1;
+#X connect 17 0 9 0;
+#X connect 17 0 4 0;
+#X connect 18 0 19 0;
+#X connect 19 0 21 1;
+#X connect 20 0 17 0;
+#X connect 21 0 17 0;
+#X connect 22 0 20 0;
+#X connect 23 0 24 0;
+#X connect 24 0 1 0;
+#X connect 24 0 25 1;
+#X connect 25 0 45 0;
+#X connect 26 0 30 0;
+#X connect 27 0 30 0;
+#X connect 28 0 29 0;
+#X connect 29 0 42 0;
+#X connect 29 1 43 0;
+#X connect 30 0 28 0;
+#X connect 30 1 32 0;
+#X connect 31 0 32 1;
+#X connect 31 0 0 0;
+#X connect 32 0 28 1;
+#X connect 33 0 44 0;
+#X connect 33 0 41 0;
+#X connect 34 0 33 0;
+#X connect 35 0 21 0;
+#X connect 35 0 53 0;
+#X connect 36 0 14 0;
+#X connect 37 0 26 0;
+#X connect 37 1 26 0;
+#X connect 37 2 26 0;
+#X connect 37 3 26 0;
+#X connect 37 4 26 0;
+#X connect 38 0 25 0;
+#X connect 38 1 25 0;
+#X connect 39 0 27 0;
+#X connect 39 1 27 0;
+#X connect 39 2 27 0;
+#X connect 39 3 27 0;
+#X connect 39 4 27 0;
+#X connect 40 0 16 0;
+#X connect 41 0 1 0;
+#X connect 41 0 24 0;
+#X connect 42 0 31 0;
+#X connect 43 0 31 0;
+#X connect 44 0 0 0;
+#X connect 44 0 31 0;
+#X connect 45 0 23 0;
+#X connect 46 0 2 0;
+#X connect 46 0 3 0;
+#X connect 47 0 20 0;
+#X connect 49 0 50 0;
+#X connect 49 0 52 1;
+#X connect 49 0 55 1;
+#X connect 50 0 51 0;
+#X connect 51 0 53 1;
+#X connect 52 0 49 0;
+#X connect 53 0 49 0;
+#X connect 54 0 52 0;
+#X connect 55 0 48 0;
+#X connect 56 0 51 0;
+#X restore 190 50 pd Enemy27;
+#N canvas 472 20 606 706 Enemy28 0;
+#X obj 200 580 pack 0 0;
+#X obj 220 550 t b f;
+#X msg 480 240 -10;
+#X msg 510 240 -10;
+#X obj 160 210 metro;
+#X obj 160 235 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 230 190 int 1;
+#X floatatom 230 222 5 0 0 0 - - -, f 5;
+#X obj 300 232 + 1;
+#X obj 100 200 sel 0;
+#X obj 100 225 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X msg 100 248 -1;
+#X obj 40 200 loadbang;
+#X obj 190 110 loadbang;
+#X obj 230 271 + 1;
+#X floatatom 230 300 5 0 0 0 - - -, f 5;
+#X floatatom 190 160 5 0 0 0 - - -, f 5;
+#X obj 60 150 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 90 150 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 120 150 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 10 120 spigot;
+#X obj 110 120 spigot;
+#X obj 10 90 receive reset;
+#X msg 250 450 \$1;
+#X floatatom 220 500 5 0 0 0 - - -, f 5;
+#X obj 250 390 f 4;
+#X msg 80 380 1;
+#X msg 150 380 2;
+#X obj 100 439 pack f f;
+#X obj 100 468 route 1 2;
+#X obj 90 410 t f b;
+#X floatatom 120 540 5 0 0 0 - - -, f 5;
+#X obj 170 430 f -3;
+#X obj 10 565 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 10 540 receive round3;
+#X obj 120 80 receive round3;
+#X obj 230 242 % 12;
+#X obj 80 350 sel 1 2 3 4 5;
+#X obj 300 350 sel 6 12;
+#X obj 180 350 sel 7 8 9 10 11;
+#X msg 190 135 550;
+#X msg 60 600 3.5;
+#X obj 100 500 + 1;
+#X obj 140 500 - 1;
+#X msg 10 600 -1;
+#X obj 250 425 - 0.8;
+#X obj 480 190 receive hit3;
+#X obj 21 60 receive hit3;
+#X obj 221 661 outlet;
+#X obj 331 641 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 361 641 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 391 641 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 281 611 spigot;
+#X obj 381 611 spigot;
+#X obj 281 581 receive reset;
+#X obj 221 621 spigot;
+#X obj 442 612 loadbang;
+#X connect 0 0 55 0;
+#X connect 1 0 0 0;
+#X connect 1 1 0 1;
+#X connect 2 0 0 0;
+#X connect 3 0 1 0;
+#X connect 4 0 5 0;
+#X connect 5 0 6 0;
+#X connect 6 0 7 0;
+#X connect 6 0 8 0;
+#X connect 7 0 36 0;
+#X connect 8 0 6 1;
+#X connect 9 0 10 0;
+#X connect 10 0 11 0;
+#X connect 11 0 6 0;
+#X connect 12 0 10 0;
+#X connect 13 0 40 0;
+#X connect 13 0 19 0;
+#X connect 14 0 15 0;
+#X connect 15 0 37 0;
+#X connect 15 0 38 0;
+#X connect 15 0 39 0;
+#X connect 16 0 4 1;
+#X connect 17 0 18 0;
+#X connect 17 0 20 1;
+#X connect 17 0 9 0;
+#X connect 17 0 4 0;
+#X connect 18 0 19 0;
+#X connect 19 0 21 1;
+#X connect 20 0 17 0;
+#X connect 21 0 17 0;
+#X connect 22 0 20 0;
+#X connect 23 0 24 0;
+#X connect 24 0 1 0;
+#X connect 24 0 25 1;
+#X connect 25 0 45 0;
+#X connect 26 0 30 0;
+#X connect 27 0 30 0;
+#X connect 28 0 29 0;
+#X connect 29 0 42 0;
+#X connect 29 1 43 0;
+#X connect 30 0 28 0;
+#X connect 30 1 32 0;
+#X connect 31 0 32 1;
+#X connect 31 0 0 0;
+#X connect 32 0 28 1;
+#X connect 33 0 44 0;
+#X connect 33 0 41 0;
+#X connect 34 0 33 0;
+#X connect 35 0 21 0;
+#X connect 35 0 53 0;
+#X connect 36 0 14 0;
+#X connect 37 0 26 0;
+#X connect 37 1 26 0;
+#X connect 37 2 26 0;
+#X connect 37 3 26 0;
+#X connect 37 4 26 0;
+#X connect 38 0 25 0;
+#X connect 38 1 25 0;
+#X connect 39 0 27 0;
+#X connect 39 1 27 0;
+#X connect 39 2 27 0;
+#X connect 39 3 27 0;
+#X connect 39 4 27 0;
+#X connect 40 0 16 0;
+#X connect 41 0 1 0;
+#X connect 41 0 24 0;
+#X connect 42 0 31 0;
+#X connect 43 0 31 0;
+#X connect 44 0 0 0;
+#X connect 44 0 31 0;
+#X connect 45 0 23 0;
+#X connect 46 0 2 0;
+#X connect 46 0 3 0;
+#X connect 47 0 20 0;
+#X connect 49 0 50 0;
+#X connect 49 0 52 1;
+#X connect 49 0 55 1;
+#X connect 50 0 51 0;
+#X connect 51 0 53 1;
+#X connect 52 0 49 0;
+#X connect 53 0 49 0;
+#X connect 54 0 52 0;
+#X connect 55 0 48 0;
+#X connect 56 0 51 0;
+#X restore 340 50 pd Enemy28;
+#N canvas 472 20 606 706 Enemy29 0;
+#X obj 200 580 pack 0 0;
+#X obj 220 550 t b f;
+#X msg 480 240 -10;
+#X msg 510 240 -10;
+#X obj 160 210 metro;
+#X obj 160 235 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 230 190 int 1;
+#X floatatom 230 222 5 0 0 0 - - -, f 5;
+#X obj 300 232 + 1;
+#X obj 100 200 sel 0;
+#X obj 100 225 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X msg 100 248 -1;
+#X obj 40 200 loadbang;
+#X obj 190 110 loadbang;
+#X obj 230 271 + 1;
+#X floatatom 230 300 5 0 0 0 - - -, f 5;
+#X floatatom 190 160 5 0 0 0 - - -, f 5;
+#X obj 60 150 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 90 150 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 120 150 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 10 120 spigot;
+#X obj 110 120 spigot;
+#X obj 10 90 receive reset;
+#X msg 250 450 \$1;
+#X floatatom 220 500 5 0 0 0 - - -, f 5;
+#X obj 250 390 f 4;
+#X msg 80 380 1;
+#X msg 150 380 2;
+#X obj 100 439 pack f f;
+#X obj 100 468 route 1 2;
+#X obj 90 410 t f b;
+#X floatatom 120 540 5 0 0 0 - - -, f 5;
+#X obj 170 430 f -3;
+#X obj 10 565 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 10 540 receive round3;
+#X obj 120 80 receive round3;
+#X obj 230 242 % 12;
+#X obj 80 350 sel 1 2 3 4 5;
+#X obj 300 350 sel 6 12;
+#X obj 180 350 sel 7 8 9 10 11;
+#X msg 190 135 550;
+#X msg 60 600 3;
+#X obj 100 500 - 1;
+#X obj 140 500 + 1;
+#X msg 10 600 0.5;
+#X obj 250 425 - 0.8;
+#X obj 480 190 receive hit4;
+#X obj 21 60 receive hit4;
+#X obj 221 671 outlet;
+#X obj 331 651 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 361 651 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 391 651 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 281 621 spigot;
+#X obj 381 621 spigot;
+#X obj 281 591 receive reset;
+#X obj 221 631 spigot;
+#X obj 442 622 loadbang;
+#X connect 0 0 55 0;
+#X connect 1 0 0 0;
+#X connect 1 1 0 1;
+#X connect 2 0 0 0;
+#X connect 3 0 1 0;
+#X connect 4 0 5 0;
+#X connect 5 0 6 0;
+#X connect 6 0 7 0;
+#X connect 6 0 8 0;
+#X connect 7 0 36 0;
+#X connect 8 0 6 1;
+#X connect 9 0 10 0;
+#X connect 10 0 11 0;
+#X connect 11 0 6 0;
+#X connect 12 0 10 0;
+#X connect 13 0 40 0;
+#X connect 13 0 19 0;
+#X connect 14 0 15 0;
+#X connect 15 0 37 0;
+#X connect 15 0 38 0;
+#X connect 15 0 39 0;
+#X connect 16 0 4 1;
+#X connect 17 0 18 0;
+#X connect 17 0 20 1;
+#X connect 17 0 9 0;
+#X connect 17 0 4 0;
+#X connect 18 0 19 0;
+#X connect 19 0 21 1;
+#X connect 20 0 17 0;
+#X connect 21 0 17 0;
+#X connect 22 0 20 0;
+#X connect 23 0 24 0;
+#X connect 24 0 1 0;
+#X connect 24 0 25 1;
+#X connect 25 0 45 0;
+#X connect 26 0 30 0;
+#X connect 27 0 30 0;
+#X connect 28 0 29 0;
+#X connect 29 0 42 0;
+#X connect 29 1 43 0;
+#X connect 30 0 28 0;
+#X connect 30 1 32 0;
+#X connect 31 0 32 1;
+#X connect 31 0 0 0;
+#X connect 32 0 28 1;
+#X connect 33 0 44 0;
+#X connect 33 0 41 0;
+#X connect 34 0 33 0;
+#X connect 35 0 21 0;
+#X connect 35 0 53 0;
+#X connect 36 0 14 0;
+#X connect 37 0 26 0;
+#X connect 37 1 26 0;
+#X connect 37 2 26 0;
+#X connect 37 3 26 0;
+#X connect 37 4 26 0;
+#X connect 38 0 25 0;
+#X connect 38 1 25 0;
+#X connect 39 0 27 0;
+#X connect 39 1 27 0;
+#X connect 39 2 27 0;
+#X connect 39 3 27 0;
+#X connect 39 4 27 0;
+#X connect 40 0 16 0;
+#X connect 41 0 1 0;
+#X connect 41 0 24 0;
+#X connect 42 0 31 0;
+#X connect 43 0 31 0;
+#X connect 44 0 0 0;
+#X connect 44 0 31 0;
+#X connect 45 0 23 0;
+#X connect 46 0 2 0;
+#X connect 46 0 3 0;
+#X connect 47 0 20 0;
+#X connect 49 0 50 0;
+#X connect 49 0 52 1;
+#X connect 49 0 55 1;
+#X connect 50 0 51 0;
+#X connect 51 0 53 1;
+#X connect 52 0 49 0;
+#X connect 53 0 49 0;
+#X connect 54 0 52 0;
+#X connect 55 0 48 0;
+#X connect 56 0 51 0;
+#X restore 490 50 pd Enemy29;
+#N canvas 472 20 606 706 Enemy30 0;
+#X obj 200 580 pack 0 0;
+#X obj 220 550 t b f;
+#X msg 480 240 -10;
+#X msg 510 240 -10;
+#X obj 160 210 metro;
+#X obj 160 235 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 230 190 int 1;
+#X floatatom 230 222 5 0 0 0 - - -, f 5;
+#X obj 300 232 + 1;
+#X obj 100 200 sel 0;
+#X obj 100 225 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X msg 100 248 -1;
+#X obj 40 200 loadbang;
+#X obj 190 110 loadbang;
+#X obj 230 271 + 1;
+#X floatatom 230 300 5 0 0 0 - - -, f 5;
+#X floatatom 190 160 5 0 0 0 - - -, f 5;
+#X obj 60 150 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 90 150 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 120 150 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 10 120 spigot;
+#X obj 110 120 spigot;
+#X obj 10 90 receive reset;
+#X msg 250 450 \$1;
+#X floatatom 220 500 5 0 0 0 - - -, f 5;
+#X obj 250 390 f 4;
+#X msg 80 380 1;
+#X msg 150 380 2;
+#X obj 100 439 pack f f;
+#X obj 100 468 route 1 2;
+#X obj 90 410 t f b;
+#X floatatom 120 540 5 0 0 0 - - -, f 5;
+#X obj 170 430 f -3;
+#X obj 10 565 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 10 540 receive round3;
+#X obj 120 80 receive round3;
+#X obj 230 242 % 12;
+#X obj 80 350 sel 1 2 3 4 5;
+#X obj 300 350 sel 6 12;
+#X obj 180 350 sel 7 8 9 10 11;
+#X msg 190 135 550;
+#X obj 100 500 - 1;
+#X obj 140 500 + 1;
+#X msg 60 600 3;
+#X msg 10 600 1.5;
+#X obj 250 425 - 0.8;
+#X obj 480 190 receive hit5;
+#X obj 21 60 receive hit5;
+#X obj 213 671 outlet;
+#X obj 323 651 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 353 651 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 383 651 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 273 621 spigot;
+#X obj 373 621 spigot;
+#X obj 273 591 receive reset;
+#X obj 213 631 spigot;
+#X obj 434 622 loadbang;
+#X connect 0 0 55 0;
+#X connect 1 0 0 0;
+#X connect 1 1 0 1;
+#X connect 2 0 0 0;
+#X connect 3 0 1 0;
+#X connect 4 0 5 0;
+#X connect 5 0 6 0;
+#X connect 6 0 7 0;
+#X connect 6 0 8 0;
+#X connect 7 0 36 0;
+#X connect 8 0 6 1;
+#X connect 9 0 10 0;
+#X connect 10 0 11 0;
+#X connect 11 0 6 0;
+#X connect 12 0 10 0;
+#X connect 13 0 40 0;
+#X connect 13 0 19 0;
+#X connect 14 0 15 0;
+#X connect 15 0 37 0;
+#X connect 15 0 38 0;
+#X connect 15 0 39 0;
+#X connect 16 0 4 1;
+#X connect 17 0 18 0;
+#X connect 17 0 20 1;
+#X connect 17 0 9 0;
+#X connect 17 0 4 0;
+#X connect 18 0 19 0;
+#X connect 19 0 21 1;
+#X connect 20 0 17 0;
+#X connect 21 0 17 0;
+#X connect 22 0 20 0;
+#X connect 23 0 24 0;
+#X connect 24 0 1 0;
+#X connect 24 0 25 1;
+#X connect 25 0 45 0;
+#X connect 26 0 30 0;
+#X connect 27 0 30 0;
+#X connect 28 0 29 0;
+#X connect 29 0 41 0;
+#X connect 29 1 42 0;
+#X connect 30 0 28 0;
+#X connect 30 1 32 0;
+#X connect 31 0 32 1;
+#X connect 31 0 0 0;
+#X connect 32 0 28 1;
+#X connect 33 0 44 0;
+#X connect 33 0 43 0;
+#X connect 34 0 33 0;
+#X connect 35 0 21 0;
+#X connect 35 0 53 0;
+#X connect 36 0 14 0;
+#X connect 37 0 26 0;
+#X connect 37 1 26 0;
+#X connect 37 2 26 0;
+#X connect 37 3 26 0;
+#X connect 37 4 26 0;
+#X connect 38 0 25 0;
+#X connect 38 1 25 0;
+#X connect 39 0 27 0;
+#X connect 39 1 27 0;
+#X connect 39 2 27 0;
+#X connect 39 3 27 0;
+#X connect 39 4 27 0;
+#X connect 40 0 16 0;
+#X connect 41 0 31 0;
+#X connect 42 0 31 0;
+#X connect 43 0 1 0;
+#X connect 43 0 24 0;
+#X connect 44 0 0 0;
+#X connect 44 0 31 0;
+#X connect 45 0 23 0;
+#X connect 46 0 2 0;
+#X connect 46 0 3 0;
+#X connect 47 0 20 0;
+#X connect 49 0 50 0;
+#X connect 49 0 52 1;
+#X connect 49 0 55 1;
+#X connect 50 0 51 0;
+#X connect 51 0 53 1;
+#X connect 52 0 49 0;
+#X connect 53 0 49 0;
+#X connect 54 0 52 0;
+#X connect 55 0 48 0;
+#X connect 56 0 51 0;
+#X restore 640 50 pd Enemy30;
+#N canvas 472 20 606 706 Enemy31 0;
+#X obj 200 580 pack 0 0;
+#X obj 220 550 t b f;
+#X msg 480 240 -10;
+#X msg 510 240 -10;
+#X obj 160 210 metro;
+#X obj 160 235 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 230 190 int 1;
+#X floatatom 230 222 5 0 0 0 - - -, f 5;
+#X obj 300 232 + 1;
+#X obj 100 200 sel 0;
+#X obj 100 225 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X msg 100 248 -1;
+#X obj 40 200 loadbang;
+#X obj 190 110 loadbang;
+#X obj 230 271 + 1;
+#X floatatom 230 300 5 0 0 0 - - -, f 5;
+#X floatatom 190 160 5 0 0 0 - - -, f 5;
+#X obj 60 150 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 90 150 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 120 150 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 10 120 spigot;
+#X obj 110 120 spigot;
+#X obj 10 90 receive reset;
+#X msg 250 450 \$1;
+#X floatatom 220 500 5 0 0 0 - - -, f 5;
+#X obj 250 390 f 4;
+#X msg 80 380 1;
+#X msg 150 380 2;
+#X obj 100 439 pack f f;
+#X obj 100 468 route 1 2;
+#X obj 90 410 t f b;
+#X floatatom 120 540 5 0 0 0 - - -, f 5;
+#X obj 170 430 f -3;
+#X obj 10 565 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 10 540 receive round3;
+#X obj 120 80 receive round3;
+#X obj 230 242 % 12;
+#X obj 80 350 sel 1 2 3 4 5;
+#X obj 300 350 sel 6 12;
+#X obj 180 350 sel 7 8 9 10 11;
+#X msg 190 135 550;
+#X obj 100 500 - 1;
+#X obj 140 500 + 1;
+#X msg 60 600 3;
+#X msg 10 600 2.5;
+#X obj 250 425 - 0.8;
+#X obj 480 190 receive hit6;
+#X obj 21 60 receive hit6;
+#X obj 222 671 outlet;
+#X obj 332 651 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 362 651 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 392 651 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 282 621 spigot;
+#X obj 382 621 spigot;
+#X obj 282 591 receive reset;
+#X obj 222 631 spigot;
+#X obj 443 622 loadbang;
+#X connect 0 0 55 0;
+#X connect 1 0 0 0;
+#X connect 1 1 0 1;
+#X connect 2 0 0 0;
+#X connect 3 0 1 0;
+#X connect 4 0 5 0;
+#X connect 5 0 6 0;
+#X connect 6 0 7 0;
+#X connect 6 0 8 0;
+#X connect 7 0 36 0;
+#X connect 8 0 6 1;
+#X connect 9 0 10 0;
+#X connect 10 0 11 0;
+#X connect 11 0 6 0;
+#X connect 12 0 10 0;
+#X connect 13 0 40 0;
+#X connect 13 0 19 0;
+#X connect 14 0 15 0;
+#X connect 15 0 37 0;
+#X connect 15 0 38 0;
+#X connect 15 0 39 0;
+#X connect 16 0 4 1;
+#X connect 17 0 18 0;
+#X connect 17 0 20 1;
+#X connect 17 0 9 0;
+#X connect 17 0 4 0;
+#X connect 18 0 19 0;
+#X connect 19 0 21 1;
+#X connect 20 0 17 0;
+#X connect 21 0 17 0;
+#X connect 22 0 20 0;
+#X connect 23 0 24 0;
+#X connect 24 0 1 0;
+#X connect 24 0 25 1;
+#X connect 25 0 45 0;
+#X connect 26 0 30 0;
+#X connect 27 0 30 0;
+#X connect 28 0 29 0;
+#X connect 29 0 41 0;
+#X connect 29 1 42 0;
+#X connect 30 0 28 0;
+#X connect 30 1 32 0;
+#X connect 31 0 32 1;
+#X connect 31 0 0 0;
+#X connect 32 0 28 1;
+#X connect 33 0 44 0;
+#X connect 33 0 43 0;
+#X connect 34 0 33 0;
+#X connect 35 0 21 0;
+#X connect 35 0 53 0;
+#X connect 36 0 14 0;
+#X connect 37 0 26 0;
+#X connect 37 1 26 0;
+#X connect 37 2 26 0;
+#X connect 37 3 26 0;
+#X connect 37 4 26 0;
+#X connect 38 0 25 0;
+#X connect 38 1 25 0;
+#X connect 39 0 27 0;
+#X connect 39 1 27 0;
+#X connect 39 2 27 0;
+#X connect 39 3 27 0;
+#X connect 39 4 27 0;
+#X connect 40 0 16 0;
+#X connect 41 0 31 0;
+#X connect 42 0 31 0;
+#X connect 43 0 1 0;
+#X connect 43 0 24 0;
+#X connect 44 0 0 0;
+#X connect 44 0 31 0;
+#X connect 45 0 23 0;
+#X connect 46 0 2 0;
+#X connect 46 0 3 0;
+#X connect 47 0 20 0;
+#X connect 49 0 50 0;
+#X connect 49 0 52 1;
+#X connect 49 0 55 1;
+#X connect 50 0 51 0;
+#X connect 51 0 53 1;
+#X connect 52 0 49 0;
+#X connect 53 0 49 0;
+#X connect 54 0 52 0;
+#X connect 55 0 48 0;
+#X connect 56 0 51 0;
+#X restore 790 50 pd Enemy31;
+#N canvas 800 52 562 706 Enemy32 0;
+#X obj 200 580 pack 0 0;
+#X obj 220 550 t b f;
+#X msg 480 240 -10;
+#X msg 510 240 -10;
+#X obj 160 210 metro;
+#X obj 160 235 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 230 190 int 1;
+#X floatatom 230 222 5 0 0 0 - - -, f 5;
+#X obj 300 232 + 1;
+#X obj 100 200 sel 0;
+#X obj 100 225 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X msg 100 248 -1;
+#X obj 40 200 loadbang;
+#X obj 190 110 loadbang;
+#X obj 230 271 + 1;
+#X floatatom 230 300 5 0 0 0 - - -, f 5;
+#X floatatom 190 160 5 0 0 0 - - -, f 5;
+#X obj 60 150 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 90 150 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 120 150 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 10 120 spigot;
+#X obj 110 120 spigot;
+#X obj 10 90 receive reset;
+#X msg 250 450 \$1;
+#X floatatom 220 500 5 0 0 0 - - -, f 5;
+#X obj 250 390 f 4;
+#X msg 80 380 1;
+#X msg 150 380 2;
+#X obj 100 439 pack f f;
+#X obj 100 468 route 1 2;
+#X obj 90 410 t f b;
+#X floatatom 120 540 5 0 0 0 - - -, f 5;
+#X obj 170 430 f -3;
+#X obj 10 565 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 10 540 receive round3;
+#X obj 120 80 receive round3;
+#X obj 230 242 % 12;
+#X obj 80 350 sel 1 2 3 4 5;
+#X obj 300 350 sel 6 12;
+#X obj 180 350 sel 7 8 9 10 11;
+#X msg 190 135 550;
+#X obj 100 500 + 1;
+#X obj 140 500 - 1;
+#X msg 60 600 2.5;
+#X msg 10 600 -3.5;
+#X obj 250 425 - 0.8;
+#X obj 480 190 receive hit7;
+#X obj 21 60 receive hit7;
+#X obj 223 691 outlet;
+#X obj 333 671 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 363 671 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 393 671 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 283 641 spigot;
+#X obj 383 641 spigot;
+#X obj 283 611 receive reset;
+#X obj 223 651 spigot;
+#X obj 444 642 loadbang;
+#X obj 380 610 receive round3;
+#X connect 0 0 55 0;
+#X connect 1 0 0 0;
+#X connect 1 1 0 1;
+#X connect 2 0 0 0;
+#X connect 3 0 1 0;
+#X connect 4 0 5 0;
+#X connect 5 0 6 0;
+#X connect 6 0 7 0;
+#X connect 6 0 8 0;
+#X connect 7 0 36 0;
+#X connect 8 0 6 1;
+#X connect 9 0 10 0;
+#X connect 10 0 11 0;
+#X connect 11 0 6 0;
+#X connect 12 0 10 0;
+#X connect 13 0 40 0;
+#X connect 13 0 19 0;
+#X connect 14 0 15 0;
+#X connect 15 0 37 0;
+#X connect 15 0 38 0;
+#X connect 15 0 39 0;
+#X connect 16 0 4 1;
+#X connect 17 0 18 0;
+#X connect 17 0 20 1;
+#X connect 17 0 9 0;
+#X connect 17 0 4 0;
+#X connect 18 0 19 0;
+#X connect 19 0 21 1;
+#X connect 20 0 17 0;
+#X connect 21 0 17 0;
+#X connect 22 0 20 0;
+#X connect 23 0 24 0;
+#X connect 24 0 1 0;
+#X connect 24 0 25 1;
+#X connect 25 0 45 0;
+#X connect 26 0 30 0;
+#X connect 27 0 30 0;
+#X connect 28 0 29 0;
+#X connect 29 0 41 0;
+#X connect 29 1 42 0;
+#X connect 30 0 28 0;
+#X connect 30 1 32 0;
+#X connect 31 0 32 1;
+#X connect 31 0 0 0;
+#X connect 32 0 28 1;
+#X connect 33 0 44 0;
+#X connect 33 0 43 0;
+#X connect 34 0 33 0;
+#X connect 35 0 21 0;
+#X connect 36 0 14 0;
+#X connect 37 0 26 0;
+#X connect 37 1 26 0;
+#X connect 37 2 26 0;
+#X connect 37 3 26 0;
+#X connect 37 4 26 0;
+#X connect 38 0 25 0;
+#X connect 38 1 25 0;
+#X connect 39 0 27 0;
+#X connect 39 1 27 0;
+#X connect 39 2 27 0;
+#X connect 39 3 27 0;
+#X connect 39 4 27 0;
+#X connect 40 0 16 0;
+#X connect 41 0 31 0;
+#X connect 42 0 31 0;
+#X connect 43 0 1 0;
+#X connect 43 0 24 0;
+#X connect 44 0 0 0;
+#X connect 44 0 31 0;
+#X connect 45 0 23 0;
+#X connect 46 0 2 0;
+#X connect 46 0 3 0;
+#X connect 47 0 20 0;
+#X connect 49 0 50 0;
+#X connect 49 0 52 1;
+#X connect 49 0 55 1;
+#X connect 50 0 51 0;
+#X connect 51 0 53 1;
+#X connect 52 0 49 0;
+#X connect 53 0 49 0;
+#X connect 54 0 52 0;
+#X connect 55 0 48 0;
+#X connect 56 0 51 0;
+#X connect 57 0 53 0;
+#X restore 30 180 pd Enemy32;
+#N canvas 472 20 606 706 Enemy33 0;
+#X obj 200 580 pack 0 0;
+#X obj 220 550 t b f;
+#X msg 480 240 -10;
+#X msg 510 240 -10;
+#X obj 160 210 metro;
+#X obj 160 235 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 230 190 int 1;
+#X floatatom 230 222 5 0 0 0 - - -, f 5;
+#X obj 300 232 + 1;
+#X obj 100 200 sel 0;
+#X obj 100 225 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X msg 100 248 -1;
+#X obj 40 200 loadbang;
+#X obj 190 110 loadbang;
+#X obj 230 271 + 1;
+#X floatatom 230 300 5 0 0 0 - - -, f 5;
+#X floatatom 190 160 5 0 0 0 - - -, f 5;
+#X obj 60 150 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 90 150 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 120 150 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 10 120 spigot;
+#X obj 110 120 spigot;
+#X obj 10 90 receive reset;
+#X msg 250 450 \$1;
+#X floatatom 220 500 5 0 0 0 - - -, f 5;
+#X obj 250 390 f 4;
+#X msg 80 380 1;
+#X msg 150 380 2;
+#X obj 100 439 pack f f;
+#X obj 100 468 route 1 2;
+#X obj 90 410 t f b;
+#X floatatom 120 540 5 0 0 0 - - -, f 5;
+#X obj 170 430 f -3;
+#X obj 10 565 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 10 540 receive round3;
+#X obj 120 80 receive round3;
+#X obj 230 242 % 12;
+#X obj 80 350 sel 1 2 3 4 5;
+#X obj 300 350 sel 6 12;
+#X obj 180 350 sel 7 8 9 10 11;
+#X msg 190 135 550;
+#X obj 100 500 + 1;
+#X obj 140 500 - 1;
+#X msg 10 600 -2.5;
+#X msg 60 600 2.5;
+#X obj 250 425 - 0.8;
+#X obj 480 190 receive hit8;
+#X obj 20 60 receive hit8;
+#X obj 212 679 outlet;
+#X obj 322 659 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 352 659 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 382 659 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 272 629 spigot;
+#X obj 372 629 spigot;
+#X obj 272 599 receive reset;
+#X obj 212 639 spigot;
+#X obj 433 630 loadbang;
+#X connect 0 0 55 0;
+#X connect 1 0 0 0;
+#X connect 1 1 0 1;
+#X connect 2 0 0 0;
+#X connect 3 0 1 0;
+#X connect 4 0 5 0;
+#X connect 5 0 6 0;
+#X connect 6 0 7 0;
+#X connect 6 0 8 0;
+#X connect 7 0 36 0;
+#X connect 8 0 6 1;
+#X connect 9 0 10 0;
+#X connect 10 0 11 0;
+#X connect 11 0 6 0;
+#X connect 12 0 10 0;
+#X connect 13 0 40 0;
+#X connect 13 0 19 0;
+#X connect 14 0 15 0;
+#X connect 15 0 37 0;
+#X connect 15 0 38 0;
+#X connect 15 0 39 0;
+#X connect 16 0 4 1;
+#X connect 17 0 18 0;
+#X connect 17 0 20 1;
+#X connect 17 0 9 0;
+#X connect 17 0 4 0;
+#X connect 18 0 19 0;
+#X connect 19 0 21 1;
+#X connect 20 0 17 0;
+#X connect 21 0 17 0;
+#X connect 22 0 20 0;
+#X connect 23 0 24 0;
+#X connect 24 0 1 0;
+#X connect 24 0 25 1;
+#X connect 25 0 45 0;
+#X connect 26 0 30 0;
+#X connect 27 0 30 0;
+#X connect 28 0 29 0;
+#X connect 29 0 41 0;
+#X connect 29 1 42 0;
+#X connect 30 0 28 0;
+#X connect 30 1 32 0;
+#X connect 31 0 32 1;
+#X connect 31 0 0 0;
+#X connect 32 0 28 1;
+#X connect 33 0 43 0;
+#X connect 33 0 44 0;
+#X connect 34 0 33 0;
+#X connect 35 0 21 0;
+#X connect 35 0 53 0;
+#X connect 36 0 14 0;
+#X connect 37 0 26 0;
+#X connect 37 1 26 0;
+#X connect 37 2 26 0;
+#X connect 37 3 26 0;
+#X connect 37 4 26 0;
+#X connect 38 0 25 0;
+#X connect 38 1 25 0;
+#X connect 39 0 27 0;
+#X connect 39 1 27 0;
+#X connect 39 2 27 0;
+#X connect 39 3 27 0;
+#X connect 39 4 27 0;
+#X connect 40 0 16 0;
+#X connect 41 0 31 0;
+#X connect 42 0 31 0;
+#X connect 43 0 0 0;
+#X connect 43 0 31 0;
+#X connect 44 0 1 0;
+#X connect 44 0 24 0;
+#X connect 45 0 23 0;
+#X connect 46 0 2 0;
+#X connect 46 0 3 0;
+#X connect 47 0 20 0;
+#X connect 49 0 50 0;
+#X connect 49 0 52 1;
+#X connect 49 0 55 1;
+#X connect 50 0 51 0;
+#X connect 51 0 53 1;
+#X connect 52 0 49 0;
+#X connect 53 0 49 0;
+#X connect 54 0 52 0;
+#X connect 55 0 48 0;
+#X connect 56 0 51 0;
+#X restore 190 180 pd Enemy33;
+#N canvas 472 20 606 706 Enemy34 0;
+#X obj 200 580 pack 0 0;
+#X obj 220 550 t b f;
+#X msg 480 240 -10;
+#X msg 510 240 -10;
+#X obj 160 210 metro;
+#X obj 160 235 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 230 190 int 1;
+#X floatatom 230 222 5 0 0 0 - - -, f 5;
+#X obj 300 232 + 1;
+#X obj 100 200 sel 0;
+#X obj 100 225 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X msg 100 248 -1;
+#X obj 40 200 loadbang;
+#X obj 190 110 loadbang;
+#X obj 230 271 + 1;
+#X floatatom 230 300 5 0 0 0 - - -, f 5;
+#X floatatom 190 160 5 0 0 0 - - -, f 5;
+#X obj 60 150 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 90 150 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 120 150 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 10 120 spigot;
+#X obj 110 120 spigot;
+#X obj 10 90 receive reset;
+#X msg 250 450 \$1;
+#X floatatom 220 500 5 0 0 0 - - -, f 5;
+#X obj 250 390 f 4;
+#X msg 80 380 1;
+#X msg 150 380 2;
+#X obj 100 439 pack f f;
+#X obj 100 468 route 1 2;
+#X obj 90 410 t f b;
+#X floatatom 120 540 5 0 0 0 - - -, f 5;
+#X obj 170 430 f -3;
+#X obj 10 565 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 10 540 receive round3;
+#X obj 120 80 receive round3;
+#X obj 230 242 % 12;
+#X obj 80 350 sel 1 2 3 4 5;
+#X obj 300 350 sel 6 12;
+#X obj 180 350 sel 7 8 9 10 11;
+#X msg 190 135 550;
+#X obj 100 500 + 1;
+#X obj 140 500 - 1;
+#X msg 10 600 -1.5;
+#X msg 60 600 2.5;
+#X obj 250 425 - 0.8;
+#X obj 480 190 receive hit9;
+#X obj 20 60 receive hit9;
+#X obj 212 661 outlet;
+#X obj 322 641 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 352 641 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 382 641 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 272 611 spigot;
+#X obj 372 611 spigot;
+#X obj 272 581 receive reset;
+#X obj 212 621 spigot;
+#X obj 433 612 loadbang;
+#X connect 0 0 55 0;
+#X connect 1 0 0 0;
+#X connect 1 1 0 1;
+#X connect 2 0 0 0;
+#X connect 3 0 1 0;
+#X connect 4 0 5 0;
+#X connect 5 0 6 0;
+#X connect 6 0 7 0;
+#X connect 6 0 8 0;
+#X connect 7 0 36 0;
+#X connect 8 0 6 1;
+#X connect 9 0 10 0;
+#X connect 10 0 11 0;
+#X connect 11 0 6 0;
+#X connect 12 0 10 0;
+#X connect 13 0 40 0;
+#X connect 13 0 19 0;
+#X connect 14 0 15 0;
+#X connect 15 0 37 0;
+#X connect 15 0 38 0;
+#X connect 15 0 39 0;
+#X connect 16 0 4 1;
+#X connect 17 0 18 0;
+#X connect 17 0 20 1;
+#X connect 17 0 9 0;
+#X connect 17 0 4 0;
+#X connect 18 0 19 0;
+#X connect 19 0 21 1;
+#X connect 20 0 17 0;
+#X connect 21 0 17 0;
+#X connect 22 0 20 0;
+#X connect 23 0 24 0;
+#X connect 24 0 1 0;
+#X connect 24 0 25 1;
+#X connect 25 0 45 0;
+#X connect 26 0 30 0;
+#X connect 27 0 30 0;
+#X connect 28 0 29 0;
+#X connect 29 0 41 0;
+#X connect 29 1 42 0;
+#X connect 30 0 28 0;
+#X connect 30 1 32 0;
+#X connect 31 0 32 1;
+#X connect 31 0 0 0;
+#X connect 32 0 28 1;
+#X connect 33 0 43 0;
+#X connect 33 0 44 0;
+#X connect 34 0 33 0;
+#X connect 35 0 21 0;
+#X connect 35 0 53 0;
+#X connect 36 0 14 0;
+#X connect 37 0 26 0;
+#X connect 37 1 26 0;
+#X connect 37 2 26 0;
+#X connect 37 3 26 0;
+#X connect 37 4 26 0;
+#X connect 38 0 25 0;
+#X connect 38 1 25 0;
+#X connect 39 0 27 0;
+#X connect 39 1 27 0;
+#X connect 39 2 27 0;
+#X connect 39 3 27 0;
+#X connect 39 4 27 0;
+#X connect 40 0 16 0;
+#X connect 41 0 31 0;
+#X connect 42 0 31 0;
+#X connect 43 0 0 0;
+#X connect 43 0 31 0;
+#X connect 44 0 1 0;
+#X connect 44 0 24 0;
+#X connect 45 0 23 0;
+#X connect 46 0 2 0;
+#X connect 46 0 3 0;
+#X connect 47 0 20 0;
+#X connect 49 0 50 0;
+#X connect 49 0 52 1;
+#X connect 49 0 55 1;
+#X connect 50 0 51 0;
+#X connect 51 0 53 1;
+#X connect 52 0 49 0;
+#X connect 53 0 49 0;
+#X connect 54 0 52 0;
+#X connect 55 0 48 0;
+#X connect 56 0 51 0;
+#X restore 340 180 pd Enemy34;
+#N canvas 472 20 606 706 Enemy35 0;
+#X obj 200 580 pack 0 0;
+#X obj 220 550 t b f;
+#X msg 480 240 -10;
+#X msg 510 240 -10;
+#X obj 160 210 metro;
+#X obj 160 235 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 230 190 int 1;
+#X floatatom 230 222 5 0 0 0 - - -, f 5;
+#X obj 300 232 + 1;
+#X obj 100 200 sel 0;
+#X obj 100 225 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X msg 100 248 -1;
+#X obj 40 200 loadbang;
+#X obj 190 110 loadbang;
+#X obj 230 271 + 1;
+#X floatatom 230 300 5 0 0 0 - - -, f 5;
+#X floatatom 190 160 5 0 0 0 - - -, f 5;
+#X obj 60 150 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 90 150 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 120 150 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 10 120 spigot;
+#X obj 110 120 spigot;
+#X obj 10 90 receive reset;
+#X msg 250 450 \$1;
+#X floatatom 220 500 5 0 0 0 - - -, f 5;
+#X obj 250 390 f 4;
+#X msg 80 380 1;
+#X msg 150 380 2;
+#X obj 100 439 pack f f;
+#X obj 100 468 route 1 2;
+#X obj 90 410 t f b;
+#X floatatom 120 540 5 0 0 0 - - -, f 5;
+#X obj 170 430 f -3;
+#X obj 10 565 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 10 540 receive round3;
+#X obj 120 80 receive round3;
+#X obj 230 242 % 12;
+#X obj 80 350 sel 1 2 3 4 5;
+#X obj 300 350 sel 6 12;
+#X obj 180 350 sel 7 8 9 10 11;
+#X msg 190 135 550;
+#X obj 100 500 - 1;
+#X obj 140 500 + 1;
+#X msg 10 600 1;
+#X msg 60 600 2;
+#X obj 250 425 - 0.8;
+#X obj 480 190 receive hit10;
+#X obj 21 60 receive hit10;
+#X obj 221 671 outlet;
+#X obj 331 651 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 361 651 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 391 651 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 281 621 spigot;
+#X obj 381 621 spigot;
+#X obj 281 591 receive reset;
+#X obj 221 631 spigot;
+#X obj 442 622 loadbang;
+#X connect 0 0 55 0;
+#X connect 1 0 0 0;
+#X connect 1 1 0 1;
+#X connect 2 0 0 0;
+#X connect 3 0 1 0;
+#X connect 4 0 5 0;
+#X connect 5 0 6 0;
+#X connect 6 0 7 0;
+#X connect 6 0 8 0;
+#X connect 7 0 36 0;
+#X connect 8 0 6 1;
+#X connect 9 0 10 0;
+#X connect 10 0 11 0;
+#X connect 11 0 6 0;
+#X connect 12 0 10 0;
+#X connect 13 0 40 0;
+#X connect 13 0 19 0;
+#X connect 14 0 15 0;
+#X connect 15 0 37 0;
+#X connect 15 0 38 0;
+#X connect 15 0 39 0;
+#X connect 16 0 4 1;
+#X connect 17 0 18 0;
+#X connect 17 0 20 1;
+#X connect 17 0 9 0;
+#X connect 17 0 4 0;
+#X connect 18 0 19 0;
+#X connect 19 0 21 1;
+#X connect 20 0 17 0;
+#X connect 21 0 17 0;
+#X connect 22 0 20 0;
+#X connect 23 0 24 0;
+#X connect 24 0 1 0;
+#X connect 24 0 25 1;
+#X connect 25 0 45 0;
+#X connect 26 0 30 0;
+#X connect 27 0 30 0;
+#X connect 28 0 29 0;
+#X connect 29 0 41 0;
+#X connect 29 1 42 0;
+#X connect 30 0 28 0;
+#X connect 30 1 32 0;
+#X connect 31 0 32 1;
+#X connect 31 0 0 0;
+#X connect 32 0 28 1;
+#X connect 33 0 43 0;
+#X connect 33 0 44 0;
+#X connect 34 0 33 0;
+#X connect 35 0 21 0;
+#X connect 35 0 53 0;
+#X connect 36 0 14 0;
+#X connect 37 0 26 0;
+#X connect 37 1 26 0;
+#X connect 37 2 26 0;
+#X connect 37 3 26 0;
+#X connect 37 4 26 0;
+#X connect 38 0 25 0;
+#X connect 38 1 25 0;
+#X connect 39 0 27 0;
+#X connect 39 1 27 0;
+#X connect 39 2 27 0;
+#X connect 39 3 27 0;
+#X connect 39 4 27 0;
+#X connect 40 0 16 0;
+#X connect 41 0 31 0;
+#X connect 42 0 31 0;
+#X connect 43 0 0 0;
+#X connect 43 0 31 0;
+#X connect 44 0 1 0;
+#X connect 44 0 24 0;
+#X connect 45 0 23 0;
+#X connect 46 0 2 0;
+#X connect 46 0 3 0;
+#X connect 47 0 20 0;
+#X connect 49 0 50 0;
+#X connect 49 0 52 1;
+#X connect 49 0 55 1;
+#X connect 50 0 51 0;
+#X connect 51 0 53 1;
+#X connect 52 0 49 0;
+#X connect 53 0 49 0;
+#X connect 54 0 52 0;
+#X connect 55 0 48 0;
+#X connect 56 0 51 0;
+#X restore 490 180 pd Enemy35;
+#N canvas 472 20 606 706 Enemy36 0;
+#X obj 200 580 pack 0 0;
+#X obj 220 550 t b f;
+#X msg 480 240 -10;
+#X msg 510 240 -10;
+#X obj 160 210 metro;
+#X obj 160 235 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 230 190 int 1;
+#X floatatom 230 222 5 0 0 0 - - -, f 5;
+#X obj 300 232 + 1;
+#X obj 100 200 sel 0;
+#X obj 100 225 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X msg 100 248 -1;
+#X obj 40 200 loadbang;
+#X obj 190 110 loadbang;
+#X obj 230 271 + 1;
+#X floatatom 230 300 5 0 0 0 - - -, f 5;
+#X floatatom 190 160 5 0 0 0 - - -, f 5;
+#X obj 60 150 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 90 150 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 120 150 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 10 120 spigot;
+#X obj 110 120 spigot;
+#X obj 10 90 receive reset;
+#X msg 250 450 \$1;
+#X floatatom 220 500 5 0 0 0 - - -, f 5;
+#X obj 250 390 f 4;
+#X msg 80 380 1;
+#X msg 150 380 2;
+#X obj 100 439 pack f f;
+#X obj 100 468 route 1 2;
+#X obj 90 410 t f b;
+#X floatatom 120 540 5 0 0 0 - - -, f 5;
+#X obj 170 430 f -3;
+#X obj 10 565 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 10 540 receive round3;
+#X obj 120 80 receive round3;
+#X obj 230 242 % 12;
+#X obj 80 350 sel 1 2 3 4 5;
+#X obj 300 350 sel 6 12;
+#X obj 180 350 sel 7 8 9 10 11;
+#X msg 190 135 550;
+#X obj 100 500 - 1;
+#X obj 140 500 + 1;
+#X msg 10 600 2;
+#X msg 60 600 2;
+#X obj 250 425 - 0.8;
+#X obj 480 190 receive hit11;
+#X obj 20 60 receive hit11;
+#X obj 212 665 outlet;
+#X obj 322 645 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 352 645 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 382 645 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 272 615 spigot;
+#X obj 372 615 spigot;
+#X obj 272 585 receive reset;
+#X obj 212 625 spigot;
+#X obj 433 616 loadbang;
+#X connect 0 0 55 0;
+#X connect 1 0 0 0;
+#X connect 1 1 0 1;
+#X connect 2 0 0 0;
+#X connect 3 0 1 0;
+#X connect 4 0 5 0;
+#X connect 5 0 6 0;
+#X connect 6 0 7 0;
+#X connect 6 0 8 0;
+#X connect 7 0 36 0;
+#X connect 8 0 6 1;
+#X connect 9 0 10 0;
+#X connect 10 0 11 0;
+#X connect 11 0 6 0;
+#X connect 12 0 10 0;
+#X connect 13 0 40 0;
+#X connect 13 0 19 0;
+#X connect 14 0 15 0;
+#X connect 15 0 37 0;
+#X connect 15 0 38 0;
+#X connect 15 0 39 0;
+#X connect 16 0 4 1;
+#X connect 17 0 18 0;
+#X connect 17 0 20 1;
+#X connect 17 0 9 0;
+#X connect 17 0 4 0;
+#X connect 18 0 19 0;
+#X connect 19 0 21 1;
+#X connect 20 0 17 0;
+#X connect 21 0 17 0;
+#X connect 22 0 20 0;
+#X connect 23 0 24 0;
+#X connect 24 0 1 0;
+#X connect 24 0 25 1;
+#X connect 25 0 45 0;
+#X connect 26 0 30 0;
+#X connect 27 0 30 0;
+#X connect 28 0 29 0;
+#X connect 29 0 41 0;
+#X connect 29 1 42 0;
+#X connect 30 0 28 0;
+#X connect 30 1 32 0;
+#X connect 31 0 32 1;
+#X connect 31 0 0 0;
+#X connect 32 0 28 1;
+#X connect 33 0 43 0;
+#X connect 33 0 44 0;
+#X connect 34 0 33 0;
+#X connect 35 0 21 0;
+#X connect 35 0 53 0;
+#X connect 36 0 14 0;
+#X connect 37 0 26 0;
+#X connect 37 1 26 0;
+#X connect 37 2 26 0;
+#X connect 37 3 26 0;
+#X connect 37 4 26 0;
+#X connect 38 0 25 0;
+#X connect 38 1 25 0;
+#X connect 39 0 27 0;
+#X connect 39 1 27 0;
+#X connect 39 2 27 0;
+#X connect 39 3 27 0;
+#X connect 39 4 27 0;
+#X connect 40 0 16 0;
+#X connect 41 0 31 0;
+#X connect 42 0 31 0;
+#X connect 43 0 0 0;
+#X connect 43 0 31 0;
+#X connect 44 0 1 0;
+#X connect 44 0 24 0;
+#X connect 45 0 23 0;
+#X connect 46 0 2 0;
+#X connect 46 0 3 0;
+#X connect 47 0 20 0;
+#X connect 49 0 50 0;
+#X connect 49 0 52 1;
+#X connect 49 0 55 1;
+#X connect 50 0 51 0;
+#X connect 51 0 53 1;
+#X connect 52 0 49 0;
+#X connect 53 0 49 0;
+#X connect 54 0 52 0;
+#X connect 55 0 48 0;
+#X connect 56 0 51 0;
+#X restore 640 180 pd Enemy36;
+#N canvas 472 20 606 706 Enemy37 0;
+#X obj 200 580 pack 0 0;
+#X obj 220 550 t b f;
+#X msg 480 240 -10;
+#X msg 510 240 -10;
+#X obj 160 210 metro;
+#X obj 160 235 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 230 190 int 1;
+#X floatatom 230 222 5 0 0 0 - - -, f 5;
+#X obj 300 232 + 1;
+#X obj 100 200 sel 0;
+#X obj 100 225 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X msg 100 248 -1;
+#X obj 40 200 loadbang;
+#X obj 190 110 loadbang;
+#X obj 230 271 + 1;
+#X floatatom 230 300 5 0 0 0 - - -, f 5;
+#X floatatom 190 160 5 0 0 0 - - -, f 5;
+#X obj 60 150 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 90 150 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 120 150 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 10 120 spigot;
+#X obj 110 120 spigot;
+#X obj 10 90 receive reset;
+#X msg 250 450 \$1;
+#X floatatom 220 500 5 0 0 0 - - -, f 5;
+#X obj 250 390 f 4;
+#X msg 80 380 1;
+#X msg 150 380 2;
+#X obj 100 439 pack f f;
+#X obj 100 468 route 1 2;
+#X obj 90 410 t f b;
+#X floatatom 120 540 5 0 0 0 - - -, f 5;
+#X obj 170 430 f -3;
+#X obj 10 565 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 10 540 receive round3;
+#X obj 120 80 receive round3;
+#X obj 230 242 % 12;
+#X obj 80 350 sel 1 2 3 4 5;
+#X obj 300 350 sel 6 12;
+#X obj 180 350 sel 7 8 9 10 11;
+#X msg 190 135 550;
+#X obj 100 500 - 1;
+#X obj 140 500 + 1;
+#X msg 10 600 3;
+#X msg 60 600 2;
+#X obj 250 430 - 0.8;
+#X obj 480 190 receive hit12;
+#X obj 21 60 receive hit12;
+#X obj 192 671 outlet;
+#X obj 302 651 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 332 651 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 362 651 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 252 621 spigot;
+#X obj 352 621 spigot;
+#X obj 252 591 receive reset;
+#X obj 192 631 spigot;
+#X obj 413 622 loadbang;
+#X connect 0 0 55 0;
+#X connect 1 0 0 0;
+#X connect 1 1 0 1;
+#X connect 2 0 0 0;
+#X connect 3 0 1 0;
+#X connect 4 0 5 0;
+#X connect 5 0 6 0;
+#X connect 6 0 7 0;
+#X connect 6 0 8 0;
+#X connect 7 0 36 0;
+#X connect 8 0 6 1;
+#X connect 9 0 10 0;
+#X connect 10 0 11 0;
+#X connect 11 0 6 0;
+#X connect 12 0 10 0;
+#X connect 13 0 40 0;
+#X connect 13 0 19 0;
+#X connect 14 0 15 0;
+#X connect 15 0 37 0;
+#X connect 15 0 38 0;
+#X connect 15 0 39 0;
+#X connect 16 0 4 1;
+#X connect 17 0 18 0;
+#X connect 17 0 20 1;
+#X connect 17 0 9 0;
+#X connect 17 0 4 0;
+#X connect 18 0 19 0;
+#X connect 19 0 21 1;
+#X connect 20 0 17 0;
+#X connect 21 0 17 0;
+#X connect 22 0 20 0;
+#X connect 23 0 24 0;
+#X connect 24 0 1 0;
+#X connect 24 0 25 1;
+#X connect 25 0 45 0;
+#X connect 26 0 30 0;
+#X connect 27 0 30 0;
+#X connect 28 0 29 0;
+#X connect 29 0 41 0;
+#X connect 29 1 42 0;
+#X connect 30 0 28 0;
+#X connect 30 1 32 0;
+#X connect 31 0 32 1;
+#X connect 31 0 0 0;
+#X connect 32 0 28 1;
+#X connect 33 0 43 0;
+#X connect 33 0 44 0;
+#X connect 34 0 33 0;
+#X connect 35 0 21 0;
+#X connect 35 0 53 0;
+#X connect 36 0 14 0;
+#X connect 37 0 26 0;
+#X connect 37 1 26 0;
+#X connect 37 2 26 0;
+#X connect 37 3 26 0;
+#X connect 37 4 26 0;
+#X connect 38 0 25 0;
+#X connect 38 1 25 0;
+#X connect 39 0 27 0;
+#X connect 39 1 27 0;
+#X connect 39 2 27 0;
+#X connect 39 3 27 0;
+#X connect 39 4 27 0;
+#X connect 40 0 16 0;
+#X connect 41 0 31 0;
+#X connect 42 0 31 0;
+#X connect 43 0 0 0;
+#X connect 43 0 31 0;
+#X connect 44 0 1 0;
+#X connect 44 0 24 0;
+#X connect 45 0 23 0;
+#X connect 46 0 2 0;
+#X connect 46 0 3 0;
+#X connect 47 0 20 0;
+#X connect 49 0 50 0;
+#X connect 49 0 52 1;
+#X connect 49 0 55 1;
+#X connect 50 0 51 0;
+#X connect 51 0 53 1;
+#X connect 52 0 49 0;
+#X connect 53 0 49 0;
+#X connect 54 0 52 0;
+#X connect 55 0 48 0;
+#X connect 56 0 51 0;
+#X restore 790 180 pd Enemy37;
+#N canvas 126 40 612 712 Enemy26 0;
+#X obj 200 580 pack 0 0;
+#X obj 220 550 t b f;
+#X msg 480 240 -10;
+#X msg 510 240 -10;
+#X obj 160 210 metro;
+#X obj 160 235 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 230 190 int 1;
+#X floatatom 230 222 5 0 0 0 - - -, f 5;
+#X obj 300 232 + 1;
+#X obj 100 200 sel 0;
+#X obj 100 225 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X msg 100 248 -1;
+#X obj 40 200 loadbang;
+#X obj 190 110 loadbang;
+#X obj 230 271 + 1;
+#X floatatom 230 300 5 0 0 0 - - -, f 5;
+#X floatatom 190 160 5 0 0 0 - - -, f 5;
+#X obj 60 150 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 90 150 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 120 150 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 10 120 spigot;
+#X obj 110 120 spigot;
+#X obj 10 90 receive reset;
+#X msg 250 450 \$1;
+#X floatatom 220 500 5 0 0 0 - - -, f 5;
+#X obj 250 390 f 4;
+#X msg 80 380 1;
+#X msg 150 380 2;
+#X obj 100 439 pack f f;
+#X obj 100 468 route 1 2;
+#X obj 90 410 t f b;
+#X floatatom 120 540 5 0 0 0 - - -, f 5;
+#X obj 170 430 f -3;
+#X obj 10 565 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 10 540 receive round3;
+#X obj 120 80 receive round3;
+#X obj 230 242 % 12;
+#X obj 80 350 sel 1 2 3 4 5;
+#X obj 300 350 sel 6 12;
+#X obj 180 350 sel 7 8 9 10 11;
+#X msg 190 135 550;
+#X msg 60 600 3.5;
+#X msg 10 600 -3;
+#X obj 100 500 + 1;
+#X obj 140 500 - 1;
+#X obj 250 425 - 0.8;
+#X obj 480 190 receive hit1;
+#X obj 21 60 receive hit1;
+#X obj 210 679 outlet;
+#X obj 320 659 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 350 659 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 380 659 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 270 629 spigot;
+#X obj 370 629 spigot;
+#X obj 270 599 receive reset;
+#X obj 210 639 spigot;
+#X obj 431 630 loadbang;
+#X connect 0 0 55 0;
+#X connect 1 0 0 0;
+#X connect 1 1 0 1;
+#X connect 2 0 0 0;
+#X connect 3 0 1 0;
+#X connect 4 0 5 0;
+#X connect 5 0 6 0;
+#X connect 6 0 7 0;
+#X connect 6 0 8 0;
+#X connect 7 0 36 0;
+#X connect 8 0 6 1;
+#X connect 9 0 10 0;
+#X connect 10 0 11 0;
+#X connect 11 0 6 0;
+#X connect 12 0 10 0;
+#X connect 13 0 40 0;
+#X connect 13 0 19 0;
+#X connect 14 0 15 0;
+#X connect 15 0 37 0;
+#X connect 15 0 38 0;
+#X connect 15 0 39 0;
+#X connect 16 0 4 1;
+#X connect 17 0 18 0;
+#X connect 17 0 20 1;
+#X connect 17 0 9 0;
+#X connect 17 0 4 0;
+#X connect 18 0 19 0;
+#X connect 19 0 21 1;
+#X connect 20 0 17 0;
+#X connect 21 0 17 0;
+#X connect 22 0 20 0;
+#X connect 23 0 24 0;
+#X connect 24 0 1 0;
+#X connect 24 0 25 1;
+#X connect 25 0 45 0;
+#X connect 26 0 30 0;
+#X connect 27 0 30 0;
+#X connect 28 0 29 0;
+#X connect 29 0 43 0;
+#X connect 29 1 44 0;
+#X connect 30 0 28 0;
+#X connect 30 1 32 0;
+#X connect 31 0 32 1;
+#X connect 31 0 0 0;
+#X connect 32 0 28 1;
+#X connect 33 0 42 0;
+#X connect 33 0 41 0;
+#X connect 34 0 33 0;
+#X connect 35 0 21 0;
+#X connect 35 0 53 0;
+#X connect 36 0 14 0;
+#X connect 37 0 26 0;
+#X connect 37 1 26 0;
+#X connect 37 2 26 0;
+#X connect 37 3 26 0;
+#X connect 37 4 26 0;
+#X connect 38 0 25 0;
+#X connect 38 1 25 0;
+#X connect 39 0 27 0;
+#X connect 39 1 27 0;
+#X connect 39 2 27 0;
+#X connect 39 3 27 0;
+#X connect 39 4 27 0;
+#X connect 40 0 16 0;
+#X connect 41 0 1 0;
+#X connect 41 0 24 0;
+#X connect 42 0 0 0;
+#X connect 42 0 31 0;
+#X connect 43 0 31 0;
+#X connect 44 0 31 0;
+#X connect 45 0 23 0;
+#X connect 46 0 2 0;
+#X connect 46 0 3 0;
+#X connect 47 0 20 0;
+#X connect 49 0 50 0;
+#X connect 49 0 52 1;
+#X connect 49 0 55 1;
+#X connect 50 0 51 0;
+#X connect 51 0 53 1;
+#X connect 52 0 49 0;
+#X connect 53 0 49 0;
+#X connect 54 0 52 0;
+#X connect 55 0 48 0;
+#X connect 56 0 51 0;
+#X restore 30 50 pd Enemy26;
+#N canvas 336 48 610 706 Enemy26 0;
+#X obj 200 580 pack 0 0;
+#X obj 220 550 t b f;
+#X msg 480 240 -10;
+#X msg 510 240 -10;
+#X obj 160 210 metro;
+#X obj 160 235 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 230 190 int 1;
+#X floatatom 230 222 5 0 0 0 - - -, f 5;
+#X obj 300 232 + 1;
+#X obj 100 200 sel 0;
+#X obj 100 225 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X msg 100 248 -1;
+#X obj 40 200 loadbang;
+#X obj 190 110 loadbang;
+#X obj 230 271 + 1;
+#X floatatom 230 300 5 0 0 0 - - -, f 5;
+#X floatatom 190 160 5 0 0 0 - - -, f 5;
+#X obj 60 150 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 90 150 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 120 150 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 10 120 spigot;
+#X obj 110 120 spigot;
+#X obj 10 90 receive reset;
+#X msg 250 450 \$1;
+#X floatatom 220 500 5 0 0 0 - - -, f 5;
+#X obj 250 390 f 4;
+#X msg 80 380 1;
+#X msg 150 380 2;
+#X obj 100 439 pack f f;
+#X obj 100 468 route 1 2;
+#X obj 90 410 t f b;
+#X floatatom 120 540 5 0 0 0 - - -, f 5;
+#X obj 170 430 f -3;
+#X obj 10 565 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 10 540 receive round3;
+#X obj 120 80 receive round3;
+#X obj 230 242 % 12;
+#X obj 80 350 sel 1 2 3 4 5;
+#X obj 300 350 sel 6 12;
+#X obj 180 350 sel 7 8 9 10 11;
+#X msg 190 135 550;
+#X msg 60 600 3.5;
+#X msg 10 600 -3;
+#X obj 100 500 + 1;
+#X obj 140 500 - 1;
+#X obj 250 425 - 0.8;
+#X obj 480 190 receive hit1;
+#X obj 20 60 receive hit1;
+#X obj 222 671 outlet;
+#X obj 332 651 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 362 651 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 392 651 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 282 621 spigot;
+#X obj 382 621 spigot;
+#X obj 282 591 receive reset;
+#X obj 222 631 spigot;
+#X obj 443 622 loadbang;
+#X connect 0 0 55 0;
+#X connect 1 0 0 0;
+#X connect 1 1 0 1;
+#X connect 2 0 0 0;
+#X connect 3 0 1 0;
+#X connect 4 0 5 0;
+#X connect 5 0 6 0;
+#X connect 6 0 7 0;
+#X connect 6 0 8 0;
+#X connect 7 0 36 0;
+#X connect 8 0 6 1;
+#X connect 9 0 10 0;
+#X connect 10 0 11 0;
+#X connect 11 0 6 0;
+#X connect 12 0 10 0;
+#X connect 13 0 40 0;
+#X connect 13 0 19 0;
+#X connect 14 0 15 0;
+#X connect 15 0 37 0;
+#X connect 15 0 38 0;
+#X connect 15 0 39 0;
+#X connect 16 0 4 1;
+#X connect 17 0 18 0;
+#X connect 17 0 20 1;
+#X connect 17 0 9 0;
+#X connect 17 0 4 0;
+#X connect 18 0 19 0;
+#X connect 19 0 21 1;
+#X connect 20 0 17 0;
+#X connect 21 0 17 0;
+#X connect 22 0 20 0;
+#X connect 23 0 24 0;
+#X connect 24 0 1 0;
+#X connect 24 0 25 1;
+#X connect 25 0 45 0;
+#X connect 26 0 30 0;
+#X connect 27 0 30 0;
+#X connect 28 0 29 0;
+#X connect 29 0 43 0;
+#X connect 29 1 44 0;
+#X connect 30 0 28 0;
+#X connect 30 1 32 0;
+#X connect 31 0 32 1;
+#X connect 31 0 0 0;
+#X connect 32 0 28 1;
+#X connect 33 0 42 0;
+#X connect 33 0 41 0;
+#X connect 34 0 33 0;
+#X connect 35 0 21 0;
+#X connect 35 0 53 0;
+#X connect 36 0 14 0;
+#X connect 37 0 26 0;
+#X connect 37 1 26 0;
+#X connect 37 2 26 0;
+#X connect 37 3 26 0;
+#X connect 37 4 26 0;
+#X connect 38 0 25 0;
+#X connect 38 1 25 0;
+#X connect 39 0 27 0;
+#X connect 39 1 27 0;
+#X connect 39 2 27 0;
+#X connect 39 3 27 0;
+#X connect 39 4 27 0;
+#X connect 40 0 16 0;
+#X connect 41 0 1 0;
+#X connect 41 0 24 0;
+#X connect 42 0 0 0;
+#X connect 42 0 31 0;
+#X connect 43 0 31 0;
+#X connect 44 0 31 0;
+#X connect 45 0 23 0;
+#X connect 46 0 2 0;
+#X connect 46 0 3 0;
+#X connect 47 0 20 0;
+#X connect 49 0 50 0;
+#X connect 49 0 52 1;
+#X connect 49 0 55 1;
+#X connect 50 0 51 0;
+#X connect 51 0 53 1;
+#X connect 52 0 49 0;
+#X connect 53 0 49 0;
+#X connect 54 0 52 0;
+#X connect 55 0 48 0;
+#X connect 56 0 51 0;
+#X restore 40 370 pd Enemy26;
+#N canvas 472 20 606 706 Enemy32 0;
+#X obj 200 580 pack 0 0;
+#X obj 220 550 t b f;
+#X msg 480 240 -10;
+#X msg 510 240 -10;
+#X obj 160 210 metro;
+#X obj 160 235 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 230 190 int 1;
+#X floatatom 230 222 5 0 0 0 - - -, f 5;
+#X obj 300 232 + 1;
+#X obj 100 200 sel 0;
+#X obj 100 225 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X msg 100 248 -1;
+#X obj 40 200 loadbang;
+#X obj 190 110 loadbang;
+#X obj 230 271 + 1;
+#X floatatom 230 300 5 0 0 0 - - -, f 5;
+#X floatatom 190 160 5 0 0 0 - - -, f 5;
+#X obj 60 150 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 90 150 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 120 150 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 10 120 spigot;
+#X obj 110 120 spigot;
+#X obj 10 90 receive reset;
+#X msg 250 450 \$1;
+#X floatatom 220 500 5 0 0 0 - - -, f 5;
+#X obj 250 390 f 4;
+#X msg 80 380 1;
+#X msg 150 380 2;
+#X obj 100 439 pack f f;
+#X obj 100 468 route 1 2;
+#X obj 90 410 t f b;
+#X floatatom 120 540 5 0 0 0 - - -, f 5;
+#X obj 170 430 f -3;
+#X obj 10 565 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 10 540 receive round3;
+#X obj 120 80 receive round3;
+#X obj 230 242 % 12;
+#X obj 80 350 sel 1 2 3 4 5;
+#X obj 300 350 sel 6 12;
+#X obj 180 350 sel 7 8 9 10 11;
+#X msg 190 135 550;
+#X obj 100 500 + 1;
+#X obj 140 500 - 1;
+#X msg 60 600 2.5;
+#X msg 10 600 -3.5;
+#X obj 250 425 - 0.8;
+#X obj 480 190 receive hit7;
+#X obj 21 60 receive hit7;
+#X obj 199 661 outlet;
+#X obj 309 641 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 339 641 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 369 641 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 259 611 spigot;
+#X obj 359 611 spigot;
+#X obj 259 581 receive reset;
+#X obj 199 621 spigot;
+#X obj 420 612 loadbang;
+#X connect 0 0 55 0;
+#X connect 1 0 0 0;
+#X connect 1 1 0 1;
+#X connect 2 0 0 0;
+#X connect 3 0 1 0;
+#X connect 4 0 5 0;
+#X connect 5 0 6 0;
+#X connect 6 0 7 0;
+#X connect 6 0 8 0;
+#X connect 7 0 36 0;
+#X connect 8 0 6 1;
+#X connect 9 0 10 0;
+#X connect 10 0 11 0;
+#X connect 11 0 6 0;
+#X connect 12 0 10 0;
+#X connect 13 0 40 0;
+#X connect 13 0 19 0;
+#X connect 14 0 15 0;
+#X connect 15 0 37 0;
+#X connect 15 0 38 0;
+#X connect 15 0 39 0;
+#X connect 16 0 4 1;
+#X connect 17 0 18 0;
+#X connect 17 0 20 1;
+#X connect 17 0 9 0;
+#X connect 17 0 4 0;
+#X connect 18 0 19 0;
+#X connect 19 0 21 1;
+#X connect 20 0 17 0;
+#X connect 21 0 17 0;
+#X connect 22 0 20 0;
+#X connect 23 0 24 0;
+#X connect 24 0 1 0;
+#X connect 24 0 25 1;
+#X connect 25 0 45 0;
+#X connect 26 0 30 0;
+#X connect 27 0 30 0;
+#X connect 28 0 29 0;
+#X connect 29 0 41 0;
+#X connect 29 1 42 0;
+#X connect 30 0 28 0;
+#X connect 30 1 32 0;
+#X connect 31 0 32 1;
+#X connect 31 0 0 0;
+#X connect 32 0 28 1;
+#X connect 33 0 44 0;
+#X connect 33 0 43 0;
+#X connect 34 0 33 0;
+#X connect 35 0 21 0;
+#X connect 35 0 53 0;
+#X connect 36 0 14 0;
+#X connect 37 0 26 0;
+#X connect 37 1 26 0;
+#X connect 37 2 26 0;
+#X connect 37 3 26 0;
+#X connect 37 4 26 0;
+#X connect 38 0 25 0;
+#X connect 38 1 25 0;
+#X connect 39 0 27 0;
+#X connect 39 1 27 0;
+#X connect 39 2 27 0;
+#X connect 39 3 27 0;
+#X connect 39 4 27 0;
+#X connect 40 0 16 0;
+#X connect 41 0 31 0;
+#X connect 42 0 31 0;
+#X connect 43 0 1 0;
+#X connect 43 0 24 0;
+#X connect 44 0 0 0;
+#X connect 44 0 31 0;
+#X connect 45 0 23 0;
+#X connect 46 0 2 0;
+#X connect 46 0 3 0;
+#X connect 47 0 20 0;
+#X connect 49 0 50 0;
+#X connect 49 0 52 1;
+#X connect 49 0 55 1;
+#X connect 50 0 51 0;
+#X connect 51 0 53 1;
+#X connect 52 0 49 0;
+#X connect 53 0 49 0;
+#X connect 54 0 52 0;
+#X connect 55 0 48 0;
+#X connect 56 0 51 0;
+#X restore 40 500 pd Enemy32;
+#N canvas 472 20 606 706 Enemy27 0;
+#X obj 200 580 pack 0 0;
+#X obj 220 550 t b f;
+#X msg 480 240 -10;
+#X msg 510 240 -10;
+#X obj 160 210 metro;
+#X obj 160 235 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 230 190 int 1;
+#X floatatom 230 222 5 0 0 0 - - -, f 5;
+#X obj 300 232 + 1;
+#X obj 100 200 sel 0;
+#X obj 100 225 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X msg 100 248 -1;
+#X obj 40 200 loadbang;
+#X obj 190 110 loadbang;
+#X obj 230 271 + 1;
+#X floatatom 230 300 5 0 0 0 - - -, f 5;
+#X floatatom 190 160 5 0 0 0 - - -, f 5;
+#X obj 60 150 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 90 150 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 120 150 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 10 120 spigot;
+#X obj 110 120 spigot;
+#X obj 10 90 receive reset;
+#X msg 250 450 \$1;
+#X floatatom 220 500 5 0 0 0 - - -, f 5;
+#X obj 250 390 f 4;
+#X msg 80 380 1;
+#X msg 150 380 2;
+#X obj 100 439 pack f f;
+#X obj 100 468 route 1 2;
+#X obj 90 410 t f b;
+#X floatatom 120 540 5 0 0 0 - - -, f 5;
+#X obj 170 430 f -3;
+#X obj 10 565 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 10 540 receive round3;
+#X obj 120 80 receive round3;
+#X obj 230 242 % 12;
+#X obj 80 350 sel 1 2 3 4 5;
+#X obj 300 350 sel 6 12;
+#X obj 180 350 sel 7 8 9 10 11;
+#X msg 190 135 550;
+#X msg 60 600 3.5;
+#X obj 100 500 + 1;
+#X obj 140 500 - 1;
+#X msg 10 600 -2;
+#X obj 250 425 - 0.8;
+#X obj 480 190 receive hit2;
+#X obj 21 60 receive hit2;
+#X obj 202 670 outlet;
+#X obj 312 650 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 342 650 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 372 650 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 262 620 spigot;
+#X obj 362 620 spigot;
+#X obj 262 590 receive reset;
+#X obj 202 630 spigot;
+#X obj 423 621 loadbang;
+#X connect 0 0 55 0;
+#X connect 1 0 0 0;
+#X connect 1 1 0 1;
+#X connect 2 0 0 0;
+#X connect 3 0 1 0;
+#X connect 4 0 5 0;
+#X connect 5 0 6 0;
+#X connect 6 0 7 0;
+#X connect 6 0 8 0;
+#X connect 7 0 36 0;
+#X connect 8 0 6 1;
+#X connect 9 0 10 0;
+#X connect 10 0 11 0;
+#X connect 11 0 6 0;
+#X connect 12 0 10 0;
+#X connect 13 0 40 0;
+#X connect 13 0 19 0;
+#X connect 14 0 15 0;
+#X connect 15 0 37 0;
+#X connect 15 0 38 0;
+#X connect 15 0 39 0;
+#X connect 16 0 4 1;
+#X connect 17 0 18 0;
+#X connect 17 0 20 1;
+#X connect 17 0 9 0;
+#X connect 17 0 4 0;
+#X connect 18 0 19 0;
+#X connect 19 0 21 1;
+#X connect 20 0 17 0;
+#X connect 21 0 17 0;
+#X connect 22 0 20 0;
+#X connect 23 0 24 0;
+#X connect 24 0 1 0;
+#X connect 24 0 25 1;
+#X connect 25 0 45 0;
+#X connect 26 0 30 0;
+#X connect 27 0 30 0;
+#X connect 28 0 29 0;
+#X connect 29 0 42 0;
+#X connect 29 1 43 0;
+#X connect 30 0 28 0;
+#X connect 30 1 32 0;
+#X connect 31 0 32 1;
+#X connect 31 0 0 0;
+#X connect 32 0 28 1;
+#X connect 33 0 44 0;
+#X connect 33 0 41 0;
+#X connect 34 0 33 0;
+#X connect 35 0 21 0;
+#X connect 35 0 53 0;
+#X connect 36 0 14 0;
+#X connect 37 0 26 0;
+#X connect 37 1 26 0;
+#X connect 37 2 26 0;
+#X connect 37 3 26 0;
+#X connect 37 4 26 0;
+#X connect 38 0 25 0;
+#X connect 38 1 25 0;
+#X connect 39 0 27 0;
+#X connect 39 1 27 0;
+#X connect 39 2 27 0;
+#X connect 39 3 27 0;
+#X connect 39 4 27 0;
+#X connect 40 0 16 0;
+#X connect 41 0 1 0;
+#X connect 41 0 24 0;
+#X connect 42 0 31 0;
+#X connect 43 0 31 0;
+#X connect 44 0 0 0;
+#X connect 44 0 31 0;
+#X connect 45 0 23 0;
+#X connect 46 0 2 0;
+#X connect 46 0 3 0;
+#X connect 47 0 20 0;
+#X connect 49 0 50 0;
+#X connect 49 0 52 1;
+#X connect 49 0 55 1;
+#X connect 50 0 51 0;
+#X connect 51 0 53 1;
+#X connect 52 0 49 0;
+#X connect 53 0 49 0;
+#X connect 54 0 52 0;
+#X connect 55 0 48 0;
+#X connect 56 0 51 0;
+#X restore 200 370 pd Enemy27;
+#N canvas 472 20 606 706 Enemy33 0;
+#X obj 200 580 pack 0 0;
+#X obj 220 550 t b f;
+#X msg 480 240 -10;
+#X msg 510 240 -10;
+#X obj 160 210 metro;
+#X obj 160 235 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 230 190 int 1;
+#X floatatom 230 222 5 0 0 0 - - -, f 5;
+#X obj 300 232 + 1;
+#X obj 100 200 sel 0;
+#X obj 100 225 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X msg 100 248 -1;
+#X obj 40 200 loadbang;
+#X obj 190 110 loadbang;
+#X obj 230 271 + 1;
+#X floatatom 230 300 5 0 0 0 - - -, f 5;
+#X floatatom 190 160 5 0 0 0 - - -, f 5;
+#X obj 60 150 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 90 150 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 120 150 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 10 120 spigot;
+#X obj 110 120 spigot;
+#X obj 10 90 receive reset;
+#X msg 250 450 \$1;
+#X floatatom 220 500 5 0 0 0 - - -, f 5;
+#X obj 250 390 f 4;
+#X msg 80 380 1;
+#X msg 150 380 2;
+#X obj 100 439 pack f f;
+#X obj 100 468 route 1 2;
+#X obj 90 410 t f b;
+#X floatatom 120 540 5 0 0 0 - - -, f 5;
+#X obj 170 430 f -3;
+#X obj 10 565 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 10 540 receive round3;
+#X obj 120 80 receive round3;
+#X obj 230 242 % 12;
+#X obj 80 350 sel 1 2 3 4 5;
+#X obj 300 350 sel 6 12;
+#X obj 180 350 sel 7 8 9 10 11;
+#X msg 190 135 550;
+#X obj 100 500 + 1;
+#X obj 140 500 - 1;
+#X msg 10 600 -2.5;
+#X msg 60 600 2.5;
+#X obj 250 425 - 0.8;
+#X obj 480 190 receive hit8;
+#X obj 21 60 receive hit8;
+#X obj 191 671 outlet;
+#X obj 301 651 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 331 651 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 361 651 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 251 621 spigot;
+#X obj 351 621 spigot;
+#X obj 270 590 receive reset;
+#X obj 191 631 spigot;
+#X obj 412 622 loadbang;
+#X connect 0 0 55 0;
+#X connect 1 0 0 0;
+#X connect 1 1 0 1;
+#X connect 2 0 0 0;
+#X connect 3 0 1 0;
+#X connect 4 0 5 0;
+#X connect 5 0 6 0;
+#X connect 6 0 7 0;
+#X connect 6 0 8 0;
+#X connect 7 0 36 0;
+#X connect 8 0 6 1;
+#X connect 9 0 10 0;
+#X connect 10 0 11 0;
+#X connect 11 0 6 0;
+#X connect 12 0 10 0;
+#X connect 13 0 40 0;
+#X connect 13 0 19 0;
+#X connect 14 0 15 0;
+#X connect 15 0 37 0;
+#X connect 15 0 38 0;
+#X connect 15 0 39 0;
+#X connect 16 0 4 1;
+#X connect 17 0 18 0;
+#X connect 17 0 20 1;
+#X connect 17 0 9 0;
+#X connect 17 0 4 0;
+#X connect 18 0 19 0;
+#X connect 19 0 21 1;
+#X connect 20 0 17 0;
+#X connect 21 0 17 0;
+#X connect 22 0 20 0;
+#X connect 23 0 24 0;
+#X connect 24 0 1 0;
+#X connect 24 0 25 1;
+#X connect 25 0 45 0;
+#X connect 26 0 30 0;
+#X connect 27 0 30 0;
+#X connect 28 0 29 0;
+#X connect 29 0 41 0;
+#X connect 29 1 42 0;
+#X connect 30 0 28 0;
+#X connect 30 1 32 0;
+#X connect 31 0 32 1;
+#X connect 31 0 0 0;
+#X connect 32 0 28 1;
+#X connect 33 0 43 0;
+#X connect 33 0 44 0;
+#X connect 34 0 33 0;
+#X connect 35 0 21 0;
+#X connect 35 0 53 0;
+#X connect 36 0 14 0;
+#X connect 37 0 26 0;
+#X connect 37 1 26 0;
+#X connect 37 2 26 0;
+#X connect 37 3 26 0;
+#X connect 37 4 26 0;
+#X connect 38 0 25 0;
+#X connect 38 1 25 0;
+#X connect 39 0 27 0;
+#X connect 39 1 27 0;
+#X connect 39 2 27 0;
+#X connect 39 3 27 0;
+#X connect 39 4 27 0;
+#X connect 40 0 16 0;
+#X connect 41 0 31 0;
+#X connect 42 0 31 0;
+#X connect 43 0 0 0;
+#X connect 43 0 31 0;
+#X connect 44 0 1 0;
+#X connect 44 0 24 0;
+#X connect 45 0 23 0;
+#X connect 46 0 2 0;
+#X connect 46 0 3 0;
+#X connect 47 0 20 0;
+#X connect 49 0 50 0;
+#X connect 49 0 52 1;
+#X connect 49 0 55 1;
+#X connect 50 0 51 0;
+#X connect 51 0 53 1;
+#X connect 52 0 49 0;
+#X connect 53 0 49 0;
+#X connect 54 0 52 0;
+#X connect 55 0 48 0;
+#X connect 56 0 51 0;
+#X restore 200 500 pd Enemy33;
+#N canvas 472 20 606 706 Enemy28 0;
+#X obj 200 580 pack 0 0;
+#X obj 220 550 t b f;
+#X msg 480 240 -10;
+#X msg 510 240 -10;
+#X obj 160 210 metro;
+#X obj 160 235 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 230 190 int 1;
+#X floatatom 230 222 5 0 0 0 - - -, f 5;
+#X obj 300 232 + 1;
+#X obj 100 200 sel 0;
+#X obj 100 225 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X msg 100 248 -1;
+#X obj 40 200 loadbang;
+#X obj 190 110 loadbang;
+#X obj 230 271 + 1;
+#X floatatom 230 300 5 0 0 0 - - -, f 5;
+#X floatatom 190 160 5 0 0 0 - - -, f 5;
+#X obj 60 150 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 90 150 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 120 150 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 10 120 spigot;
+#X obj 110 120 spigot;
+#X obj 10 90 receive reset;
+#X msg 250 450 \$1;
+#X floatatom 220 500 5 0 0 0 - - -, f 5;
+#X obj 250 390 f 4;
+#X msg 80 380 1;
+#X msg 150 380 2;
+#X obj 100 439 pack f f;
+#X obj 100 468 route 1 2;
+#X obj 90 410 t f b;
+#X floatatom 120 540 5 0 0 0 - - -, f 5;
+#X obj 170 430 f -3;
+#X obj 10 565 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 10 540 receive round3;
+#X obj 120 80 receive round3;
+#X obj 230 242 % 12;
+#X obj 80 350 sel 1 2 3 4 5;
+#X obj 300 350 sel 6 12;
+#X obj 180 350 sel 7 8 9 10 11;
+#X msg 190 135 550;
+#X msg 60 600 3.5;
+#X obj 100 500 + 1;
+#X obj 140 500 - 1;
+#X msg 10 600 -1;
+#X obj 250 425 - 0.8;
+#X obj 480 190 receive hit3;
+#X obj 20 60 receive hit3;
+#X obj 211 679 outlet;
+#X obj 321 659 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 351 659 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 381 659 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 271 629 spigot;
+#X obj 371 629 spigot;
+#X obj 271 599 receive reset;
+#X obj 211 639 spigot;
+#X obj 432 630 loadbang;
+#X connect 0 0 55 0;
+#X connect 1 0 0 0;
+#X connect 1 1 0 1;
+#X connect 2 0 0 0;
+#X connect 3 0 1 0;
+#X connect 4 0 5 0;
+#X connect 5 0 6 0;
+#X connect 6 0 7 0;
+#X connect 6 0 8 0;
+#X connect 7 0 36 0;
+#X connect 8 0 6 1;
+#X connect 9 0 10 0;
+#X connect 10 0 11 0;
+#X connect 11 0 6 0;
+#X connect 12 0 10 0;
+#X connect 13 0 40 0;
+#X connect 13 0 19 0;
+#X connect 14 0 15 0;
+#X connect 15 0 37 0;
+#X connect 15 0 38 0;
+#X connect 15 0 39 0;
+#X connect 16 0 4 1;
+#X connect 17 0 18 0;
+#X connect 17 0 20 1;
+#X connect 17 0 9 0;
+#X connect 17 0 4 0;
+#X connect 18 0 19 0;
+#X connect 19 0 21 1;
+#X connect 20 0 17 0;
+#X connect 21 0 17 0;
+#X connect 22 0 20 0;
+#X connect 23 0 24 0;
+#X connect 24 0 1 0;
+#X connect 24 0 25 1;
+#X connect 25 0 45 0;
+#X connect 26 0 30 0;
+#X connect 27 0 30 0;
+#X connect 28 0 29 0;
+#X connect 29 0 42 0;
+#X connect 29 1 43 0;
+#X connect 30 0 28 0;
+#X connect 30 1 32 0;
+#X connect 31 0 32 1;
+#X connect 31 0 0 0;
+#X connect 32 0 28 1;
+#X connect 33 0 44 0;
+#X connect 33 0 41 0;
+#X connect 34 0 33 0;
+#X connect 35 0 21 0;
+#X connect 35 0 53 0;
+#X connect 36 0 14 0;
+#X connect 37 0 26 0;
+#X connect 37 1 26 0;
+#X connect 37 2 26 0;
+#X connect 37 3 26 0;
+#X connect 37 4 26 0;
+#X connect 38 0 25 0;
+#X connect 38 1 25 0;
+#X connect 39 0 27 0;
+#X connect 39 1 27 0;
+#X connect 39 2 27 0;
+#X connect 39 3 27 0;
+#X connect 39 4 27 0;
+#X connect 40 0 16 0;
+#X connect 41 0 1 0;
+#X connect 41 0 24 0;
+#X connect 42 0 31 0;
+#X connect 43 0 31 0;
+#X connect 44 0 0 0;
+#X connect 44 0 31 0;
+#X connect 45 0 23 0;
+#X connect 46 0 2 0;
+#X connect 46 0 3 0;
+#X connect 47 0 20 0;
+#X connect 49 0 50 0;
+#X connect 49 0 52 1;
+#X connect 49 0 55 1;
+#X connect 50 0 51 0;
+#X connect 51 0 53 1;
+#X connect 52 0 49 0;
+#X connect 53 0 49 0;
+#X connect 54 0 52 0;
+#X connect 55 0 48 0;
+#X connect 56 0 51 0;
+#X restore 350 370 pd Enemy28;
+#N canvas 472 20 606 706 Enemy34 0;
+#X obj 200 580 pack 0 0;
+#X obj 220 550 t b f;
+#X msg 480 240 -10;
+#X msg 510 240 -10;
+#X obj 160 210 metro;
+#X obj 160 235 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 230 190 int 1;
+#X floatatom 230 222 5 0 0 0 - - -, f 5;
+#X obj 300 232 + 1;
+#X obj 100 200 sel 0;
+#X obj 100 225 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X msg 100 248 -1;
+#X obj 40 200 loadbang;
+#X obj 190 110 loadbang;
+#X obj 230 271 + 1;
+#X floatatom 230 300 5 0 0 0 - - -, f 5;
+#X floatatom 190 160 5 0 0 0 - - -, f 5;
+#X obj 60 150 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 90 150 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 120 150 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 10 120 spigot;
+#X obj 110 120 spigot;
+#X obj 10 90 receive reset;
+#X msg 250 450 \$1;
+#X floatatom 220 500 5 0 0 0 - - -, f 5;
+#X obj 250 390 f 4;
+#X msg 80 380 1;
+#X msg 150 380 2;
+#X obj 100 439 pack f f;
+#X obj 100 468 route 1 2;
+#X obj 90 410 t f b;
+#X floatatom 120 540 5 0 0 0 - - -, f 5;
+#X obj 170 430 f -3;
+#X obj 10 565 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 10 540 receive round3;
+#X obj 120 80 receive round3;
+#X obj 230 242 % 12;
+#X obj 80 350 sel 1 2 3 4 5;
+#X obj 300 350 sel 6 12;
+#X obj 180 350 sel 7 8 9 10 11;
+#X msg 190 135 550;
+#X obj 100 500 + 1;
+#X obj 140 500 - 1;
+#X msg 10 600 -1.5;
+#X msg 60 600 2.5;
+#X obj 250 425 - 0.8;
+#X obj 480 190 receive hit9;
+#X obj 21 60 receive hit9;
+#X obj 190 672 outlet;
+#X obj 300 652 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 330 652 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 360 652 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 250 622 spigot;
+#X obj 350 622 spigot;
+#X obj 250 592 receive reset;
+#X obj 190 632 spigot;
+#X obj 411 623 loadbang;
+#X connect 0 0 55 0;
+#X connect 1 0 0 0;
+#X connect 1 1 0 1;
+#X connect 2 0 0 0;
+#X connect 3 0 1 0;
+#X connect 4 0 5 0;
+#X connect 5 0 6 0;
+#X connect 6 0 7 0;
+#X connect 6 0 8 0;
+#X connect 7 0 36 0;
+#X connect 8 0 6 1;
+#X connect 9 0 10 0;
+#X connect 10 0 11 0;
+#X connect 11 0 6 0;
+#X connect 12 0 10 0;
+#X connect 13 0 40 0;
+#X connect 13 0 19 0;
+#X connect 14 0 15 0;
+#X connect 15 0 37 0;
+#X connect 15 0 38 0;
+#X connect 15 0 39 0;
+#X connect 16 0 4 1;
+#X connect 17 0 18 0;
+#X connect 17 0 20 1;
+#X connect 17 0 9 0;
+#X connect 17 0 4 0;
+#X connect 18 0 19 0;
+#X connect 19 0 21 1;
+#X connect 20 0 17 0;
+#X connect 21 0 17 0;
+#X connect 22 0 20 0;
+#X connect 23 0 24 0;
+#X connect 24 0 1 0;
+#X connect 24 0 25 1;
+#X connect 25 0 45 0;
+#X connect 26 0 30 0;
+#X connect 27 0 30 0;
+#X connect 28 0 29 0;
+#X connect 29 0 41 0;
+#X connect 29 1 42 0;
+#X connect 30 0 28 0;
+#X connect 30 1 32 0;
+#X connect 31 0 32 1;
+#X connect 31 0 0 0;
+#X connect 32 0 28 1;
+#X connect 33 0 43 0;
+#X connect 33 0 44 0;
+#X connect 34 0 33 0;
+#X connect 35 0 21 0;
+#X connect 35 0 53 0;
+#X connect 36 0 14 0;
+#X connect 37 0 26 0;
+#X connect 37 1 26 0;
+#X connect 37 2 26 0;
+#X connect 37 3 26 0;
+#X connect 37 4 26 0;
+#X connect 38 0 25 0;
+#X connect 38 1 25 0;
+#X connect 39 0 27 0;
+#X connect 39 1 27 0;
+#X connect 39 2 27 0;
+#X connect 39 3 27 0;
+#X connect 39 4 27 0;
+#X connect 40 0 16 0;
+#X connect 41 0 31 0;
+#X connect 42 0 31 0;
+#X connect 43 0 0 0;
+#X connect 43 0 31 0;
+#X connect 44 0 1 0;
+#X connect 44 0 24 0;
+#X connect 45 0 23 0;
+#X connect 46 0 2 0;
+#X connect 46 0 3 0;
+#X connect 47 0 20 0;
+#X connect 49 0 50 0;
+#X connect 49 0 52 1;
+#X connect 49 0 55 1;
+#X connect 50 0 51 0;
+#X connect 51 0 53 1;
+#X connect 52 0 49 0;
+#X connect 53 0 49 0;
+#X connect 54 0 52 0;
+#X connect 55 0 48 0;
+#X connect 56 0 51 0;
+#X restore 350 500 pd Enemy34;
+#N canvas 472 20 606 706 Enemy29 0;
+#X obj 200 580 pack 0 0;
+#X obj 220 550 t b f;
+#X msg 480 240 -10;
+#X msg 510 240 -10;
+#X obj 160 210 metro;
+#X obj 160 235 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 230 190 int 1;
+#X floatatom 230 222 5 0 0 0 - - -, f 5;
+#X obj 300 232 + 1;
+#X obj 100 200 sel 0;
+#X obj 100 225 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X msg 100 248 -1;
+#X obj 40 200 loadbang;
+#X obj 190 110 loadbang;
+#X obj 230 271 + 1;
+#X floatatom 230 300 5 0 0 0 - - -, f 5;
+#X floatatom 190 160 5 0 0 0 - - -, f 5;
+#X obj 60 150 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 90 150 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 120 150 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 10 120 spigot;
+#X obj 110 120 spigot;
+#X obj 10 90 receive reset;
+#X msg 250 450 \$1;
+#X floatatom 220 500 5 0 0 0 - - -, f 5;
+#X obj 250 390 f 4;
+#X msg 80 380 1;
+#X msg 150 380 2;
+#X obj 100 439 pack f f;
+#X obj 100 468 route 1 2;
+#X obj 90 410 t f b;
+#X floatatom 120 540 5 0 0 0 - - -, f 5;
+#X obj 170 430 f -3;
+#X obj 10 565 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 10 540 receive round3;
+#X obj 120 80 receive round3;
+#X obj 230 242 % 12;
+#X obj 80 350 sel 1 2 3 4 5;
+#X obj 300 350 sel 6 12;
+#X obj 180 350 sel 7 8 9 10 11;
+#X msg 190 135 550;
+#X msg 60 600 3;
+#X obj 100 500 - 1;
+#X obj 140 500 + 1;
+#X msg 10 600 0.5;
+#X obj 250 425 - 0.8;
+#X obj 480 190 receive hit4;
+#X obj 21 60 receive hit4;
+#X obj 211 681 outlet;
+#X obj 321 661 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 351 661 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 381 661 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 271 631 spigot;
+#X obj 371 631 spigot;
+#X obj 271 601 receive reset;
+#X obj 211 641 spigot;
+#X obj 432 632 loadbang;
+#X connect 0 0 55 0;
+#X connect 1 0 0 0;
+#X connect 1 1 0 1;
+#X connect 2 0 0 0;
+#X connect 3 0 1 0;
+#X connect 4 0 5 0;
+#X connect 5 0 6 0;
+#X connect 6 0 7 0;
+#X connect 6 0 8 0;
+#X connect 7 0 36 0;
+#X connect 8 0 6 1;
+#X connect 9 0 10 0;
+#X connect 10 0 11 0;
+#X connect 11 0 6 0;
+#X connect 12 0 10 0;
+#X connect 13 0 40 0;
+#X connect 13 0 19 0;
+#X connect 14 0 15 0;
+#X connect 15 0 37 0;
+#X connect 15 0 38 0;
+#X connect 15 0 39 0;
+#X connect 16 0 4 1;
+#X connect 17 0 18 0;
+#X connect 17 0 20 1;
+#X connect 17 0 9 0;
+#X connect 17 0 4 0;
+#X connect 18 0 19 0;
+#X connect 19 0 21 1;
+#X connect 20 0 17 0;
+#X connect 21 0 17 0;
+#X connect 22 0 20 0;
+#X connect 23 0 24 0;
+#X connect 24 0 1 0;
+#X connect 24 0 25 1;
+#X connect 25 0 45 0;
+#X connect 26 0 30 0;
+#X connect 27 0 30 0;
+#X connect 28 0 29 0;
+#X connect 29 0 42 0;
+#X connect 29 1 43 0;
+#X connect 30 0 28 0;
+#X connect 30 1 32 0;
+#X connect 31 0 32 1;
+#X connect 31 0 0 0;
+#X connect 32 0 28 1;
+#X connect 33 0 44 0;
+#X connect 33 0 41 0;
+#X connect 34 0 33 0;
+#X connect 35 0 21 0;
+#X connect 35 0 53 0;
+#X connect 36 0 14 0;
+#X connect 37 0 26 0;
+#X connect 37 1 26 0;
+#X connect 37 2 26 0;
+#X connect 37 3 26 0;
+#X connect 37 4 26 0;
+#X connect 38 0 25 0;
+#X connect 38 1 25 0;
+#X connect 39 0 27 0;
+#X connect 39 1 27 0;
+#X connect 39 2 27 0;
+#X connect 39 3 27 0;
+#X connect 39 4 27 0;
+#X connect 40 0 16 0;
+#X connect 41 0 1 0;
+#X connect 41 0 24 0;
+#X connect 42 0 31 0;
+#X connect 43 0 31 0;
+#X connect 44 0 0 0;
+#X connect 44 0 31 0;
+#X connect 45 0 23 0;
+#X connect 46 0 2 0;
+#X connect 46 0 3 0;
+#X connect 47 0 20 0;
+#X connect 49 0 50 0;
+#X connect 49 0 52 1;
+#X connect 49 0 55 1;
+#X connect 50 0 51 0;
+#X connect 51 0 53 1;
+#X connect 52 0 49 0;
+#X connect 53 0 49 0;
+#X connect 54 0 52 0;
+#X connect 55 0 48 0;
+#X connect 56 0 51 0;
+#X restore 500 370 pd Enemy29;
+#N canvas 472 20 606 706 Enemy35 0;
+#X obj 200 590 pack 0 0;
+#X obj 220 550 t b f;
+#X msg 480 240 -10;
+#X msg 510 240 -10;
+#X obj 160 210 metro;
+#X obj 160 235 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 230 190 int 1;
+#X floatatom 230 222 5 0 0 0 - - -, f 5;
+#X obj 300 232 + 1;
+#X obj 100 200 sel 0;
+#X obj 100 225 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X msg 100 248 -1;
+#X obj 40 200 loadbang;
+#X obj 190 110 loadbang;
+#X obj 230 271 + 1;
+#X floatatom 230 300 5 0 0 0 - - -, f 5;
+#X floatatom 190 160 5 0 0 0 - - -, f 5;
+#X obj 60 150 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 90 150 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 120 150 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 10 120 spigot;
+#X obj 110 120 spigot;
+#X obj 10 90 receive reset;
+#X msg 250 450 \$1;
+#X floatatom 220 500 5 0 0 0 - - -, f 5;
+#X obj 250 390 f 4;
+#X msg 80 380 1;
+#X msg 150 380 2;
+#X obj 100 439 pack f f;
+#X obj 100 468 route 1 2;
+#X obj 90 410 t f b;
+#X floatatom 120 540 5 0 0 0 - - -, f 5;
+#X obj 170 430 f -3;
+#X obj 10 565 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 10 540 receive round3;
+#X obj 120 80 receive round3;
+#X obj 230 242 % 12;
+#X obj 80 350 sel 1 2 3 4 5;
+#X obj 300 350 sel 6 12;
+#X obj 180 350 sel 7 8 9 10 11;
+#X msg 190 135 550;
+#X obj 100 500 - 1;
+#X obj 140 500 + 1;
+#X msg 10 600 1;
+#X msg 60 600 2;
+#X obj 250 425 - 0.8;
+#X obj 480 190 receive hit10;
+#X obj 20 60 receive hit10;
+#X obj 222 669 outlet;
+#X obj 332 649 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 362 649 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 392 649 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 282 619 spigot;
+#X obj 382 619 spigot;
+#X obj 282 589 receive reset;
+#X obj 222 629 spigot;
+#X obj 443 620 loadbang;
+#X connect 0 0 55 0;
+#X connect 1 0 0 0;
+#X connect 1 1 0 1;
+#X connect 2 0 0 0;
+#X connect 3 0 1 0;
+#X connect 4 0 5 0;
+#X connect 5 0 6 0;
+#X connect 6 0 7 0;
+#X connect 6 0 8 0;
+#X connect 7 0 36 0;
+#X connect 8 0 6 1;
+#X connect 9 0 10 0;
+#X connect 10 0 11 0;
+#X connect 11 0 6 0;
+#X connect 12 0 10 0;
+#X connect 13 0 40 0;
+#X connect 13 0 19 0;
+#X connect 14 0 15 0;
+#X connect 15 0 37 0;
+#X connect 15 0 38 0;
+#X connect 15 0 39 0;
+#X connect 16 0 4 1;
+#X connect 17 0 18 0;
+#X connect 17 0 20 1;
+#X connect 17 0 9 0;
+#X connect 17 0 4 0;
+#X connect 18 0 19 0;
+#X connect 19 0 21 1;
+#X connect 20 0 17 0;
+#X connect 21 0 17 0;
+#X connect 22 0 20 0;
+#X connect 23 0 24 0;
+#X connect 24 0 1 0;
+#X connect 24 0 25 1;
+#X connect 25 0 45 0;
+#X connect 26 0 30 0;
+#X connect 27 0 30 0;
+#X connect 28 0 29 0;
+#X connect 29 0 41 0;
+#X connect 29 1 42 0;
+#X connect 30 0 28 0;
+#X connect 30 1 32 0;
+#X connect 31 0 32 1;
+#X connect 31 0 0 0;
+#X connect 32 0 28 1;
+#X connect 33 0 43 0;
+#X connect 33 0 44 0;
+#X connect 34 0 33 0;
+#X connect 35 0 21 0;
+#X connect 35 0 53 0;
+#X connect 36 0 14 0;
+#X connect 37 0 26 0;
+#X connect 37 1 26 0;
+#X connect 37 2 26 0;
+#X connect 37 3 26 0;
+#X connect 37 4 26 0;
+#X connect 38 0 25 0;
+#X connect 38 1 25 0;
+#X connect 39 0 27 0;
+#X connect 39 1 27 0;
+#X connect 39 2 27 0;
+#X connect 39 3 27 0;
+#X connect 39 4 27 0;
+#X connect 40 0 16 0;
+#X connect 41 0 31 0;
+#X connect 42 0 31 0;
+#X connect 43 0 0 0;
+#X connect 43 0 31 0;
+#X connect 44 0 1 0;
+#X connect 44 0 24 0;
+#X connect 45 0 23 0;
+#X connect 46 0 2 0;
+#X connect 46 0 3 0;
+#X connect 47 0 20 0;
+#X connect 49 0 50 0;
+#X connect 49 0 52 1;
+#X connect 49 0 55 1;
+#X connect 50 0 51 0;
+#X connect 51 0 53 1;
+#X connect 52 0 49 0;
+#X connect 53 0 49 0;
+#X connect 54 0 52 0;
+#X connect 55 0 48 0;
+#X connect 56 0 51 0;
+#X restore 500 500 pd Enemy35;
+#N canvas 472 20 606 706 Enemy30 0;
+#X obj 200 580 pack 0 0;
+#X obj 220 550 t b f;
+#X msg 480 240 -10;
+#X msg 510 240 -10;
+#X obj 160 210 metro;
+#X obj 160 235 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 230 190 int 1;
+#X floatatom 230 222 5 0 0 0 - - -, f 5;
+#X obj 300 232 + 1;
+#X obj 100 200 sel 0;
+#X obj 100 225 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X msg 100 248 -1;
+#X obj 40 200 loadbang;
+#X obj 190 110 loadbang;
+#X obj 230 271 + 1;
+#X floatatom 230 300 5 0 0 0 - - -, f 5;
+#X floatatom 190 160 5 0 0 0 - - -, f 5;
+#X obj 60 150 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 90 150 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 120 150 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 10 120 spigot;
+#X obj 110 120 spigot;
+#X obj 10 90 receive reset;
+#X msg 250 450 \$1;
+#X floatatom 220 500 5 0 0 0 - - -, f 5;
+#X obj 250 390 f 4;
+#X msg 80 380 1;
+#X msg 150 380 2;
+#X obj 100 439 pack f f;
+#X obj 100 468 route 1 2;
+#X obj 90 410 t f b;
+#X floatatom 120 540 5 0 0 0 - - -, f 5;
+#X obj 170 430 f -3;
+#X obj 10 565 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 10 540 receive round3;
+#X obj 120 80 receive round3;
+#X obj 230 242 % 12;
+#X obj 80 350 sel 1 2 3 4 5;
+#X obj 300 350 sel 6 12;
+#X obj 180 350 sel 7 8 9 10 11;
+#X msg 190 135 550;
+#X obj 100 500 - 1;
+#X obj 140 500 + 1;
+#X msg 60 600 3;
+#X msg 10 600 1.5;
+#X obj 250 425 - 0.8;
+#X obj 480 190 receive hit5;
+#X obj 20 60 receive hit5;
+#X obj 222 670 outlet;
+#X obj 332 650 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 362 650 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 392 650 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 282 620 spigot;
+#X obj 382 620 spigot;
+#X obj 282 590 receive reset;
+#X obj 222 630 spigot;
+#X obj 443 621 loadbang;
+#X connect 0 0 55 0;
+#X connect 1 0 0 0;
+#X connect 1 1 0 1;
+#X connect 2 0 0 0;
+#X connect 3 0 1 0;
+#X connect 4 0 5 0;
+#X connect 5 0 6 0;
+#X connect 6 0 7 0;
+#X connect 6 0 8 0;
+#X connect 7 0 36 0;
+#X connect 8 0 6 1;
+#X connect 9 0 10 0;
+#X connect 10 0 11 0;
+#X connect 11 0 6 0;
+#X connect 12 0 10 0;
+#X connect 13 0 40 0;
+#X connect 13 0 19 0;
+#X connect 14 0 15 0;
+#X connect 15 0 37 0;
+#X connect 15 0 38 0;
+#X connect 15 0 39 0;
+#X connect 16 0 4 1;
+#X connect 17 0 18 0;
+#X connect 17 0 20 1;
+#X connect 17 0 9 0;
+#X connect 17 0 4 0;
+#X connect 18 0 19 0;
+#X connect 19 0 21 1;
+#X connect 20 0 17 0;
+#X connect 21 0 17 0;
+#X connect 22 0 20 0;
+#X connect 23 0 24 0;
+#X connect 24 0 1 0;
+#X connect 24 0 25 1;
+#X connect 25 0 45 0;
+#X connect 26 0 30 0;
+#X connect 27 0 30 0;
+#X connect 28 0 29 0;
+#X connect 29 0 41 0;
+#X connect 29 1 42 0;
+#X connect 30 0 28 0;
+#X connect 30 1 32 0;
+#X connect 31 0 32 1;
+#X connect 31 0 0 0;
+#X connect 32 0 28 1;
+#X connect 33 0 44 0;
+#X connect 33 0 43 0;
+#X connect 34 0 33 0;
+#X connect 35 0 21 0;
+#X connect 35 0 53 0;
+#X connect 36 0 14 0;
+#X connect 37 0 26 0;
+#X connect 37 1 26 0;
+#X connect 37 2 26 0;
+#X connect 37 3 26 0;
+#X connect 37 4 26 0;
+#X connect 38 0 25 0;
+#X connect 38 1 25 0;
+#X connect 39 0 27 0;
+#X connect 39 1 27 0;
+#X connect 39 2 27 0;
+#X connect 39 3 27 0;
+#X connect 39 4 27 0;
+#X connect 40 0 16 0;
+#X connect 41 0 31 0;
+#X connect 42 0 31 0;
+#X connect 43 0 1 0;
+#X connect 43 0 24 0;
+#X connect 44 0 0 0;
+#X connect 44 0 31 0;
+#X connect 45 0 23 0;
+#X connect 46 0 2 0;
+#X connect 46 0 3 0;
+#X connect 47 0 20 0;
+#X connect 49 0 50 0;
+#X connect 49 0 52 1;
+#X connect 49 0 55 1;
+#X connect 50 0 51 0;
+#X connect 51 0 53 1;
+#X connect 52 0 49 0;
+#X connect 53 0 49 0;
+#X connect 54 0 52 0;
+#X connect 55 0 48 0;
+#X connect 56 0 51 0;
+#X restore 650 370 pd Enemy30;
+#N canvas 472 20 606 706 Enemy36 0;
+#X obj 200 680 outlet;
+#X obj 200 580 pack 0 0;
+#X obj 220 550 t b f;
+#X msg 480 240 -10;
+#X msg 510 240 -10;
+#X obj 160 210 metro;
+#X obj 160 235 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 230 190 int 1;
+#X floatatom 230 222 5 0 0 0 - - -, f 5;
+#X obj 300 232 + 1;
+#X obj 100 200 sel 0;
+#X obj 100 225 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X msg 100 248 -1;
+#X obj 40 200 loadbang;
+#X obj 190 110 loadbang;
+#X obj 230 271 + 1;
+#X floatatom 230 300 5 0 0 0 - - -, f 5;
+#X floatatom 190 160 5 0 0 0 - - -, f 5;
+#X obj 60 150 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 90 150 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 120 150 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 10 120 spigot;
+#X obj 110 120 spigot;
+#X obj 10 90 receive reset;
+#X msg 250 450 \$1;
+#X floatatom 220 500 5 0 0 0 - - -, f 5;
+#X obj 250 390 f 4;
+#X msg 80 380 1;
+#X msg 150 380 2;
+#X obj 100 439 pack f f;
+#X obj 100 468 route 1 2;
+#X obj 90 410 t f b;
+#X floatatom 120 540 5 0 0 0 - - -, f 5;
+#X obj 170 430 f -3;
+#X obj 10 565 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 10 540 receive round3;
+#X obj 120 80 receive round3;
+#X obj 230 242 % 12;
+#X obj 80 350 sel 1 2 3 4 5;
+#X obj 300 350 sel 6 12;
+#X obj 180 350 sel 7 8 9 10 11;
+#X msg 190 135 550;
+#X obj 100 500 - 1;
+#X obj 140 500 + 1;
+#X msg 10 600 2;
+#X msg 60 600 2;
+#X obj 250 425 - 0.8;
+#X obj 480 190 receive hit11;
+#X obj 20 60 receive hit11;
+#X obj 310 660 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 340 660 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 370 660 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 260 630 spigot;
+#X obj 360 630 spigot;
+#X obj 260 600 receive reset;
+#X obj 370 590 receive round3;
+#X obj 200 640 spigot;
+#X obj 421 631 loadbang;
+#X connect 1 0 56 0;
+#X connect 2 0 1 0;
+#X connect 2 1 1 1;
+#X connect 3 0 1 0;
+#X connect 4 0 2 0;
+#X connect 5 0 6 0;
+#X connect 6 0 7 0;
+#X connect 7 0 8 0;
+#X connect 7 0 9 0;
+#X connect 8 0 37 0;
+#X connect 9 0 7 1;
+#X connect 10 0 11 0;
+#X connect 11 0 12 0;
+#X connect 12 0 7 0;
+#X connect 13 0 11 0;
+#X connect 14 0 41 0;
+#X connect 14 0 20 0;
+#X connect 15 0 16 0;
+#X connect 16 0 38 0;
+#X connect 16 0 39 0;
+#X connect 16 0 40 0;
+#X connect 17 0 5 1;
+#X connect 18 0 19 0;
+#X connect 18 0 21 1;
+#X connect 18 0 10 0;
+#X connect 18 0 5 0;
+#X connect 19 0 20 0;
+#X connect 20 0 22 1;
+#X connect 21 0 18 0;
+#X connect 22 0 18 0;
+#X connect 23 0 21 0;
+#X connect 24 0 25 0;
+#X connect 25 0 2 0;
+#X connect 25 0 26 1;
+#X connect 26 0 46 0;
+#X connect 27 0 31 0;
+#X connect 28 0 31 0;
+#X connect 29 0 30 0;
+#X connect 30 0 42 0;
+#X connect 30 1 43 0;
+#X connect 31 0 29 0;
+#X connect 31 1 33 0;
+#X connect 32 0 33 1;
+#X connect 32 0 1 0;
+#X connect 33 0 29 1;
+#X connect 34 0 44 0;
+#X connect 34 0 45 0;
+#X connect 35 0 34 0;
+#X connect 36 0 22 0;
+#X connect 37 0 15 0;
+#X connect 38 0 27 0;
+#X connect 38 1 27 0;
+#X connect 38 2 27 0;
+#X connect 38 3 27 0;
+#X connect 38 4 27 0;
+#X connect 39 0 26 0;
+#X connect 39 1 26 0;
+#X connect 40 0 28 0;
+#X connect 40 1 28 0;
+#X connect 40 2 28 0;
+#X connect 40 3 28 0;
+#X connect 40 4 28 0;
+#X connect 41 0 17 0;
+#X connect 42 0 32 0;
+#X connect 43 0 32 0;
+#X connect 44 0 1 0;
+#X connect 44 0 32 0;
+#X connect 45 0 2 0;
+#X connect 45 0 25 0;
+#X connect 46 0 24 0;
+#X connect 47 0 3 0;
+#X connect 47 0 4 0;
+#X connect 48 0 21 0;
+#X connect 49 0 50 0;
+#X connect 49 0 52 1;
+#X connect 49 0 56 1;
+#X connect 50 0 51 0;
+#X connect 51 0 53 1;
+#X connect 52 0 49 0;
+#X connect 53 0 49 0;
+#X connect 54 0 52 0;
+#X connect 55 0 53 0;
+#X connect 56 0 0 0;
+#X connect 57 0 51 0;
+#X restore 650 500 pd Enemy36;
+#N canvas 472 20 606 706 Enemy31 0;
+#X obj 200 580 pack 0 0;
+#X obj 220 550 t b f;
+#X msg 480 240 -10;
+#X msg 510 240 -10;
+#X obj 160 210 metro;
+#X obj 160 235 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 230 190 int 1;
+#X floatatom 230 222 5 0 0 0 - - -, f 5;
+#X obj 300 232 + 1;
+#X obj 100 200 sel 0;
+#X obj 100 225 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X msg 100 248 -1;
+#X obj 40 200 loadbang;
+#X obj 190 110 loadbang;
+#X obj 230 271 + 1;
+#X floatatom 230 300 5 0 0 0 - - -, f 5;
+#X floatatom 190 160 5 0 0 0 - - -, f 5;
+#X obj 60 150 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 90 150 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 120 150 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 10 120 spigot;
+#X obj 110 120 spigot;
+#X obj 10 90 receive reset;
+#X msg 250 450 \$1;
+#X floatatom 220 500 5 0 0 0 - - -, f 5;
+#X obj 250 390 f 4;
+#X msg 80 380 1;
+#X msg 150 380 2;
+#X obj 100 439 pack f f;
+#X obj 100 468 route 1 2;
+#X obj 90 410 t f b;
+#X floatatom 120 540 5 0 0 0 - - -, f 5;
+#X obj 170 430 f -3;
+#X obj 10 565 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 10 540 receive round3;
+#X obj 120 80 receive round3;
+#X obj 230 242 % 12;
+#X obj 80 350 sel 1 2 3 4 5;
+#X obj 300 350 sel 6 12;
+#X obj 180 350 sel 7 8 9 10 11;
+#X msg 190 135 550;
+#X obj 100 500 - 1;
+#X obj 140 500 + 1;
+#X msg 60 600 3;
+#X msg 10 600 2.5;
+#X obj 250 425 - 0.8;
+#X obj 480 190 receive hit6;
+#X obj 21 60 receive hit6;
+#X obj 209 681 outlet;
+#X obj 319 661 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 349 661 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 379 661 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 269 631 spigot;
+#X obj 369 631 spigot;
+#X obj 269 601 receive reset;
+#X obj 209 641 spigot;
+#X obj 430 632 loadbang;
+#X connect 0 0 55 0;
+#X connect 1 0 0 0;
+#X connect 1 1 0 1;
+#X connect 2 0 0 0;
+#X connect 3 0 1 0;
+#X connect 4 0 5 0;
+#X connect 5 0 6 0;
+#X connect 6 0 7 0;
+#X connect 6 0 8 0;
+#X connect 7 0 36 0;
+#X connect 8 0 6 1;
+#X connect 9 0 10 0;
+#X connect 10 0 11 0;
+#X connect 11 0 6 0;
+#X connect 12 0 10 0;
+#X connect 13 0 40 0;
+#X connect 13 0 19 0;
+#X connect 14 0 15 0;
+#X connect 15 0 37 0;
+#X connect 15 0 38 0;
+#X connect 15 0 39 0;
+#X connect 16 0 4 1;
+#X connect 17 0 18 0;
+#X connect 17 0 20 1;
+#X connect 17 0 9 0;
+#X connect 17 0 4 0;
+#X connect 18 0 19 0;
+#X connect 19 0 21 1;
+#X connect 20 0 17 0;
+#X connect 21 0 17 0;
+#X connect 22 0 20 0;
+#X connect 23 0 24 0;
+#X connect 24 0 1 0;
+#X connect 24 0 25 1;
+#X connect 25 0 45 0;
+#X connect 26 0 30 0;
+#X connect 27 0 30 0;
+#X connect 28 0 29 0;
+#X connect 29 0 41 0;
+#X connect 29 1 42 0;
+#X connect 30 0 28 0;
+#X connect 30 1 32 0;
+#X connect 31 0 32 1;
+#X connect 31 0 0 0;
+#X connect 32 0 28 1;
+#X connect 33 0 44 0;
+#X connect 33 0 43 0;
+#X connect 34 0 33 0;
+#X connect 35 0 21 0;
+#X connect 35 0 53 0;
+#X connect 36 0 14 0;
+#X connect 37 0 26 0;
+#X connect 37 1 26 0;
+#X connect 37 2 26 0;
+#X connect 37 3 26 0;
+#X connect 37 4 26 0;
+#X connect 38 0 25 0;
+#X connect 38 1 25 0;
+#X connect 39 0 27 0;
+#X connect 39 1 27 0;
+#X connect 39 2 27 0;
+#X connect 39 3 27 0;
+#X connect 39 4 27 0;
+#X connect 40 0 16 0;
+#X connect 41 0 31 0;
+#X connect 42 0 31 0;
+#X connect 43 0 1 0;
+#X connect 43 0 24 0;
+#X connect 44 0 0 0;
+#X connect 44 0 31 0;
+#X connect 45 0 23 0;
+#X connect 46 0 2 0;
+#X connect 46 0 3 0;
+#X connect 47 0 20 0;
+#X connect 49 0 50 0;
+#X connect 49 0 52 1;
+#X connect 49 0 55 1;
+#X connect 50 0 51 0;
+#X connect 51 0 53 1;
+#X connect 52 0 49 0;
+#X connect 53 0 49 0;
+#X connect 54 0 52 0;
+#X connect 55 0 48 0;
+#X connect 56 0 51 0;
+#X restore 800 370 pd Enemy31;
+#N canvas 472 20 606 706 Enemy37 0;
+#X obj 200 580 pack 0 0;
+#X obj 220 550 t b f;
+#X msg 480 240 -10;
+#X msg 510 240 -10;
+#X obj 160 210 metro;
+#X obj 160 235 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 230 190 int 1;
+#X floatatom 230 222 5 0 0 0 - - -, f 5;
+#X obj 300 232 + 1;
+#X obj 100 200 sel 0;
+#X obj 100 225 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X msg 100 248 -1;
+#X obj 40 200 loadbang;
+#X obj 190 110 loadbang;
+#X obj 230 271 + 1;
+#X floatatom 230 300 5 0 0 0 - - -, f 5;
+#X floatatom 190 160 5 0 0 0 - - -, f 5;
+#X obj 60 150 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 90 150 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 120 150 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 10 120 spigot;
+#X obj 110 120 spigot;
+#X obj 10 90 receive reset;
+#X msg 250 450 \$1;
+#X floatatom 220 500 5 0 0 0 - - -, f 5;
+#X obj 250 390 f 4;
+#X msg 80 380 1;
+#X msg 150 380 2;
+#X obj 100 439 pack f f;
+#X obj 100 468 route 1 2;
+#X obj 90 410 t f b;
+#X floatatom 120 540 5 0 0 0 - - -, f 5;
+#X obj 170 430 f -3;
+#X obj 10 565 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 10 540 receive round3;
+#X obj 120 80 receive round3;
+#X obj 230 242 % 12;
+#X obj 80 350 sel 1 2 3 4 5;
+#X obj 300 350 sel 6 12;
+#X obj 180 350 sel 7 8 9 10 11;
+#X msg 190 135 550;
+#X obj 100 500 - 1;
+#X obj 140 500 + 1;
+#X msg 10 600 3;
+#X msg 60 600 2;
+#X obj 250 430 - 0.8;
+#X obj 480 190 receive hit12;
+#X obj 21 60 receive hit12;
+#X obj 221 681 outlet;
+#X obj 331 661 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 361 661 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 391 661 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 281 631 spigot;
+#X obj 381 631 spigot;
+#X obj 281 601 receive reset;
+#X obj 221 641 spigot;
+#X obj 442 632 loadbang;
+#X connect 0 0 55 0;
+#X connect 1 0 0 0;
+#X connect 1 1 0 1;
+#X connect 2 0 0 0;
+#X connect 3 0 1 0;
+#X connect 4 0 5 0;
+#X connect 5 0 6 0;
+#X connect 6 0 7 0;
+#X connect 6 0 8 0;
+#X connect 7 0 36 0;
+#X connect 8 0 6 1;
+#X connect 9 0 10 0;
+#X connect 10 0 11 0;
+#X connect 11 0 6 0;
+#X connect 12 0 10 0;
+#X connect 13 0 40 0;
+#X connect 13 0 19 0;
+#X connect 14 0 15 0;
+#X connect 15 0 37 0;
+#X connect 15 0 38 0;
+#X connect 15 0 39 0;
+#X connect 16 0 4 1;
+#X connect 17 0 18 0;
+#X connect 17 0 20 1;
+#X connect 17 0 9 0;
+#X connect 17 0 4 0;
+#X connect 18 0 19 0;
+#X connect 19 0 21 1;
+#X connect 20 0 17 0;
+#X connect 21 0 17 0;
+#X connect 22 0 20 0;
+#X connect 23 0 24 0;
+#X connect 24 0 1 0;
+#X connect 24 0 25 1;
+#X connect 25 0 45 0;
+#X connect 26 0 30 0;
+#X connect 27 0 30 0;
+#X connect 28 0 29 0;
+#X connect 29 0 41 0;
+#X connect 29 1 42 0;
+#X connect 30 0 28 0;
+#X connect 30 1 32 0;
+#X connect 31 0 32 1;
+#X connect 31 0 0 0;
+#X connect 32 0 28 1;
+#X connect 33 0 43 0;
+#X connect 33 0 44 0;
+#X connect 34 0 33 0;
+#X connect 35 0 21 0;
+#X connect 35 0 53 0;
+#X connect 36 0 14 0;
+#X connect 37 0 26 0;
+#X connect 37 1 26 0;
+#X connect 37 2 26 0;
+#X connect 37 3 26 0;
+#X connect 37 4 26 0;
+#X connect 38 0 25 0;
+#X connect 38 1 25 0;
+#X connect 39 0 27 0;
+#X connect 39 1 27 0;
+#X connect 39 2 27 0;
+#X connect 39 3 27 0;
+#X connect 39 4 27 0;
+#X connect 40 0 16 0;
+#X connect 41 0 31 0;
+#X connect 42 0 31 0;
+#X connect 43 0 0 0;
+#X connect 43 0 31 0;
+#X connect 44 0 1 0;
+#X connect 44 0 24 0;
+#X connect 45 0 23 0;
+#X connect 46 0 2 0;
+#X connect 46 0 3 0;
+#X connect 47 0 20 0;
+#X connect 49 0 50 0;
+#X connect 49 0 52 1;
+#X connect 49 0 55 1;
+#X connect 50 0 51 0;
+#X connect 51 0 53 1;
+#X connect 52 0 49 0;
+#X connect 53 0 49 0;
+#X connect 54 0 52 0;
+#X connect 55 0 48 0;
+#X connect 56 0 51 0;
+#X restore 800 500 pd Enemy37;
+#N canvas 836 16 606 730 Enemy13 0;
+#X obj 240 660 outlet;
+#X obj 200 580 pack 0 0;
+#X obj 220 550 t b f;
+#X msg 360 400 -10;
+#X msg 390 400 -10;
+#X obj 160 210 metro;
+#X obj 160 235 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 230 190 int 1;
+#X floatatom 230 222 5 0 0 0 - - -, f 5;
+#X obj 300 232 + 1;
+#X obj 100 200 sel 0;
+#X obj 100 225 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X msg 100 248 -1;
+#X obj 40 200 loadbang;
+#X obj 190 110 loadbang;
+#X obj 230 271 + 1;
+#X floatatom 230 300 5 0 0 0 - - -, f 5;
+#X floatatom 190 160 5 0 0 0 - - -, f 5;
+#X obj 60 150 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 90 150 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 120 150 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 10 120 spigot;
+#X obj 110 120 spigot;
+#X obj 10 90 receive reset;
+#X obj 250 350 sel 4 8;
+#X obj 230 242 % 8;
+#X msg 250 450 \$1;
+#X floatatom 220 500 5 0 0 0 - - -, f 5;
+#X obj 250 390 f 4;
+#X obj 150 350 sel 5 6 7;
+#X obj 70 350 sel 1 2 3;
+#X obj 250 425 - 0.5;
+#X msg 80 380 1;
+#X msg 150 380 2;
+#X obj 100 439 pack f f;
+#X obj 100 468 route 1 2;
+#X obj 90 410 t f b;
+#X obj 100 500 + 0.5;
+#X obj 140 500 - 0.5;
+#X floatatom 120 540 5 0 0 0 - - -, f 5;
+#X obj 170 430 f -3;
+#X msg 60 600 3;
+#X obj 120 80 receive round2;
+#X obj 10 540 receive round2;
+#X obj 10 565 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X msg 10 600 -3;
+#X msg 190 135 600;
+#X obj 340 620 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 370 620 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 400 620 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 290 590 spigot;
+#X obj 390 590 spigot;
+#X obj 290 560 receive reset;
+#X obj 451 591 loadbang;
+#X obj 390 560 receive round2;
+#X obj 240 620 spigot;
+#X obj 21 60 receive hit1;
+#X obj 360 350 receive hit1;
+#X connect 1 0 55 0;
+#X connect 2 0 1 0;
+#X connect 2 1 1 1;
+#X connect 3 0 1 0;
+#X connect 4 0 2 0;
+#X connect 5 0 6 0;
+#X connect 6 0 7 0;
+#X connect 7 0 8 0;
+#X connect 7 0 9 0;
+#X connect 8 0 25 0;
+#X connect 9 0 7 1;
+#X connect 10 0 11 0;
+#X connect 11 0 12 0;
+#X connect 12 0 7 0;
+#X connect 13 0 11 0;
+#X connect 14 0 46 0;
+#X connect 14 0 20 0;
+#X connect 15 0 16 0;
+#X connect 16 0 24 0;
+#X connect 16 0 29 0;
+#X connect 16 0 30 0;
+#X connect 17 0 5 1;
+#X connect 18 0 19 0;
+#X connect 18 0 21 1;
+#X connect 18 0 10 0;
+#X connect 18 0 5 0;
+#X connect 19 0 20 0;
+#X connect 20 0 22 1;
+#X connect 21 0 18 0;
+#X connect 22 0 18 0;
+#X connect 23 0 21 0;
+#X connect 24 0 28 0;
+#X connect 24 1 28 0;
+#X connect 25 0 15 0;
+#X connect 26 0 27 0;
+#X connect 27 0 2 0;
+#X connect 27 0 28 1;
+#X connect 28 0 31 0;
+#X connect 29 0 33 0;
+#X connect 29 1 33 0;
+#X connect 29 2 33 0;
+#X connect 30 0 32 0;
+#X connect 30 1 32 0;
+#X connect 30 2 32 0;
+#X connect 31 0 26 0;
+#X connect 32 0 36 0;
+#X connect 33 0 36 0;
+#X connect 34 0 35 0;
+#X connect 35 0 37 0;
+#X connect 35 1 38 0;
+#X connect 36 0 34 0;
+#X connect 36 1 40 0;
+#X connect 37 0 39 0;
+#X connect 38 0 39 0;
+#X connect 39 0 40 1;
+#X connect 39 0 1 0;
+#X connect 40 0 34 1;
+#X connect 41 0 2 0;
+#X connect 41 0 27 0;
+#X connect 42 0 22 0;
+#X connect 43 0 44 0;
+#X connect 44 0 45 0;
+#X connect 44 0 41 0;
+#X connect 45 0 1 0;
+#X connect 45 0 39 0;
+#X connect 46 0 17 0;
+#X connect 47 0 48 0;
+#X connect 47 0 50 1;
+#X connect 47 0 55 1;
+#X connect 48 0 49 0;
+#X connect 49 0 51 1;
+#X connect 50 0 47 0;
+#X connect 51 0 47 0;
+#X connect 52 0 50 0;
+#X connect 53 0 49 0;
+#X connect 54 0 51 0;
+#X connect 55 0 0 0;
+#X connect 56 0 21 0;
+#X connect 57 0 3 0;
+#X connect 57 0 4 0;
+#X restore 30 90 pd Enemy13;
+#N canvas 216 34 602 703 Enemy14 0;
+#X obj 200 580 pack 0 0;
+#X obj 220 550 t b f;
+#X msg 360 400 -10;
+#X msg 390 400 -10;
+#X obj 160 210 metro;
+#X obj 160 235 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 230 190 int 1;
+#X floatatom 230 222 5 0 0 0 - - -, f 5;
+#X obj 300 232 + 1;
+#X obj 100 200 sel 0;
+#X obj 100 225 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X msg 100 248 -1;
+#X obj 40 200 loadbang;
+#X obj 190 110 loadbang;
+#X obj 230 271 + 1;
+#X floatatom 230 300 5 0 0 0 - - -, f 5;
+#X floatatom 190 160 5 0 0 0 - - -, f 5;
+#X obj 10 570 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 60 150 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 90 150 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 120 150 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 10 120 spigot;
+#X obj 110 120 spigot;
+#X obj 10 90 receive reset;
+#X obj 250 350 sel 4 8;
+#X obj 230 242 % 8;
+#X msg 250 450 \$1;
+#X floatatom 220 500 5 0 0 0 - - -, f 5;
+#X obj 250 390 f 4;
+#X obj 150 350 sel 5 6 7;
+#X obj 70 350 sel 1 2 3;
+#X obj 250 425 - 0.5;
+#X msg 80 380 1;
+#X msg 150 380 2;
+#X obj 100 439 pack f f;
+#X obj 100 468 route 1 2;
+#X obj 90 410 t f b;
+#X obj 100 500 + 0.5;
+#X obj 140 500 - 0.5;
+#X floatatom 120 540 5 0 0 0 - - -, f 5;
+#X obj 170 430 f -3;
+#X msg 60 600 3;
+#X obj 120 80 receive round2;
+#X msg 10 600 -2;
+#X obj 10 540 receive round2;
+#X msg 190 135 600;
+#X obj 21 60 receive hit2;
+#X obj 230 670 outlet;
+#X obj 330 630 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 360 630 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 390 630 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 280 600 spigot;
+#X obj 380 600 spigot;
+#X obj 280 570 receive reset;
+#X obj 441 601 loadbang;
+#X obj 380 570 receive round2;
+#X obj 230 630 spigot;
+#X obj 360 350 receive hit2;
+#X connect 0 0 56 0;
+#X connect 1 0 0 0;
+#X connect 1 1 0 1;
+#X connect 2 0 0 0;
+#X connect 3 0 1 0;
+#X connect 4 0 5 0;
+#X connect 5 0 6 0;
+#X connect 6 0 7 0;
+#X connect 6 0 8 0;
+#X connect 7 0 25 0;
+#X connect 8 0 6 1;
+#X connect 9 0 10 0;
+#X connect 10 0 11 0;
+#X connect 11 0 6 0;
+#X connect 12 0 10 0;
+#X connect 13 0 45 0;
+#X connect 13 0 20 0;
+#X connect 14 0 15 0;
+#X connect 15 0 24 0;
+#X connect 15 0 29 0;
+#X connect 15 0 30 0;
+#X connect 16 0 4 1;
+#X connect 17 0 43 0;
+#X connect 17 0 41 0;
+#X connect 18 0 19 0;
+#X connect 18 0 21 1;
+#X connect 18 0 9 0;
+#X connect 18 0 4 0;
+#X connect 19 0 20 0;
+#X connect 20 0 22 1;
+#X connect 21 0 18 0;
+#X connect 22 0 18 0;
+#X connect 23 0 21 0;
+#X connect 24 0 28 0;
+#X connect 24 1 28 0;
+#X connect 25 0 14 0;
+#X connect 26 0 27 0;
+#X connect 27 0 1 0;
+#X connect 27 0 28 1;
+#X connect 28 0 31 0;
+#X connect 29 0 33 0;
+#X connect 29 1 33 0;
+#X connect 29 2 33 0;
+#X connect 30 0 32 0;
+#X connect 30 1 32 0;
+#X connect 30 2 32 0;
+#X connect 31 0 26 0;
+#X connect 32 0 36 0;
+#X connect 33 0 36 0;
+#X connect 34 0 35 0;
+#X connect 35 0 37 0;
+#X connect 35 1 38 0;
+#X connect 36 0 34 0;
+#X connect 36 1 40 0;
+#X connect 37 0 39 0;
+#X connect 38 0 39 0;
+#X connect 39 0 40 1;
+#X connect 39 0 0 0;
+#X connect 40 0 34 1;
+#X connect 41 0 1 0;
+#X connect 41 0 27 0;
+#X connect 42 0 22 0;
+#X connect 43 0 0 0;
+#X connect 43 0 39 0;
+#X connect 44 0 17 0;
+#X connect 45 0 16 0;
+#X connect 46 0 21 0;
+#X connect 48 0 49 0;
+#X connect 48 0 51 1;
+#X connect 48 0 56 1;
+#X connect 49 0 50 0;
+#X connect 50 0 52 1;
+#X connect 51 0 48 0;
+#X connect 52 0 48 0;
+#X connect 53 0 51 0;
+#X connect 54 0 50 0;
+#X connect 55 0 52 0;
+#X connect 56 0 47 0;
+#X connect 57 0 2 0;
+#X connect 57 0 3 0;
+#X restore 190 90 pd Enemy14;
+#N canvas 216 46 602 703 Enemy15 0;
+#X obj 200 580 pack 0 0;
+#X obj 220 550 t b f;
+#X msg 360 400 -10;
+#X msg 390 400 -10;
+#X obj 160 210 metro;
+#X obj 160 235 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 230 190 int 1;
+#X floatatom 230 222 5 0 0 0 - - -, f 5;
+#X obj 300 232 + 1;
+#X obj 100 200 sel 0;
+#X obj 100 225 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X msg 100 248 -1;
+#X obj 40 200 loadbang;
+#X obj 190 110 loadbang;
+#X obj 230 271 + 1;
+#X floatatom 230 300 5 0 0 0 - - -, f 5;
+#X floatatom 190 160 5 0 0 0 - - -, f 5;
+#X obj 60 150 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 90 150 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 120 150 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 10 120 spigot;
+#X obj 110 120 spigot;
+#X obj 10 90 receive reset;
+#X obj 250 350 sel 4 8;
+#X obj 230 242 % 8;
+#X msg 250 450 \$1;
+#X floatatom 220 500 5 0 0 0 - - -, f 5;
+#X obj 250 390 f 4;
+#X obj 150 350 sel 5 6 7;
+#X obj 70 350 sel 1 2 3;
+#X obj 250 425 - 0.5;
+#X msg 80 380 1;
+#X msg 150 380 2;
+#X obj 100 439 pack f f;
+#X obj 100 468 route 1 2;
+#X obj 90 410 t f b;
+#X obj 100 500 + 0.5;
+#X obj 140 500 - 0.5;
+#X floatatom 120 540 5 0 0 0 - - -, f 5;
+#X obj 170 430 f -3;
+#X msg 60 600 3;
+#X obj 120 80 receive round2;
+#X obj 10 540 receive round2;
+#X obj 10 565 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X msg 10 600 -1;
+#X msg 190 135 600;
+#X obj 220 670 outlet;
+#X obj 320 630 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 350 630 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 380 630 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 270 600 spigot;
+#X obj 370 600 spigot;
+#X obj 270 570 receive reset;
+#X obj 431 601 loadbang;
+#X obj 370 570 receive round2;
+#X obj 220 630 spigot;
+#X obj 360 350 receive hit3;
+#X obj 21 60 receive hit3;
+#X connect 0 0 55 0;
+#X connect 1 0 0 0;
+#X connect 1 1 0 1;
+#X connect 2 0 0 0;
+#X connect 3 0 1 0;
+#X connect 4 0 5 0;
+#X connect 5 0 6 0;
+#X connect 6 0 7 0;
+#X connect 6 0 8 0;
+#X connect 7 0 24 0;
+#X connect 8 0 6 1;
+#X connect 9 0 10 0;
+#X connect 10 0 11 0;
+#X connect 11 0 6 0;
+#X connect 12 0 10 0;
+#X connect 13 0 45 0;
+#X connect 13 0 19 0;
+#X connect 14 0 15 0;
+#X connect 15 0 23 0;
+#X connect 15 0 28 0;
+#X connect 15 0 29 0;
+#X connect 16 0 4 1;
+#X connect 17 0 18 0;
+#X connect 17 0 20 1;
+#X connect 17 0 9 0;
+#X connect 17 0 4 0;
+#X connect 18 0 19 0;
+#X connect 19 0 21 1;
+#X connect 20 0 17 0;
+#X connect 21 0 17 0;
+#X connect 22 0 20 0;
+#X connect 23 0 27 0;
+#X connect 23 1 27 0;
+#X connect 24 0 14 0;
+#X connect 25 0 26 0;
+#X connect 26 0 1 0;
+#X connect 26 0 27 1;
+#X connect 27 0 30 0;
+#X connect 28 0 32 0;
+#X connect 28 1 32 0;
+#X connect 28 2 32 0;
+#X connect 29 0 31 0;
+#X connect 29 1 31 0;
+#X connect 29 2 31 0;
+#X connect 30 0 25 0;
+#X connect 31 0 35 0;
+#X connect 32 0 35 0;
+#X connect 33 0 34 0;
+#X connect 34 0 36 0;
+#X connect 34 1 37 0;
+#X connect 35 0 33 0;
+#X connect 35 1 39 0;
+#X connect 36 0 38 0;
+#X connect 37 0 38 0;
+#X connect 38 0 39 1;
+#X connect 38 0 0 0;
+#X connect 39 0 33 1;
+#X connect 40 0 1 0;
+#X connect 40 0 26 0;
+#X connect 41 0 21 0;
+#X connect 42 0 43 0;
+#X connect 43 0 44 0;
+#X connect 43 0 40 0;
+#X connect 44 0 0 0;
+#X connect 44 0 38 0;
+#X connect 45 0 16 0;
+#X connect 47 0 48 0;
+#X connect 47 0 50 1;
+#X connect 47 0 55 1;
+#X connect 48 0 49 0;
+#X connect 49 0 51 1;
+#X connect 50 0 47 0;
+#X connect 51 0 47 0;
+#X connect 52 0 50 0;
+#X connect 53 0 49 0;
+#X connect 54 0 51 0;
+#X connect 55 0 46 0;
+#X connect 56 0 2 0;
+#X connect 56 0 3 0;
+#X connect 57 0 20 0;
+#X restore 340 90 pd Enemy15;
+#N canvas 200 52 604 704 Enemy16 0;
+#X obj 200 580 pack 0 0;
+#X obj 220 550 t b f;
+#X msg 360 400 -10;
+#X msg 390 400 -10;
+#X obj 160 210 metro;
+#X obj 160 235 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 230 190 int 1;
+#X floatatom 230 222 5 0 0 0 - - -, f 5;
+#X obj 300 232 + 1;
+#X obj 100 200 sel 0;
+#X obj 100 225 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X msg 100 248 -1;
+#X obj 40 200 loadbang;
+#X obj 190 110 loadbang;
+#X obj 230 271 + 1;
+#X floatatom 230 300 5 0 0 0 - - -, f 5;
+#X floatatom 190 160 5 0 0 0 - - -, f 5;
+#X obj 10 570 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 60 150 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 90 150 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 120 150 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 10 120 spigot;
+#X obj 110 120 spigot;
+#X obj 10 90 receive reset;
+#X obj 250 350 sel 4 8;
+#X obj 230 242 % 8;
+#X msg 250 450 \$1;
+#X floatatom 220 500 5 0 0 0 - - -, f 5;
+#X obj 250 390 f 4;
+#X obj 150 350 sel 5 6 7;
+#X obj 70 350 sel 1 2 3;
+#X obj 250 425 - 0.5;
+#X msg 80 380 1;
+#X msg 150 380 2;
+#X obj 100 439 pack f f;
+#X obj 100 468 route 1 2;
+#X obj 90 410 t f b;
+#X obj 100 500 + 0.5;
+#X obj 140 500 - 0.5;
+#X floatatom 120 540 5 0 0 0 - - -, f 5;
+#X obj 170 430 f -3;
+#X msg 60 600 3;
+#X obj 120 80 receive round2;
+#X obj 10 540 receive round2;
+#X msg 10 600 0;
+#X msg 190 135 600;
+#X obj 21 60 receive hit4;
+#X obj 360 350 receive hit4;
+#X obj 230 670 outlet;
+#X obj 330 630 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 360 630 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 390 630 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 280 600 spigot;
+#X obj 380 600 spigot;
+#X obj 280 570 receive reset;
+#X obj 441 601 loadbang;
+#X obj 380 570 receive round2;
+#X obj 230 630 spigot;
+#X connect 0 0 57 0;
+#X connect 1 0 0 0;
+#X connect 1 1 0 1;
+#X connect 2 0 0 0;
+#X connect 3 0 1 0;
+#X connect 4 0 5 0;
+#X connect 5 0 6 0;
+#X connect 6 0 7 0;
+#X connect 6 0 8 0;
+#X connect 7 0 25 0;
+#X connect 8 0 6 1;
+#X connect 9 0 10 0;
+#X connect 10 0 11 0;
+#X connect 11 0 6 0;
+#X connect 12 0 10 0;
+#X connect 13 0 45 0;
+#X connect 13 0 20 0;
+#X connect 14 0 15 0;
+#X connect 15 0 24 0;
+#X connect 15 0 29 0;
+#X connect 15 0 30 0;
+#X connect 16 0 4 1;
+#X connect 17 0 41 0;
+#X connect 17 0 44 0;
+#X connect 18 0 19 0;
+#X connect 18 0 21 1;
+#X connect 18 0 9 0;
+#X connect 18 0 4 0;
+#X connect 19 0 20 0;
+#X connect 20 0 22 1;
+#X connect 21 0 18 0;
+#X connect 22 0 18 0;
+#X connect 23 0 21 0;
+#X connect 24 0 28 0;
+#X connect 24 1 28 0;
+#X connect 25 0 14 0;
+#X connect 26 0 27 0;
+#X connect 27 0 1 0;
+#X connect 27 0 28 1;
+#X connect 28 0 31 0;
+#X connect 29 0 33 0;
+#X connect 29 1 33 0;
+#X connect 29 2 33 0;
+#X connect 30 0 32 0;
+#X connect 30 1 32 0;
+#X connect 30 2 32 0;
+#X connect 31 0 26 0;
+#X connect 32 0 36 0;
+#X connect 33 0 36 0;
+#X connect 34 0 35 0;
+#X connect 35 0 37 0;
+#X connect 35 1 38 0;
+#X connect 36 0 34 0;
+#X connect 36 1 40 0;
+#X connect 37 0 39 0;
+#X connect 38 0 39 0;
+#X connect 39 0 40 1;
+#X connect 39 0 0 0;
+#X connect 40 0 34 1;
+#X connect 41 0 1 0;
+#X connect 41 0 27 0;
+#X connect 42 0 22 0;
+#X connect 43 0 17 0;
+#X connect 44 0 0 0;
+#X connect 44 0 39 0;
+#X connect 45 0 16 0;
+#X connect 46 0 21 0;
+#X connect 47 0 2 0;
+#X connect 47 0 3 0;
+#X connect 49 0 50 0;
+#X connect 49 0 52 1;
+#X connect 49 0 57 1;
+#X connect 50 0 51 0;
+#X connect 51 0 53 1;
+#X connect 52 0 49 0;
+#X connect 53 0 49 0;
+#X connect 54 0 52 0;
+#X connect 55 0 51 0;
+#X connect 56 0 53 0;
+#X connect 57 0 48 0;
+#X restore 490 90 pd Enemy16;
+#N canvas 238 35 607 707 Enemy17 0;
+#X obj 200 580 pack 0 0;
+#X obj 220 550 t b f;
+#X msg 360 400 -10;
+#X msg 390 400 -10;
+#X obj 160 210 metro;
+#X obj 160 235 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 230 190 int 1;
+#X floatatom 230 222 5 0 0 0 - - -, f 5;
+#X obj 300 232 + 1;
+#X obj 100 200 sel 0;
+#X obj 100 225 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X msg 100 248 -1;
+#X obj 40 200 loadbang;
+#X obj 190 110 loadbang;
+#X obj 230 271 + 1;
+#X floatatom 230 300 5 0 0 0 - - -, f 5;
+#X floatatom 190 160 5 0 0 0 - - -, f 5;
+#X obj 10 570 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 60 150 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 90 150 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 120 150 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 10 120 spigot;
+#X obj 110 120 spigot;
+#X obj 10 90 receive reset;
+#X obj 250 350 sel 4 8;
+#X obj 230 242 % 8;
+#X msg 250 450 \$1;
+#X floatatom 220 500 5 0 0 0 - - -, f 5;
+#X obj 250 390 f 4;
+#X obj 150 350 sel 5 6 7;
+#X obj 70 350 sel 1 2 3;
+#X obj 250 425 - 0.5;
+#X msg 80 380 1;
+#X msg 150 380 2;
+#X obj 100 439 pack f f;
+#X obj 100 468 route 1 2;
+#X obj 90 410 t f b;
+#X obj 100 500 + 0.5;
+#X obj 140 500 - 0.5;
+#X floatatom 120 540 5 0 0 0 - - -, f 5;
+#X obj 170 430 f -3;
+#X msg 60 600 3;
+#X obj 120 80 receive round2;
+#X obj 10 540 receive round2;
+#X msg 10 600 1;
+#X msg 190 135 600;
+#X obj 21 60 receive hit5;
+#X obj 360 350 receive hit5;
+#X obj 220 670 outlet;
+#X obj 320 630 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 350 630 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 380 630 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 270 600 spigot;
+#X obj 370 600 spigot;
+#X obj 270 570 receive reset;
+#X obj 431 601 loadbang;
+#X obj 370 570 receive round2;
+#X obj 220 630 spigot;
+#X connect 0 0 57 0;
+#X connect 1 0 0 0;
+#X connect 1 1 0 1;
+#X connect 2 0 0 0;
+#X connect 3 0 1 0;
+#X connect 4 0 5 0;
+#X connect 5 0 6 0;
+#X connect 6 0 7 0;
+#X connect 6 0 8 0;
+#X connect 7 0 25 0;
+#X connect 8 0 6 1;
+#X connect 9 0 10 0;
+#X connect 10 0 11 0;
+#X connect 11 0 6 0;
+#X connect 12 0 10 0;
+#X connect 13 0 45 0;
+#X connect 13 0 20 0;
+#X connect 14 0 15 0;
+#X connect 15 0 24 0;
+#X connect 15 0 29 0;
+#X connect 15 0 30 0;
+#X connect 16 0 4 1;
+#X connect 17 0 44 0;
+#X connect 17 0 41 0;
+#X connect 18 0 19 0;
+#X connect 18 0 21 1;
+#X connect 18 0 9 0;
+#X connect 18 0 4 0;
+#X connect 19 0 20 0;
+#X connect 20 0 22 1;
+#X connect 21 0 18 0;
+#X connect 22 0 18 0;
+#X connect 23 0 21 0;
+#X connect 24 0 28 0;
+#X connect 24 1 28 0;
+#X connect 25 0 14 0;
+#X connect 26 0 27 0;
+#X connect 27 0 1 0;
+#X connect 27 0 28 1;
+#X connect 28 0 31 0;
+#X connect 29 0 33 0;
+#X connect 29 1 33 0;
+#X connect 29 2 33 0;
+#X connect 30 0 32 0;
+#X connect 30 1 32 0;
+#X connect 30 2 32 0;
+#X connect 31 0 26 0;
+#X connect 32 0 36 0;
+#X connect 33 0 36 0;
+#X connect 34 0 35 0;
+#X connect 35 0 37 0;
+#X connect 35 1 38 0;
+#X connect 36 0 34 0;
+#X connect 36 1 40 0;
+#X connect 37 0 39 0;
+#X connect 38 0 39 0;
+#X connect 39 0 40 1;
+#X connect 39 0 0 0;
+#X connect 40 0 34 1;
+#X connect 41 0 1 0;
+#X connect 41 0 27 0;
+#X connect 42 0 22 0;
+#X connect 43 0 17 0;
+#X connect 44 0 0 0;
+#X connect 44 0 39 0;
+#X connect 45 0 16 0;
+#X connect 46 0 21 0;
+#X connect 47 0 2 0;
+#X connect 47 0 3 0;
+#X connect 49 0 50 0;
+#X connect 49 0 52 1;
+#X connect 49 0 57 1;
+#X connect 50 0 51 0;
+#X connect 51 0 53 1;
+#X connect 52 0 49 0;
+#X connect 53 0 49 0;
+#X connect 54 0 52 0;
+#X connect 55 0 51 0;
+#X connect 56 0 53 0;
+#X connect 57 0 48 0;
+#X restore 640 90 pd Enemy17;
+#N canvas 220 56 606 730 Enemy18 0;
+#X obj 200 580 pack 0 0;
+#X obj 220 550 t b f;
+#X msg 360 400 -10;
+#X msg 390 400 -10;
+#X obj 160 210 metro;
+#X obj 160 235 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 230 190 int 1;
+#X floatatom 230 222 5 0 0 0 - - -, f 5;
+#X obj 300 232 + 1;
+#X obj 100 200 sel 0;
+#X obj 100 225 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X msg 100 248 -1;
+#X obj 40 200 loadbang;
+#X obj 190 110 loadbang;
+#X obj 230 271 + 1;
+#X floatatom 230 300 5 0 0 0 - - -, f 5;
+#X floatatom 190 160 5 0 0 0 - - -, f 5;
+#X obj 10 570 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 60 150 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 90 150 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 120 150 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 10 120 spigot;
+#X obj 110 120 spigot;
+#X obj 10 90 receive reset;
+#X obj 250 350 sel 4 8;
+#X obj 230 242 % 8;
+#X msg 250 450 \$1;
+#X floatatom 220 500 5 0 0 0 - - -, f 5;
+#X obj 250 390 f 4;
+#X obj 150 350 sel 5 6 7;
+#X obj 70 350 sel 1 2 3;
+#X obj 250 425 - 0.5;
+#X msg 80 380 1;
+#X msg 150 380 2;
+#X obj 100 439 pack f f;
+#X obj 100 468 route 1 2;
+#X obj 90 410 t f b;
+#X obj 100 500 + 0.5;
+#X obj 140 500 - 0.5;
+#X floatatom 120 540 5 0 0 0 - - -, f 5;
+#X obj 170 430 f -3;
+#X msg 60 600 3;
+#X obj 120 80 receive round2;
+#X obj 10 540 receive round2;
+#X msg 10 600 2;
+#X msg 190 140 600;
+#X obj 20 60 receive hit6;
+#X obj 360 350 receive hit6;
+#X obj 220 670 outlet;
+#X obj 320 630 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 350 630 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 380 630 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 270 600 spigot;
+#X obj 370 600 spigot;
+#X obj 270 570 receive reset;
+#X obj 431 601 loadbang;
+#X obj 370 570 receive round2;
+#X obj 220 630 spigot;
+#X connect 0 0 57 0;
+#X connect 1 0 0 0;
+#X connect 1 1 0 1;
+#X connect 2 0 0 0;
+#X connect 3 0 1 0;
+#X connect 4 0 5 0;
+#X connect 5 0 6 0;
+#X connect 6 0 7 0;
+#X connect 6 0 8 0;
+#X connect 7 0 25 0;
+#X connect 8 0 6 1;
+#X connect 9 0 10 0;
+#X connect 10 0 11 0;
+#X connect 11 0 6 0;
+#X connect 12 0 10 0;
+#X connect 13 0 45 0;
+#X connect 13 0 20 0;
+#X connect 14 0 15 0;
+#X connect 15 0 24 0;
+#X connect 15 0 29 0;
+#X connect 15 0 30 0;
+#X connect 16 0 4 1;
+#X connect 17 0 44 0;
+#X connect 17 0 41 0;
+#X connect 18 0 19 0;
+#X connect 18 0 21 1;
+#X connect 18 0 9 0;
+#X connect 18 0 4 0;
+#X connect 19 0 20 0;
+#X connect 20 0 22 1;
+#X connect 21 0 18 0;
+#X connect 22 0 18 0;
+#X connect 23 0 21 0;
+#X connect 24 0 28 0;
+#X connect 24 1 28 0;
+#X connect 25 0 14 0;
+#X connect 26 0 27 0;
+#X connect 27 0 1 0;
+#X connect 27 0 28 1;
+#X connect 28 0 31 0;
+#X connect 29 0 33 0;
+#X connect 29 1 33 0;
+#X connect 29 2 33 0;
+#X connect 30 0 32 0;
+#X connect 30 1 32 0;
+#X connect 30 2 32 0;
+#X connect 31 0 26 0;
+#X connect 32 0 36 0;
+#X connect 33 0 36 0;
+#X connect 34 0 35 0;
+#X connect 35 0 37 0;
+#X connect 35 1 38 0;
+#X connect 36 0 34 0;
+#X connect 36 1 40 0;
+#X connect 37 0 39 0;
+#X connect 38 0 39 0;
+#X connect 39 0 40 1;
+#X connect 39 0 0 0;
+#X connect 40 0 34 1;
+#X connect 41 0 1 0;
+#X connect 41 0 27 0;
+#X connect 42 0 22 0;
+#X connect 43 0 17 0;
+#X connect 44 0 0 0;
+#X connect 44 0 39 0;
+#X connect 45 0 16 0;
+#X connect 46 0 21 0;
+#X connect 47 0 2 0;
+#X connect 47 0 3 0;
+#X connect 49 0 50 0;
+#X connect 49 0 52 1;
+#X connect 49 0 57 1;
+#X connect 50 0 51 0;
+#X connect 51 0 53 1;
+#X connect 52 0 49 0;
+#X connect 53 0 49 0;
+#X connect 54 0 52 0;
+#X connect 55 0 51 0;
+#X connect 56 0 53 0;
+#X connect 57 0 48 0;
+#X restore 790 90 pd Enemy18;
+#N canvas 720 44 602 702 Enemy19 0;
+#X obj 200 580 pack 0 0;
+#X obj 220 550 t b f;
+#X msg 360 400 -10;
+#X msg 390 400 -10;
+#X obj 160 210 metro;
+#X obj 160 235 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 230 190 int 1;
+#X floatatom 230 222 5 0 0 0 - - -, f 5;
+#X obj 300 232 + 1;
+#X obj 100 200 sel 0;
+#X obj 100 225 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X msg 100 248 -1;
+#X obj 40 200 loadbang;
+#X obj 190 110 loadbang;
+#X obj 230 271 + 1;
+#X floatatom 230 300 5 0 0 0 - - -, f 5;
+#X floatatom 190 160 5 0 0 0 - - -, f 5;
+#X obj 10 570 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 60 150 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 90 150 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 120 150 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 10 120 spigot;
+#X obj 110 120 spigot;
+#X obj 10 90 receive reset;
+#X obj 250 350 sel 4 8;
+#X obj 230 242 % 8;
+#X msg 250 450 \$1;
+#X floatatom 220 500 5 0 0 0 - - -, f 5;
+#X obj 250 390 f 4;
+#X obj 150 350 sel 5 6 7;
+#X obj 70 350 sel 1 2 3;
+#X obj 250 425 - 0.5;
+#X msg 80 380 1;
+#X msg 150 380 2;
+#X obj 100 439 pack f f;
+#X obj 100 468 route 1 2;
+#X obj 90 410 t f b;
+#X obj 100 500 + 0.5;
+#X obj 140 500 - 0.5;
+#X floatatom 120 540 5 0 0 0 - - -, f 5;
+#X obj 170 430 f -3;
+#X obj 120 80 receive round2;
+#X msg 10 600 -2.5;
+#X msg 60 600 3.5;
+#X obj 10 540 receive round2;
+#X msg 190 135 600;
+#X obj 21 60 receive hit7;
+#X obj 360 350 receive hit7;
+#X obj 240 670 outlet;
+#X obj 340 630 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 370 630 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 400 630 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 290 600 spigot;
+#X obj 390 600 spigot;
+#X obj 290 570 receive reset;
+#X obj 451 601 loadbang;
+#X obj 390 570 receive round2;
+#X obj 240 630 spigot;
+#X connect 0 0 57 0;
+#X connect 1 0 0 0;
+#X connect 1 1 0 1;
+#X connect 2 0 0 0;
+#X connect 3 0 1 0;
+#X connect 4 0 5 0;
+#X connect 5 0 6 0;
+#X connect 6 0 7 0;
+#X connect 6 0 8 0;
+#X connect 7 0 25 0;
+#X connect 8 0 6 1;
+#X connect 9 0 10 0;
+#X connect 10 0 11 0;
+#X connect 11 0 6 0;
+#X connect 12 0 10 0;
+#X connect 13 0 45 0;
+#X connect 13 0 20 0;
+#X connect 14 0 15 0;
+#X connect 15 0 24 0;
+#X connect 15 0 29 0;
+#X connect 15 0 30 0;
+#X connect 16 0 4 1;
+#X connect 17 0 42 0;
+#X connect 17 0 43 0;
+#X connect 18 0 19 0;
+#X connect 18 0 21 1;
+#X connect 18 0 9 0;
+#X connect 18 0 4 0;
+#X connect 19 0 20 0;
+#X connect 20 0 22 1;
+#X connect 21 0 18 0;
+#X connect 22 0 18 0;
+#X connect 23 0 21 0;
+#X connect 24 0 28 0;
+#X connect 24 1 28 0;
+#X connect 25 0 14 0;
+#X connect 26 0 27 0;
+#X connect 27 0 1 0;
+#X connect 27 0 28 1;
+#X connect 28 0 31 0;
+#X connect 29 0 33 0;
+#X connect 29 1 33 0;
+#X connect 29 2 33 0;
+#X connect 30 0 32 0;
+#X connect 30 1 32 0;
+#X connect 30 2 32 0;
+#X connect 31 0 26 0;
+#X connect 32 0 36 0;
+#X connect 33 0 36 0;
+#X connect 34 0 35 0;
+#X connect 35 0 37 0;
+#X connect 35 1 38 0;
+#X connect 36 0 34 0;
+#X connect 36 1 40 0;
+#X connect 37 0 39 0;
+#X connect 38 0 39 0;
+#X connect 39 0 40 1;
+#X connect 39 0 0 0;
+#X connect 40 0 34 1;
+#X connect 41 0 22 0;
+#X connect 42 0 0 0;
+#X connect 42 0 39 0;
+#X connect 43 0 1 0;
+#X connect 43 0 27 0;
+#X connect 44 0 17 0;
+#X connect 45 0 16 0;
+#X connect 46 0 21 0;
+#X connect 47 0 2 0;
+#X connect 47 0 3 0;
+#X connect 49 0 50 0;
+#X connect 49 0 52 1;
+#X connect 49 0 57 1;
+#X connect 50 0 51 0;
+#X connect 51 0 53 1;
+#X connect 52 0 49 0;
+#X connect 53 0 49 0;
+#X connect 54 0 52 0;
+#X connect 55 0 51 0;
+#X connect 56 0 53 0;
+#X connect 57 0 48 0;
+#X restore 30 220 pd Enemy19;
+#N canvas 720 44 602 702 Enemy20 0;
+#X obj 200 580 pack 0 0;
+#X obj 220 550 t b f;
+#X msg 360 400 -10;
+#X msg 390 400 -10;
+#X obj 160 210 metro;
+#X obj 160 235 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 230 190 int 1;
+#X floatatom 230 222 5 0 0 0 - - -, f 5;
+#X obj 300 232 + 1;
+#X obj 100 200 sel 0;
+#X obj 100 225 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X msg 100 248 -1;
+#X obj 40 200 loadbang;
+#X obj 190 110 loadbang;
+#X obj 230 271 + 1;
+#X floatatom 230 300 5 0 0 0 - - -, f 5;
+#X floatatom 190 160 5 0 0 0 - - -, f 5;
+#X obj 10 570 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 60 150 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 90 150 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 120 150 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 10 120 spigot;
+#X obj 110 120 spigot;
+#X obj 10 90 receive reset;
+#X obj 250 350 sel 4 8;
+#X obj 230 242 % 8;
+#X msg 250 450 \$1;
+#X floatatom 220 500 5 0 0 0 - - -, f 5;
+#X obj 250 390 f 4;
+#X obj 150 350 sel 5 6 7;
+#X obj 70 350 sel 1 2 3;
+#X obj 250 425 - 0.5;
+#X msg 80 380 1;
+#X msg 150 380 2;
+#X obj 100 439 pack f f;
+#X obj 100 468 route 1 2;
+#X obj 90 410 t f b;
+#X obj 100 500 + 0.5;
+#X obj 140 500 - 0.5;
+#X floatatom 120 540 5 0 0 0 - - -, f 5;
+#X obj 170 430 f -3;
+#X obj 120 80 receive round2;
+#X obj 10 540 receive round2;
+#X msg 10 600 -1.5;
+#X msg 60 600 3.5;
+#X msg 190 135 600;
+#X obj 21 60 receive hit8;
+#X obj 360 350 receive hit8;
+#X obj 240 660 outlet;
+#X obj 340 620 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 370 620 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 400 620 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 290 590 spigot;
+#X obj 390 590 spigot;
+#X obj 290 560 receive reset;
+#X obj 451 591 loadbang;
+#X obj 390 560 receive round2;
+#X obj 240 620 spigot;
+#X connect 0 0 57 0;
+#X connect 1 0 0 0;
+#X connect 1 1 0 1;
+#X connect 2 0 0 0;
+#X connect 3 0 1 0;
+#X connect 4 0 5 0;
+#X connect 5 0 6 0;
+#X connect 6 0 7 0;
+#X connect 6 0 8 0;
+#X connect 7 0 25 0;
+#X connect 8 0 6 1;
+#X connect 9 0 10 0;
+#X connect 10 0 11 0;
+#X connect 11 0 6 0;
+#X connect 12 0 10 0;
+#X connect 13 0 45 0;
+#X connect 13 0 20 0;
+#X connect 14 0 15 0;
+#X connect 15 0 24 0;
+#X connect 15 0 29 0;
+#X connect 15 0 30 0;
+#X connect 16 0 4 1;
+#X connect 17 0 43 0;
+#X connect 17 0 44 0;
+#X connect 18 0 19 0;
+#X connect 18 0 21 1;
+#X connect 18 0 9 0;
+#X connect 18 0 4 0;
+#X connect 19 0 20 0;
+#X connect 20 0 22 1;
+#X connect 21 0 18 0;
+#X connect 22 0 18 0;
+#X connect 23 0 21 0;
+#X connect 24 0 28 0;
+#X connect 24 1 28 0;
+#X connect 25 0 14 0;
+#X connect 26 0 27 0;
+#X connect 27 0 1 0;
+#X connect 27 0 28 1;
+#X connect 28 0 31 0;
+#X connect 29 0 33 0;
+#X connect 29 1 33 0;
+#X connect 29 2 33 0;
+#X connect 30 0 32 0;
+#X connect 30 1 32 0;
+#X connect 30 2 32 0;
+#X connect 31 0 26 0;
+#X connect 32 0 36 0;
+#X connect 33 0 36 0;
+#X connect 34 0 35 0;
+#X connect 35 0 37 0;
+#X connect 35 1 38 0;
+#X connect 36 0 34 0;
+#X connect 36 1 40 0;
+#X connect 37 0 39 0;
+#X connect 38 0 39 0;
+#X connect 39 0 40 1;
+#X connect 39 0 0 0;
+#X connect 40 0 34 1;
+#X connect 41 0 22 0;
+#X connect 42 0 17 0;
+#X connect 43 0 0 0;
+#X connect 43 0 39 0;
+#X connect 44 0 1 0;
+#X connect 44 0 27 0;
+#X connect 45 0 16 0;
+#X connect 46 0 21 0;
+#X connect 47 0 2 0;
+#X connect 47 0 3 0;
+#X connect 49 0 50 0;
+#X connect 49 0 52 1;
+#X connect 49 0 57 1;
+#X connect 50 0 51 0;
+#X connect 51 0 53 1;
+#X connect 52 0 49 0;
+#X connect 53 0 49 0;
+#X connect 54 0 52 0;
+#X connect 55 0 51 0;
+#X connect 56 0 53 0;
+#X connect 57 0 48 0;
+#X restore 190 220 pd Enemy20;
+#N canvas 720 44 602 702 Enemy21 0;
+#X obj 200 580 pack 0 0;
+#X obj 220 550 t b f;
+#X msg 360 400 -10;
+#X msg 390 400 -10;
+#X obj 160 210 metro;
+#X obj 160 235 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 230 190 int 1;
+#X floatatom 230 222 5 0 0 0 - - -, f 5;
+#X obj 300 232 + 1;
+#X obj 100 200 sel 0;
+#X obj 100 225 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X msg 100 248 -1;
+#X obj 40 200 loadbang;
+#X obj 190 110 loadbang;
+#X obj 230 271 + 1;
+#X floatatom 230 300 5 0 0 0 - - -, f 5;
+#X floatatom 190 160 5 0 0 0 - - -, f 5;
+#X obj 10 570 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 60 150 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 90 150 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 120 150 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 10 120 spigot;
+#X obj 110 120 spigot;
+#X obj 10 90 receive reset;
+#X obj 250 350 sel 4 8;
+#X obj 230 242 % 8;
+#X msg 250 450 \$1;
+#X floatatom 220 500 5 0 0 0 - - -, f 5;
+#X obj 250 390 f 4;
+#X obj 150 350 sel 5 6 7;
+#X obj 70 350 sel 1 2 3;
+#X obj 250 425 - 0.5;
+#X msg 80 380 1;
+#X msg 150 380 2;
+#X obj 100 439 pack f f;
+#X obj 100 468 route 1 2;
+#X obj 90 410 t f b;
+#X obj 100 500 + 0.5;
+#X obj 140 500 - 0.5;
+#X floatatom 120 540 5 0 0 0 - - -, f 5;
+#X obj 170 430 f -3;
+#X obj 120 80 receive round2;
+#X obj 10 540 receive round2;
+#X msg 10 600 -0.5;
+#X msg 60 600 3.5;
+#X msg 190 135 600;
+#X obj 360 350 receive hit9;
+#X obj 21 60 receive hit9;
+#X obj 230 670 outlet;
+#X obj 330 630 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 360 630 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 390 630 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 280 600 spigot;
+#X obj 380 600 spigot;
+#X obj 280 570 receive reset;
+#X obj 441 601 loadbang;
+#X obj 380 570 receive round2;
+#X obj 230 630 spigot;
+#X connect 0 0 57 0;
+#X connect 1 0 0 0;
+#X connect 1 1 0 1;
+#X connect 2 0 0 0;
+#X connect 3 0 1 0;
+#X connect 4 0 5 0;
+#X connect 5 0 6 0;
+#X connect 6 0 7 0;
+#X connect 6 0 8 0;
+#X connect 7 0 25 0;
+#X connect 8 0 6 1;
+#X connect 9 0 10 0;
+#X connect 10 0 11 0;
+#X connect 11 0 6 0;
+#X connect 12 0 10 0;
+#X connect 13 0 45 0;
+#X connect 13 0 20 0;
+#X connect 14 0 15 0;
+#X connect 15 0 24 0;
+#X connect 15 0 29 0;
+#X connect 15 0 30 0;
+#X connect 16 0 4 1;
+#X connect 17 0 43 0;
+#X connect 17 0 44 0;
+#X connect 18 0 19 0;
+#X connect 18 0 21 1;
+#X connect 18 0 9 0;
+#X connect 18 0 4 0;
+#X connect 19 0 20 0;
+#X connect 20 0 22 1;
+#X connect 21 0 18 0;
+#X connect 22 0 18 0;
+#X connect 23 0 21 0;
+#X connect 24 0 28 0;
+#X connect 24 1 28 0;
+#X connect 25 0 14 0;
+#X connect 26 0 27 0;
+#X connect 27 0 1 0;
+#X connect 27 0 28 1;
+#X connect 28 0 31 0;
+#X connect 29 0 33 0;
+#X connect 29 1 33 0;
+#X connect 29 2 33 0;
+#X connect 30 0 32 0;
+#X connect 30 1 32 0;
+#X connect 30 2 32 0;
+#X connect 31 0 26 0;
+#X connect 32 0 36 0;
+#X connect 33 0 36 0;
+#X connect 34 0 35 0;
+#X connect 35 0 37 0;
+#X connect 35 1 38 0;
+#X connect 36 0 34 0;
+#X connect 36 1 40 0;
+#X connect 37 0 39 0;
+#X connect 38 0 39 0;
+#X connect 39 0 40 1;
+#X connect 39 0 0 0;
+#X connect 40 0 34 1;
+#X connect 41 0 22 0;
+#X connect 42 0 17 0;
+#X connect 43 0 0 0;
+#X connect 43 0 39 0;
+#X connect 44 0 1 0;
+#X connect 44 0 27 0;
+#X connect 45 0 16 0;
+#X connect 46 0 2 0;
+#X connect 46 0 3 0;
+#X connect 47 0 21 0;
+#X connect 49 0 50 0;
+#X connect 49 0 52 1;
+#X connect 49 0 57 1;
+#X connect 50 0 51 0;
+#X connect 51 0 53 1;
+#X connect 52 0 49 0;
+#X connect 53 0 49 0;
+#X connect 54 0 52 0;
+#X connect 55 0 51 0;
+#X connect 56 0 53 0;
+#X connect 57 0 48 0;
+#X restore 340 220 pd Enemy21;
+#N canvas 720 44 602 702 Enemy22 0;
+#X obj 200 580 pack 0 0;
+#X obj 220 550 t b f;
+#X msg 360 400 -10;
+#X msg 390 400 -10;
+#X obj 160 210 metro;
+#X obj 160 235 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 230 190 int 1;
+#X floatatom 230 222 5 0 0 0 - - -, f 5;
+#X obj 300 232 + 1;
+#X obj 100 200 sel 0;
+#X obj 100 225 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X msg 100 248 -1;
+#X obj 40 200 loadbang;
+#X obj 190 110 loadbang;
+#X obj 230 271 + 1;
+#X floatatom 230 300 5 0 0 0 - - -, f 5;
+#X floatatom 190 160 5 0 0 0 - - -, f 5;
+#X obj 10 570 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 60 150 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 90 150 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 120 150 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 10 120 spigot;
+#X obj 110 120 spigot;
+#X obj 10 90 receive reset;
+#X obj 250 350 sel 4 8;
+#X obj 230 242 % 8;
+#X msg 250 450 \$1;
+#X floatatom 220 500 5 0 0 0 - - -, f 5;
+#X obj 250 390 f 4;
+#X obj 150 350 sel 5 6 7;
+#X obj 70 350 sel 1 2 3;
+#X obj 250 425 - 0.5;
+#X msg 80 380 1;
+#X msg 150 380 2;
+#X obj 100 439 pack f f;
+#X obj 100 468 route 1 2;
+#X obj 90 410 t f b;
+#X obj 100 500 + 0.5;
+#X obj 140 500 - 0.5;
+#X floatatom 120 540 5 0 0 0 - - -, f 5;
+#X obj 170 430 f -3;
+#X obj 120 80 receive round2;
+#X obj 10 540 receive round2;
+#X msg 60 600 3.5;
+#X msg 10 600 0.5;
+#X msg 190 135 600;
+#X obj 360 350 receive hit10;
+#X obj 21 60 receive hit10;
+#X obj 260 660 outlet;
+#X obj 360 620 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 390 620 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 420 620 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 310 590 spigot;
+#X obj 410 590 spigot;
+#X obj 310 560 receive reset;
+#X obj 471 591 loadbang;
+#X obj 410 560 receive round2;
+#X obj 260 620 spigot;
+#X connect 0 0 57 0;
+#X connect 1 0 0 0;
+#X connect 1 1 0 1;
+#X connect 2 0 0 0;
+#X connect 3 0 1 0;
+#X connect 4 0 5 0;
+#X connect 5 0 6 0;
+#X connect 6 0 7 0;
+#X connect 6 0 8 0;
+#X connect 7 0 25 0;
+#X connect 8 0 6 1;
+#X connect 9 0 10 0;
+#X connect 10 0 11 0;
+#X connect 11 0 6 0;
+#X connect 12 0 10 0;
+#X connect 13 0 45 0;
+#X connect 13 0 20 0;
+#X connect 14 0 15 0;
+#X connect 15 0 24 0;
+#X connect 15 0 29 0;
+#X connect 15 0 30 0;
+#X connect 16 0 4 1;
+#X connect 17 0 44 0;
+#X connect 17 0 43 0;
+#X connect 18 0 19 0;
+#X connect 18 0 21 1;
+#X connect 18 0 9 0;
+#X connect 18 0 4 0;
+#X connect 19 0 20 0;
+#X connect 20 0 22 1;
+#X connect 21 0 18 0;
+#X connect 22 0 18 0;
+#X connect 23 0 21 0;
+#X connect 24 0 28 0;
+#X connect 24 1 28 0;
+#X connect 25 0 14 0;
+#X connect 26 0 27 0;
+#X connect 27 0 1 0;
+#X connect 27 0 28 1;
+#X connect 28 0 31 0;
+#X connect 29 0 33 0;
+#X connect 29 1 33 0;
+#X connect 29 2 33 0;
+#X connect 30 0 32 0;
+#X connect 30 1 32 0;
+#X connect 30 2 32 0;
+#X connect 31 0 26 0;
+#X connect 32 0 36 0;
+#X connect 33 0 36 0;
+#X connect 34 0 35 0;
+#X connect 35 0 37 0;
+#X connect 35 1 38 0;
+#X connect 36 0 34 0;
+#X connect 36 1 40 0;
+#X connect 37 0 39 0;
+#X connect 38 0 39 0;
+#X connect 39 0 40 1;
+#X connect 39 0 0 0;
+#X connect 40 0 34 1;
+#X connect 41 0 22 0;
+#X connect 42 0 17 0;
+#X connect 43 0 1 0;
+#X connect 43 0 27 0;
+#X connect 44 0 0 0;
+#X connect 44 0 39 0;
+#X connect 45 0 16 0;
+#X connect 46 0 2 0;
+#X connect 46 0 3 0;
+#X connect 47 0 21 0;
+#X connect 49 0 50 0;
+#X connect 49 0 52 1;
+#X connect 49 0 57 1;
+#X connect 50 0 51 0;
+#X connect 51 0 53 1;
+#X connect 52 0 49 0;
+#X connect 53 0 49 0;
+#X connect 54 0 52 0;
+#X connect 55 0 51 0;
+#X connect 56 0 53 0;
+#X connect 57 0 48 0;
+#X restore 490 220 pd Enemy22;
+#N canvas 720 44 602 702 Enemy23 0;
+#X obj 200 580 pack 0 0;
+#X obj 220 550 t b f;
+#X msg 360 400 -10;
+#X msg 390 400 -10;
+#X obj 160 210 metro;
+#X obj 160 235 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 230 190 int 1;
+#X floatatom 230 222 5 0 0 0 - - -, f 5;
+#X obj 300 232 + 1;
+#X obj 100 200 sel 0;
+#X obj 100 225 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X msg 100 248 -1;
+#X obj 40 200 loadbang;
+#X obj 190 110 loadbang;
+#X obj 230 271 + 1;
+#X floatatom 230 300 5 0 0 0 - - -, f 5;
+#X floatatom 190 160 5 0 0 0 - - -, f 5;
+#X obj 10 570 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 60 150 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 90 150 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 120 150 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 10 120 spigot;
+#X obj 110 120 spigot;
+#X obj 10 90 receive reset;
+#X obj 250 350 sel 4 8;
+#X obj 230 242 % 8;
+#X msg 250 450 \$1;
+#X floatatom 220 500 5 0 0 0 - - -, f 5;
+#X obj 250 390 f 4;
+#X obj 150 350 sel 5 6 7;
+#X obj 70 350 sel 1 2 3;
+#X obj 250 425 - 0.5;
+#X msg 80 380 1;
+#X msg 150 380 2;
+#X obj 100 439 pack f f;
+#X obj 100 468 route 1 2;
+#X obj 90 410 t f b;
+#X obj 100 500 + 0.5;
+#X obj 140 500 - 0.5;
+#X floatatom 120 540 5 0 0 0 - - -, f 5;
+#X obj 170 430 f -3;
+#X obj 120 80 receive round2;
+#X obj 10 540 receive round2;
+#X msg 10 600 1.5;
+#X msg 60 600 3.5;
+#X msg 190 135 600;
+#X obj 360 350 receive hit11;
+#X obj 21 60 receive hit11;
+#X obj 240 670 outlet;
+#X obj 340 630 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 370 630 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 400 630 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 290 600 spigot;
+#X obj 390 600 spigot;
+#X obj 290 570 receive reset;
+#X obj 451 601 loadbang;
+#X obj 390 570 receive round2;
+#X obj 240 630 spigot;
+#X connect 0 0 57 0;
+#X connect 1 0 0 0;
+#X connect 1 1 0 1;
+#X connect 2 0 0 0;
+#X connect 3 0 1 0;
+#X connect 4 0 5 0;
+#X connect 5 0 6 0;
+#X connect 6 0 7 0;
+#X connect 6 0 8 0;
+#X connect 7 0 25 0;
+#X connect 8 0 6 1;
+#X connect 9 0 10 0;
+#X connect 10 0 11 0;
+#X connect 11 0 6 0;
+#X connect 12 0 10 0;
+#X connect 13 0 45 0;
+#X connect 13 0 20 0;
+#X connect 14 0 15 0;
+#X connect 15 0 24 0;
+#X connect 15 0 29 0;
+#X connect 15 0 30 0;
+#X connect 16 0 4 1;
+#X connect 17 0 43 0;
+#X connect 17 0 44 0;
+#X connect 18 0 19 0;
+#X connect 18 0 21 1;
+#X connect 18 0 9 0;
+#X connect 18 0 4 0;
+#X connect 19 0 20 0;
+#X connect 20 0 22 1;
+#X connect 21 0 18 0;
+#X connect 22 0 18 0;
+#X connect 23 0 21 0;
+#X connect 24 0 28 0;
+#X connect 24 1 28 0;
+#X connect 25 0 14 0;
+#X connect 26 0 27 0;
+#X connect 27 0 1 0;
+#X connect 27 0 28 1;
+#X connect 28 0 31 0;
+#X connect 29 0 33 0;
+#X connect 29 1 33 0;
+#X connect 29 2 33 0;
+#X connect 30 0 32 0;
+#X connect 30 1 32 0;
+#X connect 30 2 32 0;
+#X connect 31 0 26 0;
+#X connect 32 0 36 0;
+#X connect 33 0 36 0;
+#X connect 34 0 35 0;
+#X connect 35 0 37 0;
+#X connect 35 1 38 0;
+#X connect 36 0 34 0;
+#X connect 36 1 40 0;
+#X connect 37 0 39 0;
+#X connect 38 0 39 0;
+#X connect 39 0 40 1;
+#X connect 39 0 0 0;
+#X connect 40 0 34 1;
+#X connect 41 0 22 0;
+#X connect 42 0 17 0;
+#X connect 43 0 0 0;
+#X connect 43 0 39 0;
+#X connect 44 0 1 0;
+#X connect 44 0 27 0;
+#X connect 45 0 16 0;
+#X connect 46 0 2 0;
+#X connect 46 0 3 0;
+#X connect 47 0 21 0;
+#X connect 49 0 50 0;
+#X connect 49 0 52 1;
+#X connect 49 0 57 1;
+#X connect 50 0 51 0;
+#X connect 51 0 53 1;
+#X connect 52 0 49 0;
+#X connect 53 0 49 0;
+#X connect 54 0 52 0;
+#X connect 55 0 51 0;
+#X connect 56 0 53 0;
+#X connect 57 0 48 0;
+#X restore 640 220 pd Enemy23;
+#N canvas 720 44 602 702 Enemy24 0;
+#X obj 200 580 pack 0 0;
+#X obj 220 550 t b f;
+#X msg 360 400 -10;
+#X msg 390 400 -10;
+#X obj 160 210 metro;
+#X obj 160 235 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 230 190 int 1;
+#X floatatom 230 222 5 0 0 0 - - -, f 5;
+#X obj 300 232 + 1;
+#X obj 100 200 sel 0;
+#X obj 100 225 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X msg 100 248 -1;
+#X obj 40 200 loadbang;
+#X obj 190 110 loadbang;
+#X obj 230 271 + 1;
+#X floatatom 230 300 5 0 0 0 - - -, f 5;
+#X floatatom 190 160 5 0 0 0 - - -, f 5;
+#X obj 10 570 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 60 150 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 90 150 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 120 150 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 10 120 spigot;
+#X obj 110 120 spigot;
+#X obj 10 90 receive reset;
+#X obj 250 350 sel 4 8;
+#X obj 230 242 % 8;
+#X msg 250 450 \$1;
+#X floatatom 220 500 5 0 0 0 - - -, f 5;
+#X obj 250 390 f 4;
+#X obj 150 350 sel 5 6 7;
+#X obj 70 350 sel 1 2 3;
+#X obj 250 425 - 0.5;
+#X msg 80 380 1;
+#X msg 150 380 2;
+#X obj 100 439 pack f f;
+#X obj 100 468 route 1 2;
+#X obj 90 410 t f b;
+#X obj 100 500 + 0.5;
+#X obj 140 500 - 0.5;
+#X floatatom 120 540 5 0 0 0 - - -, f 5;
+#X obj 170 430 f -3;
+#X obj 120 80 receive round2;
+#X obj 10 540 receive round2;
+#X msg 60 600 3.5;
+#X obj 360 310 receive reset;
+#X msg 190 135 600;
+#X obj 360 350 receive hit12;
+#X obj 21 60 receive hit12;
+#X obj 230 670 outlet;
+#X obj 330 630 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 360 630 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 390 630 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 280 600 spigot;
+#X obj 380 600 spigot;
+#X obj 280 570 receive reset;
+#X obj 441 601 loadbang;
+#X obj 380 570 receive round2;
+#X obj 230 630 spigot;
+#X msg 10 600 -3.5;
+#X connect 0 0 57 0;
+#X connect 1 0 0 0;
+#X connect 1 1 0 1;
+#X connect 2 0 0 0;
+#X connect 3 0 1 0;
+#X connect 4 0 5 0;
+#X connect 5 0 6 0;
+#X connect 6 0 7 0;
+#X connect 6 0 8 0;
+#X connect 7 0 25 0;
+#X connect 8 0 6 1;
+#X connect 9 0 10 0;
+#X connect 10 0 11 0;
+#X connect 11 0 6 0;
+#X connect 12 0 10 0;
+#X connect 13 0 45 0;
+#X connect 13 0 20 0;
+#X connect 14 0 15 0;
+#X connect 15 0 24 0;
+#X connect 15 0 29 0;
+#X connect 15 0 30 0;
+#X connect 16 0 4 1;
+#X connect 17 0 58 0;
+#X connect 17 0 43 0;
+#X connect 18 0 19 0;
+#X connect 18 0 21 1;
+#X connect 18 0 9 0;
+#X connect 18 0 4 0;
+#X connect 19 0 20 0;
+#X connect 20 0 22 1;
+#X connect 21 0 18 0;
+#X connect 22 0 18 0;
+#X connect 23 0 21 0;
+#X connect 24 0 28 0;
+#X connect 24 1 28 0;
+#X connect 25 0 14 0;
+#X connect 26 0 27 0;
+#X connect 27 0 1 0;
+#X connect 27 0 28 1;
+#X connect 28 0 31 0;
+#X connect 29 0 33 0;
+#X connect 29 1 33 0;
+#X connect 29 2 33 0;
+#X connect 30 0 32 0;
+#X connect 30 1 32 0;
+#X connect 30 2 32 0;
+#X connect 31 0 26 0;
+#X connect 32 0 36 0;
+#X connect 33 0 36 0;
+#X connect 34 0 35 0;
+#X connect 35 0 37 0;
+#X connect 35 1 38 0;
+#X connect 36 0 34 0;
+#X connect 36 1 40 0;
+#X connect 37 0 39 0;
+#X connect 38 0 39 0;
+#X connect 39 0 40 1;
+#X connect 39 0 0 0;
+#X connect 40 0 34 1;
+#X connect 41 0 22 0;
+#X connect 42 0 17 0;
+#X connect 43 0 1 0;
+#X connect 43 0 27 0;
+#X connect 44 0 2 0;
+#X connect 44 0 3 0;
+#X connect 45 0 16 0;
+#X connect 46 0 2 0;
+#X connect 46 0 3 0;
+#X connect 47 0 21 0;
+#X connect 49 0 50 0;
+#X connect 49 0 52 1;
+#X connect 49 0 57 1;
+#X connect 50 0 51 0;
+#X connect 51 0 53 1;
+#X connect 52 0 49 0;
+#X connect 53 0 49 0;
+#X connect 54 0 52 0;
+#X connect 55 0 51 0;
+#X connect 56 0 53 0;
+#X connect 57 0 48 0;
+#X connect 58 0 0 0;
+#X connect 58 0 39 0;
+#X restore 790 220 pd Enemy24;
+#N canvas 764 38 606 731 Enemy13 0;
+#X obj 240 660 outlet;
+#X obj 200 580 pack 0 0;
+#X obj 220 550 t b f;
+#X msg 360 400 -10;
+#X msg 390 400 -10;
+#X obj 160 210 metro;
+#X obj 160 235 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 230 190 int 1;
+#X floatatom 230 222 5 0 0 0 - - -, f 5;
+#X obj 300 232 + 1;
+#X obj 100 200 sel 0;
+#X obj 100 225 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X msg 100 248 -1;
+#X obj 40 200 loadbang;
+#X obj 190 110 loadbang;
+#X obj 230 271 + 1;
+#X floatatom 230 300 5 0 0 0 - - -, f 5;
+#X floatatom 190 160 5 0 0 0 - - -, f 5;
+#X obj 60 150 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 90 150 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 120 150 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 10 120 spigot;
+#X obj 110 120 spigot;
+#X obj 10 90 receive reset;
+#X obj 250 350 sel 4 8;
+#X obj 230 242 % 8;
+#X msg 250 450 \$1;
+#X floatatom 220 500 5 0 0 0 - - -, f 5;
+#X obj 250 390 f 4;
+#X obj 150 350 sel 5 6 7;
+#X obj 70 350 sel 1 2 3;
+#X obj 250 425 - 0.5;
+#X msg 80 380 1;
+#X msg 150 380 2;
+#X obj 100 439 pack f f;
+#X obj 100 468 route 1 2;
+#X obj 90 410 t f b;
+#X obj 100 500 + 0.5;
+#X obj 140 500 - 0.5;
+#X floatatom 120 540 5 0 0 0 - - -, f 5;
+#X obj 170 430 f -3;
+#X msg 60 600 3;
+#X obj 120 80 receive round2;
+#X obj 10 540 receive round2;
+#X obj 10 565 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X msg 10 600 -3;
+#X msg 190 135 600;
+#X obj 340 620 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 370 620 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 400 620 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 290 590 spigot;
+#X obj 390 590 spigot;
+#X obj 290 560 receive reset;
+#X obj 451 591 loadbang;
+#X obj 390 560 receive round2;
+#X obj 240 620 spigot;
+#X obj 21 60 receive hit1;
+#X obj 360 350 receive hit1;
+#X connect 1 0 55 0;
+#X connect 2 0 1 0;
+#X connect 2 1 1 1;
+#X connect 3 0 1 0;
+#X connect 4 0 2 0;
+#X connect 5 0 6 0;
+#X connect 6 0 7 0;
+#X connect 7 0 8 0;
+#X connect 7 0 9 0;
+#X connect 8 0 25 0;
+#X connect 9 0 7 1;
+#X connect 10 0 11 0;
+#X connect 11 0 12 0;
+#X connect 12 0 7 0;
+#X connect 13 0 11 0;
+#X connect 14 0 46 0;
+#X connect 14 0 20 0;
+#X connect 15 0 16 0;
+#X connect 16 0 24 0;
+#X connect 16 0 29 0;
+#X connect 16 0 30 0;
+#X connect 17 0 5 1;
+#X connect 18 0 19 0;
+#X connect 18 0 21 1;
+#X connect 18 0 10 0;
+#X connect 18 0 5 0;
+#X connect 19 0 20 0;
+#X connect 20 0 22 1;
+#X connect 21 0 18 0;
+#X connect 22 0 18 0;
+#X connect 23 0 21 0;
+#X connect 24 0 28 0;
+#X connect 24 1 28 0;
+#X connect 25 0 15 0;
+#X connect 26 0 27 0;
+#X connect 27 0 2 0;
+#X connect 27 0 28 1;
+#X connect 28 0 31 0;
+#X connect 29 0 33 0;
+#X connect 29 1 33 0;
+#X connect 29 2 33 0;
+#X connect 30 0 32 0;
+#X connect 30 1 32 0;
+#X connect 30 2 32 0;
+#X connect 31 0 26 0;
+#X connect 32 0 36 0;
+#X connect 33 0 36 0;
+#X connect 34 0 35 0;
+#X connect 35 0 37 0;
+#X connect 35 1 38 0;
+#X connect 36 0 34 0;
+#X connect 36 1 40 0;
+#X connect 37 0 39 0;
+#X connect 38 0 39 0;
+#X connect 39 0 40 1;
+#X connect 39 0 1 0;
+#X connect 40 0 34 1;
+#X connect 41 0 2 0;
+#X connect 41 0 27 0;
+#X connect 42 0 22 0;
+#X connect 43 0 44 0;
+#X connect 44 0 45 0;
+#X connect 44 0 41 0;
+#X connect 45 0 1 0;
+#X connect 45 0 39 0;
+#X connect 46 0 17 0;
+#X connect 47 0 48 0;
+#X connect 47 0 50 1;
+#X connect 47 0 55 1;
+#X connect 48 0 49 0;
+#X connect 49 0 51 1;
+#X connect 50 0 47 0;
+#X connect 51 0 47 0;
+#X connect 52 0 50 0;
+#X connect 53 0 49 0;
+#X connect 54 0 51 0;
+#X connect 55 0 0 0;
+#X connect 56 0 21 0;
+#X connect 57 0 3 0;
+#X connect 57 0 4 0;
+#X restore 40 410 pd Enemy13;
+#N canvas 216 34 602 703 Enemy14 0;
+#X obj 200 580 pack 0 0;
+#X obj 220 550 t b f;
+#X msg 360 400 -10;
+#X msg 390 400 -10;
+#X obj 160 210 metro;
+#X obj 160 235 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 230 190 int 1;
+#X floatatom 230 222 5 0 0 0 - - -, f 5;
+#X obj 300 232 + 1;
+#X obj 100 200 sel 0;
+#X obj 100 225 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X msg 100 248 -1;
+#X obj 40 200 loadbang;
+#X obj 190 110 loadbang;
+#X obj 230 271 + 1;
+#X floatatom 230 300 5 0 0 0 - - -, f 5;
+#X floatatom 190 160 5 0 0 0 - - -, f 5;
+#X obj 10 570 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 60 150 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 90 150 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 120 150 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 10 120 spigot;
+#X obj 110 120 spigot;
+#X obj 10 90 receive reset;
+#X obj 250 350 sel 4 8;
+#X obj 230 242 % 8;
+#X msg 250 450 \$1;
+#X floatatom 220 500 5 0 0 0 - - -, f 5;
+#X obj 250 390 f 4;
+#X obj 150 350 sel 5 6 7;
+#X obj 70 350 sel 1 2 3;
+#X obj 250 425 - 0.5;
+#X msg 80 380 1;
+#X msg 150 380 2;
+#X obj 100 439 pack f f;
+#X obj 100 468 route 1 2;
+#X obj 90 410 t f b;
+#X obj 100 500 + 0.5;
+#X obj 140 500 - 0.5;
+#X floatatom 120 540 5 0 0 0 - - -, f 5;
+#X obj 170 430 f -3;
+#X msg 60 600 3;
+#X obj 120 80 receive round2;
+#X msg 10 600 -2;
+#X obj 10 540 receive round2;
+#X msg 190 135 600;
+#X obj 21 60 receive hit2;
+#X obj 230 670 outlet;
+#X obj 330 630 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 360 630 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 390 630 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 280 600 spigot;
+#X obj 380 600 spigot;
+#X obj 280 570 receive reset;
+#X obj 441 601 loadbang;
+#X obj 380 570 receive round2;
+#X obj 230 630 spigot;
+#X obj 360 350 receive hit2;
+#X connect 0 0 56 0;
+#X connect 1 0 0 0;
+#X connect 1 1 0 1;
+#X connect 2 0 0 0;
+#X connect 3 0 1 0;
+#X connect 4 0 5 0;
+#X connect 5 0 6 0;
+#X connect 6 0 7 0;
+#X connect 6 0 8 0;
+#X connect 7 0 25 0;
+#X connect 8 0 6 1;
+#X connect 9 0 10 0;
+#X connect 10 0 11 0;
+#X connect 11 0 6 0;
+#X connect 12 0 10 0;
+#X connect 13 0 45 0;
+#X connect 13 0 20 0;
+#X connect 14 0 15 0;
+#X connect 15 0 24 0;
+#X connect 15 0 29 0;
+#X connect 15 0 30 0;
+#X connect 16 0 4 1;
+#X connect 17 0 43 0;
+#X connect 17 0 41 0;
+#X connect 18 0 19 0;
+#X connect 18 0 21 1;
+#X connect 18 0 9 0;
+#X connect 18 0 4 0;
+#X connect 19 0 20 0;
+#X connect 20 0 22 1;
+#X connect 21 0 18 0;
+#X connect 22 0 18 0;
+#X connect 23 0 21 0;
+#X connect 24 0 28 0;
+#X connect 24 1 28 0;
+#X connect 25 0 14 0;
+#X connect 26 0 27 0;
+#X connect 27 0 1 0;
+#X connect 27 0 28 1;
+#X connect 28 0 31 0;
+#X connect 29 0 33 0;
+#X connect 29 1 33 0;
+#X connect 29 2 33 0;
+#X connect 30 0 32 0;
+#X connect 30 1 32 0;
+#X connect 30 2 32 0;
+#X connect 31 0 26 0;
+#X connect 32 0 36 0;
+#X connect 33 0 36 0;
+#X connect 34 0 35 0;
+#X connect 35 0 37 0;
+#X connect 35 1 38 0;
+#X connect 36 0 34 0;
+#X connect 36 1 40 0;
+#X connect 37 0 39 0;
+#X connect 38 0 39 0;
+#X connect 39 0 40 1;
+#X connect 39 0 0 0;
+#X connect 40 0 34 1;
+#X connect 41 0 1 0;
+#X connect 41 0 27 0;
+#X connect 42 0 22 0;
+#X connect 43 0 0 0;
+#X connect 43 0 39 0;
+#X connect 44 0 17 0;
+#X connect 45 0 16 0;
+#X connect 46 0 21 0;
+#X connect 48 0 49 0;
+#X connect 48 0 51 1;
+#X connect 48 0 56 1;
+#X connect 49 0 50 0;
+#X connect 50 0 52 1;
+#X connect 51 0 48 0;
+#X connect 52 0 48 0;
+#X connect 53 0 51 0;
+#X connect 54 0 50 0;
+#X connect 55 0 52 0;
+#X connect 56 0 47 0;
+#X connect 57 0 2 0;
+#X connect 57 0 3 0;
+#X restore 200 410 pd Enemy14;
+#N canvas 216 46 602 703 Enemy15 0;
+#X obj 200 580 pack 0 0;
+#X obj 220 550 t b f;
+#X msg 360 400 -10;
+#X msg 390 400 -10;
+#X obj 160 210 metro;
+#X obj 160 235 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 230 190 int 1;
+#X floatatom 230 222 5 0 0 0 - - -, f 5;
+#X obj 300 232 + 1;
+#X obj 100 200 sel 0;
+#X obj 100 225 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X msg 100 248 -1;
+#X obj 40 200 loadbang;
+#X obj 190 110 loadbang;
+#X obj 230 271 + 1;
+#X floatatom 230 300 5 0 0 0 - - -, f 5;
+#X floatatom 190 160 5 0 0 0 - - -, f 5;
+#X obj 60 150 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 90 150 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 120 150 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 10 120 spigot;
+#X obj 110 120 spigot;
+#X obj 10 90 receive reset;
+#X obj 250 350 sel 4 8;
+#X obj 230 242 % 8;
+#X msg 250 450 \$1;
+#X floatatom 220 500 5 0 0 0 - - -, f 5;
+#X obj 250 390 f 4;
+#X obj 150 350 sel 5 6 7;
+#X obj 70 350 sel 1 2 3;
+#X obj 250 425 - 0.5;
+#X msg 80 380 1;
+#X msg 150 380 2;
+#X obj 100 439 pack f f;
+#X obj 100 468 route 1 2;
+#X obj 90 410 t f b;
+#X obj 100 500 + 0.5;
+#X obj 140 500 - 0.5;
+#X floatatom 120 540 5 0 0 0 - - -, f 5;
+#X obj 170 430 f -3;
+#X msg 60 600 3;
+#X obj 120 80 receive round2;
+#X obj 10 540 receive round2;
+#X obj 10 565 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X msg 10 600 -1;
+#X msg 190 135 600;
+#X obj 220 670 outlet;
+#X obj 320 630 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 350 630 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 380 630 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 270 600 spigot;
+#X obj 370 600 spigot;
+#X obj 270 570 receive reset;
+#X obj 431 601 loadbang;
+#X obj 370 570 receive round2;
+#X obj 220 630 spigot;
+#X obj 360 350 receive hit3;
+#X obj 21 60 receive hit3;
+#X connect 0 0 55 0;
+#X connect 1 0 0 0;
+#X connect 1 1 0 1;
+#X connect 2 0 0 0;
+#X connect 3 0 1 0;
+#X connect 4 0 5 0;
+#X connect 5 0 6 0;
+#X connect 6 0 7 0;
+#X connect 6 0 8 0;
+#X connect 7 0 24 0;
+#X connect 8 0 6 1;
+#X connect 9 0 10 0;
+#X connect 10 0 11 0;
+#X connect 11 0 6 0;
+#X connect 12 0 10 0;
+#X connect 13 0 45 0;
+#X connect 13 0 19 0;
+#X connect 14 0 15 0;
+#X connect 15 0 23 0;
+#X connect 15 0 28 0;
+#X connect 15 0 29 0;
+#X connect 16 0 4 1;
+#X connect 17 0 18 0;
+#X connect 17 0 20 1;
+#X connect 17 0 9 0;
+#X connect 17 0 4 0;
+#X connect 18 0 19 0;
+#X connect 19 0 21 1;
+#X connect 20 0 17 0;
+#X connect 21 0 17 0;
+#X connect 22 0 20 0;
+#X connect 23 0 27 0;
+#X connect 23 1 27 0;
+#X connect 24 0 14 0;
+#X connect 25 0 26 0;
+#X connect 26 0 1 0;
+#X connect 26 0 27 1;
+#X connect 27 0 30 0;
+#X connect 28 0 32 0;
+#X connect 28 1 32 0;
+#X connect 28 2 32 0;
+#X connect 29 0 31 0;
+#X connect 29 1 31 0;
+#X connect 29 2 31 0;
+#X connect 30 0 25 0;
+#X connect 31 0 35 0;
+#X connect 32 0 35 0;
+#X connect 33 0 34 0;
+#X connect 34 0 36 0;
+#X connect 34 1 37 0;
+#X connect 35 0 33 0;
+#X connect 35 1 39 0;
+#X connect 36 0 38 0;
+#X connect 37 0 38 0;
+#X connect 38 0 39 1;
+#X connect 38 0 0 0;
+#X connect 39 0 33 1;
+#X connect 40 0 1 0;
+#X connect 40 0 26 0;
+#X connect 41 0 21 0;
+#X connect 42 0 43 0;
+#X connect 43 0 44 0;
+#X connect 43 0 40 0;
+#X connect 44 0 0 0;
+#X connect 44 0 38 0;
+#X connect 45 0 16 0;
+#X connect 47 0 48 0;
+#X connect 47 0 50 1;
+#X connect 47 0 55 1;
+#X connect 48 0 49 0;
+#X connect 49 0 51 1;
+#X connect 50 0 47 0;
+#X connect 51 0 47 0;
+#X connect 52 0 50 0;
+#X connect 53 0 49 0;
+#X connect 54 0 51 0;
+#X connect 55 0 46 0;
+#X connect 56 0 2 0;
+#X connect 56 0 3 0;
+#X connect 57 0 20 0;
+#X restore 350 410 pd Enemy15;
+#N canvas 200 52 604 704 Enemy16 0;
+#X obj 200 580 pack 0 0;
+#X obj 220 550 t b f;
+#X msg 360 400 -10;
+#X msg 390 400 -10;
+#X obj 160 210 metro;
+#X obj 160 235 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 230 190 int 1;
+#X floatatom 230 222 5 0 0 0 - - -, f 5;
+#X obj 300 232 + 1;
+#X obj 100 200 sel 0;
+#X obj 100 225 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X msg 100 248 -1;
+#X obj 40 200 loadbang;
+#X obj 190 110 loadbang;
+#X obj 230 271 + 1;
+#X floatatom 230 300 5 0 0 0 - - -, f 5;
+#X floatatom 190 160 5 0 0 0 - - -, f 5;
+#X obj 10 570 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 60 150 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 90 150 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 120 150 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 10 120 spigot;
+#X obj 110 120 spigot;
+#X obj 10 90 receive reset;
+#X obj 250 350 sel 4 8;
+#X obj 230 242 % 8;
+#X msg 250 450 \$1;
+#X floatatom 220 500 5 0 0 0 - - -, f 5;
+#X obj 250 390 f 4;
+#X obj 150 350 sel 5 6 7;
+#X obj 70 350 sel 1 2 3;
+#X obj 250 425 - 0.5;
+#X msg 80 380 1;
+#X msg 150 380 2;
+#X obj 100 439 pack f f;
+#X obj 100 468 route 1 2;
+#X obj 90 410 t f b;
+#X obj 100 500 + 0.5;
+#X obj 140 500 - 0.5;
+#X floatatom 120 540 5 0 0 0 - - -, f 5;
+#X obj 170 430 f -3;
+#X msg 60 600 3;
+#X obj 120 80 receive round2;
+#X obj 10 540 receive round2;
+#X msg 10 600 0;
+#X msg 190 135 600;
+#X obj 21 60 receive hit4;
+#X obj 360 350 receive hit4;
+#X obj 230 670 outlet;
+#X obj 330 630 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 360 630 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 390 630 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 280 600 spigot;
+#X obj 380 600 spigot;
+#X obj 280 570 receive reset;
+#X obj 441 601 loadbang;
+#X obj 380 570 receive round2;
+#X obj 230 630 spigot;
+#X connect 0 0 57 0;
+#X connect 1 0 0 0;
+#X connect 1 1 0 1;
+#X connect 2 0 0 0;
+#X connect 3 0 1 0;
+#X connect 4 0 5 0;
+#X connect 5 0 6 0;
+#X connect 6 0 7 0;
+#X connect 6 0 8 0;
+#X connect 7 0 25 0;
+#X connect 8 0 6 1;
+#X connect 9 0 10 0;
+#X connect 10 0 11 0;
+#X connect 11 0 6 0;
+#X connect 12 0 10 0;
+#X connect 13 0 45 0;
+#X connect 13 0 20 0;
+#X connect 14 0 15 0;
+#X connect 15 0 24 0;
+#X connect 15 0 29 0;
+#X connect 15 0 30 0;
+#X connect 16 0 4 1;
+#X connect 17 0 41 0;
+#X connect 17 0 44 0;
+#X connect 18 0 19 0;
+#X connect 18 0 21 1;
+#X connect 18 0 9 0;
+#X connect 18 0 4 0;
+#X connect 19 0 20 0;
+#X connect 20 0 22 1;
+#X connect 21 0 18 0;
+#X connect 22 0 18 0;
+#X connect 23 0 21 0;
+#X connect 24 0 28 0;
+#X connect 24 1 28 0;
+#X connect 25 0 14 0;
+#X connect 26 0 27 0;
+#X connect 27 0 1 0;
+#X connect 27 0 28 1;
+#X connect 28 0 31 0;
+#X connect 29 0 33 0;
+#X connect 29 1 33 0;
+#X connect 29 2 33 0;
+#X connect 30 0 32 0;
+#X connect 30 1 32 0;
+#X connect 30 2 32 0;
+#X connect 31 0 26 0;
+#X connect 32 0 36 0;
+#X connect 33 0 36 0;
+#X connect 34 0 35 0;
+#X connect 35 0 37 0;
+#X connect 35 1 38 0;
+#X connect 36 0 34 0;
+#X connect 36 1 40 0;
+#X connect 37 0 39 0;
+#X connect 38 0 39 0;
+#X connect 39 0 40 1;
+#X connect 39 0 0 0;
+#X connect 40 0 34 1;
+#X connect 41 0 1 0;
+#X connect 41 0 27 0;
+#X connect 42 0 22 0;
+#X connect 43 0 17 0;
+#X connect 44 0 0 0;
+#X connect 44 0 39 0;
+#X connect 45 0 16 0;
+#X connect 46 0 21 0;
+#X connect 47 0 2 0;
+#X connect 47 0 3 0;
+#X connect 49 0 50 0;
+#X connect 49 0 52 1;
+#X connect 49 0 57 1;
+#X connect 50 0 51 0;
+#X connect 51 0 53 1;
+#X connect 52 0 49 0;
+#X connect 53 0 49 0;
+#X connect 54 0 52 0;
+#X connect 55 0 51 0;
+#X connect 56 0 53 0;
+#X connect 57 0 48 0;
+#X restore 500 410 pd Enemy16;
+#N canvas 237 34 609 708 Enemy17 0;
+#X obj 200 580 pack 0 0;
+#X obj 220 550 t b f;
+#X msg 360 400 -10;
+#X msg 390 400 -10;
+#X obj 160 210 metro;
+#X obj 160 235 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 230 190 int 1;
+#X floatatom 230 222 5 0 0 0 - - -, f 5;
+#X obj 300 232 + 1;
+#X obj 100 200 sel 0;
+#X obj 100 225 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X msg 100 248 -1;
+#X obj 40 200 loadbang;
+#X obj 190 110 loadbang;
+#X obj 230 271 + 1;
+#X floatatom 230 300 5 0 0 0 - - -, f 5;
+#X floatatom 190 160 5 0 0 0 - - -, f 5;
+#X obj 10 570 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 60 150 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 90 150 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 120 150 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 10 120 spigot;
+#X obj 110 120 spigot;
+#X obj 10 90 receive reset;
+#X obj 250 350 sel 4 8;
+#X obj 230 242 % 8;
+#X msg 250 450 \$1;
+#X floatatom 220 500 5 0 0 0 - - -, f 5;
+#X obj 250 390 f 4;
+#X obj 150 350 sel 5 6 7;
+#X obj 70 350 sel 1 2 3;
+#X obj 250 425 - 0.5;
+#X msg 80 380 1;
+#X msg 150 380 2;
+#X obj 100 439 pack f f;
+#X obj 100 468 route 1 2;
+#X obj 90 410 t f b;
+#X obj 100 500 + 0.5;
+#X obj 140 500 - 0.5;
+#X floatatom 120 540 5 0 0 0 - - -, f 5;
+#X obj 170 430 f -3;
+#X msg 60 600 3;
+#X obj 120 80 receive round2;
+#X obj 10 540 receive round2;
+#X msg 10 600 1;
+#X msg 190 135 600;
+#X obj 21 60 receive hit5;
+#X obj 360 350 receive hit5;
+#X obj 220 670 outlet;
+#X obj 320 630 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 350 630 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 380 630 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 270 600 spigot;
+#X obj 370 600 spigot;
+#X obj 270 570 receive reset;
+#X obj 431 601 loadbang;
+#X obj 370 570 receive round2;
+#X obj 220 630 spigot;
+#X connect 0 0 57 0;
+#X connect 1 0 0 0;
+#X connect 1 1 0 1;
+#X connect 2 0 0 0;
+#X connect 3 0 1 0;
+#X connect 4 0 5 0;
+#X connect 5 0 6 0;
+#X connect 6 0 7 0;
+#X connect 6 0 8 0;
+#X connect 7 0 25 0;
+#X connect 8 0 6 1;
+#X connect 9 0 10 0;
+#X connect 10 0 11 0;
+#X connect 11 0 6 0;
+#X connect 12 0 10 0;
+#X connect 13 0 45 0;
+#X connect 13 0 20 0;
+#X connect 14 0 15 0;
+#X connect 15 0 24 0;
+#X connect 15 0 29 0;
+#X connect 15 0 30 0;
+#X connect 16 0 4 1;
+#X connect 17 0 44 0;
+#X connect 17 0 41 0;
+#X connect 18 0 19 0;
+#X connect 18 0 21 1;
+#X connect 18 0 9 0;
+#X connect 18 0 4 0;
+#X connect 19 0 20 0;
+#X connect 20 0 22 1;
+#X connect 21 0 18 0;
+#X connect 22 0 18 0;
+#X connect 23 0 21 0;
+#X connect 24 0 28 0;
+#X connect 24 1 28 0;
+#X connect 25 0 14 0;
+#X connect 26 0 27 0;
+#X connect 27 0 1 0;
+#X connect 27 0 28 1;
+#X connect 28 0 31 0;
+#X connect 29 0 33 0;
+#X connect 29 1 33 0;
+#X connect 29 2 33 0;
+#X connect 30 0 32 0;
+#X connect 30 1 32 0;
+#X connect 30 2 32 0;
+#X connect 31 0 26 0;
+#X connect 32 0 36 0;
+#X connect 33 0 36 0;
+#X connect 34 0 35 0;
+#X connect 35 0 37 0;
+#X connect 35 1 38 0;
+#X connect 36 0 34 0;
+#X connect 36 1 40 0;
+#X connect 37 0 39 0;
+#X connect 38 0 39 0;
+#X connect 39 0 40 1;
+#X connect 39 0 0 0;
+#X connect 40 0 34 1;
+#X connect 41 0 1 0;
+#X connect 41 0 27 0;
+#X connect 42 0 22 0;
+#X connect 43 0 17 0;
+#X connect 44 0 0 0;
+#X connect 44 0 39 0;
+#X connect 45 0 16 0;
+#X connect 46 0 21 0;
+#X connect 47 0 2 0;
+#X connect 47 0 3 0;
+#X connect 49 0 50 0;
+#X connect 49 0 52 1;
+#X connect 49 0 57 1;
+#X connect 50 0 51 0;
+#X connect 51 0 53 1;
+#X connect 52 0 49 0;
+#X connect 53 0 49 0;
+#X connect 54 0 52 0;
+#X connect 55 0 51 0;
+#X connect 56 0 53 0;
+#X connect 57 0 48 0;
+#X restore 650 410 pd Enemy17;
+#N canvas 220 56 606 730 Enemy18 0;
+#X obj 200 580 pack 0 0;
+#X obj 220 550 t b f;
+#X msg 360 400 -10;
+#X msg 390 400 -10;
+#X obj 160 210 metro;
+#X obj 160 235 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 230 190 int 1;
+#X floatatom 230 222 5 0 0 0 - - -, f 5;
+#X obj 300 232 + 1;
+#X obj 100 200 sel 0;
+#X obj 100 225 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X msg 100 248 -1;
+#X obj 40 200 loadbang;
+#X obj 190 110 loadbang;
+#X obj 230 271 + 1;
+#X floatatom 230 300 5 0 0 0 - - -, f 5;
+#X floatatom 190 160 5 0 0 0 - - -, f 5;
+#X obj 10 570 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 60 150 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 90 150 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 120 150 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 10 120 spigot;
+#X obj 110 120 spigot;
+#X obj 10 90 receive reset;
+#X obj 250 350 sel 4 8;
+#X obj 230 242 % 8;
+#X msg 250 450 \$1;
+#X floatatom 220 500 5 0 0 0 - - -, f 5;
+#X obj 250 390 f 4;
+#X obj 150 350 sel 5 6 7;
+#X obj 70 350 sel 1 2 3;
+#X obj 250 425 - 0.5;
+#X msg 80 380 1;
+#X msg 150 380 2;
+#X obj 100 439 pack f f;
+#X obj 100 468 route 1 2;
+#X obj 90 410 t f b;
+#X obj 100 500 + 0.5;
+#X obj 140 500 - 0.5;
+#X floatatom 120 540 5 0 0 0 - - -, f 5;
+#X obj 170 430 f -3;
+#X msg 60 600 3;
+#X obj 120 80 receive round2;
+#X obj 10 540 receive round2;
+#X msg 10 600 2;
+#X msg 190 140 600;
+#X obj 20 60 receive hit6;
+#X obj 360 350 receive hit6;
+#X obj 220 670 outlet;
+#X obj 320 630 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 350 630 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 380 630 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 270 600 spigot;
+#X obj 370 600 spigot;
+#X obj 270 570 receive reset;
+#X obj 431 601 loadbang;
+#X obj 370 570 receive round2;
+#X obj 220 630 spigot;
+#X connect 0 0 57 0;
+#X connect 1 0 0 0;
+#X connect 1 1 0 1;
+#X connect 2 0 0 0;
+#X connect 3 0 1 0;
+#X connect 4 0 5 0;
+#X connect 5 0 6 0;
+#X connect 6 0 7 0;
+#X connect 6 0 8 0;
+#X connect 7 0 25 0;
+#X connect 8 0 6 1;
+#X connect 9 0 10 0;
+#X connect 10 0 11 0;
+#X connect 11 0 6 0;
+#X connect 12 0 10 0;
+#X connect 13 0 45 0;
+#X connect 13 0 20 0;
+#X connect 14 0 15 0;
+#X connect 15 0 24 0;
+#X connect 15 0 29 0;
+#X connect 15 0 30 0;
+#X connect 16 0 4 1;
+#X connect 17 0 44 0;
+#X connect 17 0 41 0;
+#X connect 18 0 19 0;
+#X connect 18 0 21 1;
+#X connect 18 0 9 0;
+#X connect 18 0 4 0;
+#X connect 19 0 20 0;
+#X connect 20 0 22 1;
+#X connect 21 0 18 0;
+#X connect 22 0 18 0;
+#X connect 23 0 21 0;
+#X connect 24 0 28 0;
+#X connect 24 1 28 0;
+#X connect 25 0 14 0;
+#X connect 26 0 27 0;
+#X connect 27 0 1 0;
+#X connect 27 0 28 1;
+#X connect 28 0 31 0;
+#X connect 29 0 33 0;
+#X connect 29 1 33 0;
+#X connect 29 2 33 0;
+#X connect 30 0 32 0;
+#X connect 30 1 32 0;
+#X connect 30 2 32 0;
+#X connect 31 0 26 0;
+#X connect 32 0 36 0;
+#X connect 33 0 36 0;
+#X connect 34 0 35 0;
+#X connect 35 0 37 0;
+#X connect 35 1 38 0;
+#X connect 36 0 34 0;
+#X connect 36 1 40 0;
+#X connect 37 0 39 0;
+#X connect 38 0 39 0;
+#X connect 39 0 40 1;
+#X connect 39 0 0 0;
+#X connect 40 0 34 1;
+#X connect 41 0 1 0;
+#X connect 41 0 27 0;
+#X connect 42 0 22 0;
+#X connect 43 0 17 0;
+#X connect 44 0 0 0;
+#X connect 44 0 39 0;
+#X connect 45 0 16 0;
+#X connect 46 0 21 0;
+#X connect 47 0 2 0;
+#X connect 47 0 3 0;
+#X connect 49 0 50 0;
+#X connect 49 0 52 1;
+#X connect 49 0 57 1;
+#X connect 50 0 51 0;
+#X connect 51 0 53 1;
+#X connect 52 0 49 0;
+#X connect 53 0 49 0;
+#X connect 54 0 52 0;
+#X connect 55 0 51 0;
+#X connect 56 0 53 0;
+#X connect 57 0 48 0;
+#X restore 800 410 pd Enemy18;
+#N canvas 720 44 602 702 Enemy24 0;
+#X obj 200 580 pack 0 0;
+#X obj 220 550 t b f;
+#X msg 360 400 -10;
+#X msg 390 400 -10;
+#X obj 160 210 metro;
+#X obj 160 235 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 230 190 int 1;
+#X floatatom 230 222 5 0 0 0 - - -, f 5;
+#X obj 300 232 + 1;
+#X obj 100 200 sel 0;
+#X obj 100 225 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X msg 100 248 -1;
+#X obj 40 200 loadbang;
+#X obj 190 110 loadbang;
+#X obj 230 271 + 1;
+#X floatatom 230 300 5 0 0 0 - - -, f 5;
+#X floatatom 190 160 5 0 0 0 - - -, f 5;
+#X obj 10 570 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 60 150 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 90 150 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 120 150 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 10 120 spigot;
+#X obj 110 120 spigot;
+#X obj 10 90 receive reset;
+#X obj 250 350 sel 4 8;
+#X obj 230 242 % 8;
+#X msg 250 450 \$1;
+#X floatatom 220 500 5 0 0 0 - - -, f 5;
+#X obj 250 390 f 4;
+#X obj 150 350 sel 5 6 7;
+#X obj 70 350 sel 1 2 3;
+#X obj 250 425 - 0.5;
+#X msg 80 380 1;
+#X msg 150 380 2;
+#X obj 100 439 pack f f;
+#X obj 100 468 route 1 2;
+#X obj 90 410 t f b;
+#X obj 100 500 + 0.5;
+#X obj 140 500 - 0.5;
+#X floatatom 120 540 5 0 0 0 - - -, f 5;
+#X obj 170 430 f -3;
+#X obj 120 80 receive round2;
+#X obj 10 540 receive round2;
+#X msg 60 600 3.5;
+#X obj 360 310 receive reset;
+#X msg 190 135 600;
+#X obj 360 350 receive hit12;
+#X obj 21 60 receive hit12;
+#X obj 230 670 outlet;
+#X obj 330 630 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 360 630 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 390 630 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 280 600 spigot;
+#X obj 380 600 spigot;
+#X obj 280 570 receive reset;
+#X obj 441 601 loadbang;
+#X obj 380 570 receive round2;
+#X obj 230 630 spigot;
+#X msg 10 600 -3.5;
+#X connect 0 0 57 0;
+#X connect 1 0 0 0;
+#X connect 1 1 0 1;
+#X connect 2 0 0 0;
+#X connect 3 0 1 0;
+#X connect 4 0 5 0;
+#X connect 5 0 6 0;
+#X connect 6 0 7 0;
+#X connect 6 0 8 0;
+#X connect 7 0 25 0;
+#X connect 8 0 6 1;
+#X connect 9 0 10 0;
+#X connect 10 0 11 0;
+#X connect 11 0 6 0;
+#X connect 12 0 10 0;
+#X connect 13 0 45 0;
+#X connect 13 0 20 0;
+#X connect 14 0 15 0;
+#X connect 15 0 24 0;
+#X connect 15 0 29 0;
+#X connect 15 0 30 0;
+#X connect 16 0 4 1;
+#X connect 17 0 58 0;
+#X connect 17 0 43 0;
+#X connect 18 0 19 0;
+#X connect 18 0 21 1;
+#X connect 18 0 9 0;
+#X connect 18 0 4 0;
+#X connect 19 0 20 0;
+#X connect 20 0 22 1;
+#X connect 21 0 18 0;
+#X connect 22 0 18 0;
+#X connect 23 0 21 0;
+#X connect 24 0 28 0;
+#X connect 24 1 28 0;
+#X connect 25 0 14 0;
+#X connect 26 0 27 0;
+#X connect 27 0 1 0;
+#X connect 27 0 28 1;
+#X connect 28 0 31 0;
+#X connect 29 0 33 0;
+#X connect 29 1 33 0;
+#X connect 29 2 33 0;
+#X connect 30 0 32 0;
+#X connect 30 1 32 0;
+#X connect 30 2 32 0;
+#X connect 31 0 26 0;
+#X connect 32 0 36 0;
+#X connect 33 0 36 0;
+#X connect 34 0 35 0;
+#X connect 35 0 37 0;
+#X connect 35 1 38 0;
+#X connect 36 0 34 0;
+#X connect 36 1 40 0;
+#X connect 37 0 39 0;
+#X connect 38 0 39 0;
+#X connect 39 0 40 1;
+#X connect 39 0 0 0;
+#X connect 40 0 34 1;
+#X connect 41 0 22 0;
+#X connect 42 0 17 0;
+#X connect 43 0 1 0;
+#X connect 43 0 27 0;
+#X connect 44 0 2 0;
+#X connect 44 0 3 0;
+#X connect 45 0 16 0;
+#X connect 46 0 2 0;
+#X connect 46 0 3 0;
+#X connect 47 0 21 0;
+#X connect 49 0 50 0;
+#X connect 49 0 52 1;
+#X connect 49 0 57 1;
+#X connect 50 0 51 0;
+#X connect 51 0 53 1;
+#X connect 52 0 49 0;
+#X connect 53 0 49 0;
+#X connect 54 0 52 0;
+#X connect 55 0 51 0;
+#X connect 56 0 53 0;
+#X connect 57 0 48 0;
+#X connect 58 0 0 0;
+#X connect 58 0 39 0;
+#X restore 800 540 pd Enemy24;
+#N canvas 720 44 602 702 Enemy23 0;
+#X obj 200 580 pack 0 0;
+#X obj 220 550 t b f;
+#X msg 360 400 -10;
+#X msg 390 400 -10;
+#X obj 160 210 metro;
+#X obj 160 235 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 230 190 int 1;
+#X floatatom 230 222 5 0 0 0 - - -, f 5;
+#X obj 300 232 + 1;
+#X obj 100 200 sel 0;
+#X obj 100 225 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X msg 100 248 -1;
+#X obj 40 200 loadbang;
+#X obj 190 110 loadbang;
+#X obj 230 271 + 1;
+#X floatatom 230 300 5 0 0 0 - - -, f 5;
+#X floatatom 190 160 5 0 0 0 - - -, f 5;
+#X obj 10 570 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 60 150 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 90 150 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 120 150 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 10 120 spigot;
+#X obj 110 120 spigot;
+#X obj 10 90 receive reset;
+#X obj 250 350 sel 4 8;
+#X obj 230 242 % 8;
+#X msg 250 450 \$1;
+#X floatatom 220 500 5 0 0 0 - - -, f 5;
+#X obj 250 390 f 4;
+#X obj 150 350 sel 5 6 7;
+#X obj 70 350 sel 1 2 3;
+#X obj 250 425 - 0.5;
+#X msg 80 380 1;
+#X msg 150 380 2;
+#X obj 100 439 pack f f;
+#X obj 100 468 route 1 2;
+#X obj 90 410 t f b;
+#X obj 100 500 + 0.5;
+#X obj 140 500 - 0.5;
+#X floatatom 120 540 5 0 0 0 - - -, f 5;
+#X obj 170 430 f -3;
+#X obj 120 80 receive round2;
+#X obj 10 540 receive round2;
+#X msg 10 600 1.5;
+#X msg 60 600 3.5;
+#X msg 190 135 600;
+#X obj 360 350 receive hit11;
+#X obj 21 60 receive hit11;
+#X obj 240 670 outlet;
+#X obj 340 630 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 370 630 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 400 630 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 290 600 spigot;
+#X obj 390 600 spigot;
+#X obj 290 570 receive reset;
+#X obj 451 601 loadbang;
+#X obj 390 570 receive round2;
+#X obj 240 630 spigot;
+#X connect 0 0 57 0;
+#X connect 1 0 0 0;
+#X connect 1 1 0 1;
+#X connect 2 0 0 0;
+#X connect 3 0 1 0;
+#X connect 4 0 5 0;
+#X connect 5 0 6 0;
+#X connect 6 0 7 0;
+#X connect 6 0 8 0;
+#X connect 7 0 25 0;
+#X connect 8 0 6 1;
+#X connect 9 0 10 0;
+#X connect 10 0 11 0;
+#X connect 11 0 6 0;
+#X connect 12 0 10 0;
+#X connect 13 0 45 0;
+#X connect 13 0 20 0;
+#X connect 14 0 15 0;
+#X connect 15 0 24 0;
+#X connect 15 0 29 0;
+#X connect 15 0 30 0;
+#X connect 16 0 4 1;
+#X connect 17 0 43 0;
+#X connect 17 0 44 0;
+#X connect 18 0 19 0;
+#X connect 18 0 21 1;
+#X connect 18 0 9 0;
+#X connect 18 0 4 0;
+#X connect 19 0 20 0;
+#X connect 20 0 22 1;
+#X connect 21 0 18 0;
+#X connect 22 0 18 0;
+#X connect 23 0 21 0;
+#X connect 24 0 28 0;
+#X connect 24 1 28 0;
+#X connect 25 0 14 0;
+#X connect 26 0 27 0;
+#X connect 27 0 1 0;
+#X connect 27 0 28 1;
+#X connect 28 0 31 0;
+#X connect 29 0 33 0;
+#X connect 29 1 33 0;
+#X connect 29 2 33 0;
+#X connect 30 0 32 0;
+#X connect 30 1 32 0;
+#X connect 30 2 32 0;
+#X connect 31 0 26 0;
+#X connect 32 0 36 0;
+#X connect 33 0 36 0;
+#X connect 34 0 35 0;
+#X connect 35 0 37 0;
+#X connect 35 1 38 0;
+#X connect 36 0 34 0;
+#X connect 36 1 40 0;
+#X connect 37 0 39 0;
+#X connect 38 0 39 0;
+#X connect 39 0 40 1;
+#X connect 39 0 0 0;
+#X connect 40 0 34 1;
+#X connect 41 0 22 0;
+#X connect 42 0 17 0;
+#X connect 43 0 0 0;
+#X connect 43 0 39 0;
+#X connect 44 0 1 0;
+#X connect 44 0 27 0;
+#X connect 45 0 16 0;
+#X connect 46 0 2 0;
+#X connect 46 0 3 0;
+#X connect 47 0 21 0;
+#X connect 49 0 50 0;
+#X connect 49 0 52 1;
+#X connect 49 0 57 1;
+#X connect 50 0 51 0;
+#X connect 51 0 53 1;
+#X connect 52 0 49 0;
+#X connect 53 0 49 0;
+#X connect 54 0 52 0;
+#X connect 55 0 51 0;
+#X connect 56 0 53 0;
+#X connect 57 0 48 0;
+#X restore 650 540 pd Enemy23;
+#N canvas 720 44 602 702 Enemy22 0;
+#X obj 200 580 pack 0 0;
+#X obj 220 550 t b f;
+#X msg 360 400 -10;
+#X msg 390 400 -10;
+#X obj 160 210 metro;
+#X obj 160 235 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 230 190 int 1;
+#X floatatom 230 222 5 0 0 0 - - -, f 5;
+#X obj 300 232 + 1;
+#X obj 100 200 sel 0;
+#X obj 100 225 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X msg 100 248 -1;
+#X obj 40 200 loadbang;
+#X obj 190 110 loadbang;
+#X obj 230 271 + 1;
+#X floatatom 230 300 5 0 0 0 - - -, f 5;
+#X floatatom 190 160 5 0 0 0 - - -, f 5;
+#X obj 10 570 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 60 150 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 90 150 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 120 150 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 10 120 spigot;
+#X obj 110 120 spigot;
+#X obj 10 90 receive reset;
+#X obj 250 350 sel 4 8;
+#X obj 230 242 % 8;
+#X msg 250 450 \$1;
+#X floatatom 220 500 5 0 0 0 - - -, f 5;
+#X obj 250 390 f 4;
+#X obj 150 350 sel 5 6 7;
+#X obj 70 350 sel 1 2 3;
+#X obj 250 425 - 0.5;
+#X msg 80 380 1;
+#X msg 150 380 2;
+#X obj 100 439 pack f f;
+#X obj 100 468 route 1 2;
+#X obj 90 410 t f b;
+#X obj 100 500 + 0.5;
+#X obj 140 500 - 0.5;
+#X floatatom 120 540 5 0 0 0 - - -, f 5;
+#X obj 170 430 f -3;
+#X obj 120 80 receive round2;
+#X obj 10 540 receive round2;
+#X msg 60 600 3.5;
+#X msg 10 600 0.5;
+#X msg 190 135 600;
+#X obj 360 350 receive hit10;
+#X obj 21 60 receive hit10;
+#X obj 260 660 outlet;
+#X obj 360 620 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 390 620 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 420 620 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 310 590 spigot;
+#X obj 410 590 spigot;
+#X obj 310 560 receive reset;
+#X obj 471 591 loadbang;
+#X obj 410 560 receive round2;
+#X obj 260 620 spigot;
+#X connect 0 0 57 0;
+#X connect 1 0 0 0;
+#X connect 1 1 0 1;
+#X connect 2 0 0 0;
+#X connect 3 0 1 0;
+#X connect 4 0 5 0;
+#X connect 5 0 6 0;
+#X connect 6 0 7 0;
+#X connect 6 0 8 0;
+#X connect 7 0 25 0;
+#X connect 8 0 6 1;
+#X connect 9 0 10 0;
+#X connect 10 0 11 0;
+#X connect 11 0 6 0;
+#X connect 12 0 10 0;
+#X connect 13 0 45 0;
+#X connect 13 0 20 0;
+#X connect 14 0 15 0;
+#X connect 15 0 24 0;
+#X connect 15 0 29 0;
+#X connect 15 0 30 0;
+#X connect 16 0 4 1;
+#X connect 17 0 44 0;
+#X connect 17 0 43 0;
+#X connect 18 0 19 0;
+#X connect 18 0 21 1;
+#X connect 18 0 9 0;
+#X connect 18 0 4 0;
+#X connect 19 0 20 0;
+#X connect 20 0 22 1;
+#X connect 21 0 18 0;
+#X connect 22 0 18 0;
+#X connect 23 0 21 0;
+#X connect 24 0 28 0;
+#X connect 24 1 28 0;
+#X connect 25 0 14 0;
+#X connect 26 0 27 0;
+#X connect 27 0 1 0;
+#X connect 27 0 28 1;
+#X connect 28 0 31 0;
+#X connect 29 0 33 0;
+#X connect 29 1 33 0;
+#X connect 29 2 33 0;
+#X connect 30 0 32 0;
+#X connect 30 1 32 0;
+#X connect 30 2 32 0;
+#X connect 31 0 26 0;
+#X connect 32 0 36 0;
+#X connect 33 0 36 0;
+#X connect 34 0 35 0;
+#X connect 35 0 37 0;
+#X connect 35 1 38 0;
+#X connect 36 0 34 0;
+#X connect 36 1 40 0;
+#X connect 37 0 39 0;
+#X connect 38 0 39 0;
+#X connect 39 0 40 1;
+#X connect 39 0 0 0;
+#X connect 40 0 34 1;
+#X connect 41 0 22 0;
+#X connect 42 0 17 0;
+#X connect 43 0 1 0;
+#X connect 43 0 27 0;
+#X connect 44 0 0 0;
+#X connect 44 0 39 0;
+#X connect 45 0 16 0;
+#X connect 46 0 2 0;
+#X connect 46 0 3 0;
+#X connect 47 0 21 0;
+#X connect 49 0 50 0;
+#X connect 49 0 52 1;
+#X connect 49 0 57 1;
+#X connect 50 0 51 0;
+#X connect 51 0 53 1;
+#X connect 52 0 49 0;
+#X connect 53 0 49 0;
+#X connect 54 0 52 0;
+#X connect 55 0 51 0;
+#X connect 56 0 53 0;
+#X connect 57 0 48 0;
+#X restore 500 540 pd Enemy22;
+#N canvas 720 44 602 702 Enemy21 0;
+#X obj 200 580 pack 0 0;
+#X obj 220 550 t b f;
+#X msg 360 400 -10;
+#X msg 390 400 -10;
+#X obj 160 210 metro;
+#X obj 160 235 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 230 190 int 1;
+#X floatatom 230 222 5 0 0 0 - - -, f 5;
+#X obj 300 232 + 1;
+#X obj 100 200 sel 0;
+#X obj 100 225 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X msg 100 248 -1;
+#X obj 40 200 loadbang;
+#X obj 190 110 loadbang;
+#X obj 230 271 + 1;
+#X floatatom 230 300 5 0 0 0 - - -, f 5;
+#X floatatom 190 160 5 0 0 0 - - -, f 5;
+#X obj 10 570 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 60 150 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 90 150 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 120 150 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 10 120 spigot;
+#X obj 110 120 spigot;
+#X obj 10 90 receive reset;
+#X obj 250 350 sel 4 8;
+#X obj 230 242 % 8;
+#X msg 250 450 \$1;
+#X floatatom 220 500 5 0 0 0 - - -, f 5;
+#X obj 250 390 f 4;
+#X obj 150 350 sel 5 6 7;
+#X obj 70 350 sel 1 2 3;
+#X obj 250 425 - 0.5;
+#X msg 80 380 1;
+#X msg 150 380 2;
+#X obj 100 439 pack f f;
+#X obj 100 468 route 1 2;
+#X obj 90 410 t f b;
+#X obj 100 500 + 0.5;
+#X obj 140 500 - 0.5;
+#X floatatom 120 540 5 0 0 0 - - -, f 5;
+#X obj 170 430 f -3;
+#X obj 120 80 receive round2;
+#X obj 10 540 receive round2;
+#X msg 10 600 -0.5;
+#X msg 60 600 3.5;
+#X msg 190 135 600;
+#X obj 360 350 receive hit9;
+#X obj 21 60 receive hit9;
+#X obj 230 670 outlet;
+#X obj 330 630 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 360 630 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 390 630 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 280 600 spigot;
+#X obj 380 600 spigot;
+#X obj 280 570 receive reset;
+#X obj 441 601 loadbang;
+#X obj 380 570 receive round2;
+#X obj 230 630 spigot;
+#X connect 0 0 57 0;
+#X connect 1 0 0 0;
+#X connect 1 1 0 1;
+#X connect 2 0 0 0;
+#X connect 3 0 1 0;
+#X connect 4 0 5 0;
+#X connect 5 0 6 0;
+#X connect 6 0 7 0;
+#X connect 6 0 8 0;
+#X connect 7 0 25 0;
+#X connect 8 0 6 1;
+#X connect 9 0 10 0;
+#X connect 10 0 11 0;
+#X connect 11 0 6 0;
+#X connect 12 0 10 0;
+#X connect 13 0 45 0;
+#X connect 13 0 20 0;
+#X connect 14 0 15 0;
+#X connect 15 0 24 0;
+#X connect 15 0 29 0;
+#X connect 15 0 30 0;
+#X connect 16 0 4 1;
+#X connect 17 0 43 0;
+#X connect 17 0 44 0;
+#X connect 18 0 19 0;
+#X connect 18 0 21 1;
+#X connect 18 0 9 0;
+#X connect 18 0 4 0;
+#X connect 19 0 20 0;
+#X connect 20 0 22 1;
+#X connect 21 0 18 0;
+#X connect 22 0 18 0;
+#X connect 23 0 21 0;
+#X connect 24 0 28 0;
+#X connect 24 1 28 0;
+#X connect 25 0 14 0;
+#X connect 26 0 27 0;
+#X connect 27 0 1 0;
+#X connect 27 0 28 1;
+#X connect 28 0 31 0;
+#X connect 29 0 33 0;
+#X connect 29 1 33 0;
+#X connect 29 2 33 0;
+#X connect 30 0 32 0;
+#X connect 30 1 32 0;
+#X connect 30 2 32 0;
+#X connect 31 0 26 0;
+#X connect 32 0 36 0;
+#X connect 33 0 36 0;
+#X connect 34 0 35 0;
+#X connect 35 0 37 0;
+#X connect 35 1 38 0;
+#X connect 36 0 34 0;
+#X connect 36 1 40 0;
+#X connect 37 0 39 0;
+#X connect 38 0 39 0;
+#X connect 39 0 40 1;
+#X connect 39 0 0 0;
+#X connect 40 0 34 1;
+#X connect 41 0 22 0;
+#X connect 42 0 17 0;
+#X connect 43 0 0 0;
+#X connect 43 0 39 0;
+#X connect 44 0 1 0;
+#X connect 44 0 27 0;
+#X connect 45 0 16 0;
+#X connect 46 0 2 0;
+#X connect 46 0 3 0;
+#X connect 47 0 21 0;
+#X connect 49 0 50 0;
+#X connect 49 0 52 1;
+#X connect 49 0 57 1;
+#X connect 50 0 51 0;
+#X connect 51 0 53 1;
+#X connect 52 0 49 0;
+#X connect 53 0 49 0;
+#X connect 54 0 52 0;
+#X connect 55 0 51 0;
+#X connect 56 0 53 0;
+#X connect 57 0 48 0;
+#X restore 350 540 pd Enemy21;
+#N canvas 720 44 602 702 Enemy20 0;
+#X obj 200 580 pack 0 0;
+#X obj 220 550 t b f;
+#X msg 360 400 -10;
+#X msg 390 400 -10;
+#X obj 160 210 metro;
+#X obj 160 235 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 230 190 int 1;
+#X floatatom 230 222 5 0 0 0 - - -, f 5;
+#X obj 300 232 + 1;
+#X obj 100 200 sel 0;
+#X obj 100 225 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X msg 100 248 -1;
+#X obj 40 200 loadbang;
+#X obj 190 110 loadbang;
+#X obj 230 271 + 1;
+#X floatatom 230 300 5 0 0 0 - - -, f 5;
+#X floatatom 190 160 5 0 0 0 - - -, f 5;
+#X obj 10 570 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 60 150 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 90 150 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 120 150 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 10 120 spigot;
+#X obj 110 120 spigot;
+#X obj 10 90 receive reset;
+#X obj 250 350 sel 4 8;
+#X obj 230 242 % 8;
+#X msg 250 450 \$1;
+#X floatatom 220 500 5 0 0 0 - - -, f 5;
+#X obj 250 390 f 4;
+#X obj 150 350 sel 5 6 7;
+#X obj 70 350 sel 1 2 3;
+#X obj 250 425 - 0.5;
+#X msg 80 380 1;
+#X msg 150 380 2;
+#X obj 100 439 pack f f;
+#X obj 100 468 route 1 2;
+#X obj 90 410 t f b;
+#X obj 100 500 + 0.5;
+#X obj 140 500 - 0.5;
+#X floatatom 120 540 5 0 0 0 - - -, f 5;
+#X obj 170 430 f -3;
+#X obj 120 80 receive round2;
+#X obj 10 540 receive round2;
+#X msg 10 600 -1.5;
+#X msg 60 600 3.5;
+#X msg 190 135 600;
+#X obj 21 60 receive hit8;
+#X obj 360 350 receive hit8;
+#X obj 240 660 outlet;
+#X obj 340 620 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 370 620 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 400 620 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 290 590 spigot;
+#X obj 390 590 spigot;
+#X obj 290 560 receive reset;
+#X obj 451 591 loadbang;
+#X obj 390 560 receive round2;
+#X obj 240 620 spigot;
+#X connect 0 0 57 0;
+#X connect 1 0 0 0;
+#X connect 1 1 0 1;
+#X connect 2 0 0 0;
+#X connect 3 0 1 0;
+#X connect 4 0 5 0;
+#X connect 5 0 6 0;
+#X connect 6 0 7 0;
+#X connect 6 0 8 0;
+#X connect 7 0 25 0;
+#X connect 8 0 6 1;
+#X connect 9 0 10 0;
+#X connect 10 0 11 0;
+#X connect 11 0 6 0;
+#X connect 12 0 10 0;
+#X connect 13 0 45 0;
+#X connect 13 0 20 0;
+#X connect 14 0 15 0;
+#X connect 15 0 24 0;
+#X connect 15 0 29 0;
+#X connect 15 0 30 0;
+#X connect 16 0 4 1;
+#X connect 17 0 43 0;
+#X connect 17 0 44 0;
+#X connect 18 0 19 0;
+#X connect 18 0 21 1;
+#X connect 18 0 9 0;
+#X connect 18 0 4 0;
+#X connect 19 0 20 0;
+#X connect 20 0 22 1;
+#X connect 21 0 18 0;
+#X connect 22 0 18 0;
+#X connect 23 0 21 0;
+#X connect 24 0 28 0;
+#X connect 24 1 28 0;
+#X connect 25 0 14 0;
+#X connect 26 0 27 0;
+#X connect 27 0 1 0;
+#X connect 27 0 28 1;
+#X connect 28 0 31 0;
+#X connect 29 0 33 0;
+#X connect 29 1 33 0;
+#X connect 29 2 33 0;
+#X connect 30 0 32 0;
+#X connect 30 1 32 0;
+#X connect 30 2 32 0;
+#X connect 31 0 26 0;
+#X connect 32 0 36 0;
+#X connect 33 0 36 0;
+#X connect 34 0 35 0;
+#X connect 35 0 37 0;
+#X connect 35 1 38 0;
+#X connect 36 0 34 0;
+#X connect 36 1 40 0;
+#X connect 37 0 39 0;
+#X connect 38 0 39 0;
+#X connect 39 0 40 1;
+#X connect 39 0 0 0;
+#X connect 40 0 34 1;
+#X connect 41 0 22 0;
+#X connect 42 0 17 0;
+#X connect 43 0 0 0;
+#X connect 43 0 39 0;
+#X connect 44 0 1 0;
+#X connect 44 0 27 0;
+#X connect 45 0 16 0;
+#X connect 46 0 21 0;
+#X connect 47 0 2 0;
+#X connect 47 0 3 0;
+#X connect 49 0 50 0;
+#X connect 49 0 52 1;
+#X connect 49 0 57 1;
+#X connect 50 0 51 0;
+#X connect 51 0 53 1;
+#X connect 52 0 49 0;
+#X connect 53 0 49 0;
+#X connect 54 0 52 0;
+#X connect 55 0 51 0;
+#X connect 56 0 53 0;
+#X connect 57 0 48 0;
+#X restore 200 540 pd Enemy20;
+#N canvas 720 44 602 702 Enemy19 0;
+#X obj 200 580 pack 0 0;
+#X obj 220 550 t b f;
+#X msg 360 400 -10;
+#X msg 390 400 -10;
+#X obj 160 210 metro;
+#X obj 160 235 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 230 190 int 1;
+#X floatatom 230 222 5 0 0 0 - - -, f 5;
+#X obj 300 232 + 1;
+#X obj 100 200 sel 0;
+#X obj 100 225 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X msg 100 248 -1;
+#X obj 40 200 loadbang;
+#X obj 190 110 loadbang;
+#X obj 230 271 + 1;
+#X floatatom 230 300 5 0 0 0 - - -, f 5;
+#X floatatom 190 160 5 0 0 0 - - -, f 5;
+#X obj 10 570 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 60 150 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 90 150 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 120 150 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 10 120 spigot;
+#X obj 110 120 spigot;
+#X obj 10 90 receive reset;
+#X obj 250 350 sel 4 8;
+#X obj 230 242 % 8;
+#X msg 250 450 \$1;
+#X floatatom 220 500 5 0 0 0 - - -, f 5;
+#X obj 250 390 f 4;
+#X obj 150 350 sel 5 6 7;
+#X obj 70 350 sel 1 2 3;
+#X obj 250 425 - 0.5;
+#X msg 80 380 1;
+#X msg 150 380 2;
+#X obj 100 439 pack f f;
+#X obj 100 468 route 1 2;
+#X obj 90 410 t f b;
+#X obj 100 500 + 0.5;
+#X obj 140 500 - 0.5;
+#X floatatom 120 540 5 0 0 0 - - -, f 5;
+#X obj 170 430 f -3;
+#X obj 120 80 receive round2;
+#X msg 10 600 -2.5;
+#X msg 60 600 3.5;
+#X obj 10 540 receive round2;
+#X msg 190 135 600;
+#X obj 21 60 receive hit7;
+#X obj 360 350 receive hit7;
+#X obj 240 670 outlet;
+#X obj 340 630 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 370 630 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 400 630 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 290 600 spigot;
+#X obj 390 600 spigot;
+#X obj 290 570 receive reset;
+#X obj 451 601 loadbang;
+#X obj 390 570 receive round2;
+#X obj 240 630 spigot;
+#X connect 0 0 57 0;
+#X connect 1 0 0 0;
+#X connect 1 1 0 1;
+#X connect 2 0 0 0;
+#X connect 3 0 1 0;
+#X connect 4 0 5 0;
+#X connect 5 0 6 0;
+#X connect 6 0 7 0;
+#X connect 6 0 8 0;
+#X connect 7 0 25 0;
+#X connect 8 0 6 1;
+#X connect 9 0 10 0;
+#X connect 10 0 11 0;
+#X connect 11 0 6 0;
+#X connect 12 0 10 0;
+#X connect 13 0 45 0;
+#X connect 13 0 20 0;
+#X connect 14 0 15 0;
+#X connect 15 0 24 0;
+#X connect 15 0 29 0;
+#X connect 15 0 30 0;
+#X connect 16 0 4 1;
+#X connect 17 0 42 0;
+#X connect 17 0 43 0;
+#X connect 18 0 19 0;
+#X connect 18 0 21 1;
+#X connect 18 0 9 0;
+#X connect 18 0 4 0;
+#X connect 19 0 20 0;
+#X connect 20 0 22 1;
+#X connect 21 0 18 0;
+#X connect 22 0 18 0;
+#X connect 23 0 21 0;
+#X connect 24 0 28 0;
+#X connect 24 1 28 0;
+#X connect 25 0 14 0;
+#X connect 26 0 27 0;
+#X connect 27 0 1 0;
+#X connect 27 0 28 1;
+#X connect 28 0 31 0;
+#X connect 29 0 33 0;
+#X connect 29 1 33 0;
+#X connect 29 2 33 0;
+#X connect 30 0 32 0;
+#X connect 30 1 32 0;
+#X connect 30 2 32 0;
+#X connect 31 0 26 0;
+#X connect 32 0 36 0;
+#X connect 33 0 36 0;
+#X connect 34 0 35 0;
+#X connect 35 0 37 0;
+#X connect 35 1 38 0;
+#X connect 36 0 34 0;
+#X connect 36 1 40 0;
+#X connect 37 0 39 0;
+#X connect 38 0 39 0;
+#X connect 39 0 40 1;
+#X connect 39 0 0 0;
+#X connect 40 0 34 1;
+#X connect 41 0 22 0;
+#X connect 42 0 0 0;
+#X connect 42 0 39 0;
+#X connect 43 0 1 0;
+#X connect 43 0 27 0;
+#X connect 44 0 17 0;
+#X connect 45 0 16 0;
+#X connect 46 0 21 0;
+#X connect 47 0 2 0;
+#X connect 47 0 3 0;
+#X connect 49 0 50 0;
+#X connect 49 0 52 1;
+#X connect 49 0 57 1;
+#X connect 50 0 51 0;
+#X connect 51 0 53 1;
+#X connect 52 0 49 0;
+#X connect 53 0 49 0;
+#X connect 54 0 52 0;
+#X connect 55 0 51 0;
+#X connect 56 0 53 0;
+#X connect 57 0 48 0;
+#X restore 40 540 pd Enemy19;
+#X connect 0 0 4 2;
+#X connect 1 0 30 0;
+#X connect 2 0 4 1;
+#X connect 3 0 4 0;
+#X connect 5 0 8 2;
+#X connect 6 0 31 0;
+#X connect 7 0 8 0;
+#X connect 9 0 12 2;
+#X connect 10 0 32 0;
+#X connect 11 0 12 0;
+#X connect 13 0 16 2;
+#X connect 14 0 33 0;
+#X connect 15 0 16 0;
+#X connect 17 0 8 1;
+#X connect 18 0 21 2;
+#X connect 19 0 34 0;
+#X connect 20 0 21 0;
+#X connect 22 0 25 2;
+#X connect 23 0 131 0;
+#X connect 24 0 25 0;
+#X connect 26 0 12 1;
+#X connect 27 0 16 1;
+#X connect 28 0 21 1;
+#X connect 29 0 25 1;
+#X connect 30 0 0 0;
+#X connect 31 0 5 0;
+#X connect 32 0 9 0;
+#X connect 33 0 13 0;
+#X connect 34 0 18 0;
+#X connect 35 0 38 2;
+#X connect 36 0 59 0;
+#X connect 37 0 38 0;
+#X connect 39 0 42 2;
+#X connect 40 0 60 0;
+#X connect 41 0 42 0;
+#X connect 43 0 46 2;
+#X connect 44 0 61 0;
+#X connect 45 0 46 0;
+#X connect 47 0 50 2;
+#X connect 48 0 62 0;
+#X connect 49 0 50 0;
+#X connect 51 0 54 2;
+#X connect 52 0 63 0;
+#X connect 53 0 54 0;
+#X connect 55 0 58 2;
+#X connect 56 0 64 0;
+#X connect 57 0 58 0;
+#X connect 59 0 35 0;
+#X connect 60 0 39 0;
+#X connect 61 0 43 0;
+#X connect 62 0 47 0;
+#X connect 63 0 51 0;
+#X connect 64 0 55 0;
+#X connect 65 0 58 1;
+#X connect 66 0 54 1;
+#X connect 67 0 50 1;
+#X connect 68 0 46 1;
+#X connect 69 0 42 1;
+#X connect 70 0 38 1;
+#X connect 71 0 74 2;
+#X connect 72 0 132 0;
+#X connect 73 0 74 1;
+#X connect 75 0 130 2;
+#X connect 76 0 143 0;
+#X connect 77 0 130 1;
+#X connect 78 0 74 0;
+#X connect 79 0 130 0;
+#X connect 80 0 120 2;
+#X connect 81 0 133 0;
+#X connect 82 0 121 2;
+#X connect 83 0 134 0;
+#X connect 84 0 122 2;
+#X connect 85 0 135 0;
+#X connect 86 0 120 1;
+#X connect 87 0 123 2;
+#X connect 88 0 136 0;
+#X connect 89 0 124 2;
+#X connect 90 0 137 0;
+#X connect 91 0 121 1;
+#X connect 92 0 122 1;
+#X connect 93 0 123 1;
+#X connect 94 0 124 1;
+#X connect 96 0 142 0;
+#X connect 98 0 141 0;
+#X connect 99 0 127 2;
+#X connect 100 0 140 0;
+#X connect 101 0 126 2;
+#X connect 102 0 139 0;
+#X connect 103 0 125 2;
+#X connect 104 0 138 0;
+#X connect 105 0 125 1;
+#X connect 106 0 126 1;
+#X connect 107 0 127 1;
+#X connect 108 0 128 1;
+#X connect 109 0 129 1;
+#X connect 110 0 120 0;
+#X connect 111 0 121 0;
+#X connect 112 0 122 0;
+#X connect 113 0 123 0;
+#X connect 114 0 124 0;
+#X connect 115 0 125 0;
+#X connect 116 0 126 0;
+#X connect 117 0 127 0;
+#X connect 118 0 128 0;
+#X connect 119 0 129 0;
+#X connect 131 0 22 0;
+#X connect 132 0 71 0;
+#X connect 133 0 80 0;
+#X connect 134 0 82 0;
+#X connect 135 0 84 0;
+#X connect 136 0 87 0;
+#X connect 137 0 89 0;
+#X connect 138 0 103 0;
+#X connect 139 0 101 0;
+#X connect 140 0 99 0;
+#X connect 141 0 97 0;
+#X connect 142 0 95 0;
+#X connect 143 0 75 0;
+#X connect 144 0 8 1;
+#X connect 145 0 12 1;
+#X connect 146 0 16 1;
+#X connect 147 0 21 1;
+#X connect 148 0 25 1;
+#X connect 149 0 38 1;
+#X connect 150 0 42 1;
+#X connect 151 0 46 1;
+#X connect 152 0 50 1;
+#X connect 153 0 54 1;
+#X connect 154 0 58 1;
+#X connect 155 0 4 1;
+#X connect 156 0 74 1;
+#X connect 157 0 130 1;
+#X connect 158 0 120 1;
+#X connect 159 0 129 1;
+#X connect 160 0 121 1;
+#X connect 161 0 128 1;
+#X connect 162 0 122 1;
+#X connect 163 0 127 1;
+#X connect 164 0 123 1;
+#X connect 165 0 126 1;
+#X connect 166 0 124 1;
+#X connect 167 0 125 1;
+#X connect 168 0 4 1;
+#X connect 169 0 8 1;
+#X connect 170 0 12 1;
+#X connect 171 0 16 1;
+#X connect 172 0 21 1;
+#X connect 173 0 25 1;
+#X connect 174 0 38 1;
+#X connect 175 0 42 1;
+#X connect 176 0 46 1;
+#X connect 177 0 50 1;
+#X connect 178 0 54 1;
+#X connect 179 0 58 1;
+#X connect 180 0 74 1;
+#X connect 181 0 120 1;
+#X connect 182 0 121 1;
+#X connect 183 0 122 1;
+#X connect 184 0 123 1;
+#X connect 185 0 124 1;
+#X connect 186 0 125 1;
+#X connect 187 0 126 1;
+#X connect 188 0 127 1;
+#X connect 189 0 128 1;
+#X connect 190 0 129 1;
+#X connect 191 0 130 1;
+#X restore 140 470 pd Enemies_layers;
+#N canvas 472 296 454 310 gem 0;
+#X obj 30 150 gemwin;
+#X msg 70 120 destroy;
+#X obj 30 60 receive open;
+#X obj 130 60 receive close;
+#X obj 130 120 send reset;
+#X msg 30 90 create \, 1;
+#X obj 253 114 key 1;
+#X obj 263 184 send reset;
+#X obj 210 230 send reset;
+#X obj 280 230 delay 100;
+#X obj 280 255 send start;
+#X floatatom 330 120 5 0 0 0 - - -, f 5;
+#X obj 253 139 sel 101 114;
+#X msg 60 200 \; pd-Sky_Force.pd vis 1;
+#X obj 100 160 receive start;
+#X connect 1 0 0 0;
+#X connect 2 0 5 0;
+#X connect 2 0 13 0;
+#X connect 3 0 1 0;
+#X connect 3 0 4 0;
+#X connect 5 0 0 0;
+#X connect 6 0 11 0;
+#X connect 6 0 12 0;
+#X connect 9 0 10 0;
+#X connect 12 0 8 0;
+#X connect 12 0 9 0;
+#X connect 12 1 7 0;
+#X connect 14 0 13 0;
+#X restore 40 450 pd gem;
+#N canvas 705 235 389 349 Game_overScreen 0;
+#X msg 20 170 set 57;
+#X obj 20 195 gemhead;
+#X obj 20 225 colorRGB 1 0 0;
+#X obj 20 250 text2d GAME OVER;
+#X floatatom 120 225 5 0 0 0 - - -, f 5;
+#X obj 120 180 loadbang;
+#X obj 70 150 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 100 150 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 130 150 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 20 120 spigot;
+#X obj 90 120 spigot;
+#X obj 20 30 receive reset;
+#X obj 170 110 loadbang;
+#X obj 110 90 receive start;
+#X obj 230 90 loadbang;
+#X obj 230 115 delay 100;
+#X msg 120 200 35;
+#X obj 230 140 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X connect 0 0 1 0;
+#X connect 1 0 2 0;
+#X connect 2 0 3 0;
+#X connect 4 0 3 1;
+#X connect 5 0 16 0;
+#X connect 6 0 7 0;
+#X connect 6 0 9 1;
+#X connect 7 0 8 0;
+#X connect 8 0 1 0;
+#X connect 8 0 10 1;
+#X connect 9 0 6 0;
+#X connect 9 0 0 0;
+#X connect 10 0 6 0;
+#X connect 11 0 9 0;
+#X connect 12 0 8 0;
+#X connect 12 0 17 0;
+#X connect 13 0 10 0;
+#X connect 14 0 15 0;
+#X connect 15 0 17 0;
+#X connect 16 0 4 0;
+#X connect 17 0 1 0;
+#X restore 140 490 pd Game_overScreen;
+#N canvas 900 132 602 594 Music_Controller 0;
+#X obj 70 260 readsf~;
+#X obj 70 295 *~ 0.5;
+#X obj 70 330 dac~;
+#X obj 250 260 readsf~;
+#X obj 250 295 *~ 0.5;
+#X obj 250 330 dac~;
+#X obj 120 460 readsf~;
+#X obj 120 495 *~ 0.5;
+#X obj 120 530 dac~;
+#X msg 120 430 open Sound/Destroy.wav \, 1;
+#X obj 120 400 receive destroyed;
+#X obj 320 460 readsf~;
+#X obj 320 495 *~ 0.5;
+#X obj 320 530 dac~;
+#X obj 320 400 receive attack;
+#X msg 320 430 open Sound/Attackbeam.wav \, 1;
+#X msg 70 230 open Sound/Ambience1.wav \, 1;
+#X msg 250 230 open Sound/Ambience2.wav \, 1;
+#X obj 70 120 receive start;
+#N canvas 452 152 694 582 BeatSequencer 0;
+#X obj 160 150 metro;
+#X obj 160 175 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 160 218 int 1;
+#X floatatom 160 250 5 0 0 0 - - -, f 5;
+#X obj 230 260 + 1;
+#X obj 100 140 sel 0;
+#X obj 100 165 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X msg 100 188 -1;
+#X obj 40 140 loadbang;
+#X obj 190 50 loadbang;
+#X obj 160 274 % 8;
+#X obj 160 299 + 1;
+#X floatatom 160 324 5 0 0 0 - - -, f 5;
+#X obj 158 348 sel 1;
+#X obj 158 373 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 158 396 s One;
+#X obj 208 373 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 258 373 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 308 373 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 358 373 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 408 373 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 458 373 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 508 373 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 208 348 sel 2;
+#X obj 208 396 s Two;
+#X obj 258 348 sel 3;
+#X obj 258 396 s Three;
+#X obj 308 348 sel 4;
+#X obj 308 396 s Four;
+#X obj 358 348 sel 5;
+#X obj 358 396 s Five;
+#X obj 408 348 sel 6;
+#X obj 408 396 s Six;
+#X obj 458 348 sel 7;
+#X obj 458 396 s Seven;
+#X obj 508 348 sel 8;
+#X obj 508 396 s Eight;
+#X floatatom 190 100 5 0 0 0 - - -, f 5;
+#X obj 160 110 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 268 158 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 268 228 readsf~;
+#X obj 268 263 *~ 0.5;
+#X obj 268 298 dac~;
+#X msg 190 75 250;
+#X floatatom 108 313 5 0 0 0 - - -, f 5;
+#X obj 78 338 select 0;
+#X obj 48 368 send new_pattern;
+#N canvas 0 0 1523 754 Drums 0;
+#X obj 20 60 receive One;
+#X obj 20 100 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 20 128 spigot;
+#X obj 20 153 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 60 100 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 170 100 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 170 128 spigot;
+#X obj 170 150 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 220 100 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 340 100 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 340 128 spigot;
+#X obj 340 150 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 380 100 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 490 100 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 490 128 spigot;
+#X obj 490 153 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 530 100 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 650 100 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 650 128 spigot;
+#X obj 650 160 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 690 100 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 800 100 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 800 128 spigot;
+#X obj 800 160 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 840 100 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 950 100 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 950 128 spigot;
+#X obj 950 160 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 990 100 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 1100 100 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 1100 130 spigot;
+#X obj 1100 160 bng 16 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 1140 100 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 170 70 receive Two;
+#X obj 340 70 receive Three;
+#X obj 490 70 receive Four;
+#X obj 650 70 receive Five;
+#X obj 800 70 receive Six;
+#X obj 950 70 receive Seven;
+#X obj 1100 70 receive Eight;
+#X obj 110 10 r new_pattern;
+#X obj 110 35 random 100;
+#X floatatom 110 60 5 0 0 0 - - -, f 5;
+#X obj 110 80 < 100;
+#X obj 260 10 r new_pattern;
+#X obj 260 35 random 100;
+#X floatatom 260 60 5 0 0 0 - - -, f 5;
+#X obj 430 10 r new_pattern;
+#X obj 430 35 random 100;
+#X floatatom 430 60 5 0 0 0 - - -, f 5;
+#X obj 580 10 r new_pattern;
+#X obj 580 35 random 100;
+#X floatatom 580 60 5 0 0 0 - - -, f 5;
+#X obj 730 10 r new_pattern;
+#X obj 730 35 random 100;
+#X floatatom 730 60 5 0 0 0 - - -, f 5;
+#X obj 730 80 < 100;
+#X obj 880 10 r new_pattern;
+#X obj 880 35 random 100;
+#X floatatom 880 60 5 0 0 0 - - -, f 5;
+#X obj 1040 10 r new_pattern;
+#X obj 1040 35 random 100;
+#X floatatom 1040 60 5 0 0 0 - - -, f 5;
+#X obj 1200 10 r new_pattern;
+#X obj 1200 35 random 100;
+#X floatatom 1200 60 5 0 0 0 - - -, f 5;
+#X obj 260 80 < 25;
+#X obj 430 80 < 70;
+#X obj 580 80 < 25;
+#X obj 880 80 < 25;
+#X obj 1040 80 < 70;
+#X obj 1200 80 < 25;
+#X obj 33 303 receive One;
+#X obj 33 343 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 33 371 spigot;
+#X obj 33 396 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 73 343 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 183 343 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 183 371 spigot;
+#X obj 183 393 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 233 343 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 353 343 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 353 371 spigot;
+#X obj 353 393 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 393 343 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 503 343 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 503 371 spigot;
+#X obj 503 396 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 543 343 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 663 343 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 663 371 spigot;
+#X obj 663 403 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 703 343 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 813 343 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 813 371 spigot;
+#X obj 813 403 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 853 343 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 963 343 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 963 371 spigot;
+#X obj 963 403 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 1003 343 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 1113 343 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 1113 373 spigot;
+#X obj 1113 403 bng 16 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 1153 343 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 183 313 receive Two;
+#X obj 353 313 receive Three;
+#X obj 503 313 receive Four;
+#X obj 663 313 receive Five;
+#X obj 813 313 receive Six;
+#X obj 963 313 receive Seven;
+#X obj 1113 313 receive Eight;
+#X obj 123 253 r new_pattern;
+#X obj 123 278 random 100;
+#X floatatom 123 303 5 0 0 0 - - -, f 5;
+#X obj 273 253 r new_pattern;
+#X obj 273 278 random 100;
+#X floatatom 273 303 5 0 0 0 - - -, f 5;
+#X obj 443 253 r new_pattern;
+#X obj 443 278 random 100;
+#X floatatom 443 303 5 0 0 0 - - -, f 5;
+#X obj 593 253 r new_pattern;
+#X obj 593 278 random 100;
+#X floatatom 593 303 5 0 0 0 - - -, f 5;
+#X obj 743 253 r new_pattern;
+#X obj 743 278 random 100;
+#X floatatom 743 303 5 0 0 0 - - -, f 5;
+#X obj 893 253 r new_pattern;
+#X obj 893 278 random 100;
+#X floatatom 893 303 5 0 0 0 - - -, f 5;
+#X obj 1053 253 r new_pattern;
+#X obj 1053 278 random 100;
+#X floatatom 1053 303 5 0 0 0 - - -, f 5;
+#X obj 1213 253 r new_pattern;
+#X obj 1213 278 random 100;
+#X floatatom 1213 303 5 0 0 0 - - -, f 5;
+#X obj 593 323 < 25;
+#X obj 1213 323 < 25;
+#X obj 32 542 receive One;
+#X obj 32 582 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 32 610 spigot;
+#X obj 32 635 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 72 582 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 182 582 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 182 610 spigot;
+#X obj 182 632 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 232 582 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 352 582 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 352 610 spigot;
+#X obj 352 632 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 392 582 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 502 582 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 502 610 spigot;
+#X obj 502 635 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 542 582 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 662 582 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 662 610 spigot;
+#X obj 662 642 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 702 582 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 812 582 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 812 610 spigot;
+#X obj 812 642 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 852 582 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 962 582 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 962 610 spigot;
+#X obj 962 642 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 1002 582 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 1112 582 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 1112 612 spigot;
+#X obj 1112 642 bng 16 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 1152 582 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 182 552 receive Two;
+#X obj 352 552 receive Three;
+#X obj 502 552 receive Four;
+#X obj 662 552 receive Five;
+#X obj 812 552 receive Six;
+#X obj 962 552 receive Seven;
+#X obj 1112 552 receive Eight;
+#X obj 122 492 r new_pattern;
+#X obj 122 517 random 100;
+#X floatatom 122 542 5 0 0 0 - - -, f 5;
+#X obj 122 562 < 100;
+#X obj 272 492 r new_pattern;
+#X obj 272 517 random 100;
+#X floatatom 272 542 5 0 0 0 - - -, f 5;
+#X obj 442 492 r new_pattern;
+#X obj 442 517 random 100;
+#X floatatom 442 542 5 0 0 0 - - -, f 5;
+#X obj 592 492 r new_pattern;
+#X obj 592 517 random 100;
+#X floatatom 592 542 5 0 0 0 - - -, f 5;
+#X obj 742 492 r new_pattern;
+#X obj 742 517 random 100;
+#X floatatom 742 542 5 0 0 0 - - -, f 5;
+#X obj 742 562 < 100;
+#X obj 892 492 r new_pattern;
+#X obj 892 517 random 100;
+#X floatatom 892 542 5 0 0 0 - - -, f 5;
+#X obj 1052 492 r new_pattern;
+#X obj 1052 517 random 100;
+#X floatatom 1052 542 5 0 0 0 - - -, f 5;
+#X obj 1212 492 r new_pattern;
+#X obj 1212 517 random 100;
+#X floatatom 1212 542 5 0 0 0 - - -, f 5;
+#X obj 442 562 < 70;
+#X obj 892 562 < 25;
+#X obj 1212 562 < 25;
+#X obj 542 672 send Third;
+#X obj 530 190 send First;
+#X obj 543 433 send Second;
+#X obj 123 323 < 1;
+#X obj 273 323 < 1;
+#X obj 444 323 < 100;
+#X obj 1053 323 < 100;
+#X obj 893 323 < 25;
+#X obj 743 323 < 75;
+#X obj 272 562 < 85;
+#X obj 592 562 < 65;
+#X obj 1052 562 < 90;
+#X connect 0 0 1 0;
+#X connect 1 0 2 0;
+#X connect 2 0 3 0;
+#X connect 3 0 208 0;
+#X connect 4 0 2 1;
+#X connect 5 0 6 0;
+#X connect 6 0 7 0;
+#X connect 7 0 208 0;
+#X connect 8 0 6 1;
+#X connect 9 0 10 0;
+#X connect 10 0 11 0;
+#X connect 11 0 208 0;
+#X connect 12 0 10 1;
+#X connect 13 0 14 0;
+#X connect 14 0 15 0;
+#X connect 15 0 208 0;
+#X connect 16 0 14 1;
+#X connect 17 0 18 0;
+#X connect 18 0 19 0;
+#X connect 19 0 208 0;
+#X connect 20 0 18 1;
+#X connect 21 0 22 0;
+#X connect 22 0 23 0;
+#X connect 23 0 208 0;
+#X connect 24 0 22 1;
+#X connect 25 0 26 0;
+#X connect 26 0 27 0;
+#X connect 27 0 208 0;
+#X connect 28 0 26 1;
+#X connect 29 0 30 0;
+#X connect 30 0 31 0;
+#X connect 31 0 208 0;
+#X connect 32 0 30 1;
+#X connect 33 0 5 0;
+#X connect 34 0 9 0;
+#X connect 35 0 13 0;
+#X connect 36 0 17 0;
+#X connect 37 0 21 0;
+#X connect 38 0 25 0;
+#X connect 39 0 29 0;
+#X connect 40 0 41 0;
+#X connect 41 0 42 0;
+#X connect 42 0 43 0;
+#X connect 43 0 4 0;
+#X connect 44 0 45 0;
+#X connect 45 0 46 0;
+#X connect 46 0 66 0;
+#X connect 47 0 48 0;
+#X connect 48 0 49 0;
+#X connect 49 0 67 0;
+#X connect 50 0 51 0;
+#X connect 51 0 52 0;
+#X connect 52 0 68 0;
+#X connect 53 0 54 0;
+#X connect 54 0 55 0;
+#X connect 55 0 56 0;
+#X connect 56 0 20 0;
+#X connect 57 0 58 0;
+#X connect 58 0 59 0;
+#X connect 59 0 69 0;
+#X connect 60 0 61 0;
+#X connect 61 0 62 0;
+#X connect 62 0 70 0;
+#X connect 63 0 64 0;
+#X connect 64 0 65 0;
+#X connect 65 0 71 0;
+#X connect 66 0 8 0;
+#X connect 67 0 12 0;
+#X connect 68 0 16 0;
+#X connect 69 0 24 0;
+#X connect 70 0 28 0;
+#X connect 71 0 32 0;
+#X connect 72 0 73 0;
+#X connect 73 0 74 0;
+#X connect 74 0 75 0;
+#X connect 75 0 209 0;
+#X connect 76 0 74 1;
+#X connect 77 0 78 0;
+#X connect 78 0 79 0;
+#X connect 79 0 209 0;
+#X connect 80 0 78 1;
+#X connect 81 0 82 0;
+#X connect 82 0 83 0;
+#X connect 83 0 209 0;
+#X connect 84 0 82 1;
+#X connect 85 0 86 0;
+#X connect 86 0 87 0;
+#X connect 87 0 209 0;
+#X connect 88 0 86 1;
+#X connect 89 0 90 0;
+#X connect 90 0 91 0;
+#X connect 91 0 209 0;
+#X connect 92 0 90 1;
+#X connect 93 0 94 0;
+#X connect 94 0 95 0;
+#X connect 95 0 209 0;
+#X connect 96 0 94 1;
+#X connect 97 0 98 0;
+#X connect 98 0 99 0;
+#X connect 99 0 209 0;
+#X connect 100 0 98 1;
+#X connect 101 0 102 0;
+#X connect 102 0 103 0;
+#X connect 103 0 209 0;
+#X connect 104 0 102 1;
+#X connect 105 0 77 0;
+#X connect 106 0 81 0;
+#X connect 107 0 85 0;
+#X connect 108 0 89 0;
+#X connect 109 0 93 0;
+#X connect 110 0 97 0;
+#X connect 111 0 101 0;
+#X connect 112 0 113 0;
+#X connect 113 0 114 0;
+#X connect 114 0 210 0;
+#X connect 115 0 116 0;
+#X connect 116 0 117 0;
+#X connect 117 0 211 0;
+#X connect 118 0 119 0;
+#X connect 119 0 120 0;
+#X connect 120 0 212 0;
+#X connect 121 0 122 0;
+#X connect 122 0 123 0;
+#X connect 123 0 136 0;
+#X connect 124 0 125 0;
+#X connect 125 0 126 0;
+#X connect 126 0 215 0;
+#X connect 127 0 128 0;
+#X connect 128 0 129 0;
+#X connect 129 0 214 0;
+#X connect 130 0 131 0;
+#X connect 131 0 132 0;
+#X connect 132 0 213 0;
+#X connect 133 0 134 0;
+#X connect 134 0 135 0;
+#X connect 135 0 137 0;
+#X connect 136 0 88 0;
+#X connect 137 0 104 0;
+#X connect 138 0 139 0;
+#X connect 139 0 140 0;
+#X connect 140 0 141 0;
+#X connect 141 0 207 0;
+#X connect 142 0 140 1;
+#X connect 143 0 144 0;
+#X connect 144 0 145 0;
+#X connect 145 0 207 0;
+#X connect 146 0 144 1;
+#X connect 147 0 148 0;
+#X connect 148 0 149 0;
+#X connect 149 0 207 0;
+#X connect 150 0 148 1;
+#X connect 151 0 152 0;
+#X connect 152 0 153 0;
+#X connect 153 0 207 0;
+#X connect 154 0 152 1;
+#X connect 155 0 156 0;
+#X connect 156 0 157 0;
+#X connect 157 0 207 0;
+#X connect 158 0 156 1;
+#X connect 159 0 160 0;
+#X connect 160 0 161 0;
+#X connect 161 0 207 0;
+#X connect 162 0 160 1;
+#X connect 163 0 164 0;
+#X connect 164 0 165 0;
+#X connect 165 0 207 0;
+#X connect 166 0 164 1;
+#X connect 167 0 168 0;
+#X connect 168 0 169 0;
+#X connect 169 0 207 0;
+#X connect 170 0 168 1;
+#X connect 171 0 143 0;
+#X connect 172 0 147 0;
+#X connect 173 0 151 0;
+#X connect 174 0 155 0;
+#X connect 175 0 159 0;
+#X connect 176 0 163 0;
+#X connect 177 0 167 0;
+#X connect 178 0 179 0;
+#X connect 179 0 180 0;
+#X connect 180 0 181 0;
+#X connect 181 0 142 0;
+#X connect 182 0 183 0;
+#X connect 183 0 184 0;
+#X connect 184 0 216 0;
+#X connect 185 0 186 0;
+#X connect 186 0 187 0;
+#X connect 187 0 204 0;
+#X connect 188 0 189 0;
+#X connect 189 0 190 0;
+#X connect 190 0 217 0;
+#X connect 191 0 192 0;
+#X connect 192 0 193 0;
+#X connect 193 0 194 0;
+#X connect 194 0 158 0;
+#X connect 195 0 196 0;
+#X connect 196 0 197 0;
+#X connect 197 0 205 0;
+#X connect 198 0 199 0;
+#X connect 199 0 200 0;
+#X connect 200 0 218 0;
+#X connect 201 0 202 0;
+#X connect 202 0 203 0;
+#X connect 203 0 206 0;
+#X connect 204 0 150 0;
+#X connect 205 0 162 0;
+#X connect 206 0 170 0;
+#X connect 210 0 76 0;
+#X connect 211 0 80 0;
+#X connect 212 0 84 0;
+#X connect 213 0 100 0;
+#X connect 214 0 96 0;
+#X connect 215 0 92 0;
+#X connect 216 0 146 0;
+#X connect 217 0 154 0;
+#X connect 218 0 166 0;
+#X restore 288 68 pd Drums;
+#X obj 268 128 receive First;
+#X obj 428 158 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 428 228 readsf~;
+#X obj 428 263 *~ 0.5;
+#X obj 428 298 dac~;
+#X obj 578 158 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 578 228 readsf~;
+#X obj 578 263 *~ 0.5;
+#X obj 578 298 dac~;
+#X obj 428 128 receive Second;
+#X obj 578 128 receive Third;
+#X obj 108 288 % 16;
+#X obj 80 80 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 50 80 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000 #000000
+0 1;
+#X obj 110 80 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 30 50 spigot;
+#X obj 120 50 spigot;
+#X obj 10 20 receive reset;
+#X obj 120 20 receive round3;
+#X msg 428 198 open Sound/Bass.wav \, 1;
+#X msg 268 198 open Sound/Kick.wav \, 1;
+#X msg 578 198 open Sound/Snare.wav \, 1;
+#X obj 10 0 receive close;
+#X connect 0 0 1 0;
+#X connect 1 0 2 0;
+#X connect 2 0 3 0;
+#X connect 2 0 4 0;
+#X connect 3 0 10 0;
+#X connect 3 0 59 0;
+#X connect 4 0 2 1;
+#X connect 5 0 6 0;
+#X connect 6 0 7 0;
+#X connect 7 0 2 0;
+#X connect 8 0 6 0;
+#X connect 9 0 43 0;
+#X connect 9 0 62 0;
+#X connect 10 0 11 0;
+#X connect 11 0 12 0;
+#X connect 12 0 13 0;
+#X connect 12 0 35 0;
+#X connect 12 0 33 0;
+#X connect 12 0 31 0;
+#X connect 12 0 29 0;
+#X connect 12 0 27 0;
+#X connect 12 0 25 0;
+#X connect 12 0 23 0;
+#X connect 13 0 14 0;
+#X connect 14 0 15 0;
+#X connect 16 0 24 0;
+#X connect 17 0 26 0;
+#X connect 18 0 28 0;
+#X connect 19 0 30 0;
+#X connect 20 0 32 0;
+#X connect 21 0 34 0;
+#X connect 22 0 36 0;
+#X connect 23 0 16 0;
+#X connect 25 0 17 0;
+#X connect 27 0 18 0;
+#X connect 29 0 19 0;
+#X connect 31 0 20 0;
+#X connect 33 0 21 0;
+#X connect 35 0 22 0;
+#X connect 37 0 0 1;
+#X connect 38 0 0 0;
+#X connect 38 0 5 0;
+#X connect 39 0 68 0;
+#X connect 40 0 41 0;
+#X connect 41 0 42 0;
+#X connect 41 0 42 1;
+#X connect 43 0 37 0;
+#X connect 44 0 45 0;
+#X connect 45 0 46 0;
+#X connect 48 0 39 0;
+#X connect 49 0 67 0;
+#X connect 50 0 51 0;
+#X connect 51 0 52 0;
+#X connect 51 0 52 1;
+#X connect 53 0 69 0;
+#X connect 54 0 55 0;
+#X connect 55 0 56 0;
+#X connect 55 0 56 1;
+#X connect 57 0 49 0;
+#X connect 58 0 53 0;
+#X connect 59 0 44 0;
+#X connect 60 0 62 0;
+#X connect 61 0 60 0;
+#X connect 61 0 63 1;
+#X connect 61 0 38 0;
+#X connect 62 0 64 1;
+#X connect 63 0 61 0;
+#X connect 64 0 61 0;
+#X connect 65 0 63 0;
+#X connect 66 0 64 0;
+#X connect 67 0 50 0;
+#X connect 68 0 40 0;
+#X connect 69 0 54 0;
+#X connect 70 0 63 0;
+#X restore 450 230 pd BeatSequencer;
+#X obj 140 260 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 250 130 receive round2;
+#X msg 160 160 stop;
+#X obj 320 260 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 190 80 receive reset;
+#X msg 180 110 stop;
+#X obj 400 100 receive round3;
+#X msg 400 150 stop;
+#X obj 180 50 receive close;
+#X connect 0 0 1 0;
+#X connect 0 1 20 0;
+#X connect 1 0 2 0;
+#X connect 1 0 2 1;
+#X connect 3 0 4 0;
+#X connect 3 1 23 0;
+#X connect 4 0 5 0;
+#X connect 4 0 5 1;
+#X connect 6 0 7 0;
+#X connect 7 0 8 0;
+#X connect 7 0 8 1;
+#X connect 9 0 6 0;
+#X connect 10 0 9 0;
+#X connect 11 0 12 0;
+#X connect 12 0 13 0;
+#X connect 12 0 13 1;
+#X connect 14 0 15 0;
+#X connect 15 0 11 0;
+#X connect 16 0 0 0;
+#X connect 17 0 3 0;
+#X connect 18 0 16 0;
+#X connect 20 0 16 0;
+#X connect 21 0 17 0;
+#X connect 21 0 22 0;
+#X connect 22 0 0 0;
+#X connect 23 0 17 0;
+#X connect 24 0 25 0;
+#X connect 25 0 0 0;
+#X connect 25 0 3 0;
+#X connect 26 0 16 0;
+#X connect 26 0 27 0;
+#X connect 27 0 3 0;
+#X connect 28 0 25 0;
+#X restore 140 510 pd Music_Controller;
+#X obj 500 50 cnv 15 174 118 empty empty empty 20 12 0 14 #fc0400 #404040
+0;
+#X obj 510 60 cnv 15 156 99 empty empty empty 20 12 0 14 #fcfcfc #404040
+0;
+#X obj 500 230 cnv 15 174 118 empty empty empty 20 12 0 14 #fc0400
+#404040 0;
+#X obj 510 240 cnv 15 156 99 empty empty empty 20 12 0 14 #fcfcfc #404040
+0;
+#X obj 520 260 bng 16 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 590 310 send reset;
+#X obj 590 260 bng 16 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 520 80 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#X obj 520 120 send open;
+#X obj 590 120 send close;
+#X obj 590 80 bng 14 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000;
+#N canvas 888 216 462 358 Game_WinScreen 0;
+#X obj 75 170 gemhead;
+#X floatatom 175 200 5 0 0 0 - - -, f 5;
+#X obj 175 155 loadbang;
+#X obj 125 125 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 155 125 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
+#000000 #000000;
+#X obj 185 125 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#X obj 75 95 spigot;
+#X obj 145 95 spigot;
+#X obj 225 85 loadbang;
+#X obj 285 65 loadbang;
+#X obj 285 90 delay 100;
+#X msg 175 175 35;
+#X obj 285 115 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 0 1;
+#X obj 75 200 colorRGB 1 1 0;
+#X obj 75 225 text2d YOU WIN !;
+#X obj 165 65 receive win;
+#X obj 75 65 receive start;
+#X obj 80 40 receive reset;
+#X connect 0 0 13 0;
+#X connect 1 0 14 1;
+#X connect 2 0 11 0;
+#X connect 3 0 4 0;
+#X connect 3 0 6 1;
+#X connect 3 0 0 0;
+#X connect 4 0 5 0;
+#X connect 5 0 7 1;
+#X connect 6 0 3 0;
+#X connect 7 0 3 0;
+#X connect 8 0 5 0;
+#X connect 8 0 12 0;
+#X connect 9 0 10 0;
+#X connect 10 0 12 0;
+#X connect 11 0 1 0;
+#X connect 12 0 0 0;
+#X connect 13 0 14 0;
+#X connect 15 0 7 0;
+#X connect 16 0 6 0;
+#X connect 17 0 6 0;
+#X restore 140 530 pd Game_WinScreen;
+#X obj 30 210 cnv 15 430 118 empty empty empty 20 12 0 14 #e0e0e0 #404040
+0;
+#X obj 30 160 cnv 15 430 40 empty empty empty 20 12 0 14 #bcbcbc #404040
+0;
+#X obj 32 47 cnv 15 430 98 empty empty empty 20 12 0 14 #e0e0e0 #404040
+0;
+#X text 40 220 CONTROLS;
+#X text 38 163 OBJECTIVE;
+#X text 40 50 DESCRIPTION;
+#X obj 30 340 cnv 15 430 104 empty empty empty 20 12 0 14 #bcbcbc #404040
+0;
+#X text 40 350 NOTE;
+#X text 540 30 Controlling GEM;
+#X text 530 210 Controlling GAME;
+#X text 150 20 Sky Force;
+#X text 40 120 Break them with the beam that guides humanity to hope
+;
+#X text 40 180 Destroy the aliens before they can reach you;
+#X text 90 280 Space Bar - Attack Beam (1.2 s cooldown), f 42;
+#X text 90 240 D - Move Right, f 26;
+#X text 90 260 A - Move Left, f 26;
+#X text 40 70 On your basic duty day as a guard you see the alien forces
+;
+#X text 40 90 In an unbreakable rhythm they strive forward and like
+a goalkeeper in front of the goal you are the last line of defense
+, f 65;
+#X text 510 170 Don't go FullScreen mode;
+#X obj 520 430 cnv 15 119 104 empty empty empty 20 12 0 14 #fc0400
+#404040 0;
+#X obj 530 440 cnv 15 99 82 empty empty empty 20 12 0 14 #fcfcfc #404040
+0;
+#X obj 550 470 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
+#000000 1 1;
+#N canvas 536 224 450 305 Music 0;
+#X obj 100 50 inlet;
+#X obj 100 75 sel 0 1;
+#X msg 100 110 \; pd dsp 0;
+#X msg 160 110 \; pd dsp 1;
+#X obj 180 80 loadbang;
+#X connect 0 0 1 0;
+#X connect 1 0 2 0;
+#X connect 1 1 3 0;
+#X connect 4 0 3 0;
+#X restore 550 490 pd Music;
+#X text 520 410 Controlling MUSIC;
+#N canvas 536 224 450 305 start 0;
+#X obj 70 30 inlet;
+#X obj 70 90 send reset;
+#X obj 150 60 delay 100;
+#X obj 150 85 send start;
+#X connect 0 0 1 0;
+#X connect 0 0 2 0;
+#X connect 2 0 3 0;
+#X restore 520 310 pd start;
+#X text 70 410 The attack beam has a reload time of 1.2 seconds;
+#X text 70 390 As there are no boundaries do not go out of bounds;
+#X text 70 370 KEEP THE PATCH IN FOCUS FOR GAME TO TAKE INPUTS;
+#X obj 550 450 loadbang;
+#X text 90 300 E -Start R- Reset, f 42;
+#N canvas 846 168 685 531 License 0;
+#X text 50 80 Permission is hereby granted \, free of charge \, to
+any person obtaining a copy of this software and associated documentation
+files (the "Software") \, to deal in the Software without restriction
+\, including without limitation the rights to use \, copy \, modify
+\, merge \, publish \, distribute \, sublicense \, and/or sell copies
+of the Software \, and to permit persons to whom the Software is furnished
+to do so \, subject to the following conditions:, f 86;
+#X text 60 180 1.)Acknowledgment of Third-Party Assets: Parts of this
+software include art and sound assets that are either created by me
+\, the developer \, or sourced from publicly available art and Pixabay.
+Users of this software acknowledge that some assets are not original
+and have been obtained from public domain sources or Pixabay., f 86
+;
+#X text 60 250 2.)Non-Exclusive License for Public Domain and Pixabay
+Assets: Any art or sound assets not created by me but used under public
+domain or Pixabay terms are provided "as is \, " without any warranty
+of any kind \, express or implied \, including but not limited to the
+warranties of merchantability \, fitness for a particular purpose \,
+and non-infringement. Users are responsible for ensuring compliance
+with the terms under which these assets are provided., f 86;
+#X text 60 340 3.)No Warranty: THE SOFTWARE IS PROVIDED "AS IS \, "
+WITHOUT WARRANTY OF ANY KIND \, EXPRESS OR IMPLIED \, INCLUDING BUT
+NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY \, FITNESS FOR A PARTICULAR
+PURPOSE \, AND NON-INFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+HOLDERS BE LIABLE FOR ANY CLAIM \, DAMAGES \, OR OTHER LIABILITY \,
+WHETHER IN AN ACTION OF CONTRACT \, TORT \, OR OTHERWISE \, ARISING
+FROM \, OUT OF \, OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+OTHER DEALINGS IN THE SOFTWARE., f 86;
+#X text 50 40 Copyright (c) [2024] [Sushant Sudan], f 86;
+#X text 50 440 End of License, f 86;
+#X restore 310 530 pd License;
+#X connect 12 0 44 0;
+#X connect 14 0 13 0;
+#X connect 15 0 16 0;
+#X connect 18 0 17 0;
+#X connect 41 0 42 0;
+#X connect 48 0 41 0;
diff --git a/pd/doc/games/Sky Force/Sound/Ambience1.wav b/pd/doc/games/Sky Force/Sound/Ambience1.wav
new file mode 100644
index 0000000000000000000000000000000000000000..471d1f4b6c9c2626d9876e88e1701b08ac15b136
Binary files /dev/null and b/pd/doc/games/Sky Force/Sound/Ambience1.wav differ
diff --git a/pd/doc/games/Sky Force/Sound/Ambience2.wav b/pd/doc/games/Sky Force/Sound/Ambience2.wav
new file mode 100644
index 0000000000000000000000000000000000000000..f7d95fce4f307594fb78aa5721d514db39ba66c3
Binary files /dev/null and b/pd/doc/games/Sky Force/Sound/Ambience2.wav differ
diff --git a/pd/doc/games/Sky Force/Sound/Attackbeam.wav b/pd/doc/games/Sky Force/Sound/Attackbeam.wav
new file mode 100644
index 0000000000000000000000000000000000000000..9a1dad61745ca020cbd0443ac654853048bc4b83
Binary files /dev/null and b/pd/doc/games/Sky Force/Sound/Attackbeam.wav differ
diff --git a/pd/doc/games/Sky Force/Sound/Bass.wav b/pd/doc/games/Sky Force/Sound/Bass.wav
new file mode 100644
index 0000000000000000000000000000000000000000..ed7fb243accf2b8af5068fe7bd56b455beacd403
Binary files /dev/null and b/pd/doc/games/Sky Force/Sound/Bass.wav differ
diff --git a/pd/doc/games/Sky Force/Sound/Destroy.wav b/pd/doc/games/Sky Force/Sound/Destroy.wav
new file mode 100644
index 0000000000000000000000000000000000000000..2eb0decb8d92e33ab019dd9715262fcb155c35a8
Binary files /dev/null and b/pd/doc/games/Sky Force/Sound/Destroy.wav differ
diff --git a/pd/doc/games/Sky Force/Sound/Kick.wav b/pd/doc/games/Sky Force/Sound/Kick.wav
new file mode 100644
index 0000000000000000000000000000000000000000..38dae25edf53c8ca9fe27e83256a9751e88b5466
Binary files /dev/null and b/pd/doc/games/Sky Force/Sound/Kick.wav differ
diff --git a/pd/doc/games/Sky Force/Sound/OnePieceDrum.wav b/pd/doc/games/Sky Force/Sound/OnePieceDrum.wav
new file mode 100644
index 0000000000000000000000000000000000000000..ac38aa3ddb991f24444ccc89eed2fc3994c5343b
Binary files /dev/null and b/pd/doc/games/Sky Force/Sound/OnePieceDrum.wav differ
diff --git a/pd/doc/games/Sky Force/Sound/Snare.wav b/pd/doc/games/Sky Force/Sound/Snare.wav
new file mode 100644
index 0000000000000000000000000000000000000000..da6e2b18d4ce790f41e91f68be2a5dc843701399
Binary files /dev/null and b/pd/doc/games/Sky Force/Sound/Snare.wav differ
diff --git a/pd/doc/games/Sky Force/Sound/Stereo.wav b/pd/doc/games/Sky Force/Sound/Stereo.wav
new file mode 100644
index 0000000000000000000000000000000000000000..3d81425e74f8f1ffd46fe320e1fb85432a7b9d53
Binary files /dev/null and b/pd/doc/games/Sky Force/Sound/Stereo.wav differ
diff --git a/pd/extra/pd~/pd~.c b/pd/extra/pd~/pd~.c
index dde893908e6e21c41b1c615b64c0a27b6c7e3703..3ea9f2944e142c78810d970f2395fc891ed33ac9 100644
--- a/pd/extra/pd~/pd~.c
+++ b/pd/extra/pd~/pd~.c
@@ -358,7 +358,7 @@ static void pd_tilde_donew(t_pd_tilde *x, char *pddir, char *schedlibdir,
             _dup2(pipe1[0], 0);
         if (pipe2[1] != 1)
             _dup2(pipe2[1], 1);
-        pid = _spawnv(P_NOWAIT, pdexecbuf, execargv);
+        pid = _spawnv(P_NOWAIT, pdexecbuf, (const char * const *)execargv);
         if (pid < 0)
         {
             post("%s: couldn't start subprocess (%s)\n", execargv[0],
diff --git a/pd/nw/css/c64.css b/pd/nw/css/c64.css
index 74ec2bdf64d751f91279dd7cf2f0d2ad61dee097..6cc940fd49fd4ec7f9fc0d3cbabe2ca052e1776f 100644
--- a/pd/nw/css/c64.css
+++ b/pd/nw/css/c64.css
@@ -417,7 +417,7 @@ text {
 .xlet_selected {
     stroke: #cc9933 !important;
     fill: #7569d7;
-    -webkit-animation: fizzle 0.5s linear 1;
+    /* -webkit-animation: fizzle 0.5s linear 1; */
 }
 
 #console_find {
@@ -683,7 +683,7 @@ div.y2 {
 }
 
 /* This matches tabs displaying to their associated radio inputs */
-.tab1:checked ~ .tab1, .tab2:checked ~ .tab2, .tab3:checked ~ .tab3, .tab4:checked ~ .tab4 {
+.tab1:checked ~ .tab1, .tab2:checked ~ .tab2, .tab3:checked ~ .tab3, .tab4:checked ~ .tab4, .tab5:checked ~ .tab5{
     display: table;
     padding: 8px;
     line-height: 20px;
@@ -782,6 +782,9 @@ input[type="color"] {
 
 /* GB: Autocomplete Dropdown style */
 #autocomplete_dropdown {
+    min-height: auto;
+    max-height: 200px;
+    overflow-y: scroll;
     background-color: #ebebec;
     border: 1px solid;
     padding: 1px;
@@ -794,4 +797,9 @@ input[type="color"] {
 
 #autocomplete_dropdown p.selected {
     background-color: #cfcfd0;
-}
\ No newline at end of file
+}
+
+#autocomplete_dropdown p .highlight { 
+    font-weight: bold;
+    color: #e87216;
+}
diff --git a/pd/nw/css/default.css b/pd/nw/css/default.css
index 36b28cb186a6998d1559c646b0e5b72f531c336c..df956b3d610e2c45aa595236ae99dcbdc9cb9b02 100644
--- a/pd/nw/css/default.css
+++ b/pd/nw/css/default.css
@@ -550,11 +550,11 @@ text.activated {
    for every pixel we move inside an xlet. */
 @-webkit-keyframes fizzle {
     0% {
-        stroke-width: 12;
+        stroke-width: 5;
         stroke-opacity: 1;
     }
     100% {
-        stroke-width: 5;
+        stroke-width: 1;
         stroke-opacity: 1;
     }
 }
@@ -564,7 +564,7 @@ text.activated {
     stroke: #e87216;
     fill: #e87216;
     stroke-width: 5;
-    -webkit-animation: fizzle 0.1s ease-in 1;
+    -webkit-animation: fizzle 0.5s ease-in 1;
 }
 
 .xlet_disabled {
@@ -852,7 +852,7 @@ div.y2 {
 }
 
 /* This matches tabs displaying to their associated radio inputs */
-.tab1:checked ~ .tab1, .tab2:checked ~ .tab2, .tab3:checked ~ .tab3, .tab4:checked ~ .tab4 {
+.tab1:checked ~ .tab1, .tab2:checked ~ .tab2, .tab3:checked ~ .tab3, .tab4:checked ~ .tab4, .tab5:checked ~ .tab5{
     display: table;
     padding: 8px;
     line-height: 20px;
@@ -950,6 +950,9 @@ input[type="color"] {
 
 /* GB: Autocomplete Dropdown style */
 #autocomplete_dropdown {
+    min-height: auto;
+    max-height: 200px;
+    overflow-y: scroll;
     background-color: #ebebec;
     border: 1px solid;
     padding: 1px;
@@ -962,4 +965,9 @@ input[type="color"] {
 
 #autocomplete_dropdown p.selected {
     background-color: #cfcfd0;
-}
\ No newline at end of file
+}
+
+#autocomplete_dropdown p .highlight { 
+    font-weight: bold;
+    color: #e87216;
+}
diff --git a/pd/nw/css/extended.css b/pd/nw/css/extended.css
index 9b966cace0153d2ea685ad177a96e3d9e14a63e1..896be4102eb16841bc999065e78c078ade071156 100644
--- a/pd/nw/css/extended.css
+++ b/pd/nw/css/extended.css
@@ -407,7 +407,7 @@ text {
 .xlet_selected {
     stroke: blue !important;
     fill: blue;
-    -webkit-animation: fizzle 0.5s linear 1;
+    /* -webkit-animation: fizzle 0.5s linear 1; */
 }
 
 #console_find {
@@ -666,7 +666,7 @@ div.y2 {
 }
 
 /* This matches tabs displaying to their associated radio inputs */
-.tab1:checked ~ .tab1, .tab2:checked ~ .tab2, .tab3:checked ~ .tab3, .tab4:checked ~ .tab4 {
+.tab1:checked ~ .tab1, .tab2:checked ~ .tab2, .tab3:checked ~ .tab3, .tab4:checked ~ .tab4, .tab5:checked ~ .tab5{
     display: table;
     padding: 8px;
     line-height: 20px;
@@ -764,6 +764,9 @@ input[type="color"] {
 
 /* GB: Autocomplete Dropdown style */
 #autocomplete_dropdown {
+    min-height: auto;
+    max-height: 200px;
+    overflow-y: scroll;
     background-color: #ebebec;
     border: 1px solid;
     padding: 1px;
@@ -776,4 +779,9 @@ input[type="color"] {
 
 #autocomplete_dropdown p.selected {
     background-color: #cfcfd0;
-}
\ No newline at end of file
+}
+
+#autocomplete_dropdown p .highlight { 
+    font-weight: bold;
+    color: #e87216;
+}
diff --git a/pd/nw/css/footgun.css b/pd/nw/css/footgun.css
index bab70f4762da084171bf216b1f62e14e2fb9620e..0f1638a59896d61e44dab65648c648dab07f28b5 100644
--- a/pd/nw/css/footgun.css
+++ b/pd/nw/css/footgun.css
@@ -529,7 +529,7 @@ text {
 .xlet_selected {
     stroke: orange !important;
     fill: orange;
-    -webkit-animation: fizzle 0.4s linear 1;
+    /* -webkit-animation: fizzle 0.4s linear 1; */
 }
 
 #console_find {
@@ -808,7 +808,7 @@ div.y2 {
 }
 
 /* This matches tabs displaying to their associated radio inputs */
-.tab1:checked ~ .tab1, .tab2:checked ~ .tab2, .tab3:checked ~ .tab3, .tab4:checked ~ .tab4 {
+.tab1:checked ~ .tab1, .tab2:checked ~ .tab2, .tab3:checked ~ .tab3, .tab4:checked ~ .tab4, .tab5:checked ~ .tab5{
     display: table;
     padding: 8px;
     line-height: 20px;
@@ -906,6 +906,9 @@ input[type="color"] {
 
 /* GB: Autocomplete Dropdown style */
 #autocomplete_dropdown {
+    min-height: auto;
+    max-height: 200px;
+    overflow-y: scroll;
     background-color: #ebebec;
     border: 1px solid;
     padding: 1px;
@@ -918,4 +921,9 @@ input[type="color"] {
 
 #autocomplete_dropdown p.selected {
     background-color: #cfcfd0;
-}
\ No newline at end of file
+}
+
+#autocomplete_dropdown p .highlight { 
+    font-weight: bold;
+    color: #e87216;
+}
diff --git a/pd/nw/css/inverted.css b/pd/nw/css/inverted.css
index bef02276ee30c005bf967ec5b14cc161e755a3d5..8aaf80945c3464d86be907130df32af63ce89e10 100644
--- a/pd/nw/css/inverted.css
+++ b/pd/nw/css/inverted.css
@@ -426,16 +426,12 @@ text.activated {
    move off the object */
 @-webkit-keyframes fizzle {
     0% {
-        stroke-width: 1;
+        stroke-width: 5;
         stroke-opacity: 1;
-        rx: 1;
-        ry: 1;
     }
     100% {
-        stroke-width: 20;
-        stroke-opacity: 0.2;
-        rx: 50;
-        ry: 50;
+        stroke-width: 1;
+        stroke-opacity: 1;
     }
 }
 
@@ -443,7 +439,7 @@ text.activated {
 .xlet_selected {
     stroke: #e87216;
     fill: #e87216;
-    -webkit-animation: fizzle 0.1s ease-in 1;
+    -webkit-animation: fizzle 0.5s ease-in 1;
 }
 
 #console_find {
@@ -718,7 +714,7 @@ div.y2 {
 }
 
 /* This matches tabs displaying to their associated radio inputs */
-.tab1:checked ~ .tab1, .tab2:checked ~ .tab2, .tab3:checked ~ .tab3, .tab4:checked ~ .tab4 {
+.tab1:checked ~ .tab1, .tab2:checked ~ .tab2, .tab3:checked ~ .tab3, .tab4:checked ~ .tab4, .tab5:checked ~ .tab5{
     display: table;
     padding: 8px;
     line-height: 20px;
@@ -816,6 +812,9 @@ input[type="color"] {
 
 /* GB: Autocomplete Dropdown style */
 #autocomplete_dropdown {
+    min-height: auto;
+    max-height: 200px;
+    overflow-y: scroll;
     background-color: #ebebec;
     border: 1px solid;
     padding: 1px;
@@ -828,4 +827,9 @@ input[type="color"] {
 
 #autocomplete_dropdown p.selected {
     background-color: #cfcfd0;
-}
\ No newline at end of file
+}
+
+#autocomplete_dropdown p .highlight { 
+    font-weight: bold;
+    color: #e87216;
+}
diff --git a/pd/nw/css/solarized.css b/pd/nw/css/solarized.css
index ac981288d179b4ad23bed45db0c1da956007c756..7b147f24c0fb70420bcca2b7db27546554b75689 100644
--- a/pd/nw/css/solarized.css
+++ b/pd/nw/css/solarized.css
@@ -423,7 +423,7 @@ text {
 .xlet_selected {
     stroke: gray !important;
     fill: gray;
-    -webkit-animation: fizzle 0.5s linear 1;
+    /* -webkit-animation: fizzle 0.5s linear 1; */
 }
 
 #console_find {
@@ -688,7 +688,7 @@ div.y2 {
 }
 
 /* This matches tabs displaying to their associated radio inputs */
-.tab1:checked ~ .tab1, .tab2:checked ~ .tab2, .tab3:checked ~ .tab3, .tab4:checked ~ .tab4 {
+.tab1:checked ~ .tab1, .tab2:checked ~ .tab2, .tab3:checked ~ .tab3, .tab4:checked ~ .tab4, .tab5:checked ~ .tab5{
     display: table;
     padding: 8px;
     line-height: 20px;
@@ -786,6 +786,9 @@ input[type="color"] {
 
 /* GB: Autocomplete Dropdown style */
 #autocomplete_dropdown {
+    min-height: auto;
+    max-height: 200px;
+    overflow-y: scroll;
     background-color: #ebebec;
     border: 1px solid;
     padding: 1px;
@@ -798,4 +801,9 @@ input[type="color"] {
 
 #autocomplete_dropdown p.selected {
     background-color: #cfcfd0;
-}
\ No newline at end of file
+}
+
+#autocomplete_dropdown p .highlight { 
+    font-weight: bold;
+    color: #e87216;
+}
diff --git a/pd/nw/css/solarized_inverted.css b/pd/nw/css/solarized_inverted.css
index 82b9a9f9dd7fc9c47e41c1d5044fe51ba4089e8e..d423c1235e12856566e5cebdc65df5fe89bb6e3d 100644
--- a/pd/nw/css/solarized_inverted.css
+++ b/pd/nw/css/solarized_inverted.css
@@ -423,7 +423,7 @@ text {
 .xlet_selected {
     stroke: gray !important;
     fill: gray;
-    -webkit-animation: fizzle 0.5s linear 1;
+    /* -webkit-animation: fizzle 0.5s linear 1; */
 }
 
 #console_find {
@@ -689,7 +689,7 @@ div.y2 {
 }
 
 /* This matches tabs displaying to their associated radio inputs */
-.tab1:checked ~ .tab1, .tab2:checked ~ .tab2, .tab3:checked ~ .tab3, .tab4:checked ~ .tab4 {
+.tab1:checked ~ .tab1, .tab2:checked ~ .tab2, .tab3:checked ~ .tab3, .tab4:checked ~ .tab4, .tab5:checked ~ .tab5{
     display: table;
     padding: 8px;
     line-height: 20px;
@@ -787,6 +787,9 @@ input[type="color"] {
 
 /* GB: Autocomplete Dropdown style */
 #autocomplete_dropdown {
+    min-height: auto;
+    max-height: 200px;
+    overflow-y: scroll;
     background-color: #ebebec;
     border: 1px solid;
     padding: 1px;
@@ -799,4 +802,9 @@ input[type="color"] {
 
 #autocomplete_dropdown p.selected {
     background-color: #cfcfd0;
-}
\ No newline at end of file
+}
+
+#autocomplete_dropdown p .highlight { 
+    font-weight: bold;
+    color: #e87216;
+}
diff --git a/pd/nw/css/strongbad.css b/pd/nw/css/strongbad.css
index e269670b7cfa93ced5685f904df3006d5b23adfc..482e857b1b11f8a3f7b384f208e8b837835df52d 100644
--- a/pd/nw/css/strongbad.css
+++ b/pd/nw/css/strongbad.css
@@ -420,7 +420,7 @@ text {
 .xlet_selected {
     stroke: #53b83b !important;
     fill: green;
-    -webkit-animation: fizzle 0.5s linear 1;
+    /* -webkit-animation: fizzle 0.5s linear 1; */
 }
 
 #console_find {
@@ -680,7 +680,7 @@ div.y2 {
 }
 
 /* This matches tabs displaying to their associated radio inputs */
-.tab1:checked ~ .tab1, .tab2:checked ~ .tab2, .tab3:checked ~ .tab3, .tab4:checked ~ .tab4 {
+.tab1:checked ~ .tab1, .tab2:checked ~ .tab2, .tab3:checked ~ .tab3, .tab4:checked ~ .tab4, .tab5:checked ~ .tab5{
     display: table;
     padding: 8px;
     line-height: 20px;
@@ -778,6 +778,9 @@ input[type="color"] {
 
 /* GB: Autocomplete Dropdown style */
 #autocomplete_dropdown {
+    min-height: auto;
+    max-height: 200px;
+    overflow-y: scroll;
     background-color: #ebebec;
     border: 1px solid;
     padding: 1px;
@@ -790,4 +793,9 @@ input[type="color"] {
 
 #autocomplete_dropdown p.selected {
     background-color: #cfcfd0;
-}
\ No newline at end of file
+}
+
+#autocomplete_dropdown p .highlight { 
+    font-weight: bold;
+    color: #e87216;
+}
diff --git a/pd/nw/css/subdued.css b/pd/nw/css/subdued.css
index 960679e4028007014c650f81206cc64f9e14bb8d..5af1daf2c2e9f76b1908fd932011462cfa3128eb 100644
--- a/pd/nw/css/subdued.css
+++ b/pd/nw/css/subdued.css
@@ -414,7 +414,7 @@ text {
 .xlet_selected {
     stroke: gray !important;
     fill: gray;
-    -webkit-animation: fizzle 0.5s linear 1;
+    /* -webkit-animation: fizzle 0.5s linear 1; */
 }
 
 #console_find {
@@ -673,7 +673,7 @@ div.y2 {
 }
 
 /* This matches tabs displaying to their associated radio inputs */
-.tab1:checked ~ .tab1, .tab2:checked ~ .tab2, .tab3:checked ~ .tab3, .tab4:checked ~ .tab4 {
+.tab1:checked ~ .tab1, .tab2:checked ~ .tab2, .tab3:checked ~ .tab3, .tab4:checked ~ .tab4, .tab5:checked ~ .tab5{
     display: table;
     padding: 8px;
     line-height: 20px;
@@ -771,6 +771,9 @@ input[type="color"] {
 
 /* GB: Autocomplete Dropdown style */
 #autocomplete_dropdown {
+    min-height: auto;
+    max-height: 200px;
+    overflow-y: scroll;
     background-color: #ebebec;
     border: 1px solid;
     padding: 1px;
@@ -783,4 +786,9 @@ input[type="color"] {
 
 #autocomplete_dropdown p.selected {
     background-color: #cfcfd0;
-}
\ No newline at end of file
+}
+
+#autocomplete_dropdown p .highlight { 
+    font-weight: bold;
+    color: #e87216;
+}
diff --git a/pd/nw/css/vanilla.css b/pd/nw/css/vanilla.css
index a0c7486f324dc2863bbe7996e8b866b82576aaa9..41bfa5322e2a9825489fe210265b25314263f942 100644
--- a/pd/nw/css/vanilla.css
+++ b/pd/nw/css/vanilla.css
@@ -407,7 +407,7 @@ text {
 .xlet_selected {
     stroke: purple !important;
     fill: purple;
-    -webkit-animation: fizzle 0.5s linear 1;
+    /* -webkit-animation: fizzle 0.5s linear 1; */
 }
 
 #console_find {
@@ -666,7 +666,7 @@ div.y2 {
 }
 
 /* This matches tabs displaying to their associated radio inputs */
-.tab1:checked ~ .tab1, .tab2:checked ~ .tab2, .tab3:checked ~ .tab3, .tab4:checked ~ .tab4 {
+.tab1:checked ~ .tab1, .tab2:checked ~ .tab2, .tab3:checked ~ .tab3, .tab4:checked ~ .tab4, .tab5:checked ~ .tab5{
     display: table;
     padding: 8px;
     line-height: 20px;
@@ -764,6 +764,9 @@ input[type="color"] {
 
 /* GB: Autocomplete Dropdown style */
 #autocomplete_dropdown {
+    min-height: auto;
+    max-height: 200px;
+    overflow-y: scroll;
     background-color: #ebebec;
     border: 1px solid;
     padding: 1px;
@@ -776,4 +779,9 @@ input[type="color"] {
 
 #autocomplete_dropdown p.selected {
     background-color: #cfcfd0;
-}
\ No newline at end of file
+}
+
+#autocomplete_dropdown p .highlight { 
+    font-weight: bold;
+    color: #e87216;
+}
diff --git a/pd/nw/css/vanilla_inverted.css b/pd/nw/css/vanilla_inverted.css
index 442d834242ed5780027b6ce18b47d02053e35322..7d553a8cdbadcc686f8e20272cb178accacb0584 100644
--- a/pd/nw/css/vanilla_inverted.css
+++ b/pd/nw/css/vanilla_inverted.css
@@ -418,7 +418,7 @@ text {
 .xlet_selected {
     stroke: gray !important;
     fill: gray;
-    -webkit-animation: fizzle 0.5s linear 1;
+    /* -webkit-animation: fizzle 0.5s linear 1; */
 }
 
 #console_find {
@@ -678,7 +678,7 @@ div.y2 {
 }
 
 /* This matches tabs displaying to their associated radio inputs */
-.tab1:checked ~ .tab1, .tab2:checked ~ .tab2, .tab3:checked ~ .tab3, .tab4:checked ~ .tab4 {
+.tab1:checked ~ .tab1, .tab2:checked ~ .tab2, .tab3:checked ~ .tab3, .tab4:checked ~ .tab4, .tab5:checked ~ .tab5{
     display: table;
     padding: 8px;
     line-height: 20px;
@@ -776,6 +776,9 @@ input[type="color"] {
 
 /* GB: Autocomplete Dropdown style */
 #autocomplete_dropdown {
+    min-height: auto;
+    max-height: 200px;
+    overflow-y: scroll;
     background-color: #ebebec;
     border: 1px solid;
     padding: 1px;
@@ -788,4 +791,9 @@ input[type="color"] {
 
 #autocomplete_dropdown p.selected {
     background-color: #cfcfd0;
-}
\ No newline at end of file
+}
+
+#autocomplete_dropdown p .highlight { 
+    font-weight: bold;
+    color: #e87216;
+}
diff --git a/pd/nw/dialog_canvas.html b/pd/nw/dialog_canvas.html
index c5f31c215cd0f864e07caaacde68624596ae6581..c0b8347a62f75fdde40103a5486547f62c0699ca 100644
--- a/pd/nw/dialog_canvas.html
+++ b/pd/nw/dialog_canvas.html
@@ -718,11 +718,6 @@ function register_window_id(gfxstub, attr_objects) {
     pdgui.resize_window(pd_object_callback);
 }
 
-function tr_text(id) {
-    var elem = document.getElementById("iem.prop." + id);
-    elem.textContent = l("iem.prop." + id);
-}
-
 // Stop-gap translator
 function translate_form() {
     var i
diff --git a/pd/nw/dialog_dropdown.html b/pd/nw/dialog_dropdown.html
index a06e7da2c9e80adf07d6d256b8b5a96c54c8d436..18b6fa49f2a5a111ce106c62d9549bb9800a7c07 100644
--- a/pd/nw/dialog_dropdown.html
+++ b/pd/nw/dialog_dropdown.html
@@ -337,11 +337,6 @@ function register_window_id(gfxstub, attributes) {
     pdgui.resize_window(pd_object_callback);
 }
 
-function tr_text(id) {
-    var elem = document.getElementById("iem.prop." + id);
-    elem.textContent = l("iem.prop." + id);
-}
-
 // Stop-gap translator
 function translate_form() {
     var i
diff --git a/pd/nw/dialog_font.html b/pd/nw/dialog_font.html
index ae3de3ce19cd8d0d6d11dd9cca7b0e14c1fdb53b..ed17c8c6922fc12531df27b76fa9b9c19a63d5b7 100644
--- a/pd/nw/dialog_font.html
+++ b/pd/nw/dialog_font.html
@@ -140,7 +140,7 @@ function change_size() {
 // we can create the menu and register event callbacks
 function register_window_id(gfxstub, attrs) {
     pd_object_callback = gfxstub;
-    console.log("attrs are " + attrs.toString());
+    //console.log("attrs are " + attrs.toString());
     add_events(gfxstub);
     // not sure that we need this for properties windows
     //pdgui.canvas_map(gfxstub);
diff --git a/pd/nw/dialog_gatom.html b/pd/nw/dialog_gatom.html
index fd6a1d8de424cd2e3f6d82215e5afdba8f911b79..84ddbfb7b2993e6e2cf2db2245972ee75f6f0421 100644
--- a/pd/nw/dialog_gatom.html
+++ b/pd/nw/dialog_gatom.html
@@ -338,11 +338,6 @@ function register_window_id(gfxstub, attributes) {
     pdgui.resize_window(pd_object_callback);
 }
 
-function tr_text(id) {
-    var elem = document.getElementById("iem.prop." + id);
-    elem.textContent = l("iem.prop." + id);
-}
-
 // Stop-gap translator
 function translate_form() {
     var i
diff --git a/pd/nw/dialog_iemgui.html b/pd/nw/dialog_iemgui.html
index 4a8e2861f357e61a4a284b7322f11857e372bd6f..cf037dd6d0c7a94e365efcb60cb375fbb321dc81 100644
--- a/pd/nw/dialog_iemgui.html
+++ b/pd/nw/dialog_iemgui.html
@@ -615,8 +615,8 @@ function register_window_id(gfxstub, attr_object) {
             new_attrs[attr] = old_attrs[attr];
         }
     }
-    console.log("attr object is " + attr_object.toString() +
-        " and its type is " + attr_object.type);
+    //console.log("attr object is " + attr_object.toString() +
+    //    " and its type is " + attr_object.type);
     add_events(gfxstub);
     pdgui.gui_check_for_dialog_appearance_inconsistencies(gfxstub);
 
@@ -642,11 +642,6 @@ function register_window_id(gfxstub, attr_object) {
     pdgui.resize_window(pd_object_callback);
 }
 
-function tr_text(id) {
-    var elem = document.getElementById("iem.prop." + id);
-    elem.textContent = l("iem.prop." + id);
-}
-
 // Stop-gap translator
 function translate_form() {
     var i
@@ -667,7 +662,7 @@ function populate_form(attr_object) {
         // Unhide the span with the class with the same name as the id
         var prop_group = document.getElementsByClassName(attr)[0];
         if (prop_group !== undefined) {
-            console.log("the thing here is " + attr);
+            //console.log("the thing here is " + attr);
             prop_group.classList.remove("hidden");
         }
         // iemguis use the string 'empty' for null because of
diff --git a/pd/nw/dialog_prefs.html b/pd/nw/dialog_prefs.html
index eadb51e40a8511640a9baf0def8e81bcadc20974..bec32f607ac2d76cbcb4ddabdccc0a5a7f2e11d8 100644
--- a/pd/nw/dialog_prefs.html
+++ b/pd/nw/dialog_prefs.html
@@ -12,6 +12,11 @@ select {
   height: 1.6em;
 }
 
+.tab_settings span {
+    display: inline-block;
+    text-align: left;
+}
+
 #in1, #in2, #in3, #in4, #out1, #out2, #out3, #out4 {
   width: 100%;
 }
@@ -29,7 +34,7 @@ select {
       <table id="titlebar">
         <tr>
           <td style="width: 100%;">
-            <div id="titlebar_title">Pd-L2Ork Properties</div>
+            <div id="titlebar_title">Purr-Data Properties</div>
           </td>
           <td id="titlebar_buttons_td">
             <div class="titlebar_buttons">
@@ -42,6 +47,7 @@ select {
         <input type="radio"
                name="prefs_radio_group"
                id="audio_tab_radio"
+               onclick="check_tabs()"
                class="tab1 prefs_tab"
                checked="checked" />
         <label for="audio_tab_radio" data-i18n="[title]prefs.heading.audio_tt">
@@ -51,6 +57,7 @@ select {
         <input type="radio"
                name="prefs_radio_group"
                id="midi_tab_radio"
+               onclick="check_tabs()"
                class="tab2 prefs_tab"/>
         <label for="midi_tab_radio" data-i18n="[title]prefs.heading.midi_tt">
           <span data-i18n="prefs.heading.midi"></span>
@@ -59,6 +66,7 @@ select {
         <input type="radio"
                name="prefs_radio_group"
                id="gui_tab_radio"
+               onclick="check_tabs()"
                class="tab3 prefs_tab"/>
         <label for="gui_tab_radio" data-i18n="[title]prefs.heading.gui_tt">
           <span data-i18n="prefs.heading.gui"></span>
@@ -67,11 +75,21 @@ select {
         <input type="radio"
                name="prefs_radio_group"
                id="startup_tab_radio"
+               onclick="check_tabs()"
                class="tab4 prefs_tab"/>
         <label for="startup_tab_radio" data-i18n="[title]prefs.heading.startup_tt">
           <span data-i18n="prefs.heading.startup"></span>
         </label>
 
+        <input type="radio"
+               name="prefs_radio_group"
+               id="issue_tab_radio"
+               onclick="check_tabs()"
+               class="tab5 prefs_tab"/>
+        <label for="issue_tab_radio" data-i18n="[title]prefs.heading.issue_tt">
+          <span data-i18n="prefs.heading.issue"></span>
+        </label>
+
         <div class="tab1">
           <table class="tab_settings">
             <tr data-i18n="[title]prefs.audio.api_tt">
@@ -91,7 +109,14 @@ select {
                 <input type="text"
                        id="rate"
                        name="rate"
+                       style="width: 50px;"
                        onchange="attr_change(this);">
+		<button type="button"
+			onclick="rate_change('44100');">44.1k</button>
+		<button type="button"
+			onclick="rate_change('48000');">48k</button>
+		<button type="button"
+			onclick="rate_change('96000');">96k</button>
               </td>
             </tr>
             <tr data-i18n="[title]prefs.audio.blocksize_tt">
@@ -117,6 +142,7 @@ select {
                 <input type="text"
                        id="advance"
                        name="advance"
+                       style="width: 50px;"
                        onchange="attr_change(this);">
               </td>
             </tr>
@@ -261,19 +287,23 @@ select {
               </td>
             </tr>
           </table>
+          <br/>
+          <button type="button" onclick="refresh_audiodevs()" data-i18n="[title]prefs.audio.refresh_audiodevs_tt">
+            <span data-i18n="prefs.audio.refresh_audiodevs"></span>
+          </button>
         </div>
 
         <div class="tab2">
           <div class="tab_settings midi_api_container">
             <label data-i18n="[title]prefs.midi.api_tt">
-              <span data-i18n="prefs.midi.api"></span>
+              <span id="midi_api_span" data-i18n="prefs.midi.api"></span>
               <select id="midi_api" onchange="change_api(this);">
               </select>
             </label>
           </div>
           <div class="tab_settings alsa_midi">
             <label data-i18n="[title]prefs.midi.alsa_in_ports_tt">
-              <span data-i18n="prefs.midi.alsa_in_ports"></span>
+              <span id="alsa_in_ports_span" data-i18n="prefs.midi.alsa_in_ports"></span>
               <input type="text"
                      id="alsa_in_ports"
                      name="alsa_in_ports"
@@ -381,6 +411,10 @@ select {
               </tr>
             </table>
           </div>
+          <br/>
+          <button type="button" onclick="refresh_mididevs()" data-i18n="[title]prefs.midi.refresh_mididevs_tt">
+            <span data-i18n="prefs.midi.refresh_mididevs"></span>
+          </button>
         </div>
 
         <div class="tab3">
@@ -458,6 +492,16 @@ select {
               <input type="checkbox" id="autocomplete_relevance" name="autocomplete_relevance">
               <span data-i18n="prefs.gui.autocomplete.autocomplete_relevance"></span>
             </label>
+            <br/>
+            <label data-i18n="[title]prefs.gui.autocomplete.autocomplete_tooltip_enabled_tt">
+              <input type="checkbox" id="autocomplete_tooltip_enabled" name="autocomplete_tooltip_enabled">
+              <span data-i18n="prefs.gui.autocomplete.autocomplete_tooltip_enabled"></span>
+            </label>
+            <br/>
+            <label data-i18n="[title]prefs.gui.autocomplete.autocomplete_fuzzy_search_tt">
+              <input type="checkbox" id="autocomplete_fuzzy_search" name="autocomplete_fuzzy_search">
+              <span data-i18n="prefs.gui.autocomplete.autocomplete_fuzzy_search"></span>
+            </label>
             <br/><br/>
             <span data-i18n="prefs.gui.browser.browser_title"></span>
             <br/>
@@ -476,6 +520,14 @@ select {
               <span data-i18n="prefs.gui.browser.browser_init"></span>
             </label>
           </div>
+          <br/>
+          <label data-i18n="[title]prefs.gui.browser.reset_init_tt">
+            <input type="checkbox" id="reset_init" name="reset_init">
+            <span data-i18n="prefs.gui.browser.reset_init"></span>
+          </label>
+          <button type="button" onclick="reset_indexes()" data-i18n="[title]prefs.gui.browser.reset_index_tt">
+            <span data-i18n="prefs.gui.browser.reset_index"></span>
+          </button>
         </div>
 
         <div class="tab4">
@@ -528,17 +580,58 @@ select {
             </label>
           </div>
         </div>
+
+        <div class="tab5">
+          <div class="tab_settings">
+            <label data-i18n="[title]prefs.issue.title_tt">
+              <span data-i18n="prefs.issue.title">Issue Title</span>
+              <br/>
+              <input style="width: 50vw;" type="text" id="issue_title" name="issue_title">
+            </label>
+            <br/>
+
+            <label data-i18n="[title]prefs.issue.description_tt">
+              <span data-i18n="prefs.issue.description">Description</span>
+              <br/>
+              <textarea id="issue_description" style="width: 96.5vw; height: 18vh; resize: none;" name="issue_description" placeholder="* What happened? Describe the unexpected behavior.&#10;* Expected behavior: What did you expect to happen?.&#10;* Any other feedbacks?"></textarea>
+            </label>
+            <br/>
+
+            <label data-i18n="[title]prefs.issue.steps_to_reproduce_tt">
+              <span data-i18n="prefs.issue.steps_to_reproduce">Steps to Reproduce</span>
+              <br/>
+              <textarea id="steps_to_reproduce" style="width: 96.5vw; height: 18vh; resize: none;" name="steps_to_reproduce" placeholder="1. Step 1: [Detail the first step]&#10;2. Step 2: [Detail the second step]&#10;..."></textarea>
+            </label>
+            <br/>
+
+            <label data-i18n="[title]prefs.issue.environment_details_tt">
+              <span data-i18n="prefs.issue.environment_details">Environment Details</span>
+              <br/>
+    <textarea id="environment_details" style="width: 96.5vw; height: 18vh; resize: none;" name="environment_details" placeholder="* OS: e.g., Windows 11, macOS 13.6, Ubuntu 24.04, etc.&#10;* Purr Data Version: e.g., 2.19.4"></textarea>
+            </label>
+            <br/>
+
+            <div class="submit_buttons prefs_buttons">
+              <button type="button" onClick="submit_issue()" data-i18n="[title]prefs.issue.submit_tt">
+                <span data-i18n="prefs.issue.submit"></span>
+              </button>
+              <button type="button" onClick="cancel()" data-i18n="[title]prefs.close_tt">
+                <span data-i18n="prefs.close"></span>
+              </button>
+            </div>
+          </div>
+        </div>
       </div>
 
-      <div class="submit_buttons prefs_buttons">
+      <div class="submit_buttons prefs_buttons" id="buttons">
         <button type="button" onClick="ok()" data-i18n="[title]prefs.ok_tt">
           <span data-i18n="prefs.ok"></span>
         </button>
         <button type="button" onClick="apply(false)" data-i18n="[title]prefs.apply_tt">
-        <span data-i18n="prefs.apply"></span>
+          <span data-i18n="prefs.apply"></span>
         </button>
         <button type="button" onClick="cancel()" data-i18n="[title]prefs.close_tt">
-        <span data-i18n="prefs.close"></span>
+          <span data-i18n="prefs.close"></span>
         </button>
       </div>
     </div>
@@ -563,6 +656,64 @@ function ok() {
     cancel();
 }
 
+function reset_indexes() {
+    pdgui.rebuild_index(get_bool_elem("reset_init"));
+}
+
+function get_input_field_value(id) {
+    return document.getElementById(id).value;
+}
+
+function clear_input_field_value(id) {
+    return document.getElementById(id).value = "";
+}
+
+function check_issue() {
+    var issue_title = get_input_field_value("issue_title");
+    var issue_description = get_input_field_value("issue_description");
+    var steps_to_reproduce = get_input_field_value("steps_to_reproduce");
+    var environment_details = get_input_field_value("environment_details");
+    var proceed = !issue_title && !issue_description && !steps_to_reproduce && !environment_details;
+    return proceed || confirm(pdgui.get_local_string("prefs.issue.confirm"));
+}
+
+function submit_issue() {
+    var issue_title = get_input_field_value("issue_title");
+    var issue_description = get_input_field_value("issue_description");
+    var steps_to_reproduce = get_input_field_value("steps_to_reproduce");
+    var environment_details = get_input_field_value("environment_details");
+
+    if (!issue_title || !issue_description) {
+        alert(pdgui.get_local_string("prefs.issue.warning"));
+        return;
+    }
+
+    // encode the values for URL use
+    var encoded_issue_title = encodeURIComponent(issue_title);
+    var encoded_issue_description = encodeURIComponent(issue_description);
+    var encoded_steps_to_reproduce = encodeURIComponent(steps_to_reproduce);
+    var encoded_environment_details = encodeURIComponent(environment_details);
+
+    pdgui.submit_issue(encoded_issue_title, encoded_issue_description, encoded_steps_to_reproduce, encoded_environment_details);
+
+    // clear all fields so that the user doesn't accidentally submit the same
+    // report twice
+    clear_input_field_value("issue_title");
+    clear_input_field_value("issue_description");
+    clear_input_field_value("steps_to_reproduce");
+    clear_input_field_value("environment_details");
+}
+
+function check_tabs() {
+    var issue_tab_checked = document.getElementById("issue_tab_radio").checked;
+    pdgui.set_on_issue_tab(issue_tab_checked);
+    if (issue_tab_checked) {
+        document.getElementById("buttons").style.display = "none";
+    } else {
+        document.getElementById("buttons").style.display = "block";
+    }
+}
+
 function gui_preset_change(elem) {
     pdgui.skin.set(elem.value);
 }
@@ -692,6 +843,12 @@ function attr_change(elem) {
     attr[attr.indexOf(id) + 1] = elem.value;
 }
 
+function rate_change(x) {
+    var elem = document.getElementById("rate");
+    elem.value = x;
+    attr_change(elem);
+}
+
 function alsa_ports_change(elem, type) {
     var attr, dummy, i, len;
     attr = pd_midi_attrs;
@@ -812,6 +969,8 @@ function apply(save_prefs) {
         get_bool_elem("autocomplete"),
         get_bool_elem("autocomplete_prefix"),
         get_bool_elem("autocomplete_relevance"),
+        get_bool_elem("autocomplete_tooltip_enabled"),
+        get_bool_elem("autocomplete_fuzzy_search"),
         get_bool_elem("browser_doc"),
         get_bool_elem("browser_path"),
         get_bool_elem("browser_init"),
@@ -824,7 +983,9 @@ function apply(save_prefs) {
         get_bool_elem("browser_path"),
         get_bool_elem("autocomplete"),
         get_bool_elem("autocomplete_prefix"),
-        get_bool_elem("autocomplete_relevance")
+        get_bool_elem("autocomplete_relevance"),
+        get_bool_elem("autocomplete_tooltip_enabled"),
+        get_bool_elem("autocomplete_fuzzy_search"),
     );
     // Update the grid on all open windows.
     pdgui.update_grid(get_bool_elem("show_grid"),
@@ -841,6 +1002,7 @@ function apply(save_prefs) {
 }
 
 function cancel() {
+    if (!check_issue()) return;
     var i, attrs, gfxstub;
     // There seems to be a bug in nwjs 0.13 beta3 that doesn't call the
     // "close" event below. This has the symptom of making it impossible
@@ -868,6 +1030,14 @@ function change_api(elem) {
     }
 }
 
+function refresh_audiodevs() {
+    pdgui.pdsend("pd audio-refresh");
+}
+
+function refresh_mididevs() {
+    pdgui.pdsend("pd midi-refresh");
+}
+
 function get_attr(name, attrs) {
     return attrs[attrs.indexOf(name) + 1];
 }
@@ -988,8 +1158,10 @@ function audio_prefs_callback(attrs) {
     populate_devs("in", attrs);
     populate_devs("out", attrs);
 
-    set_devs("in", get_attr("pd-indevs", attrs));
-    set_devs("out", get_attr("pd-outdevs", attrs));
+    var indevs = get_attr("sys-indevs", attrs);
+    var outdevs = get_attr("sys-outdevs", attrs);
+    set_devs("in", get_attr("pd-indevs", attrs), indevs.length, -1);
+    set_devs("out", get_attr("pd-outdevs", attrs), outdevs.length, -1);
 
     // Set chans after the devs (because they may
     // have the side-effect of setting the dev to 'None')
@@ -1005,10 +1177,22 @@ function audio_prefs_callback(attrs) {
     pdgui.resize_window(pd_object_callback);
 }
 
-function set_devs(type, devs) {
+/* ag: This function now has some extra arguments n (the number of devices)
+ * and nodev (device index denoting the "None" device), so that we can
+ * properly detect and fix invalid device indices when changing audio and
+ * midi apis on the fly. */
+function set_devs(type, devs, n, nodev) {
     var i;
     for (i = 0; i < devs.length; i++) {
-        document.getElementById(type + (i+1)).value = devs[i];
+        var elem = document.getElementById(type + (i+1));
+        /* ag: To be on the safe side, take care of stale dev numbers no
+           longer in the valid range, by setting these to nodev a.k.a.
+           "None". To complicate things, audio devices are numbered 0..n-1,
+           with nodev = -1, whereas MIDI devices are numbered 1..n, with
+           nodev = 0. Oh well. At least we can assume that we don't get any
+           bogus negative indices in the devs array. I hope. */
+        var d = devs[i];
+        elem.value = d <= n+nodev ? d : nodev;
     }
 }
 
@@ -1067,8 +1251,10 @@ function midi_prefs_callback(attrs) {
             .style.setProperty("display", "none");
         populate_midi_devs("in", attrs);
         populate_midi_devs("out", attrs);
-        set_devs("midi_in", get_attr("pd-indevs", attrs));
-        set_devs("midi_out", get_attr("pd-outdevs", attrs));
+        var indevs = get_attr("midi-indev-names", attrs);
+        var outdevs = get_attr("midi-outdev-names", attrs);
+        set_devs("midi_in", get_attr("pd-indevs", attrs), indevs.length, 0);
+        set_devs("midi_out", get_attr("pd-outdevs", attrs), outdevs.length, 0);
     }
     pdgui.resize_window(pd_object_callback);
 }
@@ -1083,9 +1269,42 @@ function autopatch_yoffset_toggle(checked) {
     document.getElementById("autopatch_yoffset").checked = checked;
 }
 
+// ag: Give the Audio and MIDI tabs a much-needed beauty treatment.
+function prefs_beautifier() {
+    // I don't understand why select always ends up looking smaller than input
+    // at the same px width, so we patch them up. Adding insult to injury, the
+    // precise amount also depends on the nw.js version. The larger width is
+    // required at least for 0.46+ (this might require bisecting to determine
+    // the exact version.)
+    var el1 = document.getElementById("blocksize");
+    var el2 = document.getElementById("audio_api");
+    if (!el1 || !el2) {
+	// this shouldn't happen, but...
+    } else if (pdgui.check_nw_version("0.46")) {
+        el1.style.width = "58px";
+        el2.style.minWidth = "58px";
+    } else {
+        el1.style.width = "54px";
+        el2.style.minWidth = "54px";
+    }
+    // Also patch up the MIDI tab which looks all higgledy-piggledy for the
+    // ALSA API by default. NOTE: We'd really like to use el.clientWidth here,
+    // but this always yields 0px for some reason, so instead we guestimate
+    // the required width of the span elements based on locale.
+    el1 = document.getElementById("midi_api_span");
+    el2 = document.getElementById("alsa_in_ports_span");
+    //var w = Math.max(el1.clientWidth, el2.clientWidth); // not working
+    var lang = navigator.language.split("-")[0];
+    // If these translations ever change, these values will have to be
+    // adjusted accordingly.
+    var w = lang=="fr" ? 100 : lang=="de" ? 70 : 80;
+    el1.style.width = w+"px";
+    el2.style.width = w+"px";
+}
+
 function gui_prefs_callback(name, show_grid, grid_size, save_zoom,
     autocomplete, autocomplete_prefix, autocomplete_relevance,
-    browser_doc, browser_path, browser_init, autopatch_yoffset) {
+    autocomplete_tooltip_enabled, autocomplete_fuzzy_search, browser_doc, browser_path, browser_init, autopatch_yoffset) {
     var s = document.getElementById("gui_preset");
 
     // ag: scan the css subdir for user-defined styles
@@ -1121,6 +1340,8 @@ function gui_prefs_callback(name, show_grid, grid_size, save_zoom,
     document.getElementById("autocomplete").checked = !!autocomplete;
     document.getElementById("autocomplete_prefix").checked = !!autocomplete_prefix;
     document.getElementById("autocomplete_relevance").checked = !!autocomplete_relevance;
+    document.getElementById("autocomplete_tooltip_enabled").checked = !!autocomplete_tooltip_enabled;
+    document.getElementById("autocomplete_fuzzy_search").checked = !!autocomplete_fuzzy_search;
     document.getElementById("browser_doc").checked = !!browser_doc;
     document.getElementById("browser_path").checked = !!browser_path;
     document.getElementById("browser_init").checked = !!browser_init;
@@ -1132,6 +1353,8 @@ function gui_prefs_callback(name, show_grid, grid_size, save_zoom,
     } else {
         autopatch_yoffset_toggle(false);
     }
+
+    prefs_beautifier();
 }
 
 // startup settings
@@ -1377,11 +1600,6 @@ function register_window_id(gfxstub, attr_arrays) {
     document.getElementsByClassName("container")[0].style.setProperty("display", "inline");
 }
 
-function tr_text(id) {
-    var elem = document.getElementById("iem.prop." + id);
-    elem.textContent = l("iem.prop." + id);
-}
-
 // Stop-gap translator
 function translate_form() {
     var elements = document.querySelectorAll("[data-i18n]"),
@@ -1397,32 +1615,6 @@ function translate_form() {
     }
 }
 
-function populate_form(attr_array) {
-    // First, let's put the translated text for the form labels:
-    var i;
-    for(i = 0; i < attr_array.length; i+=2) {
-        // Unhide the span with the class with the same name as the id
-        var prop_group = document.getElementsByClassName(attr_array[i])[0];
-        if (prop_group !== undefined) {
-            console.log("the thing here is " + attr_array[i]);
-            prop_group.classList.remove("hidden");
-        } else {
-            pdgui.post("Error: couldn't find iemgui prop group for " + attr_array[i]);
-        }
-
-        var elem = document.getElementsByName(attr_array[i]);
-        if (elem.length > 0) {
-            if (elem[0].type === "checkbox") {
-                // The attr here is a string, so we need to
-                // force it to number, hence the "+" below
-                elem[0].checked = +attr_array[i+1];
-            } else {
-                elem[0].value = attr_array[i+1];
-            }
-        }
-    }
-}
-
 function add_events(name) {
     // let's handle some events for this window...
 
diff --git a/pd/nw/dialog_search.html b/pd/nw/dialog_search.html
index fe5f6d6c9d231eb761542eb719add0273ba6bea9..9bfe7c6b6cb128e8bef48bc2dc3c62b19e13f209 100644
--- a/pd/nw/dialog_search.html
+++ b/pd/nw/dialog_search.html
@@ -16,8 +16,16 @@ var index;
 
 pdgui.skin.apply(window);
 
+// file types to be shown in the directory display and the search results
 var filetypes = [".pd", ".txt", ".htm", ".html", ".pdf"];
 
+// mimetypes for the file picker. This affords us a bit more flexibility than
+// using rigid file extensions, and we can also add a lot more types for
+// various kinds of media (images, video, etc.). FIXME: audio/aiff and
+// audio/midi don't seem to be recognized for some reason, so we also add the
+// corresponding extensions.
+var mimetypes = filetypes.concat(["text/plain", "text/markdown", "text/html", "application/pdf", "image/gif", "image/jpeg", "image/png", "image/tiff", "audio/aac", "audio/aiff", ".aif", ".aiff", "audio/flac", "audio/midi", ".mid", ".midi", "audio/mp4", "audio/mpeg", "audio/ogg", "audio/opus", "audio/wav", "audio/webm", "video/jpeg", "video/mpeg", "video/ogg", "video/quicktime", "video/webm"]);
+
 // Table of Contents to start with
 /* NOTE: A section title is indicated by an entry consisting just of the title
    field. All other entries *must* also contain the directory (relative to the
@@ -45,6 +53,12 @@ var toc = [
         title: "Data Structures",
         description: "custom data and 2d visualization"
     },
+    // Purr-Data extras
+    {
+        id: "doc/4.data.structures/pd-l2ork",
+        title: "SVG Data Structures",
+        description: "new and improved data structure visualizations"
+    },
     {
         id: "doc/5.reference",
         title: "Reference",
@@ -76,38 +90,17 @@ var toc = [
         description: "useful little helper patches"
     },
 */
-    // Pd-L2Ork extras
-    {
-        id: "doc/4.data.structures/pd-l2ork/ds-tutorials",
-        title: "Pd-L2Ork Data Structures",
-        description: "new and improved data structure visualizations"
-    },
-    // PDDP tutorials
-    {
-        title: "PDDP Tutorials",
-    },
-    {
-        id: "doc/manuals/0.Intro",
-        title: "Intro",
-        description: "getting started with Pd"
-    },
-    {
-        id: "doc/manuals/1.Sound",
-        title: "Sound",
-        description: "Pd sound examples"
-    },
+    // Demo patches and pastimes
     {
-        id: "doc/manuals/2.Image",
-        title: "Image",
-        description: "3D graphics with GEM"
+        title: "Demos",
     },
     {
-        id: "doc/manuals/3.Networking",
-        title: "Networking",
-        description: "introduction to Pd's networking facilities"
+        id: "doc/games",
+        title: "Games",
+        description: "Sushant Sudan's GSoc 2024 game collection"
     },
     // External libraries
-    // NOTE: These are just some popular examples. Pd-L2Ork ships with
+    // NOTE: These are just some popular examples. Purr-Data ships with
     // many external libraries, too many to list them all. Feel free
     // to edit this list as needed.
     {
@@ -118,21 +111,52 @@ var toc = [
         title: "Cyclone",
         description: "library of clones of Max/MSP 4.x objects"
     },
+    /*
     {
         id: "extra/disis",
         title: "DISIS",
         description: "DISIS externals (Linux only)"
-    },
+        },
+    */
     {
         id: "extra/Gem",
         title: "GEM",
         description: "Graphics Environment for Multimedia"
     },
     {
-        id: "extra/lyon",
+        id: "extra/lyonpotpourri",
         title: "LyonPotpourri",
         description: "Eric Lyon's external collection"
     },
+    {
+        id: "extra/pdlua",
+        title: "Pd-Lua",
+        description: "write your own Pd objects in the Lua programming language"
+    },
+    // PDDP tutorials
+    {
+        title: "PDDP Tutorials",
+    },
+    {
+        id: "doc/manuals/0.Intro",
+        title: "Intro",
+        description: "getting started with Pd"
+    },
+    {
+        id: "doc/manuals/1.Sound",
+        title: "Sound",
+        description: "Pd sound examples"
+    },
+    {
+        id: "doc/manuals/2.Image",
+        title: "Image",
+        description: "3D graphics with GEM"
+    },
+    {
+        id: "doc/manuals/3.Networking",
+        title: "Networking",
+        description: "introduction to Pd's networking facilities"
+    },
 ];
 
 // ag: Some functions to add bookmarks to the toc, and save them in the user's
@@ -420,16 +444,34 @@ function clear_results() {
 }
 
 function display_directory_callback(err, files) {
-    var doc, doc_path;
     if (err) {
         pdgui.post("Search Engine: " + err);
     } else {
-        files.forEach(function (f, i, a) {
-            if (filetypes.indexOf(path.extname(f)) !== -1) {
-                doc_path = path.join(current_dir, f);
-                doc = index.documentStore.getDoc(doc_path) || {
-                    id: doc_path,
-                    title: path.basename(f, ".pd"),
+        // sort filenames alphabetically, directories first
+        files = files.map(f => {
+            const p = path.join(current_dir, f);
+            const d = fs.lstatSync(p).isDirectory();
+            return {
+                name: f,
+                path: p,
+                is_dir: d
+            };
+        }).sort((a, b) => b.is_dir - a.is_dir || a.name - b.name);
+        // create a doc entry for each item
+        files.forEach(function (f) {
+            var doc;
+            if (f.is_dir) {
+                doc = {
+                    id: f.path,
+                    title: f.name+"/",
+                    description: null
+                };
+                display_doc(doc);
+            } else if (filetypes.indexOf(path.extname(f.name)) !== -1 &&
+                       path.basename(f.name, "-meta.pd") !== path.basename(current_dir)) {
+                doc = index.documentStore.getDoc(f.path) || {
+                    id: f.path,
+                    title: path.basename(f.name, ".pd"),
                     description: null
                 };
                 display_doc(doc);
@@ -440,18 +482,27 @@ function display_directory_callback(err, files) {
 
 function display_directory(dir) {
     current_dir = dir;
+    // must preserve the trailing slash in user input
+    var trailing_slash = dir.slice(-1) == "/" ? "/" : "";
     var is_doc = current_dir === path.join(pdgui.get_lib_dir(), "doc");
     clear_results();
     fs.readdir(dir, display_directory_callback);
     toc_bookmark_update(dir);
     toc_bookmark_status(!is_doc);
+    // update the search field accordingly; use a relative path if that
+    // makes sense, and canonicalize
+    var rel = canonical_path(path.relative(pdgui.get_lib_dir(), dir));
+    dir = canonical_path(dir);
+    dir = dir.length <= rel.length ? dir : rel;
+    dir = dir + trailing_slash;
+    document.getElementById("search_text").value = dir;
 }
 
 function file_browser_click() {
     // open the file browser on whatever directory we visited last, or the
     // doc directory by default
     document.getElementById("file_browser").setAttribute("nwworkingdir",
-        current_dir);
+        pdgui.funkify_windows_path(current_dir));
     document.getElementById("file_browser").click();
 }
 
@@ -464,14 +515,8 @@ function file_browser_callback(elem) {
     if (doc !== "") {
         var defunkify = pdgui.defunkify_windows_path;
         var dir = path.dirname(doc);
-        pdgui.doc_open(defunkify(dir), defunkify(path.basename(doc)));
+        pdgui.doc_open(defunkify(dir), defunkify(path.basename(doc)), 1);
         display_directory(defunkify(dir));
-        // update the search field accordingly; use a relative path if that
-        // makes sense, and canonicalize
-        var rel = canonical_path(path.relative(pdgui.get_lib_dir(), dir));
-        dir = canonical_path(dir);
-        dir = dir.length <= rel.length ? dir : rel;
-        document.getElementById("search_text").value = dir;
     }
 }
 
@@ -719,7 +764,7 @@ function add_events() {
 
     // Find bar
     var find_bar = document.getElementById("console_find_text");
-    find_bar.placeholder = "Search in Console";
+    find_bar.placeholder = l("browser.find.placeholder");
     find_bar.addEventListener("keydown",
         function(evt) {
             if (find_bar_shortcut(evt)) {
@@ -766,8 +811,6 @@ function add_events() {
 		    evt.target === button_elem2) &&
                    evt.keyCode === 10 || evt.keyCode === 13) {
         } else if (is_special_key(evt.keyCode)) {
-        } else if (evt.target !== input_elem) {
-            input_elem.focus();
         } else if (bookmark_shortcut(evt)) {
 	    // We assume here that current_dir is set and points to the
 	    // directory to be bookmarked.
@@ -779,19 +822,26 @@ function add_events() {
                 evt.stopPropagation();
                 pdgui.remove_dialogwin("search");
                 nw.Window.get().close(true);
-        } else {
-            // If we want to trigger a search on each keystroke we can do it
-            // here.
+        } else if (evt.target !== input_elem) {
+            input_elem.focus();
         }
 
     });
+    // ag: The incremental search happens here, triggered by keyup and search
+    // (a.k.a. Enter?). NOTE: We need to re-focus the input element on each
+    // keystroke, since the doc_search() makes it loose focus (I think) when
+    // the results view is re-generated.
     document.getElementById("search_text").addEventListener("keyup",
         function() {
+            var input_elem = document.getElementById("search_text");
             doc_search();
+            input_elem.focus();
     });
     document.getElementById("search_text").addEventListener("search",
         function() {
+            var input_elem = document.getElementById("search_text");
             doc_search();
+            input_elem.focus();
     });
 }
 
@@ -803,7 +853,7 @@ function register_window_id(id, attrs) {
         l("search.search_placeholder");
     add_events();
     // set file types for the file dialog
-    document.getElementById("file_browser").accept = filetypes.join(",");
+    document.getElementById("file_browser").accept = mimetypes.join(",");
     document.getElementById("results").textContent = l("search.building_index");
     document.getElementById("search_text").disabled = true;
     document.getElementById("file_browser").setAttribute("nwworkingdir",
@@ -816,14 +866,27 @@ function display_no_results() {
     toc_bookmark_update(current_dir);
 }
 
+function doc_open(name) {
+    var is_dir;
+    try {
+        is_dir = fs.lstatSync(name).isDirectory();
+    } catch (err) {
+        is_dir = false;
+    }
+    if (is_dir) {
+        display_directory(name);
+    } else {
+        pdgui.doc_open(path.dirname(name), path.basename(name), 1);
+    }
+}
+
 function display_doc(doc) {
     var div = document.createElement("div"),
         a = document.createElement("a"),
         results_elem = document.getElementById("results"),
         header;
-    a.href = "javascript: pdgui.doc_open('" +
-         pdgui.defunkify_windows_path(path.dirname(doc.id)) + "', '" +
-         pdgui.defunkify_windows_path(path.basename(doc.id)) + "');"
+    a.href = "javascript: doc_open('" +
+         pdgui.defunkify_windows_path(doc.id) + "');"
     a.textContent = doc.title;
     // set title to path for tooltip
     a.title = doc.id;
@@ -844,9 +907,8 @@ function display_doc(doc) {
             let link_rel_obj = rel_obj;
             // for the objects with a help patch, add a link to its -help.pd
             if (ref_rel_objs[i]) {
-                let ref_rel_obj = "javascript: pdgui.doc_open('" +
-                      pdgui.defunkify_windows_path(path.dirname(ref_rel_objs[i])) + "', '" +
-                      pdgui.defunkify_windows_path(path.basename(ref_rel_objs[i])) + "');";
+                let ref_rel_obj = "javascript: doc_open('" +
+                      pdgui.defunkify_windows_path(ref_rel_objs[i]) + "');";
                 link_rel_obj = rel_obj.link(ref_rel_obj);
             }
             p_rel_objs.innerHTML += " " + link_rel_obj;
diff --git a/pd/nw/index.js b/pd/nw/index.js
index f6e0567526dcfb46e2152e832716ba9fc24e5139..0e51ded647f2bb6bed6a15aa77e0bf43e1aa66cb 100644
--- a/pd/nw/index.js
+++ b/pd/nw/index.js
@@ -88,16 +88,6 @@ function nw_window_focus_callback() {
     }
 }
 
-// This should be merged with the same function name in pd_canvas.js,
-// except that we're not saving the Pd Window zoomlevel anywhere
-function nw_window_zoom(delta) {
-    var z = gui.Window.get().zoomLevel;
-    z += delta;
-    if (z < 8 && z > -8) {
-        gui.Window.get().zoomLevel = z;
-    }
-}
-
 function connect() {
     var gui_path, file_path;
     if (have_args() && gui.App.argv.length > 1) {
@@ -338,9 +328,9 @@ function add_events() {
     document.addEventListener("wheel", function(evt) {
         if (pdgui.cmd_or_ctrl_key(evt)) {
             if (evt.deltaY < 0) {
-                nw_window_zoom(+1);
+                pdgui.nw_window_zoom("pd", +1);
             } else if (evt.deltaY > 0) {
-                nw_window_zoom(-1);
+                pdgui.nw_window_zoom("pd", -1);
             }
         }
     }, false);
@@ -356,7 +346,7 @@ function add_events() {
             // reset value so that we can open the same file twice
             evt.target.value = null;
             pdgui.file_dialog_callback(file_string);
-            console.log("tried to openpanel something");
+            //console.log("tried to openpanel something");
         }, false
     );
     document.querySelector("#savepanel_dialog").addEventListener("change",
@@ -365,7 +355,7 @@ function add_events() {
             // reset value so that we can open the same file twice
             evt.target.value = null;
             pdgui.file_dialog_callback(file_string);
-            console.log("tried to savepanel something");
+            //console.log("tried to savepanel something");
         }, false
     );
 
@@ -444,7 +434,7 @@ function nw_create_window(cid, type, width, height, xpos, ypos, attr_array) {
     gui.Window.open(my_file, {
         title: my_title,
         // ico@vt.edu: position in 0.46.2 overrides x and y below
-        position: pos,
+        //position: pos,
         focus: true,
         width: width,
         // We add 23 as a kludge to account for the menubar at the top of
@@ -537,7 +527,7 @@ function nw_create_pd_window_menus(gui, w) {
                 style: "display: none;",
                 type: "file",
                 id: "fileDialog",
-                nwworkingdir: pdgui.get_pd_opendir(),
+                nwworkingdir: pdgui.funkify_windows_path(pdgui.get_pd_opendir()),
                 multiple: null,
                 // These are copied from pd_filetypes in pdgui.js
                 accept: ".pd,.pat,.mxt,.mxb,.help"
@@ -551,7 +541,7 @@ function nw_create_pd_window_menus(gui, w) {
                 // reset value so that we can open the same file twice
                 chooser.value = null;
                 pdgui.menu_open(file_array);
-                console.log("tried to open something");
+                //console.log("tried to open something");
             };
             chooser.click();
         }
@@ -660,12 +650,12 @@ function nw_create_pd_window_menus(gui, w) {
     // View menu
     minit(m.view.zoomin, {
         click: function () {
-            nw_window_zoom(+1);
+            pdgui.nw_window_zoom("pd", +1);
         }
     });
     minit(m.view.zoomout, {
         click: function () {
-            nw_window_zoom(-1);
+            pdgui.nw_window_zoom("pd", -1);
         }
     });
     minit(m.view.zoomreset, {
@@ -687,6 +677,7 @@ function nw_create_pd_window_menus(gui, w) {
         minit(m.put.number, { enabled: false });
         minit(m.put.symbol, { enabled: false });
         minit(m.put.comment, { enabled: false });
+        minit(m.put.listbox, { enabled: false });
         minit(m.put.dropdown, { enabled: false });
         minit(m.put.bang, { enabled: false });
         minit(m.put.toggle, { enabled: false });
@@ -731,19 +722,19 @@ function nw_create_pd_window_menus(gui, w) {
     });
     minit(m.media.test, {
         click: function() {
-            pdgui.pd_doc_open("doc/7.stuff/tools", "testtone.pd");
+            pdgui.pd_doc_open("doc/7.stuff/tools", "testtone.pd", 1);
         }
     });
     minit(m.media.loadmeter, {
         click: function() {
-            pdgui.pd_doc_open("doc/7.stuff/tools", "load-meter.pd");
+            pdgui.pd_doc_open("doc/7.stuff/tools", "load-meter.pd", 1);
         }
     });
 
     // Help sub-entries
     minit(m.help.about, {
         click: function() {
-            pdgui.pd_doc_open("doc/about", "about.pd");
+            pdgui.pd_doc_open("doc/about", "about.pd", 1);
         }
     });
     minit(m.help.manual, {
@@ -751,12 +742,17 @@ function nw_create_pd_window_menus(gui, w) {
             pdgui.pd_doc_open("doc/1.manual", "index.htm");
         }
     });
+    minit(m.help.tutorial, {
+        click: function() {
+            pdgui.pd_doc_open("doc/about", "Purr-Data-Intro.pdf");
+        }
+    });
     minit(m.help.browser, {
         click: pdgui.open_search
     });
     minit(m.help.intro, {
         click: function() {
-            pdgui.pd_doc_open("doc/5.reference", "help-intro.pd");
+            pdgui.pd_doc_open("doc/5.reference", "help-intro.pd", 1);
         }
     });
     minit(m.help.l2ork_list, {
diff --git a/pd/nw/locales/de/translation.json b/pd/nw/locales/de/translation.json
index 820c7d5884e8ec96b57bec824ababfad5141d11a..b2ad4850a367a784c920f624366b10f24304def7 100644
--- a/pd/nw/locales/de/translation.json
+++ b/pd/nw/locales/de/translation.json
@@ -80,7 +80,7 @@
   "gatom": {
     "prop": {
       "gatom": "Atom-Box",
-      "dropdown": "Ausgezähltwunderbox",
+      "dropdown": "Dropdown-Menü",
       "label": "Etikett",
       "label_left": "links",
       "label_right": "rechts",
@@ -91,8 +91,8 @@
       "label_bottom": "unten",
       "label_left": "links",
       "label_right": "rechts",
-      "dropdown_outtype": "output",
-      "dropdown_outtype_tt": "whether to output the index or the value",
+      "dropdown_outtype": "Ausgabetyp",
+      "dropdown_outtype_tt": "Ausgabe von Index oder Wert",
       "width": "Breite",
       "width_tt": "Breite (in Zeichen)"
     }
@@ -201,6 +201,8 @@
     "symbol_tt": "Füge dem Patch ein Feld zur Eingabe und Anzeige von Symbolen hinzu",
     "comment": "Kommentar",
     "comment_tt": "Füge dem Patch einen Kommentar hinzu",
+    "listbox": "Listbox",
+    "listbox_tt": "Füge dem Patch ein Feld zur Eingabe und Anzeige von Listen hinzu",
     "dropdown": "Dropdown",
     "dropdown_tt": "Dropdown menu",
     "bang": "Bang",
@@ -259,6 +261,8 @@
     "about_tt": "Zeige Informationen über diese Version von Pd an",
     "manual": "Handbuch",
     "manual_tt": "Öffne das Pd-HTML-Handbuch",
+    "tutorial": "Purr-Data Tutorial",
+    "tutorial_tt": "Öffne das PDF-Tutorial für neue Purr-Data-Benutzer",
     "browser": "Hilfe-Browser",
     "browser_tt": "Öffne einen Hilfe-Browser, um nach Dokumentation und Objekten zu suchen",
     "intro": "Schnellreferenz",
@@ -280,6 +284,12 @@
       "highlight": "Alle hervorheben"
     }
   },
+  "browser": {
+    "find": {
+      "placeholder": "Suche im Browser",
+      "highlight": "Alle hervorheben"
+    }
+  },
   "canvas": {
     "paste_clipboard_prompt": "Warnung: Sie sind dabei, Pd-Code einzufügen, der außerhalb von Pd erstellt wurde. Möchten Sie fortfahren?",
     "save_dialog": {
@@ -327,10 +337,10 @@
         "viewbox_offsets": "Anzeigebox-Offsets",
         "arrays": "Feld-Optionen"
       },
-      "no_scroll": "Rollbalken verbergen (experimentell)",
-      "no_scroll_tt": "Rollbalken verbergen (experimentell)",
-      "no_menu": "Fenstermenü verbergen (experimentell)",
-      "no_menu_tt": "Fenstermenü verbergen (experimentell)",
+      "no_scroll": "Rollbalken verbergen",
+      "no_scroll_tt": "Rollbalken verbergen",
+      "no_menu": "Fenstermenü verbergen",
+      "no_menu_tt": "Fenstermenü verbergen",
       "gop": "Anzeige im übergeordneten Patch",
       "gop_tt": "Zeige den Inhalt dieses Patches in einem Rechteck im übergeordneten Patch",
       "hide_name": "Namen und Argumente verbergen",
@@ -395,7 +405,9 @@
       "audio": "Audio",
       "audio_tt": "konfiguriere die Audio-Geräte",
       "midi": "MIDI",
-      "midi_tt": "konfiguriere die MIDI-Geräte"
+      "midi_tt": "konfiguriere die MIDI-Geräte",
+      "issue": "Feedback",
+      "issue_tt": "Feedback abgeben oder ein Problem melden"
     },
     "startup": {
       "flags": "Startup-Flags",
@@ -432,7 +444,7 @@
         "footgun": "Fusspistole"
       },
       "grid": {
-        "show_grid": "Am Gitter ausrichten (experimentell)",
+        "show_grid": "Am Gitter ausrichten",
         "show_grid_tt": "Ausrichten am Gitter im Edit-Modus"
       },
       "zoom": {
@@ -441,12 +453,16 @@
       },
       "autocomplete": {
         "autocomplete_title": "Autovervollständigungs-Einstellungen",
-        "autocomplete": "Autovervollständigung von Objekt-Namen und Argumenten (experimentell)",
+        "autocomplete": "Autovervollständigung von Objekt-Namen und Argumenten",
         "autocomplete_tt": "Schlägt bei der Eingabe Vervollständigungen von Objekt-Namen und Argumenten vor",
         "autocomplete_prefix": "Vervollständigung per Objektnamens-Präfix",
         "autocomplete_prefix_tt": "Vervollständigung nur per Objektnamens-Präfix (statt Übereinstimmung irgendwo im Objektnamen)",
         "autocomplete_relevance": "Sortiere Vervollständigungen nach Relevanz",
-        "autocomplete_relevance_tt": "Zeigt die relevantesten Vervollständigungen zuerst (basierend auf der Nutzungshäufigkeit)"
+        "autocomplete_relevance_tt": "Zeigt die relevantesten Vervollständigungen zuerst (basierend auf der Nutzungshäufigkeit)",
+        "autocomplete_tooltip_enabled": "Tooltips für Objekte anzeigen",
+        "autocomplete_tooltip_enabled_tt": "Zeigt Tooltips für Objekte an, wenn Sie mit der Maus darüber fahren",
+        "autocomplete_fuzzy_search": "Fuzzy-Matching für Autovervollständigungen",
+        "autocomplete_fuzzy_search_tt": "Zeigt ungefähre Vervollständigungen mithilfe von Fuzzy-Matching an"
       },
       "browser": {
         "browser_title": "Hilfe-Browser-Einstellungen (WARNUNG: Änderungen können Startup-Zeiten beeinflussen!)",
@@ -455,7 +471,11 @@
         "browser_path": "Hilfe-Browser durchsucht auch den Hilfe-Pfad",
         "browser_path_tt": "Der Hilfe-Browser durchkämmt auch Hilfe-Patches im benutzerdefinierten Hilfe-Pfad nach Suchbegriffen (langsamer)",
         "browser_init": "Erstelle den Hilfe-Index beim Programmstart",
-        "browser_init_tt": "Falls aktiviert, erstelle den Index für den Hilfe-Browser bereits beim Programmstart"
+        "browser_init_tt": "Falls aktiviert, erstelle den Index für den Hilfe-Browser bereits beim Programmstart",
+        "reset_init": "Lösche Vervollständigungen",
+        "reset_init_tt": "Falls aktiviert, lösche die benutzerdefinierten Vervollständigungen und Argumente beim Zurücksetzen des Indexes",
+        "reset_index": "Zurücksetzen der Indizes",
+        "reset_index_tt": "Setze den Hilfe- und Vervollständigungs-Index zurück"
       }
     },
     "audio": {
@@ -474,7 +494,9 @@
       "input_title": "Eingabe-Geräte",
       "input_title_tt": "Hardware-Geräte für die Audio-Eingabe von Pd",
       "output_title": "Ausgabe-Geräte",
-      "output_title_tt": "Hardware-Geräte für die Audio-Ausgabe von Pd"
+      "output_title_tt": "Hardware-Geräte für die Audio-Ausgabe von Pd",
+      "refresh_audiodevs": "Aktualisieren",
+      "refresh_audiodevs_tt": "Audio-Geräteliste aktualisieren"
     },
     "midi": {
       "api": "MIDI API",
@@ -486,7 +508,23 @@
       "input_title": "Eingabe-Geräte",
       "input_title_tt": "Hardware-Geräte für die MIDI-Eingabe von Pd",
       "output_title": "Ausgabe-Geräte",
-      "output_title_tt": "Hardware-Geräte für die MIDI-Ausgabe von Pd"
+      "output_title_tt": "Hardware-Geräte für die MIDI-Ausgabe von Pd",
+      "refresh_mididevs": "Aktualisieren",
+      "refresh_mididevs_tt": "MIDI-Geräteliste aktualisieren"
+    },
+    "issue":{
+      "title": "Titel",
+      "title_tt": "Bitte geben Sie einen kurzen Titel für Ihr Feedback ein",
+      "description": "Beschreibung",
+      "description_tt": "Beschreiben Sie das Problem, das bei Ihnen auftritt",
+      "submit": "Absenden",
+      "submit_tt": "Senden Sie Ihr Feedback an den Purr-Data Issue Tracker (Anmeldung erforderlich)",
+      "warning": "Titel und Beschreibung sind Pflichtfelder.",
+      "confirm": "Ihr Feedback geht verloren. Trotzdem schließen?",
+      "steps_to_reproduce": "Schritte zum Reproduzieren",
+      "steps_to_reproduce_tt": "Listen Sie die Schritte auf, um das Problem zu reproduzieren",
+      "environment_details": "Umgebungsdetails",
+      "environment_details_tt": "Details zu Ihrem Betriebssystem, Purr-Data-Version usw."
     },
     "ok": "Ok",
     "ok_tt": "Aktualisiere die Einstellungen und schließe den Dialog",
diff --git a/pd/nw/locales/en/translation.json b/pd/nw/locales/en/translation.json
index 4ddd99a81f20a225b12072225728173d2a0169f3..76742c64c1396f0194e14da357bcbf231a588d2d 100644
--- a/pd/nw/locales/en/translation.json
+++ b/pd/nw/locales/en/translation.json
@@ -201,6 +201,8 @@
     "symbol_tt": "Add a box to type and display a symbol on the canvas",
     "comment": "Comment",
     "comment_tt": "Write a comment on the canvas",
+    "listbox": "Listbox",
+    "listbox_tt": "Add a box to type and display a listbox on the canvas",
     "dropdown": "Dropdown",
     "dropdown_tt": "Dropdown menu",
     "bang": "Bang",
@@ -259,6 +261,8 @@
     "about_tt": "Get information about this version of Pd",
     "manual": "Manual",
     "manual_tt": "Open the HTML manual for Pd",
+    "tutorial": "Purr-Data Tutorial",
+    "tutorial_tt": "Open the PDF tutorial for new Purr-Data users",
     "browser": "Help Browser",
     "browser_tt": "Open a help browser to search for documentation and objects",
     "intro": "Quick Reference",
@@ -280,6 +284,12 @@
       "highlight": "Highlight All"
     }
   },
+  "browser": {
+    "find": {
+      "placeholder": "Search in Browser",
+      "highlight": "Highlight All"
+    }
+  },
   "canvas": {
     "paste_clipboard_prompt": "Warning: you are about to paste Pd code that came from somewhere outside of Pd. Do you want to continue?",
     "save_dialog": {
@@ -395,7 +405,9 @@
       "audio": "Audio",
       "audio_tt": "configure the audio devices",
       "midi": "MIDI",
-      "midi_tt": "configure MIDI devices"
+      "midi_tt": "configure MIDI devices",
+      "issue": "Feedback",
+      "issue_tt": "submit feedback or report an issue"
     },
     "startup": {
       "flags": "startup flags",
@@ -432,7 +444,7 @@
         "footgun": "Footgun"
       },
       "grid": {
-        "show_grid": "snap to grid (experimental)",
+        "show_grid": "snap to grid",
         "show_grid_tt": "Snap to the grid in edit mode"
       },
       "zoom": {
@@ -441,12 +453,16 @@
       },
       "autocomplete": {
         "autocomplete_title": "Auto-completion settings",
-        "autocomplete": "auto-complete object names and arguments (experimental)",
+        "autocomplete": "auto-complete object names and arguments",
         "autocomplete_tt": "Offers completions for object names and arguments as you type",
         "autocomplete_prefix": "match completions by object name prefix",
         "autocomplete_prefix_tt": "Only list completions whose prefix matches (rather than matches anywhere in object names)",
         "autocomplete_relevance": "sort completions by relevance",
-        "autocomplete_relevance_tt": "List most relevant completions first (based on how frequently they are used)"
+        "autocomplete_relevance_tt": "List most relevant completions first (based on how frequently they are used)",
+        "autocomplete_tooltip_enabled": "show tooltips for objects",
+        "autocomplete_tooltip_enabled_tt": "Show tooltips for objects when hovering over them",
+        "autocomplete_fuzzy_search": "fuzzy matching for autocompletions",
+        "autocomplete_fuzzy_search_tt": "Show approximate completions using fuzzy matching"
       },
       "browser": {
         "browser_title": "Help browser settings (WARNING: changing these may affect startup times!)",
@@ -455,7 +471,11 @@
         "browser_path": "help browser also searches the help path",
         "browser_path_tt": "Also scan help patches in the user-defined help path for searchable keywords (slower)",
         "browser_init": "prepare the help index at application start",
-        "browser_init_tt": "If checked, prepare the index for the help browser already when the application starts"
+        "browser_init_tt": "If checked, prepare the index for the help browser already when the application starts",
+        "reset_init": "clear completions",
+        "reset_init_tt": "If checked, clear the custom completions and arguments when resetting the index",
+        "reset_index": "Reset indexes",
+        "reset_index_tt": "Reset the help and completion indexes"
       }
     },
     "audio": {
@@ -474,7 +494,9 @@
       "input_title": "Input Devices",
       "input_title_tt": "hardware devices used to get audio into Pd",
       "output_title": "Output Devices",
-      "output_title_tt": "hardware devices to send audio from Pd"
+      "output_title_tt": "hardware devices to send audio from Pd",
+      "refresh_audiodevs": "Refresh",
+      "refresh_audiodevs_tt": "refresh the list of audio devices"
     },
     "midi": {
       "api": "midi api",
@@ -486,7 +508,23 @@
       "input_title": "Input Devices",
       "input_title_tt": "hardware devices used to get midi data into Pd",
       "output_title": "Output Devices",
-      "output_title_tt": "hardware devices to send midi data from Pd"
+      "output_title_tt": "hardware devices to send midi data from Pd",
+      "refresh_mididevs": "Refresh",
+      "refresh_mididevs_tt": "refresh the list of midi devices"
+    },
+    "issue":{
+      "title": "Title",
+      "title_tt": "Please provide a short title for your feedback",
+      "description": "Description",
+      "description_tt": "Describe the issue you are experiencing",
+      "submit": "Submit",
+      "submit_tt": "Submit your feedback to the Purr-Data issue tracker (login required)",
+      "warning": "Title and Description are required fields.",
+      "confirm": "Your feedback will be lost. Close anyway?",
+      "steps_to_reproduce": "Steps to Reproduce",
+      "steps_to_reproduce_tt": "List the steps to reproduce the issue",
+      "environment_details": "Environment Details",
+      "environment_details_tt": "Details about your operating system, Purr-Data version, etc."
     },
     "ok": "Ok",
     "ok_tt": "Update the preferences and close the dialog",
diff --git a/pd/nw/locales/fr/translation.json b/pd/nw/locales/fr/translation.json
index b3e91abcdc3c97c13a19f7819eb7182ecedd69d0..382b13dd28e1a52ac884e047e5ce8cbdd1024c7a 100644
--- a/pd/nw/locales/fr/translation.json
+++ b/pd/nw/locales/fr/translation.json
@@ -201,6 +201,8 @@
     "symbol_tt": "Ajouter un objet Symbole au canevas (pour affichage)",
     "comment":    "Commentaire",
     "comment_tt": "Ajouter un object Commentaire au canevas",
+    "listbox": "Listbox",
+    "listbox_tt": "Ajouter un objet Zone de liste au canevas (pour affichage)",
     "dropdown":    "Menu Dropdown",
     "dropdown_tt": "Ajouter un objet Menu Dropdown au canevas (menu déroulant vers le bas)",
     "bang":    "Bang",
@@ -259,6 +261,8 @@
     "about_tt": "Obtenir des informations au sujet de cette version de Pd",
     "manual":    "Manuel Pd (HTML)",
     "manual_tt": "Ouvrir le manuel HTML de Pd",
+    "tutorial": "Tutoriel Purr-Data (PDF)",
+    "tutorial_tt": "Ouvrir le tutoriel PDF pour les nouveaux utilisateurs de Purr-Data",
     "browser":    "Navigateur de l'Aide",
     "browser_tt": "Ouvrir le navigateur de l'Aide pour chercher de la documentation et des objets",
     "intro":    "Référence rapide",
@@ -277,7 +281,13 @@
   "pd_window": {
     "find": {
       "placeholder": "Chercher dans la Console",
-      "highlight": "Surligner toutes les occurrences"
+      "highlight": "Surligner toutes"
+    }
+  },
+  "browser": {
+    "find": {
+      "placeholder": "Chercher dans le Navigateur",
+      "highlight": "Surligner toutes"
     }
   },
   "canvas": {
@@ -328,8 +338,8 @@
         "arrays": "Options du tableau"
       },
       "no_scroll":    "Cacher ascenseurs V/H (xptal)",
-      "no_scroll_tt": "Masquer les barres de défilement de la fenêtre (expérimental)",
-      "no_menu":    "Masquer le menu (expérimental)",
+      "no_scroll_tt": "Masquer les barres de défilement de la fenêtre",
+      "no_menu":    "Masquer le menu",
       "no_menu_tt": "Masquer le menu de la fenêtre",
       "gop":    "Graphique sur le Parent (GOP)",
       "gop_tt": "Afficher le contenu intérieur de ce canevas dans un rectangle sur le canevas conteneur",
@@ -395,7 +405,9 @@
       "audio":    "Audio",
       "audio_tt": "Configurer les dispositifs Audio",
       "midi":    "MIDI",
-      "midi_tt": "Configurer les dispositifs MIDI"
+      "midi_tt": "Configurer les dispositifs MIDI",
+      "issue": "Commentaires",
+      "issue_tt": "Soumettre des commentaires ou signaler un problème"
     },
     "startup": {
       "flags":    "Indicateurs de démarrage",
@@ -432,7 +444,7 @@
         "footgun":   "Footgun"
       },
       "grid": {
-        "show_grid": "Aligner sur la grille (expérimental)",
+        "show_grid": "Aligner sur la grille",
         "show_grid_tt": "Accrocher à la grille en mode Édition"
       },
       "zoom": {
@@ -441,12 +453,16 @@
       },
       "autocomplete": {
         "autocomplete_title": "Paramètres d'autocomplétion",
-        "autocomplete": "autocompléter les noms et arguments des objets (expérimental)",
+        "autocomplete": "autocompléter les noms et arguments des objets",
         "autocomplete_tt": "Offre complétion pour les noms et arguments des objets au fur et à mesure de la saisie",
         "autocomplete_prefix": "complétion par le préfixe du nom de l'objet",
         "autocomplete_prefix_tt": "Complétion uniquement par le préfixe du nom de l'objet (ignorer les correspondances au milieu du nom des objets)",
         "autocomplete_relevance": "Trier les complétions par pertinence",
-        "autocomplete_relevance_tt": "Affiche les complétions les plus pertinentes en premier (basé sur la fréquence d'utilisation)"
+        "autocomplete_relevance_tt": "Affiche les complétions les plus pertinentes en premier (basé sur la fréquence d'utilisation)",
+        "autocomplete_tooltip_enabled": "Affiche les info-bulles pour les objets",
+        "autocomplete_tooltip_enabled_tt": "Affiche les info-bulles des objets lorsque vous les survolez",
+        "autocomplete_fuzzy_search": "Correspondance floue pour les autocomplétions",
+        "autocomplete_fuzzy_search_tt": "Afficher les complétions approximatifs à l'aide de la correspondance floue"
       },
       "browser": {
         "browser_title": "Paramètres du navigateur d'Aide (AVERTISSEMENT: les modifier peut affecter les temps de démarrage!)",
@@ -455,7 +471,11 @@
         "browser_path":    "Le navigateur d'Aide recherche également dans le chemin de l'Aide",
         "browser_path_tt": "Analyser également les Patches d'Aide dans le chemin d'Aide défini par l'utilisateur pour rechercher des mots clés consultables (plus lent)",
         "browser_init":    "Préparer l'index de l'Aide au démarrage de l'application",
-        "browser_init_tt": "Si cette case est cochée, préparez l'index pour le navigateur d'Aide dès le démarrage de l'application"
+        "browser_init_tt": "Si cette case est cochée, préparez l'index pour le navigateur d'Aide dès le démarrage de l'application",
+        "reset_init": "Effacer les complétions",
+        "reset_init_tt": "Si cette case est cochée, effacer les complétions et arguments personnalisés lors de la réinitialisation de l'index",
+        "reset_index": "Réinitialiser les index",
+        "reset_index_tt": "Réinitialiser les index d'aide et de complétion"
       }
     },
     "audio": {
@@ -474,7 +494,9 @@
       "input_title":    "Dispositifs d'entrée",
       "input_title_tt": "Périphériques matériels utilisés pour recevoir l'Audio dans Pd",
       "output_title":    "Dispositifs de sortie",
-      "output_title_tt": "Périphériques matériels utilisés pour envoyer l'Audio depuis Pd"
+      "output_title_tt": "Périphériques matériels utilisés pour envoyer l'Audio depuis Pd",
+      "refresh_audiodevs": "Actualiser",
+      "refresh_audiodevs_tt": "Actualiser la liste des périphériques audio"
     },
     "midi": {
       "api": "API MIDI",
@@ -486,7 +508,23 @@
       "input_title":    "Dispositifs d'entrée",
       "input_title_tt": "Périphériques matériels utilisés pour recevoir des données MIDI dans Pd",
       "output_title":    "Dispositifs de sortie",
-      "output_title_tt": "Périphériques matériels utilisés pour envoyer des données MIDI depuis Pd"
+      "output_title_tt": "Périphériques matériels utilisés pour envoyer des données MIDI depuis Pd",
+      "refresh_mididevs": "Actualiser",
+      "refresh_mididevs_tt": "Actualiser la liste des périphériques MIDI"
+    },
+    "issue":{
+      "title": "Titre",
+      "title_tt": "Veuillez fournir un titre court pour vos commentaires",
+      "description": "Description",
+      "description_tt": "Décrivez le problème que vous rencontrez",
+      "submit": "Soumettre",
+      "submit_tt": "Soumettez vos commentaires au système de suivi des problèmes Purr-Data (connexion requise)",
+      "warning": "Le titre et la description sont des champs obligatoires.",
+      "confirm": "Vos commentaires seront perdus. Fermer quand même ?",
+      "steps_to_reproduce": "Étapes pour reproduire",
+      "steps_to_reproduce_tt": "Répertoriez les étapes pour reproduire le problème",
+      "environment_details": "Détails de l'environnement",
+      "environment_details_tt": "Détails sur votre système d'exploitation, la version de Purr-Data, etc."
     },
     "ok": "OK",
     "ok_tt": "Mettre à jour les Préférences et fermer la fenêtre de dialogue",
diff --git a/pd/nw/package.json b/pd/nw/package.json
index 9f4e110d646c7285de6ec8ec4670ccdfa733f5eb..b07afd6f5c271f6394ec6be0774df98774c7cff4 100644
--- a/pd/nw/package.json
+++ b/pd/nw/package.json
@@ -2,7 +2,7 @@
   "name": "purr-data",
   "version": "0.1.0",
   "main": "index.html",
-  "chromium-args": "--proxy-server=http://127.0.0.1 --password-store=basic",
+  "chromium-args": "--disable-features=nw2 --proxy-server=http://127.0.0.1 --password-store=basic",
   "window": {
     "icon": "./purr.png",
     "position": "center",
diff --git a/pd/nw/pd_canvas.js b/pd/nw/pd_canvas.js
index b9870cbe98903e91b7a1449c278723be2c4344a8..2e59069b03b68922fc34c9ddedf64ce0a50a74c8 100644
--- a/pd/nw/pd_canvas.js
+++ b/pd/nw/pd_canvas.js
@@ -26,16 +26,6 @@ function nw_window_blur_callback(name) {
     }
 }
 
-function nw_window_zoom(name, delta) {
-    var z = gui.Window.get().zoomLevel;
-    z += delta;
-    if (z < 8 && z > -8) {
-        gui.Window.get().zoomLevel = z;
-        pdgui.pdsend(name, "zoom", z);
-        pdgui.gui_canvas_get_scroll(name);
-    }
-}
-
 var canvas_events = (function() {
     var name,
         state,
@@ -180,6 +170,23 @@ var canvas_events = (function() {
             else
                 return is_canvas_obj(evt.target);
         },
+        target_is_ac_dropdown = function(evt) {
+            let ac = ac_dropdown();
+            if (!ac) {
+                return false;
+            }
+            let rect = ac.getBoundingClientRect();
+            let left = rect.left;
+            let right = rect.right;
+            let top = rect.top;
+            let bottom = rect.bottom;
+
+            if (evt.clientX < left || evt.clientX > right ||
+                evt.clientY < top || evt.clientY > bottom) {
+                return false;
+            }
+            return true;
+        },
         text_to_normalized_svg_path = function(text) {
             text = text.slice(4).trim()  // draw
                        .slice(4).trim()  // path
@@ -209,7 +216,7 @@ var canvas_events = (function() {
             text = text.replace(/(\$@)/g, "\\$@");
 
             // escape "," and ";"
-            text = text.replace(/(?!\\)(,|;)/g, " \\$1 ");
+            text = text.replace(/(?<!\\)(,|;)/g, " \\$1 ");
 
             // filter consecutive ascii32
             text = text.replace(/\u0020+/g, " ");
@@ -550,8 +557,8 @@ var canvas_events = (function() {
                 return false;
             },
             text_mousedown: function(evt) {
-                if (evt.target.parentNode === ac_dropdown()) {
-                    pdgui.select_result_autocomplete_dd(textbox(), ac_dropdown());
+                if (evt.target.parentNode === ac_dropdown() || (evt.target.tagName === 'SPAN' && evt.target.closest('p') && evt.target.closest('p').parentNode === ac_dropdown())) {
+                    pdgui.select_result_autocomplete_dd(document, textbox(), ac_dropdown());
                     last_yanked = "";
                     // ag: Don't do the usual object instantiation thing if
                     // we've clicked on the autocompletion dropdown. This
@@ -562,6 +569,10 @@ var canvas_events = (function() {
                     caret_end();
                     return false;
                 }
+                if(target_is_ac_dropdown(evt)) {
+                    evt.stopPropagation();
+                    return false;
+                }
                 if (textbox() !== evt.target && !target_is_scrollbar(evt)) {
                     utils.create_obj();
                     // send a mousedown and mouseup event to Pd to instantiate
@@ -607,7 +618,7 @@ var canvas_events = (function() {
                         if(ac_dropdown() === null || ac_dropdown().getAttribute("selected_item") === "-1") {
                             grow_svg_for_element(textbox());
                         } else { // else, if there is a selected item on autocompletion tool, the selected item is written on the box
-                            pdgui.select_result_autocomplete_dd(textbox(), ac_dropdown());
+                            pdgui.select_result_autocomplete_dd(document, textbox(), ac_dropdown());
                             caret_end();
                             // No need to instantiate the object here,
                             // presumably the user wants to go on editing.
@@ -615,26 +626,12 @@ var canvas_events = (function() {
                         last_yanked = "";
                         break;
                     case 9: // tab
-                        [last_completed, last_offset] = pdgui.select_result_autocomplete_dd(textbox(), ac_dropdown(), last_completed, last_offset, last_results, evt.shiftKey?-1:1);
+                        [last_completed, last_offset] = pdgui.select_result_autocomplete_dd(document, textbox(), ac_dropdown(), last_completed, last_offset, last_results, evt.shiftKey?-1:1);
                         last_yanked = "";
                         caret_end();
                         break;
-                    case 36:
-                        if (evt.altKey) { // alt-home
-                            [last_completed, last_offset] = pdgui.select_result_autocomplete_dd(textbox(), ac_dropdown(), 0, last_offset, last_results, 0);
-                            last_yanked = "";
-                            caret_end();
-                        }
-                        break;
-                    case 35:
-                        if (evt.altKey) { // alt-end
-                            [last_completed, last_offset] = pdgui.select_result_autocomplete_dd(textbox(), ac_dropdown(), last_results.length-1, last_offset, last_results, 0);
-                            last_yanked = "";
-                            caret_end();
-                        }
-                        break;
                     case 27: // esc
-                        pdgui.delete_autocomplete_dd(ac_dropdown());
+                        pdgui.delete_autocomplete_dd(document, ac_dropdown());
                         last_completed = last_offset = -1;
                         last_results = [];
                         if (last_yanked != "") {
@@ -652,7 +649,7 @@ var canvas_events = (function() {
                             last_completed = last_offset = -1;
                             last_results = [];
                             if (textbox().innerText === "") {
-                                pdgui.delete_autocomplete_dd(ac_dropdown());
+                                pdgui.delete_autocomplete_dd(document, ac_dropdown());
                                 last_yanked = "";
                             } else if (textbox().innerText === last_yanked) {
                                 // confirmed, really yank now
@@ -697,7 +694,7 @@ var canvas_events = (function() {
                             last_completed = last_offset = -1;
                             last_yanked = "";
                             if (textbox().innerText === "") {
-                                pdgui.delete_autocomplete_dd(ac_dropdown());
+                                pdgui.delete_autocomplete_dd(document, ac_dropdown());
                             } else {
                                 ac_repopulate();
                             }
@@ -1341,7 +1338,7 @@ var canvas_events = (function() {
                     pdgui.saveas_callback(name, evt.target.value, 0);
                     // reset value so that we can open the same file twice
                     evt.target.value = null;
-                    console.log("tried to save something");
+                    //console.log("tried to save something");
                 }, false
             );
 
@@ -1380,7 +1377,7 @@ var canvas_events = (function() {
                     // For now, however, we just turn off its default behavior
                     // and control it with a bunch of complicated callbacks.
 
-                    console.log("got a context menu evt...");
+                    //console.log("got a context menu evt...");
                     evt.stopPropagation()
                     evt.preventDefault();
                 },
@@ -1431,7 +1428,7 @@ var canvas_events = (function() {
                     });
                     if (pdgui.cmd_or_ctrl_key(evt)) {
                         // scroll up for zoom-in, down for zoom-out
-                        nw_window_zoom(name, -d.deltaY);
+                        pdgui.nw_window_zoom(name, -d.deltaY);
                     }
                     // Send a message on to Pd for the [mousewheel] legacy
                     // object (in the future we can refcount to prevent
@@ -1461,7 +1458,7 @@ var canvas_events = (function() {
                     // reset value so that we can open the same file twice
                     evt.target.value = null;
                     pdgui.file_dialog_callback(file_string);
-                    console.log("tried to openpanel something");
+                    //console.log("tried to openpanel something");
                 }, false
             );
             document.querySelector("#savepanel_dialog")
@@ -1470,7 +1467,7 @@ var canvas_events = (function() {
                     // reset value so that we can open the same file twice
                     evt.target.value = null;
                     pdgui.file_dialog_callback(file_string);
-                    console.log("tried to savepanel something");
+                    //console.log("tried to savepanel something");
                 }, false
             );
             document.querySelector("#canvas_find_text")
@@ -1768,7 +1765,7 @@ function nw_create_patch_window_menus(gui, w, name) {
                 style: "display: none;",
                 type: "file",
                 id: "fileDialog",
-                nwworkingdir: pdgui.get_pd_opendir(),
+                nwworkingdir: pdgui.funkify_windows_path(pdgui.get_pd_opendir()),
                 multiple: null,
                 // These are copied from pd_filetypes in pdgui.js
                 accept: ".pd,.pat,.mxt,.mxb,.help"
@@ -1782,7 +1779,7 @@ function nw_create_patch_window_menus(gui, w, name) {
                 // reset value so that we can open the same file twice
                 this.value = null;
                 pdgui.menu_open(file_array);
-                console.log("tried to open something");
+                //console.log("tried to open something");
             };
             chooser.click();
         }
@@ -2051,13 +2048,13 @@ function nw_create_patch_window_menus(gui, w, name) {
     minit(m.view.zoomin, {
         enabled: true,
         click: function () {
-            nw_window_zoom(name, +1);
+            pdgui.nw_window_zoom(name, +1);
         }
     });
     minit(m.view.zoomout, {
         enabled: true,
         click: function () {
-            nw_window_zoom(name, -1);
+            pdgui.nw_window_zoom(name, -1);
         }
     });
     minit(m.view.optimalzoom, {
@@ -2138,6 +2135,14 @@ function nw_create_patch_window_menus(gui, w, name) {
             pdgui.pdsend(name, "text 0");
         }
     });
+    minit(m.put.listbox, {
+        enabled: true,
+        click: function() {
+            update_live_box();
+            pdgui.pdsend(name, "dirty 1");
+            pdgui.pdsend(name, "listbox 0");
+        }
+    });
     minit(m.put.dropdown, {
         enabled: true,
         click: function() {
@@ -2285,19 +2290,19 @@ function nw_create_patch_window_menus(gui, w, name) {
     });
     minit(m.media.test, {
         click: function() {
-            pdgui.pd_doc_open("doc/7.stuff/tools", "testtone.pd");
+            pdgui.pd_doc_open("doc/7.stuff/tools", "testtone.pd", 1);
         }
     });
     minit(m.media.loadmeter, {
         click: function() {
-            pdgui.pd_doc_open("doc/7.stuff/tools", "load-meter.pd");
+            pdgui.pd_doc_open("doc/7.stuff/tools", "load-meter.pd", 1);
         }
     });
 
     // Help menu
     minit(m.help.about, {
         click: function() {
-            pdgui.pd_doc_open("doc/about", "about.pd");
+            pdgui.pd_doc_open("doc/about", "about.pd", 1);
         }
     });
     minit(m.help.manual, {
@@ -2305,12 +2310,17 @@ function nw_create_patch_window_menus(gui, w, name) {
             pdgui.pd_doc_open("doc/1.manual", "index.htm");
         }
     });
+    minit(m.help.tutorial, {
+        click: function() {
+            pdgui.pd_doc_open("doc/about", "Purr-Data-Intro.pdf");
+        }
+    });
     minit(m.help.browser, {
         click: pdgui.open_search
     });
     minit(m.help.intro, {
         click: function() {
-            pdgui.pd_doc_open("doc/5.reference", "help-intro.pd");
+            pdgui.pd_doc_open("doc/5.reference", "help-intro.pd", 1);
         }
     });
     minit(m.help.l2ork_list, {
diff --git a/pd/nw/pd_menus.js b/pd/nw/pd_menus.js
index 0e3646546aef68d406085f90b7e36a24411df77a..657f9d95c2ec3266d881eea3a965bf5e782fdd14 100644
--- a/pd/nw/pd_menus.js
+++ b/pd/nw/pd_menus.js
@@ -472,6 +472,12 @@ function create_menu(gui, type) {
             tooltip: l("menu.comment_tt")
         }));
         put_menu.append(new gui.MenuItem({ type: "separator" }));
+        put_menu.append(m.put.listbox = new gui.MenuItem({
+            label: l("menu.listbox"),
+            key: shortcuts.menu.listbox.key,
+            modifiers: shortcuts.menu.listbox.modifiers,
+            tooltip: l("menu.listbox_tt")
+        }));
         put_menu.append(m.put.dropdown = new gui.MenuItem({
             label: l("menu.dropdown"),
             key: shortcuts.menu.dropdown.key,
@@ -536,6 +542,9 @@ function create_menu(gui, type) {
         put_menu.append(new gui.MenuItem({ type: "separator" }));
         //putMenu.append(m.put.graph = new gui.MenuItem());
         put_menu.append(m.put.array = new gui.MenuItem({
+            label: l("menu.array"),
+            key: shortcuts.menu.array.key,
+            modifiers: shortcuts.menu.array.modifiers,
             label: l("menu.array"),
             tooltip: l("menu.array_tt")
         }));
@@ -626,6 +635,10 @@ function create_menu(gui, type) {
         label: l("menu.manual"),
         tooltip: l("menu.manual_tt")
     }));
+    help_menu.append(m.help.tutorial = new gui.MenuItem({
+        label: l("menu.tutorial"),
+        tooltip: l("menu.tutorial_tt")
+    }));
     help_menu.append(m.help.browser = new gui.MenuItem({
         label: l("menu.browser"),
         key: shortcuts.menu.browser.key,
diff --git a/pd/nw/pd_shortcuts.js b/pd/nw/pd_shortcuts.js
index a0f2bfd6055a56953769a165fc6a32d11bc6c0a4..7d2fa5c4a93b8b8a043f8f5b2eeb8e070e1814da 100644
--- a/pd/nw/pd_shortcuts.js
+++ b/pd/nw/pd_shortcuts.js
@@ -1,32 +1,34 @@
 "use strict";
 
 var cmd_or_ctrl = (process.platform === "darwin") ? "cmd" : "ctrl";
+var cmd_or_ctrl_shift = cmd_or_ctrl + "+shift";
+var cmd_or_ctrl_alt = cmd_or_ctrl + "+alt";
 
 exports.menu = {
   "new":   { key: "n", modifiers: cmd_or_ctrl },
   "open":   { key: "o", modifiers: cmd_or_ctrl },
   "save":   { key: "s", modifiers: cmd_or_ctrl },
-  "saveas": { key: "s", modifiers: cmd_or_ctrl + "+shift" },
-  "print":  { key: "p", modifiers: cmd_or_ctrl + "+shift" },
+  "saveas": { key: "s", modifiers: cmd_or_ctrl_shift },
+  "print":  { key: "p", modifiers: cmd_or_ctrl_shift },
   "message" : { key: "m", modifiers: cmd_or_ctrl },
   "close":  { key: "w", modifiers: cmd_or_ctrl },
   "quit":   { key: "q", modifiers: cmd_or_ctrl },
 
   "undo":   { key: "z", modifiers: cmd_or_ctrl },
-  "redo":   { key: "z", modifiers: cmd_or_ctrl + "+shift" },
+  "redo":   { key: "z", modifiers: cmd_or_ctrl_shift },
   "selectall":{ key: "a", modifiers: cmd_or_ctrl },
   "cut":    { key: "x", modifiers: cmd_or_ctrl },
   "copy":   { key: "c", modifiers: cmd_or_ctrl },
   "paste":  { key: "v", modifiers: cmd_or_ctrl },
-  "paste_clipboard": { key: "v", modifiers: cmd_or_ctrl + "+alt" },
+  "paste_clipboard": { key: "v", modifiers: cmd_or_ctrl_alt },
   "duplicate": { key: "d", modifiers: cmd_or_ctrl },
   "undo":   { key: "z", modifiers: cmd_or_ctrl },
 
   "reselect": { key: String.fromCharCode(10), modifiers: cmd_or_ctrl },
-  "clear_console": { key: "l", modifiers: cmd_or_ctrl + "+shift" },
-  "encapsulate": { key: "e", modifiers: cmd_or_ctrl + "+shift" },
+  "clear_console": { key: "l", modifiers: cmd_or_ctrl_shift },
+  "encapsulate": { key: "e", modifiers: cmd_or_ctrl_shift },
   "tidyup": { key: "y", modifiers: cmd_or_ctrl },
-  "cordinspector":   { key: "r", modifiers: cmd_or_ctrl + "+shift" },
+  "cordinspector":   { key: "r", modifiers: cmd_or_ctrl_shift },
   "find":   { key: "f", modifiers: cmd_or_ctrl },
   "findagain":{ key: "g", modifiers: cmd_or_ctrl },
   "editmode": { key: "e", modifiers: cmd_or_ctrl },
@@ -35,12 +37,10 @@ exports.menu = {
 
   "zoomin": { key: "=", modifiers: cmd_or_ctrl },
   "zoomout": { key: "-", modifiers: cmd_or_ctrl },
-  // uncomment this for AZERTY keyboards:
-  //"zoomout": { key: "6", modifiers: cmd_or_ctrl },
   "zoomreset": { key: "0", modifiers: cmd_or_ctrl },
   "zoomoptimal": { key: "9", modifiers: cmd_or_ctrl },
-  "zoomhoriz": { key: "9", modifiers: cmd_or_ctrl + "+alt" },
-  "zoomvert": { key: "9", modifiers: cmd_or_ctrl + "+shift" },
+  "zoomhoriz": { key: "9", modifiers: cmd_or_ctrl_alt },
+  "zoomvert": { key: "9", modifiers: cmd_or_ctrl_shift },
   "fullscreen": { key: (process.platform === "darwin") ? "f" : "F11",
     modifiers: (process.platform === "darwin") ? "cmd+ctrl" : null },
 
@@ -49,16 +49,18 @@ exports.menu = {
   "number": { key: "3", modifiers: cmd_or_ctrl },
   "symbol": { key: "4", modifiers: cmd_or_ctrl },
   "comment": { key: "5", modifiers: cmd_or_ctrl },
-  "dropdown": { key: "m", modifiers: cmd_or_ctrl + "+shift" },
-  "bang": { key: "b", modifiers: cmd_or_ctrl + "+shift" },
-  "toggle": { key: "t", modifiers: cmd_or_ctrl + "+shift" },
-  "number2": { key: "n", modifiers: cmd_or_ctrl + "+shift" },
-  "vslider": { key: "v", modifiers: cmd_or_ctrl + "+shift" },
-  "hslider": { key: "h", modifiers: cmd_or_ctrl + "+shift" },
-  "vradio": { key: "d", modifiers: cmd_or_ctrl + "+shift" },
-  "hradio": { key: "i", modifiers: cmd_or_ctrl + "+shift" },
-  "vu":     { key: "u", modifiers: cmd_or_ctrl + "+shift" },
-  "cnv": { key: "c", modifiers: cmd_or_ctrl + "+shift" },
+  "listbox": { key: "4", modifiers: cmd_or_ctrl_shift },
+  "dropdown": { key: "6", modifiers: cmd_or_ctrl_shift },
+  "bang": { key: "b", modifiers: cmd_or_ctrl_shift },
+  "toggle": { key: "t", modifiers: cmd_or_ctrl_shift },
+  "number2": { key: "n", modifiers: cmd_or_ctrl_shift },
+  "vslider": { key: "v", modifiers: cmd_or_ctrl_shift },
+  "hslider": { key: "h", modifiers: cmd_or_ctrl_shift },
+  "vradio": { key: "d", modifiers: cmd_or_ctrl_shift },
+  "hradio": { key: "i", modifiers: cmd_or_ctrl_shift },
+  "vu":     { key: "u", modifiers: cmd_or_ctrl_shift },
+  "cnv": { key: "c", modifiers: cmd_or_ctrl_shift },
+  "array": { key: "a", modifiers: cmd_or_ctrl_shift },
 
   "nextwin": { key: "PageDown", modifiers: cmd_or_ctrl },
   "prevwin": { key: "PageUp", modifiers: cmd_or_ctrl },
diff --git a/pd/nw/pdgui.js b/pd/nw/pdgui.js
index a7312e10e6616844c0e040f20ae81bb6e18f20aa..37bce978af54707e4cb6090274b2fc84f5dfc479 100644
--- a/pd/nw/pdgui.js
+++ b/pd/nw/pdgui.js
@@ -3,8 +3,14 @@
 var pwd;
 var lib_dir;
 var help_path, browser_doc, browser_path, browser_init;
-var autocomplete, autocomplete_prefix, autocomplete_relevance;
+var autocomplete, autocomplete_prefix, autocomplete_relevance, autocomplete_tooltip_enabled, autocomplete_fuzzy_search;
 var pd_engine_id;
+var on_issue_tab;
+
+
+//Generate object descriptions by title for the autocompletion menu;
+//calculated dynamically during index construction
+var ac_tooltip_descriptions = new Map();
 
 exports.autocomplete_enabled = function() {
     return autocomplete;
@@ -26,15 +32,24 @@ function defunkify_windows_path(s) {
     return ret;
 }
 
-exports.set_pd_engine_id = function (id) {
-    pd_engine_id = id;
+function funkify_windows_path(s) {
+    var ret = s;
+    if (process.platform === "win32") {
+        ret = ret.replace(/\//g, "\\");
+    }
+    return ret;
 }
 
 exports.defunkify_windows_path = defunkify_windows_path;
+exports.funkify_windows_path = funkify_windows_path;
+
+exports.set_pd_engine_id = function (id) {
+    pd_engine_id = id;
+}
 
 function gui_set_browser_config(doc_flag, path_flag, init_flag,
                                 ac_flag, ac_prefix_flag, ac_relevance_flag,
-                                helppath) {
+                                ac_tooltip_flag, ac_fuzzy_search_flag, helppath) {
     // post("gui_set_browser_config: " + helppath.join(":"));
     browser_doc = doc_flag;
     browser_path = path_flag;
@@ -50,6 +65,8 @@ function gui_set_browser_config(doc_flag, path_flag, init_flag,
     autocomplete = ac_flag;
     autocomplete_prefix = ac_prefix_flag;
     autocomplete_relevance = ac_relevance_flag;
+    autocomplete_tooltip_enabled = ac_tooltip_flag;
+    autocomplete_fuzzy_search = ac_fuzzy_search_flag;
     make_completion_index();
     // AG: Start building the keyword index for dialog_search.html. We do this
     // here so that we can be sure that lib_dir and help_path are known
@@ -124,6 +141,7 @@ exports.nw_os_is_windows = nw_os_is_windows;
 
 // Keyword index (cf. dialog_search.html)
 
+var dns = require("dns");
 var fs = require("fs");
 var path = require("path");
 var dive = require("./dive.js"); // small module to recursively search dirs
@@ -359,6 +377,7 @@ function add_doc_details_to_index(filename, data) {
         "ref_related_objects": ref_rel_objs
         //"body": big_line,
     });
+    ac_tooltip_descriptions.set(title, desc);
 }
 
 // GB: This does an initial scan of help patches, recording filename, title and
@@ -426,7 +445,7 @@ function finish_index() {
                 a.join("\n"), {mode: 0o644});
         }
     } catch (err) {
-        console.log(err);
+        //console.log(err);
     }
     var t = new Date().getTime() / 1000;
     post("finished " + (have_cache?"building":"loading") + " help index (" +
@@ -542,6 +561,7 @@ function make_index() {
                 var desc = e[3] ? e[3] : null;
                 var rel_obj = e[4] ? e[4] : null;
                 var ref_rel_obj = e[5] ? e[5] : null;
+                ac_tooltip_descriptions.set(title, desc);
                 index.addDoc({
                     "id": filename,
                     "title": title,
@@ -584,13 +604,19 @@ exports.build_index = build_index;
 
 // normally, this doesn't actually rebuild the index, it just clears it, so
 // that it will be rebuilt the next time the help browser is opened
-function rebuild_index()
+function rebuild_index(clear_index = false)
 {
     index = init_elasticlunr();
     index_started = index_done = false;
+
+    if (clear_index) {
+        completion_list = [];
+        completion_index = new fuse(completion_list,autocomplete_index_options);
+    }
+
     try {
-        fs.unlink(expand_tilde(cache_name));
-        fs.unlink(expand_tilde(stamps_name));
+        fs.unlinkSync(expand_tilde(cache_name));
+        fs.unlinkSync(expand_tilde(stamps_name));
     } catch (err) {
         //console.log(err);
     }
@@ -603,13 +629,17 @@ function rebuild_index()
     }
 }
 
+exports.rebuild_index = rebuild_index;
+
 // this is called from the gui tab of the prefs dialog
-function update_browser(doc_flag, path_flag, ac_flag, ac_prefix_flag, ac_relevance_flag)
+function update_browser(doc_flag, path_flag, ac_flag, ac_prefix_flag, ac_relevance_flag, ac_tooltip_flag, ac_fuzzy_search_flag)
 {
     var changed = ac_flag == 1 && autocomplete == 0;
     autocomplete = ac_flag;
     autocomplete_prefix = ac_prefix_flag;
     autocomplete_relevance = ac_relevance_flag;
+    autocomplete_tooltip_enabled = ac_tooltip_flag;
+    autocomplete_fuzzy_search = ac_fuzzy_search_flag;
     doc_flag = doc_flag?1:0;
     path_flag = path_flag?1:0;
     if (browser_doc !== doc_flag) {
@@ -634,7 +664,9 @@ let autocomplete_index_options = {
     useExtendedSearch : true,
     includeMatches : true,
     includeScore : true,
-    keys : ["title", "args.text"]
+    isCaseSensitive : false,
+    keys : ["title", "args.text"],
+    threshold : 0.3
 };
 let args_completion_field = {keys : ["args.text"]};
 let objs_completion_field = {keys : ["title"]};
@@ -661,13 +693,24 @@ function obj_exact_match(title) {
 
 function search_obj(title) {
     if (!autocomplete) return [];
+    let exact_match_results = [];
     // GB approaches: search objects that *contains* search _word_ (1st line) or patches that *begins with* _word_ (2nd line)
     // either should skip the result 'message' and 'text' thus messages and comments are not created the same way objects are
     if (!autocomplete_prefix) {
-        return completion_index.search({$and: [{"title": "'\"" + title + "\""}, {"title": "!\"message\"" }, {"title": "!\"text\"" }]});
+        exact_match_results = completion_index.search({$and: [{"title": "'\"" + title + "\""}, {"title": "!\"message\"" }, {"title": "!\"text\"" }]});
     } else {
-        return completion_index.search({$and: [{"title": "^\"" + title + "\""}, {"title": "!\"message\"" }, {"title": "!\"text\"" }]});
+        exact_match_results = completion_index.search({$and: [{"title": "^\"" + title + "\""}, {"title": "!\"message\"" }, {"title": "!\"text\"" }]});
     }
+
+    if (exact_match_results.length > 0) {
+        return exact_match_results;
+    }
+
+    if(autocomplete_fuzzy_search){
+        return completion_index.search({$and: [{ "title": title },{ "title": "!\"message\"" },{ "title": "!\"text\"" }]});
+    }
+
+    return [];
 }
 
 function arg_exact_match(title, arg) {
@@ -677,26 +720,48 @@ function arg_exact_match(title, arg) {
 function search_arg(title, arg) {
     if (!autocomplete) return [];
     // for the arguments, we are only interested on the obj that match exactly the 'title', so we return only the args from this obj
-    let results = completion_index.search({$and: [{"title": "=\"" + title + "\""}, {"args.text": "^\"" + arg + "\""}]});
-    if (results.length > 0) {
-        let args = results[0].item.args;
+    let exact_match_results = completion_index.search({$and: [{ "title": "=\"" + title + "\"" },{ "args.text": "^\"" + arg + "\"" }]});
+    if (exact_match_results.length > 0) {
+        let args = exact_match_results[0].item.args;
         // AG: Matched args are in matches.slice(1,), extract them.
         // This code originally just returned matches itself, which has the
         // text of all matched arguments, but not the occurrence data, and we
         // need the latter to sort based on relevance.
-        results = results[0].matches.slice(1,).map(a => args[a.refIndex]);
+        return exact_match_results[0].matches.slice(1).map(a => args[a.refIndex]);
+    }
+
+    if(autocomplete_fuzzy_search){
+        let fuzzy_results = completion_index.search({$and: [{ "title": title },{ "args.text": arg }]});
+
+        if (fuzzy_results.length > 0) {
+            let args = fuzzy_results[0].item.args;
+            return fuzzy_results[0].matches.slice(1).map(a => args[a.refIndex]);
+        }
     }
-    return results;
+    
+    return [];
 }
 
 function search_args(title) {
     // like above, but look up *all* arg completions for a given object
     if (!autocomplete) return [];
     // for the arguments, we are only interested on the obj that match exactly the 'title', so we return only the args from this obj
-    let results = obj_exact_match(title);
+    let exact_match_results = obj_exact_match(title);
     // item.args is live data from the fuse, make sure to take a shallow copy
     // with slice() which can be safely sorted in-place later
-    return (results.length > 0) ? results[0].item.args.slice() : [];
+    if (exact_match_results.length > 0) {
+        let args = exact_match_results[0].item.args.slice();
+        return args;
+    }
+
+    if(autocomplete_fuzzy_search){
+        let fuzzy_results = completion_index.search({$and: [{ "title": title },{ "title": "!\"message\"" },{ "title": "!\"text\"" }]});
+        if (fuzzy_results.length > 0) {
+            return fuzzy_results[0].item.args.slice();
+        }
+    }
+
+    return [];
 }
 
 function index_obj_completion(obj_or_msg, obj_or_msg_text) {
@@ -758,23 +823,55 @@ function update_autocomplete_selected(ac_dropdown, sel, new_sel) {
 function update_autocomplete_dd_arrowdown(ac_dropdown) {
     if (ac_dropdown !== null) {
         let sel = ac_dropdown.getAttribute("selected_item");
-        update_autocomplete_selected(ac_dropdown, sel, parseInt(sel) + 1);
+        let new_sel = parseInt(sel) + 1;
+
+        if (new_sel < ac_dropdown.children.length) {
+            update_autocomplete_selected(ac_dropdown, sel, new_sel);
+            let selected_element = ac_dropdown.children.item(new_sel);
+            let dropdown_height = ac_dropdown.offsetHeight;
+            let scroll_bottom = ac_dropdown.scrollTop + dropdown_height;
+            let element_bottom = selected_element.offsetTop + selected_element.offsetHeight;
+
+            if (element_bottom > scroll_bottom) {
+                ac_dropdown.scrollTop = (element_bottom - dropdown_height) + 4;
+            }
+        } else {
+            // Reached the end of the dropdown, cycle back to the beginning
+            update_autocomplete_selected(ac_dropdown, sel, 0);
+            ac_dropdown.scrollTop = 0;
+        }
     }
 }
 
 function update_autocomplete_dd_arrowup(ac_dropdown) {
     if (ac_dropdown !== null) {
         let sel = ac_dropdown.getAttribute("selected_item");
-        update_autocomplete_selected(ac_dropdown, sel, parseInt(sel) - 1);
+        let new_sel = parseInt(sel) - 1;
+
+        if (new_sel >= 0) {
+            update_autocomplete_selected(ac_dropdown, sel, new_sel);
+            let selected_element = ac_dropdown.children.item(new_sel);
+
+            if (selected_element.offsetTop < ac_dropdown.scrollTop) {
+                ac_dropdown.scrollTop = selected_element.offsetTop;
+            }
+        } else {
+        // Reached the beginning of the dropdown, cycle back to the end
+            let last_index = ac_dropdown.children.length - 1;
+            update_autocomplete_selected(ac_dropdown, sel, last_index);
+            let last_element = ac_dropdown.children.item(last_index);
+            ac_dropdown.scrollTop = last_element.offsetTop+4;
+        }
     }
 }
 
-function select_result_autocomplete_dd(textbox, ac_dropdown, last, offs, res, dir) {
+function select_result_autocomplete_dd(doc, textbox, ac_dropdown, last, offs, res, dir) {
     if (ac_dropdown !== null) {
+        delete_tooltip(doc);
         let sel = ac_dropdown.getAttribute("selected_item");
         if (sel > -1) {
             textbox.innerText = ac_dropdown.children.item(sel).innerText;
-            delete_autocomplete_dd(ac_dropdown);
+            delete_autocomplete_dd(doc, ac_dropdown);
             return [sel+offs, offs];
         } else {
 	    // We only come here if the user presses 'tab' and there is no
@@ -809,8 +906,38 @@ function select_result_autocomplete_dd(textbox, ac_dropdown, last, offs, res, di
     }
 }
 
+function create_tooltip(doc) {
+    let tooltip = doc.createElement("div");
+    tooltip.className = "tooltip";
+    tooltip.style.position = "absolute";
+    tooltip.style.visibility = "hidden";
+    tooltip.style.opacity = "0";
+    tooltip.style.zIndex = "1000";
+    tooltip.style.backgroundColor = "black";
+    tooltip.style.borderRadius="5px"
+    tooltip.style.color = "white";
+    tooltip.style.padding = "5px";
+    tooltip.style.fontSize = "12px";
+    tooltip.style.border = "2px solid black";
+    tooltip.style.textAlign = "center";
+    tooltip.style.width = "auto"; 
+    tooltip.style.maxWidth = "220px"; 
+    tooltip.style.wordWrap = "break-word"; 
+    doc.body.appendChild(tooltip);
+    return tooltip;
+}
+
+function delete_tooltip(doc) {
+    let tooltip = doc.querySelector(".tooltip");
+    if (tooltip) {
+        doc.body.removeChild(tooltip);
+    }
+}
+
+
 // GB: update autocomplete dropdown with new results
 function repopulate_autocomplete_dd(doc, ac_dropdown, obj_class, text) {
+    delete_tooltip(doc);
     ac_dropdown().setAttribute("searched_text", text);
     let title, arg, have_arg;
     if (obj_class === "obj") {
@@ -905,14 +1032,22 @@ function repopulate_autocomplete_dd(doc, ac_dropdown, obj_class, text) {
 
     // record the complete results, we need them for tab completion
     let all_results = results;
-    // GB TODO: ideally we should be able to show all the results in a limited window with a scroll bar
-    let n = 8; // Maximum number of suggestions
-    if (results.length > n) results = results.slice(0,n);
+
+    let n = 12; // Maximum number of suggestions
+    if (results.length < n){
+        ac_dropdown().style.overflowY = 'hidden'; // Remove scrollbar
+    } else{
+        ac_dropdown().style.overflowY = 'scroll'; // Show scrollbar
+    }
 
     ac_dropdown().innerHTML = ""; // clear all old results
     if (results.length > 0) {
         // for each result, make a paragraph child of autocomplete_dropdown
         let h = ac_dropdown().getAttribute("font_height");
+        let tooltip;
+        if (autocomplete_tooltip_enabled) {
+            tooltip = create_tooltip(doc);
+        }
         results.forEach(function (f,i,a) {
             let y = h*(i+1);
             let r = doc.createElement("p");
@@ -921,12 +1056,45 @@ function repopulate_autocomplete_dd(doc, ac_dropdown, obj_class, text) {
             r.setAttribute("y", y);
             r.setAttribute("class", "border");
             r.setAttribute("idx", i);
-            r.textContent = f;
+
+            let parts = f.split(text);
+            let content = "";
+
+            for (let j = 0; j < parts.length; j++) {
+                if (j > 0) {
+                    content += `<span class="highlight">${text}</span>`;
+                }
+                content += parts[j];
+            }
+
+            r.innerHTML = content;
+
+            if (autocomplete_tooltip_enabled) {
+                r.addEventListener("mouseover", function (e) {
+                    let description = ac_tooltip_descriptions.get(f);
+                    if (description) {
+                        tooltip.textContent = description;
+                        tooltip.style.top = `${e.clientY + 10}px`;
+                        tooltip.style.left = `${e.clientX}px`;
+                        tooltip.style.visibility = "visible";
+                        tooltip.style.opacity = "1";
+                    } else {
+                        tooltip.style.visibility = "hidden";
+                        tooltip.style.opacity = "0";
+                    }
+                });
+
+                r.addEventListener("mouseout", function () {
+                    tooltip.style.visibility = "hidden";
+                    tooltip.style.opacity = "0";
+                });
+            }
+            
             ac_dropdown().appendChild(r);
         })
         ac_dropdown().setAttribute("selected_item", "-1");
     } else { // if there is no suggestion candidate, the autocompletion dropdown should disappear
-        delete_autocomplete_dd (ac_dropdown());
+        delete_autocomplete_dd (doc, ac_dropdown());
     }
     return all_results;
 }
@@ -966,8 +1134,9 @@ function create_autocomplete_dd (doc, ac_dropdown, new_obj_element) {
     }
 }
 
-function delete_autocomplete_dd (ac_dropdown) {
+function delete_autocomplete_dd (doc, ac_dropdown) {
     if (ac_dropdown !== null) {
+        delete_tooltip(doc)
         ac_dropdown.parentNode.removeChild(ac_dropdown);
     }
 }
@@ -1262,6 +1431,21 @@ function cmd_or_ctrl_key(evt) {
 
 exports.cmd_or_ctrl_key = cmd_or_ctrl_key;
 
+function nw_window_zoom(name, delta) {
+    var w = name=="pd"?pd_window.nw.Window.get():patchwin[name];
+    var z = w.zoomLevel;
+    z += delta;
+    if (z < 8 && z > -8) {
+        w.zoomLevel = z;
+        if (name != "pd") {
+            pdsend(name, "zoom", z);
+            gui_canvas_get_scroll(name);
+        }
+    }
+}
+
+exports.nw_window_zoom = nw_window_zoom;
+
 (function () {
 
     var last_keydown = "";
@@ -1271,6 +1455,7 @@ exports.cmd_or_ctrl_key = cmd_or_ctrl_key;
         var key_code = evt.keyCode,
             hack = null, // hack for non-printable ascii codes
             cmd_or_ctrl
+        //post("keydown: "+evt.key+" ("+evt.keyCode+")")
         switch(key_code) {
             case 8: // backspace
             case 9:
@@ -1368,71 +1553,37 @@ exports.cmd_or_ctrl_key = cmd_or_ctrl_key;
             case 17: hack = "Control"; break;
             case 18: hack = "Alt"; break;
 
-            // keycode 55 = 7 key (shifted = '/' on German keyboards)
-            case 55:
-                if (cmd_or_ctrl_key(evt)) {
-                    evt.preventDefault();
-                    pdsend("pd dsp 1");
-                }
-                break;
-
-            /* ag: These *should* be handled in the nwjs menu (see put menu
-               in pd_canvas.js), but aren't (at least not from nw.js 0.42.4
-               onward). XXXFIXME: Maybe this should go into the keydown
-               function in pd_canvas.js instead? Also note that we prevent
-               the default handling here, so that the menu action doesn't get
-               triggered, in case the upstream bug gets fixed eventually. */
-            case 49:
-                if (cmd_or_ctrl_key(evt)) { // ctrl-1
-                    pdsend(cid, "dirty 1");
-                    pdsend(cid, "obj 0");
-                    evt.preventDefault();
-                }
-                break;
-            case 50:
-                if (cmd_or_ctrl_key(evt)) { // ctrl-2
-                    pdsend(cid, "dirty 1");
-                    pdsend(cid, "msg 0");
-                    evt.preventDefault();
-                }
-                break;
-            case 51:
-                if (cmd_or_ctrl_key(evt)) { // ctrl-3
-                    pdsend(cid, "dirty 1");
-                    pdsend(cid, "floatatom 0");
-                    evt.preventDefault();
-                }
-                break;
-            case 52:
-                if (cmd_or_ctrl_key(evt)) { // ctrl-4
-                    pdsend(cid, "dirty 1");
-                    pdsend(cid, "symbolatom 0");
+            /* Work-arounds for French azerty and German qwertz keyboards. The
+               problematic bindings are Ctrl - on the French and Shift+Ctrl /
+               on the German keyboard, as well as Cmd + (keycode 187) on the
+               German MacBook keyboard, which aren't translated correctly by
+               nw.js, and thus won't work as-is. Instead of fiddling around
+               with pd_shortcuts.js, we just handle these right here.
+               NOTE: There's no way to detect the actual keyboard layout in
+               nw.js, so these are enabled all the time. This means that the
+               unshifted Ctrl+6 and the shifted Ctrl+7 keys aren't available
+               as menu shortcuts. If this bothers you then you can just
+               comment out the code below. */
+
+            // keycode 187 = + key on the German Mac keyboard
+            case 187:
+                if (cmd_or_ctrl_key(evt) && !evt.shiftKey) {
                     evt.preventDefault();
+                    nw_window_zoom(cid, +1);
                 }
                 break;
-            case 53:
-                if (cmd_or_ctrl_key(evt)) { // ctrl-5
-                    pdsend(cid, "dirty 1");
-                    pdsend(cid, "text 0");
+            // keycode 54 = 6 key ('-' a.k.a. zoomin on azerty keyboard)
+            case 54:
+                if (cmd_or_ctrl_key(evt) && !evt.shiftKey) {
                     evt.preventDefault();
+                    nw_window_zoom(cid, -1);
                 }
                 break;
-            case 77:
-                // ctrl+shift-m: weirdly, ctrl+shift doesn't appear to work,
-                // although the unshifted combo does??
+            // keycode 55 = shifted 7 key ('/' a.k.a. dsp on on qwertz keyboard)
+            case 55:
                 if (cmd_or_ctrl_key(evt) && evt.shiftKey) {
-                    pdsend(cid, "dirty 1");
-                    pdsend(cid, "dropdown 0");
-                    evt.preventDefault();
-                }
-                break;
-            case 57:
-                // ctrl-9: funnily enough, the Alt and Shift key combinations
-                // *do* get triggered, so we don't handle these here
-                if (cmd_or_ctrl_key(evt) && !evt.shiftKey && !evt.altKey) {
-                    gui_canvas_optimal_zoom(cid, 1, 1);
-                    gui_canvas_get_scroll(cid);
                     evt.preventDefault();
+                    pdsend("pd dsp 1");
                 }
                 break;
 
@@ -1595,7 +1746,11 @@ var duplicate = 0;
 
 function do_post(object_id, selector, string, type, loglevel) {
     var my_p, my_a, span, text, sel_span, printout, dup_span;
-    current_string = current_string + (selector ? selector : "") + string;
+    // ag 20240909: We get escapes for some characters (\ { } ;) in the string
+    // argument directly from s_print.c. Probably a remnant from the Tcl/Tk
+    // days, but I won't touch that C code, so we must unescape those here.
+    string = string.replace(/\\([\\{};])/g, "$1");
+    current_string = current_string + string;
     my_p = pd_window.document.getElementById("p1");
     // We can get posts from Pd that are build incrementally, with the final
     // message having a "\n" at the end. So we test for that.
@@ -1776,7 +1931,7 @@ function canvas_check_geometry(cid) {
     //var cnv_width = patchwin[cid].window.innerWidth,
     //    cnv_height = patchwin[cid].window.innerHeight;
     var cnv_width = win_w,
-        cnv_height = win_h - nw_menu_height;
+        cnv_height = win_h - nw_menu_offset;
     //post("canvas_check_geometry w=" + win_w + " h=" + win_h +
     //    " x=" + win_x + " y=" + win_y + " cnv_w=" + cnv_width + " cnv_h=" + cnv_height);
 
@@ -1837,17 +1992,16 @@ function gui_canvas_saveas(name, initfile, initdir, close_flag) {
     // latest nw.js on Linux at all (dialog comes up without a path under
     // which to save, "Save" doesn't work until you explicitly select one).
 
-    // Setting nwsaveas to initfile and nwworkingdir to initdir (as you'd
-    // expect) works for me on Linux, but it seems that specifying an absolute
-    // pathname for nwsaveas is necessary on Windows, and this also works on
-    // Linux. Cf. https://github.com/nwjs/nw.js/issues/3372 (which is still
-    // open at the time of this writing). -ag
+    // Older nw.js versions on some platforms required an absolute pathname to
+    // be specified here, but it appears that this is no longer needed, at
+    // least as of nw.js 0.42. We still keep this around for the older legacy
+    // nw.js versions being used on some platformas like the RPi. -ag
     input = build_file_dialog_string({
         style: "display: none;",
         type: "file",
         id: "saveDialog",
-        // using an absolute path here, see comment above
-        nwsaveas: check_nw_version("0.46") ? initfile : path.join(initdir, initfile),
+        // using an absolute path on older nw.js here, see comment above
+        nwsaveas: check_nw_version("0.42") ? initfile : path.join(initdir, initfile),
         nwworkingdir: initdir,
         accept: ".pd"
     });
@@ -1857,7 +2011,7 @@ function gui_canvas_saveas(name, initfile, initdir, close_flag) {
         saveas_callback(name, this.value, close_flag);
         // reset value so that we can open the same file twice
         this.value = null;
-        console.log("tried to save something");
+        //console.log("tried to save something");
     }
     chooser.click();
 }
@@ -2405,20 +2559,21 @@ function open_textfile(target) {
 // Think about renaming this and pd_doc_open...
 
 // Open a file-- html, text, or Pd.
-function doc_open (dir, basename) {
+function doc_open (dir, basename, f) {
     // normalize to get rid of extra slashes, ".." and "."
     var norm_path = path.normalize(dir);
     if (basename.slice(-4) === ".txt"
         || basename.slice(-2) === ".c") {
         open_textfile(path.join(norm_path, basename));
-    } else if (basename.slice(-5) === ".html"
-               || basename.slice(-4) === ".htm"
-               || basename.slice(-4) === ".pdf") {
-        open_html(path.join(norm_path, basename));
-
-    } else {
+    } else if (basename.slice(-3) === ".pd") {
+        // ag: We only try to open .pd files as patches here. Previously, we'd
+        // try to open pretty much anything, which isn't a good idea. Guess
+        // what happens if you try to open an mp3 file as a patch?
         pdsend("pd open", enquote(defunkify_windows_path(basename)),
-            enquote(defunkify_windows_path(norm_path)));
+               enquote(defunkify_windows_path(norm_path)), f?f:0);
+    } else {
+        // ag: Fall back to the desktop's default action for anything else.
+        open_html(path.join(norm_path, basename));
     }
 }
 
@@ -2428,8 +2583,8 @@ function doc_open (dir, basename) {
 exports.doc_open = doc_open;
 
 // Open a file relative to the main directory where "doc/" and "extra/" live
-function pd_doc_open(dir, basename) {
-    doc_open(path.join(lib_dir, dir), basename);
+function pd_doc_open(dir, basename, f) {
+    doc_open(path.join(lib_dir, dir), basename, f);
 }
 
 exports.pd_doc_open = pd_doc_open;
@@ -2790,7 +2945,7 @@ function gui_canvas_new(cid, width, height, geometry, grid, grid_size_value,
    to do its "vis" function. The result will be a flood of messages
    back from Pd to the GUI to draw these objects */
 function canvas_map(name) {
-    console.log("canvas mapping " + name + "...");
+    //console.log("canvas mapping " + name + "...");
     pdsend(name + " map 1");
 }
 
@@ -2890,6 +3045,14 @@ function connect_as_client_to_secondary_instance(host, port, pd_engine_id) {
             next_command: ""
     };
     client.setNoDelay(true);
+    // We need to make sure that localhost is resolved to IPv4 here -- the
+    // default in later nw.js versions is to prefer IPv6 which causes issues
+    // on Linux and Windows. Protect with try ... catch to prevent exceptions
+    // on earlier nw.js versions which don't have this function.
+    try {
+	dns.setDefaultResultOrder("ipv4first");
+    } catch (err) {
+    }
     client.connect(+port, host, function() {
         console.log("CONNECTED TO: " + host + ":" + port);
         secondary_pd_engines[pd_engine_id] = {
@@ -2897,6 +3060,11 @@ function connect_as_client_to_secondary_instance(host, port, pd_engine_id) {
         }
         client.write("pd forward_files_from_secondary_instance;");
     });
+    // Add some rudimentary error handling. At least we ought to tell the user
+    // what went wrong and where he can submit a bug report.
+    client.on("error", function (event) {
+	post("CONNECTION ERROR: "+event+"\nThis shouldn't happen. Please submit a bug report with the above error message at the Purr Data website.");
+    });
     client.on("data", function(data) {
         // Terrible thing:
         // We're parsing the data as it comes in-- possibly
@@ -3473,10 +3641,10 @@ function gui_message_redraw_border(cid, tag, width, height) {
     });
 }
 
-function atom_border_points(width, height, is_dropdown) {
-    // For atom, angle the top-right corner.
-    // For dropdown, angle both top-right and bottom-right corners
-    var bottom_right_x = is_dropdown ? width - 4 : width;
+function atom_border_points(width, height, type) {
+    // For atom other than listbox, angle the top-right corner.
+    // For dropdown and listbox, angle both top-right and bottom-right corners
+    var bottom_right_x = type != 0 ? width - 4 : width;
     return  [0, 0,
             width - 4, 0,
             width, 4,
@@ -3508,7 +3676,7 @@ function gui_atom_draw_border(cid, tag, type, width, height) {
         });
            
         frag.appendChild(polygon);
-        if (type !== 0) { // dropdown
+        if (type > 0) { // dropdown
             // 1 = output index
             // 2 = output value
             // Let's make the two visually distinct so that the user can still
@@ -5744,6 +5912,227 @@ function gui_pianoroll_erase_innards(cid, tag) {
     });
 }
 
+// pd-lua gfx helpers (ag@gmail.com)
+
+// create the graphics container (a gobj)
+function gui_luagfx_new(cid, tag, xpos, ypos, is_toplevel) {
+    gui_gobj_new(cid, tag, "obj", xpos, ypos, is_toplevel, 0);
+}
+
+// clear the contents of the graphics container
+function gui_luagfx_clear(cid, tag) {
+    // get rid of all contents
+    gui(cid).get_gobj(tag, function(g) {
+        g.innerHTML = "";
+    });
+}
+
+// clear the contents, old version (we keep this around for backward
+// compatibility with pd-lua 0.12.1)
+function gui_luagfx_clear_contents(cid, tag) {
+    gui(cid).get_gobj(tag, function(e) {
+        e.innerHTML = "";
+    });
+}
+
+// this erases the gobj (completely removes it)
+function gui_luagfx_erase(cid, tag) {
+    gui_gobj_erase(cid, tag);
+}
+
+// a bunch of drawing operations as required by the pd-lua graphics interface
+function gui_luagfx_fill_all(cid, tag, gfxtag, color, x1, y1, x2, y2) {
+    gui(cid).get_gobj(tag)
+    .append(function(frag) {
+        // border rectangle in the usual style with the given bg color
+        var r = create_item(cid, "rect", {
+            x: x1,
+            y: y1,
+            width: x2 - x1,
+            height: y2 - y1,
+            class: "border",
+            style: "fill: "+color+";",
+            id: gfxtag
+        });
+        frag.appendChild(r);
+        return frag;
+    });
+}
+
+function gui_luagfx_fill_rect(cid, tag, gfxtag, color, width, x1, y1, x2, y2) {
+    gui(cid).get_gobj(tag)
+    .append(function(frag) {
+        var gx = create_item(cid, "rect", {
+            x: x1,
+            y: y1,
+            width: x2 - x1,
+            height: y2 - y1,
+            fill: color,
+            "stroke-width": width,
+            id: gfxtag
+        });
+        frag.appendChild(gx);
+        return frag;
+    });
+}
+
+function gui_luagfx_stroke_rect(cid, tag, gfxtag, color, width, x1, y1, x2, y2) {
+    gui(cid).get_gobj(tag)
+    .append(function(frag) {
+        var gx = create_item(cid, "rect", {
+            x: x1,
+            y: y1,
+            width: x2 - x1,
+            height: y2 - y1,
+            fill: "none",
+            stroke: color,
+            "stroke-width": width,
+            id: gfxtag
+        });
+        frag.appendChild(gx);
+        return frag;
+    });
+}
+
+function gui_luagfx_fill_rounded_rect(cid, tag, gfxtag, color, width, x1, y1, x2, y2, rx, ry) {
+    gui(cid).get_gobj(tag)
+    .append(function(frag) {
+        var gx = create_item(cid, "rect", {
+            x: x1,
+            y: y1,
+            width: x2 - x1,
+            height: y2 - y1,
+            rx: rx,
+            ry: ry,
+            fill: color,
+            "stroke-width": width,
+            id: gfxtag
+        });
+        frag.appendChild(gx);
+        return frag;
+    });
+}
+
+function gui_luagfx_stroke_rounded_rect(cid, tag, gfxtag, color, width, x1, y1, x2, y2, rx, ry) {
+    gui(cid).get_gobj(tag)
+    .append(function(frag) {
+        var gx = create_item(cid, "rect", {
+            x: x1,
+            y: y1,
+            width: x2 - x1,
+            height: y2 - y1,
+            rx: rx,
+            ry: ry,
+            fill: "none",
+            stroke: color,
+            "stroke-width": width,
+            id: gfxtag
+        });
+        frag.appendChild(gx);
+        return frag;
+    });
+}
+
+function gui_luagfx_fill_ellipse(cid, tag, gfxtag, color, width, x1, y1, x2, y2) {
+    gui(cid).get_gobj(tag)
+    .append(function(frag) {
+        var gx = create_item(cid, "ellipse", {
+            cx: (x2 - x1) * 0.5 + x1,
+            cy: (y2 - y1) * 0.5 + y1,
+            rx: (x2 - x1) * 0.5,
+            ry: (y2 - y1) * 0.5,
+            fill: color,
+            "stroke-width": width,
+            id: gfxtag
+        });
+        frag.appendChild(gx);
+        return frag;
+    });
+}
+
+function gui_luagfx_stroke_ellipse(cid, tag, gfxtag, color, width, x1, y1, x2, y2) {
+    gui(cid).get_gobj(tag)
+    .append(function(frag) {
+        var gx = create_item(cid, "ellipse", {
+            cx: (x2 - x1) * 0.5 + x1,
+            cy: (y2 - y1) * 0.5 + y1,
+            rx: (x2 - x1) * 0.5,
+            ry: (y2 - y1) * 0.5,
+            fill: "none",
+            stroke: color,
+            "stroke-width": width,
+            id: gfxtag
+        });
+        frag.appendChild(gx);
+        return frag;
+    });
+}
+
+function gui_luagfx_draw_line(cid, tag, gfxtag, color, width, x1, y1, x2, y2) {
+    gui(cid).get_gobj(tag)
+    .append(function(frag) {
+        var gx = create_item(cid, "line", {
+            x1: x1,
+            y1: y1,
+            x2: x2,
+            y2: y2,
+            stroke: color,
+            "stroke-width": width,
+            id: gfxtag
+        });
+        frag.appendChild(gx);
+        return frag;
+    });
+}
+
+function gui_luagfx_draw_text(cid, tag, gfxtag, color, width, font_height, x, y, text) {
+    gui(cid).get_gobj(tag)
+    .append(function(frag) {
+        // Check gui_text_new for some black magic being used here.
+        var gx = create_item(cid, "text", {
+            transform: "translate(" + x + ")",
+            y: y + font_height,
+            width: width,
+            "font-size": font_height + "px",
+            fill: color,
+            id: gfxtag
+        });
+        // fill svg_text with tspan content by splitting on "\n"
+        text_to_tspans(cid, gx, text);
+        frag.appendChild(gx);
+        return frag;
+    });
+}
+
+function gui_luagfx_fill_path(cid, tag, gfxtag, color, width, path) {
+    gui(cid).get_gobj(tag)
+    .append(function(frag) {
+        var gx = create_item(cid, "path", {
+            d: path.join(" "),
+            fill: color,
+            "stroke-width": width,
+            id: gfxtag
+        });
+        frag.appendChild(gx);
+        return frag;
+    });
+}
+
+function gui_luagfx_stroke_path(cid, tag, gfxtag, color, width, path) {
+    gui(cid).get_gobj(tag)
+    .append(function(frag) {
+        var gx = create_item(cid, "path", {
+            d: path.join(" "),
+            fill: "none",
+            stroke: color,
+            "stroke-width": width,
+            id: gfxtag
+        });
+        frag.appendChild(gx);
+        return frag;
+    });
+}
+
 // mknob from moonlib
 function gui_mknob_new(cid, tag, x, y, is_toplevel, show_in, show_out,
     is_footils_knob) {
@@ -6485,35 +6874,68 @@ function gui_raise_window(cid) {
     });
 }
 
-// Unfortunately DOM window.focus doesn't actually focus the window, so we
-// have to use the chrome API
 function gui_raise_pd_window() {
-    chrome.windows.getAll(function (w_array) {
-        chrome.windows.update(w_array[0].id, { focused: true });
-    });
+    pd_window.window.focus();
 }
 
-// Using the chrome app API, because nw.js doesn't seem
-// to let me get a list of the Windows
+// ico@vt.edu 2022-11-09: reimplemented this function to make it
+// work with newer nw.js (should also work with older ones)
+
+// ag: reworked again to deal with all pesky corner cases were some
+// entries in the patchwin array may not actually point to existing
+// windows anymore
 function walk_window_list(cid, offset) {
-    chrome.windows.getAll(function (w_array) {
-        chrome.windows.getLastFocused(function (w) {
-            var i, next, match = -1;
-            for (i = 0; i < w_array.length; i++) {
-                if (w_array[i].id === w.id) {
-                    match = i;
-                    break;
-                }
+    var keys = Object.keys(patchwin);
+    var len = keys.length;
+
+    function find_window(cid) {
+        for (var i = 0; i < len; i++) {
+            if (keys[i] === cid) {
+                return i;
             }
-            if (match !== -1) {
-                next = (((match + offset) % w_array.length) // modulo...
-                        + w_array.length) % w_array.length; // handle negatives
-                chrome.windows.update(w_array[next].id, { focused: true });
-            } else {
-                post("error: cannot find last focused window.");
+        }
+        return -1;
+    }
+
+    function next(i) {
+        // cycle through all indices
+        return ((i+offset) % len + len) % len;
+    }
+
+    function find_next_window(i) {
+        var found = false;
+        var count = 0;
+        while (!found && count < len) {
+            // check that the window actually exists
+            gui(keys[i]).get_nw_window(function(nw_win) {
+                found = true;
+            });
+            if (found) {
+                return i;
             }
-        });
-    })
+            // if it doesn't, check the next one
+            i = next(i);
+            count++;
+        }
+        // if we come here, we cycled through all the entries and none
+        // of the windows still existed, bail out with failure
+        return -1;
+    }
+
+    var match = find_window(cid);
+    if (match !== -1) {
+        var next = find_next_window(next(match));
+        //post("match: "+match+" next: "+next+" cid: "+keys[next]);
+        gui_raise_window(keys[next]);
+    } else if (cid === "pd_window" && Object.keys(patchwin).length > 0) {
+        // go to first or last window if invoked from the main window
+        var match = offset === 1 ? 0 : len-1;
+        next = find_next_window(match);
+        //post("match: : pd_window next: "+next+" cid: "+keys[next]);
+        gui_raise_window(keys[next]);
+    } else {
+        post("error: cannot find last focused window.");
+    }
 }
 
 function raise_next(cid) {
@@ -6551,23 +6973,31 @@ function file_dialog(cid, type, target, start_path) {
         pd_window;
     input_span = win.window.document.querySelector("#" + query_string);
     // We have to use an absolute path here because of a bug in nw.js 0.14.7
+    // ag 20240912: When figuring out a default location, get_pd_opendir()
+    // seems to be a better choice than just pwd. It also matches vanilla's
+    // behavior AFAICT.
     if (!path.isAbsolute(start_path)) {
-        start_path = path.join(pwd, start_path);
+        start_path = path.join(get_pd_opendir(), start_path);
+    }
+    // ag 20240912: Make sure that what we have is actually a directory,
+    // otherwise it's better to fall back to a known location.
+    try {
+        var stat = fs.lstatSync(start_path);
+        if (!stat.isDirectory()) start_path = get_pd_opendir();
+    } catch (e) {
+        start_path = get_pd_opendir();
     }
     // We also have to inject html into the dom because of a bug in nw.js
     // 0.14.7. For some reason we can't just change the value of nwworkingdir--
     // it just doesn't work. So this requires us to have the parent <span>
     // around the <input>. Then when we change the innerHTML of the span the
     // new value for nwworkingdir magically works.
-    if(nw_os_is_windows) {
-        start_path = start_path.replace(/\//g, '\\');
-    }
     dialog_options = {
         style: "display: none;",
         type: "file",
         id: type === "open" ? "openpanel_dialog" : "savepanel_dialog",
         // using an absolute path here, see comment above
-        nwworkingdir: start_path
+        nwworkingdir: funkify_windows_path(start_path)
     };
     if (type !== "open") {
         dialog_options.nwsaveas = "";
@@ -6582,7 +7012,7 @@ function file_dialog(cid, type, target, start_path) {
         // reset value so that we can open the same file twice
         file_dialog_callback(this.value);
         this.value = null;
-        console.log("openpanel/savepanel called");
+        //console.log("openpanel/savepanel called");
     };
     win.window.setTimeout(function() {
         input_elem.click(); },
@@ -6800,11 +7230,13 @@ function gui_canvas_dialog(did, attr_arrays) {
     // Convert array of arrays to an array of objects
     for (i = 0; i < attr_arrays.length; i++) {
         attr_arrays[i] = attr_array_to_object(attr_arrays[i]);
+        /*
         for (prop in attr_arrays[i]) {
             if (attr_arrays[i].hasOwnProperty(prop)) {
                 console.log("array: prop is " + prop);
             }
         }
+        */
     }
     var has_array = (attr_arrays.length > 1 ? 1 : 0);
     /*
@@ -6914,7 +7346,7 @@ function gui_pd_dsp(state) {
 
 function open_prefs() {
     if (!dialogwin["prefs"]) {
-        create_window("prefs", "prefs", 486, 532, 0, 0, null);
+        create_window("prefs", "prefs", 486, 548+26*nw_os_is_osx, 0, 0, null);
     } else {
         dialog_raise("prefs");
     }
@@ -7029,12 +7461,12 @@ function gui_midi_properties(gfxstub, sys_indevs, sys_outdevs,
 
 function gui_gui_properties(dummy, name, show_grid, grid_size, save_zoom,
                             autocomplete, autocomplete_prefix, autocomplete_relevance,
-                            browser_doc, browser_path, browser_init,
+                            autocomplete_tooltip_enabled, autocomplete_fuzzy_search, browser_doc, browser_path, browser_init,
                             autopatch_yoffset) {
     if (dialogwin["prefs"] !== null) {
         dialogwin["prefs"].window.gui_prefs_callback(name, show_grid, grid_size,
             save_zoom, autocomplete, autocomplete_prefix, autocomplete_relevance,
-            browser_doc, browser_path, browser_init, autopatch_yoffset);
+            autocomplete_tooltip_enabled, autocomplete_fuzzy_search, browser_doc, browser_path, browser_init, autopatch_yoffset);
     }
 }
 
@@ -7816,11 +8248,30 @@ function gui_find_lowest_and_arrange(cid, reference_element_tag, objtag) {
     });
 }
 
+
+
+function set_on_issue_tab(val) {
+    on_issue_tab = val;
+}
+
+function submit_issue(issue_title, issue_description, steps_to_reproduce, environment_details) {
+    var body = `%23%23 Description:%0A${issue_description}%0A%0A` +
+               `%23%23 Steps to Reproduce:%0A${steps_to_reproduce}%0A%0A` +
+               `%23%23 Environment Details:%0A${environment_details}`;
+
+    var url = `https://github.com/agraef/purr-data/issues/new?title=${issue_title}&body=${body}`;
+
+    nw.Shell.openExternal(url);
+} 
+
+exports.set_on_issue_tab = set_on_issue_tab;
+exports.submit_issue = submit_issue;
+
 // Bindings for dialog menu of iemgui, canvas, etc.
 exports.dialog_bindings = function(did) {
     var dwin = dialogwin[did].window;
     dwin.document.onkeydown = function(evt) {
-        if (evt.keyCode === 13) { // enter
+        if (evt.keyCode === 13  && !on_issue_tab) { // enter
             dwin.ok();
         } else if (evt.keyCode === 27) { // escape
             dwin.cancel();
diff --git a/pd/nw/pdlang.js b/pd/nw/pdlang.js
index 91cea98b3e5017eeab3896281c58e7503f7432f6..4ecf75691dbc0411355d4cf0c1a5fdc7bd545c24 100644
--- a/pd/nw/pdlang.js
+++ b/pd/nw/pdlang.js
@@ -2,9 +2,13 @@
 
 var lang;
 
+// In newer nw.js versions navigator.language is something like "de-DE" rather
+// than just "de".
+let lang_dir = navigator.language.split("-")[0];
+
 try {
     // try the locale given by navigator.language
-    lang = require("./locales/" + navigator.language + "/translation.json");
+    lang = require("./locales/" + lang_dir + "/translation.json");
 } catch (e) {
     // if that fails then fall back to the default locale "en"
     lang = require("./locales/en/translation.json");
diff --git a/pd/portmidi/pm_mac/pmmacosxcm.c b/pd/portmidi/pm_mac/pmmacosxcm.c
index 78513573d46831beccd47c7447894a166c563232..46fc4226db0a962145059c1363a923a2eb1f3d3c 100755
--- a/pd/portmidi/pm_mac/pmmacosxcm.c
+++ b/pd/portmidi/pm_mac/pmmacosxcm.c
@@ -915,18 +915,39 @@ pm_fns_node pm_macosx_out_dictionary = {
 };
 
 
+/* We do nothing with callbacks, but generating the callbacks also
+ * updates CoreMIDI state. Callback may not be essential, but calling
+ * the CFRunLoopRunInMode is necessary.
+ */
+void cm_notify(const MIDINotification *msg, void *refCon)
+{
+    /*  for debugging, trace change notifications:
+    const char *descr[] = {
+        "undefined (0)",
+        "kMIDIMsgSetupChanged",
+        "kMIDIMsgObjectAdded",
+        "kMIDIMsgObjectRemoved",
+        "kMIDIMsgPropertyChanged",
+        "kMIDIMsgThruConnectionsChanged",
+        "kMIDIMsgSerialPortOwnerChanged",
+        "kMIDIMsgIOError"};
+
+    printf("MIDI Notify, messageID %d (%s)\n", (int) msg->messageID,
+           descr[(int) msg->messageID]);
+    */
+    return;
+}
+
+
 PmError pm_macosxcm_init(void)
 {
     ItemCount numInputs, numOutputs, numDevices;
     MIDIEndpointRef endpoint;
-    int i;
-    OSStatus macHostError;
+    OSStatus macHostError = noErr;
     char *error_text;
 
     /* Determine the number of MIDI devices on the system */
     numDevices = MIDIGetNumberOfDevices();
-    numInputs = MIDIGetNumberOfSources();
-    numOutputs = MIDIGetNumberOfDestinations();
 
     /* Return prematurely if no devices exist on the system
        Note that this is not an error. There may be no devices.
@@ -939,11 +960,22 @@ PmError pm_macosxcm_init(void)
 
 
     /* Initialize the client handle */
-    macHostError = MIDIClientCreate(CFSTR("PortMidi"), NULL, NULL, &client);
+    if (client == NULL_REF) {
+        macHostError = MIDIClientCreate(CFSTR("PortMidi"), &cm_notify, NULL,
+                                        &client);
+    } else {
+        for (int i = 0; i < 100; i++) {
+            // look for any changes before scanning for devices
+            CFRunLoopRunInMode(kCFRunLoopDefaultMode, 0, true);
+            if (i % 5 == 0) Pt_Sleep(1);  /* insert 20 delays */
+        }
+    }
     if (macHostError != noErr) {
         error_text = "MIDIClientCreate() in pm_macosxcm_init()";
         goto error_return;
     }
+    numInputs = MIDIGetNumberOfSources();
+    numOutputs = MIDIGetNumberOfDestinations();
 
     /* Create the input port */
     macHostError = MIDIInputPortCreate(client, CFSTR("Input port"), readProc,
@@ -952,7 +984,7 @@ PmError pm_macosxcm_init(void)
         error_text = "MIDIInputPortCreate() in pm_macosxcm_init()";
         goto error_return;
     }
-        
+
     /* Create the output port */
     macHostError = MIDIOutputPortCreate(client, CFSTR("Output port"), &portOut);
     if (macHostError != noErr) {
@@ -961,7 +993,7 @@ PmError pm_macosxcm_init(void)
     }
 
     /* Iterate over the MIDI input devices */
-    for (i = 0; i < numInputs; i++) {
+    for (int i = 0; i < numInputs; i++) {
         endpoint = MIDIGetSource(i);
         if (endpoint == NULL_REF) {
             continue;
@@ -970,14 +1002,14 @@ PmError pm_macosxcm_init(void)
         /* set the first input we see to the default */
         if (pm_default_input_device_id == -1)
             pm_default_input_device_id = pm_descriptor_index;
-        
+
         /* Register this device with PortMidi */
         pm_add_device("CoreMIDI", cm_get_full_endpoint_name(endpoint),
                       TRUE, (void *) (long) endpoint, &pm_macosx_in_dictionary);
     }
 
     /* Iterate over the MIDI output devices */
-    for (i = 0; i < numOutputs; i++) {
+    for (int i = 0; i < numOutputs; i++) {
         endpoint = MIDIGetDestination(i);
         if (endpoint == NULL_REF) {
             continue;
@@ -996,7 +1028,7 @@ PmError pm_macosxcm_init(void)
     
 error_return:
     pm_hosterror = macHostError;
-    sprintf(pm_hosterror_text, "Host error %ld: %s\n", (long) macHostError, 
+    sprintf(pm_hosterror_text, "Host error %ld: %s\n", (long) macHostError,
             error_text);
     pm_macosxcm_term(); /* clear out any opened ports */
     return pmHostError;
@@ -1004,7 +1036,8 @@ error_return:
 
 void pm_macosxcm_term(void)
 {
-    if (client != NULL_REF) MIDIClientDispose(client);
+    /* docs say do not explicitly dispose of client
+       if (client != NULL_REF) MIDIClientDispose(client); */
     if (portIn != NULL_REF) MIDIPortDispose(portIn);
     if (portOut != NULL_REF) MIDIPortDispose(portOut);
 }
diff --git a/pd/portmidi/pm_win/pmwinmm.c b/pd/portmidi/pm_win/pmwinmm.c
index d76fb7ab04da2f5416424e07f2855d9d6ef06005..e7660cc6dd832456790a6a37f37669d424588714 100755
--- a/pd/portmidi/pm_win/pmwinmm.c
+++ b/pd/portmidi/pm_win/pmwinmm.c
@@ -1208,7 +1208,7 @@ static PmError winmm_write_byte(PmInternal *midi, unsigned char byte,
         m->hdr = hdr = get_free_output_buffer(midi);
         assert(hdr);
         midi->fill_base = (unsigned char *) m->hdr->lpData;
-        midi->fill_offset_ptr = &(hdr->dwBytesRecorded);
+        midi->fill_offset_ptr = (uint32_t *)&(hdr->dwBytesRecorded);
         /* when buffer fills, Pm_WriteSysEx will revert to calling
          * pmwin_write_byte, which expect to have space, so leave
          * one byte free for pmwin_write_byte. Leave another byte
diff --git a/pd/src/g_all_guis.c b/pd/src/g_all_guis.c
index ddac7c841a4d64f08d1b645e167105e468c9f33a..13fcfc9811533853aa98177633dd7b0c18a07888 100644
--- a/pd/src/g_all_guis.c
+++ b/pd/src/g_all_guis.c
@@ -153,6 +153,7 @@ static t_symbol *color2symbol(int col)
     {
         if (!color_format_warned)
         {
+#if 0
             post("warning: saving iemgui colors as hex symbol. These colors "
                  "are readable in Pd Vanilla since 0.47, but they are not "
                  "readable in Purr Data version 2.12.0 or earlier. "
@@ -164,6 +165,11 @@ static t_symbol *color2symbol(int col)
             post("|");
             post("[send pd]");
             post("");
+#else
+            // ag 20240915: I think that everybody got the memo by now, so
+            // just a quick and unobtrusive reminder should be enough.
+            post("warning: saving iemgui colors as hex symbol. For older Pd versions use: [; pd compatibility 0.47(");
+#endif
             color_format_warned = 1;    
         }
         snprintf(colname, MAXPDSTRING-1, "#%06x", col);
diff --git a/pd/src/g_canvas.c b/pd/src/g_canvas.c
index 84f7a4288aae55b74df5395981f070d5f8a49b39..fe186ad7dff8a7f203643a11403fe91be4fc1dd0 100644
--- a/pd/src/g_canvas.c
+++ b/pd/src/g_canvas.c
@@ -3529,6 +3529,7 @@ extern void canvas_numbox(t_glist *gl, t_symbol *s, int argc, t_atom *argv);
 extern void canvas_msg(t_glist *gl, t_symbol *s, int argc, t_atom *argv);
 extern void canvas_floatatom(t_glist *gl, t_symbol *s, int argc, t_atom *argv);
 extern void canvas_symbolatom(t_glist *gl, t_symbol *s, int argc, t_atom *argv);
+extern void canvas_listbox(t_glist *gl, t_symbol *s, int argc, t_atom *argv);
 extern void canvas_dropdown(t_glist *gl, t_symbol *s, int argc, t_atom *argv);
 extern void glist_scalar(t_glist *canvas, t_symbol *s, int argc, t_atom *argv);
 
@@ -3564,6 +3565,8 @@ void g_canvas_setup(void)
         gensym("floatatom"), A_GIMME, A_NULL);
     class_addmethod(canvas_class, (t_method)canvas_symbolatom,
         gensym("symbolatom"), A_GIMME, A_NULL);
+    class_addmethod(canvas_class, (t_method)canvas_listbox,
+        gensym("listbox"), A_GIMME, A_NULL);
     class_addmethod(canvas_class, (t_method)canvas_dropdown,
         gensym("dropdown"), A_GIMME, A_NULL);
     class_addmethod(canvas_class, (t_method)glist_text,
@@ -3709,3 +3712,21 @@ void canvas_add_for_class(t_class *c)
     canvas_readwrite_for_class(c);
     /* g_graph_setup_class(c); */
 }
+
+    /* open a file as if from an open dialog from the GUI.  If the optional
+    argument "f" is nonzero, first check if the file is already open and if
+    so, just "vis" it.  This would be useful if you want merely to make sure a
+    patch is open, but don't want more than one copy. */
+void glob_open(t_pd *ignore, t_symbol *name, t_symbol *dir, t_floatarg f)
+{
+    t_glist *gl;
+    if (f != 0)
+        for (gl = pd_getcanvaslist(); gl; gl = gl->gl_next)
+            if (name == gl->gl_name && gl->gl_env && gl->gl_env->ce_dir == dir)
+    {
+            /* don't reopen already-open document, just vis it */
+        canvas_vis(gl, 1);
+        return;
+    }
+    glob_evalfile(ignore, name, dir);
+}
diff --git a/pd/src/g_graph.c b/pd/src/g_graph.c
index 67d1c2dd5d8c07efd5fca936e877dbdc65a2a47e..c739ee082fe65259551c3c0c7eaad86ddb688740 100644
--- a/pd/src/g_graph.c
+++ b/pd/src/g_graph.c
@@ -1308,9 +1308,12 @@ static void graph_vis(t_gobj *gr, t_glist *parent_glist, int vis)
             //fprintf(stderr,"done\n");
             gop_redraw = 0;
         }
-        /* reselect it upon redrawing if it was selected before */
+        // redraw the iolets
         glist_drawiofor(parent_glist, &x->gl_obj, 1,
             tag, x1, y1, x2, y2);
+        // also get the cords fixed in case their positions have changed
+        canvas_fixlinesfor(parent_glist, &x->gl_obj);
+        /* reselect it upon redrawing if it was selected before */
         if (glist_isselected(parent_glist, gr))
             gobj_select(gr, parent_glist, 1);
         // here we check for changes in scrollbar because of legacy
diff --git a/pd/src/g_io.c b/pd/src/g_io.c
index 1f8c00e731a9d59c9640de80e5a28d6e3cb2d623..490bc69bcebff8359a6929ac707b91b1c6422a6b 100644
--- a/pd/src/g_io.c
+++ b/pd/src/g_io.c
@@ -127,15 +127,10 @@ t_int *vinlet_perform(t_int *w)
 
 static void vinlet_fwd(t_vinlet *x, t_symbol *s, int argc, t_atom *argv)
 {
-    if(x->x_fwdout) /* inlet~ fwd */
-        outlet_anything(x->x_fwdout, s, argc, argv);
-    else if(x->x_buf == 0) /* inlet, need to forward message because we want
-                                it to accept fwd selector */
+    if (!x->x_buf)   /* if we're not signal, just forward */
         outlet_anything(x->x_obj.ob_outlet, s, argc, argv);
-    else /* inlet~ without fwd */
-        pd_error(x->x_canvas, "inlet~: expected 'signal' but got '%s' "
-            "(Note: [inlet~] does not forward non-signal messages unless "
-            "argument 'fwd' is defined)", s->s_name);
+    else if (x->x_fwdout && argc > 0 && argv->a_type == A_SYMBOL)
+        outlet_anything(x->x_fwdout, argv->a_w.w_symbol, argc-1, argv+1);
 }
 
 static void vinlet_dsp(t_vinlet *x, t_signal **sp)
diff --git a/pd/src/g_numbox.c b/pd/src/g_numbox.c
index f0a444e59fba6abce7b85826c5e5f9c20e0e6ea8..6993658d8cf67f20a425384db4cc62e707fe6b0c 100644
--- a/pd/src/g_numbox.c
+++ b/pd/src/g_numbox.c
@@ -31,8 +31,6 @@ static void my_numbox_set_change(t_my_numbox *x, t_floatarg f);
 static void my_numbox_ftoa(t_my_numbox *x , int append);
 static void my_numbox_list(t_my_numbox *x, t_symbol *s, int ac, t_atom *av);
 
-static t_symbol *numbox_keyname_sym_a;
-
 static void my_numbox_tick_reset(t_my_numbox *x)
 {
     //post("tick_reset\n");
@@ -59,12 +57,10 @@ static void my_numbox_set_change(t_my_numbox *x, t_floatarg f)
     if (f == 0 && x->x_gui.x_change != 0)
     {
         x->x_gui.x_change = 0;
-        pd_unbind(&x->x_gui.x_obj.ob_pd, numbox_keyname_sym_a);
     }
     else if (f == 1 && x->x_gui.x_change != 1)
     {
         x->x_gui.x_change = 1;
-        pd_bind(&x->x_gui.x_obj.ob_pd, numbox_keyname_sym_a);        
     }
 }
 
@@ -1046,8 +1042,6 @@ void g_numbox_setup(void)
     class_addmethod(my_numbox_class, (t_method)my_numbox_drawstyle,
         gensym("drawstyle"), A_FLOAT, 0);
 
-    numbox_keyname_sym_a = gensym("#keyname_a");
-
     wb_init(&my_numbox_widgetbehavior,my_numbox_getrect,my_numbox_newclick);
     class_setwidget(my_numbox_class, &my_numbox_widgetbehavior);
     class_sethelpsymbol(my_numbox_class, gensym("numbox2"));
diff --git a/pd/src/g_text.c b/pd/src/g_text.c
index c5b385b312d58dfae2470ce01041be79df52d4e6..75bc08794fff8a20c6e5a20245b7fd7af2ee31d6 100644
--- a/pd/src/g_text.c
+++ b/pd/src/g_text.c
@@ -7,6 +7,7 @@
 /* all changes are labeled with      iemlib      */
 
 #include <stdlib.h>
+#include <ctype.h>
 #include "m_pd.h"
 #include "m_imp.h"
 #include "s_stuff.h"
@@ -869,9 +870,12 @@ void canvas_msg(t_glist *gl, t_symbol *s, int argc, t_atom *argv)
 #define ATOM_LABELUP 2
 #define ATOM_LABELDOWN 3
 
+#define A_LIST A_NULL /* fake atom type - use A_NULL for list 'flavor' */
+
 typedef struct _gatom
 {
     t_text a_text;
+    int a_flavor;            /* A_FLOAT, A_SYMBOL, or A_LIST */
     t_atom a_atom;           /* this holds the value and the type */
     t_atom a_atomold;        /* this holds old value, used to reverting to
                                 when changing the number value using arrows */
@@ -886,8 +890,9 @@ typedef struct _gatom
     char a_shift;            /* was shift key down when dragging started? */
     char a_wherelabel;       /* 0-3 for left, right, above, below */
     t_symbol *a_expanded_to; /* a_symto after $0, $1, ...  expansion */
-    int a_shift_clicked;	 /* used to keep old text after \n. this is
-    							activated by shift+clicking no the object */
+    int a_click_pos;         /* character position when clicked */
+    int a_shift_clicked;     /* used to keep old text after \n. this is
+                                activated by shift+clicking no the object */
 } t_gatom;
 
     /* prepend "-" as necessary to avoid empty strings, so we can
@@ -935,8 +940,9 @@ static void gatom_retext(t_gatom *x, int senditup, int recolor)
         //post("gatom click off");
         gui_vmess("gui_gatom_activate", "xsi",
             canvas, rtext_gettag(y), 0);
-    	x->a_shift_clicked = 0;
-    	x->a_shift = 0;
+        x->a_shift_clicked = 0;
+        x->a_shift = 0;
+        x->a_click_pos = 0;
     }
     binbuf_clear(x->a_text.te_binbuf);
     binbuf_add(x->a_text.te_binbuf, 1, &x->a_atom);
@@ -944,12 +950,36 @@ static void gatom_retext(t_gatom *x, int senditup, int recolor)
         sys_queuegui(x, x->a_glist, gatom_redraw);
 }
 
+static void gatom_setabuf(t_gatom *x, const char *s)
+{
+    strncpy(x->a_buf, s, ATOMBUFSIZE-2);
+    x->a_buf[ATOMBUFSIZE-1] = 0;
+}
+
 static void gatom_set(t_gatom *x, t_symbol *s, int argc, t_atom *argv)
 {
     t_atom oldatom = x->a_atom;
     int changed = 0;
-    if (!argc) return;
-    if (x->a_atom.a_type == A_FLOAT)
+    if (x->a_flavor == A_LIST)     /* list */
+    {
+        t_binbuf *b = binbuf_new();
+        char *buf;
+        int size;
+        binbuf_add(b, argc, argv);
+        // our "listbox" is really just a symbol gatom masquerading as a list
+        // gatom, so internally we store the list as a symbol -- our code can't
+        // really deal with proper list gatoms right now
+        binbuf_gettext(b, &buf, &size);
+        buf = (char *)t_resizebytes(buf, size, size+1);
+        buf[size] = 0;
+        x->a_atom.a_w.w_symbol = gensym(buf);
+        changed = (x->a_atom.a_w.w_symbol != oldatom.a_w.w_symbol);
+        t_freebytes(buf, size+1);
+        binbuf_free(b);
+    }
+    else if (!argc)
+        return;
+    else if (x->a_atom.a_type == A_FLOAT)
         x->a_atom.a_w.w_float = atom_getfloat(argv),
             changed = (x->a_atom.a_w.w_float != oldatom.a_w.w_float);
     else if (x->a_atom.a_type == A_SYMBOL)
@@ -967,7 +997,7 @@ static void gatom_set(t_gatom *x, t_symbol *s, int argc, t_atom *argv)
     {
         x->a_buf[0] = 0;
     } else {
-        strcpy(x->a_buf, x->a_atom.a_w.w_symbol->s_name);
+        gatom_setabuf(x, x->a_atom.a_w.w_symbol->s_name);
     }
 }
 
@@ -986,7 +1016,7 @@ static void gatom_bang(t_gatom *x)
             else pd_float(x->a_expanded_to->s_thing, x->a_atom.a_w.w_float);
         }
     }
-    else if (x->a_atom.a_type == A_SYMBOL)
+    else if (x->a_flavor == A_SYMBOL)
     {
         if (x->a_text.te_outlet)
             outlet_symbol(x->a_text.te_outlet, x->a_atom.a_w.w_symbol);
@@ -999,6 +1029,34 @@ static void gatom_bang(t_gatom *x)
             else pd_symbol(x->a_expanded_to->s_thing, x->a_atom.a_w.w_symbol);
         }
     }
+    else    /* list */
+    {
+        // here we go the other way round, i.e., we turn the symbol into a
+        // proper list again
+        t_binbuf *b = binbuf_new();
+        char *buf = x->a_atom.a_w.w_symbol->s_name;
+        binbuf_text(b, buf, strlen(buf));
+        int argc = binbuf_getnatom(b);
+        t_atom *argv = binbuf_getvec(b);
+        for (int i = 0; i < argc; i++)
+            if (argv[i].a_type != A_FLOAT && argv[i].a_type != A_SYMBOL)
+        {
+            binbuf_free(b);
+            pd_error(x, "list: only sends literal numbers and symbols");
+            return;
+        }
+        if (x->a_text.te_outlet)
+            outlet_list(x->a_text.te_outlet, &s_list, argc, argv);
+        if (*x->a_expanded_to->s_name && x->a_expanded_to->s_thing)
+        {
+            if (x->a_symto == x->a_symfrom)
+                pd_error(x,
+                    "%s: atom with same send/receive name (infinite loop)",
+                        x->a_symto->s_name);
+            else pd_list(x->a_expanded_to->s_thing, &s_list, argc, argv);
+        }
+        binbuf_free(b);
+    }
 }
 
 static void gatom_float(t_gatom *x, t_float f)
@@ -1033,82 +1091,126 @@ static void gatom_symbol(t_gatom *x, t_symbol *s)
     "nofirstin" flag, the standard list behavior gets confused. */
 static void gatom_list(t_gatom *x, t_symbol *s, int argc, t_atom *argv)
 {
-    //post("gatom_list <%s>", s->s_name);
-    if (!argc)
+    //post("gatom_list <%s> %d", s->s_name, argc);
+    if (!argc) {
         gatom_bang(x);
-    else if (argc == 1)
-    {
-    	if (argv->a_type == A_FLOAT)
-        	gatom_float(x, argv->a_w.w_float);
-    	else if (argv->a_type == A_SYMBOL)
-        	gatom_symbol(x, argv->a_w.w_symbol);
-    }
-    /* ico@vt.edu 20200904 like g_numbox.c, here we hijack list to capture
-       keyname keypresses, so that we can use shift+backspace to delete
-       entire text */
-    else if (argc == 2 && argv[0].a_type == A_FLOAT && argv[1].a_type == A_SYMBOL)
-    {
-        //post("got keyname %s while grabbed\n", argv[1].a_w.w_symbol->s_name);
-        if (!strcmp("Shift", argv[1].a_w.w_symbol->s_name))
-        {
-            x->a_shift = (int)argv[0].a_w.w_float;
-            //post("...Shift %d", x->a_shift);
-        }
-        if (x->a_atom.a_type == A_FLOAT && argv[0].a_w.w_float == 1)
-        {
-            if (!strcmp("Up", argv[1].a_w.w_symbol->s_name))
-            {
-                //fprintf(stderr,"...Up\n");
-                x->a_atom.a_w.w_float += 1;
-                //sprintf(x->a_buf, "%g", x->a_atom.a_w.w_float);
-                gatom_retext(x, 1, 0);
-            }
-            else if (!strcmp("ShiftUp", argv[1].a_w.w_symbol->s_name))
-            {
-                //fprintf(stderr,"...ShiftUp\n");
-                x->a_atom.a_w.w_float += 0.01;
-                //sprintf(x->a_buf, "%g", x->a_atom.a_w.w_float);
-                gatom_retext(x, 1, 0);
-            }
-            if (!strcmp("Down", argv[1].a_w.w_symbol->s_name))
-            {
-                //fprintf(stderr,"...Down\n");
-                x->a_atom.a_w.w_float -= 1;
-                //sprintf(x->a_buf, "%g", x->a_atom.a_w.w_float);
-                gatom_retext(x, 1, 0);
-            }
-            else if (!strcmp("ShiftDown", argv[1].a_w.w_symbol->s_name))
-            {
-                //fprintf(stderr,"...ShiftDown\n");
-                x->a_atom.a_w.w_float -= 0.01;
-                //sprintf(x->a_buf, "%g", x->a_atom.a_w.w_float);
-                gatom_retext(x, 1, 0);
+    } else if (x->a_flavor == A_LIST) {
+        gatom_set(x, s, argc, argv);
+        gatom_bang(x);
+    } else if (argc == 1) {
+        if (argv->a_type == A_FLOAT)
+            gatom_float(x, argv->a_w.w_float);
+        else if (argv->a_type == A_SYMBOL)
+            gatom_symbol(x, argv->a_w.w_symbol);
+    } else
+        pd_error(x, "gatom: need float or symbol");
+}
+
+// drag numbers in a listbox
+
+static char *clicked_number(t_gatom *a, double *d, int *p, int *q)
+{
+    static char token[MAXPDSTRING];
+    if (a->a_flavor == A_LIST) {
+        char *buf = a->a_atom.a_w.w_symbol->s_name;
+        int size = strlen(buf), pos = a->a_click_pos;
+        if (pos <= size) {
+            // find the token preceding pos
+            while (pos > 0 && !isspace(buf[pos-1])) pos--;
+            int endpos = pos;
+            while (endpos < size && !isspace(buf[endpos])) endpos++;
+            if (endpos > pos) {
+                strncpy(token, buf+pos, endpos-pos);
+                token[endpos-pos] = 0;
+                int n;
+                if (sscanf(token, "%lg%n", d, &n) == 1 && n == endpos-pos) {
+                    *p = pos; *q = endpos;
+                    return token;
+                }
             }
         }
     }
-    else pd_error(x, "gatom_list: need float or symbol");
+    return NULL;
+}
+
+static void update_symbol(t_gatom *x, t_symbol *s, int bang)
+{
+    x->a_atom.a_w.w_symbol = s;
+    gatom_retext(x, 1, 0);
+    if (bang) {
+        x->a_atomold = x->a_atom;
+        gatom_bang(x);
+    }
+    // we need to update the a_buf here, just in case
+    gatom_setabuf(x, s->s_name);
+}
+
+static void change_clicked(t_gatom *x, double f, int p, int q, int bang)
+{
+    char token[MAXPDSTRING], buf[MAXPDSTRING], *s = x->a_atom.a_w.w_symbol->s_name;
+    snprintf(token, MAXPDSTRING, "%g", f);
+    int len = strlen(token);
+    memset(buf, 0, MAXPDSTRING);
+    strncpy(buf, s, p);
+    strncpy(buf+p, token, MAXPDSTRING-p);
+    strncpy(buf+p+len, s+q, MAXPDSTRING-p-len);
+    t_symbol *sym = gensym(buf);
+    if (sym != x->a_atom.a_w.w_symbol) {
+        update_symbol(x, sym, bang);
+    }
+}
+
+static double float_increment(double nval, t_floatarg d)
+{
+    nval = nval - d;
+    double trunc = 0.01 * (floor(100. * nval + 0.5));
+    if (trunc < nval + 0.0001 && trunc > nval - 0.0001) nval = trunc;
+    trunc = floor(nval + 0.5);
+    if (trunc < nval + 0.001 && trunc > nval - 0.001) nval = trunc;
+    return nval;
+}
+
+static double float_increment_100ths(double nval, t_floatarg d)
+{
+    nval = nval - 0.01 * d;
+    double trunc = 0.01 * (floor(100. * nval + 0.5));
+    if (trunc < nval + 0.0001 && trunc > nval - 0.0001) nval = trunc;
+    return nval;
 }
 
 static void gatom_motion(void *z, t_floatarg dx, t_floatarg dy)
 {
     t_gatom *x = (t_gatom *)z;
+    double nval;
+    int p, q;
     if (dy == 0) return;
-    if (x->a_atom.a_type == A_FLOAT)
+    if (x->a_flavor == A_LIST && clicked_number(x, &nval, &p, &q))
     {
         if (x->a_shift)
         {
-            double nval = x->a_atom.a_w.w_float - 0.01 * dy;
-            double trunc = 0.01 * (floor(100. * nval + 0.5));
-            if (trunc < nval + 0.0001 && trunc > nval - 0.0001) nval = trunc;
+            double nval2 = float_increment_100ths(nval, dy);
+            if (nval2 != nval)
+                change_clicked(x, nval2, p, q, 1);
+        }
+        else
+        {
+            double nval2 = float_increment(nval, dy);
+            if (nval2 != nval)
+              change_clicked(x, nval2, p, q, 1);
+        }
+    }
+    else if (x->a_atom.a_type == A_FLOAT)
+    {
+        if (x->a_shift)
+        {
+            nval = x->a_atom.a_w.w_float;
+            nval = float_increment_100ths(nval, dy);
             gatom_clipfloat(x, nval);
         }
         else
         {
-            double nval = x->a_atom.a_w.w_float - dy;
-            double trunc = 0.01 * (floor(100. * nval + 0.5));
-            if (trunc < nval + 0.0001 && trunc > nval - 0.0001) nval = trunc;
-            trunc = floor(nval + 0.5);
-            if (trunc < nval + 0.001 && trunc > nval - 0.001) nval = trunc;
+            nval = x->a_atom.a_w.w_float;
+            nval = float_increment(nval, dy);
             gatom_clipfloat(x, nval);
         }
     }
@@ -1126,15 +1228,9 @@ static void gatom_key(void *z, t_floatarg f)
     {
         // we're being notified that no more keys will come for this grab
     	//post("gatom_key end <%s> <%s>", x->a_buf, x->a_atom.a_w.w_symbol->s_name);
-    	pd_unbind(&x->a_text.ob_pd, gensym("#keyname_a"));
-    	//post("unbind <%s>", x->a_buf);
         if (x->a_atom.a_type == A_FLOAT)
         {
             x->a_atom = x->a_atomold;
-            //if (x->a_buf[0]) x->a_atom.a_w.w_float = atof(x->a_buf);
-            //sprintf(x->a_buf, "%f", x->a_atom.a_w.w_float);
-            //post("got float f=<%f> s=<%s>", x->a_atom.a_w.w_float, x->a_buf);
-
             // ico@vt.edu 20200904:
             // we reset internal buffer since there is currently no graceful way
             // to handle conversion from float to string and back without loss
@@ -1144,17 +1240,17 @@ static void gatom_key(void *z, t_floatarg f)
         }
         else if (x->a_atom.a_type == A_SYMBOL)
         {
-            //post("gatom_key release");
-            // ico@vt.edu 20200923: we also check for empty a_buf to ensure that
-            // the ... is deleted. This was created when the object was originally
-            // clicked on below, but only if the current gatom is symbol type and
-            // is empty.
+            // ag: need to switch back to oldatom here in case we've modified
+            // numbers in a listbox with the cursor keys
+            if (x->a_flavor == A_LIST) x->a_atom = x->a_atomold;
+            // ico@vt.edu 20200923: we also check for empty a_buf to ensure
+            // that the ... is deleted. This was created when the object was
+            // originally clicked on below, but only if the current gatom is
+            // symbol type and is empty.
             if (x->a_buf[0] == 0 || strcmp(x->a_buf, x->a_atom.a_w.w_symbol->s_name))
             {
-                strcpy(x->a_buf, x->a_atom.a_w.w_symbol->s_name);
+                gatom_setabuf(x, x->a_atom.a_w.w_symbol->s_name);
                 gatom_retext(x, 1, 1);
-                //post("gatom_key buf=<%s> s_name=<%s>", x->a_buf,
-                //    x->a_atom.a_w.w_symbol->s_name);
             }
             else
                 gatom_retext(x, 0, 1);
@@ -1239,12 +1335,76 @@ redraw:
     glist_retext(x->a_glist, &x->a_text);
 }
 
+// Ico's special keyboard bindings for gatoms. This was originally mangled up
+// with gatom_list above, but needs to be in its own callback, so that it
+// doesn't interfere with regular list input (listbox, specifically).
+
+static void gatom_keyhandler(t_gatom *x, t_symbol *s, int argc, t_atom *argv)
+{
+    int p, q;
+    double nval;
+    /* ico@vt.edu 20200904 like g_numbox.c, here we hijack list to capture
+       keyname keypresses, so that we can use shift+backspace to delete
+       entire text */
+    if (argc == 2 && argv[0].a_type == A_FLOAT && argv[1].a_type == A_SYMBOL) {
+        //post("got keyname %s while grabbed\n", argv[1].a_w.w_symbol->s_name);
+        if (!strcmp("Shift", argv[1].a_w.w_symbol->s_name)) {
+            x->a_shift = (int)argv[0].a_w.w_float;
+            //post("...Shift %d", x->a_shift);
+        }
+        if (x->a_atom.a_type == A_FLOAT && argv[0].a_w.w_float == 1) {
+            if (!strcmp("Up", argv[1].a_w.w_symbol->s_name)) {
+                //fprintf(stderr,"...Up\n");
+                x->a_atom.a_w.w_float += 1;
+                //sprintf(x->a_buf, "%g", x->a_atom.a_w.w_float);
+                gatom_retext(x, 1, 0);
+            } else if (!strcmp("ShiftUp", argv[1].a_w.w_symbol->s_name)) {
+                //fprintf(stderr,"...ShiftUp\n");
+                x->a_atom.a_w.w_float += 0.01;
+                //sprintf(x->a_buf, "%g", x->a_atom.a_w.w_float);
+                gatom_retext(x, 1, 0);
+            } else if (!strcmp("Down", argv[1].a_w.w_symbol->s_name)) {
+                //fprintf(stderr,"...Down\n");
+                x->a_atom.a_w.w_float -= 1;
+                //sprintf(x->a_buf, "%g", x->a_atom.a_w.w_float);
+                gatom_retext(x, 1, 0);
+            } else if (!strcmp("ShiftDown", argv[1].a_w.w_symbol->s_name)) {
+                //fprintf(stderr,"...ShiftDown\n");
+                x->a_atom.a_w.w_float -= 0.01;
+                //sprintf(x->a_buf, "%g", x->a_atom.a_w.w_float);
+                gatom_retext(x, 1, 0);
+            }
+        }
+        // change numbers in listboxes
+        else if (x->a_flavor == A_LIST && argv[0].a_w.w_float == 1 && clicked_number(x, &nval, &p, &q)) {
+            if (!strcmp("Up", argv[1].a_w.w_symbol->s_name)) {
+                double nval2 = float_increment(nval, -1);
+                if (nval2 != nval)
+                    change_clicked(x, nval2, p, q, 0);
+            } else if (!strcmp("ShiftUp", argv[1].a_w.w_symbol->s_name)) {
+                double nval2 = float_increment_100ths(nval, -1);
+                if (nval2 != nval)
+                    change_clicked(x, nval2, p, q, 0);
+            } else if (!strcmp("Down", argv[1].a_w.w_symbol->s_name)) {
+                double nval2 = float_increment(nval, 1);
+                if (nval2 != nval)
+                    change_clicked(x, nval2, p, q, 0);
+            } else if (!strcmp("ShiftDown", argv[1].a_w.w_symbol->s_name)) {
+                double nval2 = float_increment_100ths(nval, 1);
+                if (nval2 != nval)
+                    change_clicked(x, nval2, p, q, 0);
+            }
+        }
+    }
+}
+
 static void gatom_click(t_gatom *x,
     t_floatarg xpos, t_floatarg ypos, t_floatarg shift, t_floatarg ctrl,
     t_floatarg alt)
 {
 	//post("gatom_click %f %f", ctrl, alt);
-    pd_bind(&x->a_text.ob_pd, gensym("#keyname_a"));
+    // zero-based position of clicked character (listbox)
+    x->a_click_pos = ((int)xpos - x->a_text.te_xpix) / sys_fontwidth(glist_getfont(x->a_glist));
 	//post("bind");
     if (x->a_text.te_width == 1)
     {
@@ -1277,7 +1437,7 @@ static void gatom_click(t_gatom *x,
             glist_retext(x->a_glist, &x->a_text);
         }
 	   	glist_grabx(x->a_glist, &x->a_text.te_g, gatom_motion, gatom_key,
-	        (t_glistkeynameafn)gatom_list, xpos, ypos);
+	        (t_glistkeynameafn)gatom_keyhandler, xpos, ypos);
 	    //post("a_shift_clicked=%d", x->a_shift_clicked);
         x->a_shift_clicked = shift;
 	    	// second click wipes prior text
@@ -1434,7 +1594,10 @@ void canvas_atom(t_glist *gl, t_atomtype type,
     x->a_text.te_iemgui = 0;
     x->a_text.te_binbuf = binbuf_new();
     x->a_glist = gl;
-    x->a_atom.a_type = type;
+    x->a_flavor = type;
+    // A_LIST = "fake" listbox, this is just a variant of the symbol atom
+    // which can store lists of symbols and numbers
+    x->a_atom.a_type = type == A_LIST?A_SYMBOL:type;
     x->a_toggle = 1;
     x->a_draglo = 0;
     x->a_draghi = 0;
@@ -1442,6 +1605,7 @@ void canvas_atom(t_glist *gl, t_atomtype type,
     x->a_label = &s_;
     x->a_symfrom = &s_;
     x->a_symto = x->a_expanded_to = &s_;
+    x->a_click_pos = 0;
     x->a_shift_clicked = 0;
     if (type == A_FLOAT)
     {
@@ -1449,6 +1613,12 @@ void canvas_atom(t_glist *gl, t_atomtype type,
         x->a_text.te_width = 5;
         SETFLOAT(&at, 0);
     }
+    else if (type == A_LIST)
+    {
+        x->a_atom.a_w.w_symbol = &s_list;
+        x->a_text.te_width = 20;
+        SETSYMBOL(&at, &s_list);
+    }
     else
     {
         x->a_atom.a_w.w_symbol = &s_symbol;
@@ -1525,6 +1695,11 @@ void canvas_symbolatom(t_glist *gl, t_symbol *s, int argc, t_atom *argv)
     canvas_atom(gl, A_SYMBOL, s, argc, argv);
 }
 
+void canvas_listbox(t_glist *gl, t_symbol *s, int argc, t_atom *argv)
+{
+    canvas_atom(gl, A_LIST, s, argc, argv);
+}
+
 static void gatom_free(t_gatom *x)
 {
     if (*x->a_symfrom->s_name)
@@ -2379,8 +2554,10 @@ void text_save(t_gobj *z, t_binbuf *b)
         if (pd_class(&x->te_pd) == gatom_class)
         {
             t_atomtype t = ((t_gatom *)x)->a_atom.a_type;
-            t_symbol *sel = (t == A_SYMBOL ? gensym("symbolatom") :
-                (t == A_FLOAT ? gensym("floatatom") : gensym("intatom")));
+            int flavor = ((t_gatom *)x)->a_flavor;
+            t_symbol *sel =
+              (t == A_SYMBOL ? gensym(flavor==A_SYMBOL?"symbolatom":"listbox") :
+               (t == A_FLOAT ? gensym("floatatom") : gensym("intatom")));
             t_symbol *label = gatom_escapit(((t_gatom *)x)->a_label);
             t_symbol *symfrom = gatom_escapit(((t_gatom *)x)->a_symfrom);
             t_symbol *symto = gatom_escapit(((t_gatom *)x)->a_symto);
@@ -2660,12 +2837,15 @@ void text_drawborder(t_text *x, t_glist *glist,
     }
     else if (x->te_type == T_ATOM)
     {
+        // rounded corners on dropdowns and listboxes
+        int rounded = ((t_gatom *)x)->a_flavor == A_LIST ? -1 :
+            is_dropdown(x) ? 1 : 0;
         if (firsttime)
         {
             gui_vmess("gui_atom_draw_border", "xsiii",
                 glist_getcanvas(glist),
                 tag,
-                (is_dropdown(x) ? ((t_dropdown *)x)->a_outtype + 1 : 0),
+                rounded,
                 x2 - x1,
                 y2 - y1);
         }
@@ -2675,8 +2855,7 @@ void text_drawborder(t_text *x, t_glist *glist,
             gui_vmess("gui_atom_redraw_border", "xsiii",
                 glist_getcanvas(glist),
                 tag,
-                pd_class(&x->te_pd) == dropdown_class ?
-                    ((t_dropdown *)x)->a_outtype + 1 : 0,
+                rounded,
                 x2 - x1,
                 y2 - y1);
         }
diff --git a/pd/src/m_binbuf.c b/pd/src/m_binbuf.c
index f2c020ccbf7c470266e9235dcecd097d6d6194e0..470d55c6fadfe1e111f8b084dde34edfc3ab2a6e 100644
--- a/pd/src/m_binbuf.c
+++ b/pd/src/m_binbuf.c
@@ -691,13 +691,15 @@ t_symbol *binbuf_realizedollsym(t_symbol *s, int ac, t_atom *av, int tonew)
 t_pd *pd_mess_from_responder(t_pd *x);
 static void binbuf_error(t_pd *x, const char *fmt, ...)
 {
+    char buf[MAXPDSTRING];
     va_list ap;
     va_start(ap, fmt);
+    vsnprintf(buf, MAXPDSTRING, fmt, ap);
+    va_end(ap);
     if (x)
-        pd_error(pd_mess_from_responder(x), fmt, ap);
+        pd_error(pd_mess_from_responder(x), "%s", buf);
     else
-        error(fmt, ap);
-    va_end(ap);
+        error("%s", buf);
 }
 
 void binbuf_eval(t_binbuf *x, t_pd *target, int argc, t_atom *argv)
diff --git a/pd/src/m_glob.c b/pd/src/m_glob.c
index e4f9f85c92288149410c972668e9de98fc8ba83f..0986bb93ada9e00b26b6d7b05515df23cdc090d8 100644
--- a/pd/src/m_glob.c
+++ b/pd/src/m_glob.c
@@ -30,9 +30,11 @@ void glob_findinstance(t_pd *dummy, t_symbol*s);
 void glob_audio_properties(t_pd *dummy, t_floatarg flongform);
 void glob_audio_dialog(t_pd *dummy, t_symbol *s, int argc, t_atom *argv);
 void glob_audio_setapi(t_pd *dummy, t_floatarg f);
+void glob_audio_refresh(t_pd *dummy);
 void glob_midi_properties(t_pd *dummy, t_floatarg flongform);
 void glob_midi_dialog(t_pd *dummy, t_symbol *s, int argc, t_atom *argv);
 void glob_midi_setapi(t_pd *dummy, t_floatarg f);
+void glob_midi_refresh(t_pd *dummy);
 void glob_start_path_dialog(t_pd *dummy, t_floatarg flongform);
 void glob_path_dialog(t_pd *dummy, t_symbol *s, int argc, t_atom *argv);
 void glob_addtopath(t_pd *dummy, t_symbol *path, t_float saveit);
@@ -45,6 +47,7 @@ void glob_forward_files_from_secondary_instance(void);
 void glob_recent_files(t_pd *dummy);
 void glob_add_recent_file(t_pd *dummy, t_symbol *s);
 void glob_clear_recent_files(t_pd *dummy);
+void glob_open(t_pd *ignore, t_symbol *name, t_symbol *dir, t_floatarg f);
 
 void alsa_resync( void);
 
@@ -82,7 +85,7 @@ static void glob_perf(t_pd *dummy, float f)
 
 extern int sys_snaptogrid, sys_gridsize, sys_zoom,
     sys_autocomplete, sys_autocomplete_prefix, sys_autocomplete_relevance,
-    sys_browser_doc, sys_browser_path, sys_browser_init,
+    sys_autocomplete_tooltip_enabled, sys_autocomplete_fuzzy_search, sys_browser_doc, sys_browser_path, sys_browser_init,
     sys_autopatch_yoffset;
 extern t_symbol *sys_gui_preset;
 static void glob_gui_prefs(t_pd *dummy, t_symbol *s, int argc, t_atom *argv)
@@ -94,6 +97,8 @@ static void glob_gui_prefs(t_pd *dummy, t_symbol *s, int argc, t_atom *argv)
     sys_autocomplete = !!atom_getintarg(0, argc--, argv++);
     sys_autocomplete_prefix = !!atom_getintarg(0, argc--, argv++);
     sys_autocomplete_relevance = !!atom_getintarg(0, argc--, argv++);
+    sys_autocomplete_tooltip_enabled = !!atom_getintarg(0, argc--, argv++);
+    sys_autocomplete_fuzzy_search = !!atom_getintarg(0, argc--, argv++);
     sys_browser_doc = !!atom_getintarg(0, argc--, argv++);
     sys_browser_path = !!atom_getintarg(0, argc--, argv++);
     sys_browser_init = !!atom_getintarg(0, argc--, argv++);
@@ -103,7 +108,7 @@ static void glob_gui_prefs(t_pd *dummy, t_symbol *s, int argc, t_atom *argv)
 /* just the gui-preset, the save-zoom toggle and various help browser options for now */
 static void glob_gui_properties(t_pd *dummy)
 {
-    gui_vmess("gui_gui_properties", "xsiiiiiiiiii",
+    gui_vmess("gui_gui_properties", "xsiiiiiiiiiiii",
         dummy,
         sys_gui_preset->s_name,
         sys_snaptogrid,
@@ -112,6 +117,8 @@ static void glob_gui_properties(t_pd *dummy)
         sys_autocomplete,
         sys_autocomplete_prefix,
         sys_autocomplete_relevance,
+        sys_autocomplete_tooltip_enabled,
+        sys_autocomplete_fuzzy_search,
         sys_browser_doc,
         sys_browser_path,
         sys_browser_init,
@@ -159,8 +166,8 @@ void glob_init(void)
         gensym("forward_files_from_secondary_instance"), 0);
     class_addmethod(glob_pdobject, (t_method)glob_setfilename, 
         gensym("filename"), A_SYMBOL, A_SYMBOL, 0);
-    class_addmethod(glob_pdobject, (t_method)glob_evalfile, gensym("open"),
-        A_SYMBOL, A_SYMBOL, 0);
+    class_addmethod(glob_pdobject, (t_method)glob_open, gensym("open"),
+        A_SYMBOL, A_SYMBOL, A_DEFFLOAT, 0);
     class_addmethod(glob_pdobject, (t_method)glob_quit, gensym("quit"),
         A_DEFFLOAT, 0);
     class_addmethod(glob_pdobject, (t_method)glob_verifyquit,
@@ -183,8 +190,12 @@ void glob_init(void)
         gensym("audio-dialog"), A_GIMME, 0);
     class_addmethod(glob_pdobject, (t_method)glob_audio_setapi,
         gensym("audio-setapi"), A_FLOAT, 0);
+    class_addmethod(glob_pdobject, (t_method)glob_audio_refresh,
+        gensym("audio-refresh"), 0);
     class_addmethod(glob_pdobject, (t_method)glob_midi_setapi,
         gensym("midi-setapi"), A_FLOAT, 0);
+    class_addmethod(glob_pdobject, (t_method)glob_midi_refresh,
+        gensym("midi-refresh"), 0);
     class_addmethod(glob_pdobject, (t_method)glob_midi_properties,
         gensym("midi-properties"), A_DEFFLOAT, 0);
     class_addmethod(glob_pdobject, (t_method)glob_midi_dialog,
diff --git a/pd/src/m_obj.c b/pd/src/m_obj.c
index 3c9043991b944281541b97ab7b691c30bde054ac..3ea7d647ab277ac66eea593dd95a50aadfdfbc59 100644
--- a/pd/src/m_obj.c
+++ b/pd/src/m_obj.c
@@ -10,6 +10,14 @@ behavior for "gobjs" appears at the end of this file.  */
 #include "m_imp.h"
 #include <stdio.h>
 
+#ifdef _WIN32
+# include <malloc.h> /* MSVC or mingw on windows */
+#elif defined(__linux__) || defined(__APPLE__)
+# include <alloca.h> /* linux, mac, mingw, cygwin */
+#else
+# include <stdlib.h> /* BSDs for example */
+#endif
+
 union inletunion
 {
     t_symbol *iu_symto;
@@ -86,7 +94,12 @@ static int inlet_fwd(t_inlet *x, t_symbol *s, int argc, t_atom *argv)
     if(x->i_symfrom == &s_signal
         && zcheckgetfn(x->i_dest, gensym("fwd"), A_GIMME, A_NULL))
     {
-        mess3i(x->i_dest, gensym("fwd"), s, argc, argv);
+        t_atom *argvec = (t_atom *)alloca((argc+1) * sizeof(t_atom));
+        int i;
+        SETSYMBOL(argvec, s);
+        for (i = 0; i < argc; i++)
+          argvec[i+1] = argv[i];
+        typedmess(x->i_dest, gensym("fwd"), argc+1, argvec);
         return 1;
     }
     return 0;
diff --git a/pd/src/m_pd.h b/pd/src/m_pd.h
index e967415d26a48aad5d6304382e48f67a8f2fa469..4d8c83388367b6ec24ec197759c9b2ae87b8b355 100644
--- a/pd/src/m_pd.h
+++ b/pd/src/m_pd.h
@@ -14,7 +14,7 @@ extern "C" {
 #define PD_MINOR_VERSION 48
 #define PD_BUGFIX_VERSION 0
 #define PD_TEST_VERSION ""
-#define PD_L2ORK_VERSION "2.19.3"
+#define PD_L2ORK_VERSION "2.19.4"
 #define PDL2ORK
 // This is defined only for Purr-Data, not DISIS Pd-l2ork.
 #define PURR_DATA
diff --git a/pd/src/makefile.in b/pd/src/makefile.in
index 439ab427b15eaae96889ea0381e94c206f13080f..a04e8a16b2957354935f856e403465daef5c2b26 100644
--- a/pd/src/makefile.in
+++ b/pd/src/makefile.in
@@ -197,7 +197,7 @@ install: all
 	install -m755 $(BIN_DIR)/pdreceive $(DESTDIR)$(bindir)/pdreceive 
 	rsync -ax --exclude=.git --exclude=.svn ../doc/* $(DESTDIR)$(pddocdir)
 	mv $(ABOUT_FILE) $(ABOUT_FILE).tmp
-	cat $(ABOUT_FILE).tmp | sed 's|PD_VERSION|Pd-l2ork version $(PD_L2ORK_VERSION) ($(PD_BUILD_VERSION))|' \
+	cat $(ABOUT_FILE).tmp | sed 's|PD_VERSION|Purr-Data version $(PD_L2ORK_VERSION) ($(PD_BUILD_VERSION))|' \
 		> $(ABOUT_FILE)
 	rm $(ABOUT_FILE).tmp
 	rsync -ax --exclude=.git --exclude=.svn ../extra $(DESTDIR)$(libpddir)/
diff --git a/pd/src/s_audio.c b/pd/src/s_audio.c
index 6573adbf93153cde605b8a9726fe20472a426960..112ba663e218504193380e374fc5b2bdf0409338 100644
--- a/pd/src/s_audio.c
+++ b/pd/src/s_audio.c
@@ -420,6 +420,22 @@ void sys_close_audio(void)
     audio_callback_is_open = 0;
 }
 
+    /* extended close audio: make sure that devices are rescanned when opening
+       again, for backends which need it (specifically, portaudio needs to be
+       forced to properly reinitialize to update its device list) */
+void sys_xclose_audio( void)
+{
+#ifdef USEAPI_PORTAUDIO
+    void pa_fini_audio(void);
+    int pa_opened = audio_isopen() && sys_audioapiopened == API_PORTAUDIO;
+    sys_close_audio();
+    if (pa_opened)
+        pa_fini_audio();
+#else
+    sys_close_audio();
+#endif
+}
+
     /* open audio using whatever parameters were last used */
 void sys_reopen_audio( void)
 {
@@ -987,6 +1003,19 @@ void glob_audio_setapi(void *dummy, t_floatarg f)
     }
 }
 
+void glob_audio_refresh(void *dummy)
+{
+    sys_xclose_audio();
+#if 0
+        /* bash device params back to default */
+    audio_naudioindev = audio_naudiooutdev = 1;
+    audio_audioindev[0] = audio_audiooutdev[0] = DEFAULTAUDIODEV;
+    audio_audiochindev[0] = audio_audiochoutdev[0] = SYS_DEFAULTCH;
+#endif
+    sys_reopen_audio();
+    glob_audio_properties(0, 0);
+}
+
     /* start or stop the audio hardware */
 void sys_set_audio_state(int onoff)
 {
diff --git a/pd/src/s_audio_alsa.c b/pd/src/s_audio_alsa.c
index 3b91c69236e151615c8397d160ae52f532baef86..17f9fea38497f98686196e035471ac1357d96141 100644
--- a/pd/src/s_audio_alsa.c
+++ b/pd/src/s_audio_alsa.c
@@ -449,7 +449,7 @@ int alsa_send_dacs(void)
                 for (j = i, k = DEFDACBLKSIZE, fp2 = fp1; k--;
                      j += thisdevchans, fp2++)
             {
-                float s1 = *fp2 * INT32_MAX;
+                t_sample s1 = *fp2 * INT32_MAX;
                 ((t_alsa_sample32 *)alsa_snd_buf)[j] = CLIP32(s1);
             } 
             for (; i < thisdevchans; i++, ch++)
@@ -566,7 +566,7 @@ int alsa_send_dacs(void)
             {
                 for (j = ch, k = DEFDACBLKSIZE, fp2 = fp1; k--;
                      j += thisdevchans, fp2++)
-                    *fp2 = (float) ((t_alsa_sample32 *)alsa_snd_buf)[j]
+                    *fp2 = (t_sample) ((t_alsa_sample32 *)alsa_snd_buf)[j]
                         * (1./ INT32_MAX);
             }
         }
@@ -577,7 +577,7 @@ int alsa_send_dacs(void)
             {
                 for (j = ch, k = DEFDACBLKSIZE, fp2 = fp1; k--;
                      j += thisdevchans, fp2++)
-                    *fp2 = ((float) (
+                    *fp2 = ((t_sample) (
                         (((unsigned char *)alsa_snd_buf)[3*j] << 8)
                         | (((unsigned char *)alsa_snd_buf)[3*j+1] << 16)
                         | (((unsigned char *)alsa_snd_buf)[3*j+2] << 24)))
@@ -593,7 +593,7 @@ int alsa_send_dacs(void)
             {
                 for (j = ch, k = DEFDACBLKSIZE, fp2 = fp1; k--;
                     j += thisdevchans, fp2++)
-                        *fp2 = (float) ((t_alsa_sample16 *)alsa_snd_buf)[j]
+                        *fp2 = (t_sample) ((t_alsa_sample16 *)alsa_snd_buf)[j]
                             * 3.051850e-05;
             }
         }
diff --git a/pd/src/s_audio_alsamm.c b/pd/src/s_audio_alsamm.c
index 10544969377781dce8b026690d351628fd1346eb..dd1d9a40c140214a360ac41f26e9a767620afb3d 100644
--- a/pd/src/s_audio_alsamm.c
+++ b/pd/src/s_audio_alsamm.c
@@ -1191,7 +1191,7 @@ int alsamm_send_dacs(void)
                 
         for (i = 0, fp2 = fp1 + chn*alsamm_transfersize; i < oframes; i++,fp2++)
           {
-            float s1 = *fp2 * F32MAX;
+            t_sample s1 = *fp2 * F32MAX;
             /* better but slower, better never clip ;-)
                buf[i]= CLIP32(s1); */
             buf[i]= ((int) s1 & 0xFFFFFF00);
@@ -1299,8 +1299,8 @@ int alsamm_send_dacs(void)
         for (i = 0, fp2 = fp1 + chn*alsamm_transfersize; i < iframes; i++,fp2++)
           {
             /* mask the lowest bits, since subchannels info can make zero samples nonzero */
-            *fp2 = (float) ((t_alsa_sample32) (buf[i] & 0xFFFFFF00))  
-              * (1.0 / (float) INT32_MAX);
+            *fp2 = (t_sample) ((t_alsa_sample32) (buf[i] & 0xFFFFFF00))  
+              * (1.0 / (t_sample) INT32_MAX);
           }      
       }
 
diff --git a/pd/src/s_audio_jack.c b/pd/src/s_audio_jack.c
index 93b1c4307026c92d78592fa89364e7d0c48e0246..6c9afbb1bcf4d8f7c082b40c58ab1965a0cab344 100644
--- a/pd/src/s_audio_jack.c
+++ b/pd/src/s_audio_jack.c
@@ -98,7 +98,7 @@ static int process (jack_nframes_t nframes, void *arg)
         for (j = 0; j < outport_count;  j++)
         {
             out = jack_port_get_buffer (output_port[j], nframes);
-            memset(out, 0, sizeof (float) * nframes); 
+            memset(out, 0, sizeof (jack_default_audio_sample_t) * nframes); 
         }
         memset(jack_outbuf,0,sizeof(jack_outbuf));
         jack_filled = 0;
diff --git a/pd/src/s_audio_oss.c b/pd/src/s_audio_oss.c
index 61718f47bae549db100f059b4054b8caeaef403c..069d5959d1652642c9338559826a26093b83e886 100644
--- a/pd/src/s_audio_oss.c
+++ b/pd/src/s_audio_oss.c
@@ -251,8 +251,6 @@ whynot:
     return (0);
 }
 
-#define O_AUDIOFLAG O_NDELAY
-
 int oss_open_audio(int nindev,  int *indev,  int nchin,  int *chin,
     int noutdev, int *outdev, int nchout, int *chout, int rate,
         int blocksize)
@@ -297,7 +295,7 @@ int oss_open_audio(int nindev,  int *indev,  int nchin,  int *chin,
         if (inindex >= 0)
         {
             sys_setalarm(1000000);
-            if ((fd = open(devname, O_RDWR | O_AUDIOFLAG)) == -1)
+            if ((fd = open(devname, O_RDWR | O_NDELAY)) == -1)
             {
                 post("%s (read/write): %s", devname, strerror(errno));
                 post("(now will try write-only...)");
@@ -308,7 +306,7 @@ int oss_open_audio(int nindev,  int *indev,  int nchin,  int *chin,
                     post("couldn't set close-on-exec flag on audio");
                 if ((flags = fcntl(fd, F_GETFL)) < 0)
                     post("couldn't get audio device flags");
-                else if (fcntl(fd, F_SETFL, flags & (!O_NDELAY)) < 0)
+                else if (fcntl(fd, F_SETFL, flags & (~O_NDELAY)) < 0)
                     post("couldn't set audio device flags");
                 if (sys_verbose)
                     post("opened %s for reading and writing\n", devname);
@@ -319,7 +317,7 @@ int oss_open_audio(int nindev,  int *indev,  int nchin,  int *chin,
         if (fd == -1)
         {
             sys_setalarm(1000000);
-            if ((fd = open(devname, O_WRONLY | O_AUDIOFLAG)) == -1)
+            if ((fd = open(devname, O_WRONLY | O_NDELAY)) == -1)
             {
                 post("%s (writeonly): %s",
                      devname, strerror(errno));
@@ -329,7 +327,7 @@ int oss_open_audio(int nindev,  int *indev,  int nchin,  int *chin,
                 post("couldn't set close-on-exec flag on audio");
             if ((flags = fcntl(fd, F_GETFL)) < 0)
                 post("couldn't get audio device flags");
-            else if (fcntl(fd, F_SETFL, flags & (!O_NDELAY)) < 0)
+            else if (fcntl(fd, F_SETFL, flags & (~O_NDELAY)) < 0)
                 post("couldn't set audio device flags");
             if (sys_verbose)
                 post("opened %s for writing only\n", devname);
@@ -398,7 +396,7 @@ int oss_open_audio(int nindev,  int *indev,  int nchin,  int *chin,
         else
         {
                 /* otherwise try to open it here. */
-            if ((fd = open(devname, O_RDONLY | O_AUDIOFLAG)) == -1)
+            if ((fd = open(devname, O_RDONLY | O_NDELAY)) == -1)
             {
                 post("%s (readonly): %s", devname, strerror(errno));
                 goto end_in_loop;
@@ -407,7 +405,7 @@ int oss_open_audio(int nindev,  int *indev,  int nchin,  int *chin,
                 post("couldn't set close-on-exec flag on audio");
             if ((flags = fcntl(fd, F_GETFL)) < 0)
                 post("couldn't get audio device flags");
-            else if (fcntl(fd, F_SETFL, flags & (!O_NDELAY)) < 0)
+            else if (fcntl(fd, F_SETFL, flags & (~O_NDELAY)) < 0)
                 post("couldn't set audio device flags");
             if (sys_verbose)
                 post("opened %s for reading only\n", devname);
@@ -761,7 +759,7 @@ int oss_send_dacs(void)
                 sp = (t_oss_int16 *)buf; i--; fp1++, sp += nchannels)
             {
                 for (j=0;j<nchannels;j++)
-                    fp1[j*DEFDACBLKSIZE] = (float)sp[j]*(float)3.051850e-05;
+                    fp1[j*DEFDACBLKSIZE] = (t_sample)sp[j]*(t_sample)3.051850e-05;
             }
         }
         thischan += nchannels;    
diff --git a/pd/src/s_audio_pa.c b/pd/src/s_audio_pa.c
index e15c0eafded441fc75e167259594cab574df3f00..0ff507bdb55ff39c7be5fc1fa2e8f13617ac8275 100644
--- a/pd/src/s_audio_pa.c
+++ b/pd/src/s_audio_pa.c
@@ -84,9 +84,10 @@ pthread_cond_t pa_sem;
 #endif /* THREADSIGNAL */
 #endif  /* FAKEBLOCKING */
 
+static int initialized;
+
 static void pa_init(void)        /* Initialize PortAudio  */
 {
-    static int initialized;
     if (!initialized)
     {
 #ifdef __APPLE__
@@ -467,6 +468,15 @@ void pa_close_audio( void)
 #endif
 }
 
+void pa_fini_audio(void)
+{
+    if (initialized) {
+        Pa_Terminate();
+        initialized = 0;
+        fprintf(stderr, "pa_fini_audio\n");
+    }
+}
+
 int pa_send_dacs(void)
 {
     t_sample *fp;
diff --git a/pd/src/s_file.c b/pd/src/s_file.c
index 107fd96ab0a17380e723fe66f2d76ddaf9dc876c..85bd80f987090af3e12ff592a338375cbc8148b3 100644
--- a/pd/src/s_file.c
+++ b/pd/src/s_file.c
@@ -44,8 +44,8 @@
 
 int sys_defeatrt, sys_autopatch_yoffset, sys_snaptogrid = 1, sys_gridsize = 10,
     sys_zoom, sys_autocomplete = 1, sys_autocomplete_prefix,
-    sys_autocomplete_relevance = 1,
-    sys_browser_doc = 1, sys_browser_path, sys_browser_init;
+    sys_autocomplete_relevance = 1, sys_autocomplete_tooltip_enabled = 1,
+    sys_autocomplete_fuzzy_search = 1, sys_browser_doc = 1, sys_browser_path, sys_browser_init;
 t_symbol *sys_flags = &s_;
 void sys_doflags( void);
 
@@ -195,25 +195,18 @@ static int sys_getpreference(const char *key, char *value, int size)
 {
     HKEY hkey;
     DWORD bigsize = size;
-    LONG err = RegOpenKeyEx(HKEY_CURRENT_USER,
-        "Software\\Purr-Data", 0,  KEY_QUERY_VALUE, &hkey);
-    if (err != ERROR_SUCCESS)
-    {
-        err = RegOpenKeyEx(HKEY_LOCAL_MACHINE,
-            "Software\\Purr-Data", 0,  KEY_QUERY_VALUE, &hkey);
-        if (err != ERROR_SUCCESS)
-        {
-            return (0);
-	}
-    }
-    err = RegQueryValueEx(hkey, key, 0, 0, value, &bigsize);
-    if (err != ERROR_SUCCESS)
-    {
+    int rc = (RegOpenKeyEx(HKEY_CURRENT_USER,
+    "Software\\Purr-Data", 0,  KEY_QUERY_VALUE, &hkey) == ERROR_SUCCESS ||
+        // newer versions of Windows apparently have the registry key here
+        RegOpenKeyEx(HKEY_LOCAL_MACHINE,
+        "Software\\WOW6432Node\\Purr-Data", 0,  KEY_QUERY_VALUE, &hkey) == ERROR_SUCCESS ||
+        RegOpenKeyEx(HKEY_LOCAL_MACHINE,
+        "Software\\Purr-Data", 0,  KEY_QUERY_VALUE, &hkey) == ERROR_SUCCESS);
+    if (rc) {
+        rc = RegQueryValueEx(hkey, key, 0, 0, value, &bigsize) == ERROR_SUCCESS;
         RegCloseKey(hkey);
-        return (0);
     }
-    RegCloseKey(hkey);
-    return (1);
+    return rc;
 }
 
 static void sys_doneloadpreferences( void)
@@ -716,6 +709,10 @@ void sys_loadpreferences( void)
         sscanf(prefbuf, "%d", &sys_autocomplete_prefix);
     if (sys_getpreference("autocomplete_relevance", prefbuf, MAXPDSTRING))
         sscanf(prefbuf, "%d", &sys_autocomplete_relevance);
+    if (sys_getpreference("autocomplete_tooltip_enabled", prefbuf, MAXPDSTRING))
+        sscanf(prefbuf, "%d", &sys_autocomplete_tooltip_enabled);
+    if (sys_getpreference("autocomplete_fuzzy_search", prefbuf, MAXPDSTRING))
+        sscanf(prefbuf, "%d", &sys_autocomplete_fuzzy_search);
     if (sys_getpreference("browser_doc", prefbuf, MAXPDSTRING))
         sscanf(prefbuf, "%d", &sys_browser_doc);
     if (sys_getpreference("browser_path", prefbuf, MAXPDSTRING))
@@ -905,6 +902,10 @@ void glob_savepreferences(t_pd *dummy)
     sys_putpreference("autocomplete_prefix", buf1);
     sprintf(buf1, "%d", sys_autocomplete_relevance);
     sys_putpreference("autocomplete_relevance", buf1);
+    sprintf(buf1, "%d", sys_autocomplete_tooltip_enabled);
+    sys_putpreference("autocomplete_tooltip_enabled", buf1);
+    sprintf(buf1, "%d", sys_autocomplete_fuzzy_search);
+    sys_putpreference("autocomplete_fuzzy_search", buf1);
     sprintf(buf1, "%d", sys_browser_doc);
     sys_putpreference("browser_doc", buf1);
     sprintf(buf1, "%d", sys_browser_path);
diff --git a/pd/src/s_main.c b/pd/src/s_main.c
index 8b2abb0dbc395e40e44fc44bb7ebeee34eab2f53..c3352159920a85c2ec8524400cc3792b1dc92a19 100644
--- a/pd/src/s_main.c
+++ b/pd/src/s_main.c
@@ -332,7 +332,7 @@ void glob_forward_files_from_secondary_instance(void)
 extern void glob_recent_files(t_pd *dummy);
 extern int sys_browser_doc, sys_browser_path, sys_browser_init;
 extern int sys_autocomplete, sys_autocomplete_prefix,
-  sys_autocomplete_relevance;
+  sys_autocomplete_relevance, sys_autocomplete_tooltip_enabled, sys_autocomplete_fuzzy_search;
 
 /* this is called from main() in s_entry.c */
 int sys_main(int argc, char **argv)
@@ -424,10 +424,10 @@ int sys_main(int argc, char **argv)
     glob_recent_files(0);
         /* AG: send the browser config; this must come *after* gui_set_lib_dir
            so that the lib_dir is available when help indexing starts */
-    gui_start_vmess("gui_set_browser_config", "iiiiii",
+    gui_start_vmess("gui_set_browser_config", "iiiiiiii",
                     sys_browser_doc, sys_browser_path, sys_browser_init,
                     sys_autocomplete, sys_autocomplete_prefix,
-                    sys_autocomplete_relevance);
+                    sys_autocomplete_relevance, sys_autocomplete_tooltip_enabled, sys_autocomplete_fuzzy_search);
     gui_start_array();
     for (nl = sys_helppath; nl; nl = nl->nl_next)
     {
diff --git a/pd/src/s_midi.c b/pd/src/s_midi.c
index aff57da246a40c7525eba335807ff816fcec15b0..2b265f4774aa2f4c05b345a70b8a4b6a39ed642b 100644
--- a/pd/src/s_midi.c
+++ b/pd/src/s_midi.c
@@ -621,6 +621,25 @@ void sys_reopen_midi( void)
     sys_open_midi(nmidiindev, midiindev, nmidioutdev, midioutdev, 1);
 }
 
+    /* extended close midi: make sure that devices are rescanned when opening
+       again, for backends which need it (specifically, portmidi needs to be
+       forced to properly reinitialize to update its device list) */
+void sys_xclose_midi( void)
+{
+    sys_close_midi();
+    // This is confusing. There doesn't appear to be a separate flag for
+    // portmidi, but it seems to be used whenever portaudio is, which is on
+    // Mac and Windows in the current implementation. In this case,
+    // sys_midiapi seems to be largely ignored and is just always set to
+    // API_DEFAULT. Thus we only need to check that we're using API_DEFAULT,
+    // but not API_ALSA (which is the API_DEFAULT on Linux).
+#ifdef USEAPI_PORTAUDIO
+    void pm_fini_midi(void);
+    if (sys_midiapi == API_DEFAULT && sys_midiapi != API_ALSA)
+        pm_fini_midi();
+#endif
+}
+
 void sys_listmididevs(void )
 {
     char indevlist[MAXNDEV*DEVDESCSIZE], outdevlist[MAXNDEV*DEVDESCSIZE];
@@ -683,6 +702,21 @@ void glob_midi_setapi(void *dummy, t_floatarg f)
     glob_midi_properties(0, (midi_nmidiindev > 1 || midi_nmidioutdev > 1));
 }
 
+void glob_midi_refresh(void *dummy)
+{
+#ifdef USEAPI_ALSA
+    if (sys_midiapi == API_ALSA)
+        sys_alsa_close_midi();
+    else
+#endif
+        sys_xclose_midi();
+    sys_reopen_midi();
+#ifdef USEAPI_ALSA
+    midi_alsa_setndevs(midi_nmidiindev, midi_nmidioutdev);
+#endif
+    glob_midi_properties(0, (midi_nmidiindev > 1 || midi_nmidioutdev > 1));
+}
+
 extern t_class *glob_pdobject;
 
     /* start a midi settings dialog window */
diff --git a/pd/src/s_midi_oss.c b/pd/src/s_midi_oss.c
index 05c98b0cb7ca9adf79896d77ed899d2a76c6a657..6b7797fd49bf22caac93f8a03e24c610ff95dff6 100644
--- a/pd/src/s_midi_oss.c
+++ b/pd/src/s_midi_oss.c
@@ -16,21 +16,51 @@
 #include <sys/stat.h>
 #include <fcntl.h>
 #include <errno.h>
+#include <string.h>
 #include "m_pd.h"
 #include "s_stuff.h"
 
-#define NSEARCH 10
-static int oss_nmidiindevs, oss_nmidioutdevs, oss_initted, oss_onebased;
+#define MAXNDEV 10
+static int oss_nmididevs;
+static char oss_midinames[MAXNDEV][20];
 static int oss_nmidiin;
-static int oss_midiinfd[MAXMIDIINDEV];
+static int oss_midiinfd[MAXMIDIINDEV+1]; /* +1 to suppress buggy GCC warning */
 static int oss_nmidiout;
-static int oss_midioutfd[MAXMIDIOUTDEV];
+static int oss_midioutfd[MAXMIDIOUTDEV+1];
+
+static void close_one_midi_fd(int fd)
+{
+    int i, j;
+    close(fd);
+    for (i = 0; i < oss_nmidiin; i++)
+    {
+        if (oss_midiinfd[i] == fd)
+        {
+            for (j = i; j < oss_nmidiin-1; j++)
+                oss_midiinfd[j] = oss_midiinfd[j+1];
+            oss_nmidiin--;
+        }
+    }
+    for (i = 0; i < oss_nmidiout; i++)
+    {
+        if (oss_midioutfd[i] == fd)
+        {
+            for (j = i; j < oss_nmidiout-1; j++)
+                oss_midioutfd[j] = oss_midioutfd[j+1];
+            oss_nmidiout--;
+        }
+    }
+}
 
 static void oss_midiout(int fd, int n)
 {
     char b = n;
     if ((write(fd, (char *) &b, 1)) != 1)
-        perror("midi write");
+    {
+        perror("MIDI write");
+        if (errno == ENODEV)  /* probably a USB dev got unplugged */
+            close_one_midi_fd(fd);
+    }
 }
 
 #define O_MIDIFLAG O_NDELAY
@@ -44,111 +74,52 @@ void sys_do_open_midi(int nmidiin, int *midiinvec,
     for (i = 0, oss_nmidiin = 0; i < nmidiin; i++)
     {
         int fd = -1, j, outdevindex = -1;
-        char namebuf[80];
-        int devno = midiinvec[i] + oss_onebased;
-
+        int devno = midiinvec[i];
+        if (devno < 0 || devno >= oss_nmididevs)
+            continue;
         for (j = 0; j < nmidiout; j++)
-            if (midioutvec[j] == midiinvec[i])
-                outdevindex = j;
-        
+            if (midioutvec[j] >= 0 && midioutvec[j] <= oss_nmididevs
+                && !strcmp(oss_midinames[midioutvec[j]],
+                oss_midinames[devno]))
+                    outdevindex = j;
+
             /* try to open the device for read/write. */
-        if (devno == 0 && fd < 0 && outdevindex >= 0)
+        if (outdevindex >= 0)
         {
             sys_setalarm(1000000);
-            fd = open("/dev/midi", O_RDWR | O_MIDIFLAG);
-            if (sys_verbose)
-                fprintf(stderr,
-                    "device 1: tried /dev/midi READ/WRITE; returned %d\n", fd);
+            fd = open(oss_midinames[devno], O_RDWR | O_MIDIFLAG);
+            //logpost(NULL, 4, "tried to open %s read/write; got %d", oss_midinames[devno], fd);
             if (outdevindex >= 0 && fd >= 0)
                 oss_midioutfd[outdevindex] = fd;
         }
-        if (fd < 0 && outdevindex >= 0)
-        {
-            sys_setalarm(1000000);
-            sprintf(namebuf, "/dev/midi%2.2d", devno);
-            fd = open(namebuf, O_RDWR | O_MIDIFLAG);
-            if (sys_verbose)
-                fprintf(stderr,
-                    "device %d: tried %s READ/WRITE; returned %d\n",
-                        devno, namebuf, fd);
-            if (outdevindex >= 0 && fd >= 0)
-                oss_midioutfd[outdevindex] = fd;
-        }
-        if (fd < 0 && outdevindex >= 0)
-        {
-            sys_setalarm(1000000);
-            sprintf(namebuf, "/dev/midi%d", devno);
-            fd = open(namebuf, O_RDWR | O_MIDIFLAG);
-            if (sys_verbose)
-                fprintf(stderr, "device %d: tried %s READ/WRITE; returned %d\n",
-                    devno, namebuf, fd);
-            if (outdevindex >= 0 && fd >= 0)
-                oss_midioutfd[outdevindex] = fd;
-        }
-        if (devno == 0 && fd < 0)
-        {
-            sys_setalarm(1000000);
-            fd = open("/dev/midi", O_RDONLY | O_MIDIFLAG);
-            if (sys_verbose)
-                fprintf(stderr,
-                    "device 1: tried /dev/midi READONLY; returned %d\n", fd);
-        }
-        if (fd < 0)
-        {
-            sys_setalarm(1000000);
-            sprintf(namebuf, "/dev/midi%2.2d", devno);
-            fd = open(namebuf, O_RDONLY | O_MIDIFLAG);
-            if (sys_verbose)
-                fprintf(stderr, "device %d: tried %s READONLY; returned %d\n",
-                    devno, namebuf, fd);
-        }
+            /* OK, try read-only */
         if (fd < 0)
         {
             sys_setalarm(1000000);
-            sprintf(namebuf, "/dev/midi%d", devno);
-            fd = open(namebuf, O_RDONLY | O_MIDIFLAG);
-            if (sys_verbose)
-                fprintf(stderr, "device %d: tried %s READONLY; returned %d\n",
-                    devno, namebuf, fd);
+            fd = open(oss_midinames[devno], O_RDONLY | O_MIDIFLAG);
+            //logpost(NULL, 4, "tried to open %s read-only; got %d", oss_midinames[devno], fd);
         }
         if (fd >= 0)
-            oss_midiinfd[oss_nmidiin++] = fd;       
-        else post("couldn't open MIDI input device %d", devno);
+            oss_midiinfd[oss_nmidiin++] = fd;
+        else post("couldn't open MIDI input device %s",
+            oss_midinames[devno]);
     }
     for (i = 0, oss_nmidiout = 0; i < nmidiout; i++)
     {
         int fd = oss_midioutfd[i];
-        char namebuf[80];
-        int devno = midioutvec[i] + oss_onebased;
-        if (devno == 0 && fd < 0)
-        {
-            sys_setalarm(1000000);
-            fd = open("/dev/midi", O_WRONLY | O_MIDIFLAG);
-            if (sys_verbose)
-                fprintf(stderr,
-                    "device 1: tried /dev/midi WRITEONLY; returned %d\n", fd);
-        }
-        if (fd < 0)
-        {
-            sys_setalarm(1000000);
-            sprintf(namebuf, "/dev/midi%2.2d", devno);
-            fd = open(namebuf, O_WRONLY | O_MIDIFLAG);
-            if (sys_verbose)
-                fprintf(stderr, "device %d: tried %s WRITEONLY; returned %d\n",
-                    devno, namebuf, fd);
-        }
+        int devno = midioutvec[i];
+        if (devno < 0 || devno >= oss_nmididevs)
+            continue;
         if (fd < 0)
         {
             sys_setalarm(1000000);
-            sprintf(namebuf, "/dev/midi%d", devno);
-            fd = open(namebuf, O_WRONLY | O_MIDIFLAG);
-            if (sys_verbose)
-                fprintf(stderr, "device %d: tried %s WRITEONLY; returned %d\n",
-                    devno, namebuf, fd);
+            fd = open(oss_midinames[devno], O_WRONLY | O_MIDIFLAG);
+            //logpost(NULL, 4, "tried to open %s write-only; got %d", oss_midinames[devno], fd);
         }
         if (fd >= 0)
-            oss_midioutfd[oss_nmidiout++] = fd;     
-        else post("couldn't open MIDI output device %d", devno);
+            oss_midioutfd[oss_nmidiout++] = fd;
+        else post("couldn't open MIDI output device %s",
+            oss_midinames[devno]);
     }
 
     if (oss_nmidiin < nmidiin || oss_nmidiout < nmidiout || sys_verbose)
@@ -168,16 +139,16 @@ void sys_putmidimess(int portno, int a, int b, int c)
        switch (md_msglen(a))
        {
        case 2:
-            oss_midiout(oss_midioutfd[portno],a);        
-            oss_midiout(oss_midioutfd[portno],b);        
+            oss_midiout(oss_midioutfd[portno],a);
+            oss_midiout(oss_midioutfd[portno],b);
             oss_midiout(oss_midioutfd[portno],c);
             return;
        case 1:
-            oss_midiout(oss_midioutfd[portno],a);        
-            oss_midiout(oss_midioutfd[portno],b);        
+            oss_midiout(oss_midioutfd[portno],a);
+            oss_midiout(oss_midioutfd[portno],b);
             return;
        case 0:
-            oss_midiout(oss_midioutfd[portno],a);        
+            oss_midiout(oss_midioutfd[portno],a);
             return;
        };
     }
@@ -186,55 +157,14 @@ void sys_putmidimess(int portno, int a, int b, int c)
 void sys_putmidibyte(int portno, int byte)
 {
     if (portno >= 0 && portno < oss_nmidiout)
-        oss_midiout(oss_midioutfd[portno], byte);       
+        oss_midiout(oss_midioutfd[portno], byte);
 }
 
-#if 0   /* this is the "select" version which doesn't work with OSS
-        driver for emu10k1 (it doesn't implement select.) */
 void sys_poll_midi(void)
 {
     int i, throttle = 100;
-    struct timeval timout;
     int did = 1, maxfd = 0;
     while (did)
-    {
-        fd_set readset, writeset, exceptset;
-        did = 0;
-        if (throttle-- < 0)
-            break;
-        timout.tv_sec = 0;
-        timout.tv_usec = 0;
-
-        FD_ZERO(&writeset);
-        FD_ZERO(&readset);
-        FD_ZERO(&exceptset);
-        for (i = 0; i < oss_nmidiin; i++)
-        {
-            if (oss_midiinfd[i] > maxfd)
-                maxfd = oss_midiinfd[i];
-            FD_SET(oss_midiinfd[i], &readset);
-        }
-        select(maxfd+1, &readset, &writeset, &exceptset, &timout);
-        for (i = 0; i < oss_nmidiin; i++)
-            if (FD_ISSET(oss_midiinfd[i], &readset))
-        {
-            char c;
-            int ret = read(oss_midiinfd[i], &c, 1);
-            if (ret <= 0)
-                fprintf(stderr, "Midi read error\n");
-            else sys_midibytein(i, (c & 0xff));
-            did = 1;
-        }
-    }
-}
-#else 
-
-    /* this version uses the asynchronous "read()" ... */
-void sys_poll_midi(void)
-{
-    int i, throttle = 100;
-    int did = 1;
-    while (did)
     {
         did = 0;
         if (throttle-- < 0)
@@ -245,7 +175,12 @@ void sys_poll_midi(void)
             int ret = read(oss_midiinfd[i], &c, 1);
             if (ret < 0)
             {
-                if (errno != EAGAIN)
+                if (errno == ENODEV)
+                {
+                    close_one_midi_fd(oss_midiinfd[i]);
+                    return; /* oss_nmidiinfd changed so blow off the rest */
+                }
+                else if (errno != EAGAIN)
                     perror("MIDI");
             }
             else if (ret != 0)
@@ -256,7 +191,6 @@ void sys_poll_midi(void)
         }
     }
 }
-#endif
 
 void sys_close_midi()
 {
@@ -268,79 +202,23 @@ void sys_close_midi()
     oss_nmidiin = oss_nmidiout = 0;
 }
 
-void midi_oss_init(void)     
+void midi_oss_init(void)
 {
-    int i, fd, devno;
+    int fd, devno;
     struct stat statbuf;
     char namebuf[80];
-        
-    if (oss_initted)
-        return;
-    oss_initted = 1;
-        /* at some point, Fedora started counting MIDI devices from one -
-        catch that here: */
-    oss_onebased = (stat("/dev/midi1", &statbuf) >= 0 &&
-        stat("/dev/midi0", &statbuf) < 0);
-            
-    for (i = 0; i < NSEARCH; i++)
+
+    oss_nmididevs = 0;
+    if (oss_nmididevs < MAXNDEV && !stat("/dev/midi", &statbuf))
+        strcpy(oss_midinames[oss_nmididevs++], "/dev/midi");
+    for (devno = 0; devno < MAXNDEV; devno++)
     {
-        oss_nmidiindevs = i;
-        devno = i + oss_onebased;
-            /* try to open the device for reading */
-        if (devno == 0)
-        {
-            fd = open("/dev/midi", O_RDONLY | O_NDELAY);
-            if (fd >= 0)
-            {
-                close(fd);
-                continue;
-            }
-        }
-        sprintf(namebuf, "/dev/midi%2.2d", devno);
-        fd = open(namebuf, O_RDONLY | O_NDELAY);
-        if (fd >= 0)
-        {
-            close(fd);
-            continue;
-        }
         sprintf(namebuf, "/dev/midi%d", devno);
-        fd = open(namebuf, O_RDONLY | O_NDELAY);
-        if (fd >= 0)
-        {
-            close(fd);
-            continue;
-        }
-        break;
-    }
-    for (i = 0; i < NSEARCH; i++)
-    {
-        oss_nmidioutdevs = i;
-        devno = i + oss_onebased;
-            /* try to open the device for writing */
-        if (devno == 0)
-        {
-            fd = open("/dev/midi", O_WRONLY | O_NDELAY);
-            if (fd >= 0)
-            {
-                close(fd);
-                continue;
-            }
-        }
+        if (oss_nmididevs < MAXNDEV && !stat(namebuf, &statbuf))
+            strcpy(oss_midinames[oss_nmididevs++], namebuf);
         sprintf(namebuf, "/dev/midi%2.2d", devno);
-        fd = open(namebuf, O_WRONLY | O_NDELAY);
-        if (fd >= 0)
-        {
-            close(fd);
-            continue;
-        }
-        sprintf(namebuf, "/dev/midi%d", devno);
-        fd = open(namebuf, O_WRONLY | O_NDELAY);
-        if (fd >= 0)
-        {
-            close(fd);
-            continue;
-        }
-        break;
+        if (oss_nmididevs < MAXNDEV && !stat(namebuf, &statbuf))
+            strcpy(oss_midinames[oss_nmididevs++], namebuf);
     }
 }
 
@@ -348,15 +226,18 @@ void midi_getdevs(char *indevlist, int *nindevs,
     char *outdevlist, int *noutdevs, int maxndev, int devdescsize)
 {
     int i, ndev;
-    if ((ndev = oss_nmidiindevs) > maxndev)
+    midi_oss_init();
+
+    if ((ndev = oss_nmididevs) > maxndev)
         ndev = maxndev;
     for (i = 0; i < ndev; i++)
-        sprintf(indevlist + i * devdescsize, "OSS MIDI device #%d", i+1);
+        strcpy(indevlist + i * devdescsize, oss_midinames[i]);
     *nindevs = ndev;
 
-    if ((ndev = oss_nmidioutdevs) > maxndev)
+    if ((ndev = oss_nmididevs) > maxndev)
         ndev = maxndev;
     for (i = 0; i < ndev; i++)
-        sprintf(outdevlist + i * devdescsize, "OSS MIDI device #%d", i+1);
+        strcpy(outdevlist + i * devdescsize,
+            oss_midinames[i]);
     *noutdevs = ndev;
 }
diff --git a/pd/src/s_midi_pm.c b/pd/src/s_midi_pm.c
index 56b91093e64013cd03e9989e9b76e87f7a547fae..e1ec116ffe3d72bf5ab9f2c806034e438806af90 100644
--- a/pd/src/s_midi_pm.c
+++ b/pd/src/s_midi_pm.c
@@ -107,6 +107,12 @@ void sys_close_midi( void)
     mac_nmidioutdev = 0; 
 }
 
+void pm_fini_midi(void)
+{
+    Pm_Terminate();
+    fprintf(stderr, "pm_fini_midi\n");
+}
+
 void sys_putmidimess(int portno, int a, int b, int c)
 {
     PmEvent buffer;
diff --git a/pd/src/s_print.c b/pd/src/s_print.c
index 5c6705b9d32d020676e64bb5e68d6a015fa24944..363bf3ea590dcba14036f726b3557f11b1cdc799 100644
--- a/pd/src/s_print.c
+++ b/pd/src/s_print.c
@@ -27,10 +27,33 @@ static char* strnescape(char *dest, const char *src, size_t len)
         int c = src[ptin];
         if (c == '\\' || c == '{' || c == '}' || c == ';')
             dest[ptout++] = '\\';
-        dest[ptout] = src[ptin];
+        if (ptout < len - 1)
+            dest[ptout] = c;
+        else {
+            // ag 20240909: prevent buffer overflow, roll back and bail out.
+            // NOTE: We need to reserve an extra character for any trailing \n
+            // here (see below), and we don't want to keep any partial escapes
+            // hanging aroung, so we bail out a bit early for ptout < len - 1
+            // already (see above).
+            dest[ptout-1] = 0;
+            break;
+        }
         if (c==0) break;
     }
 
+    if (src[ptin] != 0) {
+        // ag 20240909: The output is truncated, make sure that we save any
+        // trailing newline at least, in order to prevent garbled messages.
+        int c;
+        while (src[ptin] != 0) c = src[ptin++];
+        if (c == '\n') {
+            // we can safely assert len>1 here
+            dest[len-2] = c;
+            // terminating 0 will be added below
+            ptout = len-1;
+        }
+    }
+
     if(ptout < len)
         dest[ptout]=0;
     else
@@ -47,14 +70,18 @@ static char* strnpointerid(char *dest, const void *pointer, size_t len)
     return dest;
 }
 
+// ag 20240909: Let's make this buffer big enough so that strnescape() is less
+// likely to run out of buffer space.
+#define UPBUFSZ (2*MAXPDSTRING)
+
 static void doerror(const void *object, const char *s)
 {
-    char upbuf[MAXPDSTRING];
-    upbuf[MAXPDSTRING-1]=0;
+    char upbuf[UPBUFSZ];
+    upbuf[UPBUFSZ-1]=0;
 
     if (sys_printhook || sys_printhook_error)
     {
-        snprintf(upbuf, MAXPDSTRING-1, "error: %s", s);
+        snprintf(upbuf, UPBUFSZ-1, "error: %s", s);
         if (sys_printhook_error)
             (*sys_printhook_error)(upbuf);
         if (sys_printhook)
@@ -67,11 +94,11 @@ static void doerror(const void *object, const char *s)
         char obuf[MAXPDSTRING];
         //sys_vgui("pdtk_posterror {%s} 1 {%s}\n",
         //    strnpointerid(obuf, object, MAXPDSTRING),
-        //    strnescape(upbuf, s, MAXPDSTRING));
+        //    strnescape(upbuf, s, UPBUFSZ));
         gui_vmess("gui_post_error", "sis",
             strnpointerid(obuf, object, MAXPDSTRING),
             1,
-            strnescape(upbuf, s, MAXPDSTRING));
+            strnescape(upbuf, s, UPBUFSZ));
     }
 }
 
@@ -80,20 +107,20 @@ static void dologpost(const void *object, const int level, const char *s)
     /* 1. s is at most MAXPDSTRING, but we're prepending a stupid header
        below. So for sanity, we first overallocate here to ensure the stupid
        header doesn't end up overflowing the buffer. */
-    char upbuf[MAXPDSTRING * 2];
+    char upbuf[UPBUFSZ];
 
     // what about sys_printhook_verbose ?
     if (sys_printhook) 
     {
         /* 2. The "n" in snprintf stands for "evil": we have to subtract one
            from total size so the null doesn't get truncated */ 
-        snprintf(upbuf, MAXPDSTRING * 2 - 1, "verbose(%d): %s", level, s);
-        /* 3. Finally, we add a null at MAXPDSTRING-1 so that we end up with
+        snprintf(upbuf, UPBUFSZ - 1, "verbose(%d): %s", level, s);
+        /* 3. Finally, we add a null at UPBUFSZ-1 so that we end up with
            a string that fits inside MAXPDSTRING for use with t_symbol, etc.
 
            If anyone knows how I was *supposed* to do this safely within the
            constraints of C's stupid stdlib, please teach me... */
-        upbuf[MAXPDSTRING-1]=0;
+        upbuf[UPBUFSZ-1]=0;
         (*sys_printhook)(upbuf);
     }
     else if (sys_printtostderr) 
@@ -104,11 +131,11 @@ static void dologpost(const void *object, const int level, const char *s)
     {
         //sys_vgui("::pdwindow::logpost {%s} %d {%s}\n", 
                  //strnpointerid(obuf, object, MAXPDSTRING), 
-                 //level, strnescape(upbuf, s, MAXPDSTRING));
+                 //level, strnescape(upbuf, s, UPBUFSZ));
         //sys_vgui("pdtk_post {%s}\n", 
-        //         strnescape(upbuf, s, MAXPDSTRING));
+        //         strnescape(upbuf, s, UPBUFSZ));
         gui_vmess("gui_post", "s",
-                 strnescape(upbuf, s, MAXPDSTRING));
+                 strnescape(upbuf, s, UPBUFSZ));
     }
 }
 
@@ -120,24 +147,10 @@ static void dopost(const char *s)
         fprintf(stderr, "%s", s);
     else
     {
-        char upbuf[MAXPDSTRING];
-        int ptin = 0, ptout = 0, len = strlen(s);
-        //static int heldcr = 0;
-        //if (heldcr)
-        //    upbuf[ptout++] = '\n', heldcr = 0;
-        for (; ptin < len && ptout < MAXPDSTRING-3;
-            ptin++, ptout++)
-        {
-            int c = s[ptin];
-            if (c == '\\' || c == '{' || c == '}' || c == ';')
-                upbuf[ptout++] = '\\';
-            upbuf[ptout] = s[ptin];
-        }
-        //if (ptout && upbuf[ptout-1] == '\n')
-        //    upbuf[--ptout] = 0, heldcr = 1;
-        upbuf[ptout] = 0;
+        char upbuf[UPBUFSZ];
 //        sys_vgui("pdtk_post {%s}\n", upbuf);
-        gui_vmess("gui_post", "s", upbuf);
+        gui_vmess("gui_post", "s",
+                  strnescape(upbuf, s, UPBUFSZ));
     }
 }
 
@@ -220,15 +233,15 @@ void verbose(int level, const char *fmt, ...)
     char buf[MAXPDSTRING];
     va_list ap;
     if(level>sys_verbose)return;
-    dopost("verbose(");
-    postfloat((t_float)level);
-    dopost("):");
     
     va_start(ap, fmt);
     vsnprintf(buf, MAXPDSTRING-1, fmt, ap);
     va_end(ap);
     strcat(buf, "\n");
-    dopost(buf);
+
+        /* log levels for verbose() traditionally start at -3,
+        so we have to adjust it before passing it on to dologpost() */
+    dologpost(NULL, level + 3, buf);
 }
 
     /* here's the good way to log errors -- keep a pointer to the
diff --git a/pd/src/s_stuff.h b/pd/src/s_stuff.h
index 04b62b45025c686d5a1dee3cd36036ab439efd91..ecfd3b07b618ef96083a7946bd4756c7a9727e0a 100644
--- a/pd/src/s_stuff.h
+++ b/pd/src/s_stuff.h
@@ -98,6 +98,7 @@ EXTERN void sys_set_audio_settings_reopen(int naudioindev, int *audioindev,
     int srate, int advance, int callback, int blocksize);
 void sys_reopen_audio( void);
 void sys_close_audio(void);
+void sys_xclose_audio( void);
     /* return true if the interface prefers always being open (ala jack) : */
 EXTERN int audio_shouldkeepopen( void);
 EXTERN int audio_isopen( void);     /* true if audio interface is open */
@@ -148,6 +149,7 @@ void sys_get_midi_apis2(t_binbuf *buf);
 
 void sys_reopen_midi( void);
 void sys_close_midi( void);
+void sys_xclose_midi( void);
 EXTERN void sys_putmidimess(int portno, int a, int b, int c);
 EXTERN void sys_putmidibyte(int portno, int a);
 EXTERN void sys_poll_midi(void);
diff --git a/pd/src/x_interface.c b/pd/src/x_interface.c
index 101250a82235d3d53d5364d93e371368bb96315f..5cc4ab26ae71613f3401ae87057385b7844a1271 100644
--- a/pd/src/x_interface.c
+++ b/pd/src/x_interface.c
@@ -714,7 +714,7 @@ void canvasinfo_setup(void)
 /* -------------------------- pdinfo ------------------------------ */
 static t_class *pdinfo_class;
 
-t_symbol *getapiname(int id)
+static t_symbol *getapiname(int id)
 {
     t_symbol *s = 0;
     switch (id)
@@ -733,6 +733,14 @@ t_symbol *getapiname(int id)
     return s;
 }
 
+static t_symbol *getmidiapiname(int id)
+{
+    if (id == API_PORTAUDIO)
+        return gensym("PortMidi");
+    else
+        return getapiname(id);
+}
+
 void pdinfo_dir(t_pdinfo *x, t_symbol *s, int argc, t_atom *argv)
 {
     t_atom at[1];
@@ -814,11 +822,6 @@ void pdinfo_classlist(t_pdinfo *x, t_symbol *s, int argc, t_atom *argv)
     }
 }
 
-void pdinfo_audioin(t_pdinfo *x, t_symbol *s, int argc, t_atom *arg)
-{
-//        char i
-}
-
 void pdinfo_audio_api_list_all(t_pdinfo *x, t_symbol *s, int argc, t_atom *argv)
 {
     t_atom at[7];
@@ -832,15 +835,15 @@ void pdinfo_audio_apilist(t_pdinfo *x, t_symbol *s, int argc, t_atom *argv)
 {
     t_atom at[8];
     int n = 0;
+#ifdef USEAPI_ALSA
+    SETSYMBOL(at+n, getapiname(API_ALSA)); n++;
+#endif
 #ifdef USEAPI_OSS
     SETSYMBOL(at+n, getapiname(API_OSS)); n++;
 #endif
 #ifdef USEAPI_MMIO
     SETSYMBOL(at+n, getapiname(API_MMIO)); n++;
 #endif
-#ifdef USEAPI_ALSA
-    SETSYMBOL(at+n, getapiname(API_ALSA)); n++;
-#endif
 #ifdef USEAPI_PORTAUDIO
 #ifdef MSW
     SETSYMBOL(at+n, getapiname(API_PORTAUDIO));
@@ -925,26 +928,26 @@ void pdinfo_audio_dev(t_pdinfo *x, t_symbol *s, int argc, t_atom *argv)
 void pdinfo_midi_api(t_pdinfo *x, t_symbol *s, int argc, t_atom *argv)
 {
     t_atom at[1];
-    t_symbol *api, *def = gensym("DEFAULT");
-#ifdef USEAPI_OSS
-    def = gensym("OSS");
-#endif
-    api = sys_midiapi ? gensym("ALSA") : def;
+    t_symbol *api = getmidiapiname(sys_midiapi);
     SETSYMBOL(at, api);
     info_out((t_text *)x, s, 1, at);
 }
 
 void pdinfo_midi_apilist(t_pdinfo *x, t_symbol *s, int argc, t_atom *argv)
 {
-    t_atom at[8];
+    t_atom at[4];
     int n = 0;
-    SETSYMBOL(at+n, gensym("DEFAULT"));
+#ifdef USEAPI_ALSA
+    SETSYMBOL(at+n, getmidiapiname(API_ALSA)); n++;
+#endif
 #ifdef USEAPI_OSS
-    SETSYMBOL(at+n, gensym("OSS"));
+    SETSYMBOL(at+n, getmidiapiname(API_OSS)); n++;
 #endif
-    n++;
-#ifdef USEAPI_ALSA
-    SETSYMBOL(at+n, getapiname(API_ALSA)); n++;
+#ifdef USEAPI_MMIO
+    SETSYMBOL(at+n, getmidiapiname(API_MMIO)); n++;
+#endif
+#ifdef USEAPI_PORTAUDIO
+    SETSYMBOL(at+n, getmidiapiname(API_PORTAUDIO)); n++;
 #endif
     info_out((t_text *)x, s, n, at);
 }
diff --git a/pd/src/x_midi.c b/pd/src/x_midi.c
index 2f75442d7ae752ce7d395c3142ccb91a0d3bfb36..860624057433f343796a02fae86993f05e733a73 100644
--- a/pd/src/x_midi.c
+++ b/pd/src/x_midi.c
@@ -64,13 +64,13 @@ static void midiin_setup(void)
 {
     midiin_class = class_new(gensym("midiin"), (t_newmethod)midiin_new,
         (t_method)midiin_free, sizeof(t_midiin),
-            CLASS_NOINLET, A_DEFFLOAT, 0);
+            CLASS_NOINLET, 0);
     class_addlist(midiin_class, midiin_list);
     class_sethelpsymbol(midiin_class, gensym("midi"));
 
     sysexin_class = class_new(gensym("sysexin"), (t_newmethod)sysexin_new,
         (t_method)sysexin_free, sizeof(t_midiin),
-            CLASS_NOINLET, A_DEFFLOAT, 0);
+            CLASS_NOINLET, 0);
     class_addlist(sysexin_class, midiin_list);
     class_sethelpsymbol(sysexin_class, gensym("midi"));
 }
@@ -540,7 +540,7 @@ static void midirealtimein_setup(void)
 {
     midirealtimein_class = class_new(gensym("midirealtimein"),
         (t_newmethod)midirealtimein_new, (t_method)midirealtimein_free,
-            sizeof(t_midirealtimein), CLASS_NOINLET, A_DEFFLOAT, 0);
+            sizeof(t_midirealtimein), CLASS_NOINLET, 0);
     class_addlist(midirealtimein_class, midirealtimein_list);
         class_sethelpsymbol(midirealtimein_class, gensym("midi"));
 }
@@ -582,11 +582,21 @@ static void midiout_float(t_midiout *x, t_floatarg f)
     outmidi_byte(x->x_portno - 1, f);
 }
 
+static void midiout_list(t_midiout *x, t_symbol *s, int ac, t_atom *av)
+{
+    for (int i = 0; i < ac; ++i)
+    {
+        if(av[i].a_type == A_FLOAT)
+            outmidi_byte(x->x_portno - 1, av[i].a_w.w_float);
+    }
+}
+
 static void midiout_setup(void)
 {
     midiout_class = class_new(gensym("midiout"), (t_newmethod)midiout_new, 0,
-        sizeof(t_midiout), 0, A_DEFFLOAT, A_DEFFLOAT, 0);
+        sizeof(t_midiout), 0, A_DEFFLOAT, 0);
     class_addfloat(midiout_class, midiout_float);
+    class_addlist(midiout_class, midiout_list);
     class_sethelpsymbol(midiout_class, gensym("midi"));
 }
 
diff --git a/pd/src/x_vexp.c b/pd/src/x_vexp.c
index cee584d24342ac19a6ca40ef6a8ffad3ac278299..bcc3fbb7a09d6cc0c37ea47c178d47fbbfe1a7fe 100644
--- a/pd/src/x_vexp.c
+++ b/pd/src/x_vexp.c
@@ -1,36 +1,59 @@
 /* Copyright (c) IRCAM.
-* For information on usage and redistribution, and for a DISCLAIMER OF ALL
-* WARRANTIES, see the file, "LICENSE.txt," in this distribution.  */
+ * For information on usage and redistribution, and for a DISCLAIMER OF ALL
+ * WARRANTIES, see the file, "LICENSE.txt," in this distribution.
+ */
 
 /* "expr" was written by Shahrokh Yadegari c. 1989. -msp */
 /* "expr~" and "fexpr~" conversion by Shahrokh Yadegari c. 1999,2000 */
 
 
 /*
- * Feb 2002 -   added access to variables
- *              multiple expression support
- *              new short hand forms for fexpr~
- *                      now $y or $y1 = $y1[-1] and $y2 = $y2[-1]
- *              --sdy
  *
- * July 2002
- *              fixed bugs introduced in last changes in store and ET_EQ
- *              --sdy
+ * July 2024, Version 0.58 (major changes)
+ *      - Added string functions in expr; now expr can output symbols
+ *      - fixed the expr~ array[0] bug
+ *      - Provide better error messages;
+ *        now expr prints the expr string when reporting errors
+ *      - fixed a memory issue were extra unused vector output was
+ *        allocated for each inlet even though the were not used
+ *      - cleaned up some indentation issues
  *
- * Oct 2015
- *                              $x[-1] was not equal $x1[-1], not accessing the previous block
- *                              (bug fix by Dan Ellis)
- *  July 2017 --sdy
- *      - Version 0.55
+ * Oct 2020, Version 0.57
+ *  - fixed a bug in fact()
+ *  - fixed the bad lvalue bug - "4 + 5 = 3" was not caught before
+ *  - fact() (factorial) now calculates and returns its value in double
+ *  - Added mtof(), mtof(), dbtorms(), rmstodb(), powtodb(), dbtopow()
  *
+ *  July 2017,  Version 0.55
  *      - The arrays now redraw after a store into one of their members
- *              - ex_if() (the "if()" function is reworked to only evaluate either
- *                the left or the right args depending on the truth value of the condition.
- *                However, if the condition is a vector, both the left and the right
- *                are evaluated regradless.
- *              - priority of ',' and '=' was switched ot fix the bug of using store "=" in
- *                functions with multiple arguments, which caused an error during execution.
- *              - The number of inlet and outlets (MAX_VARS) is now set at 100
+ *      - ex_if() (the "if()" function is reworked to only evaluate
+ *        either the left or the right args depending on the truth
+ *        value of the condition. However, if the condition is a
+ *        vector, both the left and the right are evaluated regardless.
+ *      - priority of ',' and '=' was switched to fix the bug of using
+ *        store "=" in functions with multiple arguments, which caused
+ *        an error during execution.
+ *      - The number of inlet and outlets (EX_MAX_INLETS) is now set at 100
+ *
+ * Oct 2015
+ *       $x[-1] was not equal $x1[-1], not accessing the previous block
+ *      (bug fix by Dan Ellis)
+ *
+ * July 2002
+ *      fixed bugs introduced in last changes in store and ET_EQ
+ *      --sdy
+ *
+ *  Jan 2018, Version 0.56
+ *      -fexpr~ now accepts a float in its first input
+ *      -Added avg() and Avg() back to the list of functions
+ *
+ * Feb 2002
+ *      added access to variables
+ *      multiple expression support
+ *      new short hand forms for fexpr~
+ *      now $y or $y1 = $y1[-1] and $y2 = $y2[-1]
+ *      --sdy
+ *
  */
 
 /*
@@ -41,12 +64,12 @@
  * to a prefix stack ready to be evaluated.  The expression sysntax
  * is close to that of C.  There are a few operators that are not
  * supported and functions are also recognized.  Strings can be
- * passed to functions when they are quoted in '"'s. "[]" are implememted
+ * passed to functions when they are quoted in '"'s. "[]" are implemented
  * as an easy way of accessing the content of tables, and the syntax
  * table_name[index].
  * Variables (inlets) are specified with the following syntax: $x#,
  * where x is either i(integers), f(floats), and s(strings); and #
- * is a digit that coresponds to the inlet number.  The string variables
+ * is a digit that corresponds to the inlet number.  The string variables
  * can be used as strings when they are quoted and can also be used as
  * table names when they are followed by "[]".
  *
@@ -62,6 +85,7 @@
 
 #include <string.h>
 #include <stdlib.h>
+#include <stdarg.h>
 #include <ctype.h>
 #include "x_vexp.h"
 #include <errno.h>
@@ -70,8 +94,8 @@
 #define isdigit(x)      (x >= '0' && x <= '9')
 #endif
 
-#ifdef _MSC_VER
-#define strtof _atoldbl
+#if defined _MSC_VER && (_MSC_VER < 1800)
+#define strtof(a, b) _atoldbl(a, *b)
 #endif
 
 
@@ -81,6 +105,7 @@ static struct ex_ex *ex_lex(struct expr *expr, long int *n);
 struct ex_ex *ex_match(struct ex_ex *eptr, long int op);
 struct ex_ex *ex_parse(struct expr *expr, struct ex_ex *iptr,
                                         struct ex_ex *optr, long int *argc);
+static int ex_checklval (struct expr *e, struct ex_ex *eptr);
 struct ex_ex *ex_eval(struct expr *expr, struct ex_ex *eptr,
                                                 struct ex_ex *optr, int i);
 
@@ -106,7 +131,7 @@ void ex_dzdetect(struct expr *expr);
 #define MAX_ARGS        10
 extern t_ex_func ex_funcs[];
 
-struct ex_ex nullex;
+struct ex_ex nullex = { 0 };
 
 void set_tokens (char *s);
 int getoken (struct expr *expr, struct ex_ex *eptr);
@@ -206,7 +231,7 @@ expr_donew(struct expr *expr, int ac, t_atom *av)
         t_binbuf *b;
         int i;
 
-        memset(expr->exp_var, 0, MAX_VARS * sizeof (*expr->exp_var));
+        memset(expr->exp_var, 0, EX_MAX_INLETS * sizeof (*expr->exp_var));
 #ifdef PD
         b = binbuf_new();
         binbuf_add(b, ac, av);
@@ -234,9 +259,9 @@ expr_donew(struct expr *expr, int ac, t_atom *av)
         strcpy(buf + length, string);
         length = newlength;
         if (ap->a_type == A_SEMI)
-                        buf[length-1] = '\n';
+                buf[length-1] = '\n';
         else
-                        buf[length-1] = ' ';
+                buf[length-1] = ' ';
     }
 
     if (length && buf[length-1] == ' ') {
@@ -267,32 +292,31 @@ expr_donew(struct expr *expr, int ac, t_atom *av)
                 }
                 expr->exp_stack[expr->exp_nexpr] =
                   (struct ex_ex *)fts_malloc(max_node * sizeof (struct ex_ex));
-                                if (!expr->exp_stack[expr->exp_nexpr]) {
-                                        post_error( (fts_object_t *) expr,
-                                                "expr: malloc for expr nodes failed\n");
-                                        goto error;
-                                }
-                                expr->exp_stack[expr->exp_nexpr][max_node-1].ex_type=0;
+                if (!expr->exp_stack[expr->exp_nexpr]) {
+                        post_error( (fts_object_t *) expr,
+                                "expr: malloc for expr nodes failed\n");
+                        goto error;
+                }
+                expr->exp_stack[expr->exp_nexpr][max_node-1].ex_type=0;
                 expr->exp_nexpr++;
                 ret = ex_match(list, (long)0);
-                if (expr->exp_nexpr > MAX_VARS)
-                    /* we cannot exceed MAX_VARS '$' variables */
+                if (expr->exp_nexpr  > EX_MAX_INLETS)
+                    /* we cannot exceed EX_MAX_INLETS '$' variables */
                 {
                         post_error((fts_object_t *) expr,
                             "expr: too many variables (maximum %d allowed)",
-                                MAX_VARS);
+                                EX_MAX_INLETS);
                         goto error;
                 }
                 if (!ret)               /* syntax error */
                         goto error;
                 ret = ex_parse(expr,
                         list, expr->exp_stack[expr->exp_nexpr - 1], (long *)0);
-                if (!ret)
+                if (!ret || ex_checklval(expr, expr->exp_stack[expr->exp_nexpr - 1]))
                         goto error;
                 fts_free(list);
         }
         *ret = nullex;
-        t_freebytes(exp_string, exp_strlen+1);
         return (0);
 error:
         for (i = 0; i < expr->exp_nexpr; i++) {
@@ -306,6 +330,35 @@ error:
         return (1);
 }
 
+
+void *
+ex_calloc(size_t count, size_t size)
+{
+    //printf ("calloc called with %zu bytes\n", size);
+    return calloc(count, size);
+}
+
+void
+ex_free(void *ptr)
+{
+    free (ptr);
+}
+
+
+void *
+ex_malloc(size_t size)
+{
+    //printf ("malloc called with %zu bytes\n", size);
+    return malloc(size);
+}
+
+void *
+ex_realloc(void *ptr, size_t size)
+{
+    printf ("realloc called with %zu bytes\n", size);
+    return realloc(ptr, size);
+}
+
 /*
  * ex_lex -- This routine is a bit more than a lexical parser since it will
  *           also do some syntax checking.  It reads the string s and will
@@ -316,51 +369,71 @@ struct ex_ex *
 ex_lex(struct expr *expr, long int *n)
 {
         struct ex_ex *list_arr;
-        struct ex_ex *exptr;
+        struct ex_ex *exptr, *p;
+        static struct ex_ex tmpnodes[EX_MINODES];
         long non = 0;           /* number of nodes */
         long maxnode = 0;
+        int reallocated = 0;      /* did we reallocate the tmp buffer */
 
-        list_arr = (struct ex_ex *)fts_malloc(sizeof (struct ex_ex) * MINODES);
-        if (! list_arr) {
-                post("ex_lex: no mem\n");
-                return ((struct ex_ex *)0);
-        }
-        exptr = list_arr;
-        maxnode = MINODES;
+        memset ((void *) tmpnodes, 0, sizeof(struct ex_ex) * EX_MINODES);
 
-        while (8)
+        list_arr = tmpnodes;
+        maxnode = EX_MINODES;
+
+        while (1)
         {
                 if (non >= maxnode) {
-                        maxnode += MINODES;
-
-                        list_arr = fts_realloc((void *)list_arr,
+                        maxnode += EX_MINODES;
+
+                        if (!reallocated) {
+                                list_arr = fts_calloc(maxnode, sizeof (struct ex_ex));
+                                memcpy (list_arr, tmpnodes, sizeof (struct ex_ex) * EX_MINODES);
+                                if (!list_arr) {
+                                        ex_error (expr, "ex_lex: no memory\n");
+                                        return ((struct ex_ex *)0);
+                                }
+                                reallocated = 1;
+                        } else {
+                                p = fts_realloc((void *) list_arr,
                                         sizeof (struct ex_ex) * maxnode);
-                        if (!list_arr) {
-                                post("ex_lex: no mem\n");
-                                return ((struct ex_ex *)0);
+                                if (!p) {
+                                        fts_free (list_arr);
+                                        ex_error (expr, "ex_lex: no memory\n");
+                                        return ((struct ex_ex *)0);
+                                }
+                                list_arr = p;
                         }
-                        exptr = &(list_arr)[non];
                 }
 
+                exptr = &list_arr[non];
                 if (getoken(expr, exptr)) {
-                        fts_free(list_arr);
+                        if (reallocated)
+                                fts_free(exptr);
                         return ((struct ex_ex *)0);
                 }
                 non++;
 
                 if (!exptr->ex_type)
                         break;
-
-                exptr++;
         }
+        p = fts_calloc(non, sizeof (struct ex_ex));
+        if (!p) {
+                if (reallocated)
+                        fts_free(list_arr);
+                ex_error (expr, "ex_lex: no memory\n");
+                return ((struct ex_ex *)0);
+        }
+        memcpy(p, list_arr, sizeof (struct ex_ex) * non);
         *n = non;
+        if (reallocated)
+                fts_free(list_arr);
 
-        return list_arr;
+        return (p);
 }
 
 /*
  * ex_match -- this routine walks through the eptr and matches the
- *             perentheses and brackets, it also converts the function
+ *             parentheses and brackets, it also converts the function
  *             names to a pointer to the describing structure of the
  *             specified function
  */
@@ -397,12 +470,12 @@ ex_match(struct ex_ex *eptr, long int op)
                         if (eptr[1].ex_type != ET_OP || eptr[1].ex_op != OP_LB)
                                 eptr->ex_type = ET_XI0;
                         continue;
-                                /*
-                                 * tables, functions, parenthesis, and brackets, are marked as
-                                 * operations, and they are assigned their proper operation
-                                 * in this function. Thus, if we arrive to any of these in this
-                                 * type tokens at this location, we must have had some error
-                                 */
+                /*
+                 * tables, functions, parenthesis, and brackets, are marked as
+                 * operations, and they are assigned their proper operation
+                 * in this function. Thus, if we arrive to any of these in this
+                 * type tokens at this location, we must have had some error
+                 */
                 case ET_TBL:
                 case ET_FUNC:
                 case ET_LP:
@@ -425,7 +498,7 @@ ex_match(struct ex_ex *eptr, long int op)
                         /*
                          * Up to now we have marked the unary minuses as
                          * subrtacts.  Any minus that is the first one in
-                         * chain or is preceeded by anything except ')' and
+                         * chain or is preceded by anything except ')' and
                          * ']' is a unary minus.
                          */
                         if (eptr->ex_op == OP_SUB) {
@@ -444,24 +517,23 @@ ex_match(struct ex_ex *eptr, long int op)
                                 ret = ex_match(eptr + 1, OP_RB);
                                 if (!ret)
                                         return (ret);
-                                                                /*
-                                                                 * this is a special case handling
-                                                                 * for $1, $2 processing in Pd
-                                                                 *
-                                                                 * Pure data translates $#[x] (e.g. $1[x]) to 0[x]
-                                                                 * for abstracting patches so that later
-                                                                 * in the instantiation of the abstraction
-                                                                 * the $# is replaced with the proper argument
-                                                                 * of the abstraction
-                                                                 * so we change 0[x] to a special table pointing to null
-                                                                 * and catch errors in execution time
-                                                                 */
-                                                                if (!firstone && (eptr - 1)->ex_type == ET_INT &&
-                                                                                                                ((eptr - 1)->ex_int == 0)) {
-                                                                        (eptr - 1)->ex_type = ET_TBL;
-                                                                        (eptr - 1)->ex_ptr = (char *)0;
-                                                                }
-
+                                /*
+                                 * this is a special case handling
+                                 * for $1, $2 processing in Pd
+                                 *
+                                 * Pure data translates $#[x] (e.g. $1[x]) to 0[x]
+                                 * for abstracting patches so that later
+                                 * in the instantiation of the abstraction
+                                 * the $# is replaced with the proper argument
+                                 * of the abstraction
+                                 * so we change 0[x] to a special table pointing to null
+                                 * and catch errors in execution time
+                                 */
+                                if (!firstone && (eptr - 1)->ex_type == ET_INT &&
+                                    ((eptr - 1)->ex_int == 0)) {
+                                        (eptr - 1)->ex_type = ET_TBL;
+                                        (eptr - 1)->ex_ptr = (char *)0;
+                                }
                                 eptr->ex_type = ET_LB;
                                 eptr->ex_ptr = (char *) ret;
                                 eptr = ret;
@@ -474,7 +546,7 @@ ex_match(struct ex_ex *eptr, long int op)
                                 eptr->ex_type = ET_TBL;
                                 tmp = eptr->ex_ptr;
                                 if (ex_getsym(tmp, (t_symbol **)&(eptr->ex_ptr))) {
-                                        post("expr: syntax error: problms with ex_getsym\n");
+                                        post("expr: syntax error: problem with ex_getsym\n");
                                         return (exNULL);
                                 }
                                 fts_free((void *)tmp);
@@ -535,13 +607,14 @@ ex_parse(struct expr *x, struct ex_ex *iptr, struct ex_ex *optr, long int *argc)
 {
         struct ex_ex *eptr;
         struct ex_ex *lowpre = 0;       /* pointer to the lowest precedence */
-        struct ex_ex savex;
-                struct ex_ex *tmpex;
+        struct ex_ex savex = { 0 };
+        struct ex_ex *tmpex;
         long pre = HI_PRE;
         long count;
+        t_ex_func *f;                   /* function pointer */
 
         if (!iptr) {
-                post("ex_parse: input is null, iptr = 0x%zx\n", iptr);
+                post("ex_parse: input is null, iptr = 0x%lx\n", iptr);
                 return (exNULL);
         }
         if (!iptr->ex_type)
@@ -552,15 +625,10 @@ ex_parse(struct expr *x, struct ex_ex *iptr, struct ex_ex *optr, long int *argc)
          * the input token list, comma is explicitly checked here since
          * that is a special operator and is only legal in functions
          */
-        for (eptr = iptr, count = 0; eptr->ex_type; eptr++, count++)
+        for (eptr = iptr, count = 0; eptr->ex_type; eptr++, count++) {
                 switch (eptr->ex_type) {
                 case ET_SYM:
                 case ET_VSYM:
-                        if (!argc) {
-                                post("expr: syntax error: symbols allowed for functions only\n");
-                                ex_print(eptr);
-                                return (exNULL);
-                        }
                 case ET_INT:
                 case ET_FLT:
                 case ET_II:
@@ -571,18 +639,31 @@ ex_parse(struct expr *x, struct ex_ex *iptr, struct ex_ex *optr, long int *argc)
                 case ET_VAR:
                         if (!count && !eptr[1].ex_type) {
                                 *optr = *eptr;
-                                                                tmpex = optr;
-                                                                tmpex->ex_end = ++optr;
+                                tmpex = optr;
+                                tmpex->ex_end = ++optr;
+                                return (optr);
+                        }
+                        break;
+                case ET_SI:
+                        if (eptr[1].ex_type == ET_LB) {
+                                eptr->ex_flags |= EX_F_SI_TAB;
+                                goto processtable;
+                        }
+                        if (!count && !eptr[1].ex_type) {
+                                eptr->ex_flags &= ~EX_F_SI_TAB;
+                                *optr = *eptr;
+                                tmpex = optr;
+                                tmpex->ex_end = ++optr;
                                 return (optr);
                         }
                         break;
                 case ET_XI:
                 case ET_YO:
-                case ET_SI:
                 case ET_TBL:
+processtable:
                         if (eptr[1].ex_type != ET_LB) {
-                                post("expr: syntax error: brackets missing\n");
-                                ex_print(eptr);
+                                post("expr: '%s' - syntax error: brackets missing\n",
+                                                                        x->exp_string);
                                 return (exNULL);
                         }
                         /* if this table is the only token, parse the table */
@@ -601,14 +682,14 @@ ex_parse(struct expr *x, struct ex_ex *iptr, struct ex_ex *optr, long int *argc)
                 case ET_OP:
                         if (eptr->ex_op == OP_COMMA) {
                                 if (!argc || !count || !eptr[1].ex_type) {
-                                        post("expr: syntax error: illegal comma\n");
-                                        ex_print(eptr[1].ex_type ? eptr : iptr);
+                                        post("expr: '%s' - syntax error: illegal comma\n",
+                                                                x->exp_string);
                                         return (exNULL);
                                 }
                         }
                         if (!eptr[1].ex_type) {
-                                post("expr: syntax error: missing operand\n");
-                                ex_print(iptr);
+                                post("expr: '%s' - syntax error: missing operand\n",
+                                                                x->exp_string);
                                 return (exNULL);
                         }
                         if ((eptr->ex_op & PRE_MASK) <= pre) {
@@ -618,37 +699,46 @@ ex_parse(struct expr *x, struct ex_ex *iptr, struct ex_ex *optr, long int *argc)
                         break;
                 case ET_FUNC:
                         if (eptr[1].ex_type != ET_LP) {
-                                post("expr: ex_parse: no parenthesis\n");
+                                post("expr: '%s' - ex_parse: no parenthesis\n",
+                                                                        x->exp_string);
                                 return (exNULL);
                         }
                         /* if this function is the only token, parse it */
                         if (!count &&
                             !((struct ex_ex *) eptr[1].ex_ptr)[1].ex_type) {
-                                long ac;
+                                long ac = 0;
 
-                                if (eptr[1].ex_ptr == (char *) &eptr[2]) {
-                                        post("expr: syntax error: missing argument\n");
-                                        ex_print(eptr);
-                                        return (exNULL);
-                                }
-                                ac = 0;
-                                savex = *((struct ex_ex *) eptr[1].ex_ptr);
-                                *((struct ex_ex *) eptr[1].ex_ptr) = nullex;
                                 *optr = *eptr;
-                                lowpre = ex_parse(x, &eptr[2], optr + 1, &ac);
-                                if (!lowpre)
-                                        return (exNULL);
-                                ac++;
-                                if (ac !=
-                                    ((t_ex_func *)eptr->ex_ptr)->f_argc){
-                                        post("expr: syntax error: function '%s' needs %ld arguments\n",
-                                            ((t_ex_func *)eptr->ex_ptr)->f_name,
-                                            ((t_ex_func *)eptr->ex_ptr)->f_argc);
-                                        return (exNULL);
+                                savex = *((struct ex_ex *) eptr[1].ex_ptr);
+                                /* do we have arguments? */
+                                if (eptr[1].ex_ptr != (char *) &eptr[2]) {
+                                    /* parse the arguments */
+                                    savex = *((struct ex_ex *) eptr[1].ex_ptr);
+                                    *((struct ex_ex *) eptr[1].ex_ptr) = nullex;
+                                    lowpre = ex_parse(x, &eptr[2], optr + 1, &ac);
+                                    if (!lowpre)
+                                            return (exNULL);
+                                    ac++;
                                 }
+
+                                f  = (t_ex_func *) eptr->ex_ptr;
+                                if (f->f_argc != -1 && ac != f->f_argc){
+                                        ex_error(x,
+                                        "syntax error: function '%s' needs %ld arguments\n",
+                                            f->f_name, f->f_argc);
+                                        return (exNULL);
+                                } else
+                                        optr->ex_argc = ac;
                                 *((struct ex_ex *) eptr[1].ex_ptr) = savex;
-                                                                optr->ex_end = lowpre;
-                                return (lowpre);
+                                if (lowpre) {
+                                    optr->ex_end = lowpre;
+                                    return (lowpre);
+                                }
+                                /* we have no arguments */
+                                tmpex = optr;
+                                tmpex->ex_end = ++optr;
+                                return (optr);
+
                         }
                         eptr = (struct ex_ex *) eptr[1].ex_ptr;
                         break;
@@ -657,9 +747,9 @@ ex_parse(struct expr *x, struct ex_ex *iptr, struct ex_ex *optr, long int *argc)
                         if (!count &&
                             !((struct ex_ex *) eptr->ex_ptr)[1].ex_type) {
                                 if (eptr->ex_ptr == (char *)(&eptr[1])) {
-                                        post("expr: syntax error: empty '%s'\n",
+                                        ex_error(x, "expr: '%s' - syntax error: empty '%s'\n",
+                                            x->exp_string,
                                             eptr->ex_type==ET_LP?"()":"[]");
-                                        ex_print(eptr);
                                         return (exNULL);
                                 }
                                 savex = *((struct ex_ex *) eptr->ex_ptr);
@@ -673,19 +763,18 @@ ex_parse(struct expr *x, struct ex_ex *iptr, struct ex_ex *optr, long int *argc)
                         break;
                 case ET_STR:
                 default:
-                        ex_print(eptr);
-                        post("expr: ex_parse: type = 0x%zx\n", eptr->ex_type);
+                        post("expr: '%s' - ex_parse: type = 0x%lx\n",
+                                                        x->exp_string, eptr->ex_type);
                         return (exNULL);
                 }
+          }
 
         if (pre == HI_PRE) {
-                post("expr: syntax error: missing operation\n");
-                ex_print(iptr);
+                post("expr: '%s' - syntax error: missing operation\n", x->exp_string);
                 return (exNULL);
         }
         if (count < 2) {
-                post("expr: syntax error: mission operand\n");
-                ex_print(iptr);
+                post("expr: '%s' - syntax error: mission operand\n", x->exp_string);
                 return (exNULL);
         }
         if (count == 2) {
@@ -694,8 +783,8 @@ ex_parse(struct expr *x, struct ex_ex *iptr, struct ex_ex *optr, long int *argc)
                         return (exNULL);
                 }
                 if (!unary_op(lowpre->ex_op)) {
-                        post("expr: syntax error: not a uniary operator\n");
-                        ex_print(iptr);
+                        post("expr: '%s' - syntax error: not a uniary operator\n",
+                                                                        x->exp_string);
                         return (exNULL);
                 }
                 *optr = *lowpre;
@@ -705,34 +794,61 @@ ex_parse(struct expr *x, struct ex_ex *iptr, struct ex_ex *optr, long int *argc)
         }
         /* this is the case of using unary operator as a binary opetator */
         if (count == 3 && unary_op(lowpre->ex_op)) {
-                post("expr: syntax error, missing operand before unary operator\n");
-                ex_print(iptr);
+                post("expr: '%s' - syntax error, missing operand before unary operator\n",
+                                                                        x->exp_string);
                 return (exNULL);
         }
         if (lowpre == iptr) {
-                post("expr: syntax error: mission operand\n");
-                ex_print(iptr);
+                post("expr: '%s' - syntax error: mission operand\n", x->exp_string);
                 return (exNULL);
         }
         savex = *lowpre;
         *lowpre = nullex;
         if (savex.ex_op != OP_COMMA) {
-            *optr = savex;
+                *optr = savex;
                 eptr = ex_parse(x, iptr, optr + 1, argc);
-                } else {
-            (*argc)++;
+        } else {
+                (*argc)++;
                 eptr = ex_parse(x, iptr, optr, argc);
-                }
+        }
         if (eptr) {
                 eptr = ex_parse(x, &lowpre[1], eptr, argc);
                 *lowpre = savex;
         }
-                optr->ex_end = eptr;
+        optr->ex_end = eptr;
         return (eptr);
 }
 
 /*
- * this is the devide zero check for a a non devide operator
+ * ex_checklval -- check the left value for all stores ('=')
+ *                 all left values should either be a variable or a table
+ *                 return 1 if syntax error
+ *                 return 0 on success
+ */
+
+static int
+ex_checklval(struct expr *e, struct ex_ex *eptr)
+{
+        struct ex_ex *extmp;
+
+        extmp = eptr->ex_end;
+        while (eptr->ex_type && eptr != extmp) {
+                if (eptr->ex_type == ET_OP && eptr->ex_op == OP_STORE) {
+                        if (eptr[1].ex_type != ET_VAR &&
+                            eptr[1].ex_type != ET_SI &&
+                            eptr[1].ex_type != ET_TBL) {
+                                post("expr: '%s' - Bad left value: ", e->exp_string);
+                               return (1);
+                         }
+                }
+                eptr++;
+        }
+        return (0);
+}
+
+
+/*
+ * this is the divide zero check for a non divide operator
  */
 #define DZC(ARG1,OPR,ARG2)      (ARG1 OPR ARG2)
 
@@ -960,7 +1076,7 @@ ex_dzdetect(struct expr *expr)
 {
         char *etype;
 
-        if (!expr->exp_error & EE_DZ) {
+        if ((!expr->exp_error) & EE_DZ) {
                 if (IS_EXPR(expr))
                         etype = "expr";
                 else if (IS_EXPR_TILDE(expr))
@@ -971,7 +1087,7 @@ ex_dzdetect(struct expr *expr)
                         post ("expr -- ex_dzdetect internal error");
                         etype = "";
                 }
-                post ("%s divide by zero detected", etype);
+                post ("%s divide by zero detected - '%s'", etype, expr->exp_string);
                 expr->exp_error |= EE_DZ;
         }
 }
@@ -983,25 +1099,19 @@ ex_dzdetect(struct expr *expr)
  *            in the array.  This is a recursive routine.
  */
 
-/* SDY - potential memory leak
-all the returns in this function need to be changed so that the code
-ends up at the end to check for newly allocated right and left vectors which
-need to be freed
-
-look into the variable nullret
-*/
+/* SDY - look into the variable nullret */
 struct ex_ex *
 ex_eval(struct expr *expr, struct ex_ex *eptr, struct ex_ex *optr, int idx)
 /* the expr object data pointer */
 /* the operation stack */
 /* the result pointer */
-/* the sample numnber processed for fexpr~ */
+/* the sample number processed for fexpr~ */
 {
         int i, j;
         t_float *lp, *rp, *op; /* left, right, and out pointer to vectors */
         t_float scalar;
         int nullret = 0;                /* did we have an error */
-        struct ex_ex left, right;       /* left and right operands */
+        struct ex_ex left = { 0 }, right = { 0 };       /* left and right operands */
 
         left.ex_type = 0;
         left.ex_int = 0;
@@ -1029,16 +1139,24 @@ ex_eval(struct expr *expr, struct ex_ex *eptr, struct ex_ex *optr, int idx)
 
         case ET_SYM:
                 if (optr->ex_type == ET_VEC) {
-                        post_error((fts_object_t *) expr,
-                              "expr: ex_eval: cannot turn string to vector\n");
-                        return (exNULL);
-                }
-                *optr = *eptr;
+                        if (!(expr->exp_error & EE_BADSYM)) {
+                                expr->exp_error |= EE_BADSYM;
+                                post_error((fts_object_t *) expr,
+                                    "expr~: '%s': cannot convert string to vector\n",
+                                    expr->exp_string);
+                                post_error(expr,
+                                    "expr~: No more symbol-vector errors will be reported");
+                                post_error(expr,
+                                    "expr~: till the next reset");
+                        }
+                        ex_mkvector(optr->ex_vec, 0, expr->exp_vsize);
+                } else
+                        *optr = *eptr;
                 return (++eptr);
         case ET_II:
                 if (eptr->ex_int == -1) {
                         post_error((fts_object_t *) expr,
-                            "expr: ex_eval: inlet number not set\n");
+                            "expr: '%s': inlet number not set\n", expr->exp_string);
                         return (exNULL);
                 }
                 if (optr->ex_type == ET_VEC) {
@@ -1065,6 +1183,7 @@ ex_eval(struct expr *expr, struct ex_ex *eptr, struct ex_ex *optr, int idx)
                 }
                 return (++eptr);
 
+/* SDY ET_VSYM is gone? */
         case ET_VSYM:
                 if (optr->ex_type == ET_VEC) {
                         post_error((fts_object_t *) expr,
@@ -1077,6 +1196,8 @@ ex_eval(struct expr *expr, struct ex_ex *eptr, struct ex_ex *optr, int idx)
                         return (exNULL);
                 }
                 optr->ex_type = ET_SYM;
+                /* not a temporary symbol; do not free this ET_SYM expression */
+                optr->ex_flags &= ~EX_F_TSYM;
                 optr->ex_ptr = expr->exp_var[eptr->ex_int].ex_ptr;
                 return(++eptr);
 
@@ -1137,8 +1258,32 @@ ex_eval(struct expr *expr, struct ex_ex *eptr, struct ex_ex *optr, int idx)
                 return (eval_sigidx(expr, eptr, optr, idx));
 
         case ET_TBL:
-        case ET_SI:
                 return (eval_tab(expr, eptr, optr, idx));
+        case ET_SI:
+                /* check if the symbol input is a table */
+                if (eptr->ex_flags & EX_F_SI_TAB) {
+                        eptr = eval_tab(expr, eptr, optr, idx);
+                        return (eptr);
+                        //return (eval_tab(expr, eptr, optr, idx));
+                }
+                /* it is just a symbol input */
+                if (optr->ex_type == ET_VEC) {
+                        if (!(expr->exp_error & EE_BADSYM)) {
+                                expr->exp_error |= EE_BADSYM;
+                                post_error((fts_object_t *) expr,
+                                    "expr~: '%s': cannot convert string inlet to vector\n",
+                                    expr->exp_string);
+                                post_error(expr,
+                                    "expr~: No more symbol-vector errors will be reported");
+                                post_error(expr,
+                                    "expr~: till the next reset");
+                        }
+                        ex_mkvector(optr->ex_vec, 0, expr->exp_vsize);
+                        return (exNULL);
+                }
+                *optr = *eptr++;
+                return(eptr);
+
         case ET_FUNC:
                 return (eval_func(expr, eptr, optr, idx));
         case ET_VAR:
@@ -1234,7 +1379,8 @@ ex_eval(struct expr *expr, struct ex_ex *eptr, struct ex_ex *optr, int idx)
         case OP_SEMI:
         default:
                 post_error((fts_object_t *) expr,
-                    "expr: ex_print: bad op 0x%x\n", (unsigned)eptr->ex_op);
+                    "expr: '%s' - bad op 0x%x\n",
+                                        expr->exp_string, (unsigned)eptr->ex_op);
                 return (exNULL);
         }
 
@@ -1270,37 +1416,44 @@ eval_func(struct expr *expr, struct ex_ex *eptr, struct ex_ex *optr, int idx)
         int i;
         struct ex_ex args[MAX_ARGS];
         t_ex_func *f;
+        int argc;
 
+        argc = eptr->ex_argc;
         f = (t_ex_func *)(eptr++)->ex_ptr;
         if (!f || !f->f_name) {
                 return (exNULL);
         }
-        if (f->f_argc > MAX_ARGS) {
+        if (argc > MAX_ARGS) {
                 post_error((fts_object_t *) expr, "expr: eval_func: asking too many arguments\n");
                 return (exNULL);
         }
 
-                /*
-                 * We treat the "if" function differently to be able to evaluate
-                 * the args selectively based on the truth value of the "condition"
-                 */
-                if (f->f_func != (void (*)) ex_if) {
-                        for (i = 0; i < f->f_argc; i++) {
-                args[i].ex_type = 0;
-                args[i].ex_int = 0;
-                eptr = ex_eval(expr, eptr, &args[i], idx);
-                        }
-                (*f->f_func)(expr, f->f_argc, args, optr);
+        /*
+         * We treat the "if" function differently to be able to evaluate
+         * the args selectively based on the truth value of the "condition"
+         */
+        if (f->f_func != (void (*)) ex_if) {
+                for (i = 0; i < argc; i++) {
+                        args[i].ex_type = 0;
+                        args[i].ex_int = 0;
+                        eptr = ex_eval(expr, eptr, &args[i], idx);
+                }
+                (*f->f_func)(expr, argc, args, optr);
         } else {
-                        for (i = 0; i < f->f_argc; i++) {
-                args[i].ex_type = 0;
-                args[i].ex_int = 0;
-                        }
-                eptr = ex_if(expr, eptr, optr, args, idx);
+                for (i = 0; i < argc; i++) {
+                        args[i].ex_type = 0;
+                        args[i].ex_int = 0;
                 }
-        for (i = 0; i < f->f_argc; i++) {
+                eptr = ex_if(expr, eptr, optr, args, idx);
+        }
+        for (i = 0; i < argc; i++) {
                 if (args[i].ex_type == ET_VEC)
-                        fts_free(args[i].ex_vec);
+                        free(args[i].ex_vec);
+                else if (args[i].ex_type == ET_SYM
+                                && args[i].ex_flags & EX_F_TSYM) {
+                        free(args[i].ex_ptr);
+                        args[i].ex_flags &= ~EX_F_TSYM;
+                }
         }
         return (eptr);
 }
@@ -1317,15 +1470,17 @@ eval_store(struct expr *expr, struct ex_ex *eptr, struct ex_ex *optr, int idx)
 /* the operation stack */
 /* the result pointer */
 {
-        struct ex_ex arg;
-        struct ex_ex rval;
+        struct ex_ex arg = { 0 };
+        struct ex_ex rval = { 0 };
         struct ex_ex *retp;
-        int isvalue;
         char *tbl = (char *) 0;
         char *var = (char *) 0;
         int badleft = 0;
         int notable = 0;
 
+        arg.ex_type = ET_INT;
+        arg.ex_int = 0;
+
         switch (eptr->ex_type) {
         case ET_VAR:
                 var = (char *) eptr->ex_ptr;
@@ -1342,18 +1497,22 @@ eval_store(struct expr *expr, struct ex_ex *eptr, struct ex_ex *optr, int idx)
                 tbl = (char *) eptr->ex_ptr;
                 break;
         case ET_SI:
+                if (eptr->ex_flags & EX_F_SI_TAB) {
+                        post("expr: symbol cannot be a left value '%s'",
+                                expr->exp_string);
+                        retp = exNULL;
+                        return (retp);
+                }
                 if (!expr->exp_var[eptr->ex_int].ex_ptr) {
                         if (!(expr->exp_error & EE_NOTABLE)) {
-                                post("expr: syntax error: no string for inlet %d",
-                                                                                                                eptr->ex_int + 1);
-                                post("expr: No more table errors will be reported");
-                                post("expr: till the next reset");
+                                post_error(expr, "expr: '%s': syntax error: no string for inlet %ld",
+                                            expr->exp_string, eptr->ex_int + 1);
+                                post_error(expr, "expr: No more table errors will be reported");
+                                post_error(expr, "expr: till the next reset");
                                 expr->exp_error |= EE_NOTABLE;
                         }
                         badleft++;
-                        post("Bad left value: ");
-                        /* report Error */
-                        ex_print(eptr);
+                        post("expr: '%s' - Bad left value", expr->exp_string);
                         retp = exNULL;
                         return (retp);
                 } else {
@@ -1361,9 +1520,8 @@ eval_store(struct expr *expr, struct ex_ex *eptr, struct ex_ex *optr, int idx)
                 }
                 break;
         default:
-                post("Bad left value: ");
+                post("expr: '%s' - Bad left value", expr->exp_string);
                 /* report Error */
-                ex_print(eptr);
                 retp = exNULL;
                 return (retp);
         }
@@ -1379,7 +1537,7 @@ eval_store(struct expr *expr, struct ex_ex *eptr, struct ex_ex *optr, int idx)
         optr->ex_type = ET_INT;
         optr->ex_int = 0;
         if (!notable || badleft)
-                (void)max_ex_tab_store(expr, (t_symbol *)tbl, &arg, &rval, optr);
+                (void)max_ex_tab_store(expr, (t_symbol *)tbl, &arg, &rval,optr);
         if (arg.ex_type == ET_VEC)
                 fts_free(arg.ex_vec);
         return (eptr);
@@ -1394,15 +1552,15 @@ eval_tab(struct expr *expr, struct ex_ex *eptr, struct ex_ex *optr, int idx)
 /* the operation stack */
 /* the result pointer */
 {
-        struct ex_ex arg;
+        struct ex_ex arg = { 0 };
         char *tbl = (char *) 0;
         int notable = 0;
 
         if (eptr->ex_type == ET_SI) {
                 if (!expr->exp_var[eptr->ex_int].ex_ptr) {
                         if (!(expr->exp_error & EE_NOTABLE)) {
-                                post("expr: syntax error: no string for inlet %d",
-                                                                                                                        eptr->ex_int + 1);
+                                post_error(expr, "expr:'%s': no string for inlet %ld",
+                                                                                                                        expr->exp_string, eptr->ex_int + 1);
                                 post("expr: No more table errors will be reported");
                                 post("expr: till the next reset");
                                 expr->exp_error |= EE_NOTABLE;
@@ -1427,10 +1585,8 @@ eval_tab(struct expr *expr, struct ex_ex *eptr, struct ex_ex *optr, int idx)
         if (!(eptr = ex_eval(expr, ++eptr, &arg, idx)))
                 return (eptr);
 
-        optr->ex_type = ET_INT;
-        optr->ex_int = 0;
         if (!notable)
-                (void)max_ex_tab(expr, (t_symbol *)tbl, &arg, optr);
+                (void)max_ex_tab(expr, (t_symbol *)tbl, &arg, 0, optr);
         if (arg.ex_type == ET_VEC)
                 fts_free(arg.ex_vec);
         return (eptr);
@@ -1445,19 +1601,18 @@ eval_var(struct expr *expr, struct ex_ex *eptr, struct ex_ex *optr, int idx)
 /* the operation stack */
 /* the result pointer */
 {
-        struct ex_ex arg;
         char *var = (char *) 0;
         int novar = 0;
 
         if (eptr->ex_type == ET_SI) {
                 if (!expr->exp_var[eptr->ex_int].ex_ptr) {
-                                if (!(expr->exp_error & EE_NOVAR)) {
-                                        post("expr: syntax error: no string for inlet %d", eptr->ex_int + 1);
-                                        post("expr: No more table errors will be reported");
-                                        post("expr: till the next reset");
-                                        expr->exp_error |= EE_NOVAR;
-                                }
-                                novar++;
+                        if (!(expr->exp_error & EE_NOVAR)) {
+                                post("expr: syntax error: no string for inlet %d", eptr->ex_int + 1);
+                                post("expr: no more table errors will be reported");
+                                post("expr: till the next reset");
+                                expr->exp_error |= EE_NOVAR;
+                        }
+                        novar++;
                 } else
                         var = (char *) expr->exp_var[eptr->ex_int].ex_ptr;
         } else if (eptr->ex_type == ET_VAR)
@@ -1468,10 +1623,16 @@ eval_var(struct expr *expr, struct ex_ex *eptr, struct ex_ex *optr, int idx)
 
         }
 
-        optr->ex_type = ET_INT;
-        optr->ex_int = 0;
         if (!novar)
                 (void)max_ex_var(expr, (t_symbol *)var, optr, idx);
+        else {
+            if (optr->ex_type == ET_VEC)
+                ex_mkvector(optr->ex_vec, 0, expr->exp_vsize);
+            else {
+                optr->ex_type = ET_INT;
+                optr->ex_int = 0;
+            }
+        }
         return (++eptr);
 }
 
@@ -1485,12 +1646,11 @@ eval_sigidx(struct expr *expr, struct ex_ex *eptr, struct ex_ex *optr, int idx)
 /* the result pointer */
 /* the index */
 {
-        struct ex_ex arg;
+        struct ex_ex arg = { 0 };
         struct ex_ex *reteptr;
-        int i = 0, j = 0;
+        int i = 0;
         t_float fi = 0,         /* index in float */
               rem_i = 0;        /* remains of the float */
-        char *tbl;
 
         arg.ex_type = 0;
         arg.ex_int = 0;
@@ -1501,7 +1661,7 @@ eval_sigidx(struct expr *expr, struct ex_ex *eptr, struct ex_ex *optr, int idx)
                 rem_i =  arg.ex_flt - i;        /* remains of integer */
         } else if (arg.ex_type == ET_INT) {
                 fi = arg.ex_int;                /* float index */
-                i = arg.ex_int;
+                i = (int) arg.ex_int;           /* integer index */
                 rem_i = 0;
         } else {
                 post("eval_sigidx: bad res type (%d)", arg.ex_type);
@@ -1514,11 +1674,10 @@ eval_sigidx(struct expr *expr, struct ex_ex *eptr, struct ex_ex *optr, int idx)
                 if (fi > 0) {
                         if (!(expr->exp_error & EE_BI_INPUT)) {
                                 expr->exp_error |= EE_BI_INPUT;
-                          post("expr: input vector index > 0, (vector x%d[%f])",
-                                               eptr->ex_int + 1, i + rem_i);
+                          post("expr: '%s' - input vector index > 0, (vector x%d[%f])",
+                                       expr->exp_string, eptr->ex_int + 1, i + rem_i);
                                 post("fexpr~: index assumed to be = 0");
                                 post("fexpr~: no error report till next reset");
-                                ex_print(eptr);
                         }
                         /* just replace it with zero */
                         i = 0;
@@ -1529,8 +1688,8 @@ eval_sigidx(struct expr *expr, struct ex_ex *eptr, struct ex_ex *optr, int idx)
                                                 expr->exp_p_var[eptr->ex_int])) {
                         if (!(expr->exp_error & EE_BI_INPUT)) {
                                 expr->exp_error |= EE_BI_INPUT;
-                                post("expr: input vector index <  -VectorSize, (vector x%d[%f])", eptr->ex_int + 1, fi);
-                                ex_print(eptr);
+                                post("expr: '%s' - input vector index <  -VectorSize, (vector x%d[%f])",
+                                        expr->exp_string, eptr->ex_int + 1, fi);
                                 post("fexpr~: index assumed to be = -%d",
                                         expr->exp_vsize);
                                 post("fexpr~: no error report till next reset");
@@ -1545,15 +1704,15 @@ eval_sigidx(struct expr *expr, struct ex_ex *eptr, struct ex_ex *optr, int idx)
                 if (fi >= 0) {
                         if (!(expr->exp_error & EE_BI_OUTPUT)) {
                                 expr->exp_error |= EE_BI_OUTPUT;
-                                post("fexpr~: bad output index, (%f)", fi);
-                                ex_print(eptr);
+                                post("fexpr~: '%s' - bad output index, (%f)",
+                                                                expr->exp_string, fi);
                                 post("fexpr~: no error report till next reset");
                                 post("fexpr~: index assumed to be = -1");
                         }
                         i = -1;
                 }
                 if (eptr->ex_int >= expr->exp_nexpr) {
-                        post("fexpr~: $y%d illegal: not that many exprs",
+                        post("fexpr~: $y%d illegal: not that many expr's",
                                                                 eptr->ex_int);
                         optr->ex_flt = 0;
                         return (reteptr);
@@ -1563,8 +1722,8 @@ eval_sigidx(struct expr *expr, struct ex_ex *eptr, struct ex_ex *optr, int idx)
                                                 expr->exp_p_res[eptr->ex_int])) {
                         if (!(expr->exp_error & EE_BI_OUTPUT)) {
                                 expr->exp_error |= EE_BI_OUTPUT;
-                                post("fexpr~: bad output index, (%f)", fi);
-                                ex_print(eptr);
+                                post("fexpr~: '%s' - bad output index, (%f)",
+                                                                expr->exp_string, fi);
                                 post("fexpr~: index assumed to be = -%d",
                                         expr->exp_vsize);
                         }
@@ -1635,10 +1794,11 @@ cal_sigidx(struct ex_ex *optr,  /* The output value */
 int
 getoken(struct expr *expr, struct ex_ex *eptr)
 {
-        char *p;
+        char *p, *tmpstr;
         long i;
 
 
+
         if (!expr->exp_str) {
                 post("expr: getoken: expression string not set\n");
                 return (0);
@@ -1789,7 +1949,7 @@ retry:
                 case 'x':
                         if (IS_FEXPR_TILDE(expr)) {
                                 eptr->ex_type = ET_XI;
-                                if (isdigit(*expr->exp_str))
+                                if (isdigit((int)(*expr->exp_str)))
                                         break;
                                 /* for $x[] is a shorhand for $x1[] */
                                 /* eptr->ex_int = 0; */
@@ -1805,7 +1965,7 @@ retry:
                         if (IS_FEXPR_TILDE(expr)) {
                                 eptr->ex_type = ET_YO;
                                 /*$y takes no number */
-                                if (isdigit(*expr->exp_str))
+                                if (isdigit((int)(*expr->exp_str)))
                                         break;
                                 /* for $y[] is a shorhand for $y1[] */
                                 /* eptr->ex_int = 0; */
@@ -1814,9 +1974,10 @@ retry:
                                 goto noinletnum;
                         }
                         post("$y works only for fexpr~");
+                                /* falls through */
                                 /*
-                                 * allow $# for abstration argument substitution
-                                 *  $1+1 is translated to 0+1 and in abstration substitution
+                                 * allow $# for abstraction argument substitution
+                                 *  $1+1 is translated to 0+1 and in abstraction substitution
                                  *  the value is replaced with the new string
                                  */
                                 case '0':
@@ -1857,7 +2018,7 @@ retry:
                  * make the user inlets one based rather than zero based
                  * therefore we decrement the number that user has supplied
                  */
-                if (!eptr->ex_op || (eptr->ex_op)-- > MAX_VARS) {
+                if (!eptr->ex_op || (eptr->ex_op)-- > EX_MAX_INLETS) {
                  post("expr: syntax error: inlet or outlet out of range: %s\n",
                                                              expr->exp_str);
                         return (1);
@@ -1866,7 +2027,7 @@ retry:
                 /*
                  * until we can change the input type of inlets on
                  * the fly (at pd_new()
-                 * time) the first input to expr~ is always a vectore
+                 * time) the first input to expr~ is always a vector
                  * and $f1 or $i1 is
                  * illegal for fexpr~
                  */
@@ -1891,39 +2052,75 @@ retry:
                 expr->exp_str = p;
 noinletnum:
                 break;
+
         case '"':
-                {
-                        struct ex_ex ex;
+        {
+                struct ex_ex ex = { 0 };
+                char *savestrp;
 
-                        p = expr->exp_str;
-                        if (!*expr->exp_str || *expr->exp_str == '"') {
-                                post("expr: syntax error: empty symbol: %s\n", --expr->exp_str);
-                                return (1);
-                        }
+                p = expr->exp_str;
+                /*
+                 * Before strings were supported a string inlet for functions
+                 * such as size(), avg(), etc had the hacky syntax as
+                 *   size ("$s2")
+                 * all other inlet in strings such as 'size ("$f1")'
+                 * were considered syntax error
+                 * Now that strings are processed fully, the quotes are
+                 * no longer necessary, however, in order to keep a backward
+                 * compatibility we process func("$s#") as func($s#) with
+                 * a message to the user as this will become deprecated
+                 */
+                if (*p == '$' && p[1] == 's') {
+                        /* check for possible backward compatibilty */
+                        savestrp = expr->exp_str;
                         if (getoken(expr, &ex))
                                 return (1);
-                        switch (ex.ex_type) {
-                        case ET_STR:
-                                if (ex_getsym(ex.ex_ptr, (t_symbol **)&(eptr->ex_ptr))) {
-                                        post("expr: syntax error: getoken: problms with ex_getsym\n");
-                                        return (1);
-                                }
-                                eptr->ex_type = ET_SYM;
-                                break;
-                        case ET_SI:
+                        if (ex.ex_type == ET_SI && *expr->exp_str++ == '"') {
+                                /* this is the old case */
                                 *eptr = ex;
-                                eptr->ex_type = ET_VSYM;
+                                ex_error(expr, "expr: deprecated old func(\"$s#\") format detected;\nDouble quotes should no longer be used\nUse func($s#) instead");
                                 break;
-                        default:
-                                post("expr: syntax error: bad symbol name: %s\n", p);
-                                return (1);
                         }
-                        if (*expr->exp_str++ != '"') {
-                                post("expr: syntax error: missing '\"'\n");
+                        /*
+                         * not in compatibility mode
+                         * parse as usual
+                         */
+                        expr->exp_str = savestrp;
+                        p = expr->exp_str;
+                }
+
+                i = 0;
+                while (*p != '"') {
+                        if (!*p) { /* missing close quote */
+                                post("expr: syntax error: missing '\"': \n", expr->exp_str - 1);
                                 return (1);
                         }
-                        break;
+                        i++;
+                        p++;
                 }
+                tmpstr= calloc(i + 1, sizeof (char));
+                if (!tmpstr) {
+                        post("expr: no memory %s: %d\n", __FILE__, __LINE__);
+                        return (1);
+                }
+                strncpy(tmpstr, expr->exp_str, i);
+                expr->exp_str= p + 1;
+                /*
+                 * ET_SYM in the expr string are converted to symbols,
+                 * to avoid the symbol generation in eval
+                 */
+                if (ex_getsym(tmpstr, (t_symbol **)&(eptr->ex_ptr))) {
+                        fts_free(tmpstr);
+                        post("expr: syntax error: getoken: problms with ex_getsym %s:%d\n" __FILE__, __LINE__);
+                        return (1);
+                 }
+                fts_free(tmpstr);
+                eptr->ex_type = ET_SYM;
+                /* not a temporary symbol; do not free this ET_SYM expression during eval*/
+                eptr->ex_flags &= ~EX_F_TSYM;
+                break;
+
+        }
         case '.':
         case '0':
         case '1':
@@ -1973,7 +2170,8 @@ noinletnum:
 char *
 atoif(char *s, long int *value, long int *type)
 {
-    char *p;
+        const char*s0 = s;
+        char *p;
         long lval;
         float fval;
 
@@ -1994,6 +2192,9 @@ atoif(char *s, long int *value, long int *type)
                 }
                 s++;
         }
+        if(s0 == p)
+            return 0;
+
         *type = ET_INT;
         *((t_int *) value) = lval;
         return (p);
@@ -2014,6 +2215,23 @@ find_func(char *s)
         return ((t_ex_func *) 0);
 }
 
+/*
+ * ex_error - print an error message
+ */
+
+void
+ex_error(t_expr *e, const char *fmt, ...)
+{
+    char buf[1024];
+    va_list args;
+
+    post_error( (fts_object_t *) e, "expr: '%s'", e->exp_string);
+    va_start(args, fmt);
+    vsprintf(buf, fmt, args);
+    post_error((fts_object_t *) e, "%s", buf);
+    va_end(args);
+
+}
 
 /*
  * ex_print -- print an expression array
@@ -2022,9 +2240,11 @@ find_func(char *s)
 void
 ex_print(struct ex_ex *eptr)
 {
-                struct ex_ex *extmp;
+        struct ex_ex *extmp;
+
+#define post printf
 
-                extmp = eptr->ex_end;
+        extmp = eptr->ex_end;
         while (eptr->ex_type && eptr != extmp) {
                 switch (eptr->ex_type) {
                 case ET_INT:
@@ -2041,11 +2261,18 @@ ex_print(struct ex_ex *eptr)
                                 post("%s ", "$$");
                             break;
                         }
+                            /* falls through */
                 case ET_VAR:
                         post("%s ", ex_symname((fts_symbol_t )eptr->ex_ptr));
                         break;
                 case ET_SYM:
-                        post("\"%s\" ", ex_symname((fts_symbol_t )eptr->ex_ptr));
+                        if (eptr->ex_flags & EX_F_TSYM) {
+                                post("\"%s\"\n", eptr->ex_ptr);
+                                /* temporary symbols (TSYM) are just one off */
+                                return;
+                        } else
+                                post("\"%s\" ",
+                                   ex_symname((fts_symbol_t )eptr->ex_ptr));
                         break;
                 case ET_VSYM:
                         post("\"$s%ld\" ", eptr->ex_int + 1);
@@ -2077,21 +2304,21 @@ ex_print(struct ex_ex *eptr)
                         post("$f%ld ", eptr->ex_int + 1);
                         break;
                 case ET_SI:
-                        post("$s%zx ", eptr->ex_ptr);
+                        post("$s%lx ", (long) eptr->ex_ptr + 1);
                         break;
                 case ET_VI:
-                        post("$v%zx ", eptr->ex_vec);
+                        post("$v%lx ", (long) eptr->ex_vec);
                         break;
                 case ET_VEC:
-                        post("vec = %ld ", eptr->ex_vec);
+                        post("vec = %ld ", (long) eptr->ex_vec);
                         break;
                 case ET_YOM1:
                 case ET_YO:
-                        post("$y%d", eptr->ex_int + 1);
+                        post("$y%ld", eptr->ex_int + 1);
                         break;
                 case ET_XI:
                 case ET_XI0:
-                        post("$x%d", eptr->ex_int + 1);
+                        post("$x%ld", eptr->ex_int + 1);
                         break;
                 case ET_OP:
                         switch (eptr->ex_op) {
@@ -2180,11 +2407,11 @@ ex_print(struct ex_ex *eptr)
                                 post("%c", ';');
                                 break;
                         default:
-                                post("expr: ex_print: bad op 0x%zx\n", eptr->ex_op);
+                                post("expr: ex_print: bad op 0x%lx\n", eptr->ex_op);
                         }
                         break;
                 default:
-                        post("expr: ex_print: bad type 0x%zx\n", eptr->ex_type);
+                        post("expr: ex_print: bad type 0x%lx\n", eptr->ex_type);
                 }
                 eptr++;
         }
@@ -2192,5 +2419,5 @@ ex_print(struct ex_ex *eptr)
 }
 
 #ifdef _WIN32
-void ABORT( void) {bug("expr");}
+void ABORT(void) {bug("expr");}
 #endif
diff --git a/pd/src/x_vexp.h b/pd/src/x_vexp.h
index bc3b4204074e9f319dc087abcb62b67912ae3313..f53ce42d411aa1d0e608b466eedf7d7624fbb8d1 100644
--- a/pd/src/x_vexp.h
+++ b/pd/src/x_vexp.h
@@ -5,22 +5,35 @@
 /* "expr" was written by Shahrokh Yadegari c. 1989. -msp */
 /* "expr~" and "fexpr~" conversion by Shahrokh Yadegari c. 1999,2000 */
 
-#define PD 1
-#ifdef MSP
-#undef PD
+#define MSP
+#ifdef PD
+#undef MSP
 #endif
 
 #ifdef PD
 #include "m_pd.h"
 #else /* MSP */
-#include "ext.h"
-#include "z_dsp.h"
+typedef float t_float;      // t_float is from m_pd.h
 #endif
 
-#define fts_malloc malloc
-#define fts_calloc calloc
+#define fts_malloc ex_malloc
+#define fts_calloc ex_calloc
 #define fts_free free
-#define fts_realloc realloc
+#define fts_realloc ex_realloc
+
+void *
+ex_calloc(size_t count, size_t size);
+
+void
+ex_free(void *ptr);
+
+void *
+ex_malloc(size_t size);
+
+void *
+ex_realloc(void *ptr, size_t size);
+
+
 #define fts_atom_t t_atom
 #define fts_object_t t_object
 typedef t_symbol *fts_symbol_t;
@@ -54,11 +67,11 @@ void pd_error(void *object, char *fmt, ...);
 
 /*
  * Currently the maximum number of variables (inlets) that are supported
- * is 10.
+ * is 100.
  */
 
-#define MAX_VARS        100
-#define MINODES         10 /* was 200 */
+#define EX_MAX_INLETS   100    /* max number if inlets or outlets */
+#define EX_MINODES      30
 
 /* terminal defines */
 
@@ -118,7 +131,11 @@ struct ex_ex {
 #define ex_op           ex_cont.op
 #define ex_ptr          ex_cont.ptr
         long ex_type;           /* type of the node */
-                struct ex_ex *ex_end;   /* the node after the end of this expression */
+        struct ex_ex *ex_end;   /* the node after the end of this expression */
+#define EX_F_TSYM       0x1     /* mark this unit as temporary symbol for evaluation */
+#define EX_F_SI_TAB     0x2   /* The symbol input is a table */
+        short ex_flags;
+        short  ex_argc;           /* number of actual arguments */
 };
 #define exNULL  ((struct ex_ex *)0)
 
@@ -183,6 +200,7 @@ struct ex_ex {
 #define EE_BI_INPUT     0x04    /* Bad input index */
 #define EE_NOTABLE      0x08    /* NO TABLE */
 #define EE_NOVAR        0x10    /* NO VARIABLE */
+#define EE_BADSYM       0x20    /* Symbol passed for Vector */
 
 typedef struct expr {
 #ifdef PD
@@ -195,55 +213,48 @@ typedef struct expr {
         int     exp_nexpr;              /* number of expressions */
         char    *exp_string;            /* the full expression string */
         char    *exp_str;               /* current parsing position */
-        t_outlet *exp_outlet[MAX_VARS];
+        t_outlet *exp_outlet[EX_MAX_INLETS];
 #ifdef PD
         struct _exprproxy *exp_proxy;
 #else /* MAX */
-        void *exp_proxy[MAX_VARS];
+        void *exp_proxy[EX_MAX_INLETS];
         long exp_proxy_id;
 #endif
-        struct ex_ex *exp_stack[MAX_VARS];
-        struct ex_ex exp_var[MAX_VARS];
-        struct ex_ex exp_res[MAX_VARS]; /* the evluation result */
-        t_float *exp_p_var[MAX_VARS];
-        t_float *exp_p_res[MAX_VARS];   /* the previous evaluation result */
-        t_float *exp_tmpres[MAX_VARS];  /* temporty result for fexpr~ */
+        struct ex_ex *exp_stack[EX_MAX_INLETS];
+        struct ex_ex exp_var[EX_MAX_INLETS];
+        struct ex_ex exp_res[EX_MAX_INLETS]; /* the evluation result */
+        t_float *exp_p_var[EX_MAX_INLETS];
+        t_float *exp_p_res[EX_MAX_INLETS];   /* the previous evaluation result */
+        t_float *exp_tmpres[EX_MAX_INLETS];  /* temporty result for fexpr~ */
         int exp_vsize;                  /* the size of the signal vector */
         int exp_nivec;                  /* # of vector inlets */
         t_float exp_f;          /* control value to be transformed to signal */
 } t_expr;
 
 typedef struct ex_funcs {
-        char *f_name;                                   /* function name */
+        char *f_name;                            /* function name */
+        /* the real function performing the function  */
         void (*f_func)(t_expr *, long, struct ex_ex *, struct ex_ex *);
-          /* the real function performing the function (void, no return!!!) */
         long f_argc;                            /* number of arguments */
 } t_ex_func;
 
-/* function prototypes for pd-related functions called withing vexp.h */
+/* function prototypes for pd-related functions called within vexp.h */
 
 extern int
 max_ex_tab_store(struct expr *expr, t_symbol *s, struct ex_ex *arg,
-                                                                        struct ex_ex *rval, struct ex_ex *optr);
+                                struct ex_ex *rval, struct ex_ex *optr);
 extern int
 max_ex_tab(struct expr *expr, t_symbol *s, struct ex_ex *arg,
-                                                                                                                struct ex_ex *optr);
+                                        int interpol, struct ex_ex *optr);
 extern int max_ex_var(struct expr *expr, t_symbol *s, struct ex_ex *optr,
-                                                                                                                                        int idx);
-extern int max_ex_var_store(struct expr *, t_symbol *, struct ex_ex *, struct ex_ex *);
+                                                                    int idx);
+extern int max_ex_var_store(struct expr *, t_symbol *, struct ex_ex *,
+                                                            struct ex_ex *);
 extern int ex_getsym(char *p, t_symbol **s);
-extern const char *ex_symname(t_symbol *s);
+extern char *ex_symname(t_symbol *s);
 void ex_mkvector(t_float *fp, t_float x, int size);
-extern void ex_size(t_expr *expr, long int argc, struct ex_ex *argv,
-                                                        struct ex_ex *optr);
-extern void ex_sum(t_expr *expr, long int argc, struct ex_ex *argv,                                                                     struct ex_ex *optr);
-extern void ex_Sum(t_expr *expr, long int argc, struct ex_ex *argv,                                                                     struct ex_ex *optr);
-extern void ex_avg(t_expr *expr, long int argc, struct ex_ex *argv,                                                                     struct ex_ex *optr);
-extern void ex_Avg(t_expr *expr, long int argc, struct ex_ex *argv,                                                                     struct ex_ex *optr);
-extern void ex_store(t_expr *expr, long int argc, struct ex_ex *argv,                                                                   struct ex_ex *optr);
-
-int value_getonly(t_symbol *s, t_float *f);
 
+void ex_error(t_expr *e, const char *fmt, ...);
 
 /* These pragmas are only used for MSVC, not MinGW or Cygwin <hans@at.or.at> */
 #ifdef _MSC_VER
diff --git a/pd/src/x_vexp_fun.c b/pd/src/x_vexp_fun.c
index c54cced359b5cff0ef8086bcd2c2eaa4e42debba..1fbef15c5e926e02bb6daea2ac2b884043e288e3 100644
--- a/pd/src/x_vexp_fun.c
+++ b/pd/src/x_vexp_fun.c
@@ -14,7 +14,7 @@
  *      added floor and ceil for expr -- Orm Finnendahl
  *
  * July 2002 --sdy
- *      added the following math funtions:
+ *      added the following math functions:
  *              cbrt - cube root
  *              erf - error function
  *              erfc - complementary error function
@@ -31,24 +31,29 @@
  *
  *      The following are done but not popular enough in math libss
  *      to be included yet
- *              hypoth - Euclidean distance function
+ *              hypot - Euclidean distance function
  *              trunc
  *              round
  *              nearbyint -
  *  November 2015
- *                              - drem() is now obsolete but it is kept here so that other patches do not break
- *                              - added remainder() - floating-point remainder function
- *                              - fixed the bug that unary operators could be used as
- *                                binary ones (10 ~ 1)
- *                              - fixed ceil() and floor() which should have only one argument
- *                              - added copysign  (the previous one "copysig" which was
- *                                defined with one argument was kept for compatibilty)
- *                              - fixed sum("table"), and Sum("table", x, y)
- *                              - deleted avg(), Avg() as they can be simple expressions
- *                              - deleted store as this can be achieved by the '=' operator
+ *       - drem() is now obsolete but it is kept here so that other
+ *         patches do not break
+ *       - added remainder() - floating-point remainder function
+ *       - fixed the bug that unary operators could be used as
+ *         binary ones (10 ~ 1)
+ *       - fixed ceil() and floor() which should have only one argument
+ *       - added copysign  (the previous one "copysig" which was
+ *         defined with one argument was kept for compatibility)
+ *       - fixed sum("table"), and Sum("table", x, y)
+ *       - deleted avg(), Avg() as they can be simple expressions
+ *       - deleted store as this can be achieved by the '=' operator
  *  July 2017 --sdy
  *
- *              - ex_if() is reworked to only evaluate either the left or the right arg
+ *      - ex_if() is reworked to only evaluate either the left or the right arg
+ *  October 2020 --sdy
+ *      - fact() (factorial) now calculates and returns its value in double
+ *      - Added mtof(), mtof(), dbtorms(), rmstodb(), powtodb(), dbtopow()
+ *
  */
 
 
@@ -72,11 +77,9 @@
 
 #include <stdlib.h>
 #include <string.h>
+#include <ctype.h>
 
-#define __STRICT_BSD__
 #include <math.h>
-#undef __STRICT_BSD__
-
 
 #include "x_vexp.h"
 
@@ -119,7 +122,13 @@ struct ex_ex * ex_if(t_expr *expr, struct ex_ex *argv, struct ex_ex *optr,
 static void ex_ldexp(t_expr *expr, long argc, struct ex_ex *argv, struct ex_ex *optr);
 static void ex_imodf(t_expr *expr, long argc, struct ex_ex *argv, struct ex_ex *optr);
 static void ex_modf(t_expr *expr, long argc, struct ex_ex *argv, struct ex_ex *optr);
-#if !defined(_MSC_VER) || (_MSC_VER >= 17000)
+static void ex_mtof(t_expr *expr, long argc, struct ex_ex *argv, struct ex_ex *optr);
+static void ex_ftom(t_expr *expr, long argc, struct ex_ex *argv, struct ex_ex *optr);
+static void ex_dbtorms(t_expr *expr, long argc, struct ex_ex *argv, struct ex_ex *optr);
+static void ex_rmstodb(t_expr *expr, long argc, struct ex_ex *argv, struct ex_ex *optr);
+static void ex_dbtopow(t_expr *expr, long argc, struct ex_ex *argv, struct ex_ex *optr);
+static void ex_powtodb(t_expr *expr, long argc, struct ex_ex *argv, struct ex_ex *optr);
+#if !defined(_MSC_VER) || (_MSC_VER >= 1700)
 static void ex_cbrt(t_expr *expr, long argc, struct ex_ex *argv, struct ex_ex *optr);
 static void ex_erf(t_expr *expr, long argc, struct ex_ex *argv, struct ex_ex *optr);
 static void ex_erfc(t_expr *expr, long argc, struct ex_ex *argv, struct ex_ex *optr);
@@ -133,12 +142,44 @@ static void ex_drem(t_expr *expr, long argc, struct ex_ex *argv, struct ex_ex *o
 static void ex_remainder(t_expr *expr, long argc, struct ex_ex *argv, struct ex_ex *optr);
 static void ex_round(t_expr *expr, long argc, struct ex_ex *argv, struct ex_ex *optr);
 static void ex_trunc(t_expr *expr, long argc, struct ex_ex *argv, struct ex_ex *optr);
+static void ex_hypot(t_expr *expr, long argc, struct ex_ex *argv, struct ex_ex *optr);
 static void ex_nearbyint(t_expr *expr, long argc, struct ex_ex *argv, struct ex_ex *optr);
 #endif
-#ifdef notdef
-/* the following will be added once they are more popular in math libraries */
-static void ex_hypoth(t_expr *expr, long argc, struct ex_ex *argv, struct ex_ex *optr);
-#endif
+
+static void ex_symbol1(t_expr *expr, long argc, struct ex_ex *argv, struct ex_ex *optr);
+static void ex_symbol(t_expr *expr, long argc, struct ex_ex *argv, struct ex_ex *optr);
+static void ex_tolower(t_expr *expr, long argc, struct ex_ex *argv, struct ex_ex *optr);
+static void ex_tonlower(t_expr *expr, long argc, struct ex_ex *argv, struct ex_ex *optr);
+static void ex_toupper(t_expr *expr, long argc, struct ex_ex *argv, struct ex_ex *optr);
+static void ex_tonupper(t_expr *expr, long argc, struct ex_ex *argv, struct ex_ex *optr);
+static void ex_strlen(t_expr *expr, long argc, struct ex_ex *argv, struct ex_ex *optr);
+static void ex_strcat(t_expr *expr, long argc, struct ex_ex *argv, struct ex_ex *optr);
+static void ex_strncat(t_expr *expr, long argc, struct ex_ex *argv, struct ex_ex *optr);
+static void ex_strcmp(t_expr *expr, long argc, struct ex_ex *argv, struct ex_ex *optr);
+static void ex_strncmp(t_expr *expr, long argc, struct ex_ex *argv, struct ex_ex *optr);
+static void ex_strcasecmp(t_expr *expr, long argc, struct ex_ex *argv, struct ex_ex *optr);
+static void ex_strncasecmp(t_expr *expr, long argc, struct ex_ex *argv, struct ex_ex *optr);
+static void ex_strchr(t_expr *expr, long argc, struct ex_ex *argv, struct ex_ex *optr);
+static void ex_strrchr(t_expr *expr, long argc, struct ex_ex *argv, struct ex_ex *optr);
+static void ex_strspn(t_expr *expr, long argc, struct ex_ex *argv, struct ex_ex *optr);
+static void ex_strcspn(t_expr *expr, long argc, struct ex_ex *argv, struct ex_ex *optr);
+static void ex_strpbrk(t_expr *expr, long argc, struct ex_ex *argv, struct ex_ex *optr);
+extern void ex_size(t_expr *expr, long int argc, struct ex_ex *argv,
+                                                        struct ex_ex *optr);
+extern void ex_sum(t_expr *expr, long int argc, struct ex_ex *argv,
+                                                        struct ex_ex *optr);
+extern void ex_Sum(t_expr *expr, long int argc, struct ex_ex *argv,
+                                                        struct ex_ex *optr);
+extern void ex_avg(t_expr *expr, long int argc, struct ex_ex *argv,
+                                                        struct ex_ex *optr);
+extern void ex_Avg(t_expr *expr, long int argc, struct ex_ex *argv,
+                                                        struct ex_ex *optr);
+extern void ex_store(t_expr *expr, long int argc, struct ex_ex *argv,
+                                                        struct ex_ex *optr);
+extern void ex_var (t_expr *expr, long int argc, struct ex_ex *argv,
+                                                        struct ex_ex *optr);
+extern void ex_tabread4(t_expr *expr, long int argc, struct ex_ex *argv,
+                                                        struct ex_ex *optr);
 
 
 t_ex_func ex_funcs[] = {
@@ -169,11 +210,17 @@ t_ex_func ex_funcs[] = {
         {"fact",        ex_fact,        1},
         {"random",      ex_random,      2},     /* random number */
         {"abs",         ex_abs,         1},
-        {"if",          (void (*))ex_if,          3},
+        {"if",          (void (*))ex_if,3},
         {"ldexp",       ex_ldexp,       2},
         {"imodf",       ex_imodf,       1},
         {"modf",        ex_modf,        1},
-#if !defined(_MSC_VER) || (_MSC_VER >= 17000)
+        {"mtof",        ex_mtof,        1},
+        {"ftom",        ex_ftom,        1},
+        {"dbtorms",     ex_dbtorms,     1},
+        {"rmstodb",     ex_rmstodb,     1},
+        {"dbtopow",     ex_dbtopow,     1},
+        {"powtodb",     ex_powtodb,     1},
+#if !defined(_MSC_VER) || (_MSC_VER >= 1700)
         {"asinh",       ex_asinh,       1},
         {"acosh",       ex_acosh,       1},
         {"atanh",       ex_atanh,       1},     /* hyperbolic atan */
@@ -189,22 +236,41 @@ t_ex_func ex_funcs[] = {
         {"nearbyint",   ex_nearbyint,   1},
         {"copysign",    ex_copysign,    2},
         {"isinf",       ex_isinf,       1},
-        {"remainder",   ex_remainder,           2},
+        {"remainder",   ex_remainder,   2},
+        {"hypot",      ex_hypot,        2},
 #endif
+        /* Symbol functions */
+        {"symbol",      ex_symbol,      -1},
+        {"sym",         ex_symbol,      -1},
+        {"tolower",     ex_tolower,     1},
+        {"tonlower",    ex_tonlower,    2},
+        {"toupper",     ex_toupper,     1},
+        {"tonupper",    ex_tonupper,    2},
+        {"strlen",      ex_strlen,      1},
+        {"strcat",      ex_strcat,      -1}, /* variable num of arguments */
+        {"strncat",     ex_strncat,     3},
+        {"strcmp",      ex_strcmp,      2},
+        {"strncmp",     ex_strncmp,     3},
+        {"strcasecmp",  ex_strcasecmp,  2},
+        {"strncasecmp", ex_strncasecmp, 3},
+        {"strpbrk",     ex_strpbrk,     2},
+        {"strspn",      ex_strspn,      2},
+        {"strcspn",     ex_strcspn,     2},
+        {"var",         ex_var,         1},
+
 #ifdef PD
         {"size",        ex_size,        1},
         {"sum",         ex_sum,         1},
         {"Sum",         ex_Sum,         3},
-#endif
-#ifdef notdef
-/* the following will be added once they are more popular in math libraries */
-        {"hypoth",      ex_hypoth,      1},
+        {"avg",         ex_avg,         1},
+        {"Avg",         ex_Avg,         3},
+//SDY        {"tabread4",    ex_tabread4,    2},    place holder - This will be implemented later
 #endif
         {0,             0,              0}
 };
 
 /*
- * FUN_EVAL --  do type checking, evaluate a function,
+ * FUNC_EVAL -- do type checking, evaluate a function,
  *              if fltret is set return float
  *              otherwise return value based on regular typechecking,
  */
@@ -536,12 +602,9 @@ ex_toint(t_expr *e, long int argc, struct ex_ex *argv, struct ex_ex *optr)
                 FUNC_EVAL_UNARY(left, toint, (int), optr, 0);
         }
 
-#ifdef _WIN32
-/* No rint in NT land ??? */
-double rint(double x);
-
-double
-rint(double x)
+#if defined _MSC_VER && (_MSC_VER < 1800)
+/* rint is not available for Visual Studio Version < Visual Studio 2013 */
+static double rint(double x)
 {
         return (floor(x + 0.5));
 }
@@ -868,7 +931,7 @@ ex_tanh(t_expr *e, long int argc, struct ex_ex *argv, struct ex_ex *optr)
 }
 
 
-#if !defined(_MSC_VER) || (_MSC_VER >= 17000)
+#if !defined(_MSC_VER) || (_MSC_VER >= 1700)
 static void
 ex_asinh(t_expr *e, long argc, struct ex_ex *argv, struct ex_ex *optr)
 {
@@ -912,12 +975,12 @@ ex_atanh(t_expr *e, long argc, struct ex_ex *argv, struct ex_ex *optr)
 }
 #endif
 
-static int
+static double
 ex_dofact(int i)
 {
-        int ret = 0;
+        float ret = 0;
 
-        if (i)
+        if (i > 0)
                 ret = 1;
         else
                 return (1);
@@ -940,7 +1003,7 @@ ex_fact(t_expr *e, long int argc, struct ex_ex *argv, struct ex_ex *optr)
 
         left = argv++;
 
-        FUNC_EVAL_UNARY(left, ex_dofact,  (int), optr, 0);
+        FUNC_EVAL_UNARY(left, ex_dofact,  (int), optr, 1);
 }
 
 static int
@@ -997,14 +1060,14 @@ ex_if(t_expr *e, struct ex_ex *eptr, struct ex_ex *optr, struct ex_ex *argv, int
         t_float *cp;              /* condition pointer */
         t_float leftvalue, rightvalue;
         int j;
-                int condtrue = 0;
+        int condtrue = 0;
 
-                // evaluate the condition
-                eptr = ex_eval(e, eptr, argv, idx);
+        // evaluate the condition
+        eptr = ex_eval(e, eptr, argv, idx);
         cond = argv++;
-                // only either the left or right will be evaluated depending
-                // on the truth value of the condition
-                // However, if the condition is a vector, both args will be evaluated
+        // only either the left or right will be evaluated depending
+        // on the truth value of the condition
+        // However, if the condition is a vector, both args will be evaluated
 
         switch (cond->ex_type) {
         case ET_VEC:
@@ -1018,20 +1081,32 @@ ex_if(t_expr *e, struct ex_ex *eptr, struct ex_ex *optr, struct ex_ex *argv, int
                         optr->ex_type = ET_VEC;
                         optr->ex_vec = (t_float *)
                                   fts_malloc(sizeof (t_float) * e->exp_vsize);
-                                                if (!optr->ex_vec) {
-                                                        post("expr:if: no mem");
-                                                        /* pass over the left and right args */
-                                                        return(cond->ex_end->ex_end);
-                                                }
+                        if (!optr->ex_vec) {
+                                post("expr:if: no mem");
+                                /* pass over the left and right args */
+                                return(cond->ex_end->ex_end);
+                        }
+                }
+                /*
+                 * if the condition is a vector
+                 * the left and the right args both will get processed
+                 */
+                eptr = ex_eval(e, eptr, argv, idx);
+                left = argv++;
+                eptr = ex_eval(e, eptr, argv, idx);
+                right = argv;
+                if (left->ex_type == ET_SYM || left->ex_type == ET_SI){
+                        pd_error(e,
+                         "'%s': vector condition cannot return symbol value(l)",
+                                                         e->exp_string);
+                        return (eptr);
+                }
+                if (right->ex_type == ET_SYM || right->ex_type == ET_SI){
+                        pd_error(e,
+                         "'%s': vector condition cannot return symbol value(r)",
+                                                         e->exp_string);
+                        return (eptr);
                 }
-                                /*
-                                 * if the condition is a vector
-                                 * the left and the right args both will get processed
-                                 */
-                                eptr = ex_eval(e, eptr, argv, idx);
-                                left = argv++;
-                                eptr = ex_eval(e, eptr, argv, idx);
-                                right = argv;
                 op = optr->ex_vec;
                 j = e->exp_vsize;
                 cp = cond->ex_vec;
@@ -1068,7 +1143,6 @@ ex_if(t_expr *e, struct ex_ex *eptr, struct ex_ex *optr, struct ex_ex *argv, int
                                         rp++;
                                 }
                                 return (eptr);
-                        case ET_SYM:
                         default:
                                 post_error((fts_object_t *) e,
                               "expr: FUNC_EVAL(%d): bad right type %ld\n",
@@ -1107,7 +1181,6 @@ ex_if(t_expr *e, struct ex_ex *eptr, struct ex_ex *optr, struct ex_ex *argv, int
                                         rp++;
                                 }
                                 return (eptr);
-                        case ET_SYM:
                         default:
                                 post_error((fts_object_t *) e,
                               "expr: FUNC_EVAL(%d): bad right type %ld\n",
@@ -1149,14 +1222,12 @@ ex_if(t_expr *e, struct ex_ex *eptr, struct ex_ex *optr, struct ex_ex *argv, int
                                         lp++; rp++;
                                 }
                                 return (eptr);
-                        case ET_SYM:
                         default:
                                 post_error((fts_object_t *) e,
                               "expr: FUNC_EVAL(%d): bad right type %ld\n",
                                                       __LINE__, right->ex_type);
                                 return (eptr);
                         }
-                case ET_SYM:
                 default:
                         post_error((fts_object_t *) e,
                       "expr: FUNC_EVAL(%d): bad left type %ld\n",
@@ -1165,33 +1236,41 @@ ex_if(t_expr *e, struct ex_ex *eptr, struct ex_ex *optr, struct ex_ex *argv, int
                 }
         case ET_INT:
                 if (cond->ex_int)
-                                        condtrue = 1;
-                                else
-                                        condtrue = 0;
+                        condtrue = 1;
+                else
+                        condtrue = 0;
                 break;
         case ET_FLT:
                 if (cond->ex_flt)
-                                        condtrue = 1;
-                                else
-                                        condtrue = 0;
+                        condtrue = 1;
+                else
+                        condtrue = 0;
                 break;
+        case ET_SI:
         case ET_SYM:
+                pd_error(e, "'%s': if() condition cannot be a string",
+                                                         e->exp_string);
+                return (eptr);
         default:
                 post_error((fts_object_t *) e,
               "expr: FUNC_EVAL(%d): bad condition type %ld\n",
                                       __LINE__, cond->ex_type);
                 return (eptr);
         }
-                if (condtrue) {
-                                eptr = ex_eval(e, eptr, argv, idx);
-                                res = argv++;
-                                eptr = eptr->ex_end; /* no right processing */
-
-                } else {
-                                eptr = eptr->ex_end; /* no left rocessing */
-                                eptr = ex_eval(e, eptr, argv, idx);
-                                res = argv++;
-                }
+        if (condtrue) {
+                eptr = ex_eval(e, eptr, argv, idx);
+                res = argv++;
+                if (!eptr)
+                        return (exNULL);
+                eptr = eptr->ex_end; /* no right processing */
+
+        } else {
+                if (!eptr)
+                        return (exNULL);
+                eptr = eptr->ex_end; /* no left rocessing */
+                eptr = ex_eval(e, eptr, argv, idx);
+                res = argv++;
+        }
         switch(res->ex_type) {
         case ET_INT:
                 if (optr->ex_type == ET_VEC) {
@@ -1220,14 +1299,21 @@ ex_if(t_expr *e, struct ex_ex *eptr, struct ex_ex *optr, struct ex_ex *argv, int
                         optr->ex_type = ET_VEC;
                         optr->ex_vec = (t_float *)
                                   fts_malloc(sizeof (t_float) * e->exp_vsize);
-                                                if (!optr->ex_vec) {
-                                                        post("expr:if: no mem");
-                            return (eptr);
-                                                }
+                        if (!optr->ex_vec) {
+                                post("expr:if: no mem");
+                                return (eptr);
+                        }
                 }
                 memcpy(optr->ex_vec, res->ex_vec, e->exp_vsize*sizeof(t_float));
                 return (eptr);
         case ET_SYM:
+        case ET_SI:
+                if (optr->ex_type == ET_VEC) {
+                        ex_mkvector(optr->ex_vec, 0.0, e->exp_vsize);
+                        return (eptr);
+                }
+                *optr = *res;
+                return (eptr);
         default:
                 post_error((fts_object_t *) e,
               "expr: FUNC_EVAL(%d): bad res type %ld\n",
@@ -1237,6 +1323,541 @@ ex_if(t_expr *e, struct ex_ex *eptr, struct ex_ex *optr, struct ex_ex *argv, int
 
 }
 
+/*
+ * ex_getstring - get a string from an argument
+ */
+
+static char *
+ex_getstring(t_expr *e, struct ex_ex *eptr)
+{
+        switch (eptr->ex_type) {
+        case ET_SYM:
+                if (eptr->ex_flags & EX_F_TSYM)
+                        return (eptr->ex_ptr);
+                return (ex_symname((t_symbol *) eptr->ex_ptr));
+
+        case ET_SI:
+                if (!e->exp_var[eptr->ex_int].ex_ptr)
+                        return ("");
+                return (ex_symname((t_symbol *)
+                                        e->exp_var[eptr->ex_int].ex_ptr));
+        default:
+                post_error(e, "expr: '%s' - argument not a string - type = %ld\n",
+                                e->exp_string, eptr->ex_type);
+                return ((char *) 0);
+        }
+}
+
+static int
+ex_getnumber(t_expr *e, struct ex_ex *eptr)
+{
+        switch (eptr->ex_type) {
+        case ET_INT:
+                return (eptr->ex_int);
+
+        case ET_FLT:
+                return ((int) eptr->ex_flt);
+
+        case ET_SYM:
+                if (eptr->ex_flags & EX_F_TSYM) {
+                        free(eptr->ex_ptr);
+                        eptr->ex_flags &= ~EX_F_TSYM;
+                }
+
+        default:
+                return (0);
+        }
+}
+
+static int
+ex_makesymbol(t_expr *e, struct ex_ex *optr, size_t size)
+{
+        optr->ex_type = ET_SYM;
+        optr->ex_flags |= EX_F_TSYM;
+        optr->ex_ptr = (char *) calloc(size + 1, sizeof (char));
+        if (!optr->ex_ptr) {
+                post_error(e, "expr: '%s' - makesymbol: no memory\n", e->exp_string);
+                optr->ex_type = ET_INT;
+                optr->ex_int = 0;
+                return 0;
+        }
+        return 1;
+}
+
+
+#define CHECK_LEFT_STR(left)                            \
+        left = argv;                                    \
+        leftstr =  ex_getstring(e, left);               \
+        if (!leftstr) {                                 \
+                optr->ex_type = ET_INT;                 \
+                optr->ex_int = 0;                       \
+                return;                                 \
+        }                                               \
+
+#define CHECK_RIGHT_STR(right)                          \
+        right = argv + 1;                               \
+        rightstr =  ex_getstring(e, right);             \
+        if (!rightstr) {                                \
+                optr->ex_type = ET_INT;                 \
+                optr->ex_int = 0;                       \
+                return;                                 \
+        }
+
+
+#define CHECK_LR_STR(left, right)                       \
+        CHECK_LEFT_STR(left)                            \
+        CHECK_RIGHT_STR(right)
+
+
+#define STRFUNC_DEF(func)                                                       \
+static void                                                                     \
+func(t_expr *e, long int argc, struct ex_ex *argv, struct ex_ex *optr)          \
+{                                                                               \
+        struct ex_ex *left = (struct ex_ex *) 0;                                \
+        struct ex_ex *right = (struct ex_ex *) 0;                               \
+        char *leftstr, *rightstr;                                               \
+        struct ex_ex outval;                                          \
+        struct ex_ex *tmpoptr;                                        \
+                                                                      \
+        outval.ex_type = 0;                                           \
+        outval.ex_int = 0;                                            \
+        outval.ex_flags = 0;                                          \
+        tmpoptr = &outval;                                            \
+                                                                      \
+        CHECK_LR_STR(left, right);
+
+/*
+ * only set the left, and be sure right is set to zero
+ * so that CHECK)FREE_STRING() in STREFUNC_END does not free right
+ */
+#define STRSINGLEFUNC_DEF(func)                                       \
+static void                                                           \
+func(t_expr *e, long int argc, struct ex_ex *argv, struct ex_ex *optr)\
+{                                                                     \
+        struct ex_ex *left = (struct ex_ex *) 0;                      \
+        struct ex_ex *right = (struct ex_ex *) 0;                     \
+        char *leftstr, *rightstr;                                     \
+        struct ex_ex outval;                                          \
+        struct ex_ex *tmpoptr;                                        \
+                                                                      \
+        outval.ex_type = 0;                                           \
+        outval.ex_int = 0;                                            \
+        outval.ex_flags = 0;                                          \
+        tmpoptr = &outval;                                            \
+                                                                      \
+        CHECK_LEFT_STR(left);
+
+/*
+ * check to see if we need to free any buffers
+ */
+#define STRFUNC_END()                                                 \
+        if (optr->ex_type == ET_VEC) {                                \
+            switch (tmpoptr->ex_type) {                               \
+            case ET_INT:                                              \
+                ex_mkvector(optr->ex_vec, (t_float) tmpoptr->ex_int,  \
+                                                    e->exp_vsize);    \
+                break;                                                \
+            case ET_FLT:                                              \
+                ex_mkvector(optr->ex_vec, tmpoptr->ex_flt,            \
+                                                    e->exp_vsize);    \
+                break;                                                \
+            case ET_SYM:                                              \
+                ex_mkvector(optr->ex_vec, 0.0, e->exp_vsize);         \
+                if (tmpoptr->ex_flags & EX_F_TSYM) {                  \
+                        free(tmpoptr->ex_ptr);                        \
+                }                                                     \
+                break;                                                \
+            default:                                                  \
+                ex_error(e, "expr: bad return type INTERNAL ERROR",   \
+                                                e->exp_string);       \
+            }                                                         \
+            return;                                                   \
+        }                                                             \
+        *optr = *tmpoptr;                                             \
+        return;                                                       \
+}
+
+#define EXPR_MAX_SYM_SIZE 512 /*largest symbol size, in sprintf it may be 500*/
+
+void
+ex_var (t_expr *expr, long int argc, struct ex_ex *argv, struct ex_ex *optr)
+{
+        t_float retval;
+
+
+        switch(argv->ex_type) {
+        case ET_SYM:
+            if (argv->ex_flags & EX_F_TSYM)
+                /*
+                 * SDY - we do not have the idx value here, so we are passing 0
+                 * var() cannot evaluate the sys_idx variable
+                 */
+                max_ex_var(expr, gensym(argv->ex_ptr), optr, 0);
+            else
+                max_ex_var(expr, (t_symbol *) argv->ex_ptr, optr, 0);
+            return;
+
+        case ET_SI:
+                if (!expr->exp_var[argv->ex_int].ex_ptr)
+                        break;
+                max_ex_var(expr,(t_symbol *) expr->exp_var[argv->ex_int].ex_ptr, optr, 0);
+                return;
+
+        default:
+                ex_error(expr, "var(): argument not a string - type = %ld\n",
+                                argv->ex_type);
+                break;
+        }
+        if (optr->ex_type == ET_VEC)
+            ex_mkvector(optr->ex_vec, 0.0, expr->exp_vsize);
+        else {
+            optr->ex_type = ET_INT;
+            optr->ex_int = 0;
+        }
+        return;
+
+}
+
+
+static void
+ex_symbol1(t_expr *e, long int argc, struct ex_ex *argv, struct ex_ex *optr)
+{
+        struct ex_ex *left;
+                        /* we will not realloc to exact size for efficiecy */
+        int i;
+        char *strp; /* string pointer */
+
+        left = argv;
+        switch (left->ex_type) {
+        case ET_SYM:
+            *optr = *left;
+            left->ex_type = ET_INT;
+            left->ex_flags = 0;
+            left->ex_ptr = (char *)0;
+            return;
+
+        case ET_SI:
+            strp = ex_getstring(e, left);
+            if (!strp) {
+                if (!ex_makesymbol(e, optr, 1))
+                    goto goterror;
+                *optr->ex_ptr = 0;
+                return;
+            }
+            if (!ex_makesymbol(e, optr, strlen(strp)))
+                goto goterror;
+            strcpy (optr->ex_ptr, strp);
+            return;
+
+
+        case ET_INT:
+            if (!ex_makesymbol(e, optr, EXPR_MAX_SYM_SIZE))
+                goto goterror;
+            snprintf(optr->ex_ptr, EXPR_MAX_SYM_SIZE, "%ld", left->ex_int);
+            return;
+
+        case ET_FLT:
+            if (!ex_makesymbol(e, optr, EXPR_MAX_SYM_SIZE))
+                goto goterror;
+            snprintf(optr->ex_ptr, EXPR_MAX_SYM_SIZE, "%.6f", left->ex_flt);
+            for (i = strlen(optr->ex_ptr) - 1; i && optr->ex_ptr[i] == '0'; i--)
+                if (optr->ex_ptr[i-1] != '.')
+                        optr->ex_ptr[i] = 0;
+            return;
+
+        default:
+            optr->ex_type = ET_INT;
+            optr->ex_int = 0;
+            post_error((fts_object_t *) e, "expr: bad argument to tosym/sym() - '%s'", e->exp_string);
+        }
+
+goterror:
+        optr->ex_type = ET_INT;
+        optr->ex_int = 0;
+        return;
+}
+
+static void
+ex_symbol(t_expr *e, long int argc, struct ex_ex *argv, struct ex_ex *optr)
+{
+        struct ex_ex *left;
+        char format[25]; /* the largest int in a 64 bit is 20 characters */
+        int i, num1, num2;
+        char *strp; /* string pointer */
+
+        if (!argc) {
+            ex_makesymbol(e, optr, 1);
+            return;
+        }
+        if (argc == 1)
+            return (ex_symbol1(e, argc, argv, optr));
+
+        if (argc != 2 && argc != 3) {
+            optr->ex_type = ET_INT;
+            optr->ex_int = 0;
+            ex_error(e, "expr: symbol/sym takes no more than 3 arguments", e->exp_string);
+            return;
+        }
+
+        left = argv;
+        num1 = ex_getnumber(e, argv + 1);
+        if (argc == 2)
+                num2 = -1;
+        else
+                num2 = ex_getnumber(e, argv + 2);
+        switch (left->ex_type) {
+        case ET_SYM:
+        case ET_SI:
+            strp = ex_getstring(e, left);
+            if (!strp) {
+                if (!ex_makesymbol(e, optr, 1))
+                    goto goterror;
+                *optr->ex_ptr = 0;
+                return;
+            }
+            if (!ex_makesymbol(e, optr, EXPR_MAX_SYM_SIZE))
+                goto goterror;
+            if (num2 == -1)
+                snprintf(format, 25, "%%.%ds", num1);
+            else
+                snprintf(format, 25, "%%%d.%ds", num2, num1);
+            snprintf(optr->ex_ptr, EXPR_MAX_SYM_SIZE, format, strp);
+            return;
+
+        case ET_INT:
+            if (!ex_makesymbol(e, optr, EXPR_MAX_SYM_SIZE))
+                goto goterror;
+            if (num2 == -1)
+                snprintf(format, 25, "%%.%dld", num1);
+            else
+                snprintf(format, 25, "%%%d.%dld", num2, num1);
+            snprintf(optr->ex_ptr, EXPR_MAX_SYM_SIZE, format, left->ex_int);
+            return;
+
+        case ET_FLT:
+            if (!ex_makesymbol(e, optr, EXPR_MAX_SYM_SIZE))
+                goto goterror;
+            if (num2 == -1)
+                snprintf(format, 25, "%%.%df", num1);
+            else
+                snprintf(format, 25, "%%%d.%df", num2, num1);
+            snprintf(optr->ex_ptr, EXPR_MAX_SYM_SIZE, format, left->ex_flt);
+            return;
+
+        default:
+            optr->ex_type = ET_INT;
+            optr->ex_int = 0;
+            post_error((fts_object_t *) e, "expr: bad argument to tosym/sym() - '%s'", e->exp_string);
+        }
+
+goterror:
+        optr->ex_type = ET_INT;
+        optr->ex_int = 0;
+        return;
+}
+
+/*
+ * ex_strcat - strcat() takes unlimited number of arguments
+ */
+static void
+ex_strcat(t_expr *e, long int argc, struct ex_ex *argv, struct ex_ex *optr)
+{
+        char *p; /* string pointer */
+        int i;
+        int size = 0;
+
+        /* find the size */
+        for (i = 0; i < argc; i ++) {
+            p = ex_getstring(e, &argv[i]);
+            if (!p) {
+                optr->ex_type = ET_INT;
+                optr->ex_int = 0;
+                return;
+            }
+            size += strlen(p);
+        }
+
+        if (!ex_makesymbol(e, optr, size)) {
+                optr->ex_type = ET_INT;
+                optr->ex_int = 0;
+                return;
+        }
+
+        for (i = 0; i < argc; i ++)
+            strcat(optr->ex_ptr, ex_getstring(e, &argv[i]));
+        return;
+}
+
+/*
+ * ex_strncat - implement strncat()
+ */
+STRFUNC_DEF(ex_strncat)
+        int num, size;
+        num =  ex_getnumber(e, argv + 2);
+        size = min(num, strlen(rightstr));
+
+        if (!ex_makesymbol(e, tmpoptr, size))
+                return;
+
+        strcat(tmpoptr->ex_ptr, leftstr);
+        strncat(tmpoptr->ex_ptr, rightstr, num);
+
+STRFUNC_END()
+
+/*
+ * ex_tolower - replace all characters of the string with
+ *              the corresponding lowercase letter
+ */
+STRSINGLEFUNC_DEF(ex_tolower)
+        int i, size;
+
+        size = strlen(leftstr);
+        if (!ex_makesymbol(e, tmpoptr, size))
+                return;
+        strcat(tmpoptr->ex_ptr, leftstr);
+        for (i = 0; i < size +1; i++)
+                tmpoptr->ex_ptr[i] = tolower(tmpoptr->ex_ptr[i]);
+STRFUNC_END()
+
+/*
+ * ex_tonlower - replace all characters of the string with
+ *              the corresponding lowercase letter
+ */
+STRSINGLEFUNC_DEF(ex_tonlower)
+        int i, size, num;
+
+        size = strlen(leftstr);
+        if (!ex_makesymbol(e, tmpoptr, size))
+                return;
+        num =  ex_getnumber(e, argv + 1);
+        strcat(tmpoptr->ex_ptr, leftstr);
+        num = min (size, num);
+        for (i = 0; i < num; i++)
+                tmpoptr->ex_ptr[i] = tolower(tmpoptr->ex_ptr[i]);
+STRFUNC_END()
+
+
+
+/*
+ * ex_toupper - replace all characters of the string with
+ *              the corresponding uppercase letter
+ */
+STRSINGLEFUNC_DEF(ex_toupper)
+        int i, size;
+
+        size = strlen(leftstr);
+        if (!ex_makesymbol(e, tmpoptr, size))
+                return;
+        strcat(tmpoptr->ex_ptr, leftstr);
+        for (i = 0; i < size +1; i++)
+                tmpoptr->ex_ptr[i] = toupper(tmpoptr->ex_ptr[i]);
+STRFUNC_END()
+
+/*
+ * ex_tonupper - replace no more than n characters of the string with
+ *              the corresponding uppercase letter
+ */
+STRSINGLEFUNC_DEF(ex_tonupper)
+        int i, size, num;
+
+        size = strlen(leftstr);
+        if (!ex_makesymbol(e, tmpoptr, size))
+                return;
+        num =  ex_getnumber(e, argv + 1);
+        strcat(tmpoptr->ex_ptr, leftstr);
+        num = min (size, num);
+        for (i = 0; i < num; i++)
+                tmpoptr->ex_ptr[i] = toupper(tmpoptr->ex_ptr[i]);
+STRFUNC_END()
+
+/*
+ * ex_strlen - implement strlen()
+ */
+STRSINGLEFUNC_DEF(ex_strlen)
+        tmpoptr->ex_type = ET_INT;
+        tmpoptr->ex_int = strlen(leftstr);
+STRFUNC_END()
+
+/*
+ * ex_strcmp - implement strcmp()
+ */
+STRFUNC_DEF(ex_strcmp)
+        tmpoptr->ex_type = ET_INT;
+        tmpoptr->ex_int = strcmp(leftstr, rightstr);
+STRFUNC_END()
+
+/*
+ * ex_strncmp - implement strncmp()
+ */
+STRFUNC_DEF(ex_strncmp)
+        int num;
+
+        num =  ex_getnumber(e, argv + 2);
+
+        tmpoptr->ex_type = ET_INT;
+        tmpoptr->ex_int = strncmp(leftstr, rightstr, num);
+STRFUNC_END()
+
+/*
+ * ex_strcasecmp - implement strcasecmp()
+ */
+STRFUNC_DEF(ex_strcasecmp)
+        tmpoptr->ex_type = ET_INT;
+        tmpoptr->ex_int = strcasecmp(leftstr, rightstr);
+STRFUNC_END()
+
+/*
+ * ex_strncasecmp - implement strncasecmp()
+ */
+STRFUNC_DEF(ex_strncasecmp)
+        int num;
+
+        num =  ex_getnumber(e, argv + 2);
+        tmpoptr->ex_type = ET_INT;
+        tmpoptr->ex_int = strncasecmp(leftstr, rightstr, num);
+STRFUNC_END()
+
+
+
+/*
+ * ex_strpbrk - implement strpbrk()
+ */
+STRFUNC_DEF(ex_strpbrk)
+        char *result;
+
+        result = strpbrk(leftstr, rightstr);
+        if (!result) {
+                /*
+                 * strpbrk return NULL and not a pointer to an empty string
+                 * this can be quite cumbersome in Pd, thus, when no character is found
+                 * we turn a pointer to an empty (NULL) string
+                 */
+                ex_makesymbol(e, tmpoptr, 1);
+                return;
+        }
+        if (!ex_makesymbol(e, tmpoptr, strlen(result) + 1))
+                return;
+        strcpy(tmpoptr->ex_ptr, result);
+STRFUNC_END()
+
+/*
+ * ex_strspn - implement strspn()
+ */
+STRFUNC_DEF(ex_strspn)
+        tmpoptr->ex_type = ET_INT;
+        tmpoptr->ex_int = strspn(leftstr, rightstr);
+STRFUNC_END()
+
+
+/*
+ * ex_strcspn - implement strcspn()
+ */
+STRFUNC_DEF(ex_strcspn)
+        tmpoptr->ex_type = ET_INT;
+        tmpoptr->ex_int = strcspn(leftstr, rightstr);
+STRFUNC_END()
+
+
 /*
  * ex_imodf -   extract signed integral value from floating-point number
  */
@@ -1253,7 +1874,7 @@ FUNC_DEF_UNARY(ex_imodf, imodf, (double), 1);
 /*
  * ex_modf - extract signed  fractional value from floating-point number
  *
- *  using fracmodf because fmodf() is alrady defined in a .h file
+ *  using fracmodf because fmodf() is already defined in a .h file
  */
 static double
 fracmodf(double x)
@@ -1264,12 +1885,20 @@ fracmodf(double x)
 }
 FUNC_DEF_UNARY(ex_modf, fracmodf, (double), 1);
 
+
+FUNC_DEF_UNARY(ex_mtof, mtof, (double), 1);
+FUNC_DEF_UNARY(ex_ftom, ftom, (double), 1);
+FUNC_DEF_UNARY(ex_dbtorms, dbtorms, (double), 1);
+FUNC_DEF_UNARY(ex_rmstodb, rmstodb, (double), 1);
+FUNC_DEF_UNARY(ex_dbtopow, dbtopow, (double), 1);
+FUNC_DEF_UNARY(ex_powtodb, powtodb, (double), 1);
+
 /*
  * ex_ldexp  -  multiply floating-point number by integral power of 2
  */
 FUNC_DEF(ex_ldexp, ldexp, (double), (int), 1);
 
-#if !defined(_MSC_VER) || (_MSC_VER >= 17000)
+#if !defined(_MSC_VER) || (_MSC_VER >= 1700)
 /*
  * ex_cbrt - cube root
  */
@@ -1332,7 +1961,7 @@ FUNC_DEF(ex_remainder, remainder, (double), (double), 1);
 FUNC_DEF_UNARY(ex_round, round, (double), 1);
 
 /*
- * ex_trunc -  round to interger, towards zero
+ * ex_trunc -  round to integer, towards zero
  */
 FUNC_DEF_UNARY(ex_trunc, trunc, (double), 1);
 
@@ -1341,13 +1970,10 @@ FUNC_DEF_UNARY(ex_trunc, trunc, (double), 1);
  */
 FUNC_DEF_UNARY(ex_nearbyint, nearbyint, (double), 1);
 
-#endif
-
-#ifdef notdef
-/* the following will be added once they are more popular in math libraries */
 /*
- * ex_hypoth - Euclidean distance function
+ * ex_hypot - Euclidean distance function
  */
-FUNC_DEF(ex_hypoth, hypoth, (double), (double), 1);
+FUNC_DEF(ex_hypot, hypot, (double), (double), 1);
+
 
 #endif
diff --git a/pd/src/x_vexp_if.c b/pd/src/x_vexp_if.c
index ded4bfe8b56c817396524aa2a58acc4964b884e0..d060b8703dd4a3998577e19349b5d2a2532abbe7 100644
--- a/pd/src/x_vexp_if.c
+++ b/pd/src/x_vexp_if.c
@@ -15,18 +15,37 @@
  *
  *  version 0.50 - March 2016
  *  version 0.55 - July 2017
+ *  version 0.56 - January 2018
+ *  version 0.57 - October 2020
  */
 
 #include <stdio.h>
 #include <string.h>
 #include <stdlib.h>
+#include <math.h>
+#define MIN(a,b) (((a)<(b))?(a):(b))
+#define MAX(a,b) (((a)>(b))?(a):(b))
 
 #include "x_vexp.h"
 
-static char *exp_version = "0.55";
+static char *exp_version = "0.57";
 
 extern struct ex_ex *ex_eval(struct expr *expr, struct ex_ex *eptr,
                                                 struct ex_ex *optr, int n);
+extern void ex_size(t_expr *expr, long int argc, struct ex_ex *argv,
+                                                        struct ex_ex *optr);
+extern void ex_sum(t_expr *expr, long int argc, struct ex_ex *argv,
+                                                        struct ex_ex *optr);
+extern void ex_Sum(t_expr *expr, long int argc, struct ex_ex *argv,
+                                                        struct ex_ex *optr);
+extern void ex_avg(t_expr *expr, long int argc, struct ex_ex *argv,
+                                                        struct ex_ex *optr);
+extern void ex_Avg(t_expr *expr, long int argc, struct ex_ex *argv,
+                                                        struct ex_ex *optr);
+extern void ex_tabread4(t_expr *expr, long int argc, struct ex_ex *argv,
+                                                        struct ex_ex *optr);
+extern void ex_store(t_expr *expr, long int argc, struct ex_ex *argv,
+                                                        struct ex_ex *optr);
 
 #ifdef PD
 static t_class *expr_class;
@@ -48,11 +67,11 @@ t_int *expr_perform(t_int *w);
 
 
 static void
-expr_list(t_expr *x, t_symbol *s, int argc, const fts_atom_t *argv)
+expr_list(t_expr *x, t_symbol *s, int argc, const t_atom *argv)
 {
         int i;
 
-        if (argc > MAX_VARS) argc = MAX_VARS;
+        if (argc > EX_MAX_INLETS) argc = EX_MAX_INLETS;
 
         for (i = 0; i < argc; i++)
         {
@@ -63,14 +82,14 @@ expr_list(t_expr *x, t_symbol *s, int argc, const fts_atom_t *argv)
                         else if (x->exp_var[i].ex_type == ET_II)
                                 x->exp_var[i].ex_int = argv[i].a_w.w_float;
                         else if (x->exp_var[i].ex_type)
-                            pd_error(x, "expr: type mismatch");
+                            pd_error(x, "expr: type mismatch for inlet %d", i + 1);
                 }
                 else if (argv[i].a_type == A_SYMBOL)
                 {
                         if (x->exp_var[i].ex_type == ET_SI)
                                 x->exp_var[i].ex_ptr = (char *)argv[i].a_w.w_symbol;
                         else if (x->exp_var[i].ex_type)
-                            pd_error(x, "expr: type mismatch");
+                            pd_error(x, "expr: type mismatch for inlet %d", i + 1);
                 }
         }
         expr_bang(x);
@@ -79,7 +98,7 @@ expr_list(t_expr *x, t_symbol *s, int argc, const fts_atom_t *argv)
 static void
 expr_flt(t_expr *x, t_float f, int in)
 {
-        if (in >= MAX_VARS)
+        if (in >= EX_MAX_INLETS)
                 return;
 
         if (x->exp_var[in].ex_type == ET_FI)
@@ -117,7 +136,7 @@ exprproxy_float(t_exprproxy *p, t_floatarg f)
         t_expr *x = p->p_owner;
         int in = p->p_index;
 
-        if (in >= MAX_VARS)
+        if (in >= EX_MAX_INLETS)
                 return;
 
         if (x->exp_var[in].ex_type == ET_FI)
@@ -145,14 +164,14 @@ expr_ff(t_expr *x)
 #endif
                 y = x->exp_proxy;
         }
+        t_freebytes(x->exp_string, strlen(x->exp_string));
         for (i = 0 ; i < x->exp_nexpr; i++)
                 if (x->exp_stack[i])
                         fts_free(x->exp_stack[i]);
-/*
- * SDY free all the allocated buffers here for expr~ and fexpr~
- * check to see if there are others
- */
-        for (i = 0; i < MAX_VARS; i++) {
+        /*
+         * free all the allocated buffers here for expr~ and fexpr~
+         */
+        for (i = 0; i < EX_MAX_INLETS; i++) {
                 if (x->exp_p_var[i])
                         fts_free(x->exp_p_var[i]);
                 if (x->exp_p_res[i])
@@ -196,11 +215,10 @@ expr_bang(t_expr *x)
         /* banging a signal or filter object means nothing */
         if (!IS_EXPR(x))
                 return;
-
         for (i = x->exp_nexpr - 1; i > -1 ; i--) {
                 if (!ex_eval(x, x->exp_stack[i], &x->exp_res[i], 0)) {
                         /*fprintf(stderr,"expr_bang(error evaluation)\n"); */
-                /*  SDY now that we have mutiple ones, on error we should
+                /*  SDY now that we have multiple ones, on error we should
                  * continue
                         return;
                  */
@@ -216,14 +234,34 @@ expr_bang(t_expr *x)
                         break;
 
                 case ET_SYM:
-                        /* CHANGE this will have to be taken care of */
+                        if (x->exp_res[i].ex_flags & EX_F_TSYM) {
+                                outlet_symbol(x->exp_outlet[i],
+                                                                                        gensym(x->exp_res[i].ex_ptr));
+                                free(x->exp_res[i].ex_ptr);
+                        } else {
+                                outlet_symbol(x->exp_outlet[i],
+                                                                                        (t_symbol *) x->exp_res[i].ex_ptr);
+                        }
+                        break;
+
+                case ET_SI:
+                        if (x->exp_var[x->exp_res[i].ex_int].ex_ptr)
+                                outlet_symbol(x->exp_outlet[i], (t_symbol *)
+                                      x->exp_var[x->exp_res[i].ex_int].ex_ptr);
+                        else
+                                outlet_symbol(x->exp_outlet[i],  gensym(""));
+                        break;
 
                 default:
-                        post("expr: bang: unrecognized result %ld\n", x->exp_res[i].ex_type);
+                        post_error(x,
+                            "expr:'%s': bang: unrecognized result %ld\n",
+                                        x->exp_string, x->exp_res[i].ex_type);
                 }
         }
 }
 
+static int expcount;
+
 static t_expr *
 #ifdef PD
 expr_new(t_symbol *s, int ac, t_atom *av)
@@ -238,6 +276,7 @@ Nexpr_new(t_symbol *s, int ac, t_atom *av)
         int dsp_index;  /* keeping track of the dsp inlets */
 
 
+//printf ("expcount = %d\n", expcount++);
 /*
  * SDY - we may need to call dsp_setup() in this function
  */
@@ -281,7 +320,7 @@ Nexpr_new(t_symbol *s, int ac, t_atom *av)
         x->exp_nivec = 0;
         x->exp_nexpr = 0;
         x->exp_error = 0;
-        for (i = 0; i < MAX_VARS; i++) {
+        for (i = 0; i < EX_MAX_INLETS; i++) {
                 x->exp_stack[i] = (struct ex_ex *)0;
                 x->exp_outlet[i] = (t_outlet *)0;
                 x->exp_res[i].ex_type = 0;
@@ -307,7 +346,7 @@ SDY the following coredumps why?
         }
 
         ninlet = 1;
-        for (i = 0, eptr = x->exp_var; i < MAX_VARS ; i++, eptr++)
+        for (i = 0, eptr = x->exp_var; i < EX_MAX_INLETS ; i++, eptr++)
                 if (eptr->ex_type) {
                         ninlet = i + 1;
                 }
@@ -361,6 +400,7 @@ SDY the following coredumps why?
                                 break;
                         } else
                                 post("expr: internal error expr_new");
+                                /* falls through */
                 default:
                         pd_error(x, "expr: bad type (%lx) inlet = %d\n",
                                             eptr->ex_type, i + 1);
@@ -385,8 +425,14 @@ SDY the following coredumps why?
                 x->exp_p_res[i] = fts_calloc(x->exp_vsize, sizeof (t_float));
                 x->exp_tmpres[i] = fts_calloc(x->exp_vsize, sizeof (t_float));
         }
-        for (i = 0; i < MAX_VARS; i++)
-                x->exp_p_var[i] = fts_calloc(x->exp_vsize, sizeof (t_float));
+        for (i = 0; i < EX_MAX_INLETS; i++) {
+                if (x->exp_var[i].ex_type == ET_VI ||
+                    x->exp_var[i].ex_type == ET_XI)
+                        x->exp_p_var[i] = fts_calloc(x->exp_vsize,
+                                                        sizeof (t_float));
+                else
+                        x->exp_p_var[i] = (t_float *) 0;
+        }
 
         return (x);
 }
@@ -414,14 +460,15 @@ expr_perform(t_int *w)
 
         if (IS_EXPR_TILDE(x)) {
                 /*
-                 * if we have only one expression, we can right on
+                 * if we have only one expression, we can write on
                  * on the output directly, otherwise we have to copy
                  * the data because, outputs could be the same buffer as
                  * inputs
                  */
-                if ( x->exp_nexpr == 1)
+                if ( x->exp_nexpr == 1) {
+                        x->exp_res[0].ex_type = ET_VEC;
                         ex_eval(x, x->exp_stack[0], &x->exp_res[0], 0);
-                else {
+                } else {
                         res.ex_type = ET_VEC;
                         for (i = 0; i < x->exp_nexpr; i++) {
                                 res.ex_vec = x->exp_tmpres[i];
@@ -436,7 +483,7 @@ expr_perform(t_int *w)
         }
 
         if (!IS_FEXPR_TILDE(x)) {
-                post("expr_perform: bad x->exp_flags = %d - expecting fexpr",
+                post_error(x, "expr_perform: bad x->exp_flags = %d - expecting fexpr",
                                                                 x->exp_flags);
                 return (w + 2);
         }
@@ -455,6 +502,19 @@ expr_perform(t_int *w)
                 case ET_FLT:
                         x->exp_tmpres[j][i] = res.ex_flt;
                         break;
+                case ET_SYM:
+                        if (!(x->exp_error & EE_BADSYM)) {
+                                x->exp_error |= EE_BADSYM;
+                                        post_error((t_object *) x,
+                                                "fexpr~: '%s': cannot convert string to sample value\n",
+                                                                        x->exp_string);
+                                post_error(x,
+                                      "fexpr~: No more such errors will be reported");
+                                post_error(x,
+                                      "fexpr~: till the next reset");
+                        }
+                        x->exp_tmpres[j][i] = 0;
+                        break;
                 default:
                         post("expr_perform: bad result type %d", res.ex_type);
                 }
@@ -465,7 +525,7 @@ expr_perform(t_int *w)
          * same as an input buffer
          */
         n = x->exp_vsize * sizeof(t_float);
-        for (i = 0; i < MAX_VARS; i++)
+        for (i = 0; i < EX_MAX_INLETS; i++)
                 if (x->exp_var[i].ex_type == ET_XI)
                         memcpy(x->exp_p_var[i], x->exp_var[i].ex_vec, n);
         for (i = 0; i < x->exp_nexpr; i++) {
@@ -488,7 +548,7 @@ expr_dsp(t_expr *x, t_signal **sp)
                 x->exp_res[i].ex_type = ET_VEC;
                 x->exp_res[i].ex_vec =  sp[x->exp_nivec + i]->s_vec;
         }
-        for (i = 0, nv = 0; i < MAX_VARS; i++)
+        for (i = 0, nv = 0; i < EX_MAX_INLETS; i++)
                 /*
                  * the first inlet is always a signal
                  *
@@ -535,16 +595,23 @@ expr_dsp(t_expr *x, t_signal **sp)
                         fts_free(x->exp_p_res[i]);
                         fts_free(x->exp_tmpres[i]);
                 }
-                for (i = 0; i < MAX_VARS; i++)
-                        fts_free(x->exp_p_var[i]);
+                for (i = 0; i < EX_MAX_INLETS; i++)
+                        if (x->exp_p_var[i])
+                                fts_free(x->exp_p_var[i]);
 
         }
         for (i = 0; i < x->exp_nexpr; i++) {
                 x->exp_p_res[i] = fts_calloc(x->exp_vsize, sizeof (t_float));
                 x->exp_tmpres[i] = fts_calloc(x->exp_vsize, sizeof (t_float));
         }
-        for (i = 0; i < MAX_VARS; i++)
-                x->exp_p_var[i] = fts_calloc(x->exp_vsize, sizeof (t_float));
+        for (i = 0; i < EX_MAX_INLETS; i++) {
+                if (x->exp_var[i].ex_type == ET_VI ||
+                    x->exp_var[i].ex_type == ET_XI)
+                        x->exp_p_var[i] = fts_calloc(x->exp_vsize,
+                                                        sizeof (t_float));
+                else
+                        x->exp_p_var[i] = (t_float *) 0;
+        }
 }
 
 /*
@@ -622,9 +689,9 @@ fexpr_tilde_set(t_expr *x, t_symbol *s, int argc, t_atom *argv)
                                 fexpr_set_usage();
                                 return;
                         }
-                        if (vecno >= MAX_VARS) {
+                        if (vecno >= EX_MAX_INLETS) {
                                 post("fexpr~.set: no more than %d inlets",
-                                                                      MAX_VARS);
+                                                              EX_MAX_INLETS);
                                 return;
                         }
                         vecno--;
@@ -711,12 +778,12 @@ fexpr_tilde_clear(t_expr *x, t_symbol *s, int argc, t_atom *argv)
         int i, nargs;
 
         /*
-         *  if no arguement clear all input and output buffers
+         *  if no argument clear all input and output buffers
          */
         if (!argc) {
                 for (i = 0; i < x->exp_nexpr; i++)
                         memset(x->exp_p_res[i], 0, x->exp_vsize*sizeof(t_float));
-                for (i = 0; i < MAX_VARS; i++)
+                for (i = 0; i < EX_MAX_INLETS; i++)
                         if (x->exp_var[i].ex_type == ET_XI)
                                 memset(x->exp_p_var[i], 0,
                                                 x->exp_vsize*sizeof(t_float));
@@ -738,9 +805,9 @@ fexpr_tilde_clear(t_expr *x, t_symbol *s, int argc, t_atom *argv)
                                 post("fexpr~.clear: bad clear x vector number");
                                 return;
                         }
-                        if (vecno >= MAX_VARS) {
+                        if (vecno >= EX_MAX_INLETS) {
                                 post("fexpr~.clear: no more than %d inlets",
-                                                                      MAX_VARS);
+                                                              EX_MAX_INLETS);
                                 return;
                         }
                         vecno--;
@@ -800,8 +867,9 @@ expr_setup(void)
             (t_method)expr_ff, sizeof(t_expr), 0, A_GIMME, 0);
         class_addmethod(expr_tilde_class, nullfn, gensym("signal"), 0);
         CLASS_MAINSIGNALIN(expr_tilde_class, t_expr, exp_f);
-        class_addmethod(expr_tilde_class,(t_method)expr_dsp, gensym("dsp"), 0);
-        class_sethelpsymbol(expr_tilde_class, gensym("expr"));
+        class_addmethod(expr_tilde_class,(t_method)expr_dsp, gensym("dsp"),
+                                                        A_CANT, 0);
+        class_sethelpsymbol(expr_tilde_class, gensym("expr~"));
         class_addmethod(expr_tilde_class,(t_method)expr_version,
                                                         gensym("version"), 0);
         /*
@@ -810,12 +878,14 @@ expr_setup(void)
         fexpr_tilde_class = class_new(gensym("fexpr~"), (t_newmethod)expr_new,
             (t_method)expr_ff, sizeof(t_expr), 0, A_GIMME, 0);
         class_addmethod(fexpr_tilde_class, nullfn, gensym("signal"), 0);
+        CLASS_MAINSIGNALIN(fexpr_tilde_class, t_expr, exp_f);
         class_addmethod(fexpr_tilde_class,(t_method)expr_start,
                                                         gensym("start"), 0);
         class_addmethod(fexpr_tilde_class,(t_method)expr_stop,
                                                         gensym("stop"), 0);
 
-        class_addmethod(fexpr_tilde_class,(t_method)expr_dsp,gensym("dsp"), 0);
+        class_addmethod(fexpr_tilde_class,(t_method)expr_dsp,gensym("dsp"),
+                                                        A_CANT, 0);
         class_addmethod(fexpr_tilde_class, (t_method)fexpr_tilde_set,
                         gensym("set"), A_GIMME, 0);
         class_addmethod(fexpr_tilde_class, (t_method)fexpr_tilde_clear,
@@ -824,7 +894,7 @@ expr_setup(void)
                                                         gensym("verbose"), 0);
         class_addmethod(fexpr_tilde_class,(t_method)expr_version,
                                                         gensym("version"), 0);
-        class_sethelpsymbol(fexpr_tilde_class, gensym("expr"));
+        class_sethelpsymbol(fexpr_tilde_class, gensym("fexpr~"));
 
 }
 
@@ -855,19 +925,100 @@ main(void)
 
 
 int
-ex_getsym(char *p, fts_symbol_t *s)
+ex_getsym(char *p, t_symbol **s)
 {
         *s = gensym(p);
         return (0);
 }
 
-const char *
-ex_symname(fts_symbol_t s)
+char *
+ex_symname(t_symbol *s)
 {
         if (!s)
             return (0);
-        return (fts_symbol_name(s));
+        return ((char *) s->s_name);
+}
+
+#if 0
+SDY tabled code for when 4 point interpolation of vectors are implemented
+/*
+ * ex_vectablelookup - a vector table look up with 4point interpolation
+ * return 0 on success
+ *     wvec - pointer to the table
+ *     tsize - table size
+ *     iptr - ptr to the index vector
+ *     optr - output pointer
+ */
+int
+ex_vectablelookup(t_expr *e, t_word *wvec, int tsize, t_float *iptr, struct ex_ex *optr)
+{
+    int i;
+    t_float pos, a, b, c, d, cminusb, frac;
+    t_word *wp;
+    int int_pos;
+    int n ; /* position in the array */
+
+    if (optr->ex_type != ET_VEC) {
+        pd_error(e, "'%s': bad ooutput type", e->exp_string);
+        memset((void *) optr->ex_vec, 0,
+                            e->exp_vsize * sizeof (t_float));
+        return (0);
+    }
+
+    if (tsize < 4) {
+        memset((void *) optr->ex_vec, 0, e->exp_vsize * sizeof (t_float));
+        return (0);
+    }
+    for (i = 0; i < e->exp_vsize; i++) {
+        pos = iptr[i];
+        if (pos <= 1) {
+            optr->ex_vec[i] = wvec[1].w_float;
+            continue;
+        }
+        if (pos >= tsize - 2) {
+            optr->ex_vec[i] = wvec[tsize - 2].w_float;
+            continue;
+        }
+        n = (int) pos;
+        if (n >= tsize - 2)
+            n = tsize - 3;
+        wp = wvec + n;
+        frac = pos - n;
+        a = wp[-1].w_float;
+        b = wp[0].w_float;
+        c = wp[1].w_float;
+        d = wp[2].w_float;
+        cminusb = c-b;
+        optr->ex_vec[i] = b + frac * ( cminusb - 0.1666667f * (1.-frac) * (
+                (d - a - 3.0f * cminusb) * frac + (d + 2.0f*a - 3.0f*b)));
+    }
+#if 0
+        /* alternative interpolation code */
+        int_pos = (int)floorl(pos);
+        frac_pos = pos - int_pos;
+
+        x2  = wvec[(tsize + int_pos - 2) % tsize].w_float;
+        x1  = wvec[(tsize + int_pos - 1) % tsize].w_float;
+        x0  = wvec[(tsize + int_pos)     % tsize].w_float;
+        xm1 = wvec[(tsize + int_pos + 1) % tsize].w_float;
+        if(int_pos >= tsize)
+            x1 = x0;
+        if(int_pos >= tsize - 1)
+            x2 = x1;
+        if(int_pos <= 0)
+            x0 = x1;
+        if(int_pos <= 1)
+            xm1 = x0;
+        a = (3.0f * (x0 - x1) - xm1 + x2) * 0.5f;
+        b = 2.0f * x1 + xm1 - (5.0f * x0 + x2) * 0.5f;
+        c = (x1 - xm1) * 0.5f;
+        optr->ex_vec[i] =
+            (((((a * frac_pos) + b) * frac_pos) + c) * frac_pos) + x0;
+#endif
+    return(0);
 }
+#endif
+
 
 /*
  * max_ex_tab -- evaluate this table access
@@ -876,29 +1027,31 @@ ex_symname(fts_symbol_t s)
  *               return 1 on error and 0 otherwise
  *
  * Arguments:
- *  the expr object
- *  table
- *  the argument
- *  the result pointer
+ *          expr - the expr object
+ *          s - table pointer
+ *          arg - pointer to the  the index argument
+ *          interpol - flag to interpolate on single float index
+ *          optr - the result pointer
  */
 int
-max_ex_tab(struct expr *expr, fts_symbol_t s, struct ex_ex *arg,
+max_ex_tab(struct expr *expr, t_symbol *s, struct ex_ex *arg, int interpol,
     struct ex_ex *optr)
 {
 #ifdef PD
         t_garray *garray;
-        int size, indx;
+        int size;
+        long indx;
+        t_float flt_value = 0.0;
         t_word *wvec;
 
         if (!s || !(garray = (t_garray *)pd_findbyclass(s, garray_class)) ||
-            !garray_getfloatwords(garray, &size, &wvec))
-        {
+            !garray_getfloatwords(garray, &size, &wvec)) {
                 optr->ex_type = ET_FLT;
                 optr->ex_flt = 0;
                 pd_error(expr, "no such table '%s'", ex_symname(s));
                 return (1);
         }
-        optr->ex_type = ET_FLT;
+#if 1
 
         switch (arg->ex_type) {
         case ET_INT:
@@ -910,12 +1063,134 @@ max_ex_tab(struct expr *expr, fts_symbol_t s, struct ex_ex *arg,
                 break;
 
         default:        /* do something with strings */
-                pd_error(expr, "expr: bad argument for table '%s'\n", fts_symbol_name(s));
-                indx = 0;
+                ex_error(expr, "expr: bad argument for table '%s'\n", fts_symbol_name(s));
+                if (optr->ex_type == ET_VEC)
+                    ex_mkvector(optr->ex_vec, 0.0, expr->exp_vsize);
+                else {
+                    optr->ex_type = ET_INT;
+                    optr->ex_int = 0;
+                }
+                return (1);
+        }
+        if (indx < 0)
+            indx = 0;
+        else if (indx >= size)
+            indx = size - 1;
+        flt_value = wvec[indx].w_float;
+        switch (optr->ex_type) {
+        case ET_VEC:
+            ex_mkvector(optr->ex_vec, flt_value, expr->exp_vsize);
+            return(0);
+        case ET_SYM:
+            ex_error(expr, "expr:'%s' bad output type  '%ld'\n",
+                              expr->exp_string, optr->ex_type);
+            break;
+        case ET_INT:
+        case ET_FLT:
+        default:
+            optr->ex_type = ET_FLT;
+            optr->ex_flt = flt_value;
+            return(0);
+        }
+        optr->ex_type = ET_INT;
+        optr->ex_int = 0;
+        return(1);
+#else /*  if 1 tabled code */
+ The code below implement 4 point interpolation of table access
+ which for now I (sdy) am tabling for the next release
+        long n;
+        float flt_value;
+        t_float pos, a, b, c, d, cminusb, frac;
+        t_word *wp;
+
+        switch (arg->ex_type) {
+        case ET_INT:
+        case ET_FLT:
+                if (arg->ex_type == ET_INT) {
+                    n = arg->ex_int;
+                    n = MAX(0,  MIN(n, size - 1));
+                    flt_value = wvec[n].w_float;
+                } else if (!interpol) {
+                    /*
+                     * for compatibility purposes with older versions we
+                     * do not interpolate the table lookup with float
+                     * values, but it will be done for signal indexes,
+                     * and in the tablelook up function
+                     */
+                    n = arg->ex_flt;
+                    n = MAX(0,  MIN(n, size - 1));
+                    flt_value = wvec[n].w_float;
+                } else { /* interpolate */
+                    pos = arg->ex_flt;
+                    if (size < 4) {
+                        flt_value = 0;
+                    } else if (pos <= 1) {
+                        flt_value = wvec[1].w_float;
+                    } else if (pos >= size - 2) {
+                        flt_value = wvec[size - 2].w_float;
+                    } else {
+                        n = (int) pos;
+                        if (n >= size - 2)
+                            n = size - 3;
+                        wp = wvec + n;
+                        frac = pos - n;
+                        a = wp[-1].w_float;
+                        b = wp[0].w_float;
+                        c = wp[1].w_float;
+                        d = wp[2].w_float;
+                        cminusb = c-b;
+                        flt_value = b + frac *
+                            ( cminusb - 0.1666667f * (1.-frac) * (
+                            (d - a - 3.0f * cminusb) * frac +
+                            (d + 2.0f*a - 3.0f*b)));
+                    }
+                }
+
+                switch (optr->ex_type) {
+                case ET_VEC:
+                        ex_mkvector(optr->ex_vec, flt_value,
+                                        expr->exp_vsize);
+                        return(0);
+                case ET_SYM:
+                        pd_error(expr, "expr:'%s' bad output type  '%ld'\n",
+                                      expr->exp_string, optr->ex_type);
+                        break;
+                case ET_INT:
+                case ET_FLT:
+                default:
+                        optr->ex_type = ET_FLT;
+                        optr->ex_flt = flt_value;
+                        return(0);
+                }
+                break;
+        case ET_VI:
+                if (optr->ex_type != ET_VEC) {
+                        pd_error(expr,
+                "expr:'%s': bad table arg - cannot convert vector to scalar\n",
+                                                expr->exp_string);
+                        break;
+                }
+                return(ex_vectablelookup(expr, wvec, size, arg->ex_vec, optr));
+
+        case ET_VEC:
+                if (optr->ex_type != ET_VEC) {
+                    pd_error(expr,
+                "expr:'%s': bad table arg - cannot convert vector to scalar\n",
+                                                 expr->exp_string);
+                    break;
+                }
+                return (ex_vectablelookup(expr, wvec, size,
+                                            arg->ex_vec, optr));
+        default:        /* do something with strings */
+                pd_error(expr,
+                      "expr:'%s' bad argument for table '%s'\n",
+                           expr->exp_string, s->s_name);
         }
-        if (indx < 0) indx = 0;
-        else if (indx >= size) indx = size - 1;
-        optr->ex_flt = wvec[indx].w_float;
+        optr->ex_type = ET_INT;
+        optr->ex_int = 0;
+        return(1);
+#endif
+
 #else /* MSP */
         /*
          * table lookup not done for MSP yet
@@ -929,10 +1204,10 @@ max_ex_tab(struct expr *expr, fts_symbol_t s, struct ex_ex *arg,
 
 /*
  * max_ex_tab_store -- store a value in a table
- *                                              tbl[arg->value] = rval.value
- *               eptr is the name of the table and arg is the index we
- *               have to put the result in optr
- *               return 1 on error and 0 otherwise
+ *      tbl[arg->value] = rval.value
+ *      eptr is the name of the table and arg is the index we
+ *      have to put the result in optr
+ *      return 1 on error and 0 otherwise
  *
  * Arguments:
  *  the expr object
@@ -943,11 +1218,12 @@ max_ex_tab(struct expr *expr, fts_symbol_t s, struct ex_ex *arg,
  */
 int
 max_ex_tab_store(struct expr *expr, t_symbol *s, struct ex_ex *arg,
-                                                                        struct ex_ex *rval, struct ex_ex *optr)
+                                        struct ex_ex *rval, struct ex_ex *optr)
 {
 #ifdef PD
         t_garray *garray;
-        int size, indx;
+        int size;
+        long indx;
         t_word *wvec;
 
         if (!s || !(garray = (t_garray *)pd_findbyclass(s, garray_class)) ||
@@ -955,9 +1231,11 @@ max_ex_tab_store(struct expr *expr, t_symbol *s, struct ex_ex *arg,
                 optr->ex_type = ET_FLT;
                 optr->ex_flt = 0;
                 if (s)
-                    pd_error(expr, "no such table to store '%s'", s->s_name);
+                    pd_error(expr, "%s: no such table to store '%s'",
+                                    expr->exp_string, s->s_name);
                 else
-                    pd_error(expr, "cannot store in unnamed table");
+                    pd_error(expr, "%s: cannot store in unnamed table",
+                                                            expr->exp_string);
                 return (1);
         }
         optr->ex_type = ET_FLT;
@@ -973,7 +1251,7 @@ max_ex_tab_store(struct expr *expr, t_symbol *s, struct ex_ex *arg,
 
         default:        /* do something with strings */
                 pd_error(expr, "expr: bad argument for table store '%s'\n",
-                        fts_symbol_name(s));
+                        s->s_name);
                 indx = 0;
         }
         if (indx < 0)
@@ -984,18 +1262,18 @@ max_ex_tab_store(struct expr *expr, t_symbol *s, struct ex_ex *arg,
         switch (rval->ex_type) {
         case ET_INT:
                 wvec[indx].w_float = rval->ex_int;
-                                break;
+                break;
         case ET_FLT:
                 wvec[indx].w_float = rval->ex_flt;
-                                break;
+                break;
         default:
                 pd_error(expr, "expr:bad right value type '%ld'", rval->ex_type);
                 optr->ex_type = ET_FLT;
                 optr->ex_flt = 0;
                 return (1);
         }
-                garray_redraw(garray);
-                return(0);
+        garray_redraw(garray);
+        return(0);
 
 #else /* MSP */
         /*
@@ -1011,31 +1289,77 @@ max_ex_tab_store(struct expr *expr, t_symbol *s, struct ex_ex *arg,
 int
 max_ex_var(struct expr *expr, t_symbol *var, struct ex_ex *optr, int idx)
 {
-        optr->ex_type = ET_FLT;
-                if (!strcmp(var->s_name, "sys_idx")) {
-                        optr->ex_flt = idx;
-                        return (0);
+        t_float value;
+        if (!strcmp(var->s_name, "sys_idx")) {
+                if (optr->ex_type == ET_VEC)
+                    ex_mkvector(optr->ex_vec, (t_float) idx, expr->exp_vsize);
+                else {
+                    optr->ex_int = idx;
+                    optr->ex_type = ET_INT;
+                }
+                return (0);
+        }
+        if (value_getfloat(var, &value)) {
+                if (!(expr->exp_error & EE_NOVAR)) {
+                        ex_error(expr, "no such var '%s'", var->s_name);
+                    if (!IS_EXPR(expr)) {
+                        post("expr: no more var errors will be reported");
+                        post("expr: till the next reset");
+                        expr->exp_error |= EE_NOVAR;
+                    }
+                }
+
+                if (optr->ex_type == ET_VEC)
+                    ex_mkvector(optr->ex_vec, 0.0, expr->exp_vsize);
+                else {
+                    optr->ex_int = 0;
+                    optr->ex_type = ET_INT;
                 }
-        if (value_getfloat(var, &(optr->ex_flt))) {
-                optr->ex_type = ET_FLT;
-                optr->ex_flt = 0;
-                pd_error(expr, "no such var '%s'", var->s_name);
                 return (1);
         }
+        if (optr->ex_type == ET_VEC)
+            ex_mkvector(optr->ex_vec, value, expr->exp_vsize);
+        else {
+            optr->ex_flt = value;
+            optr->ex_type = ET_FLT;
+        }
         return (0);
 }
 
 #ifdef PD /* this goes to the end of this file as the following functions
            * should be defined in the expr object in MSP
            */
-#define ISTABLE(sym, garray, size, vec)                               \
-if (!sym || !(garray = (t_garray *)pd_findbyclass(sym, garray_class)) || \
+#define ISTABLE(e, sym, garray, size, vec)                              \
+        switch  (argv->ex_type) {                                       \
+                case ET_SYM:                                            \
+                    if (argv->ex_flags & EX_F_TSYM) {                   \
+                        /* SDY the symbol has to be freed too */        \
+                        s = gensym(argv->ex_ptr);                       \
+                        argv->ex_flags &= ~EX_F_TSYM;                   \
+                        free(argv->ex_ptr);                             \
+                     } else                                             \
+                        s = (t_symbol *) argv->ex_ptr;                  \
+                    break;                                              \
+                case ET_SI:                                             \
+                    s = (t_symbol *) e->exp_var[argv->ex_int].ex_ptr;   \
+                    break;                                              \
+                default:                                                \
+                    post(                                               \
+                "expr:'%s' arg to function needs to be a table name\n", \
+                                                e->exp_string);         \
+                    optr->ex_type = ET_INT;                             \
+                    optr->ex_int = 0;                                   \
+                    return;                                             \
+        }                                                               \
+        if (!sym || !(garray =                                          \
+                (t_garray *)pd_findbyclass(sym, garray_class)) ||       \
                 !garray_getfloatwords(garray, &size, &vec))  {          \
-        optr->ex_type = ET_FLT;                                         \
-        optr->ex_int = 0;                                               \
-        error("no such table '%s'", sym?(sym->s_name):"(null)");                       \
-        return;                                                         \
-}
+                optr->ex_type = ET_FLT;                                 \
+                optr->ex_int = 0;                                       \
+                pd_error(0, "%s: no such table '%s'",                   \
+                        e->exp_string, sym?(sym->s_name):"(null)");     \
+                return;                                                 \
+        }
 
 /*
  * ex_size -- find the size of a table
@@ -1048,20 +1372,14 @@ ex_size(t_expr *e, long int argc, struct ex_ex *argv, struct ex_ex *optr)
         int size;
         t_word *wvec;
 
-        if (argv->ex_type != ET_SYM)
-        {
-                post("expr: size: need a table name\n");
+        ISTABLE(e, s, garray, size, wvec);
+
+        if (optr->ex_type == ET_VEC)
+                ex_mkvector(optr->ex_vec, (t_float) size, e->exp_vsize);
+        else  {
                 optr->ex_type = ET_INT;
-                optr->ex_int = 0;
-                return;
+                optr->ex_int = size;
         }
-
-        s = (fts_symbol_t ) argv->ex_ptr;
-
-        ISTABLE(s, garray, size, wvec);
-
-        optr->ex_type = ET_INT;
-        optr->ex_int = size;
 }
 
 /*
@@ -1078,23 +1396,17 @@ ex_sum(t_expr *e, long int argc, struct ex_ex *argv, struct ex_ex *optr)
         t_float sum;
         int indx;
 
-        if (argv->ex_type != ET_SYM)
-        {
-                post("expr: sum: need a table name\n");
-                optr->ex_type = ET_INT;
-                optr->ex_int = 0;
-                return;
-        }
-
-        s = (fts_symbol_t ) argv->ex_ptr;
-
-        ISTABLE(s, garray, size, wvec);
+        ISTABLE(e, s, garray, size, wvec);
 
         for (indx = 0, sum = 0; indx < size; indx++)
                 sum += wvec[indx].w_float;
 
-        optr->ex_type = ET_FLT;
-        optr->ex_flt = sum;
+        if (optr->ex_type == ET_VEC)
+                ex_mkvector(optr->ex_vec, (t_float) size, e->exp_vsize);
+        else  {
+                optr->ex_type = ET_FLT;
+                optr->ex_flt = sum;
+        }
 }
 
 
@@ -1110,173 +1422,204 @@ ex_Sum(t_expr *e, long int argc, struct ex_ex *argv, struct ex_ex *optr)
         int size;
         t_word *wvec;
         t_float sum;
-        int indx, n1, n2;
+        long indx, n1, n2;
 
-        if (argv->ex_type != ET_SYM)
-        {
-                post("expr: sum: need a table name\n");
+        ISTABLE(e, s, garray, size, wvec);
+
+        switch((++argv)->ex_type) {
+        case ET_INT:
+            n1 = argv->ex_int;
+            break;
+        case ET_FLT:
+            n1 = argv->ex_flt;
+            break;
+        default:
+            ex_error(e, "expr: Sum: boundaries have to be fix values\n");
+            if (optr->ex_type == ET_VEC)
+                ex_mkvector(optr->ex_vec, 0.0, e->exp_vsize);
+            else {
                 optr->ex_type = ET_INT;
                 optr->ex_int = 0;
-                return;
+            }
+            return;
         }
+        if (n1 < 0)
+            n1 = 0;
 
-        s = (fts_symbol_t ) argv->ex_ptr;
-
-        ISTABLE(s, garray, size, wvec);
-
-                switch((++argv)->ex_type) {
-                case ET_INT:
-                n1 = argv->ex_int;
-                        break;
-                case ET_FLT:
-                n1 = argv->ex_flt;
-                        break;
-                default:
-                        post("expr: Sum: boundaries have to be fix values\n");
-                        optr->ex_type = ET_INT;
-                        optr->ex_int = 0;
-                        return;
-                }
-                if (n1 < 0)
-                        n1 = 0;
-
-                switch((++argv)->ex_type) {
-                case ET_INT:
-                n2 = argv->ex_int;
-                        break;
-                case ET_FLT:
-                n2 = argv->ex_flt;
-                        break;
-                default:
-                        post("expr: Sum: boundaries have to be fix values\n");
-                        optr->ex_type = ET_INT;
-                        optr->ex_int = 0;
-                        return;
-                }
-                if (n2 > size)
-                        n2 = size;
+        switch((++argv)->ex_type) {
+        case ET_INT:
+            n2 = argv->ex_int;
+            break;
+        case ET_FLT:
+            n2 = argv->ex_flt;
+            break;
+        default:
+            ex_error(e, "expr: Sum: boundaries have to be fix values\n");
+            if (optr->ex_type == ET_VEC)
+                ex_mkvector(optr->ex_vec, 0.0, e->exp_vsize);
+            else {
+                optr->ex_type = ET_INT;
+                optr->ex_int = 0;
+            }
+            return;
+        }
+        if (n2 > size)
+            n2 = size;
 
         for (indx = n1, sum = 0; indx <= n2; indx++)
-                        if (indx >= 0 && indx < size)
-                                sum += wvec[indx].w_float;
+            if (indx >= 0 && indx < size)
+                sum += wvec[indx].w_float;
 
-        optr->ex_type = ET_FLT;
-        optr->ex_flt = sum;
+        if (optr->ex_type == ET_VEC)
+            ex_mkvector(optr->ex_vec, sum, e->exp_vsize);
+        else {
+            optr->ex_type = ET_FLT;
+            optr->ex_flt = sum;
+        }
 }
 
 /*
- * ex_avg -- calculate the avarage of a table
+ * ex_avg -- calculate the average of a table
  */
 
 void
 ex_avg(t_expr *e, long int argc, struct ex_ex *argv, struct ex_ex *optr)
-{ /* SDY - look into this function */
-#if 0
-        fts_symbol_t s;
-        fts_integer_vector_t *tw = 0;
+{
+        t_symbol *s;
+        t_garray *garray;
+        int size;
+        t_word *wvec;
+        t_float sum;
+        int indx;
 
-        if (argv->ex_type != ET_SYM) {
-                post("expr: avg: need a table name\n");
-                optr->ex_type = ET_INT;
-                optr->ex_int = 0;
-                return;
-        }
+        ISTABLE(e, s, garray, size, wvec);
 
-        s = (fts_symbol_t ) argv->ex_ptr;
-        tw = table_integer_vector_get_by_name(s);
+        for (indx = 0, sum = 0; indx < size; indx++)
+                sum += wvec[indx].w_float;
 
-        if (tw) {
-                optr->ex_type = ET_INT;
-                if (! fts_integer_vector_get_size(tw))
-                        optr->ex_int = 0;
-                else
-                        optr->ex_int = fts_integer_vector_get_sum(tw) / fts_integer_vector_get_size(tw);
-        } else {
-                optr->ex_type = ET_INT;
-                optr->ex_int = 0;
-                post("expr: avg: no such table %s\n", fts_symbol_name(s));
+        if (optr->ex_type == ET_VEC)
+            ex_mkvector(optr->ex_vec, sum / size, e->exp_vsize);
+        else {
+            optr->ex_type = ET_FLT;
+            optr->ex_flt = sum / size;
         }
-#endif
 }
 
 
 /*
- * ex_Avg -- calculate the avarage of table with the given boundaries
+ * ex_Avg -- calculate the average of table with the given boundaries
  */
 
 void
 ex_Avg(t_expr *e, long int argc, struct ex_ex *argv, struct ex_ex *optr)
 {
-/* SDY - look into this function */
-#if 0
-        fts_symbol_t s;
-        fts_integer_vector_t *tw = 0;
-
-        if (argv->ex_type != ET_SYM)
-        {
-                post("expr: Avg: need a table name\n");
-                optr->ex_type = ET_INT;
-                optr->ex_int = 0;
-        }
-
-        s = (fts_symbol_t ) (argv++)->ex_ptr;
+        t_symbol *s;
+        t_garray *garray;
+        int size;
+        t_word *wvec;
+        t_float sum;
+        long indx, n1, n2;
 
-        tw = table_integer_vector_get_by_name(s);
+        ISTABLE(e, s, garray, size, wvec);
 
-        if (! tw)
-        {
-                optr->ex_type = ET_INT;
-                optr->ex_int = 0;
-                post("expr: Avg: no such table %s\n", fts_symbol_name(s));
+        switch((++argv)->ex_type) {
+        case ET_INT:
+                n1 = argv->ex_int;
+                break;
+        case ET_FLT:
+                n1 = argv->ex_flt;
+                        break;
+        default:
+                ex_error(e, "expr: Avg: boundaries have to be fix values\n");
+                if (optr->ex_type == ET_VEC)
+                    ex_mkvector(optr->ex_vec, 0.0, e->exp_vsize);
+                else {
+                    optr->ex_type = ET_INT;
+                    optr->ex_int = 0;
+                }
                 return;
         }
+        if (n1 < 0)
+                n1 = 0;
 
-        if (argv->ex_type != ET_INT || argv[1].ex_type != ET_INT)
-        {
-                post("expr: Avg: boundaries have to be fix values\n");
-                optr->ex_type = ET_INT;
-                optr->ex_int = 0;
+        switch((++argv)->ex_type) {
+        case ET_INT:
+                n2 = argv->ex_int;
+                        break;
+        case ET_FLT:
+                n2 = argv->ex_flt;
+                        break;
+        default:
+                ex_error(e, "expr: Avg: boundaries have to be fix values\n");
+                if (optr->ex_type == ET_VEC)
+                    ex_mkvector(optr->ex_vec, 0.0, e->exp_vsize);
+                else {
+                    optr->ex_type = ET_INT;
+                    optr->ex_int = 0;
+                }
                 return;
         }
+        if (n2 >= size)
+                n2 = size - 1;
 
-        optr->ex_type = ET_INT;
-
-        if (argv[1].ex_int - argv->ex_int <= 0)
-                optr->ex_int = 0;
-        else
-                optr->ex_int = (fts_integer_vector_get_sub_sum(tw, argv->ex_int, argv[1].ex_int) /
-                    (argv[1].ex_int - argv->ex_int));
-#endif
+        for (indx = n1, sum = 0; indx <= n2; indx++)
+                if (indx >= 0 && indx < size)
+                        sum += wvec[indx].w_float;
+
+        if (optr->ex_type == ET_VEC)
+            ex_mkvector(optr->ex_vec, sum / (n2 - n1 + 1), e->exp_vsize);
+        else {
+            optr->ex_type = ET_FLT;
+            optr->ex_flt = sum / (n2 - n1 + 1);
+        }
 }
+
 /*
  * max_ex_store --- store a value in a variable or table
  */
 int
 max_ex_var_store(struct expr *expr, t_symbol * var, struct ex_ex *eptr, struct ex_ex *optr)
 {
-                t_float value = 0.;
+        t_float value = 0.;
 
-                *optr = *eptr;
-                switch (eptr->ex_type) {
-                case ET_INT:
-                        value = eptr->ex_int;
-                        break;
-                case ET_FLT:
-                        value = eptr->ex_flt;
-                        break;
-                default:
-                        post("do not know yet\n");
+        switch (eptr->ex_type) {
+        case ET_INT:
+                value = eptr->ex_int;
+                break;
+        case ET_FLT:
+                value = eptr->ex_flt;
+                break;
+        default:
+                ex_error(expr, "bad right value - '%s'\n", expr->exp_string);
+                if (optr->ex_type == ET_VEC)
+                    ex_mkvector(optr->ex_vec, 0.0, expr->exp_vsize);
+                else {
+                    optr->ex_int = 0;
+                    optr->ex_type = ET_INT;
                 }
+                return (1);
+        }
 
         if (value_setfloat(var, value)) {
-                optr->ex_flt = 0;
-                pd_error(expr, "no such var '%s'", var->s_name);
+                ex_error(expr, "no such var '%s'", var->s_name);
+                if (optr->ex_type == ET_VEC)
+                    ex_mkvector(optr->ex_vec, 0.0, expr->exp_vsize);
+                else {
+                    optr->ex_type = ET_INT;
+                    optr->ex_int = 0;
+                }
                 return (1);
         }
+        if (optr->ex_type == ET_VEC)
+            ex_mkvector(optr->ex_vec, value, expr->exp_vsize);
+        else
+            *optr = *eptr;
         return (0);
 }
 
 /*
+ * UNUSED FUNCTION
+ *
  * ex_store -- store a value in a table
  *             if the index is greater the size of the table,
  *             we will make a modulo the size of the table
@@ -1287,7 +1630,7 @@ ex_store(t_expr *e, long int argc, struct ex_ex *argv, struct ex_ex *optr)
 {
 /* SDY - look into this function */
 #if 0
-        fts_symbol_t s;
+        t_symbol *s;
         fts_integer_vector_t *tw = 0;
 
         if (argv->ex_type != ET_SYM)
@@ -1295,7 +1638,7 @@ ex_store(t_expr *e, long int argc, struct ex_ex *argv, struct ex_ex *optr)
                 post("expr: store: need a table name\n");
         }
 
-        s = (fts_symbol_t ) (argv++)->ex_ptr;
+        s = (t_symbol *) (argv++)->ex_ptr;
 
         tw = table_integer_vector_get_by_name(s);
 
@@ -1303,7 +1646,7 @@ ex_store(t_expr *e, long int argc, struct ex_ex *argv, struct ex_ex *optr)
         {
                 optr->ex_type = ET_INT;
                 optr->ex_int = 0;
-                post("expr: store: no such table %s\n", fts_symbol_name(s));
+                post("expr: store: no such table %s\n", s->s_name);
                 return;
         }