Browse Source

Cleanup - Removed not registered submodules

pull/320/head
U-ACTIVED\danielez 7 years ago
parent
commit
456623f06e
100 changed files with 0 additions and 51047 deletions
  1. +0
    -674
      repos/AepelzensModules/LICENSE
  2. +0
    -13
      repos/AepelzensModules/Makefile
  3. +0
    -78
      repos/AepelzensModules/README.md
  4. BIN
      repos/AepelzensModules/images/screenshot.png
  5. +0
    -546
      repos/AepelzensModules/res/Burst.svg
  6. +0
    -154
      repos/AepelzensModules/res/Dice.svg
  7. +0
    -233
      repos/AepelzensModules/res/Erwin.svg
  8. +0
    -370
      repos/AepelzensModules/res/Folder.svg
  9. +0
    -862
      repos/AepelzensModules/res/GateSeq.svg
  10. +0
    -685
      repos/AepelzensModules/res/QuadSeq.svg
  11. +0
    -370
      repos/AepelzensModules/res/Walker.svg
  12. +0
    -163
      repos/AepelzensModules/res/Werner.svg
  13. +0
    -70
      repos/AepelzensModules/res/knob_29px.svg
  14. +0
    -163
      repos/AepelzensModules/src/Dice.cpp
  15. +0
    -160
      repos/AepelzensModules/src/Erwin.cpp
  16. +0
    -520
      repos/AepelzensModules/src/GateSeq.cpp
  17. +0
    -292
      repos/AepelzensModules/src/QuadSeq.cpp
  18. +0
    -103
      repos/AepelzensModules/src/Walker.cpp
  19. +0
    -76
      repos/AepelzensModules/src/Werner.cpp
  20. +0
    -19
      repos/AepelzensModules/src/aepelzen.cpp
  21. +0
    -21
      repos/AepelzensModules/src/aepelzen.hpp
  22. +0
    -253
      repos/AepelzensModules/src/burst.cpp
  23. +0
    -222
      repos/AepelzensModules/src/folder.cpp
  24. +0
    -29
      repos/AmalgamatedHarmonics/LICENSE
  25. +0
    -27
      repos/AmalgamatedHarmonics/Makefile
  26. +0
    -10
      repos/AmalgamatedHarmonics/README.md
  27. BIN
      repos/AmalgamatedHarmonics/doc/54.jpg
  28. BIN
      repos/AmalgamatedHarmonics/doc/arp.jpg
  29. BIN
      repos/AmalgamatedHarmonics/doc/arp2.jpg
  30. BIN
      repos/AmalgamatedHarmonics/doc/imperfect.jpg
  31. BIN
      repos/AmalgamatedHarmonics/doc/progress.jpg
  32. BIN
      repos/AmalgamatedHarmonics/doc/quant1.jpg
  33. BIN
      repos/AmalgamatedHarmonics/doc/quant2.jpg
  34. +0
    -1936
      repos/AmalgamatedHarmonics/res/Arpeggiator.svg
  35. +0
    -1943
      repos/AmalgamatedHarmonics/res/Arpeggiator2.svg
  36. +0
    -2146
      repos/AmalgamatedHarmonics/res/Circle.svg
  37. +0
    -81
      repos/AmalgamatedHarmonics/res/ComponentLibrary/AHButton.svg
  38. +0
    -101
      repos/AmalgamatedHarmonics/res/ComponentLibrary/AHKnob.svg
  39. +0
    -433
      repos/AmalgamatedHarmonics/res/ComponentLibrary/AHTrimpot.svg
  40. +0
    -95
      repos/AmalgamatedHarmonics/res/DSEG-LICENSE.txt
  41. BIN
      repos/AmalgamatedHarmonics/res/DSEG14ClassicMini-BoldItalic.ttf
  42. BIN
      repos/AmalgamatedHarmonics/res/EurostileBold.ttf
  43. +0
    -1615
      repos/AmalgamatedHarmonics/res/Imperfect.svg
  44. +0
    -1740
      repos/AmalgamatedHarmonics/res/Imperfect2.svg
  45. +0
    -2130
      repos/AmalgamatedHarmonics/res/Progress.svg
  46. BIN
      repos/AmalgamatedHarmonics/res/Roboto-Light.ttf
  47. +0
    -1464
      repos/AmalgamatedHarmonics/res/Ruckus.svg
  48. +0
    -2313
      repos/AmalgamatedHarmonics/res/ScaleQuantizer.svg
  49. +0
    -2230
      repos/AmalgamatedHarmonics/res/ScaleQuantizerMkII.svg
  50. +0
    -30
      repos/AmalgamatedHarmonics/src/AH.cpp
  51. +0
    -30
      repos/AmalgamatedHarmonics/src/AH.hpp
  52. +0
    -573
      repos/AmalgamatedHarmonics/src/Arpeggiator.cpp
  53. +0
    -1016
      repos/AmalgamatedHarmonics/src/ArpeggiatorMkII.cpp
  54. +0
    -297
      repos/AmalgamatedHarmonics/src/Circle.cpp
  55. +0
    -202
      repos/AmalgamatedHarmonics/src/Core.cpp
  56. +0
    -524
      repos/AmalgamatedHarmonics/src/Core.hpp
  57. +0
    -204
      repos/AmalgamatedHarmonics/src/Imperfect.cpp
  58. +0
    -407
      repos/AmalgamatedHarmonics/src/Imperfect2.cpp
  59. +0
    -556
      repos/AmalgamatedHarmonics/src/Progress.cpp
  60. +0
    -284
      repos/AmalgamatedHarmonics/src/Ruckus.cpp
  61. +0
    -158
      repos/AmalgamatedHarmonics/src/ScaleQuantizer.cpp
  62. +0
    -206
      repos/AmalgamatedHarmonics/src/ScaleQuantizerMkII.cpp
  63. +0
    -76
      repos/AmalgamatedHarmonics/src/UI.cpp
  64. +0
    -201
      repos/AmalgamatedHarmonics/src/UI.hpp
  65. +0
    -1899
      repos/AmalgamatedHarmonics/ui/Arpeggiator2_src.svg
  66. +0
    -1862
      repos/AmalgamatedHarmonics/ui/Arpeggiator_src.svg
  67. +0
    -1932
      repos/AmalgamatedHarmonics/ui/Circle_src.svg
  68. +0
    -1668
      repos/AmalgamatedHarmonics/ui/Imperfect2_src.svg
  69. +0
    -1593
      repos/AmalgamatedHarmonics/ui/Imperfect_src.svg
  70. +0
    -2024
      repos/AmalgamatedHarmonics/ui/Progress_src.svg
  71. +0
    -1474
      repos/AmalgamatedHarmonics/ui/Ruckus_src.svg
  72. +0
    -2079
      repos/AmalgamatedHarmonics/ui/ScaleQuantizerMkII_src.svg
  73. +0
    -2328
      repos/AmalgamatedHarmonics/ui/ScaleQuantizer_src.svg
  74. +0
    -3
      repos/ArableInstruments/.gitignore
  75. +0
    -18
      repos/ArableInstruments/.gitmodules
  76. +0
    -23
      repos/ArableInstruments/LICENSE-dist.txt
  77. +0
    -11
      repos/ArableInstruments/LICENSE.txt
  78. +0
    -30
      repos/ArableInstruments/Makefile
  79. +0
    -32
      repos/ArableInstruments/Makefile.parasite
  80. +0
    -48
      repos/ArableInstruments/README.md
  81. +0
    -48
      repos/ArableInstruments/parasites/.gitignore
  82. +0
    -15
      repos/ArableInstruments/parasites/.gitmodules
  83. +0
    -28
      repos/ArableInstruments/parasites/README.md
  84. +0
    -0
      repos/ArableInstruments/parasites/__init__.py
  85. +0
    -0
      repos/ArableInstruments/parasites/braids/__init__.py
  86. +0
    -602
      repos/ArableInstruments/parasites/braids/analog_oscillator.cc
  87. +0
    -162
      repos/ArableInstruments/parasites/braids/analog_oscillator.h
  88. +0
    -0
      repos/ArableInstruments/parasites/braids/bootloader/__init__.py
  89. +0
    -231
      repos/ArableInstruments/parasites/braids/bootloader/bootloader.cc
  90. +0
    -104
      repos/ArableInstruments/parasites/braids/bootloader/characters.cc
  91. +0
    -45
      repos/ArableInstruments/parasites/braids/bootloader/characters.h
  92. +0
    -43
      repos/ArableInstruments/parasites/braids/bootloader/makefile
  93. +0
    -311
      repos/ArableInstruments/parasites/braids/braids.cc
  94. BIN
      repos/ArableInstruments/parasites/braids/data/map.bin
  95. +0
    -97
      repos/ArableInstruments/parasites/braids/data/waves.bin
  96. +0
    -2568
      repos/ArableInstruments/parasites/braids/digital_oscillator.cc
  97. +0
    -383
      repos/ArableInstruments/parasites/braids/digital_oscillator.h
  98. +0
    -128
      repos/ArableInstruments/parasites/braids/drivers/adc.cc
  99. +0
    -90
      repos/ArableInstruments/parasites/braids/drivers/adc.h
  100. +0
    -64
      repos/ArableInstruments/parasites/braids/drivers/dac.cc

+ 0
- 674
repos/AepelzensModules/LICENSE View File

@@ -1,674 +0,0 @@
GNU GENERAL PUBLIC LICENSE
Version 3, 29 June 2007

Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.

Preamble

The GNU General Public License is a free, copyleft license for
software and other kinds of works.

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.

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.

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.

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.

Developers that use the GNU GPL protect your rights with two steps:
(1) assert copyright on the software, and (2) offer you this License
giving you legal permission to copy, distribute and/or modify it.

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.

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.

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.

The precise terms and conditions for copying, distribution and
modification follow.

TERMS AND CONDITIONS

0. Definitions.

"This License" refers to version 3 of the GNU General Public License.

"Copyright" also means copyright-like laws that apply to other kinds of
works, such as semiconductor masks.

"The Program" refers to any copyrightable work licensed under this
License. Each licensee is addressed as "you". "Licensees" and
"recipients" may be individuals or organizations.

To "modify" 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 "modified version" of the
earlier work or a work "based on" the earlier work.

A "covered work" means either the unmodified Program or a work based
on the Program.

To "propagate" 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.

To "convey" 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.

An interactive user interface displays "Appropriate Legal Notices"
to the extent that it includes a convenient and prominently visible
feature that (1) displays an appropriate copyright notice, and (2)
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. If
the interface presents a list of user commands or options, such as a
menu, a prominent item in the list meets this criterion.

1. Source Code.

The "source code" for a work means the preferred form of the work
for making modifications to it. "Object code" means any non-source
form of a work.

A "Standard Interface" 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.

The "System Libraries" 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
"Major Component", 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.

The "Corresponding Source" 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.

The Corresponding Source need not include anything that users
can regenerate automatically from other parts of the Corresponding
Source.

The Corresponding Source for a work in source code form is that
same work.

2. Basic Permissions.

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.

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.

Conveying under any other circumstances is permitted solely under
the conditions stated below. Sublicensing is not allowed; section 10
makes it unnecessary.

3. Protecting Users' Legal Rights From Anti-Circumvention Law.

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.

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.

4. Conveying Verbatim Copies.

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.

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.

5. Conveying Modified Source Versions.

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:

a) The work must carry prominent notices stating that you modified
it, and giving a relevant date.

b) 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
"keep intact all notices".

c) 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.

d) 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.

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
"aggregate" 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.

6. Conveying Non-Source Forms.

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:

a) 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.

b) 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 (1) 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 (2) access to copy the
Corresponding Source from a network server at no charge.

c) 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.

d) 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.

e) 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.

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.

A "User Product" is either (1) a "consumer product", which means any
tangible personal property which is normally used for personal, family,
or household purposes, or (2) anything designed or sold for incorporation
into a dwelling. 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, "normally used" 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.

"Installation Information" 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.

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).

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.

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.

7. Additional Terms.

"Additional permissions" 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.

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.

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:

a) Disclaiming warranty or limiting liability differently from the
terms of sections 15 and 16 of this License; or

b) 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

c) 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

d) Limiting the use for publicity purposes of names of licensors or
authors of the material; or

e) Declining to grant rights under trademark law for use of some
trade names, trademarks, or service marks; or

f) 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.

All other non-permissive additional terms are considered "further
restrictions" 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.

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.

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.

8. Termination.

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).

However, if you cease all violation of this License, then your
license from a particular copyright holder is reinstated (a)
provisionally, unless and until the copyright holder explicitly and
finally terminates your license, and (b) permanently, if the copyright
holder fails to notify you of the violation by some reasonable means
prior to 60 days after the cessation.

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.

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.

9. Acceptance Not Required for Having Copies.

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.

10. Automatic Licensing of Downstream Recipients.

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.

An "entity transaction" 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.

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.

11. Patents.

A "contributor" 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 "contributor version".

A contributor's "essential patent claims" 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, "control" includes the right to grant
patent sublicenses in a manner consistent with the requirements of
this License.

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.

In the following three paragraphs, a "patent license" 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 "grant" such a patent license to a
party means to make such an agreement or commitment not to enforce a
patent against the party.

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 (1) cause the Corresponding Source to be so
available, or (2) arrange to deprive yourself of the benefit of the
patent license for this particular work, or (3) arrange, in a manner
consistent with the requirements of this License, to extend the patent
license to downstream recipients. "Knowingly relying" 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.

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.

A patent license is "discriminatory" 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 (a) in connection with copies of the covered work
conveyed by you (or copies made from those copies), or (b) 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.

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.

12. No Surrender of Others' Freedom.

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.

13. Use with the GNU Affero General Public License.

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.

14. Revised Versions of this License.

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.

Each version is given a distinguishing version number. If the
Program specifies that a certain numbered version of the GNU General
Public License "or any later version" 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.

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.

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.

15. Disclaimer of Warranty.

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 "AS IS" 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.

16. Limitation of Liability.

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.

17. Interpretation of Sections 15 and 16.

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.

END OF TERMS AND CONDITIONS

How to Apply These Terms to Your New Programs

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.

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 "copyright" line and a pointer to where the full notice is found.

<one line to give the program's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>

This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
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 <http://www.gnu.org/licenses/>.

Also add information on how to contact you by electronic and paper mail.

If the program does terminal interaction, make it output a short
notice like this when it starts in an interactive mode:

<program> Copyright (C) <year> <name of author>
This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.

The hypothetical commands `show w' and `show c' 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 "about box".

You should also get your employer (if you work as a programmer) or school,
if any, to sign a "copyright disclaimer" for the program, if necessary.
For more information on this, and how to apply and follow the GNU GPL, see
<http://www.gnu.org/licenses/>.

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
<http://www.gnu.org/philosophy/why-not-lgpl.html>.

+ 0
- 13
repos/AepelzensModules/Makefile View File

@@ -1,13 +0,0 @@
SLUG = "Aepelzens Modules"
VERSION = 0.6.0dev

#FLAGS += -D v_050_dev

LDFLAGS += -lsamplerate

SOURCES += $(wildcard src/*.cpp)

DISTRIBUTABLES += $(wildcard LICENSE*) res

RACK_DIR ?= ../..
include $(RACK_DIR)/plugin.mk

+ 0
- 78
repos/AepelzensModules/README.md View File

@@ -1,78 +0,0 @@
# VCV Rack plugins

![screenshot](https://github.com/Aepelzen/AepelzensModules/blob/master/images/screenshot.png)

## GateSeq

A Gate Sequencer with pattern support intended for polyrhythms. Every channel has it's own clock input and length. There is also a global clock input and an internal clock. Furthermore each channel has a probability setting that sets the probability that an active beat will be sent out.

To set the length for a channel hit the length button. It will turn red to indicate that you are now in length-mode. In this mode every channel has a red step button (or a yellow one if that step is also active) which indicates the last step in the sequence. Just press another step to change the length. To leave length-mode push the length button again. The length settings are tied to the pattern and will get copied if you copy a pattern.

To copy a pattern, select the pattern you want to copy first. Push the copy button to enable copy-mode, switch to the target pattern and hit the copy button again to paste your pattern. This will overwrite the target pattern.

The switch over the pattern input determines wheater all channel positions should be reset when switching patterns (i. e. start the pattern from the beginning). This might be useful to realign the channels when switching from a pattern that uses different lengths per channel. When inactive the pattern will just keep running.

### Pattern Merging (work in progress)

You can create new patterns out of existing ones by merging them. The workflow is similar to copying. Select the base-pattern first and push the merge button. Now select another pattern and this new pattern will get merged with the base-pattern according to the merge-mode (selected with the knob below the merge button). The base pattern defines the channel lengths (this might change in future versions). Currently the following merge modes are available:
* OR
* AND
* XOR
* NOR
* Random (choose one of the two patterns randomly for each step and channel)

## QuadSeq

A four channel sequencer (The knobs are made by bogaudio). Like GateSeq each channel has it's own clock input (the 4 inputs on the bottom left) and length. The mode parameter sets one of the following playback modes:
* Forward
* Backwad
* Alternating
* Random Neighbour
* Random

## New Module: Dice

Another sequencer. This one is built around probabilities and comes with all the usual goodies (per
channel clock, length and playback modes). All unconnected clock inputs are normalised to the first
clock input. The knobs set the probability for a step to be active. Unfortunately there is not
enough space for labels but this should be simple enough to work without. The upper knob in the gray
area sets the channel length, the lower one the playback mode (these work like in QuadSeq). The
button in the upper left corner resets the playback positions.

## Burst

A Burst generator. For every received trigger a number of triggers and an accompanying CV signal is sent out.
Repetitions and time set the number of triggers and the time between them. Acceleration shortens the time between subsequent triggers, jitter shifts them randomly. The switch at the bootom controls the output mode (trigger or gate).

The last trigger also triggers the EOC (end of cycle) output. You can connect this to the trigger input and turn up jitter and/or acceleration to get an irregular clock or chain multiple burst generators together.
The mode button selects the mode for the CV output, that can be used to modulate pitch or filter cutoff for delay style effects etc. Currently the following modes are supported:
* Up: cv increases in even steps
* Down: cv decreases in even steps
* Alternating1: output alternates between positive and negative values. The magnitude is only increased after 2 pulses (so you get 0, 1, -1, 2, -2 ...)
* Alternating2: output alternates between positive and negative values. The magnitude is increased after every pulse (so you get 0, 1, -2, 3, -4 ...)
* Randomp: positive random values
* Randomn: negative random values
* Random

If you have ideas for additional CV-Modes or any other suggestions please let me know.

## Manifold

A wavefolder. Works best with simple input signals like sine or triangle waves. The fold and symmetry inputs work well with CV and audio signals. The output becomes pretty noisy for high frequency modulators but produces very interesting sounds at low/mid frequency ranges. There is an alternative folding algorithm that can be switched via context menu. That one does all the folding in a single pass and therefore the stages button does nothing if this mode is selected. It also responds different to the symmetry parameter, especially with a high number of folds.

Note: this module shifts the phase of the input-signal (because of the upsampling)

## Walker

A CV generator that simulates a random walk. At every step the CV output changes by either plus or minus stepsize. The decision is affected by the Symmetry parameter. At 12 o'clock both directions are equally likely, fully ccw all steps move downward, full cw all steps move upward. The Switch controls the behaviour at the range boundaries. There are 3 possible modes:
* Clip the signal at the boundary and just wait for it to eventually get back into the allowed range (depending on the symmetry parameter this might not happen or take a long time)
* Reset to zero
* Reset to random value within ± range/2 (this is also affected by the Symmetry parameter)

## Erwin

A 4-channel scale-quantiser with user-definable scales. All inputs/outputs use the same scale, however you can transpose every channel seperately by ±4 octaves (the 4 small trimpots). You can also transpose all outputs by 4 octaves and/or 12 semitonses via CV inputs.

# Building

The wavefolder uses libsamplerate for the upsampling. That shouldn't be a problem because Rack depends on libsamplerate anyway but you might have to install the header-files if you don't build Rack yourself.

BIN
repos/AepelzensModules/images/screenshot.png View File

Before After
Width: 660  |  Height: 761  |  Size: 243KB

+ 0
- 546
repos/AepelzensModules/res/Burst.svg View File

@@ -1,546 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<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"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
id="svg8"
width="89.99999"
height="380.00004"
viewBox="0 0 89.99999 380.00004"
version="1.1"
sodipodi:docname="Burst.svg"
inkscape:version="0.92.2 5c3e80d, 2017-08-06">
<metadata
id="metadata29">
<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>BlankPanel1</dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs27">
<clipPath
id="clipPath837"
clipPathUnits="userSpaceOnUse">
<path
inkscape:connector-curvature="0"
id="path835"
d="M 0,842 H 595 V 0 H 0 Z" />
</clipPath>
<clipPath
id="clipPath13703"
clipPathUnits="userSpaceOnUse">
<path
inkscape:connector-curvature="0"
id="path13701"
d="M 0,1020.448 H 935.433 V 0 H 0 Z" />
</clipPath>
</defs>
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1898"
inkscape:window-height="1026"
id="namedview25"
showgrid="false"
inkscape:zoom="2.1091365"
inkscape:cx="-57.712678"
inkscape:cy="227.91815"
inkscape:window-x="10"
inkscape:window-y="42"
inkscape:window-maximized="0"
inkscape:current-layer="svg8"
showguides="true"
inkscape:guide-bbox="true" />
<title
id="title2">BlankPanel1</title>
<g
transform="matrix(1.3333333,0,0,-1.3333333,-826.22953,717.78288)"
inkscape:label="1"
id="g827"
style="opacity:1">
<g
id="g831">
<g
transform="translate(619.08227,-482.18084)"
inkscape:label="02"
id="g13693">
<path
inkscape:connector-curvature="0"
id="path13695"
style="fill:#091942;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.22436777"
d="M 0,735.3352 H 68.666843 V 1020.448 H 0 Z" />
<path
style="opacity:1;fill:#e6e6e6;fill-opacity:1;stroke:#000000;stroke-width:0.47412768;stroke-linecap:square;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.98999999"
d="M -0.45300759,190.33385 V 0.445719 H 45.063249 90.579506 V 190.33385 380.22199 H 45.063249 -0.45300759 Z"
id="path26"
inkscape:connector-curvature="0"
transform="matrix(0.75000002,0,0,-0.75000002,0.58989299,1020.518)" />
</g>
</g>
<g
inkscape:groupmode="layer"
id="layer2"
inkscape:label="Layer 1"
style="opacity:0">
<image
sodipodi:absref="/tmp/seq.png"
y="-538.26715"
x="619.08228"
id="image80"
xlink:href="file:///tmp/seq.png"
preserveAspectRatio="none"
height="290.25"
width="67.5"
transform="scale(1,-1)" />
</g>
<g
aria-label="Burst!"
transform="scale(1,-1)"
style="font-style:normal;font-weight:normal;font-size:9px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.75px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
id="text85">
<path
d="m 639.28046,-524.65674 v -8.53125 h 2.98828 q 1.55273,0 2.35547,0.59766 0.80273,0.59179 0.80273,1.74023 0,0.62696 -0.32226,1.10742 -0.32227,0.47461 -0.89649,0.69727 0.65625,0.16406 1.03125,0.66211 0.38086,0.49805 0.38086,1.21875 0,1.23047 -0.78516,1.86328 -0.78515,0.63281 -2.23828,0.64453 z m 1.75781,-3.71484 v 2.30273 h 1.50586 q 0.62109,0 0.9668,-0.29297 0.35156,-0.29882 0.35156,-0.82031 0,-1.17187 -1.21289,-1.18945 z m 0,-1.24219 h 1.30078 q 1.33008,-0.0234 1.33008,-1.06055 0,-0.58007 -0.33985,-0.83203 -0.33398,-0.25781 -1.06054,-0.25781 h -1.23047 z"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:12px;font-family:Roboto;-inkscape-font-specification:'Roboto, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px"
id="path1101"
inkscape:connector-curvature="0" />
<path
d="m 650.63007,-525.30127 q -0.62696,0.76172 -1.73438,0.76172 -1.01953,0 -1.55859,-0.58594 -0.53321,-0.58594 -0.54492,-1.7168 v -4.15429 h 1.69335 v 4.0957 q 0,0.99024 0.90235,0.99024 0.86133,0 1.18359,-0.59766 v -4.48828 h 1.69922 v 6.33984 h -1.59375 z"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:12px;font-family:Roboto;-inkscape-font-specification:'Roboto, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px"
id="path1103"
inkscape:connector-curvature="0" />
<path
d="m 657.12225,-529.40869 q -0.3457,-0.0469 -0.60937,-0.0469 -0.96094,0 -1.25977,0.65039 v 4.14844 h -1.69336 v -6.33984 h 1.59961 l 0.0469,0.75586 q 0.50976,-0.87305 1.41211,-0.87305 0.28125,0 0.52734,0.0762 z"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:12px;font-family:Roboto;-inkscape-font-specification:'Roboto, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px"
id="path1105"
inkscape:connector-curvature="0" />
<path
d="m 661.37616,-526.40869 q 0,-0.31055 -0.31055,-0.48633 -0.30468,-0.18164 -0.98437,-0.32227 -2.26172,-0.4746 -2.26172,-1.92187 0,-0.84375 0.69726,-1.40625 0.70313,-0.56836 1.83399,-0.56836 1.20703,0 1.92773,0.56836 0.72657,0.56836 0.72657,1.47656 h -1.69336 q 0,-0.36328 -0.23438,-0.59765 -0.23437,-0.24024 -0.73242,-0.24024 -0.42773,0 -0.66211,0.19336 -0.23437,0.19336 -0.23437,0.49219 0,0.28125 0.26367,0.45703 0.26953,0.16992 0.90234,0.29883 0.63281,0.12304 1.06641,0.28125 1.34179,0.49219 1.34179,1.70508 0,0.86718 -0.74414,1.40625 -0.74414,0.5332 -1.92187,0.5332 -0.79688,0 -1.41797,-0.28125 -0.61523,-0.28711 -0.9668,-0.7793 -0.35156,-0.49804 -0.35156,-1.07226 h 1.60547 q 0.0234,0.45117 0.33398,0.6914 0.31055,0.24024 0.83203,0.24024 0.48633,0 0.73243,-0.18164 0.25195,-0.1875 0.25195,-0.48633 z"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:12px;font-family:Roboto;-inkscape-font-specification:'Roboto, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px"
id="path1107"
inkscape:connector-curvature="0" />
<path
d="m 666.13397,-532.55518 v 1.5586 h 1.08399 v 1.24219 h -1.08399 v 3.16406 q 0,0.35156 0.13477,0.5039 0.13476,0.15235 0.51562,0.15235 0.28125,0 0.49805,-0.041 v 1.28321 q -0.49805,0.15234 -1.02539,0.15234 -1.78125,0 -1.81641,-1.79883 v -3.41601 h -0.92578 v -1.24219 h 0.92578 v -1.5586 z"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:12px;font-family:Roboto;-inkscape-font-specification:'Roboto, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px"
id="path1109"
inkscape:connector-curvature="0" />
<path
d="m 669.88397,-527.27588 h -1.40625 l -0.19922,-5.91211 h 1.80469 z m -0.70312,0.92578 q 0.42773,0 0.68554,0.25196 0.26368,0.25195 0.26368,0.64453 0,0.38672 -0.26368,0.63867 -0.25781,0.25195 -0.68554,0.25195 -0.42188,0 -0.68555,-0.25195 -0.25781,-0.25195 -0.25781,-0.63867 0,-0.38672 0.25781,-0.63868 0.26367,-0.25781 0.68555,-0.25781 z"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:12px;font-family:Roboto;-inkscape-font-specification:'Roboto, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px"
id="path1111"
inkscape:connector-curvature="0" />
</g>
<g
aria-label="Repetitions"
transform="scale(1,-1)"
inkscape:transform-center-x="18.016852"
inkscape:transform-center-y="-3.7930216"
style="font-style:normal;font-weight:normal;font-size:9px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.75px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
id="text105">
<path
d="m 639.49921,-466.92981 h -1.16895 v 2.01318 h -0.65967 v -4.97656 h 1.64746 q 0.84082,0 1.292,0.38281 0.45459,0.38282 0.45459,1.11426 0,0.46485 -0.25293,0.81006 -0.24952,0.34522 -0.69727,0.51611 l 1.16895,2.11231 v 0.041 h -0.70411 z m -1.16895,-0.53662 h 1.0083 q 0.48877,0 0.77588,-0.25293 0.29053,-0.25293 0.29053,-0.67676 0,-0.46142 -0.27686,-0.70752 -0.27343,-0.24609 -0.79297,-0.24951 h -1.00488 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px"
id="path1078"
inkscape:connector-curvature="0" />
<path
d="m 643.4162,-464.84827 q -0.75195,0 -1.22363,-0.49218 -0.47168,-0.49561 -0.47168,-1.32276 v -0.11621 q 0,-0.55029 0.20849,-0.98096 0.21192,-0.43408 0.58789,-0.67675 0.3794,-0.2461 0.82032,-0.2461 0.72119,0 1.12109,0.4751 0.3999,0.4751 0.3999,1.36035 v 0.26319 h -2.50537 q 0.0137,0.54687 0.31787,0.88525 0.30762,0.33496 0.7793,0.33496 0.33496,0 0.56738,-0.13672 0.23242,-0.13672 0.40674,-0.3623 l 0.38623,0.30078 q -0.46484,0.71435 -1.39453,0.71435 z m -0.0786,-3.31543 q -0.38282,0 -0.64258,0.28028 -0.25977,0.27685 -0.32129,0.77929 h 1.85254 v -0.0478 q -0.0274,-0.48193 -0.25977,-0.74511 -0.23242,-0.26661 -0.6289,-0.26661 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px"
id="path1080"
inkscape:connector-curvature="0" />
<path
d="m 648.71063,-466.72473 q 0,0.84424 -0.38623,1.36035 -0.38623,0.51611 -1.0459,0.51611 -0.67334,0 -1.05957,-0.42724 v 1.78076 h -0.63232 v -5.12012 h 0.57764 l 0.0308,0.41016 q 0.38623,-0.47852 1.07324,-0.47852 0.6665,0 1.05273,0.50244 0.38965,0.50245 0.38965,1.39795 z m -0.63232,-0.0718 q 0,-0.62549 -0.2666,-0.98779 -0.26661,-0.36231 -0.73145,-0.36231 -0.57422,0 -0.86133,0.50928 v 1.76709 q 0.28369,0.50586 0.86817,0.50586 0.45459,0 0.72119,-0.35889 0.27002,-0.3623 0.27002,-1.07324 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px"
id="path1082"
inkscape:connector-curvature="0" />
<path
d="m 651.0451,-464.84827 q -0.75195,0 -1.22363,-0.49218 -0.47168,-0.49561 -0.47168,-1.32276 v -0.11621 q 0,-0.55029 0.2085,-0.98096 0.21191,-0.43408 0.58789,-0.67675 0.37939,-0.2461 0.82031,-0.2461 0.72119,0 1.1211,0.4751 0.3999,0.4751 0.3999,1.36035 v 0.26319 h -2.50537 q 0.0137,0.54687 0.31787,0.88525 0.30761,0.33496 0.77929,0.33496 0.33497,0 0.56739,-0.13672 0.23242,-0.13672 0.40674,-0.3623 l 0.38623,0.30078 q -0.46485,0.71435 -1.39454,0.71435 z m -0.0786,-3.31543 q -0.38281,0 -0.64258,0.28028 -0.25976,0.27685 -0.32129,0.77929 h 1.85254 v -0.0478 q -0.0273,-0.48193 -0.25976,-0.74511 -0.23242,-0.26661 -0.62891,-0.26661 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px"
id="path1084"
inkscape:connector-curvature="0" />
<path
d="m 654.07343,-469.51038 v 0.89551 h 0.69042 v 0.48877 h -0.69042 v 2.29346 q 0,0.22217 0.0923,0.33496 0.0923,0.10937 0.31445,0.10937 0.10938,0 0.30078,-0.041 v 0.51269 q -0.24951,0.0684 -0.48535,0.0684 -0.42382,0 -0.63916,-0.25634 -0.21533,-0.25635 -0.21533,-0.72803 v -2.29346 h -0.67334 v -0.48877 h 0.67334 v -0.89551 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px"
id="path1086"
inkscape:connector-curvature="0" />
<path
d="m 656.18573,-464.91663 h -0.63232 v -3.69824 h 0.63232 z m -0.68359,-4.6792 q 0,-0.1538 0.0923,-0.25976 0.0957,-0.10596 0.28027,-0.10596 0.18458,0 0.28028,0.10596 0.0957,0.10596 0.0957,0.25976 0,0.15381 -0.0957,0.25635 -0.0957,0.10254 -0.28028,0.10254 -0.18457,0 -0.28027,-0.10254 -0.0923,-0.10254 -0.0923,-0.25635 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px"
id="path1088"
inkscape:connector-curvature="0" />
<path
d="m 658.05194,-469.51038 v 0.89551 h 0.69043 v 0.48877 h -0.69043 v 2.29346 q 0,0.22217 0.0923,0.33496 0.0923,0.10937 0.31445,0.10937 0.10937,0 0.30078,-0.041 v 0.51269 q -0.24951,0.0684 -0.48535,0.0684 -0.42383,0 -0.63916,-0.25634 -0.21533,-0.25635 -0.21533,-0.72803 v -2.29346 h -0.67334 v -0.48877 h 0.67334 v -0.89551 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px"
id="path1090"
inkscape:connector-curvature="0" />
<path
d="m 660.16425,-464.91663 h -0.63233 v -3.69824 h 0.63233 z m -0.6836,-4.6792 q 0,-0.1538 0.0923,-0.25976 0.0957,-0.10596 0.28027,-0.10596 0.18457,0 0.28027,0.10596 0.0957,0.10596 0.0957,0.25976 0,0.15381 -0.0957,0.25635 -0.0957,0.10254 -0.28027,0.10254 -0.18457,0 -0.28027,-0.10254 -0.0923,-0.10254 -0.0923,-0.25635 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px"
id="path1092"
inkscape:connector-curvature="0" />
<path
d="m 661.00507,-466.79993 q 0,-0.54345 0.21191,-0.97754 0.21533,-0.43408 0.59473,-0.66992 0.38281,-0.23584 0.87158,-0.23584 0.75537,0 1.22021,0.52295 0.46827,0.52295 0.46827,1.39111 v 0.0444 q 0,0.54004 -0.2085,0.9707 -0.20508,0.42725 -0.59131,0.66651 -0.38281,0.23925 -0.88184,0.23925 -0.75195,0 -1.22021,-0.52295 -0.46484,-0.52295 -0.46484,-1.38427 z m 0.63574,0.0752 q 0,0.61523 0.28369,0.98779 0.28711,0.37256 0.76562,0.37256 0.48194,0 0.76563,-0.37598 0.28369,-0.37939 0.28369,-1.05957 0,-0.6084 -0.29053,-0.98437 -0.28711,-0.3794 -0.76562,-0.3794 -0.46826,0 -0.75537,0.37256 -0.28711,0.37256 -0.28711,1.06641 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px"
id="path1094"
inkscape:connector-curvature="0" />
<path
d="m 665.76288,-468.61487 0.0205,0.46485 q 0.42382,-0.53321 1.10742,-0.53321 1.17236,0 1.18262,1.32276 v 2.44384 h -0.63233 v -2.44726 q -0.003,-0.3999 -0.18457,-0.59131 -0.17773,-0.19141 -0.55713,-0.19141 -0.30762,0 -0.54004,0.16407 -0.23242,0.16406 -0.3623,0.43066 v 2.63525 h -0.63233 v -3.69824 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px"
id="path1096"
inkscape:connector-curvature="0" />
<path
d="m 671.18719,-465.89758 q 0,-0.25635 -0.19482,-0.39649 -0.19141,-0.14355 -0.67334,-0.24609 -0.47851,-0.10254 -0.76221,-0.24609 -0.28027,-0.14356 -0.41699,-0.3418 -0.1333,-0.19824 -0.1333,-0.47168 0,-0.45459 0.38281,-0.76904 0.38623,-0.31446 0.98438,-0.31446 0.6289,0 1.01855,0.32471 0.39307,0.32471 0.39307,0.83057 h -0.63574 q 0,-0.25977 -0.22217,-0.44776 -0.21875,-0.18799 -0.55371,-0.18799 -0.34522,0 -0.54004,0.15039 -0.19483,0.15039 -0.19483,0.39307 0,0.229 0.18116,0.34522 0.18115,0.11621 0.65283,0.22216 0.4751,0.10596 0.76904,0.25293 0.29395,0.14698 0.43408,0.35547 0.14356,0.20508 0.14356,0.50244 0,0.49561 -0.39649,0.79639 -0.39648,0.29736 -1.0288,0.29736 -0.44434,0 -0.78614,-0.15722 -0.34179,-0.15723 -0.53662,-0.4375 -0.1914,-0.28369 -0.1914,-0.61182 h 0.63232 q 0.0171,0.31787 0.25293,0.50586 0.23926,0.18457 0.62891,0.18457 0.35888,0 0.57421,-0.14355 0.21875,-0.14698 0.21875,-0.38965 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px"
id="path1098"
inkscape:connector-curvature="0" />
</g>
<g
aria-label="Time"
transform="scale(1,-1)"
inkscape:transform-center-x="18.016852"
inkscape:transform-center-y="-3.7930216"
style="font-style:normal;font-weight:normal;font-size:9px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.75px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
id="text105-5">
<path
d="m 633.42047,-434.11563 h -1.59961 v 4.43652 h -0.65283 v -4.43652 h -1.59619 v -0.54004 h 3.84863 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px"
id="path1069"
inkscape:connector-curvature="0" />
<path
d="m 634.75348,-429.67911 h -0.63233 v -3.69824 h 0.63233 z m -0.68359,-4.6792 q 0,-0.15381 0.0923,-0.25976 0.0957,-0.10596 0.28027,-0.10596 0.18457,0 0.28028,0.10596 0.0957,0.10595 0.0957,0.25976 0,0.15381 -0.0957,0.25635 -0.0957,0.10254 -0.28028,0.10254 -0.18457,0 -0.28027,-0.10254 -0.0923,-0.10254 -0.0923,-0.25635 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px"
id="path1071"
inkscape:connector-curvature="0" />
<path
d="m 636.35651,-433.37735 0.0171,0.41016 q 0.40673,-0.47852 1.09716,-0.47852 0.77588,0 1.05616,0.59473 0.18457,-0.2666 0.47851,-0.43067 0.29737,-0.16406 0.70069,-0.16406 1.21679,0 1.2373,1.28857 v 2.47803 h -0.63232 v -2.44043 q 0,-0.39648 -0.18116,-0.59131 -0.18115,-0.19824 -0.60839,-0.19824 -0.35206,0 -0.58448,0.21192 -0.23242,0.20849 -0.27002,0.56396 v 2.4541 h -0.63574 v -2.42334 q 0,-0.80664 -0.78955,-0.80664 -0.62207,0 -0.85107,0.52979 v 2.70019 h -0.63233 v -3.69824 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px"
id="path1073"
inkscape:connector-curvature="0" />
<path
d="m 643.43512,-429.61075 q -0.75195,0 -1.22363,-0.49219 -0.47168,-0.4956 -0.47168,-1.32275 v -0.11621 q 0,-0.55029 0.20849,-0.98096 0.21192,-0.43408 0.58789,-0.67676 0.3794,-0.24609 0.82032,-0.24609 0.72119,0 1.12109,0.4751 0.3999,0.4751 0.3999,1.36035 v 0.26318 h -2.50537 q 0.0137,0.54688 0.31787,0.88526 0.30762,0.33496 0.7793,0.33496 0.33496,0 0.56738,-0.13672 0.23242,-0.13672 0.40674,-0.36231 l 0.38623,0.30079 q -0.46484,0.71435 -1.39453,0.71435 z m -0.0786,-3.31543 q -0.38282,0 -0.64258,0.28028 -0.25977,0.27685 -0.32129,0.77929 h 1.85254 v -0.0479 q -0.0273,-0.48193 -0.25977,-0.74512 -0.23242,-0.2666 -0.6289,-0.2666 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px"
id="path1075"
inkscape:connector-curvature="0" />
</g>
<g
aria-label="Accel"
transform="scale(1,-1)"
inkscape:transform-center-x="18.016852"
inkscape:transform-center-y="-3.7930216"
style="font-style:normal;font-weight:normal;font-size:9px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.75px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
id="text137">
<path
d="m 664.02246,-430.97794 h -2.08496 l -0.46826,1.29883 h -0.67676 l 1.90039,-4.97656 h 0.57422 l 1.90381,4.97656 h -0.67334 z m -1.88672,-0.54003 h 1.6919 l -0.84766,-2.32764 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px"
id="path1058"
inkscape:connector-curvature="0" />
<path
d="m 667.2251,-430.12686 q 0.33838,0 0.59131,-0.20508 0.25293,-0.20508 0.28027,-0.5127 h 0.59814 q -0.0171,0.31788 -0.21875,0.60499 -0.20166,0.2871 -0.54003,0.458 -0.33497,0.1709 -0.71094,0.1709 -0.75537,0 -1.20313,-0.50244 -0.44433,-0.50586 -0.44433,-1.38086 v -0.10596 q 0,-0.54004 0.19824,-0.96045 0.19824,-0.42041 0.56738,-0.65283 0.37256,-0.23242 0.87842,-0.23242 0.62207,0 1.03223,0.37256 0.41357,0.37256 0.44091,0.96728 h -0.59814 q -0.0273,-0.35888 -0.27344,-0.58789 -0.24267,-0.23242 -0.60156,-0.23242 -0.48193,0 -0.74854,0.34863 -0.26318,0.34522 -0.26318,1.00147 v 0.11963 q 0,0.63916 0.26318,0.98437 0.26319,0.34522 0.75196,0.34522 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px"
id="path1060"
inkscape:connector-curvature="0" />
<path
d="m 670.88916,-430.12686 q 0.33838,0 0.59131,-0.20508 0.25293,-0.20508 0.28027,-0.5127 h 0.59815 q -0.0171,0.31788 -0.21875,0.60499 -0.20166,0.2871 -0.54004,0.458 -0.33496,0.1709 -0.71094,0.1709 -0.75537,0 -1.20312,-0.50244 -0.44434,-0.50586 -0.44434,-1.38086 v -0.10596 q 0,-0.54004 0.19824,-0.96045 0.19824,-0.42041 0.56738,-0.65283 0.37256,-0.23242 0.87842,-0.23242 0.62207,0 1.03223,0.37256 0.41357,0.37256 0.44092,0.96728 h -0.59815 q -0.0273,-0.35888 -0.27344,-0.58789 -0.24267,-0.23242 -0.60156,-0.23242 -0.48193,0 -0.74853,0.34863 -0.26319,0.34522 -0.26319,1.00147 v 0.11963 q 0,0.63916 0.26319,0.98437 0.26318,0.34522 0.75195,0.34522 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px"
id="path1062"
inkscape:connector-curvature="0" />
<path
d="m 674.60449,-429.61075 q -0.75195,0 -1.22363,-0.49219 -0.47168,-0.4956 -0.47168,-1.32275 v -0.11621 q 0,-0.55029 0.2085,-0.98096 0.21191,-0.43408 0.58789,-0.67676 0.37939,-0.24609 0.82031,-0.24609 0.72119,0 1.12109,0.4751 0.3999,0.4751 0.3999,1.36035 v 0.26318 h -2.50537 q 0.0137,0.54688 0.31787,0.88526 0.30762,0.33496 0.7793,0.33496 0.33496,0 0.56738,-0.13672 0.23243,-0.13672 0.40674,-0.36231 l 0.38623,0.30079 q -0.46484,0.71435 -1.39453,0.71435 z m -0.0786,-3.31543 q -0.38281,0 -0.64258,0.28028 -0.25976,0.27685 -0.32129,0.77929 h 1.85254 v -0.0479 q -0.0273,-0.48193 -0.25976,-0.74512 -0.23243,-0.2666 -0.62891,-0.2666 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px"
id="path1064"
inkscape:connector-curvature="0" />
<path
d="m 677.46191,-429.67911 h -0.63232 v -5.25 h 0.63232 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px"
id="path1066"
inkscape:connector-curvature="0" />
</g>
<g
aria-label="Jitter"
transform="scale(1,-1)"
inkscape:transform-center-x="18.016852"
inkscape:transform-center-y="-3.7930216"
style="font-style:normal;font-weight:normal;font-size:9px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.75px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
id="text141">
<path
d="m 632.06696,-400.15567 h 0.65966 v 3.52393 q 0,0.71435 -0.43066,1.11767 -0.42725,0.40332 -1.1416,0.40332 -0.7417,0 -1.15528,-0.37939 -0.41357,-0.3794 -0.41357,-1.06299 h 0.65625 q 0,0.42724 0.23242,0.6665 0.23584,0.23926 0.68018,0.23926 0.40674,0 0.65625,-0.25635 0.25293,-0.25634 0.25635,-0.71777 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px"
id="path1045"
inkscape:connector-curvature="0" />
<path
d="m 634.43903,-395.17911 h -0.63233 v -3.69824 h 0.63233 z m -0.6836,-4.6792 q 0,-0.15381 0.0923,-0.25976 0.0957,-0.10596 0.28027,-0.10596 0.18457,0 0.28027,0.10596 0.0957,0.10595 0.0957,0.25976 0,0.15381 -0.0957,0.25635 -0.0957,0.10254 -0.28027,0.10254 -0.18457,0 -0.28027,-0.10254 -0.0923,-0.10254 -0.0923,-0.25635 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px"
id="path1047"
inkscape:connector-curvature="0" />
<path
d="m 636.30524,-399.77286 v 0.89551 h 0.69043 v 0.48877 h -0.69043 v 2.29346 q 0,0.22216 0.0923,0.33496 0.0923,0.10937 0.31446,0.10937 0.10937,0 0.30078,-0.041 v 0.51269 q -0.24952,0.0684 -0.48536,0.0684 -0.42382,0 -0.63916,-0.25635 -0.21533,-0.25634 -0.21533,-0.72802 v -2.29346 h -0.67334 v -0.48877 h 0.67334 v -0.89551 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px"
id="path1049"
inkscape:connector-curvature="0" />
<path
d="m 638.58844,-399.77286 v 0.89551 h 0.69043 v 0.48877 h -0.69043 v 2.29346 q 0,0.22216 0.0923,0.33496 0.0923,0.10937 0.31445,0.10937 0.10937,0 0.30078,-0.041 v 0.51269 q -0.24951,0.0684 -0.48535,0.0684 -0.42383,0 -0.63916,-0.25635 -0.21533,-0.25634 -0.21533,-0.72802 v -2.29346 h -0.67334 v -0.48877 h 0.67334 v -0.89551 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px"
id="path1051"
inkscape:connector-curvature="0" />
<path
d="m 641.5484,-395.11075 q -0.75195,0 -1.22363,-0.49219 -0.47168,-0.4956 -0.47168,-1.32275 v -0.11621 q 0,-0.55029 0.20849,-0.98096 0.21192,-0.43408 0.5879,-0.67676 0.37939,-0.24609 0.82031,-0.24609 0.72119,0 1.12109,0.4751 0.3999,0.4751 0.3999,1.36035 v 0.26318 h -2.50537 q 0.0137,0.54688 0.31787,0.88526 0.30762,0.33496 0.7793,0.33496 0.33496,0 0.56738,-0.13672 0.23243,-0.13672 0.40674,-0.36231 l 0.38623,0.30079 q -0.46484,0.71435 -1.39453,0.71435 z m -0.0786,-3.31543 q -0.38281,0 -0.64258,0.28028 -0.25977,0.27685 -0.32129,0.77929 h 1.85254 v -0.0479 q -0.0273,-0.48193 -0.25977,-0.74512 -0.23242,-0.2666 -0.6289,-0.2666 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px"
id="path1053"
inkscape:connector-curvature="0" />
<path
d="m 645.50641,-398.30997 q -0.14356,-0.0239 -0.31104,-0.0239 -0.62207,0 -0.84423,0.52978 v 2.625 h -0.63233 v -3.69824 h 0.61524 l 0.0102,0.42725 q 0.31103,-0.49561 0.88184,-0.49561 0.18457,0 0.28027,0.0479 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px"
id="path1055"
inkscape:connector-curvature="0" />
</g>
<g
aria-label="Mode"
transform="scale(1,-1)"
inkscape:transform-center-x="18.016852"
inkscape:transform-center-y="-3.7930216"
style="font-style:normal;font-weight:normal;font-size:9px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.75px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
id="text145">
<path
d="m 660.97766,-400.15567 1.62695,4.06055 1.62696,-4.06055 h 0.85107 v 4.97656 h -0.65625 v -1.93799 l 0.0615,-2.09179 -1.63379,4.02978 h -0.50245 l -1.63037,-4.01953 0.0649,2.08154 v 1.93799 H 660.13 v -4.97656 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px"
id="path1036"
inkscape:connector-curvature="0" />
<path
d="m 665.97473,-397.06241 q 0,-0.54346 0.21192,-0.97754 0.21533,-0.43408 0.59472,-0.66992 0.38281,-0.23584 0.87158,-0.23584 0.75538,0 1.22022,0.52295 0.46826,0.52295 0.46826,1.39111 v 0.0444 q 0,0.54004 -0.2085,0.9707 -0.20507,0.42725 -0.5913,0.6665 -0.38282,0.23926 -0.88184,0.23926 -0.75195,0 -1.22021,-0.52295 -0.46485,-0.52295 -0.46485,-1.38427 z m 0.63574,0.0752 q 0,0.61523 0.2837,0.98779 0.2871,0.37256 0.76562,0.37256 0.48193,0 0.76563,-0.37598 0.28369,-0.37939 0.28369,-1.05957 0,-0.6084 -0.29053,-0.98437 -0.28711,-0.3794 -0.76563,-0.3794 -0.46826,0 -0.75537,0.37256 -0.28711,0.37256 -0.28711,1.06641 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px"
id="path1038"
inkscape:connector-curvature="0" />
<path
d="m 669.98059,-397.05899 q 0,-0.85107 0.40332,-1.36719 0.40332,-0.51953 1.05615,-0.51953 0.64942,0 1.02881,0.44434 v -1.92774 h 0.63233 v 5.25 h -0.58106 l -0.0308,-0.39648 q -0.37939,0.46484 -1.05615,0.46484 -0.64258,0 -1.04932,-0.52637 -0.40332,-0.52636 -0.40332,-1.37402 z m 0.63233,0.0718 q 0,0.6289 0.25976,0.98437 0.25977,0.35547 0.71777,0.35547 0.60157,0 0.87842,-0.54004 v -1.69873 q -0.28369,-0.52295 -0.87158,-0.52295 -0.46484,0 -0.72461,0.35889 -0.25976,0.35889 -0.25976,1.06299 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px"
id="path1040"
inkscape:connector-curvature="0" />
<path
d="m 675.62024,-395.11075 q -0.75195,0 -1.22363,-0.49219 -0.47168,-0.4956 -0.47168,-1.32275 v -0.11621 q 0,-0.55029 0.20849,-0.98096 0.21192,-0.43408 0.58789,-0.67676 0.3794,-0.24609 0.82032,-0.24609 0.72119,0 1.12109,0.4751 0.3999,0.4751 0.3999,1.36035 v 0.26318 h -2.50537 q 0.0137,0.54688 0.31787,0.88526 0.30762,0.33496 0.7793,0.33496 0.33496,0 0.56738,-0.13672 0.23242,-0.13672 0.40674,-0.36231 l 0.38623,0.30079 q -0.46484,0.71435 -1.39453,0.71435 z m -0.0786,-3.31543 q -0.38282,0 -0.64258,0.28028 -0.25977,0.27685 -0.32129,0.77929 h 1.85254 v -0.0479 q -0.0273,-0.48193 -0.25977,-0.74512 -0.23242,-0.2666 -0.6289,-0.2666 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px"
id="path1042"
inkscape:connector-curvature="0" />
</g>
<g
aria-label="R mod"
transform="scale(1,-1)"
inkscape:transform-center-x="18.016852"
inkscape:transform-center-y="-3.7930216"
style="font-style:normal;font-weight:normal;font-size:9px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.75px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
id="text149">
<path
d="m 631.46393,-363.90469 h -1.00195 v 1.72558 h -0.56543 v -4.26562 h 1.4121 q 0.72071,0 1.10743,0.32812 0.38965,0.32813 0.38965,0.95508 0,0.39844 -0.2168,0.69434 -0.21387,0.29589 -0.59766,0.44238 l 1.00196,1.81055 v 0.0352 h -0.60352 z m -1.00195,-0.45996 h 0.86425 q 0.41895,0 0.66504,-0.2168 0.24903,-0.2168 0.24903,-0.58008 0,-0.39551 -0.23731,-0.60644 -0.23437,-0.21094 -0.67969,-0.21387 h -0.86132 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:6px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px"
id="path1027"
inkscape:connector-curvature="0" />
<path
d="m 635.50397,-365.34903 0.0147,0.35156 q 0.34863,-0.41015 0.94043,-0.41015 0.66503,0 0.90527,0.50976 0.1582,-0.22851 0.41016,-0.36914 0.25488,-0.14062 0.60058,-0.14062 1.04297,0 1.06055,1.10449 v 2.12402 h -0.54199 v -2.09179 q 0,-0.33985 -0.15528,-0.50684 -0.15527,-0.16992 -0.52148,-0.16992 -0.30176,0 -0.50098,0.18164 -0.19922,0.17871 -0.23144,0.4834 v 2.10351 h -0.54493 v -2.07715 q 0,-0.6914 -0.67675,-0.6914 -0.53321,0 -0.7295,0.4541 v 2.31445 h -0.54199 v -3.16992 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:6px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px"
id="path1029"
inkscape:connector-curvature="0" />
<path
d="m 640.11237,-363.79337 q 0,-0.46582 0.18164,-0.83789 0.18457,-0.37207 0.50976,-0.57421 0.32813,-0.20215 0.74707,-0.20215 0.64746,0 1.0459,0.44824 0.40137,0.44824 0.40137,1.19238 v 0.0381 q 0,0.46289 -0.17871,0.83203 -0.17578,0.36621 -0.50684,0.57129 -0.32812,0.20508 -0.75586,0.20508 -0.64453,0 -1.0459,-0.44825 -0.39843,-0.44824 -0.39843,-1.18652 z m 0.54492,0.0645 q 0,0.52734 0.24316,0.84668 0.2461,0.31933 0.65625,0.31933 0.41309,0 0.65625,-0.32226 0.24317,-0.3252 0.24317,-0.90821 0,-0.52148 -0.24903,-0.84375 -0.24609,-0.32519 -0.65625,-0.32519 -0.40136,0 -0.64746,0.31934 -0.24609,0.31933 -0.24609,0.91406 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:6px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px"
id="path1031"
inkscape:connector-curvature="0" />
<path
d="m 643.54596,-363.79044 q 0,-0.72949 0.3457,-1.17187 0.34571,-0.44531 0.90528,-0.44531 0.55664,0 0.88183,0.38086 v -1.65235 h 0.54199 v 4.5 h -0.49804 l -0.0264,-0.33984 q -0.3252,0.39844 -0.90527,0.39844 -0.55078,0 -0.89942,-0.45118 -0.3457,-0.45117 -0.3457,-1.17773 z m 0.54199,0.0615 q 0,0.53906 0.22266,0.84375 0.22265,0.30469 0.61523,0.30469 0.51563,0 0.75293,-0.4629 v -1.45605 q -0.24316,-0.44824 -0.74707,-0.44824 -0.39844,0 -0.62109,0.30761 -0.22266,0.30762 -0.22266,0.91114 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:6px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px"
id="path1033"
inkscape:connector-curvature="0" />
</g>
<g
aria-label="T mod"
transform="scale(1,-1)"
inkscape:transform-center-x="18.016852"
inkscape:transform-center-y="-3.7930216"
style="font-style:normal;font-weight:normal;font-size:9px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.75px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
id="text153">
<path
d="m 664.49475,-365.98184 h -1.37109 v 3.80273 h -0.55957 v -3.80273 h -1.36817 v -0.46289 h 3.29883 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:6px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px"
id="path1018"
inkscape:connector-curvature="0" />
<path
d="m 666.92932,-365.34903 0.0147,0.35156 q 0.34863,-0.41015 0.94043,-0.41015 0.66504,0 0.90527,0.50976 0.15821,-0.22851 0.41016,-0.36914 0.25488,-0.14062 0.60059,-0.14062 1.04296,0 1.06054,1.10449 v 2.12402 h -0.54199 v -2.09179 q 0,-0.33985 -0.15527,-0.50684 -0.15528,-0.16992 -0.52149,-0.16992 -0.30176,0 -0.50097,0.18164 -0.19922,0.17871 -0.23145,0.4834 v 2.10351 h -0.54492 v -2.07715 q 0,-0.6914 -0.67676,-0.6914 -0.5332,0 -0.72949,0.4541 v 2.31445 h -0.54199 v -3.16992 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:6px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px"
id="path1020"
inkscape:connector-curvature="0" />
<path
d="m 671.53772,-363.79337 q 0,-0.46582 0.18164,-0.83789 0.18457,-0.37207 0.50977,-0.57421 0.32812,-0.20215 0.74707,-0.20215 0.64746,0 1.04589,0.44824 0.40137,0.44824 0.40137,1.19238 v 0.0381 q 0,0.46289 -0.17871,0.83203 -0.17578,0.36621 -0.50683,0.57129 -0.32813,0.20508 -0.75586,0.20508 -0.64454,0 -1.0459,-0.44825 -0.39844,-0.44824 -0.39844,-1.18652 z m 0.54492,0.0645 q 0,0.52734 0.24317,0.84668 0.24609,0.31933 0.65625,0.31933 0.41308,0 0.65625,-0.32226 0.24316,-0.3252 0.24316,-0.90821 0,-0.52148 -0.24902,-0.84375 -0.2461,-0.32519 -0.65625,-0.32519 -0.40137,0 -0.64746,0.31934 -0.2461,0.31933 -0.2461,0.91406 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:6px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px"
id="path1022"
inkscape:connector-curvature="0" />
<path
d="m 674.97131,-363.79044 q 0,-0.72949 0.34571,-1.17187 0.3457,-0.44531 0.90527,-0.44531 0.55664,0 0.88184,0.38086 v -1.65235 h 0.54199 v 4.5 h -0.49805 l -0.0264,-0.33984 q -0.32519,0.39844 -0.90527,0.39844 -0.55078,0 -0.89941,-0.45118 -0.34571,-0.45117 -0.34571,-1.17773 z m 0.542,0.0615 q 0,0.53906 0.22265,0.84375 0.22266,0.30469 0.61524,0.30469 0.51562,0 0.75293,-0.4629 v -1.45605 q -0.24317,-0.44824 -0.74707,-0.44824 -0.39844,0 -0.6211,0.30761 -0.22265,0.30762 -0.22265,0.91114 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:6px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px"
id="path1024"
inkscape:connector-curvature="0" />
</g>
<rect
style="opacity:1;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.81017965;stroke-linecap:square;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.98999999"
id="rect211"
width="64.625"
height="28.257458"
x="621.49683"
y="-288.61642"
transform="scale(1,-1)"
ry="5.8876987" />
<g
aria-label="CV"
transform="matrix(1,0,0,-1,0,-4.5)"
inkscape:transform-center-x="18.016852"
inkscape:transform-center-y="-3.7930216"
style="font-style:normal;font-weight:normal;font-size:9px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#e6e6e6;fill-opacity:1;stroke:none;stroke-width:0.75px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
id="text141-0">
<path
d="m 631.4151,-268.56247 q -0.0923,0.78955 -0.58447,1.22022 -0.48877,0.42724 -1.30225,0.42724 -0.88183,0 -1.41504,-0.63232 -0.52978,-0.63233 -0.52978,-1.6919 v -0.47851 q 0,-0.69385 0.24609,-1.22022 0.24951,-0.52636 0.7041,-0.80664 0.45459,-0.28369 1.05274,-0.28369 0.79297,0 1.27148,0.44434 0.47852,0.44091 0.55713,1.22363 h -0.65967 q -0.0855,-0.59473 -0.37256,-0.86133 -0.28369,-0.2666 -0.79638,-0.2666 -0.62891,0 -0.9878,0.46484 -0.35546,0.46485 -0.35546,1.32276 v 0.48193 q 0,0.81006 0.33837,1.28857 0.33838,0.47852 0.94678,0.47852 0.54688,0 0.8374,-0.24609 0.29395,-0.24952 0.38965,-0.86475 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#e6e6e6;stroke-width:0.75px"
id="path1130"
inkscape:connector-curvature="0" />
<path
d="m 633.95465,-267.85495 1.42188,-4.10498 h 0.71777 l -1.8457,4.97656 h -0.58106 l -1.84228,-4.97656 h 0.71435 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#e6e6e6;stroke-width:0.75px"
id="path1132"
inkscape:connector-curvature="0" />
</g>
<g
aria-label="EOC"
transform="matrix(1,0,0,-1,0,-4.5)"
inkscape:transform-center-x="18.016852"
inkscape:transform-center-y="-3.7930216"
style="font-style:normal;font-weight:normal;font-size:9px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#e6e6e6;fill-opacity:1;stroke:none;stroke-width:0.75px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
id="text205">
<path
d="m 650.06744,-269.28366 h -2.15673 v 1.76367 h 2.50537 v 0.53662 h -3.16162 v -4.97656 h 3.12744 v 0.54004 h -2.47119 v 1.59961 h 2.15673 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#e6e6e6;stroke-width:0.75px"
id="path1123"
inkscape:connector-curvature="0" />
<path
d="m 655.0611,-269.311 q 0,0.73144 -0.2461,1.27832 -0.24609,0.54345 -0.69726,0.83056 -0.45118,0.28711 -1.05274,0.28711 -0.58789,0 -1.04248,-0.28711 -0.45459,-0.29053 -0.70752,-0.82373 -0.24951,-0.53662 -0.25635,-1.24072 v -0.35889 q 0,-0.71777 0.24952,-1.26806 0.24951,-0.5503 0.7041,-0.84082 0.45801,-0.29395 1.0459,-0.29395 0.59814,0 1.05273,0.29053 0.45801,0.28711 0.7041,0.8374 0.2461,0.54687 0.2461,1.2749 z m -0.65284,-0.32129 q 0,-0.88526 -0.35546,-1.35694 -0.35547,-0.47509 -0.99463,-0.47509 -0.62207,0 -0.98096,0.47509 -0.35547,0.47168 -0.36572,1.3125 v 0.36573 q 0,0.85791 0.35888,1.35009 0.36231,0.48877 0.99463,0.48877 0.63574,0 0.98438,-0.46142 0.34863,-0.46485 0.35888,-1.32959 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#e6e6e6;stroke-width:0.75px"
id="path1125"
inkscape:connector-curvature="0" />
<path
d="m 659.70612,-268.56247 q -0.0923,0.78955 -0.58448,1.22022 -0.48877,0.42724 -1.30224,0.42724 -0.88184,0 -1.41504,-0.63232 -0.52979,-0.63233 -0.52979,-1.6919 v -0.47851 q 0,-0.69385 0.2461,-1.22022 0.24951,-0.52636 0.7041,-0.80664 0.45459,-0.28369 1.05273,-0.28369 0.79297,0 1.27149,0.44434 0.47851,0.44091 0.55713,1.22363 h -0.65967 q -0.0855,-0.59473 -0.37256,-0.86133 -0.28369,-0.2666 -0.79639,-0.2666 -0.6289,0 -0.98779,0.46484 -0.35547,0.46485 -0.35547,1.32276 v 0.48193 q 0,0.81006 0.33838,1.28857 0.33838,0.47852 0.94678,0.47852 0.54687,0 0.8374,-0.24609 0.29394,-0.24952 0.38965,-0.86475 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#e6e6e6;stroke-width:0.75px"
id="path1127"
inkscape:connector-curvature="0" />
</g>
<g
aria-label="Gate"
transform="matrix(1,0,0,-1,0,-4.5)"
inkscape:transform-center-x="18.016852"
inkscape:transform-center-y="-3.7930216"
style="font-style:normal;font-weight:normal;font-size:9px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#e6e6e6;fill-opacity:1;stroke:none;stroke-width:0.75px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
id="text209">
<path
d="m 670.42877,-267.6362 q -0.25293,0.3623 -0.70752,0.54346 -0.45117,0.17773 -1.05273,0.17773 -0.6084,0 -1.08008,-0.28369 -0.47168,-0.28711 -0.73145,-0.81348 -0.25634,-0.52636 -0.26318,-1.22021 v -0.43408 q 0,-1.12452 0.52295,-1.74317 0.52637,-0.61865 1.47656,-0.61865 0.7793,0 1.2544,0.3999 0.47509,0.39649 0.58105,1.12793 h -0.65625 q -0.18457,-0.98779 -1.17578,-0.98779 -0.65967,0 -1.00146,0.46484 -0.33838,0.46143 -0.3418,1.33985 v 0.40674 q 0,0.8374 0.38281,1.333 0.38281,0.49219 1.03565,0.49219 0.36914,0 0.64599,-0.082 0.27686,-0.082 0.45801,-0.27686 v -1.11767 h -1.15186 v -0.53321 h 1.80469 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#e6e6e6;stroke-width:0.75px"
id="path1114"
inkscape:connector-curvature="0" />
<path
d="m 673.71002,-266.98337 q -0.0547,-0.10937 -0.0889,-0.38965 -0.44091,0.45801 -1.05273,0.45801 -0.54687,0 -0.89893,-0.30762 -0.34863,-0.31103 -0.34863,-0.78613 0,-0.57764 0.4375,-0.89551 0.44092,-0.32129 1.23731,-0.32129 h 0.61523 v -0.29052 q 0,-0.33155 -0.19824,-0.52637 -0.19824,-0.19824 -0.58447,-0.19824 -0.33838,0 -0.56739,0.1709 -0.229,0.17089 -0.229,0.41357 h -0.63574 q 0,-0.27685 0.19482,-0.5332 0.19824,-0.25977 0.5332,-0.41016 0.33838,-0.15039 0.7417,-0.15039 0.63916,0 1.00147,0.32129 0.3623,0.31787 0.37598,0.87842 v 1.70215 q 0,0.50927 0.12988,0.81005 v 0.0547 z m -1.04931,-0.48193 q 0.29736,0 0.56396,-0.15381 0.2666,-0.15381 0.38623,-0.3999 v -0.75879 h -0.4956 q -1.16211,0 -1.16211,0.68017 0,0.29737 0.19824,0.46485 0.19824,0.16748 0.50928,0.16748 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#e6e6e6;stroke-width:0.75px"
id="path1116"
inkscape:connector-curvature="0" />
<path
d="m 676.09918,-271.57712 v 0.89551 h 0.69043 v 0.48877 h -0.69043 v 2.29346 q 0,0.22216 0.0923,0.33496 0.0923,0.10937 0.31445,0.10937 0.10938,0 0.30078,-0.041 v 0.51269 q -0.24951,0.0684 -0.48535,0.0684 -0.42383,0 -0.63916,-0.25635 -0.21533,-0.25634 -0.21533,-0.72802 v -2.29346 h -0.67334 v -0.48877 h 0.67334 v -0.89551 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#e6e6e6;stroke-width:0.75px"
id="path1118"
inkscape:connector-curvature="0" />
<path
d="m 679.05914,-266.91501 q -0.75195,0 -1.22363,-0.49219 -0.47168,-0.4956 -0.47168,-1.32275 v -0.11621 q 0,-0.55029 0.2085,-0.98096 0.21191,-0.43408 0.58789,-0.67676 0.37939,-0.24609 0.82031,-0.24609 0.72119,0 1.12109,0.4751 0.39991,0.4751 0.39991,1.36035 v 0.26318 h -2.50538 q 0.0137,0.54688 0.31788,0.88526 0.30761,0.33496 0.77929,0.33496 0.33496,0 0.56739,-0.13672 0.23242,-0.13672 0.40673,-0.36231 l 0.38623,0.30079 q -0.46484,0.71435 -1.39453,0.71435 z m -0.0786,-3.31543 q -0.38281,0 -0.64258,0.28028 -0.25976,0.27685 -0.32129,0.77929 h 1.85254 v -0.0479 q -0.0273,-0.48193 -0.25976,-0.74512 -0.23243,-0.2666 -0.62891,-0.2666 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#e6e6e6;stroke-width:0.75px"
id="path1120"
inkscape:connector-curvature="0" />
</g>
<g
aria-label="Trigger"
transform="scale(1,-1)"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7px;line-height:125%;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.75px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
id="text1137">
<path
d="m 624.96283,-317.64337 h -1.59961 v 4.43652 h -0.65283 v -4.43652 h -1.59619 v -0.54004 h 3.84863 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px"
id="path1154"
inkscape:connector-curvature="0" />
<path
d="m 627.13666,-316.33771 q -0.14356,-0.0239 -0.31104,-0.0239 -0.62207,0 -0.84424,0.52978 v 2.625 h -0.63232 v -3.69824 h 0.61523 l 0.0103,0.42725 q 0.31103,-0.49561 0.88183,-0.49561 0.18457,0 0.28028,0.0479 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px"
id="path1156"
inkscape:connector-curvature="0" />
<path
d="m 628.40131,-313.20685 h -0.63233 v -3.69824 h 0.63233 z m -0.6836,-4.6792 q 0,-0.15381 0.0923,-0.25976 0.0957,-0.10596 0.28027,-0.10596 0.18457,0 0.28027,0.10596 0.0957,0.10595 0.0957,0.25976 0,0.15381 -0.0957,0.25635 -0.0957,0.10254 -0.28027,0.10254 -0.18457,0 -0.28027,-0.10254 -0.0923,-0.10254 -0.0923,-0.25635 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px"
id="path1158"
inkscape:connector-curvature="0" />
<path
d="m 629.25922,-315.08673 q 0,-0.86475 0.3999,-1.37402 0.3999,-0.5127 1.05957,-0.5127 0.67676,0 1.05615,0.47852 l 0.0308,-0.41016 h 0.57764 v 3.60937 q 0,0.71778 -0.42725,1.13135 -0.42382,0.41358 -1.1416,0.41358 -0.3999,0 -0.78271,-0.1709 -0.38282,-0.1709 -0.58448,-0.46826 l 0.32813,-0.3794 q 0.40674,0.50244 0.99463,0.50244 0.46142,0 0.71777,-0.25976 0.25977,-0.25977 0.25977,-0.73145 v -0.31787 q -0.3794,0.4375 -1.03565,0.4375 -0.64941,0 -1.05273,-0.52295 -0.3999,-0.52295 -0.3999,-1.42529 z m 0.63574,0.0718 q 0,0.62548 0.25635,0.98437 0.25634,0.35547 0.71777,0.35547 0.59814,0 0.87842,-0.54346 v -1.68847 q -0.29053,-0.52979 -0.87158,-0.52979 -0.46143,0 -0.7212,0.35889 -0.25976,0.35888 -0.25976,1.06299 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px"
id="path1160"
inkscape:connector-curvature="0" />
<path
d="m 633.18304,-315.08673 q 0,-0.86475 0.39991,-1.37402 0.3999,-0.5127 1.05957,-0.5127 0.67675,0 1.05615,0.47852 l 0.0308,-0.41016 h 0.57764 v 3.60937 q 0,0.71778 -0.42725,1.13135 -0.42383,0.41358 -1.1416,0.41358 -0.3999,0 -0.78271,-0.1709 -0.38282,-0.1709 -0.58448,-0.46826 l 0.32813,-0.3794 q 0.40674,0.50244 0.99463,0.50244 0.46142,0 0.71777,-0.25976 0.25977,-0.25977 0.25977,-0.73145 v -0.31787 q -0.3794,0.4375 -1.03565,0.4375 -0.64941,0 -1.05273,-0.52295 -0.39991,-0.52295 -0.39991,-1.42529 z m 0.63575,0.0718 q 0,0.62548 0.25634,0.98437 0.25635,0.35547 0.71778,0.35547 0.59814,0 0.87842,-0.54346 v -1.68847 q -0.29053,-0.52979 -0.87159,-0.52979 -0.46142,0 -0.72119,0.35889 -0.25976,0.35888 -0.25976,1.06299 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px"
id="path1162"
inkscape:connector-curvature="0" />
<path
d="m 638.79193,-313.13849 q -0.75195,0 -1.22363,-0.49219 -0.47168,-0.4956 -0.47168,-1.32275 v -0.11621 q 0,-0.55029 0.20849,-0.98096 0.21192,-0.43408 0.5879,-0.67676 0.37939,-0.24609 0.82031,-0.24609 0.72119,0 1.12109,0.4751 0.3999,0.4751 0.3999,1.36035 v 0.26318 h -2.50537 q 0.0137,0.54688 0.31787,0.88526 0.30762,0.33496 0.7793,0.33496 0.33496,0 0.56738,-0.13672 0.23243,-0.13672 0.40674,-0.36231 l 0.38623,0.30079 q -0.46484,0.71435 -1.39453,0.71435 z m -0.0786,-3.31543 q -0.38281,0 -0.64258,0.28027 -0.25977,0.27686 -0.32129,0.7793 h 1.85254 v -0.0479 q -0.0273,-0.48193 -0.25977,-0.74512 -0.23242,-0.2666 -0.6289,-0.2666 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px"
id="path1164"
inkscape:connector-curvature="0" />
<path
d="m 642.74994,-316.33771 q -0.14356,-0.0239 -0.31104,-0.0239 -0.62207,0 -0.84423,0.52978 v 2.625 h -0.63233 v -3.69824 h 0.61524 l 0.0103,0.42725 q 0.31103,-0.49561 0.88184,-0.49561 0.18457,0 0.28027,0.0479 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px"
id="path1166"
inkscape:connector-curvature="0" />
</g>
<g
aria-label="Clock"
transform="scale(1,-1)"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7px;line-height:125%;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.75px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
id="text1141">
<path
d="m 668.685,-314.78595 q -0.0923,0.78955 -0.58448,1.22022 -0.48876,0.42724 -1.30224,0.42724 -0.88184,0 -1.41504,-0.63232 -0.52979,-0.63233 -0.52979,-1.6919 v -0.47851 q 0,-0.69385 0.2461,-1.22022 0.24951,-0.52637 0.7041,-0.80664 0.45459,-0.28369 1.05273,-0.28369 0.79297,0 1.27149,0.44434 0.47851,0.44091 0.55713,1.22363 h -0.65967 q -0.0855,-0.59473 -0.37256,-0.86133 -0.28369,-0.2666 -0.79639,-0.2666 -0.6289,0 -0.98779,0.46484 -0.35547,0.46485 -0.35547,1.32276 v 0.48193 q 0,0.81006 0.33838,1.28857 0.33838,0.47852 0.94678,0.47852 0.54687,0 0.8374,-0.24609 0.29395,-0.24952 0.38965,-0.86475 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px"
id="path1143"
inkscape:connector-curvature="0" />
<path
d="m 670.16498,-313.20685 h -0.63233 v -5.25 h 0.63233 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px"
id="path1145"
inkscape:connector-curvature="0" />
<path
d="m 671.0058,-315.09015 q 0,-0.54346 0.21191,-0.97754 0.21533,-0.43408 0.59473,-0.66992 0.38281,-0.23584 0.87158,-0.23584 0.75537,0 1.22022,0.52295 0.46826,0.52295 0.46826,1.39111 v 0.0444 q 0,0.54004 -0.2085,0.9707 -0.20508,0.42725 -0.59131,0.6665 -0.38281,0.23926 -0.88183,0.23926 -0.75196,0 -1.22022,-0.52295 -0.46484,-0.52295 -0.46484,-1.38428 z m 0.63574,0.0752 q 0,0.61523 0.28369,0.98779 0.28711,0.37256 0.76563,0.37256 0.48193,0 0.76562,-0.37598 0.28369,-0.37939 0.28369,-1.05957 0,-0.6084 -0.29052,-0.98437 -0.28711,-0.3794 -0.76563,-0.3794 -0.46826,0 -0.75537,0.37256 -0.28711,0.37256 -0.28711,1.06641 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px"
id="path1147"
inkscape:connector-curvature="0" />
<path
d="m 676.64886,-313.6546 q 0.33838,0 0.59131,-0.20508 0.25293,-0.20508 0.28028,-0.5127 h 0.59814 q -0.0171,0.31788 -0.21875,0.60498 -0.20166,0.28711 -0.54004,0.45801 -0.33496,0.1709 -0.71094,0.1709 -0.75537,0 -1.20312,-0.50244 -0.44434,-0.50586 -0.44434,-1.38086 v -0.10596 q 0,-0.54004 0.19825,-0.96045 0.19824,-0.42041 0.56738,-0.65283 0.37256,-0.23242 0.87842,-0.23242 0.62207,0 1.03222,0.37256 0.41358,0.37256 0.44092,0.96728 h -0.59814 q -0.0273,-0.35888 -0.27344,-0.58789 -0.24268,-0.23242 -0.60156,-0.23242 -0.48194,0 -0.74854,0.34863 -0.26318,0.34522 -0.26318,1.00147 v 0.11963 q 0,0.63916 0.26318,0.98437 0.26319,0.34522 0.75195,0.34522 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px"
id="path1149"
inkscape:connector-curvature="0" />
<path
d="m 679.86176,-314.91925 -0.39649,0.41357 v 1.29883 h -0.63232 v -5.25 h 0.63232 v 3.17529 l 0.33838,-0.40673 1.15186,-1.2168 h 0.76904 l -1.43897,1.54492 1.60645,2.15332 h -0.7417 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px"
id="path1151"
inkscape:connector-curvature="0" />
</g>
</g>
</svg>

+ 0
- 154
repos/AepelzensModules/res/Dice.svg View File

@@ -1,154 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<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"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
id="svg8"
width="120"
height="380"
viewBox="0 0 120 380.00001"
version="1.1"
sodipodi:docname="Dice.svg"
inkscape:version="0.92.2 5c3e80d, 2017-08-06">
<metadata
id="metadata29">
<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>BlankPanel1</dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs27">
<clipPath
id="clipPath837"
clipPathUnits="userSpaceOnUse">
<path
inkscape:connector-curvature="0"
id="path835"
d="M 0,842 H 595 V 0 H 0 Z" />
</clipPath>
<clipPath
id="clipPath13703"
clipPathUnits="userSpaceOnUse">
<path
inkscape:connector-curvature="0"
id="path13701"
d="M 0,1020.448 H 935.433 V 0 H 0 Z" />
</clipPath>
</defs>
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1898"
inkscape:window-height="1026"
id="namedview25"
showgrid="false"
inkscape:zoom="2.1091365"
inkscape:cx="-55.855674"
inkscape:cy="205.69915"
inkscape:window-x="10"
inkscape:window-y="42"
inkscape:window-maximized="0"
inkscape:current-layer="g827"
showguides="true"
inkscape:guide-bbox="true"
inkscape:measure-start="44.8906,373.832"
inkscape:measure-end="44.8906,362.457" />
<title
id="title2">BlankPanel1</title>
<g
transform="matrix(1.3333333,0,0,-1.3333333,-826.22953,717.78285)"
inkscape:label="1"
id="g827"
style="opacity:1">
<g
id="g831"
transform="matrix(1.3100849,0,0,0.99991813,-191.38111,0.0440701)">
<g
transform="translate(619.08227,-482.18084)"
inkscape:label="02"
id="g13693">
<path
inkscape:connector-curvature="0"
id="path13695"
style="fill:#091942;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.22436777"
d="M 0,735.3352 H 68.666843 V 1020.448 H 0 Z" />
<path
style="opacity:1;fill:#e6e6e6;fill-opacity:1;stroke:#000000;stroke-width:0.47412768;stroke-linecap:square;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.98999999"
d="M -0.45300759,190.33385 V 0.445719 H 45.063249 90.579506 V 190.33385 380.22199 H 45.063249 -0.45300759 Z"
id="path26"
inkscape:connector-curvature="0"
transform="matrix(0.75000002,0,0,-0.75000002,0.58989299,1020.518)" />
</g>
</g>
<g
inkscape:groupmode="layer"
id="layer2"
inkscape:label="Layer 1"
style="opacity:0" />
<g
aria-label="Burst!"
transform="scale(1,-1)"
style="font-style:normal;font-weight:normal;font-size:9px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.75px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
id="text85" />
<rect
style="opacity:1;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.88699555;stroke-linecap:square;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.98999999"
id="rect211"
width="86.192909"
height="25.394657"
x="621.57568"
y="-282.81534"
transform="scale(1,-1)"
ry="5.2912083" />
<g
aria-label="Dice"
transform="matrix(1,0,0,-1,0,-3.5258394)"
style="font-style:normal;font-weight:normal;font-size:9px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.75px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
id="text826">
<path
d="m 653.34015,-528.18018 v -8.53125 h 2.625 q 1.125,0 2.00976,0.50977 0.89063,0.50391 1.38868,1.44141 0.49804,0.93164 0.49804,2.12109 v 0.39258 q 0,1.18945 -0.49218,2.11523 -0.48633,0.92578 -1.37696,1.43555 -0.89062,0.50976 -2.00976,0.51562 z m 1.75781,-7.10742 v 5.69531 h 0.84961 q 1.03125,0 1.57617,-0.67382 0.54492,-0.67383 0.55664,-1.92774 v -0.45117 q 0,-1.30078 -0.53906,-1.96875 -0.53906,-0.67383 -1.57617,-0.67383 z"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:12px;font-family:Roboto;-inkscape-font-specification:'Roboto, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px"
id="path828"
inkscape:connector-curvature="0" />
<path
d="m 662.82062,-528.18018 h -1.69922 v -6.33984 h 1.69922 z m -1.79883,-7.98046 q 0,-0.38086 0.25195,-0.62696 0.25782,-0.24609 0.69727,-0.24609 0.43359,0 0.6914,0.24609 0.25782,0.2461 0.25782,0.62696 0,0.38671 -0.26367,0.63281 -0.25782,0.24609 -0.68555,0.24609 -0.42774,0 -0.69141,-0.24609 -0.25781,-0.2461 -0.25781,-0.63281 z"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:12px;font-family:Roboto;-inkscape-font-specification:'Roboto, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px"
id="path830"
inkscape:connector-curvature="0" />
<path
d="m 666.85773,-529.42822 q 0.46875,0 0.76172,-0.25782 0.29296,-0.25781 0.30468,-0.68554 h 1.58789 q -0.006,0.64453 -0.35156,1.18359 -0.3457,0.5332 -0.94922,0.83203 -0.59765,0.29297 -1.32422,0.29297 -1.35937,0 -2.14453,-0.86133 -0.78515,-0.86718 -0.78515,-2.39062 v -0.11133 q 0,-1.46484 0.77929,-2.33789 0.7793,-0.87305 2.13868,-0.87305 1.18945,0 1.90429,0.67969 0.72071,0.67383 0.73242,1.79883 h -1.58789 q -0.0117,-0.49219 -0.30468,-0.79688 -0.29297,-0.31054 -0.77344,-0.31054 -0.5918,0 -0.89649,0.43359 -0.29882,0.42773 -0.29882,1.39453 v 0.17578 q 0,0.97852 0.29882,1.40625 0.29883,0.42774 0.90821,0.42774 z"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:12px;font-family:Roboto;-inkscape-font-specification:'Roboto, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px"
id="path832"
inkscape:connector-curvature="0" />
<path
d="m 673.39679,-528.06299 q -1.39453,0 -2.27344,-0.85547 -0.87304,-0.85547 -0.87304,-2.27929 v -0.16407 q 0,-0.95507 0.36914,-1.70507 0.36914,-0.75586 1.04296,-1.16016 0.67969,-0.41016 1.54688,-0.41016 1.30078,0 2.04492,0.82032 0.75,0.82031 0.75,2.32617 v 0.6914 h -4.03711 q 0.082,0.6211 0.49219,0.9961 0.41602,0.375 1.04883,0.375 0.97851,0 1.52929,-0.70899 l 0.83204,0.93164 q -0.38086,0.53907 -1.03125,0.84375 -0.65039,0.29883 -1.44141,0.29883 z m -0.19336,-5.20312 q -0.50391,0 -0.82031,0.33984 -0.31055,0.33984 -0.39844,0.97266 h 2.35547 v -0.13477 q -0.0117,-0.5625 -0.30469,-0.86719 -0.29297,-0.31054 -0.83203,-0.31054 z"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:12px;font-family:Roboto;-inkscape-font-specification:'Roboto, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px"
id="path834"
inkscape:connector-curvature="0" />
</g>
<rect
ry="5.059772"
transform="scale(1,-1)"
y="-342.57288"
x="621.77124"
height="56.456612"
width="85.801796"
id="rect837"
style="opacity:1;fill:#808080;fill-opacity:1;stroke:#000000;stroke-width:1.31953263;stroke-linecap:square;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.98999999" />
</g>
</svg>

+ 0
- 233
repos/AepelzensModules/res/Erwin.svg View File

@@ -1,233 +0,0 @@
<?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"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="120"
height="380"
viewBox="0 0 31.75 100.54167"
version="1.1"
id="svg8"
inkscape:version="0.92.2 5c3e80d, 2017-08-06"
sodipodi:docname="Erwin.svg"
inkscape:export-filename="E:\Users\Martin\Documents\Rack_Source\rack\plugins\ML_modules\res\Quantum.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96">
<defs
id="defs2">
<inkscape:perspective
sodipodi:type="inkscape:persp3d"
inkscape:vp_x="0 : 50.270835 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_z="31.75 : 50.270835 : 1"
inkscape:persp3d-origin="15.875 : 33.51389 : 1"
id="perspective4742" />
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="4"
inkscape:cx="88.570139"
inkscape:cy="278.72416"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="true"
units="px"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0"
showguides="true"
inkscape:snap-to-guides="false"
objecttolerance="20"
inkscape:window-width="1898"
inkscape:window-height="1026"
inkscape:window-x="10"
inkscape:window-y="42"
inkscape:window-maximized="0"
gridtolerance="17"
inkscape:snap-perpendicular="false"
inkscape:pagecheckerboard="true"
inkscape:snap-page="false"
inkscape:snap-text-baseline="true"
inkscape:object-nodes="false"
inkscape:snap-global="true">
<inkscape:grid
type="xygrid"
id="grid43"
originx="-7.3436628e-018"
originy="100.54167"
spacingx="0.52916668"
spacingy="0.52916668"
dotted="false"
empspacing="20" />
</sodipodi:namedview>
<metadata
id="metadata5">
<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 />
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(0,-196.45832)"
style="display:inline">
<rect
style="opacity:1;fill:#e6e6e6;fill-opacity:1;stroke:#000000;stroke-width:0.26458335;stroke-linecap:square;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.98999999"
id="rect973"
width="31.75"
height="100.40938"
x="-7.3436632e-18"
y="196.45831"
ry="0" />
<rect
style="fill:#808080;fill-opacity:1;stroke:none;stroke-width:0.77891225;stroke-opacity:1"
id="rect4778"
width="10.583334"
height="34.395832"
x="17.864887"
y="219.74165"
ry="1.9254887" />
<rect
ry="1.9254887"
y="255.19583"
x="17.864887"
height="34.395832"
width="10.583334"
id="rect101"
style="fill:#3c3c3c;fill-opacity:1;stroke:none;stroke-width:0.77891225;stroke-opacity:1" />
<rect
id="rect26-7-3-4-6-26"
width="12.699998"
height="27.25215"
x="3.1749961"
y="206.77701"
style="fill:#808080;fill-opacity:1;stroke-width:0.83702594"
ry="0.94338781" />
<rect
id="rect26-7-3-4-6-26-7"
width="10.583334"
height="11.641665"
x="17.991661"
y="206.77701"
style="fill:#808080;fill-opacity:1;stroke-width:0.49940801"
ry="0.97013831" />
<g
aria-label="Octave"
style="font-style:normal;font-weight:normal;font-size:3.17500019px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458335px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
id="text977"
transform="translate(1.1485025,-0.23386084)">
<path
d="m 5.4379111,216.70148 q 0,0.33177 -0.111621,0.57981 -0.1116211,0.2465 -0.3162598,0.37672 -0.2046387,0.13023 -0.4774902,0.13023 -0.2666504,0 -0.4728394,-0.13023 -0.2061889,-0.13177 -0.3209106,-0.37362 -0.1131714,-0.24339 -0.116272,-0.56275 v -0.16278 q 0,-0.32557 0.1131714,-0.57516 0.1131714,-0.2496 0.3193603,-0.38137 0.2077393,-0.13333 0.4743897,-0.13333 0.2713012,0 0.4774902,0.13178 0.2077393,0.13022 0.3193604,0.37982 0.111621,0.24804 0.111621,0.57826 z m -0.2961059,-0.14572 q 0,-0.40153 -0.1612305,-0.61547 -0.1612304,-0.21549 -0.4511352,-0.21549 -0.2821533,0 -0.4449341,0.21549 -0.1612305,0.21394 -0.1658813,0.59531 v 0.16588 q 0,0.38913 0.1627807,0.61237 0.1643311,0.22169 0.4511353,0.22169 0.2883545,0 0.4464843,-0.20929 0.1581299,-0.21084 0.1627808,-0.60306 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.17499995px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458335px"
id="path992"
inkscape:connector-curvature="0" />
<path
d="m 6.5122641,217.55414 q 0.153479,0 0.2682007,-0.093 0.1147217,-0.093 0.127124,-0.23255 h 0.2713013 q -0.00775,0.14418 -0.099219,0.2744 -0.091467,0.13023 -0.2449463,0.20774 -0.1519287,0.0775 -0.322461,0.0775 -0.3426147,0 -0.5457031,-0.22789 -0.2015381,-0.22945 -0.2015381,-0.62632 v -0.0481 q 0,-0.24495 0.089917,-0.43563 0.089917,-0.19069 0.2573487,-0.29611 0.1689819,-0.10542 0.3984253,-0.10542 0.2821533,0 0.4681884,0.16898 0.1875855,0.16898 0.1999878,0.43873 h -0.271301 q -0.012402,-0.16278 -0.1240234,-0.26665 -0.1100708,-0.10542 -0.2728515,-0.10542 -0.2185914,0 -0.3395142,0.15813 -0.1193726,0.15658 -0.1193726,0.45424 v 0.0543 q 0,0.28991 0.1193726,0.44648 0.1193726,0.15658 0.3410644,0.15658 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.17499995px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458335px"
id="path994"
inkscape:connector-curvature="0" />
<path
d="m 7.8904746,215.67364 v 0.40618 h 0.3131592 v 0.22169 H 7.8904746 v 1.04024 q 0,0.10077 0.041858,0.15193 0.041858,0.0496 0.1426269,0.0496 0.049609,0 0.1364258,-0.0186 v 0.23254 q -0.1131714,0.031 -0.2201416,0.031 -0.1922363,0 -0.2899048,-0.11627 -0.097668,-0.11628 -0.097668,-0.33022 v -1.04024 H 7.2982627 v -0.22169 h 0.3054077 v -0.40618 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.17499995px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458335px"
id="path996"
inkscape:connector-curvature="0" />
<path
d="m 9.5725422,217.75723 q -0.024805,-0.0496 -0.040308,-0.17673 -0.1999878,0.20774 -0.4774902,0.20774 -0.2480469,0 -0.4077271,-0.13953 -0.1581298,-0.14107 -0.1581298,-0.35657 0,-0.26199 0.1984374,-0.40617 0.1999878,-0.14573 0.5612061,-0.14573 h 0.2790527 v -0.13177 q 0,-0.15038 -0.089917,-0.23875 -0.089917,-0.0899 -0.2651001,-0.0899 -0.153479,0 -0.2573486,0.0775 -0.1038696,0.0775 -0.1038696,0.18758 H 8.5229939 q 0,-0.12557 0.088367,-0.24184 0.089917,-0.11782 0.2418457,-0.18604 0.153479,-0.0682 0.3364136,-0.0682 0.2899047,0 0.4542358,0.14573 0.164331,0.14417 0.1705322,0.39842 v 0.77205 q 0,0.23099 0.058911,0.36742 v 0.0248 z m -0.4759399,-0.21859 q 0.1348755,0 0.2557983,-0.0698 0.1209229,-0.0698 0.1751831,-0.18139 v -0.34416 H 9.3027912 q -0.5270996,0 -0.5270996,0.30851 0,0.13487 0.089917,0.21084 0.089917,0.076 0.2309937,0.076 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.17499995px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458335px"
id="path998"
inkscape:connector-curvature="0" />
<path
d="m 10.795723,217.36811 0.415479,-1.28829 h 0.293005 l -0.601513,1.67741 h -0.218592 l -0.607715,-1.67741 h 0.293006 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.17499995px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458335px"
id="path1000"
inkscape:connector-curvature="0" />
<path
d="m 12.476241,217.78824 q -0.341064,0 -0.555005,-0.22324 -0.21394,-0.2248 -0.21394,-0.59997 v -0.0527 q 0,-0.24959 0.09457,-0.44493 0.09612,-0.19689 0.26665,-0.30696 0.172083,-0.11162 0.372071,-0.11162 0.327111,0 0.508496,0.21549 0.181384,0.21549 0.181384,0.61702 v 0.11937 H 11.9941 q 0.0062,0.24805 0.144177,0.40153 0.139527,0.15192 0.353467,0.15192 0.151929,0 0.257349,-0.062 0.10542,-0.062 0.184485,-0.16433 l 0.175183,0.13643 q -0.21084,0.32401 -0.63252,0.32401 z m -0.03566,-1.50379 q -0.173633,0 -0.291456,0.12713 -0.117822,0.12557 -0.145727,0.35347 h 0.840259 v -0.0217 q -0.0124,-0.21859 -0.117823,-0.33796 -0.10542,-0.12093 -0.285253,-0.12093 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.17499995px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458335px"
id="path1002"
inkscape:connector-curvature="0" />
</g>
<g
aria-label="Semi"
style="font-style:normal;font-weight:normal;font-size:3.17500019px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458335px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
id="text981"
transform="translate(-4.4436646e-6,-0.23386084)">
<path
d="m 20.694339,216.75109 q -0.382923,-0.11007 -0.558106,-0.26975 -0.173633,-0.16123 -0.173633,-0.39687 0,-0.26665 0.21239,-0.44029 0.213941,-0.17518 0.555005,-0.17518 0.232544,0 0.413929,0.0899 0.182934,0.0899 0.282153,0.24804 0.100769,0.15813 0.100769,0.34572 h -0.299207 q 0,-0.20464 -0.130224,-0.32091 -0.130225,-0.11782 -0.36742,-0.11782 -0.220141,0 -0.344165,0.0977 -0.122473,0.0961 -0.122473,0.2682 0,0.13797 0.116272,0.23409 0.117822,0.0946 0.398425,0.17363 0.282154,0.0791 0.440284,0.17519 0.15968,0.0946 0.235644,0.22169 0.07752,0.12712 0.07752,0.2992 0,0.27441 -0.213941,0.44029 -0.21394,0.16433 -0.572058,0.16433 -0.232544,0 -0.434082,-0.0884 -0.201538,-0.0899 -0.311609,-0.24494 -0.10852,-0.15503 -0.10852,-0.35192 h 0.299206 q 0,0.20464 0.150379,0.32401 0.151929,0.11782 0.404626,0.11782 0.235645,0 0.361219,-0.0961 0.125573,-0.0961 0.125573,-0.262 0,-0.16588 -0.116272,-0.25579 -0.116272,-0.0915 -0.421679,-0.17984 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.17499995px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458335px"
id="path983"
inkscape:connector-curvature="0" />
<path
d="m 22.565542,217.78824 q -0.341064,0 -0.555005,-0.22324 -0.21394,-0.2248 -0.21394,-0.59997 v -0.0527 q 0,-0.24959 0.09457,-0.44493 0.09612,-0.19689 0.26665,-0.30696 0.172083,-0.11162 0.37207,-0.11162 0.327112,0 0.508497,0.21549 0.181384,0.21549 0.181384,0.61702 v 0.11937 h -1.136365 q 0.0062,0.24805 0.144177,0.40153 0.139527,0.15192 0.353467,0.15192 0.151929,0 0.257349,-0.062 0.10542,-0.062 0.184485,-0.16433 l 0.175183,0.13643 q -0.21084,0.32401 -0.63252,0.32401 z m -0.03566,-1.50379 q -0.173632,0 -0.291455,0.12713 -0.117822,0.12557 -0.145727,0.35347 h 0.840259 v -0.0217 q -0.0124,-0.21859 -0.117823,-0.33796 -0.10542,-0.12093 -0.285254,-0.12093 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.17499995px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458335px"
id="path985"
inkscape:connector-curvature="0" />
<path
d="m 23.819729,216.07982 0.0078,0.18603 q 0.184485,-0.21704 0.497644,-0.21704 0.351916,0 0.47904,0.26975 0.08372,-0.12092 0.217041,-0.19534 0.134876,-0.0744 0.31781,-0.0744 0.551905,0 0.561206,0.58446 v 1.12396 h -0.286804 v -1.10691 q 0,-0.17983 -0.08216,-0.2682 -0.08217,-0.0899 -0.275953,-0.0899 -0.15968,0 -0.2651,0.0961 -0.10542,0.0946 -0.122473,0.2558 v 1.11311 h -0.288354 v -1.09916 q 0,-0.36586 -0.358118,-0.36586 -0.282153,0 -0.386023,0.24029 v 1.22473 h -0.286804 v -1.67741 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.17499995px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458335px"
id="path987"
inkscape:connector-curvature="0" />
<path
d="m 26.645913,217.75723 h -0.286804 v -1.67741 h 0.286804 z m -0.310058,-2.12235 q 0,-0.0698 0.04186,-0.11782 0.04341,-0.0481 0.127124,-0.0481 0.08372,0 0.127124,0.0481 0.04341,0.0481 0.04341,0.11782 0,0.0698 -0.04341,0.11627 -0.04341,0.0465 -0.127124,0.0465 -0.08372,0 -0.127124,-0.0465 -0.04186,-0.0465 -0.04186,-0.11627 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.17499995px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458335px"
id="path989"
inkscape:connector-curvature="0" />
</g>
<g
aria-label="In"
style="font-style:normal;font-weight:normal;font-size:3.17500019px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458335px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
id="text840"
transform="translate(0,0.39400043)">
<path
d="m 22.396912,222.25806 h -0.297657 v -2.25723 h 0.297657 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.17499995px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458335px"
id="path853"
inkscape:connector-curvature="0" />
<path
d="m 23.165857,220.58064 0.0093,0.21084 q 0.192236,-0.24185 0.502295,-0.24185 0.53175,0 0.536401,0.59997 v 1.10846 h -0.286804 v -1.11001 q -0.0016,-0.18139 -0.08372,-0.2682 -0.08061,-0.0868 -0.252698,-0.0868 -0.139526,0 -0.244946,0.0744 -0.10542,0.0744 -0.164331,0.19534 v 1.19528 H 22.89455 v -1.67742 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.17499995px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458335px"
id="path855"
inkscape:connector-curvature="0" />
</g>
<g
aria-label="Out"
style="font-style:normal;font-weight:normal;font-size:3.17500019px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#f2f2f2;fill-opacity:1;stroke:none;stroke-width:0.26458335px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
id="text844"
transform="translate(-1.2778931e-6,0.43562234)">
<path
d="m 22.634106,256.65604 q 0,0.33177 -0.111621,0.57981 -0.111621,0.2465 -0.31626,0.37672 -0.204638,0.13023 -0.47749,0.13023 -0.26665,0 -0.472839,-0.13023 -0.206189,-0.13177 -0.320911,-0.37362 -0.113171,-0.24339 -0.116272,-0.56275 v -0.16278 q 0,-0.32557 0.113171,-0.57516 0.113172,-0.2496 0.319361,-0.38138 0.207739,-0.13332 0.474389,-0.13332 0.271302,0 0.477491,0.13177 0.207739,0.13023 0.31936,0.37983 0.111621,0.24804 0.111621,0.57826 z M 22.338,256.51031 q 0,-0.40152 -0.16123,-0.61546 -0.161231,-0.21549 -0.451136,-0.21549 -0.282153,0 -0.444934,0.21549 -0.16123,0.21394 -0.165881,0.59531 v 0.16588 q 0,0.38913 0.162781,0.61237 0.164331,0.22169 0.451135,0.22169 0.288354,0 0.446484,-0.20929 0.15813,-0.21084 0.162781,-0.60306 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.17499995px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f2f2f2;stroke-width:0.26458335px"
id="path846"
inkscape:connector-curvature="0" />
<path
d="m 24.071228,257.54591 q -0.167432,0.19689 -0.491443,0.19689 -0.268201,0 -0.409278,-0.15503 -0.139526,-0.15658 -0.141076,-0.46199 v -1.0914 h 0.286804 v 1.08365 q 0,0.38137 0.310059,0.38137 0.328662,0 0.437182,-0.24494 v -1.22008 h 0.286804 v 1.67741 h -0.272851 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.17499995px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f2f2f2;stroke-width:0.26458335px"
id="path848"
inkscape:connector-curvature="0" />
<path
d="m 25.173486,255.6282 v 0.40618 h 0.313159 v 0.22169 h -0.313159 v 1.04024 q 0,0.10077 0.04186,0.15193 0.04186,0.0496 0.142627,0.0496 0.04961,0 0.136425,-0.0186 v 0.23254 q -0.113171,0.031 -0.220141,0.031 -0.192236,0 -0.289905,-0.11627 -0.09767,-0.11628 -0.09767,-0.33022 v -1.04024 h -0.305408 v -0.22169 h 0.305408 v -0.40618 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.17499995px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f2f2f2;stroke-width:0.26458335px"
id="path850"
inkscape:connector-curvature="0" />
</g>
</g>
</svg>

+ 0
- 370
repos/AepelzensModules/res/Folder.svg View File

@@ -1,370 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<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"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
id="svg8"
width="60"
height="380.00003"
viewBox="0 0 59.999998 380.00004"
version="1.1"
sodipodi:docname="Folder.svg"
inkscape:version="0.92.2 5c3e80d, 2017-08-06">
<metadata
id="metadata29">
<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>BlankPanel1</dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs27">
<clipPath
id="clipPath837"
clipPathUnits="userSpaceOnUse">
<path
inkscape:connector-curvature="0"
id="path835"
d="M 0,842 H 595 V 0 H 0 Z" />
</clipPath>
<clipPath
id="clipPath13703"
clipPathUnits="userSpaceOnUse">
<path
inkscape:connector-curvature="0"
id="path13701"
d="M 0,1020.448 H 935.433 V 0 H 0 Z" />
</clipPath>
</defs>
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1898"
inkscape:window-height="1026"
id="namedview25"
showgrid="true"
inkscape:zoom="2.1091365"
inkscape:cx="-102.60295"
inkscape:cy="189.57526"
inkscape:window-x="10"
inkscape:window-y="42"
inkscape:window-maximized="0"
inkscape:current-layer="g827"
showguides="true"
inkscape:guide-bbox="true">
<sodipodi:guide
position="30,360"
orientation="1,0"
id="guide101"
inkscape:locked="false" />
<inkscape:grid
type="xygrid"
id="grid826" />
<sodipodi:guide
position="-269.99999,60.000001"
orientation="0,1"
id="guide1007"
inkscape:locked="false" />
</sodipodi:namedview>
<title
id="title2">BlankPanel1</title>
<g
transform="matrix(1.3333333,0,0,-1.3333333,-826.22953,717.78288)"
inkscape:label="1"
id="g827"
style="opacity:1">
<g
id="g831"
transform="matrix(0.65492365,0,0,1.0001085,214.22316,-0.05847256)">
<g
transform="translate(619.08227,-482.18084)"
inkscape:label="02"
id="g13693">
<path
inkscape:connector-curvature="0"
id="path13695"
style="fill:#091942;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.22436777"
d="M 0,735.3352 H 68.666843 V 1020.448 H 0 Z" />
<path
style="opacity:1;fill:#e6e6e6;fill-opacity:1;stroke:#000000;stroke-width:0.47412768;stroke-linecap:square;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.98999999"
d="M -0.45300759,190.33385 V 0.445719 H 45.063249 90.579506 V 190.33385 380.22199 H 45.063249 -0.45300759 Z"
id="path26"
inkscape:connector-curvature="0"
transform="matrix(0.75000002,0,0,-0.75000002,0.58989299,1020.518)" />
</g>
</g>
<g
inkscape:groupmode="layer"
id="layer2"
inkscape:label="Layer 1"
style="opacity:0">
<image
sodipodi:absref="/tmp/seq.png"
y="-538.26715"
x="619.08228"
id="image80"
xlink:href="file:///tmp/seq.png"
preserveAspectRatio="none"
height="290.25"
width="45"
transform="scale(1,-1)" />
</g>
<flowRoot
xml:space="preserve"
id="flowRoot826"
style="font-style:normal;font-weight:normal;font-size:12px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
transform="matrix(0.75000002,0,0,-0.75000002,619.67216,538.33717)"><flowRegion
id="flowRegion828"><rect
id="rect830"
width="50"
height="20"
x="5"
y="10.000031" /></flowRegion><flowPara
id="flowPara834">MANIFOLDM</flowPara></flowRoot> <g
aria-label="MANI
FOLD"
transform="scale(1,-1)"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:12px;line-height:125%;font-family:Roboto;-inkscape-font-specification:'Roboto, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.75px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
id="text852">
<path
d="m 629.98761,-532.86841 2.19141,6.1875 2.17968,-6.1875 h 2.3086 v 8.53125 h -1.76367 v -2.33203 l 0.17578,-4.02539 -2.30274,6.35742 h -1.20703 l -2.29687,-6.35156 0.17578,4.01953 v 2.33203 h -1.75782 v -8.53125 z"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:12px;line-height:125%;font-family:Roboto;-inkscape-font-specification:'Roboto, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.75px"
id="path919" />
<path
d="m 643.03058,-526.09497 h -3.08203 l -0.58594,1.75781 h -1.86914 l 3.17578,-8.53125 h 1.62891 l 3.19336,8.53125 h -1.86914 z m -2.60742,-1.42383 h 2.13281 l -1.07227,-3.19336 z"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:12px;line-height:125%;font-family:Roboto;-inkscape-font-specification:'Roboto, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.75px"
id="path921" />
<path
d="m 653.23761,-524.33716 h -1.75781 l -3.42188,-5.61328 v 5.61328 h -1.75781 v -8.53125 h 1.75781 l 3.42774,5.625 v -5.625 h 1.75195 z"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:12px;line-height:125%;font-family:Roboto;-inkscape-font-specification:'Roboto, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.75px"
id="path923" />
<path
d="m 656.65363,-524.33716 h -1.75782 v -8.53125 h 1.75782 z"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:12px;line-height:125%;font-family:Roboto;-inkscape-font-specification:'Roboto, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.75px"
id="path925" />
<path
d="m 633.52667,-516.32349 h -3.375 v 3.48633 h -1.75781 v -8.53125 h 5.55469 v 1.42383 h -3.79688 v 2.20312 h 3.375 z"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:12px;line-height:125%;font-family:Roboto;-inkscape-font-specification:'Roboto, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.75px"
id="path927" />
<path
d="m 641.98761,-516.90942 q 0,1.25976 -0.44531,2.20898 -0.44532,0.94922 -1.27735,1.46484 -0.82617,0.51563 -1.89843,0.51563 -1.06055,0 -1.89258,-0.50977 -0.83203,-0.50976 -1.28906,-1.45312 -0.45704,-0.94922 -0.4629,-2.17969 v -0.42187 q 0,-1.25977 0.45118,-2.21485 0.45703,-0.96094 1.2832,-1.4707 0.83203,-0.51563 1.89844,-0.51563 1.0664,0 1.89258,0.51563 0.83203,0.50976 1.2832,1.4707 0.45703,0.95508 0.45703,2.20899 z m -1.78125,-0.38672 q 0,-1.3418 -0.48047,-2.03907 -0.48047,-0.69726 -1.37109,-0.69726 -0.88477,0 -1.36524,0.69141 -0.48047,0.68554 -0.48633,2.01562 v 0.41602 q 0,1.30664 0.48047,2.02734 0.48047,0.7207 1.38282,0.7207 0.88476,0 1.35937,-0.6914 0.47461,-0.69727 0.48047,-2.02735 z"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:12px;line-height:125%;font-family:Roboto;-inkscape-font-specification:'Roboto, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.75px"
id="path929" />
<path
d="m 645.03448,-514.24927 h 3.73243 v 1.41211 h -5.49024 v -8.53125 h 1.75781 z"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:12px;line-height:125%;font-family:Roboto;-inkscape-font-specification:'Roboto, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.75px"
id="path931" />
<path
d="m 649.76886,-512.83716 v -8.53125 h 2.625 q 1.125,0 2.00977,0.50977 0.89062,0.5039 1.38867,1.4414 0.49804,0.93164 0.49804,2.1211 v 0.39258 q 0,1.18945 -0.49218,2.11523 -0.48633,0.92578 -1.37696,1.43555 -0.89062,0.50976 -2.00976,0.51562 z m 1.75781,-7.10742 v 5.69531 h 0.84961 q 1.03125,0 1.57617,-0.67383 0.54493,-0.67382 0.55664,-1.92773 v -0.45117 q 0,-1.30078 -0.53906,-1.96875 -0.53906,-0.67383 -1.57617,-0.67383 z"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:12px;line-height:125%;font-family:Roboto;-inkscape-font-specification:'Roboto, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.75px"
id="path933" />
</g>
<g
aria-label="Stages"
transform="scale(1,-1)"
style="font-style:normal;font-weight:normal;font-size:9px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.75px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
id="text862">
<path
d="m 632.26788,-474.12231 q -0.96484,-0.27735 -1.40625,-0.67969 -0.4375,-0.40625 -0.4375,-1 0,-0.67188 0.53516,-1.10938 0.53906,-0.4414 1.39844,-0.4414 0.58593,0 1.04297,0.22656 0.46093,0.22656 0.71093,0.625 0.25391,0.39844 0.25391,0.87109 h -0.75391 q 0,-0.51562 -0.32812,-0.80859 -0.32813,-0.29688 -0.92578,-0.29688 -0.55469,0 -0.86719,0.2461 -0.30859,0.24219 -0.30859,0.67578 0,0.34766 0.29296,0.58984 0.29688,0.23828 1.00391,0.4375 0.71094,0.19922 1.10938,0.44141 0.40234,0.23828 0.59375,0.55859 0.19531,0.32032 0.19531,0.75391 0,0.69141 -0.53906,1.10937 -0.53907,0.41407 -1.44141,0.41407 -0.58594,0 -1.09375,-0.22266 -0.50781,-0.22656 -0.78516,-0.61719 -0.27343,-0.39062 -0.27343,-0.88672 h 0.7539 q 0,0.51563 0.37891,0.81641 0.38281,0.29688 1.01953,0.29688 0.59375,0 0.91016,-0.24219 0.3164,-0.24219 0.3164,-0.66016 0,-0.41797 -0.29297,-0.64453 -0.29297,-0.23047 -1.0625,-0.45312 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px"
id="path964" />
<path
d="m 636.20929,-476.83716 v 1.02344 h 0.78906 v 0.55859 h -0.78906 v 2.6211 q 0,0.2539 0.10547,0.38281 0.10547,0.125 0.35937,0.125 0.125,0 0.34375,-0.0469 v 0.58594 q -0.28515,0.0781 -0.55468,0.0781 -0.48438,0 -0.73047,-0.29297 -0.2461,-0.29297 -0.2461,-0.83203 v -2.6211 h -0.76953 v -0.55859 h 0.76953 v -1.02344 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px"
id="path966" />
<path
d="m 640.44757,-471.58716 q -0.0625,-0.125 -0.10156,-0.44531 -0.50391,0.52344 -1.20313,0.52344 -0.625,0 -1.02734,-0.35157 -0.39844,-0.35546 -0.39844,-0.89843 0,-0.66016 0.5,-1.02344 0.50391,-0.36719 1.41406,-0.36719 h 0.70313 v -0.33203 q 0,-0.37891 -0.22656,-0.60156 -0.22657,-0.22656 -0.66797,-0.22656 -0.38672,0 -0.64844,0.19531 -0.26172,0.19531 -0.26172,0.47265 h -0.72656 q 0,-0.3164 0.22266,-0.60937 0.22656,-0.29688 0.60937,-0.46875 0.38672,-0.17188 0.84766,-0.17188 0.73047,0 1.14453,0.36719 0.41406,0.36328 0.42969,1.00391 v 1.94531 q 0,0.58203 0.14843,0.92578 v 0.0625 z m -1.19922,-0.55078 q 0.33985,0 0.64453,-0.17578 0.30469,-0.17578 0.44141,-0.45703 v -0.86719 h -0.56641 q -1.32812,0 -1.32812,0.77734 0,0.33985 0.22656,0.53125 0.22656,0.19141 0.58203,0.19141 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px"
id="path968" />
<path
d="m 642.0257,-473.7356 q 0,-0.98828 0.45703,-1.57031 0.45703,-0.58594 1.21093,-0.58594 0.77344,0 1.20704,0.54688 l 0.0351,-0.46875 h 0.66016 v 4.125 q 0,0.82031 -0.48828,1.29297 -0.48438,0.47265 -1.30469,0.47265 -0.45703,0 -0.89453,-0.19531 -0.4375,-0.19531 -0.66797,-0.53515 l 0.375,-0.4336 q 0.46484,0.57422 1.13672,0.57422 0.52734,0 0.82031,-0.29687 0.29688,-0.29688 0.29688,-0.83594 v -0.36328 q -0.4336,0.5 -1.1836,0.5 -0.74219,0 -1.20312,-0.59766 -0.45703,-0.59766 -0.45703,-1.62891 z m 0.72656,0.082 q 0,0.71484 0.29297,1.125 0.29297,0.40625 0.82031,0.40625 0.68359,0 1.00391,-0.6211 v -1.92969 q -0.33204,-0.60546 -0.9961,-0.60546 -0.52734,0 -0.82422,0.41015 -0.29687,0.41016 -0.29687,1.21485 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px"
id="path970" />
<path
d="m 648.43585,-471.50903 q -0.85937,0 -1.39844,-0.5625 -0.53906,-0.56641 -0.53906,-1.51172 v -0.13281 q 0,-0.62891 0.23828,-1.1211 0.24219,-0.49609 0.67188,-0.77344 0.43359,-0.28125 0.9375,-0.28125 0.82422,0 1.28125,0.54297 0.45703,0.54297 0.45703,1.55469 v 0.30078 h -2.86328 q 0.0156,0.625 0.36328,1.01172 0.35156,0.38281 0.89062,0.38281 0.38282,0 0.64844,-0.15625 0.26563,-0.15625 0.46485,-0.41406 l 0.4414,0.34375 q -0.53125,0.81641 -1.59375,0.81641 z m -0.0898,-3.78907 q -0.4375,0 -0.73438,0.32032 -0.29687,0.3164 -0.36718,0.89062 h 2.11718 v -0.0547 q -0.0312,-0.55078 -0.29687,-0.85156 -0.26563,-0.30469 -0.71875,-0.30469 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px"
id="path972" />
<path
d="m 653.37726,-472.70825 q 0,-0.29297 -0.22266,-0.45313 -0.21875,-0.16406 -0.76953,-0.28125 -0.54687,-0.11718 -0.87109,-0.28125 -0.32032,-0.16406 -0.47657,-0.39062 -0.15234,-0.22656 -0.15234,-0.53906 0,-0.51954 0.4375,-0.87891 0.44141,-0.35938 1.125,-0.35938 0.71875,0 1.16406,0.3711 0.44922,0.37109 0.44922,0.94922 h -0.72656 q 0,-0.29688 -0.25391,-0.51172 -0.25,-0.21485 -0.63281,-0.21485 -0.39453,0 -0.61719,0.17188 -0.22265,0.17187 -0.22265,0.44922 0,0.26172 0.20703,0.39453 0.20703,0.13281 0.74609,0.25391 0.54297,0.12109 0.87891,0.28906 0.33594,0.16797 0.49609,0.40625 0.16406,0.23437 0.16406,0.57422 0,0.5664 -0.45312,0.91015 -0.45313,0.33985 -1.17578,0.33985 -0.50781,0 -0.89844,-0.17969 -0.39062,-0.17969 -0.61328,-0.5 -0.21875,-0.32422 -0.21875,-0.69922 h 0.72266 q 0.0195,0.36328 0.28906,0.57813 0.27344,0.21093 0.71875,0.21093 0.41015,0 0.65625,-0.16406 0.25,-0.16797 0.25,-0.44531 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px"
id="path974" />
</g>
<g
aria-label="Folds"
transform="scale(1,-1)"
style="font-style:normal;font-weight:normal;font-size:9px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.75px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
id="text874">
<path
d="m 636.09406,-435.09888 h -2.38672 v 2.51172 h -0.75 v -5.6875 h 3.52343 v 0.61719 h -2.77343 v 1.94531 h 2.38672 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px"
id="path953" />
<path
d="m 636.9964,-434.7395 q 0,-0.6211 0.24219,-1.11719 0.24609,-0.49609 0.67968,-0.76562 0.4375,-0.26954 0.9961,-0.26954 0.86328,0 1.39453,0.59766 0.53516,0.59766 0.53516,1.58984 v 0.0508 q 0,0.61718 -0.23829,1.10937 -0.23437,0.48828 -0.67578,0.76172 -0.4375,0.27344 -1.00781,0.27344 -0.85937,0 -1.39453,-0.59766 -0.53125,-0.59766 -0.53125,-1.58203 z m 0.72656,0.0859 q 0,0.70312 0.32422,1.1289 0.32813,0.42578 0.875,0.42578 0.55078,0 0.875,-0.42968 0.32422,-0.4336 0.32422,-1.21094 0,-0.69531 -0.33203,-1.125 -0.32813,-0.4336 -0.875,-0.4336 -0.53516,0 -0.86328,0.42579 -0.32813,0.42578 -0.32813,1.21875 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px"
id="path955" />
<path
d="m 642.53546,-432.58716 h -0.72265 v -6 h 0.72265 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px"
id="path957" />
<path
d="m 643.51202,-434.7356 q 0,-0.97265 0.46094,-1.5625 0.46094,-0.59375 1.20703,-0.59375 0.74219,0 1.17578,0.50782 v -2.20313 h 0.72266 v 6 h -0.66406 l -0.0352,-0.45312 q -0.43359,0.53125 -1.20703,0.53125 -0.73437,0 -1.19922,-0.60157 -0.46094,-0.60156 -0.46094,-1.57031 z m 0.72266,0.082 q 0,0.71875 0.29688,1.125 0.29687,0.40625 0.82031,0.40625 0.6875,0 1.0039,-0.61719 v -1.94141 q -0.32421,-0.59765 -0.99609,-0.59765 -0.53125,0 -0.82812,0.41015 -0.29688,0.41016 -0.29688,1.21485 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px"
id="path959" />
<path
d="m 650.66437,-433.70825 q 0,-0.29297 -0.22266,-0.45313 -0.21875,-0.16406 -0.76953,-0.28125 -0.54687,-0.11718 -0.87109,-0.28125 -0.32032,-0.16406 -0.47657,-0.39062 -0.15234,-0.22656 -0.15234,-0.53906 0,-0.51954 0.4375,-0.87891 0.44141,-0.35938 1.125,-0.35938 0.71875,0 1.16406,0.3711 0.44922,0.37109 0.44922,0.94922 h -0.72656 q 0,-0.29688 -0.25391,-0.51172 -0.25,-0.21485 -0.63281,-0.21485 -0.39453,0 -0.61719,0.17188 -0.22265,0.17187 -0.22265,0.44922 0,0.26172 0.20703,0.39453 0.20703,0.13281 0.74609,0.25391 0.54297,0.12109 0.87891,0.28906 0.33594,0.16797 0.49609,0.40625 0.16406,0.23437 0.16406,0.57422 0,0.5664 -0.45312,0.91015 -0.45313,0.33985 -1.17578,0.33985 -0.50781,0 -0.89844,-0.17969 -0.39062,-0.17969 -0.61328,-0.5 -0.21875,-0.32422 -0.21875,-0.69922 h 0.72266 q 0.0195,0.36328 0.28906,0.57813 0.27344,0.21093 0.71875,0.21093 0.41015,0 0.65625,-0.16406 0.25,-0.16797 0.25,-0.44531 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px"
id="path961" />
</g>
<g
aria-label="Symmetry"
transform="scale(1,-1)"
style="font-style:normal;font-weight:normal;font-size:9px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.75px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
id="text878">
<path
d="m 626.45343,-373.62231 q -0.96484,-0.27735 -1.40625,-0.67969 -0.4375,-0.40625 -0.4375,-1 0,-0.67188 0.53516,-1.10938 0.53906,-0.4414 1.39843,-0.4414 0.58594,0 1.04297,0.22656 0.46094,0.22656 0.71094,0.625 0.25391,0.39844 0.25391,0.87109 h -0.75391 q 0,-0.51562 -0.32812,-0.80859 -0.32813,-0.29688 -0.92579,-0.29688 -0.55468,0 -0.86718,0.2461 -0.3086,0.24219 -0.3086,0.67578 0,0.34766 0.29297,0.58984 0.29688,0.23828 1.00391,0.4375 0.71094,0.19922 1.10937,0.44141 0.40235,0.23828 0.59375,0.55859 0.19532,0.32032 0.19532,0.75391 0,0.69141 -0.53907,1.10937 -0.53906,0.41407 -1.4414,0.41407 -0.58594,0 -1.09375,-0.22266 -0.50782,-0.22656 -0.78516,-0.61719 -0.27344,-0.39062 -0.27344,-0.88672 h 0.75391 q 0,0.51563 0.37891,0.81641 0.38281,0.29688 1.01953,0.29688 0.59375,0 0.91015,-0.24219 0.31641,-0.24219 0.31641,-0.66016 0,-0.41797 -0.29297,-0.64453 -0.29297,-0.23047 -1.0625,-0.45312 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px"
id="path936"
inkscape:connector-curvature="0" />
<path
d="m 630.79718,-372.14575 0.98438,-3.16797 h 0.77343 l -1.69922,4.87891 q -0.39453,1.05468 -1.2539,1.05468 l -0.13672,-0.0117 -0.26953,-0.0508 v -0.58593 l 0.19531,0.0156 q 0.36719,0 0.57031,-0.14844 0.20703,-0.14843 0.33985,-0.54297 l 0.16015,-0.42968 -1.50781,-4.17969 h 0.78906 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px"
id="path938"
inkscape:connector-curvature="0" />
<path
d="m 633.87531,-375.31372 0.0195,0.46875 q 0.46484,-0.54688 1.2539,-0.54688 0.88672,0 1.20703,0.67969 0.21094,-0.30469 0.54688,-0.49219 0.33984,-0.1875 0.80078,-0.1875 1.39063,0 1.41406,1.47266 v 2.83203 h -0.72265 v -2.78906 q 0,-0.45313 -0.20703,-0.67578 -0.20704,-0.22656 -0.69532,-0.22656 -0.40234,0 -0.66797,0.24218 -0.26562,0.23828 -0.30859,0.64453 v 2.80469 h -0.72656 v -2.76953 q 0,-0.92187 -0.90235,-0.92187 -0.71093,0 -0.97265,0.60546 v 3.08594 h -0.72266 v -4.22656 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px"
id="path940"
inkscape:connector-curvature="0" />
<path
d="m 640.89093,-375.31372 0.0195,0.46875 q 0.46485,-0.54688 1.25391,-0.54688 0.88672,0 1.20703,0.67969 0.21094,-0.30469 0.54687,-0.49219 0.33985,-0.1875 0.80079,-0.1875 1.39062,0 1.41406,1.47266 v 2.83203 h -0.72266 v -2.78906 q 0,-0.45313 -0.20703,-0.67578 -0.20703,-0.22656 -0.69531,-0.22656 -0.40235,0 -0.66797,0.24218 -0.26563,0.23828 -0.30859,0.64453 v 2.80469 h -0.72657 v -2.76953 q 0,-0.92187 -0.90234,-0.92187 -0.71094,0 -0.97266,0.60546 v 3.08594 h -0.72265 v -4.22656 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px"
id="path942"
inkscape:connector-curvature="0" />
<path
d="m 648.98077,-371.00903 q -0.85937,0 -1.39843,-0.5625 -0.53907,-0.56641 -0.53907,-1.51172 v -0.13281 q 0,-0.62891 0.23829,-1.1211 0.24218,-0.49609 0.67187,-0.77344 0.43359,-0.28125 0.9375,-0.28125 0.82422,0 1.28125,0.54297 0.45703,0.54297 0.45703,1.55469 v 0.30078 h -2.86328 q 0.0156,0.625 0.36328,1.01172 0.35156,0.38281 0.89063,0.38281 0.38281,0 0.64843,-0.15625 0.26563,-0.15625 0.46485,-0.41406 l 0.4414,0.34375 q -0.53125,0.81641 -1.59375,0.81641 z m -0.0898,-3.78907 q -0.4375,0 -0.73437,0.32032 -0.29688,0.3164 -0.36719,0.89062 h 2.11719 v -0.0547 q -0.0312,-0.55078 -0.29688,-0.85156 -0.26562,-0.30469 -0.71875,-0.30469 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px"
id="path944"
inkscape:connector-curvature="0" />
<path
d="m 652.44171,-376.33716 v 1.02344 h 0.78906 v 0.55859 h -0.78906 v 2.6211 q 0,0.2539 0.10547,0.38281 0.10547,0.125 0.35938,0.125 0.125,0 0.34375,-0.0469 v 0.58594 q -0.28516,0.0781 -0.55469,0.0781 -0.48438,0 -0.73047,-0.29297 -0.24609,-0.29297 -0.24609,-0.83203 v -2.6211 h -0.76954 v -0.55859 h 0.76954 v -1.02344 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px"
id="path946"
inkscape:connector-curvature="0" />
<path
d="m 656.11359,-374.66528 q -0.16407,-0.0274 -0.35547,-0.0274 -0.71094,0 -0.96485,0.60547 v 3 h -0.72265 v -4.22656 h 0.70312 l 0.0117,0.48828 q 0.35547,-0.56641 1.00781,-0.56641 0.21094,0 0.32032,0.0547 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px"
id="path948"
inkscape:connector-curvature="0" />
<path
d="m 658.15656,-372.14575 0.98437,-3.16797 h 0.77344 l -1.69922,4.87891 q -0.39453,1.05468 -1.25391,1.05468 l -0.13672,-0.0117 -0.26953,-0.0508 v -0.58593 l 0.19532,0.0156 q 0.36718,0 0.57031,-0.14844 0.20703,-0.14843 0.33984,-0.54297 l 0.16016,-0.42968 -1.50781,-4.17969 h 0.78906 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px"
id="path950"
inkscape:connector-curvature="0" />
</g>
<g
aria-label="In"
transform="matrix(1,0,0,-1,-22.5,43.5)"
style="font-style:normal;font-weight:normal;font-size:9px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.75px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
id="text886">
<path
d="m 652.25812,-257.43188 h -0.75 v -5.6875 h 0.75 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px"
id="path1002"
inkscape:connector-curvature="0" />
<path
d="m 654.19562,-261.65845 0.0234,0.53125 q 0.48437,-0.60937 1.26562,-0.60937 1.33984,0 1.35156,1.51172 v 2.79297 h -0.72265 v -2.79688 q -0.004,-0.45703 -0.21094,-0.67578 -0.20313,-0.21875 -0.63672,-0.21875 -0.35156,0 -0.61719,0.1875 -0.26562,0.1875 -0.41406,0.49219 v 3.01172 h -0.72266 v -4.22657 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px"
id="path1004"
inkscape:connector-curvature="0" />
</g>
<g
aria-label="Out"
transform="matrix(1,0,0,-1,19.5,43.5)"
style="font-style:normal;font-weight:normal;font-size:9px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.75px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
id="text890">
<path
d="m 630.35577,-260.09204 q 0,0.83594 -0.28125,1.46094 -0.28125,0.62109 -0.79687,0.94922 -0.51563,0.32812 -1.20313,0.32812 -0.67187,0 -1.1914,-0.32812 -0.51953,-0.33204 -0.8086,-0.94141 -0.28515,-0.61328 -0.29296,-1.41797 v -0.41016 q 0,-0.82031 0.28515,-1.44921 0.28516,-0.62891 0.80469,-0.96094 0.52344,-0.33594 1.19531,-0.33594 0.6836,0 1.20313,0.33203 0.52343,0.32813 0.80468,0.95703 0.28125,0.625 0.28125,1.45703 z m -0.74609,-0.36719 q 0,-1.01172 -0.40625,-1.55078 -0.40625,-0.54297 -1.13672,-0.54297 -0.71094,0 -1.12109,0.54297 -0.40625,0.53906 -0.41797,1.5 v 0.41797 q 0,0.98047 0.41016,1.54297 0.41406,0.55859 1.13671,0.55859 0.72657,0 1.125,-0.52734 0.39844,-0.53125 0.41016,-1.51953 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;stroke-width:0.75px"
id="path995"
inkscape:connector-curvature="0" />
<path
d="m 633.97687,-257.84985 q -0.42188,0.49609 -1.23828,0.49609 -0.67578,0 -1.03125,-0.39062 -0.35157,-0.39454 -0.35547,-1.16407 v -2.75 h 0.72265 v 2.73047 q 0,0.96094 0.78125,0.96094 0.82813,0 1.10157,-0.61719 v -3.07422 h 0.72265 v 4.22657 h -0.6875 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;stroke-width:0.75px"
id="path997"
inkscape:connector-curvature="0" />
<path
d="m 636.75421,-262.68188 v 1.02343 h 0.78906 v 0.5586 h -0.78906 v 2.62109 q 0,0.25391 0.10547,0.38281 0.10547,0.125 0.35938,0.125 0.125,0 0.34375,-0.0469 v 0.58594 q -0.28516,0.0781 -0.55469,0.0781 -0.48438,0 -0.73047,-0.29297 -0.24609,-0.29297 -0.24609,-0.83203 v -2.62109 h -0.76954 v -0.5586 h 0.76954 v -1.02343 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;stroke-width:0.75px"
id="path999"
inkscape:connector-curvature="0" />
</g>
<g
aria-label="Folds"
transform="matrix(1,0,0,-1,0,51.802745)"
style="font-style:normal;font-weight:normal;font-size:9px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.75px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
id="text894">
<path
d="m 624.61749,-286.9436 h -2.38672 v 2.51172 h -0.75 v -5.6875 h 3.52344 v 0.61718 h -2.77344 v 1.94532 h 2.38672 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px"
id="path984"
inkscape:connector-curvature="0" />
<path
d="m 625.51984,-286.58423 q 0,-0.62109 0.24218,-1.11719 0.2461,-0.49609 0.67969,-0.76562 0.4375,-0.26953 0.9961,-0.26953 0.86328,0 1.39453,0.59765 0.53515,0.59766 0.53515,1.58985 v 0.0508 q 0,0.61719 -0.23828,1.10937 -0.23437,0.48829 -0.67578,0.76172 -0.4375,0.27344 -1.00781,0.27344 -0.85938,0 -1.39453,-0.59766 -0.53125,-0.59765 -0.53125,-1.58203 z m 0.72656,0.0859 q 0,0.70312 0.32422,1.12891 0.32812,0.42578 0.875,0.42578 0.55078,0 0.875,-0.42969 0.32422,-0.43359 0.32422,-1.21094 0,-0.69531 -0.33203,-1.125 -0.32813,-0.43359 -0.875,-0.43359 -0.53516,0 -0.86329,0.42578 -0.32812,0.42578 -0.32812,1.21875 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px"
id="path986"
inkscape:connector-curvature="0" />
<path
d="m 631.0589,-284.43188 h -0.72266 v -6 h 0.72266 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px"
id="path988"
inkscape:connector-curvature="0" />
<path
d="m 632.03546,-286.58032 q 0,-0.97266 0.46094,-1.5625 0.46094,-0.59375 1.20703,-0.59375 0.74219,0 1.17578,0.50781 v -2.20312 h 0.72266 v 6 h -0.66406 l -0.0352,-0.45313 q -0.43359,0.53125 -1.20703,0.53125 -0.73438,0 -1.19922,-0.60156 -0.46094,-0.60156 -0.46094,-1.57031 z m 0.72266,0.082 q 0,0.71875 0.29687,1.125 0.29688,0.40625 0.82032,0.40625 0.6875,0 1.0039,-0.61719 v -1.9414 q -0.32422,-0.59766 -0.99609,-0.59766 -0.53125,0 -0.82813,0.41016 -0.29687,0.41015 -0.29687,1.21484 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px"
id="path990"
inkscape:connector-curvature="0" />
<path
d="m 639.18781,-285.55298 q 0,-0.29297 -0.22266,-0.45312 -0.21875,-0.16407 -0.76953,-0.28125 -0.54688,-0.11719 -0.8711,-0.28125 -0.32031,-0.16407 -0.47656,-0.39063 -0.15234,-0.22656 -0.15234,-0.53906 0,-0.51953 0.4375,-0.87891 0.4414,-0.35937 1.125,-0.35937 0.71875,0 1.16406,0.37109 0.44922,0.3711 0.44922,0.94922 h -0.72656 q 0,-0.29687 -0.25391,-0.51172 -0.25,-0.21484 -0.63281,-0.21484 -0.39453,0 -0.61719,0.17187 -0.22266,0.17188 -0.22266,0.44922 0,0.26172 0.20704,0.39453 0.20703,0.13282 0.74609,0.25391 0.54297,0.12109 0.87891,0.28906 0.33593,0.16797 0.49609,0.40625 0.16406,0.23438 0.16406,0.57422 0,0.56641 -0.45312,0.91016 -0.45313,0.33984 -1.17578,0.33984 -0.50782,0 -0.89844,-0.17969 -0.39063,-0.17968 -0.61328,-0.5 -0.21875,-0.32422 -0.21875,-0.69922 h 0.72265 q 0.0195,0.36329 0.28907,0.57813 0.27343,0.21094 0.71875,0.21094 0.41015,0 0.65625,-0.16407 0.25,-0.16796 0.25,-0.44531 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px"
id="path992"
inkscape:connector-curvature="0" />
</g>
<g
aria-label="Sym"
transform="matrix(1,0,0,-1,-1.5,51)"
style="font-style:normal;font-weight:normal;font-size:9px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.75px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
id="text898">
<path
d="m 648.65656,-287.20142 q -0.96485,-0.27734 -1.40625,-0.67968 -0.4375,-0.40625 -0.4375,-1 0,-0.67188 0.53515,-1.10938 0.53906,-0.4414 1.39844,-0.4414 0.58594,0 1.04297,0.22656 0.46094,0.22656 0.71094,0.625 0.2539,0.39844 0.2539,0.87109 h -0.7539 q 0,-0.51562 -0.32813,-0.80859 -0.32812,-0.29688 -0.92578,-0.29688 -0.55469,0 -0.86719,0.2461 -0.30859,0.24218 -0.30859,0.67578 0,0.34765 0.29297,0.58984 0.29687,0.23828 1.0039,0.4375 0.71094,0.19922 1.10938,0.44141 0.40234,0.23828 0.59375,0.55859 0.19531,0.32031 0.19531,0.75391 0,0.6914 -0.53906,1.10937 -0.53906,0.41407 -1.44141,0.41407 -0.58594,0 -1.09375,-0.22266 -0.50781,-0.22656 -0.78515,-0.61719 -0.27344,-0.39062 -0.27344,-0.88672 h 0.7539 q 0,0.51563 0.37891,0.81641 0.38281,0.29687 1.01953,0.29687 0.59375,0 0.91016,-0.24218 0.3164,-0.24219 0.3164,-0.66016 0,-0.41797 -0.29296,-0.64453 -0.29297,-0.23047 -1.0625,-0.45313 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px"
id="path977"
inkscape:connector-curvature="0" />
<path
d="m 653.00031,-285.72485 0.98437,-3.16797 h 0.77344 l -1.69922,4.8789 q -0.39453,1.05469 -1.25391,1.05469 l -0.13672,-0.0117 -0.26953,-0.0508 v -0.58594 l 0.19532,0.0156 q 0.36718,0 0.57031,-0.14844 0.20703,-0.14844 0.33984,-0.54297 l 0.16016,-0.42968 -1.50781,-4.17969 h 0.78906 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px"
id="path979"
inkscape:connector-curvature="0" />
<path
d="m 656.07843,-288.89282 0.0195,0.46875 q 0.46485,-0.54688 1.25391,-0.54688 0.88672,0 1.20703,0.67969 0.21094,-0.30469 0.54687,-0.49219 0.33985,-0.1875 0.80079,-0.1875 1.39062,0 1.41406,1.47266 v 2.83203 h -0.72266 v -2.78906 q 0,-0.45313 -0.20703,-0.67578 -0.20703,-0.22657 -0.69531,-0.22657 -0.40235,0 -0.66797,0.24219 -0.26563,0.23828 -0.30859,0.64453 v 2.80469 h -0.72657 v -2.76953 q 0,-0.92188 -0.90234,-0.92188 -0.71094,0 -0.97266,0.60547 v 3.08594 h -0.72265 v -4.22656 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px"
id="path981"
inkscape:connector-curvature="0" />
</g>
</g>
</svg>

+ 0
- 862
repos/AepelzensModules/res/GateSeq.svg View File

@@ -1,862 +0,0 @@
<?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"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="525"
height="380"
viewBox="0 0 138.90627 100.54169"
version="1.1"
id="svg4541"
sodipodi:docname="GateSeq.svg"
inkscape:version="0.92.2 5c3e80d, 2017-08-06">
<defs
id="defs4535" />
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="3.6527116"
inkscape:cx="262.5"
inkscape:cy="227.07608"
inkscape:document-units="mm"
inkscape:current-layer="layer1"
showgrid="true"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0"
inkscape:window-width="1898"
inkscape:window-height="1026"
inkscape:window-x="10"
inkscape:window-y="42"
inkscape:window-maximized="0"
units="px"
inkscape:snap-to-guides="true"
showguides="false">
<inkscape:grid
type="xygrid"
id="grid911" />
</sodipodi:namedview>
<metadata
id="metadata4538">
<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 />
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(36.687896,-107.67835)"
style="display:inline">
<path
inkscape:connector-curvature="0"
id="path25077"
d="M -36.687897,107.67835 H 102.21835 V 208.22002 H -36.687897 Z m 0,0"
style="fill:#e6e6e6;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.25907877" />
<path
inkscape:connector-curvature="0"
id="path27449"
d="M -28.709064,142.96089 H 92.916604"
style="fill:none;stroke:#000000;stroke-width:0.16576989;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1" />
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;display:none;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458335px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="1.3741193"
y="115.03571"
id="text4737"><tspan
sodipodi:role="line"
id="tspan4735"
x="1.3741193"
y="115.03571"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:3.52777767px;font-family:Helvetica;-inkscape-font-specification:'Helvetica Bold';stroke-width:0.26458335px">GateSEQ-8</tspan></text>
<g
transform="matrix(0.27602379,0,0,0.27602379,-14.524476,109.33096)"
id="text4368"
style="font-style:normal;font-weight:normal;font-size:38.34210587px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.95855266px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
aria-label="GateSEQ-8">
<g
id="text904"
style="font-style:normal;font-weight:normal;font-size:11.50263214px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.95855266px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
aria-label="Gate Sequencer">
<path
inkscape:connector-curvature="0"
id="path906"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:15.33684254px;font-family:Roboto;-inkscape-font-specification:'Roboto, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.95855266px"
d="m 125.77477,12.901417 q -0.60659,0.726404 -1.71491,1.130793 -1.10833,0.396901 -2.45629,0.396901 -1.41537,0 -2.48625,-0.614073 -1.0634,-0.621562 -1.64751,-1.797286 -0.57663,-1.175725 -0.59161,-2.7633278 V 8.5130436 q 0,-1.632535 0.54667,-2.8232371 0.55417,-1.1981909 1.58761,-1.827241 1.04093,-0.6365389 2.43382,-0.6365389 1.93957,0 3.03292,0.9285979 1.09335,0.9211092 1.29555,2.6884406 h -2.1867 q -0.14978,-0.9360865 -0.66649,-1.3704307 -0.50924,-0.4343442 -1.40788,-0.4343442 -1.14577,0 -1.74486,0.8611997 -0.5991,0.8611996 -0.60659,2.5611328 v 0.6964485 q 0,1.7149108 0.65152,2.5910878 0.65151,0.876177 1.90961,0.876177 1.26559,0 1.80478,-0.539186 v -1.879662 h -2.04441 V 8.5504871 h 4.29102 z" />
<path
inkscape:connector-curvature="0"
id="path908"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:15.33684254px;font-family:Roboto;-inkscape-font-specification:'Roboto, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.95855266px"
d="m 132.15513,14.279337 q -0.14977,-0.292059 -0.21717,-0.726403 -0.78631,0.876177 -2.04441,0.876177 -1.1907,0 -1.97702,-0.68896 -0.77882,-0.68896 -0.77882,-1.737377 0,-1.288055 0.95106,-1.977014 0.95856,-0.6889602 2.76333,-0.6964489 h 0.996 v -0.464299 q 0,-0.5616519 -0.29206,-0.8986431 -0.28457,-0.3369911 -0.90613,-0.3369911 -0.54668,0 -0.8612,0.2621042 -0.30704,0.2621042 -0.30704,0.7189145 h -2.16423 q 0,-0.7039371 0.43434,-1.3030325 0.43435,-0.5990954 1.22815,-0.9360866 0.7938,-0.3444799 1.78231,-0.3444799 1.49773,0 2.37391,0.756358 0.88367,0.7488693 0.88367,2.1118113 v 3.5121971 q 0.007,1.153258 0.32201,1.744865 v 0.127308 z m -1.78979,-1.505227 q 0.47927,0 0.88366,-0.209684 0.40439,-0.217172 0.5991,-0.576629 V 10.5949 h -0.80878 q -1.62505,0 -1.72989,1.123304 l -0.007,0.127308 q 0,0.404389 0.28457,0.666493 0.28457,0.262105 0.77883,0.262105 z" />
<path
inkscape:connector-curvature="0"
id="path910"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:15.33684254px;font-family:Roboto;-inkscape-font-specification:'Roboto, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.95855266px"
d="m 138.28837,4.1845792 v 1.9919923 h 1.38541 v 1.5876028 h -1.38541 v 4.0438937 q 0,0.449322 0.17224,0.644028 0.17224,0.194706 0.65901,0.194706 0.35945,0 0.63654,-0.05242 v 1.640024 q -0.63654,0.194706 -1.31053,0.194706 -2.27656,0 -2.32149,-2.299029 V 7.7641743 h -1.18321 V 6.1765715 h 1.18321 V 4.1845792 Z" />
<path
inkscape:connector-curvature="0"
id="path912"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:15.33684254px;font-family:Roboto;-inkscape-font-specification:'Roboto, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.95855266px"
d="m 144.60883,14.429111 q -1.78231,0 -2.90561,-1.093349 -1.11582,-1.093349 -1.11582,-2.913102 v -0.209683 q 0,-1.2206571 0.47179,-2.1792097 0.47179,-0.9660414 1.33299,-1.4827612 0.86869,-0.5242085 1.97701,-0.5242085 1.66249,0 2.61356,1.048417 0.95855,1.048417 0.95855,2.9730114 v 0.883665 h -5.15971 q 0.10484,0.793802 0.62905,1.273078 0.5317,0.479276 1.34047,0.479276 1.25062,0 1.95455,-0.906131 l 1.0634,1.190702 q -0.48677,0.688959 -1.31801,1.078371 -0.83125,0.381924 -1.84222,0.381924 z M 144.3617,7.7791517 q -0.64402,0 -1.04841,0.4343442 -0.3969,0.4343442 -0.50924,1.243123 h 3.01046 v -0.17224 q -0.015,-0.7189145 -0.38941,-1.1083265 -0.37444,-0.3969007 -1.0634,-0.3969007 z" />
<path
inkscape:connector-curvature="0"
id="path914"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:15.33684254px;font-family:Roboto;-inkscape-font-specification:'Roboto, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.95855266px"
d="m 158.80739,11.418656 q 0,-0.636539 -0.44932,-0.97353 -0.44932,-0.34448 -1.61756,-0.7189142 -1.16823,-0.3819233 -1.84971,-0.7488693 -1.85719,-1.0034848 -1.85719,-2.703418 0,-0.8836657 0.49425,-1.5726255 0.50174,-0.6964484 1.43034,-1.0858604 0.93609,-0.389412 2.09684,-0.389412 1.16823,0 2.08185,0.4268555 0.91362,0.4193668 1.41537,1.1907021 0.50923,0.7713353 0.50923,1.7523541 h -2.24661 q 0,-0.7488693 -0.47179,-1.1607474 -0.47179,-0.4193668 -1.3255,-0.4193668 -0.82375,0 -1.28056,0.3519686 -0.45681,0.3444798 -0.45681,0.9136205 0,0.5316972 0.53169,0.8911544 0.53919,0.3594573 1.58012,0.6739823 1.9171,0.5766294 2.79328,1.4303403 0.87618,0.8537108 0.87618,2.1267888 0,1.415363 -1.07089,2.224142 -1.07088,0.80129 -2.88314,0.80129 -1.2581,0 -2.29154,-0.45681 -1.03344,-0.464299 -1.58012,-1.26559 -0.53918,-0.80129 -0.53918,-1.857195 h 2.25409 q 0,1.804775 2.15675,1.804775 0.80129,0 1.25061,-0.322014 0.44932,-0.329503 0.44932,-0.913621 z" />
<path
inkscape:connector-curvature="0"
id="path916"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:15.33684254px;font-family:Roboto;-inkscape-font-specification:'Roboto, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.95855266px"
d="m 166.17626,14.429111 q -1.7823,0 -2.90561,-1.093349 -1.11581,-1.093349 -1.11581,-2.913102 v -0.209683 q 0,-1.2206571 0.47178,-2.1792097 0.47179,-0.9660414 1.33299,-1.4827612 0.86869,-0.5242085 1.97702,-0.5242085 1.66249,0 2.61355,1.048417 0.95855,1.048417 0.95855,2.9730114 v 0.883665 h -5.15971 q 0.10484,0.793802 0.62905,1.273078 0.5317,0.479276 1.34048,0.479276 1.25061,0 1.95455,-0.906131 l 1.06339,1.190702 q -0.48676,0.688959 -1.31801,1.078371 -0.83124,0.381924 -1.84222,0.381924 z m -0.24712,-6.6499593 q -0.64403,0 -1.04842,0.4343442 -0.3969,0.4343442 -0.50923,1.243123 h 3.01045 v -0.17224 q -0.015,-0.7189145 -0.38941,-1.1083265 -0.37443,-0.3969007 -1.06339,-0.3969007 z" />
<path
inkscape:connector-curvature="0"
id="path918"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:15.33684254px;font-family:Roboto;-inkscape-font-specification:'Roboto, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.95855266px"
d="m 170.40737,10.153067 q 0,-1.9096163 0.84623,-3.0179429 0.85371,-1.1083265 2.33647,-1.1083265 1.30303,0 2.07437,0.9959962 l 0.14228,-0.8462223 h 1.90213 V 17.394633 h -2.17172 v -3.811744 q -0.74887,0.846222 -1.96204,0.846222 -1.44532,0 -2.30652,-1.123304 -0.8612,-1.123304 -0.8612,-3.15274 z m 2.16424,0.157263 q 0,1.160747 0.40439,1.767331 0.41187,0.606584 1.15325,0.606584 0.996,0 1.40788,-0.793801 V 8.5429984 q -0.40439,-0.7638467 -1.3929,-0.7638467 -0.74887,0 -1.16075,0.6065841 -0.41187,0.6065841 -0.41187,1.9245942 z" />
<path
inkscape:connector-curvature="0"
id="path920"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:15.33684254px;font-family:Roboto;-inkscape-font-specification:'Roboto, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.95855266px"
d="m 184.25397,13.455581 q -0.80129,0.97353 -2.21666,0.97353 -1.30303,0 -1.99199,-0.748869 -0.68147,-0.74887 -0.69645,-2.194187 V 6.1765715 h 2.16424 v 5.2345965 q 0,1.265589 1.15325,1.265589 1.10084,0 1.51272,-0.763847 V 6.1765715 h 2.17172 v 8.1027655 h -2.03692 z" />
<path
inkscape:connector-curvature="0"
id="path922"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:15.33684254px;font-family:Roboto;-inkscape-font-specification:'Roboto, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.95855266px"
d="m 191.72768,14.429111 q -1.78231,0 -2.90561,-1.093349 -1.11582,-1.093349 -1.11582,-2.913102 v -0.209683 q 0,-1.2206571 0.47179,-2.1792097 0.47179,-0.9660414 1.33299,-1.4827612 0.86869,-0.5242085 1.97701,-0.5242085 1.66249,0 2.61356,1.048417 0.95855,1.048417 0.95855,2.9730114 v 0.883665 h -5.15971 q 0.10484,0.793802 0.62905,1.273078 0.5317,0.479276 1.34048,0.479276 1.25061,0 1.95455,-0.906131 l 1.06339,1.190702 q -0.48676,0.688959 -1.31801,1.078371 -0.83124,0.381924 -1.84222,0.381924 z m -0.24712,-6.6499593 q -0.64403,0 -1.04842,0.4343442 -0.3969,0.4343442 -0.50923,1.243123 h 3.01045 v -0.17224 q -0.015,-0.7189145 -0.38941,-1.1083265 -0.37443,-0.3969007 -1.06339,-0.3969007 z" />
<path
inkscape:connector-curvature="0"
id="path924"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:15.33684254px;font-family:Roboto;-inkscape-font-specification:'Roboto, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.95855266px"
d="m 198.28778,6.1765715 0.0674,0.9360866 q 0.86869,-1.0858605 2.32899,-1.0858605 1.28805,0 1.9171,0.756358 0.62905,0.7563579 0.64403,2.2615852 v 5.2345962 h -2.16423 V 9.0971616 q 0,-0.6889597 -0.29955,-0.9959961 -0.29955,-0.3145251 -0.996,-0.3145251 -0.91362,0 -1.37043,0.778824 v 5.7138726 h -2.16423 V 6.1765715 Z" />
<path
inkscape:connector-curvature="0"
id="path926"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:15.33684254px;font-family:Roboto;-inkscape-font-specification:'Roboto, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.95855266px"
d="m 208.26272,12.684245 q 0.59909,0 0.97353,-0.329502 0.37443,-0.329503 0.38941,-0.876177 h 2.02944 q -0.007,0.823756 -0.44933,1.512716 -0.44183,0.681471 -1.21316,1.063394 -0.76385,0.374435 -1.69245,0.374435 -1.73738,0 -2.74086,-1.100838 -1.00348,-1.108327 -1.00348,-3.055387 v -0.142285 q 0,-1.872173 0.99599,-2.9879882 0.996,-1.1158152 2.73337,-1.1158152 1.52021,0 2.43383,0.8686884 0.92111,0.8611996 0.93609,2.2990286 h -2.02944 q -0.015,-0.6290502 -0.38941,-1.0184622 -0.37444,-0.3969007 -0.98851,-0.3969007 -0.75636,0 -1.14577,0.5541633 -0.38192,0.5466745 -0.38192,1.782309 v 0.224661 q 0,1.250611 0.38192,1.797286 0.38192,0.546674 1.16075,0.546674 z" />
<path
inkscape:connector-curvature="0"
id="path928"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:15.33684254px;font-family:Roboto;-inkscape-font-specification:'Roboto, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.95855266px"
d="m 216.6201,14.429111 q -1.78231,0 -2.90561,-1.093349 -1.11582,-1.093349 -1.11582,-2.913102 v -0.209683 q 0,-1.2206571 0.47179,-2.1792097 0.47179,-0.9660414 1.33299,-1.4827612 0.86869,-0.5242085 1.97701,-0.5242085 1.66249,0 2.61356,1.048417 0.95855,1.048417 0.95855,2.9730114 v 0.883665 h -5.15971 q 0.10484,0.793802 0.62905,1.273078 0.5317,0.479276 1.34048,0.479276 1.25061,0 1.95454,-0.906131 l 1.0634,1.190702 q -0.48677,0.688959 -1.31801,1.078371 -0.83125,0.381924 -1.84222,0.381924 z m -0.24713,-6.6499593 q -0.64402,0 -1.04841,0.4343442 -0.3969,0.4343442 -0.50923,1.243123 h 3.01045 v -0.17224 q -0.015,-0.7189145 -0.38941,-1.1083265 -0.37444,-0.3969007 -1.0634,-0.3969007 z" />
<path
inkscape:connector-curvature="0"
id="path930"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:15.33684254px;font-family:Roboto;-inkscape-font-specification:'Roboto, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.95855266px"
d="m 225.74133,8.2060072 q -0.44184,-0.059909 -0.77883,-0.059909 -1.22814,0 -1.61007,0.8312448 v 5.301994 H 221.1882 V 6.1765715 h 2.04441 l 0.0599,0.9660413 q 0.65152,-1.1158152 1.80478,-1.1158152 0.35946,0 0.67398,0.097353 z" />
</g>
</g>
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;display:none;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458335px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="-29.493109"
y="147.16351"
id="text4698"><tspan
sodipodi:role="line"
id="tspan4696"
x="-29.493109"
y="147.16351"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.64583325px;font-family:Helvetica;-inkscape-font-specification:Helvetica;letter-spacing:0px;word-spacing:2.01083326px;stroke-width:0.26458335px"
dx="0 0.18898809 0 -0.37797618 0 0.18898809 -0.56696427 0 0 -0.56696427 0 0 0 0 0 -0.75595236 0 0 -4.1151242e-11 0 0 -0.75595236 0 0 0.18898809 0 1.3229166 0 0 0.94494051 0 0 0.94494051">1 2 3 4 5 6 7 8 9 10 11 12</tspan></text>
<path
inkscape:connector-curvature="0"
id="path27449-8"
d="M 32.362809,201.79707 V 146.65984"
style="display:inline;fill:none;stroke:#000000;stroke-width:0.11161314;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1" />
<g
id="text914"
style="font-style:normal;font-weight:normal;font-size:11.50263214px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.95855266px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
aria-label="V/Pat"
transform="matrix(0.27602379,0,0,0.27602379,-36.687896,107.67836)">
<path
inkscape:connector-curvature="0"
id="path940"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.94649124px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.95855266px"
d="m 131.528,86.828226 1.81726,-5.246453 h 0.91737 l -2.35894,6.360396 h -0.74263 l -2.35457,-6.360396 h 0.913 z" />
<path
inkscape:connector-curvature="0"
id="path942"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.94649124px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.95855266px"
d="m 135.15378,88.48822 h -0.69458 l 2.65599,-6.906447 h 0.69021 z" />
<path
inkscape:connector-curvature="0"
id="path944"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.94649124px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.95855266px"
d="m 139.6445,85.452179 v 2.48999 h -0.83873 v -6.360396 h 2.34583 q 1.04405,0 1.63378,0.532945 0.5941,0.532946 0.5941,1.410995 0,0.926101 -0.58099,1.428468 -0.57663,0.497998 -1.65563,0.497998 z m 0,-0.685839 h 1.5071 q 0.67273,0 1.03094,-0.314526 0.35821,-0.318893 0.35821,-0.917364 0,-0.567893 -0.35821,-0.908628 -0.35821,-0.340736 -0.98289,-0.353841 h -1.55515 z" />
<path
inkscape:connector-curvature="0"
id="path946"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.94649124px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.95855266px"
d="m 147.18873,87.942169 q -0.0699,-0.139789 -0.11358,-0.497998 -0.56352,0.585366 -1.34546,0.585366 -0.69895,0 -1.14889,-0.393156 -0.44558,-0.397525 -0.44558,-1.004733 0,-0.73826 0.55915,-1.144522 0.56353,-0.41063 1.58137,-0.41063 h 0.78631 v -0.371314 q 0,-0.423735 -0.25337,-0.672734 -0.25337,-0.253368 -0.747,-0.253368 -0.43247,0 -0.72515,0.21842 -0.29268,0.218421 -0.29268,0.528577 h -0.81253 q 0,-0.35384 0.249,-0.681471 0.25337,-0.331998 0.68147,-0.524208 0.43248,-0.19221 0.94795,-0.19221 0.81689,0 1.27994,0.41063 0.46305,0.406262 0.48052,1.12268 v 2.175465 q 0,0.650892 0.166,1.035312 v 0.06989 z m -1.3411,-0.615945 q 0.38005,0 0.72079,-0.196578 0.34073,-0.196578 0.49363,-0.511103 v -0.969786 h -0.63342 q -1.48526,0 -1.48526,0.869313 0,0.380051 0.25337,0.594102 0.25337,0.214052 0.65089,0.214052 z" />
<path
inkscape:connector-curvature="0"
id="path948"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.94649124px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.95855266px"
d="m 150.24225,82.071034 v 1.144522 h 0.88241 v 0.624682 h -0.88241 v 2.931199 q 0,0.283946 0.11794,0.428104 0.11795,0.139788 0.4019,0.139788 0.13979,0 0.38442,-0.05242 v 0.65526 q -0.3189,0.08737 -0.62032,0.08737 -0.54168,0 -0.81689,-0.32763 -0.27521,-0.32763 -0.27521,-0.93047 V 83.84024 h -0.86057 v -0.624682 h 0.86057 v -1.144522 z" />
</g>
<g
transform="matrix(0.27602379,0,0,0.27602379,-40.392063,111.38253)"
id="text953"
style="font-style:normal;font-weight:normal;font-size:11.50263214px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.95855266px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
aria-label="Bank">
<path
inkscape:connector-curvature="0"
id="path955"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:11.50263214px;font-family:Roboto;-inkscape-font-specification:'Roboto, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.95855266px"
d="m 332.38939,33.549305 v -8.177653 h 2.86442 q 1.48838,0 2.25784,0.572885 0.76947,0.567269 0.76947,1.668107 0,0.600967 -0.30891,1.061522 -0.30891,0.454938 -0.85933,0.668366 0.62905,0.157262 0.98851,0.634666 0.36507,0.477405 0.36507,1.168237 0,1.179469 -0.75261,1.786053 -0.75261,0.606584 -2.14551,0.617817 z m 1.68495,-3.560873 v 2.207292 h 1.44345 q 0.59535,0 0.92673,-0.280826 0.33699,-0.286443 0.33699,-0.786313 0,-1.123304 -1.16262,-1.140153 z m 0,-1.190703 h 1.24687 q 1.27495,-0.02247 1.27495,-1.01659 0,-0.556035 -0.32576,-0.797545 -0.32014,-0.247127 -1.01659,-0.247127 h -1.17947 z" />
<path
inkscape:connector-curvature="0"
id="path957"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:11.50263214px;font-family:Roboto;-inkscape-font-specification:'Roboto, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.95855266px"
d="m 343.15064,33.549305 q -0.11233,-0.219044 -0.16288,-0.544802 -0.58973,0.657132 -1.53331,0.657132 -0.89303,0 -1.48276,-0.516719 -0.58412,-0.51672 -0.58412,-1.303033 0,-0.966041 0.7133,-1.482761 0.71891,-0.51672 2.0725,-0.522336 h 0.74699 v -0.348225 q 0,-0.421239 -0.21904,-0.673982 -0.21343,-0.252743 -0.6796,-0.252743 -0.41001,0 -0.6459,0.196578 -0.23028,0.196578 -0.23028,0.539186 h -1.62317 q 0,-0.527953 0.32576,-0.977275 0.32575,-0.449321 0.92111,-0.702065 0.59535,-0.25836 1.33673,-0.25836 1.1233,0 1.78043,0.567269 0.66275,0.561652 0.66275,1.583858 v 2.634148 q 0.006,0.864944 0.24151,1.308649 v 0.09548 z m -1.34235,-1.12892 q 0.35946,0 0.66275,-0.157263 0.30329,-0.162879 0.44932,-0.432472 v -1.044673 h -0.60658 q -1.21879,0 -1.29742,0.842478 l -0.006,0.09548 q 0,0.303292 0.21342,0.49987 0.21343,0.196579 0.58412,0.196579 z" />
<path
inkscape:connector-curvature="0"
id="path959"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:11.50263214px;font-family:Roboto;-inkscape-font-specification:'Roboto, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.95855266px"
d="m 347.30125,27.472231 0.0506,0.702065 q 0.65151,-0.814396 1.74673,-0.814396 0.96605,0 1.43783,0.567269 0.47179,0.567268 0.48302,1.696189 v 3.925947 h -1.62317 v -3.886632 q 0,-0.516719 -0.22466,-0.746997 -0.22466,-0.235894 -0.747,-0.235894 -0.68521,0 -1.02782,0.584119 v 4.285404 h -1.62318 v -6.077074 z" />
<path
inkscape:connector-curvature="0"
id="path961"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:11.50263214px;font-family:Roboto;-inkscape-font-specification:'Roboto, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.95855266px"
d="m 354.46231,31.111735 -0.58412,0.584118 v 1.853452 h -1.62317 v -8.626974 h 1.62317 v 4.779658 l 0.31453,-0.404389 1.55577,-1.825369 h 1.94894 l -2.19606,2.53305 2.38702,3.544024 h -1.86469 z" />
</g>
<g
transform="matrix(0.27602379,0,0,0.27602379,-39.045104,109.26586)"
id="text966"
style="font-style:normal;font-weight:normal;font-size:11.50263214px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.95855266px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
aria-label="Pattern">
<path
inkscape:connector-curvature="0"
id="path968"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:11.50263214px;font-family:Roboto;-inkscape-font-specification:'Roboto, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.95855266px"
d="m 323.53025,78.595662 v 2.881274 h -1.68496 v -8.177652 h 3.19018 q 0.92111,0 1.61756,0.336991 0.70207,0.336991 1.07837,0.960425 0.37631,0.617817 0.37631,1.409746 0,1.201935 -0.82563,1.898384 -0.82001,0.690832 -2.27469,0.690832 z m 0,-1.364814 h 1.50522 q 0.66837,0 1.01659,-0.314526 0.35384,-0.314525 0.35384,-0.898643 0,-0.600967 -0.35384,-0.971658 -0.35384,-0.37069 -0.97727,-0.381923 h -1.54454 z" />
<path
inkscape:connector-curvature="0"
id="path970"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:11.50263214px;font-family:Roboto;-inkscape-font-specification:'Roboto, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.95855266px"
d="m 332.60654,81.476936 q -0.11233,-0.219044 -0.16288,-0.544802 -0.58973,0.657133 -1.53331,0.657133 -0.89302,0 -1.48276,-0.51672 -0.58412,-0.51672 -0.58412,-1.303033 0,-0.966041 0.7133,-1.482761 0.71892,-0.51672 2.0725,-0.522336 h 0.74699 v -0.348224 q 0,-0.421239 -0.21904,-0.673983 -0.21343,-0.252743 -0.6796,-0.252743 -0.41,0 -0.6459,0.196578 -0.23028,0.196578 -0.23028,0.539186 h -1.62317 q 0,-0.527953 0.32576,-0.977274 0.32576,-0.449322 0.92111,-0.702065 0.59535,-0.25836 1.33673,-0.25836 1.1233,0 1.78044,0.567268 0.66275,0.561652 0.66275,1.583859 v 2.634147 q 0.006,0.864944 0.24151,1.30865 v 0.09548 z m -1.34235,-1.12892 q 0.35946,0 0.66275,-0.157263 0.30329,-0.162879 0.44932,-0.432472 v -1.044672 h -0.60658 q -1.21878,0 -1.29742,0.842478 l -0.006,0.09548 q 0,0.303293 0.21343,0.499871 0.21342,0.196578 0.58411,0.196578 z" />
<path
inkscape:connector-curvature="0"
id="path972"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:11.50263214px;font-family:Roboto;-inkscape-font-specification:'Roboto, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.95855266px"
d="m 337.20647,73.905868 v 1.493994 h 1.03906 v 1.190702 h -1.03906 v 3.032921 q 0,0.336991 0.12918,0.483021 0.12918,0.146029 0.49426,0.146029 0.26959,0 0.4774,-0.03932 v 1.230018 q -0.4774,0.14603 -0.98289,0.14603 -1.70742,0 -1.74112,-1.724272 V 76.59056 h -0.88741 v -1.190702 h 0.88741 v -1.493994 z" />
<path
inkscape:connector-curvature="0"
id="path974"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:11.50263214px;font-family:Roboto;-inkscape-font-specification:'Roboto, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.95855266px"
d="m 341.0931,73.905868 v 1.493994 h 1.03906 v 1.190702 h -1.03906 v 3.032921 q 0,0.336991 0.12918,0.483021 0.12918,0.146029 0.49426,0.146029 0.26959,0 0.4774,-0.03932 v 1.230018 q -0.4774,0.14603 -0.98289,0.14603 -1.70742,0 -1.74112,-1.724272 V 76.59056 h -0.88741 v -1.190702 h 0.88741 v -1.493994 z" />
<path
inkscape:connector-curvature="0"
id="path976"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:11.50263214px;font-family:Roboto;-inkscape-font-specification:'Roboto, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.95855266px"
d="m 345.83345,81.589267 q -1.33674,0 -2.17921,-0.820012 -0.83687,-0.820012 -0.83687,-2.184826 v -0.157263 q 0,-0.915492 0.35384,-1.634407 0.35385,-0.724531 0.99975,-1.112071 0.65151,-0.393156 1.48276,-0.393156 1.24686,0 1.96016,0.786312 0.71892,0.786313 0.71892,2.229759 v 0.662749 h -3.86979 q 0.0786,0.595351 0.47179,0.954808 0.39878,0.359458 1.00536,0.359458 0.93796,0 1.46591,-0.679599 l 0.79755,0.893026 q -0.36508,0.51672 -0.98851,0.808779 -0.62343,0.286443 -1.38166,0.286443 z m -0.18535,-4.98747 q -0.48302,0 -0.78631,0.325758 -0.29768,0.325759 -0.38193,0.932343 h 2.25784 v -0.12918 q -0.0112,-0.539186 -0.29205,-0.831245 -0.28083,-0.297676 -0.79755,-0.297676 z" />
<path
inkscape:connector-curvature="0"
id="path978"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:11.50263214px;font-family:Roboto;-inkscape-font-specification:'Roboto, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.95855266px"
d="m 352.67437,76.921939 q -0.33138,-0.04493 -0.58412,-0.04493 -0.92111,0 -1.20755,0.623433 v 3.976496 h -1.62318 v -6.077074 h 1.53331 l 0.0449,0.724531 q 0.48863,-0.836861 1.35358,-0.836861 0.26959,0 0.50548,0.07301 z" />
<path
inkscape:connector-curvature="0"
id="path980"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:11.50263214px;font-family:Roboto;-inkscape-font-specification:'Roboto, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.95855266px"
d="m 354.95467,75.399862 0.0505,0.702065 q 0.65152,-0.814395 1.74674,-0.814395 0.96604,0 1.43783,0.567268 0.47179,0.567269 0.48302,1.696189 v 3.925947 h -1.62317 v -3.886631 q 0,-0.51672 -0.22467,-0.746997 -0.22466,-0.235894 -0.74699,-0.235894 -0.68522,0 -1.02783,0.584118 v 4.285404 h -1.62317 v -6.077074 z" />
</g>
<g
transform="matrix(0.27602379,0,0,0.27602379,-40.70564,107.44479)"
id="text985"
style="font-style:normal;font-weight:normal;font-size:11.50263214px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.95855266px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
aria-label="Copy">
<g
id="g1354">
<path
d="m 187.54182,45.909391 q -0.11795,1.009101 -0.747,1.55952 -0.62468,0.54605 -1.66436,0.54605 -1.12705,0 -1.80852,-0.808154 -0.6771,-0.808155 -0.6771,-2.16236 V 44.43287 q 0,-0.886786 0.31453,-1.55952 0.31889,-0.672734 0.89989,-1.030943 0.58099,-0.362578 1.34546,-0.362578 1.01347,0 1.62505,0.567893 0.61158,0.563524 0.71205,1.563888 h -0.8431 q -0.10921,-0.760102 -0.47616,-1.100838 -0.36257,-0.340735 -1.01784,-0.340735 -0.80378,0 -1.26246,0.594103 -0.45432,0.594103 -0.45432,1.690572 v 0.615945 q 0,1.035312 0.43247,1.646888 0.43248,0.611577 1.21005,0.611577 0.69895,0 1.07026,-0.314525 0.37568,-0.318894 0.498,-1.105206 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.94649124px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.95855266px"
id="path1019"
inkscape:connector-curvature="0" />
<path
d="m 188.34124,45.520603 q 0,-0.694577 0.27084,-1.249364 0.27521,-0.554787 0.7601,-0.856207 0.48926,-0.30142 1.11395,-0.30142 0.96541,0 1.55952,0.668366 0.59847,0.668366 0.59847,1.77794 v 0.05679 q 0,0.690207 -0.26648,1.240626 -0.2621,0.546051 -0.75573,0.851839 -0.48926,0.305788 -1.12705,0.305788 -0.96105,0 -1.55952,-0.668365 -0.5941,-0.668366 -0.5941,-1.769204 z m 0.81252,0.09611 q 0,0.786312 0.36258,1.262468 0.36695,0.476156 0.97852,0.476156 0.61595,0 0.97852,-0.480524 0.36258,-0.484893 0.36258,-1.354205 0,-0.777576 -0.37131,-1.258101 -0.36695,-0.484892 -0.97852,-0.484892 -0.59848,0 -0.96542,0.476156 -0.36695,0.476156 -0.36695,1.362942 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.94649124px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.95855266px"
id="path1021"
inkscape:connector-curvature="0" />
<path
d="m 197.65031,45.616708 q 0,1.078995 -0.49363,1.738624 -0.49363,0.659629 -1.33673,0.659629 -0.86058,0 -1.35421,-0.54605 v 2.275938 h -0.80815 V 43.20098 h 0.73826 l 0.0393,0.524209 q 0.49363,-0.611577 1.37168,-0.611577 0.85184,0 1.34547,0.642155 0.498,0.642156 0.498,1.786678 z m -0.80816,-0.09174 q 0,-0.799418 -0.34073,-1.262469 -0.34074,-0.46305 -0.93484,-0.46305 -0.73389,0 -1.10084,0.650892 v 2.258465 q 0.36258,0.646523 1.10958,0.646523 0.58099,0 0.92173,-0.458682 0.3451,-0.463051 0.3451,-1.371679 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.94649124px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.95855266px"
id="path1023"
inkscape:connector-curvature="0" />
<path
d="m 200.21893,46.743756 1.10084,-3.542776 h 0.86494 l -1.90025,5.456137 q -0.44121,1.179469 -1.40226,1.179469 l -0.1529,-0.0131 -0.30142,-0.05679 v -0.65526 l 0.21842,0.01747 q 0.41063,0 0.63779,-0.165999 0.23153,-0.165999 0.38005,-0.607208 l 0.17911,-0.480525 -1.68621,-4.674192 h 0.88242 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.94649124px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.95855266px"
id="path1025"
inkscape:connector-curvature="0" />
</g>
</g>
<g
transform="matrix(0.27602379,0,0,0.27602379,-40.765326,108.76562)"
id="text989"
style="font-style:normal;font-weight:normal;font-size:11.50263214px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.95855266px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
aria-label="Clear">
<path
inkscape:connector-curvature="0"
id="path1008"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.94649124px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.95855266px"
d="m 187.54182,82.334413 q -0.11795,1.009101 -0.747,1.55952 -0.62468,0.54605 -1.66436,0.54605 -1.12705,0 -1.80852,-0.808154 -0.6771,-0.808155 -0.6771,-2.16236 v -0.611577 q 0,-0.886786 0.31453,-1.55952 0.31889,-0.672734 0.89989,-1.030943 0.58099,-0.362578 1.34546,-0.362578 1.01347,0 1.62505,0.567893 0.61158,0.563524 0.71205,1.563888 h -0.8431 q -0.10921,-0.760102 -0.47616,-1.100838 -0.36257,-0.340735 -1.01784,-0.340735 -0.80378,0 -1.26246,0.594103 -0.45432,0.594103 -0.45432,1.690572 v 0.615945 q 0,1.035312 0.43247,1.646888 0.43248,0.611577 1.21005,0.611577 0.69895,0 1.07026,-0.314525 0.37568,-0.318894 0.498,-1.105206 z" />
<path
inkscape:connector-curvature="0"
id="path1010"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.94649124px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.95855266px"
d="m 189.43334,84.352615 h -0.80815 v -6.709868 h 0.80815 z" />
<path
inkscape:connector-curvature="0"
id="path1012"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.94649124px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.95855266px"
d="m 192.68343,84.439983 q -0.96105,0 -1.56389,-0.62905 -0.60284,-0.633418 -0.60284,-1.690572 v -0.148526 q 0,-0.703313 0.26648,-1.253732 0.27084,-0.554787 0.75136,-0.864944 0.48489,-0.314525 1.04842,-0.314525 0.92173,0 1.43284,0.607208 0.5111,0.607209 0.5111,1.738625 v 0.336367 h -3.20204 q 0.0175,0.698945 0.40626,1.131417 0.39316,0.428103 0.996,0.428103 0.4281,0 0.72515,-0.174736 0.29705,-0.174736 0.51984,-0.463051 l 0.49363,0.38442 q -0.5941,0.912996 -1.78231,0.912996 z m -0.10047,-4.237351 q -0.48926,0 -0.82126,0.358209 -0.332,0.35384 -0.41063,0.995996 h 2.36767 v -0.06116 q -0.0349,-0.615945 -0.33199,-0.952312 -0.29706,-0.340735 -0.80379,-0.340735 z" />
<path
inkscape:connector-curvature="0"
id="path1014"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.94649124px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.95855266px"
d="m 198.37546,84.352615 q -0.0699,-0.139789 -0.11358,-0.497998 -0.56352,0.585366 -1.34546,0.585366 -0.69895,0 -1.14889,-0.393156 -0.44558,-0.397525 -0.44558,-1.004733 0,-0.73826 0.55915,-1.144522 0.56353,-0.41063 1.58137,-0.41063 h 0.78631 v -0.371314 q 0,-0.423735 -0.25337,-0.672734 -0.25337,-0.253368 -0.747,-0.253368 -0.43247,0 -0.72515,0.218421 -0.29268,0.21842 -0.29268,0.528576 h -0.81253 q 0,-0.35384 0.249,-0.681471 0.25337,-0.331998 0.68147,-0.524208 0.43247,-0.19221 0.94795,-0.19221 0.81689,0 1.27994,0.41063 0.46305,0.406262 0.48052,1.12268 v 2.175465 q 0,0.650892 0.166,1.035312 v 0.06989 z m -1.3411,-0.615945 q 0.38005,0 0.72079,-0.196578 0.34073,-0.196578 0.49363,-0.511103 v -0.969786 h -0.63342 q -1.48526,0 -1.48526,0.869313 0,0.380051 0.25337,0.594103 0.25337,0.214051 0.65089,0.214051 z" />
<path
inkscape:connector-curvature="0"
id="path1016"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.94649124px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.95855266px"
d="m 202.61718,80.351157 q -0.18347,-0.03058 -0.39752,-0.03058 -0.79505,0 -1.079,0.677102 v 3.354934 h -0.80815 V 79.626 h 0.78631 l 0.0131,0.546051 q 0.39753,-0.633419 1.12705,-0.633419 0.2359,0 0.35821,0.06116 z" />
</g>
<g
transform="matrix(0.27602379,0,0,0.27602379,-42.387634,108.76562)"
id="text993"
style="font-style:normal;font-weight:normal;font-size:11.50263214px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.95855266px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
aria-label="Length">
<path
inkscape:connector-curvature="0"
id="path995"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.94649124px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.95855266px"
d="m 216.29705,83.666776 h 3.01419 v 0.685839 h -3.8573 v -6.360396 h 0.84311 z" />
<path
inkscape:connector-curvature="0"
id="path997"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.94649124px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.95855266px"
d="m 222.11139,84.439983 q -0.96105,0 -1.56389,-0.62905 -0.60284,-0.633418 -0.60284,-1.690572 v -0.148526 q 0,-0.703313 0.26648,-1.253732 0.27084,-0.554787 0.75136,-0.864944 0.48489,-0.314525 1.04842,-0.314525 0.92173,0 1.43283,0.607208 0.51111,0.607209 0.51111,1.738625 v 0.336367 h -3.20204 q 0.0175,0.698945 0.40626,1.131417 0.39316,0.428103 0.996,0.428103 0.4281,0 0.72515,-0.174736 0.29705,-0.174736 0.51984,-0.463051 l 0.49363,0.38442 q -0.5941,0.912996 -1.78231,0.912996 z m -0.10047,-4.237351 q -0.48926,0 -0.82126,0.358209 -0.332,0.35384 -0.41063,0.995996 h 2.36767 v -0.06116 q -0.0349,-0.615945 -0.332,-0.952312 -0.29705,-0.340735 -0.80378,-0.340735 z" />
<path
inkscape:connector-curvature="0"
id="path999"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.94649124px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.95855266px"
d="m 225.6498,79.626002 0.0262,0.594103 q 0.54168,-0.681471 1.41536,-0.681471 1.49836,0 1.51147,1.690573 v 3.123408 h -0.80816 v -3.127777 q -0.004,-0.511103 -0.23589,-0.755734 -0.22716,-0.24463 -0.71205,-0.24463 -0.39316,0 -0.69021,0.209683 -0.29705,0.209683 -0.46305,0.550419 v 3.368039 h -0.80815 v -4.726613 z" />
<path
inkscape:connector-curvature="0"
id="path1001"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.94649124px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.95855266px"
d="m 229.63815,81.949993 q 0,-1.105206 0.5111,-1.756098 0.51111,-0.655261 1.35421,-0.655261 0.86494,0 1.34984,0.611577 l 0.0393,-0.524209 h 0.73826 v 4.613035 q 0,0.917365 -0.54605,1.445942 -0.54168,0.528576 -1.45905,0.528576 -0.5111,0 -1.00036,-0.21842 -0.48926,-0.21842 -0.747,-0.598471 l 0.41937,-0.484893 q 0.51984,0.642155 1.27121,0.642155 0.58973,0 0.91736,-0.331998 0.332,-0.331999 0.332,-0.934839 v -0.406261 q -0.48489,0.559155 -1.32363,0.559155 -0.82999,0 -1.34547,-0.668365 -0.5111,-0.668366 -0.5111,-1.821625 z m 0.81252,0.09174 q 0,0.799418 0.32763,1.2581 0.32763,0.454314 0.91737,0.454314 0.76447,0 1.12268,-0.694576 v -2.157992 q -0.37132,-0.677102 -1.11394,-0.677102 -0.58974,0 -0.92174,0.458682 -0.332,0.458682 -0.332,1.358574 z" />
<path
inkscape:connector-curvature="0"
id="path1003"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.94649124px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.95855266px"
d="m 235.94176,78.48148 v 1.144522 h 0.88241 v 0.624682 h -0.88241 v 2.931199 q 0,0.283946 0.11794,0.428104 0.11795,0.139789 0.4019,0.139789 0.13979,0 0.38442,-0.05242 v 0.65526 q -0.3189,0.08737 -0.62032,0.08737 -0.54168,0 -0.81689,-0.32763 -0.27521,-0.32763 -0.27521,-0.93047 v -2.931199 h -0.86057 v -0.624682 h 0.86057 V 78.48148 Z" />
<path
inkscape:connector-curvature="0"
id="path1005"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.94649124px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.95855266px"
d="m 238.57154,80.198263 q 0.53731,-0.659629 1.39789,-0.659629 1.49836,0 1.51146,1.690573 v 3.123408 h -0.80815 v -3.127777 q -0.004,-0.511103 -0.23589,-0.755734 -0.22716,-0.24463 -0.71205,-0.24463 -0.39316,0 -0.69021,0.209683 -0.29705,0.209683 -0.46305,0.550419 v 3.368039 h -0.80816 v -6.709868 h 0.80816 z" />
</g>
<g
transform="matrix(0.27602379,0,0,0.27602379,-35.100396,107.93106)"
id="text943"
style="font-style:normal;font-weight:normal;font-size:11.50263214px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.95855266px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
aria-label="Merge">
<path
inkscape:connector-curvature="0"
id="path945"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:11.50263214px;font-family:Roboto;-inkscape-font-specification:'Roboto, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.95855266px"
d="m 436.19757,37.426576 2.10058,5.931045 2.08934,-5.931045 h 2.21291 v 8.177653 h -1.69057 v -2.235375 l 0.1685,-3.858549 -2.2073,6.093924 h -1.157 l -2.20168,-6.088307 0.1685,3.852932 v 2.235375 h -1.68496 v -8.177653 z" />
<path
inkscape:connector-curvature="0"
id="path947"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:11.50263214px;font-family:Roboto;-inkscape-font-specification:'Roboto, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.95855266px"
d="m 446.77348,45.716559 q -1.33674,0 -2.17921,-0.820011 -0.83686,-0.820012 -0.83686,-2.184827 v -0.157262 q 0,-0.915493 0.35384,-1.634407 0.35384,-0.724531 0.99974,-1.112071 0.65151,-0.393157 1.48276,-0.393157 1.24687,0 1.96016,0.786313 0.71892,0.786313 0.71892,2.229758 v 0.66275 h -3.86978 q 0.0786,0.595351 0.47178,0.954808 0.39878,0.359457 1.00536,0.359457 0.93796,0 1.46591,-0.679599 l 0.79755,0.893027 q -0.36508,0.51672 -0.98851,0.808779 -0.62343,0.286442 -1.38166,0.286442 z m -0.18535,-4.987469 q -0.48302,0 -0.78631,0.325758 -0.29768,0.325758 -0.38192,0.932342 h 2.25784 v -0.12918 q -0.0112,-0.539185 -0.29206,-0.831245 -0.28083,-0.297675 -0.79755,-0.297675 z" />
<path
inkscape:connector-curvature="0"
id="path949"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:11.50263214px;font-family:Roboto;-inkscape-font-specification:'Roboto, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.95855266px"
d="m 453.6144,41.049232 q -0.33138,-0.04493 -0.58412,-0.04493 -0.92111,0 -1.20755,0.623434 v 3.976496 h -1.62318 v -6.077074 h 1.53331 l 0.0449,0.724531 q 0.48864,-0.836862 1.35359,-0.836862 0.26959,0 0.50548,0.07301 z" />
<path
inkscape:connector-curvature="0"
id="path951"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:11.50263214px;font-family:Roboto;-inkscape-font-specification:'Roboto, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.95855266px"
d="m 454.16481,42.52076 q 0,-1.398514 0.66275,-2.252225 0.66837,-0.853711 1.79729,-0.853711 0.99974,0 1.55578,0.685216 l 0.0674,-0.572885 h 1.47153 v 5.874879 q 0,0.797546 -0.36507,1.387281 -0.35946,0.589734 -1.01659,0.898643 -0.65713,0.308908 -1.53893,0.308908 -0.66836,0 -1.30303,-0.269593 -0.63467,-0.263976 -0.96042,-0.685215 l 0.71891,-0.988507 q 0.60658,0.679598 1.47153,0.679598 0.6459,0 1.00535,-0.348224 0.35946,-0.342607 0.35946,-0.977274 v -0.325758 q -0.56165,0.634666 -1.47714,0.634666 -1.09522,0 -1.77482,-0.853711 -0.67399,-0.859327 -0.67399,-2.27469 z m 1.62318,0.117947 q 0,0.825628 0.33137,1.297416 0.33138,0.466171 0.90988,0.466171 0.74138,0 1.06152,-0.556036 v -2.555516 q -0.32576,-0.556036 -1.05029,-0.556036 -0.58412,0 -0.92111,0.477405 -0.33137,0.477404 -0.33137,1.426596 z" />
<path
inkscape:connector-curvature="0"
id="path953"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:11.50263214px;font-family:Roboto;-inkscape-font-specification:'Roboto, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.95855266px"
d="m 463.75783,45.716559 q -1.33673,0 -2.17921,-0.820011 -0.83686,-0.820012 -0.83686,-2.184827 v -0.157262 q 0,-0.915493 0.35384,-1.634407 0.35384,-0.724531 0.99974,-1.112071 0.65152,-0.393157 1.48276,-0.393157 1.24687,0 1.96017,0.786313 0.71891,0.786313 0.71891,2.229758 v 0.66275 h -3.86978 q 0.0786,0.595351 0.47179,0.954808 0.39877,0.359457 1.00536,0.359457 0.93795,0 1.46591,-0.679599 l 0.79754,0.893027 q -0.36507,0.51672 -0.9885,0.808779 -0.62344,0.286442 -1.38167,0.286442 z m -0.18534,-4.987469 q -0.48302,0 -0.78632,0.325758 -0.29767,0.325758 -0.38192,0.932342 h 2.25784 v -0.12918 q -0.0112,-0.539185 -0.29206,-0.831245 -0.28082,-0.297675 -0.79754,-0.297675 z" />
</g>
<g
transform="matrix(0.27602379,0,0,0.27602379,-29.279563,107.06778)"
id="text949"
style="font-style:normal;font-weight:normal;font-size:11.50263214px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.95855266px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
aria-label="Run">
<path
inkscape:connector-curvature="0"
id="path967"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.94649124px;font-family:Roboto;-inkscape-font-specification:Roboto;stroke-width:0.95855266px"
d="m 41.487446,46.633076 h -1.493994 v 2.57299 H 39.15035 V 42.84567 h 2.105571 q 1.074627,0 1.651256,0.489261 0.580998,0.489261 0.580998,1.4241 0,0.594103 -0.323262,1.035312 -0.318893,0.441208 -0.891154,0.659629 l 1.493994,2.699673 v 0.05242 h -0.899891 z m -1.493994,-0.685839 h 1.288679 q 0.624682,0 0.991628,-0.323262 0.371314,-0.323262 0.371314,-0.864944 0,-0.589735 -0.353841,-0.90426 -0.349472,-0.314525 -1.013469,-0.318893 h -1.284311 z" />
<path
inkscape:connector-curvature="0"
id="path969"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.94649124px;font-family:Roboto;-inkscape-font-specification:Roboto;stroke-width:0.95855266px"
d="m 47.450318,48.738647 q -0.471788,0.554787 -1.384785,0.554787 -0.755733,0 -1.153258,-0.43684 -0.393157,-0.441209 -0.397525,-1.301785 v -3.075356 h 0.808155 v 3.053514 q 0,1.074628 0.873681,1.074628 0.926101,0 1.231889,-0.690208 v -3.437934 h 0.808155 v 4.726613 h -0.768839 z" />
<path
inkscape:connector-curvature="0"
id="path971"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.94649124px;font-family:Roboto;-inkscape-font-specification:Roboto;stroke-width:0.95855266px"
d="m 50.224255,44.479453 0.02621,0.594103 q 0.541682,-0.681471 1.415363,-0.681471 1.498363,0 1.511468,1.690572 v 3.123409 h -0.808155 v -3.127777 q -0.0044,-0.511103 -0.235894,-0.755734 -0.227157,-0.244631 -0.71205,-0.244631 -0.393156,0 -0.690207,0.209684 -0.297052,0.209683 -0.463051,0.550419 v 3.368039 h -0.808155 v -4.726613 z" />
</g>
<g
transform="matrix(0.27602379,0,0,0.27602379,-28.750397,107.06778)"
id="text954"
style="font-style:normal;font-weight:normal;font-size:11.50263214px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.95855266px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
aria-label="Reset">
<path
inkscape:connector-curvature="0"
id="path956"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.94649124px;font-family:Roboto;-inkscape-font-specification:Roboto;stroke-width:0.95855266px"
d="m 66.409832,46.633076 h -1.493994 v 2.57299 H 64.072736 V 42.84567 h 2.105571 q 1.074627,0 1.651257,0.489261 0.580997,0.489261 0.580997,1.4241 0,0.594103 -0.323262,1.035312 -0.318893,0.441208 -0.891154,0.659629 l 1.493994,2.699673 v 0.05242 h -0.899891 z m -1.493994,-0.685839 h 1.288679 q 0.624682,0 0.991628,-0.323262 0.371314,-0.323262 0.371314,-0.864944 0,-0.589735 -0.35384,-0.90426 -0.349473,-0.314525 -1.01347,-0.318893 h -1.284311 z" />
<path
inkscape:connector-curvature="0"
id="path958"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.94649124px;font-family:Roboto;-inkscape-font-specification:Roboto;stroke-width:0.95855266px"
d="m 71.416023,49.293434 q -0.961049,0 -1.563888,-0.62905 -0.60284,-0.633419 -0.60284,-1.690572 v -0.148526 q 0,-0.703313 0.266473,-1.253732 0.270841,-0.554787 0.751365,-0.864944 0.484893,-0.314525 1.048417,-0.314525 0.921733,0 1.432836,0.607208 0.511104,0.607208 0.511104,1.738625 v 0.336367 h -3.20204 q 0.01747,0.698945 0.406261,1.131417 0.393157,0.428103 0.995996,0.428103 0.428104,0 0.725155,-0.174736 0.297052,-0.174736 0.51984,-0.463051 l 0.49363,0.38442 q -0.594103,0.912996 -1.782309,0.912996 z M 71.31555,45.056082 q -0.489261,0 -0.82126,0.35821 -0.331999,0.35384 -0.41063,0.995996 h 2.367675 v -0.06116 Q 72.416385,45.733183 72.119336,45.396816 71.822285,45.05608 71.31555,45.05608 Z" />
<path
inkscape:connector-curvature="0"
id="path960"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.94649124px;font-family:Roboto;-inkscape-font-specification:Roboto;stroke-width:0.95855266px"
d="m 76.942054,47.952334 q 0,-0.32763 -0.249,-0.506735 -0.24463,-0.183473 -0.860575,-0.314525 -0.611577,-0.131052 -0.974154,-0.314525 -0.358209,-0.183473 -0.532945,-0.43684 -0.170368,-0.253368 -0.170368,-0.60284 0,-0.580998 0.489261,-0.982891 0.49363,-0.401893 1.2581,-0.401893 0.803787,0 1.301785,0.414998 0.502366,0.414999 0.502366,1.061523 h -0.812523 q 0,-0.331999 -0.283946,-0.572261 -0.279578,-0.240263 -0.707682,-0.240263 -0.441208,0 -0.690207,0.19221 -0.248999,0.19221 -0.248999,0.502367 0,0.292683 0.231525,0.441208 0.231525,0.148526 0.834365,0.283947 0.607208,0.13542 0.982891,0.323262 0.375683,0.187841 0.554787,0.454314 0.183473,0.262104 0.183473,0.642155 0,0.633419 -0.506735,1.017838 -0.506734,0.380051 -1.314889,0.380051 -0.567893,0 -1.004733,-0.200946 -0.43684,-0.200947 -0.68584,-0.559156 -0.24463,-0.362578 -0.24463,-0.781944 h 0.808155 q 0.02184,0.406261 0.323261,0.646523 0.305789,0.235894 0.803787,0.235894 0.458682,0 0.733892,-0.183473 0.279578,-0.187841 0.279578,-0.497998 z" />
<path
inkscape:connector-curvature="0"
id="path962"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.94649124px;font-family:Roboto;-inkscape-font-specification:Roboto;stroke-width:0.95855266px"
d="m 80.764408,49.293434 q -0.961049,0 -1.563889,-0.62905 -0.60284,-0.633419 -0.60284,-1.690572 v -0.148526 q 0,-0.703313 0.266473,-1.253732 0.270841,-0.554787 0.751365,-0.864944 0.484893,-0.314525 1.048417,-0.314525 0.921734,0 1.432837,0.607208 0.511103,0.607208 0.511103,1.738625 v 0.336367 h -3.20204 q 0.01747,0.698945 0.406262,1.131417 0.393156,0.428103 0.995996,0.428103 0.428103,0 0.725155,-0.174736 0.297051,-0.174736 0.51984,-0.463051 l 0.493629,0.38442 q -0.594103,0.912996 -1.782308,0.912996 z m -0.100474,-4.237352 q -0.489261,0 -0.82126,0.35821 -0.331998,0.35384 -0.41063,0.995996 h 2.367675 v -0.06116 Q 81.764769,45.733183 81.467721,45.396816 81.170669,45.05608 80.663934,45.05608 Z" />
<path
inkscape:connector-curvature="0"
id="path964"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.94649124px;font-family:Roboto;-inkscape-font-specification:Roboto;stroke-width:0.95855266px"
d="m 84.634813,43.334931 v 1.144522 h 0.882418 v 0.624682 h -0.882418 v 2.931199 q 0,0.283946 0.117947,0.428103 0.117947,0.139789 0.401893,0.139789 0.139789,0 0.38442,-0.05242 v 0.65526 q -0.318894,0.08737 -0.620313,0.08737 -0.541683,0 -0.816892,-0.32763 -0.275209,-0.32763 -0.275209,-0.93047 v -2.931199 h -0.860576 v -0.624682 h 0.860576 v -1.144522 z" />
</g>
<g
aria-label="Clock out"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.94649124px;line-height:85.00000238%;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.95855266px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
id="text995"
transform="matrix(0.27602379,0,0,0.27602379,49.608985,100.10535)">
<path
d="m -245.41901,109.77049 q -0.11794,1.0091 -0.74699,1.55952 -0.62469,0.54605 -1.66437,0.54605 -1.12704,0 -1.80852,-0.80815 -0.6771,-0.80816 -0.6771,-2.16236 v -0.61158 q 0,-0.88678 0.31453,-1.55952 0.31889,-0.67273 0.89989,-1.03094 0.581,-0.36258 1.34547,-0.36258 1.01347,0 1.62504,0.56789 0.61158,0.56353 0.71205,1.56389 h -0.8431 q -0.10921,-0.7601 -0.47616,-1.10083 -0.36257,-0.34074 -1.01783,-0.34074 -0.80379,0 -1.26247,0.5941 -0.45432,0.59411 -0.45432,1.69058 v 0.61594 q 0,1.03531 0.43248,1.64689 0.43247,0.61157 1.21004,0.61157 0.69895,0 1.07026,-0.31452 0.37569,-0.31889 0.498,-1.10521 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.94649124px;line-height:85.00000238%;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.95855266px"
id="path1026"
inkscape:connector-curvature="0" />
<path
d="m -243.52749,111.7887 h -0.80815 v -6.70987 h 0.80815 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.94649124px;line-height:85.00000238%;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.95855266px"
id="path1028"
inkscape:connector-curvature="0" />
<path
d="m -242.45286,109.38171 q 0,-0.69458 0.27084,-1.24937 0.27521,-0.55479 0.7601,-0.8562 0.48926,-0.30142 1.11395,-0.30142 0.96541,0 1.55952,0.66836 0.59847,0.66837 0.59847,1.77794 v 0.0568 q 0,0.69021 -0.26648,1.24063 -0.2621,0.54605 -0.75573,0.85184 -0.48926,0.30578 -1.12705,0.30578 -0.96105,0 -1.55952,-0.66836 -0.5941,-0.66837 -0.5941,-1.76921 z m 0.81252,0.0961 q 0,0.78631 0.36258,1.26247 0.36695,0.47616 0.97852,0.47616 0.61595,0 0.97852,-0.48053 0.36258,-0.48489 0.36258,-1.3542 0,-0.77758 -0.37131,-1.2581 -0.36695,-0.4849 -0.97852,-0.4849 -0.59848,0 -0.96542,0.47616 -0.36695,0.47615 -0.36695,1.36294 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.94649124px;line-height:85.00000238%;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.95855266px"
id="path1030"
inkscape:connector-curvature="0" />
<path
d="m -235.24063,111.21644 q 0.43248,0 0.75574,-0.26211 0.32326,-0.2621 0.35821,-0.65526 h 0.76447 q -0.0218,0.40626 -0.27958,0.77321 -0.25774,0.36694 -0.69021,0.58536 -0.4281,0.21842 -0.90863,0.21842 -0.96541,0 -1.53767,-0.64215 -0.5679,-0.64652 -0.5679,-1.76484 v -0.13542 q 0,-0.6902 0.25337,-1.22752 0.25337,-0.53731 0.72516,-0.83436 0.47615,-0.29705 1.12268,-0.29705 0.79504,0 1.31925,0.47615 0.52858,0.47616 0.56353,1.23626 h -0.76447 q -0.035,-0.45868 -0.34948,-0.75137 -0.31015,-0.29705 -0.76883,-0.29705 -0.61595,0 -0.95669,0.44558 -0.33636,0.44121 -0.33636,1.27994 v 0.1529 q 0,0.81689 0.33636,1.2581 0.33637,0.44121 0.96105,0.44121 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.94649124px;line-height:85.00000238%;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.95855266px"
id="path1032"
inkscape:connector-curvature="0" />
<path
d="m -231.13433,109.60013 -0.50673,0.52857 v 1.66 h -0.80816 v -6.70987 h 0.80816 v 4.05825 l 0.43247,-0.51984 1.47215,-1.55516 h 0.98289 l -1.83909,1.97452 2.05315,2.7521 h -0.94795 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.94649124px;line-height:85.00000238%;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.95855266px"
id="path1034"
inkscape:connector-curvature="0" />
<path
d="m -245.75537,116.98622 q 0,-0.69457 0.27084,-1.24936 0.27521,-0.55479 0.7601,-0.85621 0.48926,-0.30142 1.11394,-0.30142 0.96542,0 1.55952,0.66837 0.59847,0.66836 0.59847,1.77794 v 0.0568 q 0,0.69021 -0.26647,1.24063 -0.2621,0.54605 -0.75573,0.85183 -0.48926,0.30579 -1.12705,0.30579 -0.96105,0 -1.55952,-0.66836 -0.5941,-0.66837 -0.5941,-1.76921 z m 0.81252,0.0961 q 0,0.78631 0.36258,1.26247 0.36694,0.47615 0.97852,0.47615 0.61594,0 0.97852,-0.48052 0.36258,-0.48489 0.36258,-1.35421 0,-0.77757 -0.37132,-1.2581 -0.36694,-0.48489 -0.97852,-0.48489 -0.59847,0 -0.96542,0.47616 -0.36694,0.47615 -0.36694,1.36294 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.94649124px;line-height:85.00000238%;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.95855266px"
id="path1036"
inkscape:connector-curvature="0" />
<path
d="m -237.52093,118.92579 q -0.47179,0.55479 -1.38479,0.55479 -0.75573,0 -1.15326,-0.43684 -0.39315,-0.44121 -0.39752,-1.30178 v -3.07536 h 0.80815 v 3.05352 q 0,1.07462 0.87369,1.07462 0.9261,0 1.23189,-0.69021 v -3.43793 h 0.80815 v 4.72661 h -0.76884 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.94649124px;line-height:85.00000238%;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.95855266px"
id="path1038"
inkscape:connector-curvature="0" />
<path
d="m -234.415,113.52208 v 1.14452 h 0.88242 v 0.62468 h -0.88242 v 2.9312 q 0,0.28395 0.11795,0.42811 0.11795,0.13978 0.40189,0.13978 0.13979,0 0.38442,-0.0524 v 0.65526 q -0.31889,0.0874 -0.62031,0.0874 -0.54168,0 -0.81689,-0.32763 -0.27521,-0.32763 -0.27521,-0.93047 v -2.9312 h -0.86058 v -0.62468 h 0.86058 v -1.14452 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.94649124px;line-height:85.00000238%;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.95855266px"
id="path1040"
inkscape:connector-curvature="0" />
</g>
<g
aria-label="Clock"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.94649124px;line-height:85.00000238%;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.95855266px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
id="text1022"
transform="matrix(0.27602379,0,0,0.27602379,49.079818,100.66345)">
<path
d="m -302.64093,111.6876 q -0.11795,1.0091 -0.747,1.55952 -0.62468,0.54605 -1.66436,0.54605 -1.12705,0 -1.80852,-0.80815 -0.6771,-0.80816 -0.6771,-2.16236 v -0.61158 q 0,-0.88679 0.31452,-1.55952 0.3189,-0.67273 0.89989,-1.03094 0.581,-0.36258 1.34547,-0.36258 1.01347,0 1.62505,0.56789 0.61158,0.56353 0.71205,1.56389 h -0.8431 q -0.10921,-0.7601 -0.47616,-1.10084 -0.36258,-0.34073 -1.01784,-0.34073 -0.80378,0 -1.26247,0.5941 -0.45431,0.5941 -0.45431,1.69057 v 0.61595 q 0,1.03531 0.43247,1.64689 0.43247,0.61157 1.21005,0.61157 0.69894,0 1.07026,-0.31452 0.37568,-0.3189 0.498,-1.10521 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.94649124px;line-height:85.00000238%;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.95855266px"
id="path1043"
inkscape:connector-curvature="0" />
<path
d="m -300.74941,113.7058 h -0.80816 v -6.70987 h 0.80816 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.94649124px;line-height:85.00000238%;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.95855266px"
id="path1045"
inkscape:connector-curvature="0" />
<path
d="m -299.67479,111.29881 q 0,-0.69457 0.27085,-1.24936 0.27521,-0.55479 0.7601,-0.85621 0.48926,-0.30142 1.11394,-0.30142 0.96542,0 1.55952,0.66837 0.59847,0.66836 0.59847,1.77794 v 0.0568 q 0,0.69021 -0.26647,1.24062 -0.2621,0.54605 -0.75573,0.85184 -0.48926,0.30579 -1.12705,0.30579 -0.96105,0 -1.55952,-0.66836 -0.59411,-0.66837 -0.59411,-1.76921 z m 0.81253,0.0961 q 0,0.78631 0.36258,1.26247 0.36694,0.47615 0.97852,0.47615 0.61594,0 0.97852,-0.48052 0.36258,-0.4849 0.36258,-1.35421 0,-0.77757 -0.37132,-1.2581 -0.36694,-0.48489 -0.97852,-0.48489 -0.59847,0 -0.96542,0.47616 -0.36694,0.47615 -0.36694,1.36294 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.94649124px;line-height:85.00000238%;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.95855266px"
id="path1047"
inkscape:connector-curvature="0" />
<path
d="m -292.46255,113.13354 q 0.43247,0 0.75573,-0.2621 0.32327,-0.26211 0.35821,-0.65526 h 0.76447 q -0.0218,0.40626 -0.27957,0.7732 -0.25774,0.36695 -0.69021,0.58537 -0.42811,0.21842 -0.90863,0.21842 -0.96542,0 -1.53768,-0.64215 -0.56789,-0.64653 -0.56789,-1.76484 v -0.13542 q 0,-0.69021 0.25337,-1.22752 0.25336,-0.53732 0.72515,-0.83437 0.47616,-0.29705 1.12268,-0.29705 0.79505,0 1.31926,0.47616 0.52858,0.47615 0.56352,1.23626 h -0.76447 q -0.0349,-0.45869 -0.34947,-0.75137 -0.31016,-0.29705 -0.76884,-0.29705 -0.61594,0 -0.95668,0.44558 -0.33637,0.44121 -0.33637,1.27994 v 0.15289 q 0,0.81689 0.33637,1.2581 0.33637,0.44121 0.96105,0.44121 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.94649124px;line-height:85.00000238%;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.95855266px"
id="path1049"
inkscape:connector-curvature="0" />
<path
d="m -288.35625,111.51723 -0.50673,0.52858 v 1.65999 h -0.80816 v -6.70987 h 0.80816 v 4.05825 l 0.43247,-0.51984 1.47215,-1.55515 h 0.98289 l -1.8391,1.97452 2.05315,2.75209 h -0.94794 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.94649124px;line-height:85.00000238%;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.95855266px"
id="path1051"
inkscape:connector-curvature="0" />
</g>
<g
aria-label="Tempo"
style="font-style:normal;font-weight:normal;font-size:11.50263214px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.95855266px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
id="text1056"
transform="matrix(0.27602379,0,0,0.27602379,49.608985,98.998384)">
<path
d="m -278.75345,113.71845 h -2.04441 v 5.67019 h -0.83437 v -5.67019 h -2.04004 v -0.6902 h 4.91882 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.94649124px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.95855266px"
id="path1058"
inkscape:connector-curvature="0" />
<path
d="m -275.96641,119.47601 q -0.96104,0 -1.56388,-0.62905 -0.60284,-0.63342 -0.60284,-1.69057 v -0.14853 q 0,-0.70331 0.26647,-1.25373 0.27084,-0.55479 0.75136,-0.86494 0.4849,-0.31453 1.04842,-0.31453 0.92173,0 1.43284,0.60721 0.5111,0.60721 0.5111,1.73862 v 0.33637 h -3.20204 q 0.0175,0.69894 0.40626,1.13142 0.39316,0.4281 0.996,0.4281 0.4281,0 0.72515,-0.17474 0.29705,-0.17473 0.51984,-0.46305 l 0.49363,0.38442 q -0.5941,0.913 -1.78231,0.913 z m -0.10047,-4.23735 q -0.48926,0 -0.82126,0.35821 -0.332,0.35384 -0.41063,0.99599 h 2.36768 v -0.0611 q -0.035,-0.61595 -0.332,-0.95232 -0.29705,-0.34073 -0.80379,-0.34073 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.94649124px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.95855266px"
id="path1060"
inkscape:connector-curvature="0" />
<path
d="m -272.43237,114.66203 0.0218,0.52421 q 0.51984,-0.61158 1.40226,-0.61158 0.99163,0 1.34984,0.7601 0.23589,-0.34073 0.61158,-0.55042 0.38005,-0.20968 0.89552,-0.20968 1.55515,0 1.58136,1.64689 v 3.16709 h -0.80815 v -3.11904 q 0,-0.50673 -0.23153,-0.75573 -0.23153,-0.25337 -0.77758,-0.25337 -0.44994,0 -0.74699,0.27084 -0.29705,0.26647 -0.34511,0.72079 v 3.13651 h -0.81252 v -3.0972 q 0,-1.03094 -1.0091,-1.03094 -0.79505,0 -1.08773,0.6771 v 3.45104 h -0.80816 v -4.72661 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.94649124px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.95855266px"
id="path1062"
inkscape:connector-curvature="0" />
<path
d="m -261.3541,117.07776 q 0,1.07899 -0.49363,1.73862 -0.49362,0.65963 -1.33673,0.65963 -0.86057,0 -1.3542,-0.54605 v 2.27594 h -0.80816 v -6.54387 h 0.73826 l 0.0393,0.52421 q 0.49363,-0.61158 1.37168,-0.61158 0.85184,0 1.34547,0.64216 0.49799,0.64215 0.49799,1.78667 z m -0.80815,-0.0917 q 0,-0.79942 -0.34074,-1.26247 -0.34073,-0.46305 -0.93483,-0.46305 -0.7339,0 -1.10084,0.65089 v 2.25847 q 0.36258,0.64652 1.10957,0.64652 0.581,0 0.92174,-0.45868 0.3451,-0.46305 0.3451,-1.37168 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.94649124px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.95855266px"
id="path1064"
inkscape:connector-curvature="0" />
<path
d="m -260.54594,116.98165 q 0,-0.69458 0.27084,-1.24936 0.27521,-0.55479 0.7601,-0.85621 0.48927,-0.30142 1.11395,-0.30142 0.96541,0 1.55952,0.66837 0.59847,0.66836 0.59847,1.77794 v 0.0568 q 0,0.6902 -0.26647,1.24062 -0.26211,0.54605 -0.75574,0.85184 -0.48926,0.30579 -1.12705,0.30579 -0.96105,0 -1.55952,-0.66837 -0.5941,-0.66836 -0.5941,-1.7692 z m 0.81252,0.0961 q 0,0.78631 0.36258,1.26246 0.36695,0.47616 0.97852,0.47616 0.61595,0 0.97853,-0.48052 0.36257,-0.4849 0.36257,-1.35421 0,-0.77758 -0.37131,-1.2581 -0.36695,-0.48489 -0.97852,-0.48489 -0.59847,0 -0.96542,0.47615 -0.36695,0.47616 -0.36695,1.36295 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.94649124px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.95855266px"
id="path1066"
inkscape:connector-curvature="0" />
</g>
<g
transform="matrix(0.27602379,0,0,0.27602379,49.608985,115.26221)"
id="g1079"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.94649124px;line-height:85.00000238%;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.95855266px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
aria-label="Clock">
<path
inkscape:connector-curvature="0"
id="path1069"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.94649124px;line-height:85.00000238%;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.95855266px"
d="m -302.64093,111.6876 q -0.11795,1.0091 -0.747,1.55952 -0.62468,0.54605 -1.66436,0.54605 -1.12705,0 -1.80852,-0.80815 -0.6771,-0.80816 -0.6771,-2.16236 v -0.61158 q 0,-0.88679 0.31452,-1.55952 0.3189,-0.67273 0.89989,-1.03094 0.581,-0.36258 1.34547,-0.36258 1.01347,0 1.62505,0.56789 0.61158,0.56353 0.71205,1.56389 h -0.8431 q -0.10921,-0.7601 -0.47616,-1.10084 -0.36258,-0.34073 -1.01784,-0.34073 -0.80378,0 -1.26247,0.5941 -0.45431,0.5941 -0.45431,1.69057 v 0.61595 q 0,1.03531 0.43247,1.64689 0.43247,0.61157 1.21005,0.61157 0.69894,0 1.07026,-0.31452 0.37568,-0.3189 0.498,-1.10521 z" />
<path
inkscape:connector-curvature="0"
id="path1071"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.94649124px;line-height:85.00000238%;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.95855266px"
d="m -300.74941,113.7058 h -0.80816 v -6.70987 h 0.80816 z" />
<path
inkscape:connector-curvature="0"
id="path1073"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.94649124px;line-height:85.00000238%;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.95855266px"
d="m -299.67479,111.29881 q 0,-0.69457 0.27085,-1.24936 0.27521,-0.55479 0.7601,-0.85621 0.48926,-0.30142 1.11394,-0.30142 0.96542,0 1.55952,0.66837 0.59847,0.66836 0.59847,1.77794 v 0.0568 q 0,0.69021 -0.26647,1.24062 -0.2621,0.54605 -0.75573,0.85184 -0.48926,0.30579 -1.12705,0.30579 -0.96105,0 -1.55952,-0.66836 -0.59411,-0.66837 -0.59411,-1.76921 z m 0.81253,0.0961 q 0,0.78631 0.36258,1.26247 0.36694,0.47615 0.97852,0.47615 0.61594,0 0.97852,-0.48052 0.36258,-0.4849 0.36258,-1.35421 0,-0.77757 -0.37132,-1.2581 -0.36694,-0.48489 -0.97852,-0.48489 -0.59847,0 -0.96542,0.47616 -0.36694,0.47615 -0.36694,1.36294 z" />
<path
inkscape:connector-curvature="0"
id="path1075"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.94649124px;line-height:85.00000238%;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.95855266px"
d="m -292.46255,113.13354 q 0.43247,0 0.75573,-0.2621 0.32327,-0.26211 0.35821,-0.65526 h 0.76447 q -0.0218,0.40626 -0.27957,0.7732 -0.25774,0.36695 -0.69021,0.58537 -0.42811,0.21842 -0.90863,0.21842 -0.96542,0 -1.53768,-0.64215 -0.56789,-0.64653 -0.56789,-1.76484 v -0.13542 q 0,-0.69021 0.25337,-1.22752 0.25336,-0.53732 0.72515,-0.83437 0.47616,-0.29705 1.12268,-0.29705 0.79505,0 1.31926,0.47616 0.52858,0.47615 0.56352,1.23626 h -0.76447 q -0.0349,-0.45869 -0.34947,-0.75137 -0.31016,-0.29705 -0.76884,-0.29705 -0.61594,0 -0.95668,0.44558 -0.33637,0.44121 -0.33637,1.27994 v 0.15289 q 0,0.81689 0.33637,1.2581 0.33637,0.44121 0.96105,0.44121 z" />
<path
inkscape:connector-curvature="0"
id="path1077"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.94649124px;line-height:85.00000238%;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.95855266px"
d="m -288.35625,111.51723 -0.50673,0.52858 v 1.65999 h -0.80816 v -6.70987 h 0.80816 v 4.05825 l 0.43247,-0.51984 1.47215,-1.55515 h 0.98289 l -1.8391,1.97452 2.05315,2.75209 h -0.94794 z" />
</g>
<g
id="text99"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.66842079px;line-height:125%;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.93716365px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
transform="matrix(0.28055665,0,0,0.28232354,115.2989,103.882)"
aria-label="1">
<path
inkscape:connector-curvature="0"
id="path220"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.66842079px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.93716365px"
d="m -472.43837,151.22795 h -0.69645 v -4.61678 l -1.39664,0.51298 v -0.62905 l 1.9845,-0.74513 h 0.10859 z" />
</g>
<g
id="text103"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.66842079px;line-height:125%;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.93716365px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
transform="matrix(0.28055665,0,0,0.28232354,114.80172,103.882)"
aria-label="2">
<path
inkscape:connector-curvature="0"
id="path217"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.66842079px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.93716365px"
d="m -446.27424,151.22795 h -3.5721 v -0.498 l 1.88715,-2.09683 q 0.41937,-0.47553 0.57663,-0.77134 0.161,-0.29954 0.161,-0.61781 0,-0.42686 -0.25836,-0.7002 -0.25836,-0.27333 -0.68896,-0.27333 -0.51671,0 -0.80503,0.2958 -0.28457,0.29206 -0.28457,0.81627 h -0.6927 q 0,-0.75262 0.48302,-1.21691 0.48676,-0.4643 1.29928,-0.4643 0.76011,0 1.20194,0.40064 0.44183,0.3969 0.44183,1.05965 0,0.80504 -1.02595,1.91711 l -1.46029,1.58385 h 2.73711 z" />
</g>
<g
id="text107"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.66842079px;line-height:125%;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.93716365px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
transform="matrix(0.28055665,0,0,0.28232354,114.60054,103.882)"
aria-label="3">
<path
inkscape:connector-curvature="0"
id="path214"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.66842079px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.93716365px"
d="m -424.41528,148.00584 h 0.52046 q 0.49051,-0.007 0.77133,-0.25836 0.28083,-0.25088 0.28083,-0.67773 0,-0.95855 -0.95481,-0.95855 -0.44932,0 -0.71891,0.25836 -0.26585,0.25461 -0.26585,0.67772 h -0.6927 q 0,-0.64777 0.47178,-1.07462 0.47553,-0.4306 1.20568,-0.4306 0.77134,0 1.20943,0.40813 0.43808,0.40813 0.43808,1.13454 0,0.35571 -0.23214,0.68896 -0.22841,0.33324 -0.62531,0.49799 0.44932,0.14229 0.6927,0.47179 0.24713,0.3295 0.24713,0.80504 0,0.73389 -0.47928,1.16449 -0.47927,0.4306 -1.24686,0.4306 -0.76759,0 -1.25062,-0.41563 -0.47927,-0.41562 -0.47927,-1.09709 h 0.69645 q 0,0.4306 0.28082,0.68896 0.28083,0.25836 0.75262,0.25836 0.50174,0 0.76759,-0.2621 0.26585,-0.26211 0.26585,-0.75262 0,-0.47553 -0.29206,-0.73014 -0.29206,-0.25462 -0.84248,-0.26211 h -0.52046 z" />
</g>
<g
id="text111"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.66842079px;line-height:125%;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.93716365px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
transform="matrix(0.28055665,0,0,0.28232354,114.24974,103.882)"
aria-label="4">
<path
inkscape:connector-curvature="0"
id="path211"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.66842079px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.93716365px"
d="m -397.73387,149.39697 h 0.75636 v 0.56539 h -0.75636 v 1.26559 h -0.69645 v -1.26559 h -2.4825 v -0.40813 l 2.44132,-3.77805 h 0.73763 z m -2.39263,0 h 1.69618 v -2.67347 l -0.0824,0.14978 z" />
</g>
<g
id="text115"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.66842079px;line-height:125%;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.93716365px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
transform="matrix(0.28055665,0,0,0.28232354,114.06408,103.882)"
aria-label="5">
<path
inkscape:connector-curvature="0"
id="path208"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.66842079px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.93716365px"
d="m -376.20166,148.33534 0.27708,-2.7184 h 2.79329 v 0.64029 h -2.20542 l -0.16475,1.4865 q 0.40064,-0.23589 0.90987,-0.23589 0.74513,0 1.18322,0.49425 0.43808,0.49051 0.43808,1.32924 0,0.84248 -0.45681,1.32925 -0.45306,0.48302 -1.26933,0.48302 -0.72266,0 -1.17947,-0.40065 -0.45681,-0.40064 -0.52046,-1.10832 h 0.65526 q 0.0636,0.46804 0.33324,0.70768 0.2696,0.23589 0.71143,0.23589 0.48302,0 0.75636,-0.3295 0.27708,-0.3295 0.27708,-0.90988 0,-0.54667 -0.29955,-0.87617 -0.2958,-0.33325 -0.79005,-0.33325 -0.45307,0 -0.71143,0.19845 l -0.18347,0.14977 z" />
</g>
<g
id="text119"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.66842079px;line-height:125%;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.93716365px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
transform="matrix(0.28055665,0,0,0.28232354,113.8211,103.882)"
aria-label="6">
<path
inkscape:connector-curvature="0"
id="path205"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.66842079px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.93716365px"
d="m -349.26241,145.6132 v 0.58786 h -0.12731 q -0.80877,0.015 -1.28805,0.47928 -0.47928,0.4643 -0.55416,1.30677 0.4306,-0.49425 1.17572,-0.49425 0.71143,0 1.13454,0.50174 0.42685,0.50174 0.42685,1.29555 0,0.84247 -0.46055,1.34796 -0.45681,0.50549 -1.22815,0.50549 -0.78256,0 -1.26933,-0.5991 -0.48676,-0.60284 -0.48676,-1.55016 v -0.26585 q 0,-1.50522 0.64028,-2.29902 0.64403,-0.79755 1.91336,-0.81627 z m -0.90987,2.45629 q -0.35572,0 -0.65526,0.21343 -0.29955,0.21342 -0.41563,0.53544 v 0.25461 q 0,0.67399 0.3033,1.08586 0.30329,0.41188 0.75635,0.41188 0.46805,0 0.7339,-0.34448 0.26959,-0.34448 0.26959,-0.90238 0,-0.56166 -0.27334,-0.90614 -0.26959,-0.34822 -0.71891,-0.34822 z" />
</g>
<g
id="text123"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.66842079px;line-height:125%;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.93716365px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
transform="matrix(0.28055665,0,0,0.28232354,113.64341,103.882)"
aria-label="7">
<path
inkscape:connector-curvature="0"
id="path202"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.66842079px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.93716365px"
d="m -324.1416,146.1656 -2.25784,5.06235 h -0.7264 l 2.25035,-4.88263 h -2.95054 v -0.56914 h 3.68443 z" />
</g>
<g
id="text127"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.66842079px;line-height:125%;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.93716365px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
transform="matrix(0.28055665,0,0,0.28232354,113.35208,103.882)"
aria-label="8">
<path
inkscape:connector-curvature="0"
id="path199"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.66842079px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.93716365px"
d="m -299.73903,147.03979 q 0,0.40814 -0.21717,0.72641 -0.21343,0.31827 -0.58037,0.498 0.42685,0.18347 0.67398,0.53544 0.25087,0.35197 0.25087,0.79754 0,0.70768 -0.47928,1.12705 -0.47553,0.41937 -1.25435,0.41937 -0.78632,0 -1.26185,-0.41937 -0.47179,-0.42311 -0.47179,-1.12705 0,-0.44183 0.23964,-0.79754 0.24339,-0.35572 0.67024,-0.53919 -0.3632,-0.17973 -0.57288,-0.498 -0.20969,-0.31827 -0.20969,-0.72266 0,-0.68896 0.44184,-1.09335 0.44183,-0.40438 1.16449,-0.40438 0.71891,0 1.16074,0.40438 0.44558,0.40439 0.44558,1.09335 z m -0.56539,2.54241 q 0,-0.45681 -0.29206,-0.74512 -0.28832,-0.28831 -0.75636,-0.28831 -0.46805,0 -0.75262,0.28457 -0.28082,0.28457 -0.28082,0.74886 0,0.4643 0.27334,0.73015 0.27708,0.26585 0.76759,0.26585 0.48676,0 0.76384,-0.26585 0.27709,-0.26959 0.27709,-0.73015 z m -1.04093,-3.471 q -0.40814,0 -0.66275,0.25461 -0.25087,0.25087 -0.25087,0.68522 0,0.41562 0.24712,0.67398 0.25087,0.25461 0.6665,0.25461 0.41562,0 0.66275,-0.25461 0.25087,-0.25836 0.25087,-0.67398 0,-0.41563 -0.25836,-0.67773 -0.25836,-0.2621 -0.65526,-0.2621 z" />
</g>
<g
id="text131"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.66842079px;line-height:125%;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.93716365px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
transform="matrix(0.28055665,0,0,0.28232354,113.11417,103.882)"
aria-label="9">
<path
inkscape:connector-curvature="0"
id="path196"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.66842079px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.93716365px"
d="m -275.87883,148.67233 q -0.21717,0.25836 -0.52046,0.41562 -0.29955,0.15726 -0.65901,0.15726 -0.47178,0 -0.82375,-0.23215 -0.34823,-0.23215 -0.53919,-0.65151 -0.19096,-0.42311 -0.19096,-0.93234 0,-0.54668 0.20594,-0.98477 0.20968,-0.43809 0.59161,-0.67024 0.38192,-0.23214 0.89115,-0.23214 0.80878,0 1.27308,0.60658 0.46804,0.60284 0.46804,1.64751 v 0.2022 q 0,1.59134 -0.62905,2.32524 -0.62905,0.73014 -1.89838,0.74886 h -0.1348 v -0.58411 h 0.14603 q 0.85746,-0.015 1.31801,-0.44558 0.46056,-0.43434 0.50174,-1.37043 z m -1.06713,0 q 0.34822,0 0.64028,-0.21343 0.2958,-0.21343 0.4306,-0.52795 v -0.27708 q 0,-0.68147 -0.29581,-1.10833 -0.2958,-0.42686 -0.74886,-0.42686 -0.45681,0 -0.7339,0.35197 -0.27708,0.34823 -0.27708,0.92111 0,0.55791 0.26585,0.92111 0.26959,0.35946 0.71892,0.35946 z" />
</g>
<g
id="text135"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.66842079px;line-height:125%;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.93716365px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
transform="matrix(0.28055665,0,0,0.28232354,112.3704,103.882)"
aria-label="10">
<path
inkscape:connector-curvature="0"
id="path191"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.66842079px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.93716365px"
d="m -252.32741,151.06871 h -0.69645 v -4.61678 l -1.39664,0.51298 v -0.62905 l 1.9845,-0.74513 h 0.10859 z" />
<path
inkscape:connector-curvature="0"
id="path193"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.66842079px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.93716365px"
d="m -246.8719,148.74347 q 0,1.21691 -0.41562,1.80852 -0.41562,0.59161 -1.29929,0.59161 -0.87243,0 -1.2918,-0.57663 -0.41936,-0.58038 -0.43434,-1.72989 v -0.92485 q 0,-1.20194 0.41562,-1.78606 0.41562,-0.58411 1.30303,-0.58411 0.87993,0 1.29555,0.56539 0.41562,0.56165 0.42685,1.73738 z m -0.6927,-0.94732 q 0,-0.87992 -0.24713,-1.28056 -0.24712,-0.40439 -0.78257,-0.40439 -0.53169,0 -0.77508,0.40064 -0.24338,0.40065 -0.25087,1.23189 v 1.10833 q 0,0.88366 0.25462,1.30677 0.25836,0.41937 0.77882,0.41937 0.51298,0 0.7601,-0.3969 0.25088,-0.3969 0.26211,-1.25061 z" />
</g>
<g
id="text139"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.66842079px;line-height:125%;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.93716365px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
transform="matrix(0.28055665,0,0,0.28232354,112.29025,103.882)"
aria-label="11">
<path
inkscape:connector-curvature="0"
id="path186"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.66842079px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.93716365px"
d="m -227.87064,151.22795 h -0.69645 v -4.61678 l -1.39664,0.51298 v -0.62905 l 1.98451,-0.74513 h 0.10858 z" />
<path
inkscape:connector-curvature="0"
id="path188"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.66842079px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.93716365px"
d="m -223.55715,151.22795 h -0.69645 v -4.61678 l -1.39664,0.51298 v -0.62905 l 1.9845,-0.74513 h 0.10859 z" />
</g>
<g
id="text143"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.66842079px;line-height:125%;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.93716365px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
transform="matrix(0.28055665,0,0,0.28232354,111.86815,103.882)"
aria-label="12">
<path
inkscape:connector-curvature="0"
id="path181"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.66842079px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.93716365px"
d="m -203.41387,151.22795 h -0.69644 v -4.61678 l -1.39664,0.51298 v -0.62905 l 1.9845,-0.74513 h 0.10858 z" />
<path
inkscape:connector-curvature="0"
id="path183"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.66842079px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.93716365px"
d="m -197.80484,151.22795 h -3.5721 v -0.498 l 1.88715,-2.09683 q 0.41937,-0.47553 0.57663,-0.77134 0.16101,-0.29954 0.16101,-0.61781 0,-0.42686 -0.25836,-0.7002 -0.25836,-0.27333 -0.68896,-0.27333 -0.51672,0 -0.80504,0.2958 -0.28457,0.29206 -0.28457,0.81627 h -0.6927 q 0,-0.75262 0.48302,-1.21691 0.48676,-0.4643 1.29929,-0.4643 0.7601,0 1.20193,0.40064 0.44183,0.3969 0.44183,1.05965 0,0.80504 -1.02595,1.91711 l -1.46029,1.58385 h 2.73711 z" />
</g>
<g
id="text147"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.66842079px;line-height:125%;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.93716365px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
transform="matrix(0.28055665,0,0,0.28232354,111.65827,103.882)"
aria-label="13">
<path
inkscape:connector-curvature="0"
id="path176"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.66842079px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.93716365px"
d="m -178.95709,151.06871 h -0.69645 v -4.61678 l -1.39664,0.51298 v -0.62905 l 1.9845,-0.74513 h 0.10859 z" />
<path
inkscape:connector-curvature="0"
id="path178"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.66842079px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.93716365px"
d="m -175.91294,148.00584 h 0.52046 q 0.49051,-0.007 0.77134,-0.25836 0.28083,-0.25088 0.28083,-0.67773 0,-0.95855 -0.95481,-0.95855 -0.44932,0 -0.71892,0.25836 -0.26585,0.25461 -0.26585,0.67772 h -0.6927 q 0,-0.64777 0.47179,-1.07462 0.47553,-0.4306 1.20568,-0.4306 0.77133,0 1.20942,0.40813 0.43809,0.40813 0.43809,1.13454 0,0.35571 -0.23215,0.68896 -0.22841,0.33324 -0.62531,0.49799 0.44933,0.14229 0.69271,0.47179 0.24712,0.3295 0.24712,0.80504 0,0.73389 -0.47927,1.16449 -0.47928,0.4306 -1.24687,0.4306 -0.76759,0 -1.25061,-0.41563 -0.47928,-0.41562 -0.47928,-1.09709 h 0.69645 q 0,0.4306 0.28083,0.68896 0.28082,0.25836 0.75261,0.25836 0.50174,0 0.76759,-0.2621 0.26585,-0.26211 0.26585,-0.75262 0,-0.47553 -0.29206,-0.73014 -0.29206,-0.25462 -0.84248,-0.26211 h -0.52046 z" />
</g>
<g
id="text151"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.66842079px;line-height:125%;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.93716365px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
transform="matrix(0.28055665,0,0,0.28232354,111.37222,103.882)"
aria-label="14">
<path
inkscape:connector-curvature="0"
id="path171"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.66842079px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.93716365px"
d="m -154.50032,151.22795 h -0.69645 v -4.61678 l -1.39664,0.51298 v -0.62905 l 1.9845,-0.74513 h 0.10859 z" />
<path
inkscape:connector-curvature="0"
id="path173"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.66842079px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.93716365px"
d="m -149.53906,149.39697 h 0.75635 v 0.56539 h -0.75635 v 1.26559 h -0.69645 v -1.26559 h -2.4825 v -0.40813 l 2.44131,-3.77805 h 0.73764 z m -2.39264,0 h 1.69619 v -2.67347 l -0.0824,0.14978 z" />
</g>
<g
id="text155"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.66842079px;line-height:125%;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.93716365px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
transform="matrix(0.28055665,0,0,0.28232354,111.15023,103.882)"
aria-label="15">
<path
inkscape:connector-curvature="0"
id="path166"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.66842079px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.93716365px"
d="m -130.04353,151.06871 h -0.69645 v -4.61678 l -1.39664,0.51298 v -0.62905 l 1.9845,-0.74513 h 0.10859 z" />
<path
inkscape:connector-curvature="0"
id="path168"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.66842079px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.93716365px"
d="m -127.68834,148.33534 0.27708,-2.7184 h 2.79328 v 0.64029 h -2.20542 l -0.16475,1.4865 q 0.40065,-0.23589 0.90988,-0.23589 0.74512,0 1.18321,0.49425 0.43809,0.49051 0.43809,1.32924 0,0.84248 -0.45681,1.32925 -0.45307,0.48302 -1.26933,0.48302 -0.72266,0 -1.17947,-0.40065 -0.45681,-0.40064 -0.52047,-1.10832 h 0.65526 q 0.0637,0.46804 0.33325,0.70768 0.26959,0.23589 0.71143,0.23589 0.48302,0 0.75635,-0.3295 0.27709,-0.3295 0.27709,-0.90988 0,-0.54667 -0.29955,-0.87617 -0.29581,-0.33325 -0.79006,-0.33325 -0.45306,0 -0.71142,0.19845 l -0.18348,0.14977 z" />
</g>
<g
id="text159"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.66842079px;line-height:125%;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.93716365px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
transform="matrix(0.28055665,0,0,0.28232354,110.91881,103.882)"
aria-label="16">
<path
inkscape:connector-curvature="0"
id="path161"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.66842079px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.93716365px"
d="m -105.58677,151.06871 h -0.69645 v -4.61678 l -1.39664,0.51298 v -0.62905 l 1.9845,-0.74513 h 0.10859 z" />
<path
inkscape:connector-curvature="0"
id="path163"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.66842079px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.93716365px"
d="m -100.83145,145.6132 v 0.58786 h -0.12731 q -0.80878,0.015 -1.28805,0.47928 -0.47928,0.4643 -0.55417,1.30677 0.4306,-0.49425 1.17573,-0.49425 0.71142,0 1.13453,0.50174 0.42686,0.50174 0.42686,1.29555 0,0.84247 -0.46055,1.34796 -0.45681,0.50549 -1.22815,0.50549 -0.78257,0 -1.26933,-0.5991 -0.48677,-0.60284 -0.48677,-1.55016 v -0.26585 q 0,-1.50522 0.64028,-2.29902 0.64403,-0.79755 1.91337,-0.81627 z m -0.90988,2.45629 q -0.35571,0 -0.65526,0.21343 -0.29955,0.21342 -0.41562,0.53544 v 0.25461 q 0,0.67399 0.30329,1.08586 0.30329,0.41188 0.75636,0.41188 0.46804,0 0.73389,-0.34448 0.26959,-0.34448 0.26959,-0.90238 0,-0.56166 -0.27333,-0.90614 -0.2696,-0.34822 -0.71892,-0.34822 z" />
</g>
<g
aria-label="Prob"
style="font-style:normal;font-weight:normal;font-size:3.17499995px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
id="text1083"
transform="translate(0.71815477,-0.37798736)">
<path
d="m -27.842636,146.40857 v 0.6873 h -0.23151 v -1.75562 h 0.647506 q 0.288182,0 0.450963,0.14711 0.163986,0.1471 0.163986,0.38946 0,0.25563 -0.160369,0.3943 -0.159164,0.13745 -0.456992,0.13745 z m 0,-0.1893 h 0.415996 q 0.18569,0 0.284564,-0.0868 0.09887,-0.088 0.09887,-0.25321 0,-0.15676 -0.09887,-0.25081 -0.09887,-0.0941 -0.271301,-0.0977 h -0.429259 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.46944451px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332px"
id="path1085"
inkscape:connector-curvature="0" />
<path
d="m -25.920617,145.99137 q -0.05064,-0.008 -0.109726,-0.008 -0.219453,0 -0.297829,0.1869 v 0.92604 h -0.22307 v -1.30466 h 0.217041 l 0.0036,0.15073 q 0.109726,-0.17484 0.311092,-0.17484 0.06511,0 0.09887,0.0169 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.46944451px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332px"
id="path1087"
inkscape:connector-curvature="0" />
<path
d="m -25.800039,146.43148 q 0,-0.19172 0.07476,-0.34485 0.07596,-0.15313 0.209806,-0.23633 0.135048,-0.0832 0.307475,-0.0832 0.266478,0 0.430465,0.18448 0.165192,0.18449 0.165192,0.49076 v 0.0157 q 0,0.19052 -0.07355,0.34244 -0.07235,0.15073 -0.2086,0.23513 -0.135048,0.0844 -0.311092,0.0844 -0.265273,0 -0.430465,-0.18449 -0.163987,-0.18448 -0.163987,-0.48834 z m 0.224276,0.0265 q 0,0.21704 0.10008,0.34847 0.101286,0.13143 0.270096,0.13143 0.170015,0 0.270095,-0.13263 0.10008,-0.13384 0.10008,-0.3738 0,-0.21463 -0.102492,-0.34726 -0.101285,-0.13384 -0.270095,-0.13384 -0.165192,0 -0.266478,0.13143 -0.101286,0.13143 -0.101286,0.3762 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.46944451px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332px"
id="path1089"
inkscape:connector-curvature="0" />
<path
d="m -23.228102,146.45801 q 0,0.29904 -0.13746,0.48111 -0.137459,0.18087 -0.368969,0.18087 -0.247186,0 -0.382234,-0.17484 l -0.01085,0.15072 H -24.3326 v -1.85208 h 0.22307 v 0.69091 q 0.135048,-0.1676 0.372587,-0.1676 0.237539,0 0.372587,0.17966 0.136254,0.17966 0.136254,0.49196 z m -0.22307,-0.0253 q 0,-0.22789 -0.08802,-0.35209 -0.08802,-0.12419 -0.253214,-0.12419 -0.220658,0 -0.317121,0.20498 v 0.56431 q 0.102491,0.20498 0.319532,0.20498 0.16037,0 0.249598,-0.1242 0.08923,-0.12419 0.08923,-0.37379 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.46944451px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332px"
id="path1091"
inkscape:connector-curvature="0" />
</g>
<g
id="g1102"
style="font-style:normal;font-weight:normal;font-size:3.17499995px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
aria-label="Prob"
transform="translate(122.38891,-0.3779762)">
<path
id="path1094"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.46944451px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332px"
d="m -27.842636,146.40857 v 0.6873 h -0.23151 v -1.75562 h 0.647506 q 0.288182,0 0.450963,0.14711 0.163986,0.1471 0.163986,0.38946 0,0.25563 -0.160369,0.3943 -0.159164,0.13745 -0.456992,0.13745 z m 0,-0.1893 h 0.415996 q 0.18569,0 0.284564,-0.0868 0.09887,-0.088 0.09887,-0.25321 0,-0.15676 -0.09887,-0.25081 -0.09887,-0.0941 -0.271301,-0.0977 h -0.429259 z"
inkscape:connector-curvature="0" />
<path
id="path1096"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.46944451px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332px"
d="m -25.920617,145.99137 q -0.05064,-0.008 -0.109726,-0.008 -0.219453,0 -0.297829,0.1869 v 0.92604 h -0.22307 v -1.30466 h 0.217041 l 0.0036,0.15073 q 0.109726,-0.17484 0.311092,-0.17484 0.06511,0 0.09887,0.0169 z"
inkscape:connector-curvature="0" />
<path
id="path1098"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.46944451px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332px"
d="m -25.800039,146.43148 q 0,-0.19172 0.07476,-0.34485 0.07596,-0.15313 0.209806,-0.23633 0.135048,-0.0832 0.307475,-0.0832 0.266478,0 0.430465,0.18448 0.165192,0.18449 0.165192,0.49076 v 0.0157 q 0,0.19052 -0.07355,0.34244 -0.07235,0.15073 -0.2086,0.23513 -0.135048,0.0844 -0.311092,0.0844 -0.265273,0 -0.430465,-0.18449 -0.163987,-0.18448 -0.163987,-0.48834 z m 0.224276,0.0265 q 0,0.21704 0.10008,0.34847 0.101286,0.13143 0.270096,0.13143 0.170015,0 0.270095,-0.13263 0.10008,-0.13384 0.10008,-0.3738 0,-0.21463 -0.102492,-0.34726 -0.101285,-0.13384 -0.270095,-0.13384 -0.165192,0 -0.266478,0.13143 -0.101286,0.13143 -0.101286,0.3762 z"
inkscape:connector-curvature="0" />
<path
id="path1100"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.46944451px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332px"
d="m -23.228102,146.45801 q 0,0.29904 -0.13746,0.48111 -0.137459,0.18087 -0.368969,0.18087 -0.247186,0 -0.382234,-0.17484 l -0.01085,0.15072 H -24.3326 v -1.85208 h 0.22307 v 0.69091 q 0.135048,-0.1676 0.372587,-0.1676 0.237539,0 0.372587,0.17966 0.136254,0.17966 0.136254,0.49196 z m -0.22307,-0.0253 q 0,-0.22789 -0.08802,-0.35209 -0.08802,-0.12419 -0.253214,-0.12419 -0.220658,0 -0.317121,0.20498 v 0.56431 q 0.102491,0.20498 0.319532,0.20498 0.16037,0 0.249598,-0.1242 0.08923,-0.12419 0.08923,-0.37379 z"
inkscape:connector-curvature="0" />
</g>
</g>
</svg>

+ 0
- 685
repos/AepelzensModules/res/QuadSeq.svg View File

@@ -1,685 +0,0 @@
<?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"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="330.49908"
height="380"
viewBox="0 0 87.444549 100.54166"
version="1.1"
id="svg12553"
inkscape:version="0.92.2 5c3e80d, 2017-08-06"
sodipodi:docname="QuadSeq.svg">
<defs
id="defs12547" />
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="1.979899"
inkscape:cx="47.874682"
inkscape:cy="190.99895"
inkscape:document-units="mm"
inkscape:current-layer="layer1"
showgrid="true"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0"
units="px"
inkscape:window-width="1898"
inkscape:window-height="1026"
inkscape:window-x="10"
inkscape:window-y="42"
inkscape:window-maximized="0"
inkscape:snap-grids="true"
showguides="true"
inkscape:guide-bbox="true">
<inkscape:grid
type="xygrid"
id="grid12870"
originx="-20.372917"
originy="84.666661" />
</sodipodi:namedview>
<metadata
id="metadata12550">
<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>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-26.543497,-161.30655)"
style="display:inline;opacity:1">
<path
inkscape:connector-curvature="0"
id="path33453"
d="m 26.616839,161.37987 h 87.297891 v 100.3961 H 26.616839 Z m 0,0"
style="fill:#e6e6e6;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.27602378" />
<path
inkscape:connector-curvature="0"
id="path35483"
d="M 31.535655,201.88078 H 108.99592"
style="fill:none;stroke:#000000;stroke-width:0.18383184;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1" />
<path
inkscape:connector-curvature="0"
id="path35723"
d="m 53.890107,251.42663 h 32.75133"
style="fill:none;stroke:#000000;stroke-width:0.18574786;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1" />
<path
inkscape:connector-curvature="0"
id="path35809"
d="m 49.914977,173.21281 v 23.8614"
style="fill:none;stroke:#000000;stroke-width:0.27337801;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1" />
<path
style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.27602378"
d="m 34.621094,205.12747 c 0,0.0776 0.06038,0.13802 0.133694,0.13802 0.07763,0 0.138007,-0.0604 0.138007,-0.13802 v -1.3068 c 0,-0.0733 -0.06038,-0.1337 -0.138007,-0.1337 h -0.0042 c -0.03881,0 -0.07763,0.009 -0.129382,0.0259 l -0.237225,0.0733 c -0.05175,0.0173 -0.09057,0.0604 -0.09057,0.11645 0,0.0647 0.05606,0.11644 0.120756,0.11644 0.01296,0 0.0345,-0.004 0.04744,-0.009 l 0.159596,-0.0474 z m 0,0"
id="path7275"
inkscape:connector-curvature="0" />
<path
style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.27602378"
d="m 44.255949,205.12316 c 0,0.0819 0.06038,0.12939 0.146632,0.12939 h 0.875533 c 0.06469,0 0.120756,-0.0518 0.120756,-0.12077 0,-0.0647 -0.05607,-0.11644 -0.120756,-0.11644 h -0.625369 l 0.314827,-0.2674 c 0.27604,-0.21996 0.405421,-0.35365 0.405421,-0.59518 v -0.009 c 0,-0.27603 -0.211349,-0.46148 -0.513238,-0.46148 -0.241512,0 -0.383858,0.0949 -0.508926,0.25015 -0.0217,0.0259 -0.0345,0.0561 -0.0345,0.0862 0,0.069 0.05607,0.12076 0.125068,0.12076 0.04313,0 0.07334,-0.0173 0.09491,-0.0388 0.09488,-0.11645 0.181134,-0.17252 0.306203,-0.17252 0.138006,0 0.250137,0.0863 0.250137,0.24152 0,0.13801 -0.07763,0.23721 -0.293264,0.41404 l -0.474425,0.40541 c -0.04313,0.0388 -0.069,0.0819 -0.069,0.1337 z m 0,0"
id="path7271"
inkscape:connector-curvature="0" />
<path
style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.27602378"
d="m 55.013325,205.27842 c 0.323453,0 0.543428,-0.2027 0.543428,-0.49167 v -0.004 c 0,-0.28465 -0.224287,-0.40109 -0.457174,-0.43129 l 0.366607,-0.37521 c 0.04313,-0.0474 0.07763,-0.0863 0.07763,-0.15095 0,-0.0733 -0.06038,-0.11645 -0.138007,-0.11645 h -0.789278 c -0.06469,0 -0.120756,0.0517 -0.120756,0.11645 0,0.0647 0.05606,0.11644 0.120756,0.11644 h 0.560678 l -0.362267,0.38816 c -0.04313,0.0431 -0.05607,0.0733 -0.05607,0.11214 0,0.0604 0.05175,0.11644 0.116444,0.11644 h 0.05607 c 0.215635,0 0.353642,0.0863 0.353642,0.23721 v 0.004 c 0,0.14233 -0.112131,0.2329 -0.267388,0.2329 -0.142319,0 -0.25445,-0.0474 -0.349356,-0.14664 -0.0217,-0.0216 -0.05175,-0.0345 -0.09057,-0.0345 -0.07332,0 -0.129381,0.0604 -0.129381,0.12938 0,0.0388 0.0172,0.0776 0.04313,0.0992 0.125069,0.12076 0.293291,0.19839 0.521864,0.19839 z m 0,0"
id="path7267"
inkscape:connector-curvature="0" />
<path
style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.27602378"
d="m 65.337817,205.1361 c 0,0.0733 0.05606,0.12939 0.129381,0.12939 0.07334,0 0.129408,-0.0561 0.129408,-0.12939 v -0.22859 h 0.120755 c 0.06469,0 0.112131,-0.0517 0.112131,-0.11213 0,-0.0604 -0.04744,-0.11213 -0.112131,-0.11213 h -0.120755 v -0.86689 c 0,-0.0733 -0.05607,-0.1337 -0.129408,-0.1337 -0.08194,0 -0.116443,0.0345 -0.168196,0.0906 l -0.724561,0.86257 c -0.03881,0.0431 -0.06038,0.0906 -0.06038,0.14233 0,0.0733 0.06038,0.12938 0.133694,0.12938 h 0.69006 z m -0.5089,-0.45285 0.5089,-0.61243 v 0.61243 z m 0,0"
id="path7263"
inkscape:connector-curvature="0" />
<path
style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.27602378"
d="m 75.346422,205.27842 c 0.327766,0 0.564991,-0.20702 0.564991,-0.52186 v -0.004 c 0,-0.32778 -0.237225,-0.48735 -0.539115,-0.48735 -0.103505,0 -0.172508,0.0173 -0.245824,0.0431 l 0.02593,-0.36228 h 0.57793 c 0.069,0 0.120755,-0.0517 0.120755,-0.11644 0,-0.069 -0.05175,-0.12076 -0.120755,-0.12076 h -0.698687 c -0.06472,0 -0.120782,0.0474 -0.125095,0.12076 l -0.03019,0.55636 c -0.0042,0.0517 0.01297,0.0906 0.05175,0.11644 0.05175,0.0388 0.08625,0.0561 0.129408,0.0561 0.03881,0 0.11213,-0.0561 0.263075,-0.0561 0.189759,0 0.31914,0.0992 0.31914,0.25878 v 0.004 c 0,0.16389 -0.125068,0.2674 -0.297577,0.2674 -0.120756,0 -0.232886,-0.0431 -0.336417,-0.12939 -0.0217,-0.0216 -0.04744,-0.0302 -0.08194,-0.0302 -0.069,0 -0.129381,0.0604 -0.129381,0.1337 0,0.0431 0.0217,0.0776 0.05606,0.10351 0.125069,0.0992 0.284665,0.1682 0.495988,0.1682 z m 0,0"
id="path7259"
inkscape:connector-curvature="0" />
<path
style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.27602378"
d="m 85.546692,205.27842 c 0.323479,0 0.573616,-0.21996 0.573616,-0.52617 v -0.004 c 0,-0.30622 -0.241511,-0.48304 -0.539115,-0.48304 -0.185446,0 -0.288951,0.0733 -0.370893,0.15095 0.01296,-0.28034 0.138007,-0.48736 0.370893,-0.48736 0.103505,0 0.181134,0.0302 0.263076,0.0863 0.0217,0.009 0.04315,0.0172 0.06903,0.0172 0.069,0 0.129382,-0.0517 0.129382,-0.12507 0,-0.0561 -0.02593,-0.0906 -0.069,-0.11645 -0.09919,-0.069 -0.224287,-0.11214 -0.383857,-0.11214 -0.439923,0 -0.664184,0.37091 -0.664184,0.84533 v 0.004 c 0,0.31053 0.07332,0.4701 0.189759,0.58655 0.103532,0.10351 0.241539,0.16389 0.431298,0.16389 z m -0.0087,-0.23721 c -0.194071,0 -0.31914,-0.11644 -0.31914,-0.27602 v -0.004 c 0,-0.14664 0.120756,-0.27171 0.310515,-0.27171 0.194072,0 0.31914,0.11644 0.31914,0.27171 v 0.004 c 0,0.15958 -0.116443,0.27602 -0.310515,0.27602 z m 0,0"
id="path7255"
inkscape:connector-curvature="0" />
<path
style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.27602378"
d="m 95.326406,205.14041 c 0,0.0776 0.06903,0.12508 0.138033,0.12508 0.05607,0 0.09919,-0.0302 0.133694,-0.0906 l 0.638307,-1.21624 c 0.0217,-0.0431 0.03881,-0.0906 0.03881,-0.12938 0,-0.0776 -0.04744,-0.12076 -0.125069,-0.12076 h -0.866907 c -0.06469,0 -0.120756,0.0517 -0.120756,0.11645 0,0.069 0.05606,0.12076 0.120756,0.12076 h 0.668496 l -0.599493,1.11272 c -0.01296,0.0259 -0.02593,0.0604 -0.02593,0.0819 z m 0,0"
id="path7251"
inkscape:connector-curvature="0" />
<path
style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.27602378"
d="m 105.8677,205.27411 c 0.3407,0 0.59086,-0.17252 0.59086,-0.44854 v -0.004 c 0,-0.18114 -0.10781,-0.29328 -0.28035,-0.37091 0.13372,-0.069 0.2286,-0.17251 0.2286,-0.34503 v -0.004 c 0,-0.23721 -0.2286,-0.41835 -0.53911,-0.41835 -0.30621,0 -0.53481,0.18114 -0.53481,0.41835 v 0.004 c 0,0.17252 0.0949,0.27603 0.22429,0.34503 -0.17253,0.0733 -0.27604,0.18977 -0.27604,0.37522 v 0.004 c 0,0.2674 0.25017,0.44423 0.58656,0.44423 z m 0,-0.91433 c -0.15957,0 -0.27602,-0.0949 -0.27602,-0.22858 v -0.004 c 0,-0.11645 0.11213,-0.21565 0.27602,-0.21565 0.16819,0 0.27601,0.0992 0.27601,0.21565 v 0.004 c 0,0.1337 -0.11644,0.22858 -0.27601,0.22858 z m 0,0.68575 c -0.2027,0 -0.31914,-0.10351 -0.31914,-0.22859 v -0.004 c 0,-0.14232 0.138,-0.2372 0.31914,-0.2372 0.18544,0 0.32776,0.0949 0.32776,0.2372 v 0.004 c 0,0.12508 -0.12507,0.22859 -0.32776,0.22859 z m 0,0"
id="path7247"
inkscape:connector-curvature="0" />
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:3.17499995px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="150.3685"
y="173.2128"
id="text92"><tspan
sodipodi:role="line"
id="tspan90"
x="150.3685"
y="176.02193"
style="stroke-width:0.26458332px" /></text>
<g
aria-label="Steps"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222223px;line-height:125%;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
id="text144"
transform="translate(-8.9958338,12.700002)">
<path
d="m 64.144646,171.78929 q -0.340375,-0.0978 -0.496093,-0.23978 -0.154341,-0.14331 -0.154341,-0.35277 0,-0.23703 0.188792,-0.39137 0.190169,-0.15571 0.493337,-0.15571 0.206706,0 0.367936,0.0799 0.162609,0.0799 0.250803,0.22049 0.08957,0.14056 0.08957,0.3073 h -0.265961 q 0,-0.1819 -0.115756,-0.28525 -0.115755,-0.10473 -0.326595,-0.10473 -0.195681,0 -0.305924,0.0868 -0.108865,0.0854 -0.108865,0.2384 0,0.12265 0.103353,0.20809 0.104731,0.0841 0.354155,0.15434 0.250803,0.0703 0.391363,0.15571 0.141938,0.0841 0.209462,0.19706 0.0689,0.113 0.0689,0.26597 0,0.24391 -0.190169,0.39136 -0.19017,0.14607 -0.508496,0.14607 -0.206706,0 -0.385851,-0.0785 -0.179145,-0.0799 -0.276986,-0.21773 -0.09646,-0.1378 -0.09646,-0.31281 h 0.265961 q 0,0.1819 0.13367,0.28801 0.135047,0.10473 0.359668,0.10473 0.209461,0 0.321083,-0.0854 0.111621,-0.0854 0.111621,-0.23289 0,-0.14745 -0.103353,-0.22737 -0.103353,-0.0813 -0.374827,-0.15986 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222223px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332px"
id="path195"
inkscape:connector-curvature="0" />
<path
d="m 65.535087,170.83156 v 0.36104 h 0.278364 v 0.19706 h -0.278364 v 0.92467 q 0,0.0896 0.03721,0.13504 0.03721,0.0441 0.126779,0.0441 0.0441,0 0.121268,-0.0165 v 0.20671 q -0.100597,0.0276 -0.195682,0.0276 -0.170876,0 -0.257693,-0.10335 -0.08682,-0.10336 -0.08682,-0.29352 v -0.92467 h -0.271474 v -0.19706 h 0.271474 v -0.36104 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222223px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332px"
id="path197"
inkscape:connector-curvature="0" />
<path
d="m 66.728468,172.7112 q -0.303168,0 -0.493338,-0.19844 -0.190169,-0.19981 -0.190169,-0.5333 v -0.0468 q 0,-0.22187 0.08406,-0.3955 0.08544,-0.17501 0.237023,-0.27285 0.152962,-0.0992 0.330729,-0.0992 0.290766,0 0.451997,0.19155 0.16123,0.19155 0.16123,0.54846 v 0.10611 h -1.010102 q 0.0055,0.22048 0.128158,0.35691 0.124023,0.13505 0.314192,0.13505 0.135048,0 0.228755,-0.0551 0.09371,-0.0551 0.163986,-0.14607 l 0.155719,0.12127 q -0.187414,0.28801 -0.56224,0.28801 z m -0.0317,-1.3367 q -0.15434,0 -0.259071,0.113 -0.104731,0.11162 -0.129536,0.3142 h 0.746897 v -0.0193 q -0.01102,-0.1943 -0.104731,-0.30041 -0.09371,-0.10749 -0.253559,-0.10749 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222223px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332px"
id="path199"
inkscape:connector-curvature="0" />
<path
d="m 68.863049,171.95466 q 0,0.34037 -0.155718,0.54846 -0.155719,0.20808 -0.42168,0.20808 -0.271473,0 -0.427192,-0.17225 v 0.71795 h -0.254937 v -2.0643 h 0.232889 l 0.0124,0.16537 q 0.155718,-0.19293 0.432704,-0.19293 0.268717,0 0.424436,0.20257 0.157096,0.20257 0.157096,0.56362 z m -0.254937,-0.0289 q 0,-0.25218 -0.107487,-0.39825 -0.107487,-0.14608 -0.2949,-0.14608 -0.231511,0 -0.347266,0.20533 v 0.71245 q 0.114377,0.20395 0.350022,0.20395 0.183279,0 0.290766,-0.1447 0.108865,-0.14607 0.108865,-0.4327 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222223px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332px"
id="path201"
inkscape:connector-curvature="0" />
<path
d="m 70.053674,172.28814 q 0,-0.10335 -0.07855,-0.15985 -0.07717,-0.0579 -0.271474,-0.0992 -0.192925,-0.0413 -0.307302,-0.0992 -0.112999,-0.0579 -0.168121,-0.1378 -0.05374,-0.0799 -0.05374,-0.19017 0,-0.18328 0.15434,-0.31006 0.155718,-0.12678 0.396875,-0.12678 0.253559,0 0.410655,0.13092 0.158475,0.13091 0.158475,0.33486 h -0.256315 q 0,-0.10473 -0.08957,-0.18052 -0.08819,-0.0758 -0.223242,-0.0758 -0.139182,0 -0.21773,0.0606 -0.07855,0.0606 -0.07855,0.15847 0,0.0923 0.07304,0.13918 0.07304,0.0469 0.263205,0.0896 0.191547,0.0427 0.310059,0.10197 0.118511,0.0593 0.175011,0.14332 0.05788,0.0827 0.05788,0.20257 0,0.19981 -0.159852,0.32108 -0.159853,0.11989 -0.41479,0.11989 -0.179145,0 -0.316949,-0.0634 -0.137803,-0.0634 -0.216352,-0.17639 -0.07717,-0.11438 -0.07717,-0.24667 h 0.254937 q 0.0069,0.12816 0.101975,0.20395 0.09646,0.0744 0.253559,0.0744 0.144694,0 0.231511,-0.0579 0.08819,-0.0593 0.08819,-0.1571 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222223px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332px"
id="path203"
inkscape:connector-curvature="0" />
</g>
<rect
style="opacity:1;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.28466856;stroke-linecap:square;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.98999999"
id="rect73"
width="38.366405"
height="7.6566005"
x="70.9935"
y="253.52576"
ry="1.531322" />
<g
aria-label="Range"
style="font-style:normal;font-weight:normal;font-size:3.17499995px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
id="text133"
transform="translate(-7.9375004,10.583334)">
<path
d="m 60.694874,185.58914 h -0.353466 v 0.60875 h -0.199472 v -1.50482 h 0.498161 q 0.254248,0 0.390674,0.11576 0.137459,0.11575 0.137459,0.33693 0,0.14056 -0.07648,0.24495 -0.07545,0.10438 -0.21084,0.15606 l 0.353467,0.63872 v 0.0124 H 61.02147 Z m -0.353466,-0.16226 h 0.30489 q 0.147795,0 0.234611,-0.0765 0.08785,-0.0765 0.08785,-0.20464 0,-0.13953 -0.08371,-0.21394 -0.08268,-0.0744 -0.239779,-0.0754 h -0.303857 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.11666656px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332px"
id="path153"
inkscape:connector-curvature="0" />
<path
d="m 62.105641,186.19789 q -0.01654,-0.0331 -0.02687,-0.11782 -0.133325,0.13849 -0.318327,0.13849 -0.165364,0 -0.271818,-0.093 -0.10542,-0.0941 -0.10542,-0.23771 0,-0.17466 0.132292,-0.27078 0.133325,-0.0971 0.374137,-0.0971 h 0.186035 v -0.0879 q 0,-0.10026 -0.05994,-0.15917 -0.05994,-0.0599 -0.176734,-0.0599 -0.102319,0 -0.171565,0.0517 -0.06925,0.0517 -0.06925,0.12506 h -0.192236 q 0,-0.0837 0.05891,-0.16123 0.05994,-0.0786 0.16123,-0.12402 0.10232,-0.0455 0.224276,-0.0455 0.19327,0 0.302824,0.0971 0.109554,0.0961 0.113688,0.26562 v 0.5147 q 0,0.15399 0.03927,0.24494 v 0.0165 z m -0.317294,-0.14573 q 0.08992,0 0.170533,-0.0465 0.08062,-0.0465 0.116788,-0.12092 v -0.22944 h -0.149861 q -0.3514,0 -0.3514,0.20567 0,0.0899 0.05994,0.14056 0.05994,0.0506 0.153995,0.0506 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.11666656px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332px"
id="path155"
inkscape:connector-curvature="0" />
<path
d="m 62.749529,185.07961 0.0062,0.14056 q 0.128158,-0.16123 0.334864,-0.16123 0.3545,0 0.3576,0.39998 v 0.73897 h -0.191202 v -0.74001 q -10e-4,-0.12092 -0.05581,-0.1788 -0.05374,-0.0579 -0.168465,-0.0579 -0.09302,0 -0.163298,0.0496 -0.07028,0.0496 -0.109554,0.13022 v 0.79685 h -0.191202 v -1.11828 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.11666656px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332px"
id="path157"
inkscape:connector-curvature="0" />
<path
d="m 63.693141,185.62945 q 0,-0.26148 0.120923,-0.41548 0.120923,-0.15503 0.320394,-0.15503 0.204638,0 0.31936,0.1447 l 0.0093,-0.12403 h 0.174666 v 1.09141 q 0,0.21704 -0.129191,0.3421 -0.128158,0.12505 -0.345199,0.12505 -0.120922,0 -0.236678,-0.0517 -0.115755,-0.0517 -0.176733,-0.1416 l 0.09922,-0.11472 q 0.12299,0.15193 0.300757,0.15193 0.139526,0 0.217041,-0.0786 0.07855,-0.0785 0.07855,-0.22117 v -0.0961 q -0.114722,0.13229 -0.313159,0.13229 -0.196371,0 -0.318327,-0.15813 -0.120923,-0.15813 -0.120923,-0.43098 z m 0.192236,0.0217 q 0,0.18914 0.07751,0.29766 0.07751,0.10749 0.217041,0.10749 0.180867,0 0.265617,-0.16433 v -0.51057 q -0.08785,-0.16019 -0.26355,-0.16019 -0.139526,0 -0.218075,0.10852 -0.07855,0.10852 -0.07855,0.32142 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.11666656px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332px"
id="path159"
inkscape:connector-curvature="0" />
<path
d="m 65.389161,186.21856 q -0.227376,0 -0.370003,-0.14883 -0.142627,-0.14986 -0.142627,-0.39997 v -0.0351 q 0,-0.1664 0.06305,-0.29662 0.06408,-0.13126 0.177767,-0.20464 0.114722,-0.0744 0.248047,-0.0744 0.218074,0 0.338997,0.14366 0.120923,0.14366 0.120923,0.41135 v 0.0796 h -0.757576 q 0.0041,0.16536 0.09612,0.26768 0.09302,0.10129 0.235644,0.10129 0.101286,0 0.171566,-0.0413 0.07028,-0.0413 0.12299,-0.10956 l 0.116789,0.091 q -0.14056,0.21601 -0.42168,0.21601 z m -0.02377,-1.00252 q -0.115755,0 -0.194304,0.0848 -0.07855,0.0837 -0.09715,0.23564 h 0.560172 v -0.0145 q -0.0083,-0.14572 -0.07855,-0.22531 -0.07028,-0.0806 -0.190169,-0.0806 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.11666656px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332px"
id="path161"
inkscape:connector-curvature="0" />
</g>
<g
aria-label="Mode"
style="font-style:normal;font-weight:normal;font-size:3.17499995px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
id="text133-9"
transform="translate(-7.4083337,10.583334)">
<path
d="m 66.150136,186.5317 0.491959,1.22783 0.49196,-1.22783 h 0.257349 v 1.50481 h -0.198438 v -0.58601 l 0.0186,-0.63252 -0.494027,1.21853 H 66.56561 l -0.492993,-1.21543 0.01964,0.62942 v 0.58601 H 65.89382 v -1.50481 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.11666656px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332px"
id="path164"
inkscape:connector-curvature="0" />
<path
d="m 67.661155,187.46704 q 0,-0.16433 0.06408,-0.29559 0.06511,-0.13126 0.179834,-0.20257 0.115756,-0.0713 0.26355,-0.0713 0.22841,0 0.36897,0.15813 0.141593,0.15813 0.141593,0.42064 v 0.0134 q 0,0.1633 -0.06305,0.29352 -0.06201,0.12919 -0.1788,0.20154 -0.115756,0.0723 -0.266651,0.0723 -0.227376,0 -0.36897,-0.15813 -0.140559,-0.15812 -0.140559,-0.41857 z m 0.192236,0.0227 q 0,0.18603 0.08578,0.29869 0.08682,0.11265 0.23151,0.11265 0.145728,0 0.231511,-0.11369 0.08578,-0.11472 0.08578,-0.32039 0,-0.18397 -0.08785,-0.29766 -0.08682,-0.11472 -0.231511,-0.11472 -0.141593,0 -0.22841,0.11266 -0.08682,0.11265 -0.08682,0.32246 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.11666656px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332px"
id="path166"
inkscape:connector-curvature="0" />
<path
d="m 68.87245,187.46807 q 0,-0.25735 0.121956,-0.41341 0.121957,-0.15709 0.319361,-0.15709 0.19637,0 0.311092,0.13435 v -0.58291 h 0.191203 v 1.5875 h -0.1757 l -0.0093,-0.11989 q -0.114722,0.14056 -0.31936,0.14056 -0.194304,0 -0.317294,-0.15916 -0.121956,-0.15916 -0.121956,-0.41548 z m 0.191203,0.0217 q 0,0.19017 0.07855,0.29765 0.07855,0.10749 0.217041,0.10749 0.181901,0 0.265617,-0.1633 v -0.51366 q -0.08578,-0.15813 -0.26355,-0.15813 -0.14056,0 -0.219108,0.10852 -0.07855,0.10852 -0.07855,0.32143 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.11666656px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332px"
id="path168"
inkscape:connector-curvature="0" />
<path
d="m 70.577772,188.05718 q -0.227376,0 -0.370003,-0.14882 -0.142627,-0.14986 -0.142627,-0.39998 v -0.0351 q 0,-0.1664 0.06305,-0.29662 0.06408,-0.13126 0.177767,-0.20464 0.114722,-0.0744 0.248047,-0.0744 0.218074,0 0.338997,0.14366 0.120923,0.14366 0.120923,0.41134 v 0.0796 H 70.25635 q 0.0041,0.16537 0.09612,0.26769 0.09302,0.10128 0.235644,0.10128 0.101286,0 0.171566,-0.0413 0.07028,-0.0413 0.12299,-0.10955 l 0.116789,0.091 q -0.14056,0.216 -0.42168,0.216 z m -0.02377,-1.00252 q -0.115755,0 -0.194303,0.0847 -0.07855,0.0837 -0.09715,0.23565 h 0.560172 v -0.0145 q -0.0083,-0.14573 -0.07855,-0.22531 -0.07028,-0.0806 -0.190169,-0.0806 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.11666656px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332px"
id="path170"
inkscape:connector-curvature="0" />
</g>
<g
aria-label="Steps"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222223px;line-height:125%;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
id="text144-8"
transform="translate(5.7869344,12.700002)">
<path
d="m 64.144646,171.78929 q -0.340375,-0.0978 -0.496093,-0.23978 -0.154341,-0.14331 -0.154341,-0.35277 0,-0.23703 0.188792,-0.39137 0.190169,-0.15571 0.493337,-0.15571 0.206706,0 0.367936,0.0799 0.162609,0.0799 0.250803,0.22049 0.08957,0.14056 0.08957,0.3073 h -0.265961 q 0,-0.1819 -0.115756,-0.28525 -0.115755,-0.10473 -0.326595,-0.10473 -0.195681,0 -0.305924,0.0868 -0.108865,0.0854 -0.108865,0.2384 0,0.12265 0.103353,0.20809 0.104731,0.0841 0.354155,0.15434 0.250803,0.0703 0.391363,0.15571 0.141938,0.0841 0.209462,0.19706 0.0689,0.113 0.0689,0.26597 0,0.24391 -0.190169,0.39136 -0.19017,0.14607 -0.508496,0.14607 -0.206706,0 -0.385851,-0.0785 -0.179145,-0.0799 -0.276986,-0.21773 -0.09646,-0.1378 -0.09646,-0.31281 h 0.265961 q 0,0.1819 0.13367,0.28801 0.135047,0.10473 0.359668,0.10473 0.209461,0 0.321083,-0.0854 0.111621,-0.0854 0.111621,-0.23289 0,-0.14745 -0.103353,-0.22737 -0.103353,-0.0813 -0.374827,-0.15986 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222223px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332px"
id="path195-5"
inkscape:connector-curvature="0" />
<path
d="m 65.535087,170.83156 v 0.36104 h 0.278364 v 0.19706 h -0.278364 v 0.92467 q 0,0.0896 0.03721,0.13504 0.03721,0.0441 0.126779,0.0441 0.0441,0 0.121268,-0.0165 v 0.20671 q -0.100597,0.0276 -0.195682,0.0276 -0.170876,0 -0.257693,-0.10335 -0.08682,-0.10336 -0.08682,-0.29352 v -0.92467 h -0.271474 v -0.19706 h 0.271474 v -0.36104 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222223px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332px"
id="path197-1"
inkscape:connector-curvature="0" />
<path
d="m 66.728468,172.7112 q -0.303168,0 -0.493338,-0.19844 -0.190169,-0.19981 -0.190169,-0.5333 v -0.0468 q 0,-0.22187 0.08406,-0.3955 0.08544,-0.17501 0.237023,-0.27285 0.152962,-0.0992 0.330729,-0.0992 0.290766,0 0.451997,0.19155 0.16123,0.19155 0.16123,0.54846 v 0.10611 h -1.010102 q 0.0055,0.22048 0.128158,0.35691 0.124023,0.13505 0.314192,0.13505 0.135048,0 0.228755,-0.0551 0.09371,-0.0551 0.163986,-0.14607 l 0.155719,0.12127 q -0.187414,0.28801 -0.56224,0.28801 z m -0.0317,-1.3367 q -0.15434,0 -0.259071,0.113 -0.104731,0.11162 -0.129536,0.3142 h 0.746897 v -0.0193 q -0.01102,-0.1943 -0.104731,-0.30041 -0.09371,-0.10749 -0.253559,-0.10749 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222223px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332px"
id="path199-6"
inkscape:connector-curvature="0" />
<path
d="m 68.863049,171.95466 q 0,0.34037 -0.155718,0.54846 -0.155719,0.20808 -0.42168,0.20808 -0.271473,0 -0.427192,-0.17225 v 0.71795 h -0.254937 v -2.0643 h 0.232889 l 0.0124,0.16537 q 0.155718,-0.19293 0.432704,-0.19293 0.268717,0 0.424436,0.20257 0.157096,0.20257 0.157096,0.56362 z m -0.254937,-0.0289 q 0,-0.25218 -0.107487,-0.39825 -0.107487,-0.14608 -0.2949,-0.14608 -0.231511,0 -0.347266,0.20533 v 0.71245 q 0.114377,0.20395 0.350022,0.20395 0.183279,0 0.290766,-0.1447 0.108865,-0.14607 0.108865,-0.4327 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222223px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332px"
id="path201-6"
inkscape:connector-curvature="0" />
<path
d="m 70.053674,172.28814 q 0,-0.10335 -0.07855,-0.15985 -0.07717,-0.0579 -0.271474,-0.0992 -0.192925,-0.0413 -0.307302,-0.0992 -0.112999,-0.0579 -0.168121,-0.1378 -0.05374,-0.0799 -0.05374,-0.19017 0,-0.18328 0.15434,-0.31006 0.155718,-0.12678 0.396875,-0.12678 0.253559,0 0.410655,0.13092 0.158475,0.13091 0.158475,0.33486 h -0.256315 q 0,-0.10473 -0.08957,-0.18052 -0.08819,-0.0758 -0.223242,-0.0758 -0.139182,0 -0.21773,0.0606 -0.07855,0.0606 -0.07855,0.15847 0,0.0923 0.07304,0.13918 0.07304,0.0469 0.263205,0.0896 0.191547,0.0427 0.310059,0.10197 0.118511,0.0593 0.175011,0.14332 0.05788,0.0827 0.05788,0.20257 0,0.19981 -0.159852,0.32108 -0.159853,0.11989 -0.41479,0.11989 -0.179145,0 -0.316949,-0.0634 -0.137803,-0.0634 -0.216352,-0.17639 -0.07717,-0.11438 -0.07717,-0.24667 h 0.254937 q 0.0069,0.12816 0.101975,0.20395 0.09646,0.0744 0.253559,0.0744 0.144694,0 0.231511,-0.0579 0.08819,-0.0593 0.08819,-0.1571 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222223px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332px"
id="path203-2"
inkscape:connector-curvature="0" />
</g>
<g
transform="translate(6.8452678,10.583334)"
aria-label="Range"
style="font-style:normal;font-weight:normal;font-size:3.17499995px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
id="text133-1">
<path
inkscape:connector-curvature="0"
d="m 60.694874,185.58914 h -0.353466 v 0.60875 h -0.199472 v -1.50482 h 0.498161 q 0.254248,0 0.390674,0.11576 0.137459,0.11575 0.137459,0.33693 0,0.14056 -0.07648,0.24495 -0.07545,0.10438 -0.21084,0.15606 l 0.353467,0.63872 v 0.0124 H 61.02147 Z m -0.353466,-0.16226 h 0.30489 q 0.147795,0 0.234611,-0.0765 0.08785,-0.0765 0.08785,-0.20464 0,-0.13953 -0.08371,-0.21394 -0.08268,-0.0744 -0.239779,-0.0754 h -0.303857 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.11666656px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332px"
id="path153-9" />
<path
inkscape:connector-curvature="0"
d="m 62.105641,186.19789 q -0.01654,-0.0331 -0.02687,-0.11782 -0.133325,0.13849 -0.318327,0.13849 -0.165364,0 -0.271818,-0.093 -0.10542,-0.0941 -0.10542,-0.23771 0,-0.17466 0.132292,-0.27078 0.133325,-0.0971 0.374137,-0.0971 h 0.186035 v -0.0879 q 0,-0.10026 -0.05994,-0.15917 -0.05994,-0.0599 -0.176734,-0.0599 -0.102319,0 -0.171565,0.0517 -0.06925,0.0517 -0.06925,0.12506 h -0.192236 q 0,-0.0837 0.05891,-0.16123 0.05994,-0.0786 0.16123,-0.12402 0.10232,-0.0455 0.224276,-0.0455 0.19327,0 0.302824,0.0971 0.109554,0.0961 0.113688,0.26562 v 0.5147 q 0,0.15399 0.03927,0.24494 v 0.0165 z m -0.317294,-0.14573 q 0.08992,0 0.170533,-0.0465 0.08062,-0.0465 0.116788,-0.12092 v -0.22944 h -0.149861 q -0.3514,0 -0.3514,0.20567 0,0.0899 0.05994,0.14056 0.05994,0.0506 0.153995,0.0506 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.11666656px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332px"
id="path155-6" />
<path
inkscape:connector-curvature="0"
d="m 62.749529,185.07961 0.0062,0.14056 q 0.128158,-0.16123 0.334864,-0.16123 0.3545,0 0.3576,0.39998 v 0.73897 h -0.191202 v -0.74001 q -10e-4,-0.12092 -0.05581,-0.1788 -0.05374,-0.0579 -0.168465,-0.0579 -0.09302,0 -0.163298,0.0496 -0.07028,0.0496 -0.109554,0.13022 v 0.79685 h -0.191202 v -1.11828 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.11666656px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332px"
id="path157-4" />
<path
inkscape:connector-curvature="0"
d="m 63.693141,185.62945 q 0,-0.26148 0.120923,-0.41548 0.120923,-0.15503 0.320394,-0.15503 0.204638,0 0.31936,0.1447 l 0.0093,-0.12403 h 0.174666 v 1.09141 q 0,0.21704 -0.129191,0.3421 -0.128158,0.12505 -0.345199,0.12505 -0.120922,0 -0.236678,-0.0517 -0.115755,-0.0517 -0.176733,-0.1416 l 0.09922,-0.11472 q 0.12299,0.15193 0.300757,0.15193 0.139526,0 0.217041,-0.0786 0.07855,-0.0785 0.07855,-0.22117 v -0.0961 q -0.114722,0.13229 -0.313159,0.13229 -0.196371,0 -0.318327,-0.15813 -0.120923,-0.15813 -0.120923,-0.43098 z m 0.192236,0.0217 q 0,0.18914 0.07751,0.29766 0.07751,0.10749 0.217041,0.10749 0.180867,0 0.265617,-0.16433 v -0.51057 q -0.08785,-0.16019 -0.26355,-0.16019 -0.139526,0 -0.218075,0.10852 -0.07855,0.10852 -0.07855,0.32142 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.11666656px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332px"
id="path159-8" />
<path
inkscape:connector-curvature="0"
d="m 65.389161,186.21856 q -0.227376,0 -0.370003,-0.14883 -0.142627,-0.14986 -0.142627,-0.39997 v -0.0351 q 0,-0.1664 0.06305,-0.29662 0.06408,-0.13126 0.177767,-0.20464 0.114722,-0.0744 0.248047,-0.0744 0.218074,0 0.338997,0.14366 0.120923,0.14366 0.120923,0.41135 v 0.0796 h -0.757576 q 0.0041,0.16536 0.09612,0.26768 0.09302,0.10129 0.235644,0.10129 0.101286,0 0.171566,-0.0413 0.07028,-0.0413 0.12299,-0.10956 l 0.116789,0.091 q -0.14056,0.21601 -0.42168,0.21601 z m -0.02377,-1.00252 q -0.115755,0 -0.194304,0.0848 -0.07855,0.0837 -0.09715,0.23564 h 0.560172 v -0.0145 q -0.0083,-0.14572 -0.07855,-0.22531 -0.07028,-0.0806 -0.190169,-0.0806 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.11666656px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332px"
id="path161-0" />
</g>
<g
transform="translate(6.8452678,10.583334)"
aria-label="Mode"
style="font-style:normal;font-weight:normal;font-size:3.17499995px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
id="text133-9-8">
<path
inkscape:connector-curvature="0"
d="m 66.150136,186.5317 0.491959,1.22783 0.49196,-1.22783 h 0.257349 v 1.50481 h -0.198438 v -0.58601 l 0.0186,-0.63252 -0.494027,1.21853 H 66.56561 l -0.492993,-1.21543 0.01964,0.62942 v 0.58601 H 65.89382 v -1.50481 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.11666656px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332px"
id="path164-1" />
<path
inkscape:connector-curvature="0"
d="m 67.661155,187.46704 q 0,-0.16433 0.06408,-0.29559 0.06511,-0.13126 0.179834,-0.20257 0.115756,-0.0713 0.26355,-0.0713 0.22841,0 0.36897,0.15813 0.141593,0.15813 0.141593,0.42064 v 0.0134 q 0,0.1633 -0.06305,0.29352 -0.06201,0.12919 -0.1788,0.20154 -0.115756,0.0723 -0.266651,0.0723 -0.227376,0 -0.36897,-0.15813 -0.140559,-0.15812 -0.140559,-0.41857 z m 0.192236,0.0227 q 0,0.18603 0.08578,0.29869 0.08682,0.11265 0.23151,0.11265 0.145728,0 0.231511,-0.11369 0.08578,-0.11472 0.08578,-0.32039 0,-0.18397 -0.08785,-0.29766 -0.08682,-0.11472 -0.231511,-0.11472 -0.141593,0 -0.22841,0.11266 -0.08682,0.11265 -0.08682,0.32246 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.11666656px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332px"
id="path166-0" />
<path
inkscape:connector-curvature="0"
d="m 68.87245,187.46807 q 0,-0.25735 0.121956,-0.41341 0.121957,-0.15709 0.319361,-0.15709 0.19637,0 0.311092,0.13435 v -0.58291 h 0.191203 v 1.5875 h -0.1757 l -0.0093,-0.11989 q -0.114722,0.14056 -0.31936,0.14056 -0.194304,0 -0.317294,-0.15916 -0.121956,-0.15916 -0.121956,-0.41548 z m 0.191203,0.0217 q 0,0.19017 0.07855,0.29765 0.07855,0.10749 0.217041,0.10749 0.181901,0 0.265617,-0.1633 v -0.51366 q -0.08578,-0.15813 -0.26355,-0.15813 -0.14056,0 -0.219108,0.10852 -0.07855,0.10852 -0.07855,0.32143 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.11666656px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332px"
id="path168-2" />
<path
inkscape:connector-curvature="0"
d="m 70.577772,188.05718 q -0.227376,0 -0.370003,-0.14882 -0.142627,-0.14986 -0.142627,-0.39998 v -0.0351 q 0,-0.1664 0.06305,-0.29662 0.06408,-0.13126 0.177767,-0.20464 0.114722,-0.0744 0.248047,-0.0744 0.218074,0 0.338997,0.14366 0.120923,0.14366 0.120923,0.41134 v 0.0796 H 70.25635 q 0.0041,0.16537 0.09612,0.26769 0.09302,0.10128 0.235644,0.10128 0.101286,0 0.171566,-0.0413 0.07028,-0.0413 0.12299,-0.10955 l 0.116789,0.091 q -0.14056,0.216 -0.42168,0.216 z m -0.02377,-1.00252 q -0.115755,0 -0.194303,0.0847 -0.07855,0.0837 -0.09715,0.23565 h 0.560172 v -0.0145 q -0.0083,-0.14573 -0.07855,-0.22531 -0.07028,-0.0806 -0.190169,-0.0806 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.11666656px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332px"
id="path170-2" />
</g>
<g
aria-label="Steps"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222223px;line-height:125%;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
id="text144-9"
transform="translate(20.337672,12.700002)">
<path
d="m 64.144646,171.78929 q -0.340375,-0.0978 -0.496093,-0.23978 -0.154341,-0.14331 -0.154341,-0.35277 0,-0.23703 0.188792,-0.39137 0.190169,-0.15571 0.493337,-0.15571 0.206706,0 0.367936,0.0799 0.162609,0.0799 0.250803,0.22049 0.08957,0.14056 0.08957,0.3073 h -0.265961 q 0,-0.1819 -0.115756,-0.28525 -0.115755,-0.10473 -0.326595,-0.10473 -0.195681,0 -0.305924,0.0868 -0.108865,0.0854 -0.108865,0.2384 0,0.12265 0.103353,0.20809 0.104731,0.0841 0.354155,0.15434 0.250803,0.0703 0.391363,0.15571 0.141938,0.0841 0.209462,0.19706 0.0689,0.113 0.0689,0.26597 0,0.24391 -0.190169,0.39136 -0.19017,0.14607 -0.508496,0.14607 -0.206706,0 -0.385851,-0.0785 -0.179145,-0.0799 -0.276986,-0.21773 -0.09646,-0.1378 -0.09646,-0.31281 h 0.265961 q 0,0.1819 0.13367,0.28801 0.135047,0.10473 0.359668,0.10473 0.209461,0 0.321083,-0.0854 0.111621,-0.0854 0.111621,-0.23289 0,-0.14745 -0.103353,-0.22737 -0.103353,-0.0813 -0.374827,-0.15986 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222223px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332px"
id="path195-7"
inkscape:connector-curvature="0" />
<path
d="m 65.535087,170.83156 v 0.36104 h 0.278364 v 0.19706 h -0.278364 v 0.92467 q 0,0.0896 0.03721,0.13504 0.03721,0.0441 0.126779,0.0441 0.0441,0 0.121268,-0.0165 v 0.20671 q -0.100597,0.0276 -0.195682,0.0276 -0.170876,0 -0.257693,-0.10335 -0.08682,-0.10336 -0.08682,-0.29352 v -0.92467 h -0.271474 v -0.19706 h 0.271474 v -0.36104 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222223px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332px"
id="path197-5"
inkscape:connector-curvature="0" />
<path
d="m 66.728468,172.7112 q -0.303168,0 -0.493338,-0.19844 -0.190169,-0.19981 -0.190169,-0.5333 v -0.0468 q 0,-0.22187 0.08406,-0.3955 0.08544,-0.17501 0.237023,-0.27285 0.152962,-0.0992 0.330729,-0.0992 0.290766,0 0.451997,0.19155 0.16123,0.19155 0.16123,0.54846 v 0.10611 h -1.010102 q 0.0055,0.22048 0.128158,0.35691 0.124023,0.13505 0.314192,0.13505 0.135048,0 0.228755,-0.0551 0.09371,-0.0551 0.163986,-0.14607 l 0.155719,0.12127 q -0.187414,0.28801 -0.56224,0.28801 z m -0.0317,-1.3367 q -0.15434,0 -0.259071,0.113 -0.104731,0.11162 -0.129536,0.3142 h 0.746897 v -0.0193 q -0.01102,-0.1943 -0.104731,-0.30041 -0.09371,-0.10749 -0.253559,-0.10749 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222223px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332px"
id="path199-64"
inkscape:connector-curvature="0" />
<path
d="m 68.863049,171.95466 q 0,0.34037 -0.155718,0.54846 -0.155719,0.20808 -0.42168,0.20808 -0.271473,0 -0.427192,-0.17225 v 0.71795 h -0.254937 v -2.0643 h 0.232889 l 0.0124,0.16537 q 0.155718,-0.19293 0.432704,-0.19293 0.268717,0 0.424436,0.20257 0.157096,0.20257 0.157096,0.56362 z m -0.254937,-0.0289 q 0,-0.25218 -0.107487,-0.39825 -0.107487,-0.14608 -0.2949,-0.14608 -0.231511,0 -0.347266,0.20533 v 0.71245 q 0.114377,0.20395 0.350022,0.20395 0.183279,0 0.290766,-0.1447 0.108865,-0.14607 0.108865,-0.4327 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222223px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332px"
id="path201-63"
inkscape:connector-curvature="0" />
<path
d="m 70.053674,172.28814 q 0,-0.10335 -0.07855,-0.15985 -0.07717,-0.0579 -0.271474,-0.0992 -0.192925,-0.0413 -0.307302,-0.0992 -0.112999,-0.0579 -0.168121,-0.1378 -0.05374,-0.0799 -0.05374,-0.19017 0,-0.18328 0.15434,-0.31006 0.155718,-0.12678 0.396875,-0.12678 0.253559,0 0.410655,0.13092 0.158475,0.13091 0.158475,0.33486 h -0.256315 q 0,-0.10473 -0.08957,-0.18052 -0.08819,-0.0758 -0.223242,-0.0758 -0.139182,0 -0.21773,0.0606 -0.07855,0.0606 -0.07855,0.15847 0,0.0923 0.07304,0.13918 0.07304,0.0469 0.263205,0.0896 0.191547,0.0427 0.310059,0.10197 0.118511,0.0593 0.175011,0.14332 0.05788,0.0827 0.05788,0.20257 0,0.19981 -0.159852,0.32108 -0.159853,0.11989 -0.41479,0.11989 -0.179145,0 -0.316949,-0.0634 -0.137803,-0.0634 -0.216352,-0.17639 -0.07717,-0.11438 -0.07717,-0.24667 h 0.254937 q 0.0069,0.12816 0.101975,0.20395 0.09646,0.0744 0.253559,0.0744 0.144694,0 0.231511,-0.0579 0.08819,-0.0593 0.08819,-0.1571 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222223px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332px"
id="path203-7"
inkscape:connector-curvature="0" />
</g>
<g
transform="translate(21.396006,10.583334)"
aria-label="Range"
style="font-style:normal;font-weight:normal;font-size:3.17499995px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
id="text133-97">
<path
inkscape:connector-curvature="0"
d="m 60.694874,185.58914 h -0.353466 v 0.60875 h -0.199472 v -1.50482 h 0.498161 q 0.254248,0 0.390674,0.11576 0.137459,0.11575 0.137459,0.33693 0,0.14056 -0.07648,0.24495 -0.07545,0.10438 -0.21084,0.15606 l 0.353467,0.63872 v 0.0124 H 61.02147 Z m -0.353466,-0.16226 h 0.30489 q 0.147795,0 0.234611,-0.0765 0.08785,-0.0765 0.08785,-0.20464 0,-0.13953 -0.08371,-0.21394 -0.08268,-0.0744 -0.239779,-0.0754 h -0.303857 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.11666656px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332px"
id="path153-4" />
<path
inkscape:connector-curvature="0"
d="m 62.105641,186.19789 q -0.01654,-0.0331 -0.02687,-0.11782 -0.133325,0.13849 -0.318327,0.13849 -0.165364,0 -0.271818,-0.093 -0.10542,-0.0941 -0.10542,-0.23771 0,-0.17466 0.132292,-0.27078 0.133325,-0.0971 0.374137,-0.0971 h 0.186035 v -0.0879 q 0,-0.10026 -0.05994,-0.15917 -0.05994,-0.0599 -0.176734,-0.0599 -0.102319,0 -0.171565,0.0517 -0.06925,0.0517 -0.06925,0.12506 h -0.192236 q 0,-0.0837 0.05891,-0.16123 0.05994,-0.0786 0.16123,-0.12402 0.10232,-0.0455 0.224276,-0.0455 0.19327,0 0.302824,0.0971 0.109554,0.0961 0.113688,0.26562 v 0.5147 q 0,0.15399 0.03927,0.24494 v 0.0165 z m -0.317294,-0.14573 q 0.08992,0 0.170533,-0.0465 0.08062,-0.0465 0.116788,-0.12092 v -0.22944 h -0.149861 q -0.3514,0 -0.3514,0.20567 0,0.0899 0.05994,0.14056 0.05994,0.0506 0.153995,0.0506 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.11666656px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332px"
id="path155-9" />
<path
inkscape:connector-curvature="0"
d="m 62.749529,185.07961 0.0062,0.14056 q 0.128158,-0.16123 0.334864,-0.16123 0.3545,0 0.3576,0.39998 v 0.73897 h -0.191202 v -0.74001 q -10e-4,-0.12092 -0.05581,-0.1788 -0.05374,-0.0579 -0.168465,-0.0579 -0.09302,0 -0.163298,0.0496 -0.07028,0.0496 -0.109554,0.13022 v 0.79685 h -0.191202 v -1.11828 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.11666656px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332px"
id="path157-1" />
<path
inkscape:connector-curvature="0"
d="m 63.693141,185.62945 q 0,-0.26148 0.120923,-0.41548 0.120923,-0.15503 0.320394,-0.15503 0.204638,0 0.31936,0.1447 l 0.0093,-0.12403 h 0.174666 v 1.09141 q 0,0.21704 -0.129191,0.3421 -0.128158,0.12505 -0.345199,0.12505 -0.120922,0 -0.236678,-0.0517 -0.115755,-0.0517 -0.176733,-0.1416 l 0.09922,-0.11472 q 0.12299,0.15193 0.300757,0.15193 0.139526,0 0.217041,-0.0786 0.07855,-0.0785 0.07855,-0.22117 v -0.0961 q -0.114722,0.13229 -0.313159,0.13229 -0.196371,0 -0.318327,-0.15813 -0.120923,-0.15813 -0.120923,-0.43098 z m 0.192236,0.0217 q 0,0.18914 0.07751,0.29766 0.07751,0.10749 0.217041,0.10749 0.180867,0 0.265617,-0.16433 v -0.51057 q -0.08785,-0.16019 -0.26355,-0.16019 -0.139526,0 -0.218075,0.10852 -0.07855,0.10852 -0.07855,0.32142 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.11666656px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332px"
id="path159-7" />
<path
inkscape:connector-curvature="0"
d="m 65.389161,186.21856 q -0.227376,0 -0.370003,-0.14883 -0.142627,-0.14986 -0.142627,-0.39997 v -0.0351 q 0,-0.1664 0.06305,-0.29662 0.06408,-0.13126 0.177767,-0.20464 0.114722,-0.0744 0.248047,-0.0744 0.218074,0 0.338997,0.14366 0.120923,0.14366 0.120923,0.41135 v 0.0796 h -0.757576 q 0.0041,0.16536 0.09612,0.26768 0.09302,0.10129 0.235644,0.10129 0.101286,0 0.171566,-0.0413 0.07028,-0.0413 0.12299,-0.10956 l 0.116789,0.091 q -0.14056,0.21601 -0.42168,0.21601 z m -0.02377,-1.00252 q -0.115755,0 -0.194304,0.0848 -0.07855,0.0837 -0.09715,0.23564 h 0.560172 v -0.0145 q -0.0083,-0.14572 -0.07855,-0.22531 -0.07028,-0.0806 -0.190169,-0.0806 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.11666656px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332px"
id="path161-06" />
</g>
<g
transform="translate(21.396006,10.583334)"
aria-label="Mode"
style="font-style:normal;font-weight:normal;font-size:3.17499995px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
id="text133-9-0">
<path
inkscape:connector-curvature="0"
d="m 66.150136,186.5317 0.491959,1.22783 0.49196,-1.22783 h 0.257349 v 1.50481 h -0.198438 v -0.58601 l 0.0186,-0.63252 -0.494027,1.21853 H 66.56561 l -0.492993,-1.21543 0.01964,0.62942 v 0.58601 H 65.89382 v -1.50481 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.11666656px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332px"
id="path164-8" />
<path
inkscape:connector-curvature="0"
d="m 67.661155,187.46704 q 0,-0.16433 0.06408,-0.29559 0.06511,-0.13126 0.179834,-0.20257 0.115756,-0.0713 0.26355,-0.0713 0.22841,0 0.36897,0.15813 0.141593,0.15813 0.141593,0.42064 v 0.0134 q 0,0.1633 -0.06305,0.29352 -0.06201,0.12919 -0.1788,0.20154 -0.115756,0.0723 -0.266651,0.0723 -0.227376,0 -0.36897,-0.15813 -0.140559,-0.15812 -0.140559,-0.41857 z m 0.192236,0.0227 q 0,0.18603 0.08578,0.29869 0.08682,0.11265 0.23151,0.11265 0.145728,0 0.231511,-0.11369 0.08578,-0.11472 0.08578,-0.32039 0,-0.18397 -0.08785,-0.29766 -0.08682,-0.11472 -0.231511,-0.11472 -0.141593,0 -0.22841,0.11266 -0.08682,0.11265 -0.08682,0.32246 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.11666656px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332px"
id="path166-5" />
<path
inkscape:connector-curvature="0"
d="m 68.87245,187.46807 q 0,-0.25735 0.121956,-0.41341 0.121957,-0.15709 0.319361,-0.15709 0.19637,0 0.311092,0.13435 v -0.58291 h 0.191203 v 1.5875 h -0.1757 l -0.0093,-0.11989 q -0.114722,0.14056 -0.31936,0.14056 -0.194304,0 -0.317294,-0.15916 -0.121956,-0.15916 -0.121956,-0.41548 z m 0.191203,0.0217 q 0,0.19017 0.07855,0.29765 0.07855,0.10749 0.217041,0.10749 0.181901,0 0.265617,-0.1633 v -0.51366 q -0.08578,-0.15813 -0.26355,-0.15813 -0.14056,0 -0.219108,0.10852 -0.07855,0.10852 -0.07855,0.32143 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.11666656px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332px"
id="path168-3" />
<path
inkscape:connector-curvature="0"
d="m 70.577772,188.05718 q -0.227376,0 -0.370003,-0.14882 -0.142627,-0.14986 -0.142627,-0.39998 v -0.0351 q 0,-0.1664 0.06305,-0.29662 0.06408,-0.13126 0.177767,-0.20464 0.114722,-0.0744 0.248047,-0.0744 0.218074,0 0.338997,0.14366 0.120923,0.14366 0.120923,0.41134 v 0.0796 H 70.25635 q 0.0041,0.16537 0.09612,0.26769 0.09302,0.10128 0.235644,0.10128 0.101286,0 0.171566,-0.0413 0.07028,-0.0413 0.12299,-0.10955 l 0.116789,0.091 q -0.14056,0.216 -0.42168,0.216 z m -0.02377,-1.00252 q -0.115755,0 -0.194303,0.0847 -0.07855,0.0837 -0.09715,0.23565 h 0.560172 v -0.0145 q -0.0083,-0.14573 -0.07855,-0.22531 -0.07028,-0.0806 -0.190169,-0.0806 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.11666656px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332px"
id="path170-9" />
</g>
<g
aria-label="Steps"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222223px;line-height:125%;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
id="text144-4"
transform="translate(35.096588,12.700002)">
<path
d="m 64.144646,171.78929 q -0.340375,-0.0978 -0.496093,-0.23978 -0.154341,-0.14331 -0.154341,-0.35277 0,-0.23703 0.188792,-0.39137 0.190169,-0.15571 0.493337,-0.15571 0.206706,0 0.367936,0.0799 0.162609,0.0799 0.250803,0.22049 0.08957,0.14056 0.08957,0.3073 h -0.265961 q 0,-0.1819 -0.115756,-0.28525 -0.115755,-0.10473 -0.326595,-0.10473 -0.195681,0 -0.305924,0.0868 -0.108865,0.0854 -0.108865,0.2384 0,0.12265 0.103353,0.20809 0.104731,0.0841 0.354155,0.15434 0.250803,0.0703 0.391363,0.15571 0.141938,0.0841 0.209462,0.19706 0.0689,0.113 0.0689,0.26597 0,0.24391 -0.190169,0.39136 -0.19017,0.14607 -0.508496,0.14607 -0.206706,0 -0.385851,-0.0785 -0.179145,-0.0799 -0.276986,-0.21773 -0.09646,-0.1378 -0.09646,-0.31281 h 0.265961 q 0,0.1819 0.13367,0.28801 0.135047,0.10473 0.359668,0.10473 0.209461,0 0.321083,-0.0854 0.111621,-0.0854 0.111621,-0.23289 0,-0.14745 -0.103353,-0.22737 -0.103353,-0.0813 -0.374827,-0.15986 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222223px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332px"
id="path195-1"
inkscape:connector-curvature="0" />
<path
d="m 65.535087,170.83156 v 0.36104 h 0.278364 v 0.19706 h -0.278364 v 0.92467 q 0,0.0896 0.03721,0.13504 0.03721,0.0441 0.126779,0.0441 0.0441,0 0.121268,-0.0165 v 0.20671 q -0.100597,0.0276 -0.195682,0.0276 -0.170876,0 -0.257693,-0.10335 -0.08682,-0.10336 -0.08682,-0.29352 v -0.92467 h -0.271474 v -0.19706 h 0.271474 v -0.36104 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222223px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332px"
id="path197-54"
inkscape:connector-curvature="0" />
<path
d="m 66.728468,172.7112 q -0.303168,0 -0.493338,-0.19844 -0.190169,-0.19981 -0.190169,-0.5333 v -0.0468 q 0,-0.22187 0.08406,-0.3955 0.08544,-0.17501 0.237023,-0.27285 0.152962,-0.0992 0.330729,-0.0992 0.290766,0 0.451997,0.19155 0.16123,0.19155 0.16123,0.54846 v 0.10611 h -1.010102 q 0.0055,0.22048 0.128158,0.35691 0.124023,0.13505 0.314192,0.13505 0.135048,0 0.228755,-0.0551 0.09371,-0.0551 0.163986,-0.14607 l 0.155719,0.12127 q -0.187414,0.28801 -0.56224,0.28801 z m -0.0317,-1.3367 q -0.15434,0 -0.259071,0.113 -0.104731,0.11162 -0.129536,0.3142 h 0.746897 v -0.0193 q -0.01102,-0.1943 -0.104731,-0.30041 -0.09371,-0.10749 -0.253559,-0.10749 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222223px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332px"
id="path199-1"
inkscape:connector-curvature="0" />
<path
d="m 68.863049,171.95466 q 0,0.34037 -0.155718,0.54846 -0.155719,0.20808 -0.42168,0.20808 -0.271473,0 -0.427192,-0.17225 v 0.71795 h -0.254937 v -2.0643 h 0.232889 l 0.0124,0.16537 q 0.155718,-0.19293 0.432704,-0.19293 0.268717,0 0.424436,0.20257 0.157096,0.20257 0.157096,0.56362 z m -0.254937,-0.0289 q 0,-0.25218 -0.107487,-0.39825 -0.107487,-0.14608 -0.2949,-0.14608 -0.231511,0 -0.347266,0.20533 v 0.71245 q 0.114377,0.20395 0.350022,0.20395 0.183279,0 0.290766,-0.1447 0.108865,-0.14607 0.108865,-0.4327 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222223px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332px"
id="path201-5"
inkscape:connector-curvature="0" />
<path
d="m 70.053674,172.28814 q 0,-0.10335 -0.07855,-0.15985 -0.07717,-0.0579 -0.271474,-0.0992 -0.192925,-0.0413 -0.307302,-0.0992 -0.112999,-0.0579 -0.168121,-0.1378 -0.05374,-0.0799 -0.05374,-0.19017 0,-0.18328 0.15434,-0.31006 0.155718,-0.12678 0.396875,-0.12678 0.253559,0 0.410655,0.13092 0.158475,0.13091 0.158475,0.33486 h -0.256315 q 0,-0.10473 -0.08957,-0.18052 -0.08819,-0.0758 -0.223242,-0.0758 -0.139182,0 -0.21773,0.0606 -0.07855,0.0606 -0.07855,0.15847 0,0.0923 0.07304,0.13918 0.07304,0.0469 0.263205,0.0896 0.191547,0.0427 0.310059,0.10197 0.118511,0.0593 0.175011,0.14332 0.05788,0.0827 0.05788,0.20257 0,0.19981 -0.159852,0.32108 -0.159853,0.11989 -0.41479,0.11989 -0.179145,0 -0.316949,-0.0634 -0.137803,-0.0634 -0.216352,-0.17639 -0.07717,-0.11438 -0.07717,-0.24667 h 0.254937 q 0.0069,0.12816 0.101975,0.20395 0.09646,0.0744 0.253559,0.0744 0.144694,0 0.231511,-0.0579 0.08819,-0.0593 0.08819,-0.1571 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222223px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332px"
id="path203-5"
inkscape:connector-curvature="0" />
</g>
<g
transform="translate(35.625755,10.583334)"
aria-label="Range"
style="font-style:normal;font-weight:normal;font-size:3.17499995px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
id="text133-4">
<path
inkscape:connector-curvature="0"
d="m 60.694874,185.58914 h -0.353466 v 0.60875 h -0.199472 v -1.50482 h 0.498161 q 0.254248,0 0.390674,0.11576 0.137459,0.11575 0.137459,0.33693 0,0.14056 -0.07648,0.24495 -0.07545,0.10438 -0.21084,0.15606 l 0.353467,0.63872 v 0.0124 H 61.02147 Z m -0.353466,-0.16226 h 0.30489 q 0.147795,0 0.234611,-0.0765 0.08785,-0.0765 0.08785,-0.20464 0,-0.13953 -0.08371,-0.21394 -0.08268,-0.0744 -0.239779,-0.0754 h -0.303857 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.11666656px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332px"
id="path153-98" />
<path
inkscape:connector-curvature="0"
d="m 62.105641,186.19789 q -0.01654,-0.0331 -0.02687,-0.11782 -0.133325,0.13849 -0.318327,0.13849 -0.165364,0 -0.271818,-0.093 -0.10542,-0.0941 -0.10542,-0.23771 0,-0.17466 0.132292,-0.27078 0.133325,-0.0971 0.374137,-0.0971 h 0.186035 v -0.0879 q 0,-0.10026 -0.05994,-0.15917 -0.05994,-0.0599 -0.176734,-0.0599 -0.102319,0 -0.171565,0.0517 -0.06925,0.0517 -0.06925,0.12506 h -0.192236 q 0,-0.0837 0.05891,-0.16123 0.05994,-0.0786 0.16123,-0.12402 0.10232,-0.0455 0.224276,-0.0455 0.19327,0 0.302824,0.0971 0.109554,0.0961 0.113688,0.26562 v 0.5147 q 0,0.15399 0.03927,0.24494 v 0.0165 z m -0.317294,-0.14573 q 0.08992,0 0.170533,-0.0465 0.08062,-0.0465 0.116788,-0.12092 v -0.22944 h -0.149861 q -0.3514,0 -0.3514,0.20567 0,0.0899 0.05994,0.14056 0.05994,0.0506 0.153995,0.0506 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.11666656px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332px"
id="path155-3" />
<path
inkscape:connector-curvature="0"
d="m 62.749529,185.07961 0.0062,0.14056 q 0.128158,-0.16123 0.334864,-0.16123 0.3545,0 0.3576,0.39998 v 0.73897 h -0.191202 v -0.74001 q -10e-4,-0.12092 -0.05581,-0.1788 -0.05374,-0.0579 -0.168465,-0.0579 -0.09302,0 -0.163298,0.0496 -0.07028,0.0496 -0.109554,0.13022 v 0.79685 h -0.191202 v -1.11828 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.11666656px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332px"
id="path157-8" />
<path
inkscape:connector-curvature="0"
d="m 63.693141,185.62945 q 0,-0.26148 0.120923,-0.41548 0.120923,-0.15503 0.320394,-0.15503 0.204638,0 0.31936,0.1447 l 0.0093,-0.12403 h 0.174666 v 1.09141 q 0,0.21704 -0.129191,0.3421 -0.128158,0.12505 -0.345199,0.12505 -0.120922,0 -0.236678,-0.0517 -0.115755,-0.0517 -0.176733,-0.1416 l 0.09922,-0.11472 q 0.12299,0.15193 0.300757,0.15193 0.139526,0 0.217041,-0.0786 0.07855,-0.0785 0.07855,-0.22117 v -0.0961 q -0.114722,0.13229 -0.313159,0.13229 -0.196371,0 -0.318327,-0.15813 -0.120923,-0.15813 -0.120923,-0.43098 z m 0.192236,0.0217 q 0,0.18914 0.07751,0.29766 0.07751,0.10749 0.217041,0.10749 0.180867,0 0.265617,-0.16433 v -0.51057 q -0.08785,-0.16019 -0.26355,-0.16019 -0.139526,0 -0.218075,0.10852 -0.07855,0.10852 -0.07855,0.32142 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.11666656px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332px"
id="path159-5" />
<path
inkscape:connector-curvature="0"
d="m 65.389161,186.21856 q -0.227376,0 -0.370003,-0.14883 -0.142627,-0.14986 -0.142627,-0.39997 v -0.0351 q 0,-0.1664 0.06305,-0.29662 0.06408,-0.13126 0.177767,-0.20464 0.114722,-0.0744 0.248047,-0.0744 0.218074,0 0.338997,0.14366 0.120923,0.14366 0.120923,0.41135 v 0.0796 h -0.757576 q 0.0041,0.16536 0.09612,0.26768 0.09302,0.10129 0.235644,0.10129 0.101286,0 0.171566,-0.0413 0.07028,-0.0413 0.12299,-0.10956 l 0.116789,0.091 q -0.14056,0.21601 -0.42168,0.21601 z m -0.02377,-1.00252 q -0.115755,0 -0.194304,0.0848 -0.07855,0.0837 -0.09715,0.23564 h 0.560172 v -0.0145 q -0.0083,-0.14572 -0.07855,-0.22531 -0.07028,-0.0806 -0.190169,-0.0806 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.11666656px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332px"
id="path161-2" />
</g>
<g
transform="translate(36.154922,10.583334)"
aria-label="Mode"
style="font-style:normal;font-weight:normal;font-size:3.17499995px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
id="text133-9-2">
<path
inkscape:connector-curvature="0"
d="m 66.150136,186.5317 0.491959,1.22783 0.49196,-1.22783 h 0.257349 v 1.50481 h -0.198438 v -0.58601 l 0.0186,-0.63252 -0.494027,1.21853 H 66.56561 l -0.492993,-1.21543 0.01964,0.62942 v 0.58601 H 65.89382 v -1.50481 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.11666656px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332px"
id="path164-2" />
<path
inkscape:connector-curvature="0"
d="m 67.661155,187.46704 q 0,-0.16433 0.06408,-0.29559 0.06511,-0.13126 0.179834,-0.20257 0.115756,-0.0713 0.26355,-0.0713 0.22841,0 0.36897,0.15813 0.141593,0.15813 0.141593,0.42064 v 0.0134 q 0,0.1633 -0.06305,0.29352 -0.06201,0.12919 -0.1788,0.20154 -0.115756,0.0723 -0.266651,0.0723 -0.227376,0 -0.36897,-0.15813 -0.140559,-0.15812 -0.140559,-0.41857 z m 0.192236,0.0227 q 0,0.18603 0.08578,0.29869 0.08682,0.11265 0.23151,0.11265 0.145728,0 0.231511,-0.11369 0.08578,-0.11472 0.08578,-0.32039 0,-0.18397 -0.08785,-0.29766 -0.08682,-0.11472 -0.231511,-0.11472 -0.141593,0 -0.22841,0.11266 -0.08682,0.11265 -0.08682,0.32246 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.11666656px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332px"
id="path166-7" />
<path
inkscape:connector-curvature="0"
d="m 68.87245,187.46807 q 0,-0.25735 0.121956,-0.41341 0.121957,-0.15709 0.319361,-0.15709 0.19637,0 0.311092,0.13435 v -0.58291 h 0.191203 v 1.5875 h -0.1757 l -0.0093,-0.11989 q -0.114722,0.14056 -0.31936,0.14056 -0.194304,0 -0.317294,-0.15916 -0.121956,-0.15916 -0.121956,-0.41548 z m 0.191203,0.0217 q 0,0.19017 0.07855,0.29765 0.07855,0.10749 0.217041,0.10749 0.181901,0 0.265617,-0.1633 v -0.51366 q -0.08578,-0.15813 -0.26355,-0.15813 -0.14056,0 -0.219108,0.10852 -0.07855,0.10852 -0.07855,0.32143 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.11666656px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332px"
id="path168-0" />
<path
inkscape:connector-curvature="0"
d="m 70.577772,188.05718 q -0.227376,0 -0.370003,-0.14882 -0.142627,-0.14986 -0.142627,-0.39998 v -0.0351 q 0,-0.1664 0.06305,-0.29662 0.06408,-0.13126 0.177767,-0.20464 0.114722,-0.0744 0.248047,-0.0744 0.218074,0 0.338997,0.14366 0.120923,0.14366 0.120923,0.41134 v 0.0796 H 70.25635 q 0.0041,0.16537 0.09612,0.26769 0.09302,0.10128 0.235644,0.10128 0.101286,0 0.171566,-0.0413 0.07028,-0.0413 0.12299,-0.10955 l 0.116789,0.091 q -0.14056,0.216 -0.42168,0.216 z m -0.02377,-1.00252 q -0.115755,0 -0.194303,0.0847 -0.07855,0.0837 -0.09715,0.23565 h 0.560172 v -0.0145 q -0.0083,-0.14573 -0.07855,-0.22531 -0.07028,-0.0806 -0.190169,-0.0806 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.11666656px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332px"
id="path170-3" />
</g>
<path
inkscape:connector-curvature="0"
id="path10966"
d="m 37.533103,180.9842 c 0.250146,0 0.418348,-0.0776 0.564986,-0.20702 0.02156,-0.0216 0.04313,-0.0561 0.04313,-0.0992 0,-0.0647 -0.06038,-0.12507 -0.129387,-0.12507 -0.0345,0 -0.06038,0.0129 -0.08194,0.0302 -0.112135,0.0949 -0.22427,0.15095 -0.383846,0.15095 -0.297588,0 -0.513231,-0.24583 -0.513231,-0.54773 v -0.004 c 0,-0.3019 0.215643,-0.54773 0.513231,-0.54773 0.146638,0 0.258773,0.0561 0.366594,0.14232 0.01725,0.0129 0.04313,0.0259 0.08194,0.0259 0.07332,0 0.133699,-0.0604 0.133699,-0.1337 0,-0.0474 -0.02157,-0.0863 -0.05175,-0.10782 -0.133699,-0.10351 -0.293275,-0.17683 -0.530483,-0.17683 -0.470103,0 -0.797881,0.36228 -0.797881,0.80219 v 0.004 c 0,0.44422 0.336404,0.79357 0.784943,0.79357 z m 0,0"
style="display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.20523821" />
<path
inkscape:connector-curvature="0"
id="path10970"
d="m 38.499826,180.82031 c 0,0.0776 0.06038,0.13801 0.138012,0.13801 h 0.832384 c 0.06901,0 0.125073,-0.0561 0.125073,-0.12507 0,-0.069 -0.05607,-0.12076 -0.125073,-0.12076 h -0.698685 v -1.17742 c 0,-0.0733 -0.06038,-0.1337 -0.133699,-0.1337 -0.07763,0 -0.138012,0.0604 -0.138012,0.1337 z m 0,0"
style="display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.20523821" />
<path
inkscape:connector-curvature="0"
id="path10962"
d="m 40.570847,180.9842 c 0.474416,0 0.81082,-0.36228 0.81082,-0.79788 v -0.004 c 0,-0.4356 -0.332091,-0.79788 -0.806507,-0.79788 -0.474416,0 -0.81082,0.36659 -0.81082,0.80219 v 0.004 c 0,0.4356 0.332091,0.79357 0.806507,0.79357 z m 0.0043,-0.25015 c -0.306214,0 -0.52617,-0.25015 -0.52617,-0.54773 v -0.004 c 0,-0.3019 0.215643,-0.54773 0.521857,-0.54773 0.306214,0 0.526171,0.25014 0.526171,0.55204 v 0.004 c 0,0.29759 -0.215644,0.54342 -0.521858,0.54342 z m 0,0"
style="display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.20523821" />
<path
inkscape:connector-curvature="0"
id="path10954"
d="m 42.469083,180.9842 c 0.250147,0 0.418349,-0.0776 0.564986,-0.20702 0.02157,-0.0216 0.04313,-0.0561 0.04313,-0.0992 0,-0.0647 -0.06038,-0.12507 -0.129386,-0.12507 -0.0345,0 -0.06038,0.0129 -0.08195,0.0302 -0.112134,0.0949 -0.224269,0.15095 -0.383845,0.15095 -0.297588,0 -0.513232,-0.24583 -0.513232,-0.54773 v -0.004 c 0,-0.3019 0.215644,-0.54773 0.513232,-0.54773 0.146637,0 0.258772,0.0561 0.366594,0.14232 0.01725,0.0129 0.04313,0.0259 0.08194,0.0259 0.07332,0 0.133699,-0.0604 0.133699,-0.1337 0,-0.0474 -0.02157,-0.0863 -0.05175,-0.10782 -0.133699,-0.10351 -0.293275,-0.17683 -0.530483,-0.17683 -0.470103,0 -0.797882,0.36228 -0.797882,0.80219 v 0.004 c 0,0.44422 0.336404,0.79357 0.784943,0.79357 z m 0,0"
style="display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.20523821" />
<path
inkscape:connector-curvature="0"
id="path10958"
d="m 43.435773,180.83325 c 0,0.0776 0.06038,0.13801 0.138012,0.13801 0.07332,0 0.133699,-0.0604 0.133699,-0.13801 v -0.31916 l 0.250146,-0.24152 0.500294,0.634 c 0.02588,0.0345 0.06038,0.0647 0.112134,0.0647 0.07763,0 0.138012,-0.0604 0.138012,-0.1337 0,-0.0431 -0.01725,-0.069 -0.03882,-0.0992 l -0.521857,-0.64693 0.483042,-0.46147 c 0.03019,-0.0302 0.04744,-0.0604 0.04744,-0.10351 0,-0.0647 -0.04744,-0.12508 -0.125073,-0.12508 -0.04744,0 -0.08194,0.0172 -0.112135,0.0518 l -0.733188,0.7375 v -0.65556 c 0,-0.0733 -0.06038,-0.1337 -0.133699,-0.1337 -0.07763,0 -0.138012,0.0604 -0.138012,0.1337 z m 0,0"
style="display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.20523821" />
<path
inkscape:connector-curvature="0"
id="path10846"
d="m 38.701205,190.94147 c 0,0.0604 0.05175,0.10782 0.112134,0.10782 0.06038,0 0.112135,-0.0474 0.112135,-0.10782 v -0.34072 h 0.276024 l 0.306214,0.39247 c 0.02588,0.0345 0.05607,0.0561 0.107822,0.0561 0.05175,0 0.103509,-0.0388 0.103509,-0.10351 0,-0.0345 -0.01294,-0.0561 -0.0345,-0.082 l -0.241521,-0.3019 c 0.168202,-0.0561 0.284649,-0.17682 0.284649,-0.37522 v -0.004 c 0,-0.11214 -0.0345,-0.20271 -0.103509,-0.27171 -0.07763,-0.0776 -0.202705,-0.12507 -0.362281,-0.12507 h -0.448539 c -0.06038,0 -0.112134,0.0474 -0.112134,0.11213 z m 0.224269,-0.5348 v -0.42266 h 0.319153 c 0.163889,0 0.258772,0.0733 0.258772,0.21133 0,0.12939 -0.0992,0.21133 -0.258772,0.21133 z m 0,0"
style="display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.20523821" />
<path
inkscape:connector-curvature="0"
id="path10850"
d="m 40.575147,191.06223 c 0.327779,0 0.539109,-0.18977 0.539109,-0.56499 v -0.61243 c 0,-0.0604 -0.04744,-0.10782 -0.107821,-0.10782 -0.06469,0 -0.112135,0.0474 -0.112135,0.10782 v 0.62106 c 0,0.23289 -0.120761,0.34934 -0.31484,0.34934 -0.198392,0 -0.319152,-0.12507 -0.319152,-0.35797 v -0.61243 c 0,-0.0604 -0.04744,-0.10782 -0.107822,-0.10782 -0.06469,0 -0.112135,0.0474 -0.112135,0.10782 v 0.62106 c 0,0.36659 0.207018,0.55636 0.534796,0.55636 z m 0,0"
style="display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.20523821" />
<path
inkscape:connector-curvature="0"
id="path10842"
d="m 41.485736,190.94147 c 0,0.0604 0.05175,0.10782 0.112135,0.10782 0.06038,0 0.107821,-0.0474 0.107821,-0.10782 v -0.79788 l 0.646931,0.83669 c 0.03019,0.0388 0.06038,0.069 0.112135,0.069 h 0.0086 c 0.06038,0 0.107822,-0.0518 0.107822,-0.11214 v -1.05234 c 0,-0.0604 -0.04744,-0.10782 -0.107822,-0.10782 -0.06038,0 -0.107821,0.0474 -0.107821,0.10782 v 0.77201 l -0.629679,-0.81514 c -0.03019,-0.0388 -0.06038,-0.0647 -0.112135,-0.0647 h -0.02588 c -0.06038,0 -0.112135,0.0518 -0.112135,0.11214 z m 0,0"
style="display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.20523821" />
<path
inkscape:connector-curvature="0"
id="path10838"
d="m 37.863856,200.48624 c 0,0.0604 0.05175,0.10782 0.112135,0.10782 0.06038,0 0.112134,-0.0474 0.112134,-0.10782 v -0.34072 h 0.276024 l 0.306214,0.39247 c 0.02588,0.0345 0.05607,0.0561 0.107822,0.0561 0.05175,0 0.103509,-0.0388 0.103509,-0.10351 0,-0.0345 -0.01294,-0.0561 -0.0345,-0.082 l -0.241521,-0.3019 c 0.168202,-0.0561 0.28465,-0.17682 0.28465,-0.37522 v -0.004 c 0,-0.11214 -0.0345,-0.20271 -0.103509,-0.27171 -0.07763,-0.0776 -0.202705,-0.12507 -0.362282,-0.12507 h -0.448541 c -0.06038,0 -0.112135,0.0474 -0.112135,0.11213 z m 0.224269,-0.5348 v -0.42266 h 0.319153 c 0.163889,0 0.258772,0.0733 0.258772,0.21133 0,0.12939 -0.0992,0.21133 -0.258772,0.21133 z m 0,0"
style="display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.20523821" />
<path
inkscape:connector-curvature="0"
id="path10830"
d="m 39.3365,200.58543 h 0.741815 c 0.05175,0 0.09919,-0.0431 0.09919,-0.0992 0,-0.0518 -0.04744,-0.0992 -0.09919,-0.0992 h -0.629681 v -0.3364 h 0.539109 c 0.05175,0 0.0992,-0.0431 0.0992,-0.0949 0,-0.0561 -0.04744,-0.10351 -0.0992,-0.10351 h -0.539109 v -0.32346 h 0.621055 c 0.05175,0 0.09488,-0.0431 0.09488,-0.0992 0,-0.0561 -0.04313,-0.0992 -0.09488,-0.0992 H 39.3365 c -0.06038,0 -0.112135,0.0474 -0.112135,0.11213 v 1.03078 c 0,0.0647 0.05175,0.11213 0.112135,0.11213 z m 0,0"
style="display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.20523821" />
<path
inkscape:connector-curvature="0"
id="path10834"
d="m 40.920168,200.60268 c 0.267398,0 0.448538,-0.13801 0.448538,-0.37522 v -0.004 c 0,-0.20702 -0.1337,-0.3019 -0.401098,-0.36659 -0.241521,-0.0561 -0.297587,-0.0992 -0.297587,-0.1984 0,-0.0863 0.07332,-0.15095 0.202704,-0.15095 0.0992,0 0.19408,0.0302 0.288964,0.0949 0.01725,0.0129 0.0345,0.0172 0.05607,0.0172 0.06038,0 0.107823,-0.0474 0.107823,-0.10351 0,-0.0431 -0.02586,-0.0733 -0.05175,-0.0863 -0.112134,-0.0776 -0.237209,-0.11645 -0.396784,-0.11645 -0.250146,0 -0.426975,0.14664 -0.426975,0.36228 v 0.004 c 0,0.23289 0.146637,0.31053 0.414035,0.37522 0.237209,0.0517 0.28465,0.10351 0.28465,0.18977 v 0.004 c 0,0.0949 -0.08626,0.15958 -0.219956,0.15958 -0.138011,0 -0.250146,-0.0474 -0.353655,-0.12939 -0.01295,-0.0129 -0.0345,-0.0216 -0.06469,-0.0216 -0.05607,0 -0.103509,0.0474 -0.103509,0.10351 0,0.0345 0.01725,0.0647 0.04313,0.0863 0.138011,0.10351 0.301901,0.15526 0.470104,0.15526 z m 0,0"
style="display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.20523821" />
<path
inkscape:connector-curvature="0"
id="path10826"
d="m 41.802387,200.58543 h 0.741814 c 0.05175,0 0.09919,-0.0431 0.09919,-0.0992 0,-0.0518 -0.04744,-0.0992 -0.09919,-0.0992 h -0.62968 v -0.3364 h 0.539108 c 0.05175,0 0.0992,-0.0431 0.0992,-0.0949 0,-0.0561 -0.04744,-0.10351 -0.0992,-0.10351 h -0.539108 v -0.32346 h 0.621054 c 0.05175,0 0.09488,-0.0431 0.09488,-0.0992 0,-0.0561 -0.04313,-0.0992 -0.09488,-0.0992 h -0.733188 c -0.06038,0 -0.112135,0.0474 -0.112135,0.11213 v 1.03078 c 0,0.0647 0.05175,0.11213 0.112135,0.11213 z m 0,0"
style="display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.20523821" />
<path
inkscape:connector-curvature="0"
id="path10822"
d="m 43.273005,200.48624 c 0,0.0604 0.05175,0.10782 0.112136,0.10782 0.06038,0 0.112133,-0.0474 0.112133,-0.10782 v -0.95315 h 0.306215 c 0.05607,0 0.0992,-0.0474 0.0992,-0.0992 0,-0.0561 -0.04313,-0.10351 -0.0992,-0.10351 h -0.836696 c -0.05607,0 -0.0992,0.0474 -0.0992,0.10351 0,0.0517 0.04313,0.0992 0.0992,0.0992 h 0.306212 z m 0,0"
style="display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.20523821" />
<g
aria-label="Clock In"
style="font-style:normal;font-weight:normal;font-size:3.17499995px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
id="text1023">
<path
d="m 44.858609,251.46376 q -0.03256,0.27853 -0.206189,0.43046 -0.172427,0.15072 -0.459403,0.15072 -0.311092,0 -0.499195,-0.22307 -0.186896,-0.22307 -0.186896,-0.59686 v -0.16881 q 0,-0.24477 0.08682,-0.43046 0.08802,-0.18569 0.248392,-0.28457 0.160369,-0.10008 0.371381,-0.10008 0.279742,0 0.448551,0.15675 0.16881,0.15555 0.196543,0.43167 h -0.232716 q -0.03014,-0.2098 -0.13143,-0.30385 -0.10008,-0.094 -0.280948,-0.094 -0.221864,0 -0.348471,0.16398 -0.125402,0.16399 -0.125402,0.46664 v 0.17002 q 0,0.28577 0.119373,0.45458 0.119372,0.16881 0.334002,0.16881 0.192925,0 0.295417,-0.0868 0.103697,-0.088 0.137459,-0.30506 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.46944451px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332px"
id="path1044" />
<path
d="m 45.380713,252.02083 h -0.22307 v -1.85209 h 0.22307 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.46944451px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332px"
id="path1046" />
<path
d="m 45.677336,251.35644 q 0,-0.19172 0.07476,-0.34485 0.07596,-0.15314 0.209806,-0.23634 0.135048,-0.0832 0.307475,-0.0832 0.266478,0 0.430464,0.18449 0.165193,0.18448 0.165193,0.49075 v 0.0157 q 0,0.19051 -0.07355,0.34244 -0.07235,0.15072 -0.208601,0.23513 -0.135047,0.0844 -0.311092,0.0844 -0.265272,0 -0.430464,-0.18448 -0.163987,-0.18449 -0.163987,-0.48834 z m 0.224276,0.0265 q 0,0.21704 0.10008,0.34847 0.101286,0.13143 0.270095,0.13143 0.170016,0 0.270096,-0.13264 0.10008,-0.13384 0.10008,-0.37379 0,-0.21463 -0.102492,-0.34726 -0.101286,-0.13385 -0.270095,-0.13385 -0.165193,0 -0.266478,0.13143 -0.101286,0.13143 -0.101286,0.37621 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.46944451px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332px"
id="path1048" />
<path
d="m 47.668085,251.86287 q 0.119372,0 0.2086,-0.0724 0.08923,-0.0723 0.09887,-0.18086 h 0.211012 q -0.006,0.11213 -0.07717,0.21342 -0.07114,0.10129 -0.190513,0.16157 -0.118167,0.0603 -0.250803,0.0603 -0.266478,0 -0.424436,-0.17725 -0.156752,-0.17845 -0.156752,-0.48713 v -0.0374 q 0,-0.19052 0.06994,-0.33883 0.06994,-0.14831 0.20016,-0.2303 0.13143,-0.082 0.309886,-0.082 0.219453,0 0.364147,0.13144 0.145899,0.13143 0.155546,0.34123 H 47.97556 q -0.0096,-0.12661 -0.09646,-0.20739 -0.08561,-0.082 -0.212218,-0.082 -0.170016,0 -0.264067,0.12299 -0.09284,0.12179 -0.09284,0.3533 v 0.0422 q 0,0.22548 0.09284,0.34727 0.09285,0.12178 0.265273,0.12178 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.46944451px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332px"
id="path1050" />
<path
d="m 48.801521,251.41673 -0.139871,0.1459 v 0.4582 h -0.22307 v -1.85209 h 0.22307 v 1.12018 l 0.119373,-0.14349 0.406349,-0.42926 h 0.271301 l -0.507635,0.54501 0.566718,0.75965 h -0.261655 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.46944451px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332px"
id="path1052" />
<path
d="m 50.587286,252.02083 h -0.23151 v -1.75562 h 0.23151 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.46944451px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332px"
id="path1054" />
<path
d="m 51.185355,250.71617 0.0072,0.16399 q 0.149517,-0.18811 0.390674,-0.18811 0.413583,0 0.417201,0.46664 v 0.86214 h -0.22307 v -0.86334 q -0.0012,-0.14108 -0.06511,-0.2086 -0.0627,-0.0675 -0.196543,-0.0675 -0.108521,0 -0.190514,0.0579 -0.08199,0.0579 -0.127813,0.15193 v 0.92966 h -0.22307 v -1.30466 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.46944451px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332px"
id="path1056" />
</g>
<g
aria-label="Out"
style="font-style:normal;font-weight:normal;font-size:3.17499995px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
id="text1027">
<path
d="m 90.426066,251.19969 q 0,0.25804 -0.08682,0.45096 -0.08682,0.19172 -0.245979,0.29301 -0.159164,0.10128 -0.371382,0.10128 -0.207395,0 -0.367764,-0.10128 -0.160369,-0.10249 -0.249597,-0.2906 -0.08802,-0.1893 -0.09043,-0.4377 v -0.1266 q 0,-0.25322 0.08802,-0.44735 0.08802,-0.19413 0.248391,-0.29662 0.161575,-0.1037 0.36897,-0.1037 0.211012,0 0.371381,0.10249 0.161575,0.10129 0.248391,0.29542 0.08682,0.19293 0.08682,0.44976 z m -0.230305,-0.11334 q 0,-0.3123 -0.125401,-0.4787 -0.125402,-0.1676 -0.350883,-0.1676 -0.219453,0 -0.34606,0.1676 -0.125402,0.1664 -0.129019,0.46302 v 0.12902 q 0,0.30265 0.126607,0.47628 0.127813,0.17243 0.350883,0.17243 0.224276,0 0.347266,-0.16278 0.12299,-0.16399 0.126607,-0.46905 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.46944451px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332px"
id="path1037" />
<path
d="m 91.543827,251.89181 q -0.130225,0.15313 -0.382233,0.15313 -0.208601,0 -0.318327,-0.12057 -0.108521,-0.12179 -0.109726,-0.35933 v -0.84887 h 0.223069 v 0.84284 q 0,0.29663 0.241157,0.29663 0.255626,0 0.340031,-0.19052 v -0.94895 h 0.22307 v 1.30466 H 91.54865 Z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.46944451px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332px"
id="path1039" />
<path
d="m 92.401139,250.40026 v 0.31591 h 0.243568 v 0.17243 h -0.243568 v 0.80908 q 0,0.0784 0.03256,0.11817 0.03256,0.0386 0.110932,0.0386 0.03858,0 0.106109,-0.0145 v 0.18087 q -0.08802,0.0241 -0.171221,0.0241 -0.149517,0 -0.225482,-0.0904 -0.07596,-0.0904 -0.07596,-0.25683 V 250.8886 H 91.94053 v -0.17243 h 0.237539 v -0.31591 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.46944451px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332px"
id="path1041" />
</g>
<path
style="fill:none;stroke:#000000;stroke-width:0.10532083;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1"
d="M 31.359782,251.42663 H 41.88933"
id="path1029"
inkscape:connector-curvature="0" />
<path
inkscape:connector-curvature="0"
id="path1031"
d="m 93.48308,251.42663 h 15.875"
style="fill:none;stroke:#000000;stroke-width:0.12931989;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1" />
<g
aria-label="Quad Sequencer"
style="font-style:normal;font-weight:normal;font-size:3.17499995px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
id="text1035">
<path
d="m 57.24848,164.89701 q 0,0.42168 -0.136426,0.73381 -0.136426,0.31006 -0.378272,0.49816 l 0.500228,0.39274 -0.394808,0.34933 -0.640787,-0.51469 q -0.109555,0.0186 -0.227377,0.0186 -0.374137,0 -0.667659,-0.17983 -0.293522,-0.17984 -0.454753,-0.51263 -0.16123,-0.33487 -0.163297,-0.76895 v -0.14883 q 0,-0.44442 0.159163,-0.78135 0.161231,-0.33899 0.452686,-0.51883 0.293522,-0.1819 0.669726,-0.1819 0.376205,0 0.66766,0.1819 0.293522,0.17984 0.452685,0.51883 0.161231,0.33693 0.161231,0.77928 z m -0.628386,-0.13642 q 0,-0.47336 -0.169499,-0.71934 -0.169498,-0.24598 -0.483691,-0.24598 -0.312126,0 -0.481624,0.24391 -0.169499,0.24185 -0.171566,0.71107 v 0.14676 q 0,0.46096 0.169499,0.71521 0.169498,0.25424 0.487825,0.25424 0.312126,0 0.479557,-0.24391 0.167432,-0.24598 0.169499,-0.7152 z"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.23333311px;font-family:Roboto;-inkscape-font-specification:'Roboto, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332px"
id="path1059" />
<path
d="m 59.007545,166.10624 q -0.221175,0.26872 -0.611849,0.26872 -0.359668,0 -0.549837,-0.20671 -0.188102,-0.2067 -0.192236,-0.60564 v -1.46555 h 0.597379 v 1.44488 q 0,0.34933 0.318327,0.34933 0.303858,0 0.417546,-0.21084 v -1.58337 h 0.599446 v 2.23656 h -0.562239 z"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.23333311px;font-family:Roboto;-inkscape-font-specification:'Roboto, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332px"
id="path1061" />
<path
d="m 61.337118,166.33362 q -0.04134,-0.0806 -0.05994,-0.20051 -0.217041,0.24185 -0.564307,0.24185 -0.328662,0 -0.545703,-0.19017 -0.214974,-0.19017 -0.214974,-0.47956 0,-0.35553 0.262516,-0.5457 0.264584,-0.19017 0.762745,-0.19224 h 0.274918 v -0.12815 q 0,-0.15503 -0.08062,-0.24805 -0.07855,-0.093 -0.250114,-0.093 -0.150895,0 -0.237712,0.0724 -0.08475,0.0724 -0.08475,0.19844 H 60.0018 q 0,-0.19431 0.119889,-0.35967 0.119889,-0.16537 0.338997,-0.25838 0.219108,-0.0951 0.49196,-0.0951 0.413411,0 0.655257,0.20877 0.243913,0.20671 0.243913,0.58291 v 0.96945 q 0.0021,0.31833 0.08888,0.48163 v 0.0351 z m -0.494026,-0.41548 q 0.132291,0 0.243913,-0.0579 0.111621,-0.0599 0.165364,-0.15916 v -0.38447 h -0.223242 q -0.448551,0 -0.47749,0.31005 l -0.0021,0.0351 q 0,0.11163 0.07855,0.18397 0.07855,0.0724 0.214974,0.0724 z"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.23333311px;font-family:Roboto;-inkscape-font-specification:'Roboto, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332px"
id="path1063" />
<path
d="m 62.221819,165.1988 q 0,-0.52296 0.233578,-0.83302 0.235644,-0.31006 0.642854,-0.31006 0.326595,0 0.539502,0.24391 v -1.14101 H 64.2372 v 3.175 h -0.539502 l -0.02894,-0.23771 q -0.223242,0.27905 -0.574642,0.27905 -0.394808,0 -0.634586,-0.31006 -0.237712,-0.31212 -0.237712,-0.8661 z m 0.59738,0.0434 q 0,0.31419 0.109554,0.48163 0.109554,0.16743 0.318327,0.16743 0.276985,0 0.390673,-0.23358 v -0.88263 q -0.111621,-0.23358 -0.386539,-0.23358 -0.432015,0 -0.432015,0.70073 z"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.23333311px;font-family:Roboto;-inkscape-font-specification:'Roboto, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332px"
id="path1065" />
<path
d="m 67.362591,165.544 q 0,-0.1757 -0.124024,-0.26872 -0.124023,-0.0951 -0.446484,-0.19843 -0.322461,-0.10542 -0.510563,-0.20671 -0.51263,-0.27698 -0.51263,-0.74621 0,-0.24391 0.136425,-0.43408 0.138493,-0.19223 0.394808,-0.29972 0.258382,-0.10749 0.578776,-0.10749 0.322461,0 0.574642,0.11782 0.252181,0.11576 0.390674,0.32867 0.14056,0.2129 0.14056,0.48369 h -0.620117 q 0,-0.20671 -0.130225,-0.3204 -0.130224,-0.11575 -0.365869,-0.11575 -0.227376,0 -0.353467,0.0971 -0.12609,0.0951 -0.12609,0.25218 0,0.14676 0.146761,0.24598 0.148828,0.0992 0.436149,0.18604 0.529167,0.15916 0.771012,0.3948 0.241846,0.23565 0.241846,0.58705 0,0.39067 -0.295589,0.61391 -0.295589,0.22118 -0.795817,0.22118 -0.347266,0 -0.63252,-0.12609 -0.285254,-0.12816 -0.436149,-0.34933 -0.148828,-0.22118 -0.148828,-0.51263 h 0.622184 q 0,0.49816 0.595313,0.49816 0.221175,0 0.345198,-0.0889 0.124024,-0.0909 0.124024,-0.25218 z"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.23333311px;font-family:Roboto;-inkscape-font-specification:'Roboto, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332px"
id="path1067" />
<path
d="m 69.396574,166.37496 q -0.491959,0 -0.802018,-0.30179 -0.307992,-0.30179 -0.307992,-0.80409 v -0.0579 q 0,-0.33693 0.130225,-0.60152 0.130225,-0.26665 0.367936,-0.40927 0.239779,-0.1447 0.545703,-0.1447 0.458887,0 0.721403,0.28939 0.264584,0.28939 0.264584,0.82062 v 0.24391 h -1.424203 q 0.02894,0.21911 0.173633,0.3514 0.146761,0.13229 0.370003,0.13229 0.345199,0 0.539502,-0.25011 l 0.293522,0.32866 q -0.134358,0.19017 -0.363802,0.29766 -0.229443,0.10542 -0.508496,0.10542 z m -0.06821,-1.83555 q -0.177767,0 -0.289388,0.11989 -0.109554,0.11989 -0.14056,0.34313 h 0.830957 v -0.0475 q -0.0041,-0.19844 -0.107487,-0.30592 -0.103352,-0.10956 -0.293522,-0.10956 z"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.23333311px;font-family:Roboto;-inkscape-font-specification:'Roboto, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332px"
id="path1069" />
<path
d="m 70.564462,165.19467 q 0,-0.5271 0.233577,-0.83302 0.235644,-0.30593 0.644922,-0.30593 0.359668,0 0.572575,0.27492 l 0.03927,-0.23358 h 0.525032 v 3.09645 h -0.599446 v -1.05213 q -0.206706,0.23358 -0.541569,0.23358 -0.398942,0 -0.636654,-0.31006 -0.237711,-0.31006 -0.237711,-0.87023 z m 0.597379,0.0434 q 0,0.32039 0.111621,0.48782 0.113688,0.16743 0.318327,0.16743 0.274919,0 0.388607,-0.2191 v -0.92398 q -0.111621,-0.21084 -0.384473,-0.21084 -0.206706,0 -0.320394,0.16743 -0.113688,0.16744 -0.113688,0.53124 z"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.23333311px;font-family:Roboto;-inkscape-font-specification:'Roboto, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332px"
id="path1071" />
<path
d="m 74.386451,166.10624 q -0.221175,0.26872 -0.611849,0.26872 -0.359668,0 -0.549837,-0.20671 -0.188102,-0.2067 -0.192237,-0.60564 v -1.46555 h 0.59738 v 1.44488 q 0,0.34933 0.318327,0.34933 0.303857,0 0.417545,-0.21084 v -1.58337 h 0.599447 v 2.23656 h -0.56224 z"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.23333311px;font-family:Roboto;-inkscape-font-specification:'Roboto, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332px"
id="path1073" />
<path
d="m 76.449374,166.37496 q -0.491959,0 -0.802018,-0.30179 -0.307991,-0.30179 -0.307991,-0.80409 v -0.0579 q 0,-0.33693 0.130224,-0.60152 0.130225,-0.26665 0.367936,-0.40927 0.239779,-0.1447 0.545703,-0.1447 0.458887,0 0.721403,0.28939 0.264584,0.28939 0.264584,0.82062 v 0.24391 h -1.424203 q 0.02894,0.21911 0.173633,0.3514 0.146761,0.13229 0.370003,0.13229 0.345199,0 0.539502,-0.25011 l 0.293522,0.32866 q -0.134358,0.19017 -0.363802,0.29766 -0.229443,0.10542 -0.508496,0.10542 z m -0.06821,-1.83555 q -0.177766,0 -0.289388,0.11989 -0.109554,0.11989 -0.140559,0.34313 h 0.830957 v -0.0475 q -0.0041,-0.19844 -0.107487,-0.30592 -0.103353,-0.10956 -0.293523,-0.10956 z"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.23333311px;font-family:Roboto;-inkscape-font-specification:'Roboto, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332px"
id="path1075" />
<path
d="m 78.260116,164.09706 0.0186,0.25838 q 0.239779,-0.29972 0.642855,-0.29972 0.355534,0 0.529166,0.20877 0.173633,0.20878 0.177767,0.62426 v 1.44487 h -0.597379 v -1.43041 q 0,-0.19016 -0.08268,-0.27491 -0.08268,-0.0868 -0.274919,-0.0868 -0.252181,0 -0.378272,0.21497 v 1.57717 h -0.597379 v -2.23656 z"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.23333311px;font-family:Roboto;-inkscape-font-specification:'Roboto, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332px"
id="path1077" />
<path
d="m 81.013436,165.89333 q 0.165365,0 0.268717,-0.0909 0.103353,-0.0909 0.107487,-0.24184 h 0.560173 q -0.0021,0.22738 -0.124023,0.41754 -0.121957,0.18811 -0.334864,0.29353 -0.21084,0.10335 -0.467155,0.10335 -0.479557,0 -0.756543,-0.30386 -0.276985,-0.30592 -0.276985,-0.84336 v -0.0393 q 0,-0.51677 0.274918,-0.82476 0.274919,-0.30799 0.754476,-0.30799 0.419613,0 0.671794,0.23978 0.254248,0.23771 0.258382,0.63459 H 81.38964 q -0.0041,-0.17364 -0.107487,-0.28112 -0.103352,-0.10956 -0.272851,-0.10956 -0.208773,0 -0.31626,0.15296 -0.10542,0.1509 -0.10542,0.49196 v 0.062 q 0,0.34519 0.10542,0.49609 0.10542,0.15089 0.320394,0.15089 z"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.23333311px;font-family:Roboto;-inkscape-font-specification:'Roboto, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332px"
id="path1079" />
<path
d="m 83.320272,166.37496 q -0.49196,0 -0.802019,-0.30179 -0.307991,-0.30179 -0.307991,-0.80409 v -0.0579 q 0,-0.33693 0.130225,-0.60152 0.130224,-0.26665 0.367936,-0.40927 0.239778,-0.1447 0.545703,-0.1447 0.458886,0 0.721403,0.28939 0.264583,0.28939 0.264583,0.82062 v 0.24391 H 82.81591 q 0.02894,0.21911 0.173632,0.3514 0.146762,0.13229 0.370004,0.13229 0.345198,0 0.539502,-0.25011 l 0.293522,0.32866 q -0.134359,0.19017 -0.363802,0.29766 -0.229444,0.10542 -0.508496,0.10542 z m -0.06821,-1.83555 q -0.177767,0 -0.289388,0.11989 -0.109554,0.11989 -0.14056,0.34313 h 0.830957 v -0.0475 q -0.0041,-0.19844 -0.107487,-0.30592 -0.103353,-0.10956 -0.293522,-0.10956 z"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.23333311px;font-family:Roboto;-inkscape-font-specification:'Roboto, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332px"
id="path1081" />
<path
d="m 85.837946,164.65723 q -0.121956,-0.0165 -0.214974,-0.0165 -0.338997,0 -0.444417,0.22944 v 1.46348 h -0.597379 v -2.23656 h 0.564306 l 0.01654,0.26665 q 0.179834,-0.30799 0.49816,-0.30799 0.09922,0 0.186036,0.0269 z"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.23333311px;font-family:Roboto;-inkscape-font-specification:'Roboto, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332px"
id="path1083" />
</g>
</g>
</svg>

+ 0
- 370
repos/AepelzensModules/res/Walker.svg View File

@@ -1,370 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<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"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
id="svg8"
width="60"
height="380.00003"
viewBox="0 0 59.999998 380.00004"
version="1.1"
sodipodi:docname="Walker.svg"
inkscape:version="0.92.2 5c3e80d, 2017-08-06">
<metadata
id="metadata29">
<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>BlankPanel1</dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs27">
<clipPath
id="clipPath837"
clipPathUnits="userSpaceOnUse">
<path
inkscape:connector-curvature="0"
id="path835"
d="M 0,842 H 595 V 0 H 0 Z" />
</clipPath>
<clipPath
id="clipPath13703"
clipPathUnits="userSpaceOnUse">
<path
inkscape:connector-curvature="0"
id="path13701"
d="M 0,1020.448 H 935.433 V 0 H 0 Z" />
</clipPath>
</defs>
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1898"
inkscape:window-height="1026"
id="namedview25"
showgrid="true"
inkscape:zoom="2.1091365"
inkscape:cx="-102.60295"
inkscape:cy="208.54037"
inkscape:window-x="10"
inkscape:window-y="42"
inkscape:window-maximized="0"
inkscape:current-layer="g827"
showguides="true"
inkscape:guide-bbox="true">
<sodipodi:guide
position="30,360"
orientation="1,0"
id="guide101"
inkscape:locked="false" />
<inkscape:grid
type="xygrid"
id="grid826" />
<sodipodi:guide
position="-269.99999,60.000001"
orientation="0,1"
id="guide1007"
inkscape:locked="false" />
</sodipodi:namedview>
<title
id="title2">BlankPanel1</title>
<g
transform="matrix(1.3333333,0,0,-1.3333333,-826.22953,717.78288)"
inkscape:label="1"
id="g827"
style="opacity:1">
<g
id="g831"
transform="matrix(0.65492365,0,0,1.0001085,214.22316,-0.05847256)">
<g
transform="translate(619.08227,-482.18084)"
inkscape:label="02"
id="g13693">
<path
inkscape:connector-curvature="0"
id="path13695"
style="fill:#091942;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.22436777"
d="M 0,735.3352 H 68.666843 V 1020.448 H 0 Z" />
<path
style="opacity:1;fill:#e6e6e6;fill-opacity:1;stroke:#000000;stroke-width:0.47412768;stroke-linecap:square;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.98999999"
d="M -0.45300759,190.33385 V 0.445719 H 45.063249 90.579506 V 190.33385 380.22199 H 45.063249 -0.45300759 Z"
id="path26"
inkscape:connector-curvature="0"
transform="matrix(0.75000002,0,0,-0.75000002,0.58989299,1020.518)" />
</g>
</g>
<g
inkscape:groupmode="layer"
id="layer2"
inkscape:label="Layer 1"
style="opacity:0">
<image
sodipodi:absref="/tmp/seq.png"
y="-538.26715"
x="619.08228"
id="image80"
xlink:href="file:///tmp/seq.png"
preserveAspectRatio="none"
height="290.25"
width="45"
transform="scale(1,-1)" />
</g>
<flowRoot
xml:space="preserve"
id="flowRoot826"
style="font-style:normal;font-weight:normal;font-size:12px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
transform="matrix(0.75000002,0,0,-0.75000002,619.67216,538.33717)"><flowRegion
id="flowRegion828"><rect
id="rect830"
width="50"
height="20"
x="5"
y="10.000031" /></flowRegion><flowPara
id="flowPara834">MANIFOLDM</flowPara></flowRoot> <g
aria-label="Symmetry"
transform="matrix(1,0,0,-1,-1.6445696e-5,-21)"
style="font-style:normal;font-weight:normal;font-size:9px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.75px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
id="text878">
<path
d="m 626.45343,-373.62231 q -0.96484,-0.27735 -1.40625,-0.67969 -0.4375,-0.40625 -0.4375,-1 0,-0.67188 0.53516,-1.10938 0.53906,-0.4414 1.39843,-0.4414 0.58594,0 1.04297,0.22656 0.46094,0.22656 0.71094,0.625 0.25391,0.39844 0.25391,0.87109 h -0.75391 q 0,-0.51562 -0.32812,-0.80859 -0.32813,-0.29688 -0.92579,-0.29688 -0.55468,0 -0.86718,0.2461 -0.3086,0.24219 -0.3086,0.67578 0,0.34766 0.29297,0.58984 0.29688,0.23828 1.00391,0.4375 0.71094,0.19922 1.10937,0.44141 0.40235,0.23828 0.59375,0.55859 0.19532,0.32032 0.19532,0.75391 0,0.69141 -0.53907,1.10937 -0.53906,0.41407 -1.4414,0.41407 -0.58594,0 -1.09375,-0.22266 -0.50782,-0.22656 -0.78516,-0.61719 -0.27344,-0.39062 -0.27344,-0.88672 h 0.75391 q 0,0.51563 0.37891,0.81641 0.38281,0.29688 1.01953,0.29688 0.59375,0 0.91015,-0.24219 0.31641,-0.24219 0.31641,-0.66016 0,-0.41797 -0.29297,-0.64453 -0.29297,-0.23047 -1.0625,-0.45312 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px"
id="path936"
inkscape:connector-curvature="0" />
<path
d="m 630.79718,-372.14575 0.98438,-3.16797 h 0.77343 l -1.69922,4.87891 q -0.39453,1.05468 -1.2539,1.05468 l -0.13672,-0.0117 -0.26953,-0.0508 v -0.58593 l 0.19531,0.0156 q 0.36719,0 0.57031,-0.14844 0.20703,-0.14843 0.33985,-0.54297 l 0.16015,-0.42968 -1.50781,-4.17969 h 0.78906 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px"
id="path938"
inkscape:connector-curvature="0" />
<path
d="m 633.87531,-375.31372 0.0195,0.46875 q 0.46484,-0.54688 1.2539,-0.54688 0.88672,0 1.20703,0.67969 0.21094,-0.30469 0.54688,-0.49219 0.33984,-0.1875 0.80078,-0.1875 1.39063,0 1.41406,1.47266 v 2.83203 h -0.72265 v -2.78906 q 0,-0.45313 -0.20703,-0.67578 -0.20704,-0.22656 -0.69532,-0.22656 -0.40234,0 -0.66797,0.24218 -0.26562,0.23828 -0.30859,0.64453 v 2.80469 h -0.72656 v -2.76953 q 0,-0.92187 -0.90235,-0.92187 -0.71093,0 -0.97265,0.60546 v 3.08594 h -0.72266 v -4.22656 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px"
id="path940"
inkscape:connector-curvature="0" />
<path
d="m 640.89093,-375.31372 0.0195,0.46875 q 0.46485,-0.54688 1.25391,-0.54688 0.88672,0 1.20703,0.67969 0.21094,-0.30469 0.54687,-0.49219 0.33985,-0.1875 0.80079,-0.1875 1.39062,0 1.41406,1.47266 v 2.83203 h -0.72266 v -2.78906 q 0,-0.45313 -0.20703,-0.67578 -0.20703,-0.22656 -0.69531,-0.22656 -0.40235,0 -0.66797,0.24218 -0.26563,0.23828 -0.30859,0.64453 v 2.80469 h -0.72657 v -2.76953 q 0,-0.92187 -0.90234,-0.92187 -0.71094,0 -0.97266,0.60546 v 3.08594 h -0.72265 v -4.22656 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px"
id="path942"
inkscape:connector-curvature="0" />
<path
d="m 648.98077,-371.00903 q -0.85937,0 -1.39843,-0.5625 -0.53907,-0.56641 -0.53907,-1.51172 v -0.13281 q 0,-0.62891 0.23829,-1.1211 0.24218,-0.49609 0.67187,-0.77344 0.43359,-0.28125 0.9375,-0.28125 0.82422,0 1.28125,0.54297 0.45703,0.54297 0.45703,1.55469 v 0.30078 h -2.86328 q 0.0156,0.625 0.36328,1.01172 0.35156,0.38281 0.89063,0.38281 0.38281,0 0.64843,-0.15625 0.26563,-0.15625 0.46485,-0.41406 l 0.4414,0.34375 q -0.53125,0.81641 -1.59375,0.81641 z m -0.0898,-3.78907 q -0.4375,0 -0.73437,0.32032 -0.29688,0.3164 -0.36719,0.89062 h 2.11719 v -0.0547 q -0.0312,-0.55078 -0.29688,-0.85156 -0.26562,-0.30469 -0.71875,-0.30469 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px"
id="path944"
inkscape:connector-curvature="0" />
<path
d="m 652.44171,-376.33716 v 1.02344 h 0.78906 v 0.55859 h -0.78906 v 2.6211 q 0,0.2539 0.10547,0.38281 0.10547,0.125 0.35938,0.125 0.125,0 0.34375,-0.0469 v 0.58594 q -0.28516,0.0781 -0.55469,0.0781 -0.48438,0 -0.73047,-0.29297 -0.24609,-0.29297 -0.24609,-0.83203 v -2.6211 h -0.76954 v -0.55859 h 0.76954 v -1.02344 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px"
id="path946"
inkscape:connector-curvature="0" />
<path
d="m 656.11359,-374.66528 q -0.16407,-0.0274 -0.35547,-0.0274 -0.71094,0 -0.96485,0.60547 v 3 h -0.72265 v -4.22656 h 0.70312 l 0.0117,0.48828 q 0.35547,-0.56641 1.00781,-0.56641 0.21094,0 0.32032,0.0547 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px"
id="path948"
inkscape:connector-curvature="0" />
<path
d="m 658.15656,-372.14575 0.98437,-3.16797 h 0.77344 l -1.69922,4.87891 q -0.39453,1.05468 -1.25391,1.05468 l -0.13672,-0.0117 -0.26953,-0.0508 v -0.58593 l 0.19532,0.0156 q 0.36718,0 0.57031,-0.14844 0.20703,-0.14843 0.33984,-0.54297 l 0.16016,-0.42968 -1.50781,-4.17969 h 0.78906 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px"
id="path950"
inkscape:connector-curvature="0" />
</g>
<g
aria-label="Out"
transform="matrix(1,0,0,-1,19.5,43.5)"
style="font-style:normal;font-weight:normal;font-size:9px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.75px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
id="text890">
<path
d="m 630.35577,-260.09204 q 0,0.83594 -0.28125,1.46094 -0.28125,0.62109 -0.79687,0.94922 -0.51563,0.32812 -1.20313,0.32812 -0.67187,0 -1.1914,-0.32812 -0.51953,-0.33204 -0.8086,-0.94141 -0.28515,-0.61328 -0.29296,-1.41797 v -0.41016 q 0,-0.82031 0.28515,-1.44921 0.28516,-0.62891 0.80469,-0.96094 0.52344,-0.33594 1.19531,-0.33594 0.6836,0 1.20313,0.33203 0.52343,0.32813 0.80468,0.95703 0.28125,0.625 0.28125,1.45703 z m -0.74609,-0.36719 q 0,-1.01172 -0.40625,-1.55078 -0.40625,-0.54297 -1.13672,-0.54297 -0.71094,0 -1.12109,0.54297 -0.40625,0.53906 -0.41797,1.5 v 0.41797 q 0,0.98047 0.41016,1.54297 0.41406,0.55859 1.13671,0.55859 0.72657,0 1.125,-0.52734 0.39844,-0.53125 0.41016,-1.51953 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;stroke-width:0.75px"
id="path995"
inkscape:connector-curvature="0" />
<path
d="m 633.97687,-257.84985 q -0.42188,0.49609 -1.23828,0.49609 -0.67578,0 -1.03125,-0.39062 -0.35157,-0.39454 -0.35547,-1.16407 v -2.75 h 0.72265 v 2.73047 q 0,0.96094 0.78125,0.96094 0.82813,0 1.10157,-0.61719 v -3.07422 h 0.72265 v 4.22657 h -0.6875 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;stroke-width:0.75px"
id="path997"
inkscape:connector-curvature="0" />
<path
d="m 636.75421,-262.68188 v 1.02343 h 0.78906 v 0.5586 h -0.78906 v 2.62109 q 0,0.25391 0.10547,0.38281 0.10547,0.125 0.35938,0.125 0.125,0 0.34375,-0.0469 v 0.58594 q -0.28516,0.0781 -0.55469,0.0781 -0.48438,0 -0.73047,-0.29297 -0.24609,-0.29297 -0.24609,-0.83203 v -2.62109 h -0.76954 v -0.5586 h 0.76954 v -1.02343 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#000000;stroke-width:0.75px"
id="path999"
inkscape:connector-curvature="0" />
</g>
<g
aria-label="Stepsize"
transform="matrix(1,0,0,-1,0,-1.5)"
style="font-style:normal;font-weight:normal;font-size:9px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.75px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
id="text880">
<path
d="m 629.32257,-484.29922 q -0.96484,-0.27735 -1.40625,-0.67969 -0.4375,-0.40625 -0.4375,-1 0,-0.67188 0.53516,-1.10938 0.53906,-0.4414 1.39843,-0.4414 0.58594,0 1.04297,0.22656 0.46094,0.22656 0.71094,0.625 0.25391,0.39844 0.25391,0.87109 h -0.75391 q 0,-0.51562 -0.32812,-0.80859 -0.32813,-0.29688 -0.92579,-0.29688 -0.55468,0 -0.86718,0.2461 -0.3086,0.24219 -0.3086,0.67578 0,0.34766 0.29297,0.58984 0.29688,0.23828 1.00391,0.4375 0.71094,0.19922 1.10937,0.44141 0.40235,0.23828 0.59375,0.55859 0.19532,0.32032 0.19532,0.75391 0,0.69141 -0.53907,1.10937 -0.53906,0.41407 -1.4414,0.41407 -0.58594,0 -1.09375,-0.22266 -0.50782,-0.22656 -0.78516,-0.61719 -0.27344,-0.39062 -0.27344,-0.88672 h 0.75391 q 0,0.51563 0.37891,0.81641 0.38281,0.29688 1.01953,0.29688 0.59375,0 0.91015,-0.24219 0.31641,-0.24219 0.31641,-0.66016 0,-0.41797 -0.29297,-0.64453 -0.29297,-0.23047 -1.0625,-0.45312 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px"
id="path902"
inkscape:connector-curvature="0" />
<path
d="m 633.26398,-487.01407 v 1.02344 h 0.78906 v 0.55859 h -0.78906 v 2.6211 q 0,0.2539 0.10547,0.38281 0.10546,0.125 0.35937,0.125 0.125,0 0.34375,-0.0469 v 0.58594 q -0.28516,0.0781 -0.55469,0.0781 -0.48437,0 -0.73047,-0.29297 -0.24609,-0.29297 -0.24609,-0.83203 v -2.6211 h -0.76953 v -0.55859 h 0.76953 v -1.02344 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px"
id="path904"
inkscape:connector-curvature="0" />
<path
d="m 636.64679,-481.68594 q -0.85938,0 -1.39844,-0.5625 -0.53906,-0.56641 -0.53906,-1.51172 v -0.13281 q 0,-0.62891 0.23828,-1.1211 0.24219,-0.49609 0.67188,-0.77344 0.43359,-0.28125 0.9375,-0.28125 0.82421,0 1.28125,0.54297 0.45703,0.54297 0.45703,1.55469 v 0.30078 h -2.86328 q 0.0156,0.625 0.36328,1.01172 0.35156,0.38281 0.89062,0.38281 0.38281,0 0.64844,-0.15625 0.26562,-0.15625 0.46484,-0.41406 l 0.44141,0.34375 q -0.53125,0.81641 -1.59375,0.81641 z m -0.0898,-3.78907 q -0.4375,0 -0.73438,0.32032 -0.29687,0.3164 -0.36719,0.89062 h 2.11719 v -0.0547 q -0.0312,-0.55078 -0.29687,-0.85156 -0.26563,-0.30469 -0.71875,-0.30469 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px"
id="path906"
inkscape:connector-curvature="0" />
<path
d="m 642.69757,-483.83047 q 0,0.96484 -0.44141,1.55468 -0.4414,0.58985 -1.19531,0.58985 -0.76953,0 -1.21094,-0.48828 v 2.03515 h -0.72265 v -5.85156 h 0.66015 l 0.0352,0.46875 q 0.44141,-0.54688 1.22656,-0.54688 0.76172,0 1.20313,0.57422 0.44531,0.57422 0.44531,1.59766 z m -0.72266,-0.082 q 0,-0.71484 -0.30468,-1.1289 -0.30469,-0.41406 -0.83594,-0.41406 -0.65625,0 -0.98438,0.58203 v 2.01953 q 0.32422,0.57812 0.99219,0.57812 0.51953,0 0.82422,-0.41015 0.30859,-0.41407 0.30859,-1.22657 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px"
id="path908"
inkscape:connector-curvature="0" />
<path
d="m 646.07257,-482.88516 q 0,-0.29297 -0.22266,-0.45313 -0.21875,-0.16406 -0.76953,-0.28125 -0.54687,-0.11718 -0.87109,-0.28125 -0.32031,-0.16406 -0.47656,-0.39062 -0.15235,-0.22656 -0.15235,-0.53906 0,-0.51954 0.4375,-0.87891 0.44141,-0.35938 1.125,-0.35938 0.71875,0 1.16407,0.3711 0.44921,0.37109 0.44921,0.94922 h -0.72656 q 0,-0.29688 -0.2539,-0.51172 -0.25,-0.21485 -0.63282,-0.21485 -0.39453,0 -0.61718,0.17188 -0.22266,0.17187 -0.22266,0.44922 0,0.26172 0.20703,0.39453 0.20703,0.13281 0.74609,0.25391 0.54297,0.12109 0.87891,0.28906 0.33594,0.16797 0.49609,0.40625 0.16407,0.23437 0.16407,0.57422 0,0.5664 -0.45313,0.91015 -0.45312,0.33985 -1.17578,0.33985 -0.50781,0 -0.89844,-0.17969 -0.39062,-0.17969 -0.61328,-0.5 -0.21875,-0.32422 -0.21875,-0.69922 h 0.72266 q 0.0195,0.36328 0.28906,0.57813 0.27344,0.21093 0.71875,0.21093 0.41016,0 0.65625,-0.16406 0.25,-0.16797 0.25,-0.44531 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px"
id="path910"
inkscape:connector-curvature="0" />
<path
d="m 648.52179,-481.76407 h -0.72266 v -4.22656 h 0.72266 z m -0.78125,-5.34765 q 0,-0.17579 0.10547,-0.29688 0.10937,-0.12109 0.32031,-0.12109 0.21094,0 0.32031,0.12109 0.10938,0.12109 0.10938,0.29688 0,0.17578 -0.10938,0.29296 -0.10937,0.11719 -0.32031,0.11719 -0.21094,0 -0.32031,-0.11719 -0.10547,-0.11718 -0.10547,-0.29296 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px"
id="path912"
inkscape:connector-curvature="0" />
<path
d="m 650.35382,-482.35391 h 2.47266 v 0.58984 h -3.35547 v -0.53125 l 2.33203,-3.09765 h -2.29688 v -0.59766 h 3.20313 v 0.51172 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px"
id="path914"
inkscape:connector-curvature="0" />
<path
d="m 655.39679,-481.68594 q -0.85938,0 -1.39844,-0.5625 -0.53906,-0.56641 -0.53906,-1.51172 v -0.13281 q 0,-0.62891 0.23828,-1.1211 0.24219,-0.49609 0.67188,-0.77344 0.43359,-0.28125 0.9375,-0.28125 0.82421,0 1.28125,0.54297 0.45703,0.54297 0.45703,1.55469 v 0.30078 h -2.86328 q 0.0156,0.625 0.36328,1.01172 0.35156,0.38281 0.89062,0.38281 0.38281,0 0.64844,-0.15625 0.26562,-0.15625 0.46484,-0.41406 l 0.44141,0.34375 q -0.53125,0.81641 -1.59375,0.81641 z m -0.0898,-3.78907 q -0.4375,0 -0.73438,0.32032 -0.29687,0.3164 -0.36719,0.89062 h 2.11719 v -0.0547 q -0.0312,-0.55078 -0.29687,-0.85156 -0.26563,-0.30469 -0.71875,-0.30469 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px"
id="path916"
inkscape:connector-curvature="0" />
</g>
<g
aria-label="Range"
transform="matrix(1,0,0,-1,0,-3)"
style="font-style:normal;font-weight:normal;font-size:9px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.75px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
id="text884">
<path
d="m 633.52179,-433.06485 h -1.33594 v 2.30078 h -0.7539 v -5.6875 h 1.88281 q 0.96094,0 1.47656,0.4375 0.51953,0.4375 0.51953,1.27344 0,0.53125 -0.28906,0.92578 -0.28516,0.39453 -0.79688,0.58984 l 1.33594,2.41407 v 0.0469 h -0.80469 z m -1.33594,-0.61328 h 1.15235 q 0.55859,0 0.88671,-0.28906 0.33204,-0.28907 0.33204,-0.77344 0,-0.52734 -0.31641,-0.80859 -0.3125,-0.28125 -0.90625,-0.28516 h -1.14844 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px"
id="path919"
inkscape:connector-curvature="0" />
<path
d="m 638.85382,-430.76407 q -0.0625,-0.125 -0.10156,-0.44531 -0.50391,0.52344 -1.20313,0.52344 -0.625,0 -1.02734,-0.35157 -0.39844,-0.35546 -0.39844,-0.89843 0,-0.66016 0.5,-1.02344 0.50391,-0.36719 1.41406,-0.36719 h 0.70313 v -0.33203 q 0,-0.37891 -0.22656,-0.60156 -0.22657,-0.22656 -0.66797,-0.22656 -0.38672,0 -0.64844,0.19531 -0.26172,0.19531 -0.26172,0.47265 h -0.72656 q 0,-0.3164 0.22266,-0.60937 0.22656,-0.29688 0.60937,-0.46875 0.38672,-0.17188 0.84766,-0.17188 0.73047,0 1.14453,0.36719 0.41406,0.36328 0.42969,1.00391 v 1.94531 q 0,0.58203 0.14843,0.92578 v 0.0625 z m -1.19922,-0.55078 q 0.33985,0 0.64453,-0.17578 0.30469,-0.17578 0.44141,-0.45703 v -0.86719 h -0.56641 q -1.32812,0 -1.32812,0.77734 0,0.33985 0.22656,0.53125 0.22656,0.19141 0.58203,0.19141 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px"
id="path921"
inkscape:connector-curvature="0" />
<path
d="m 641.28741,-434.99063 0.0234,0.53125 q 0.48438,-0.60938 1.26563,-0.60938 1.33984,0 1.35156,1.51172 v 2.79297 h -0.72266 v -2.79687 q -0.004,-0.45703 -0.21093,-0.67578 -0.20313,-0.21875 -0.63672,-0.21875 -0.35157,0 -0.61719,0.1875 -0.26563,0.1875 -0.41406,0.49218 v 3.01172 h -0.72266 v -4.22656 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px"
id="path923"
inkscape:connector-curvature="0" />
<path
d="m 644.85382,-432.91251 q 0,-0.98828 0.45703,-1.57031 0.45703,-0.58594 1.21094,-0.58594 0.77344,0 1.20703,0.54688 l 0.0352,-0.46875 h 0.66015 v 4.125 q 0,0.82031 -0.48828,1.29297 -0.48437,0.47265 -1.30469,0.47265 -0.45703,0 -0.89453,-0.19531 -0.4375,-0.19531 -0.66797,-0.53515 l 0.375,-0.4336 q 0.46485,0.57422 1.13672,0.57422 0.52735,0 0.82032,-0.29687 0.29687,-0.29688 0.29687,-0.83594 v -0.36328 q -0.43359,0.5 -1.18359,0.5 -0.74219,0 -1.20313,-0.59766 -0.45703,-0.59766 -0.45703,-1.62891 z m 0.72656,0.082 q 0,0.71484 0.29297,1.125 0.29297,0.40625 0.82031,0.40625 0.6836,0 1.00391,-0.6211 v -1.92969 q -0.33203,-0.60546 -0.99609,-0.60546 -0.52735,0 -0.82422,0.41015 -0.29688,0.41016 -0.29688,1.21485 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px"
id="path925"
inkscape:connector-curvature="0" />
<path
d="m 651.26398,-430.68594 q -0.85938,0 -1.39844,-0.5625 -0.53906,-0.56641 -0.53906,-1.51172 v -0.13281 q 0,-0.62891 0.23828,-1.1211 0.24219,-0.49609 0.67187,-0.77344 0.4336,-0.28125 0.9375,-0.28125 0.82422,0 1.28125,0.54297 0.45703,0.54297 0.45703,1.55469 v 0.30078 h -2.86328 q 0.0156,0.625 0.36328,1.01172 0.35157,0.38281 0.89063,0.38281 0.38281,0 0.64844,-0.15625 0.26562,-0.15625 0.46484,-0.41406 l 0.44141,0.34375 q -0.53125,0.81641 -1.59375,0.81641 z m -0.0898,-3.78907 q -0.4375,0 -0.73437,0.32032 -0.29688,0.3164 -0.36719,0.89062 h 2.11719 v -0.0547 q -0.0312,-0.55078 -0.29688,-0.85156 -0.26562,-0.30469 -0.71875,-0.30469 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px"
id="path927"
inkscape:connector-curvature="0" />
</g>
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:9px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.75px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="619.67218"
y="-354.58713"
id="text888"
transform="scale(1,-1)"><tspan
sodipodi:role="line"
id="tspan886"
x="619.67218"
y="-346.62424"
style="stroke-width:0.75px"></tspan></text>
<g
aria-label="Size"
transform="scale(1,-1)"
style="font-style:normal;font-weight:normal;font-size:9px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.75px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
id="text892">
<path
d="m 625.61163,-338.79922 q -0.96484,-0.27735 -1.40625,-0.67969 -0.4375,-0.40625 -0.4375,-1 0,-0.67188 0.53516,-1.10938 0.53906,-0.4414 1.39844,-0.4414 0.58593,0 1.04297,0.22656 0.46093,0.22656 0.71093,0.625 0.25391,0.39844 0.25391,0.87109 h -0.75391 q 0,-0.51562 -0.32812,-0.80859 -0.32813,-0.29688 -0.92578,-0.29688 -0.55469,0 -0.86719,0.2461 -0.30859,0.24219 -0.30859,0.67578 0,0.34766 0.29296,0.58984 0.29688,0.23828 1.00391,0.4375 0.71094,0.19922 1.10938,0.44141 0.40234,0.23828 0.59375,0.55859 0.19531,0.32032 0.19531,0.75391 0,0.69141 -0.53906,1.10937 -0.53907,0.41407 -1.44141,0.41407 -0.58594,0 -1.09375,-0.22266 -0.50781,-0.22656 -0.78516,-0.61719 -0.27343,-0.39062 -0.27343,-0.88672 h 0.7539 q 0,0.51563 0.37891,0.81641 0.38281,0.29688 1.01953,0.29688 0.59375,0 0.91016,-0.24219 0.3164,-0.24219 0.3164,-0.66016 0,-0.41797 -0.29297,-0.64453 -0.29297,-0.23047 -1.0625,-0.45312 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px"
id="path954" />
<path
d="m 629.35773,-336.26407 h -0.72266 v -4.22656 h 0.72266 z m -0.78125,-5.34765 q 0,-0.17579 0.10547,-0.29688 0.10937,-0.12109 0.32031,-0.12109 0.21094,0 0.32031,0.12109 0.10938,0.12109 0.10938,0.29688 0,0.17578 -0.10938,0.29296 -0.10937,0.11719 -0.32031,0.11719 -0.21094,0 -0.32031,-0.11719 -0.10547,-0.11718 -0.10547,-0.29296 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px"
id="path956" />
<path
d="m 631.18976,-336.85391 h 2.47265 v 0.58984 h -3.35546 v -0.53125 l 2.33203,-3.09765 h -2.29688 v -0.59766 h 3.20313 v 0.51172 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px"
id="path958" />
<path
d="m 636.23273,-336.18594 q -0.85938,0 -1.39844,-0.5625 -0.53906,-0.56641 -0.53906,-1.51172 v -0.13281 q 0,-0.62891 0.23828,-1.1211 0.24219,-0.49609 0.67187,-0.77344 0.4336,-0.28125 0.9375,-0.28125 0.82422,0 1.28125,0.54297 0.45703,0.54297 0.45703,1.55469 v 0.30078 h -2.86328 q 0.0156,0.625 0.36328,1.01172 0.35157,0.38281 0.89063,0.38281 0.38281,0 0.64844,-0.15625 0.26562,-0.15625 0.46484,-0.41406 l 0.44141,0.34375 q -0.53125,0.81641 -1.59375,0.81641 z m -0.0898,-3.78907 q -0.4375,0 -0.73437,0.32032 -0.29688,0.3164 -0.36719,0.89062 h 2.11719 v -0.0547 q -0.0312,-0.55078 -0.29688,-0.85156 -0.26562,-0.30469 -0.71875,-0.30469 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px"
id="path960" />
</g>
<g
aria-label="Range"
transform="scale(1,-1)"
style="font-style:normal;font-weight:normal;font-size:9px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.75px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
id="text896">
<path
d="m 644.02179,-338.56485 h -1.33594 v 2.30078 h -0.7539 v -5.6875 h 1.88281 q 0.96094,0 1.47656,0.4375 0.51953,0.4375 0.51953,1.27344 0,0.53125 -0.28906,0.92578 -0.28516,0.39453 -0.79688,0.58984 l 1.33594,2.41407 v 0.0469 h -0.80469 z m -1.33594,-0.61328 h 1.15235 q 0.55859,0 0.88671,-0.28906 0.33204,-0.28907 0.33204,-0.77344 0,-0.52734 -0.31641,-0.80859 -0.3125,-0.28125 -0.90625,-0.28516 h -1.14844 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px"
id="path943" />
<path
d="m 649.35382,-336.26407 q -0.0625,-0.125 -0.10156,-0.44531 -0.50391,0.52344 -1.20313,0.52344 -0.625,0 -1.02734,-0.35157 -0.39844,-0.35546 -0.39844,-0.89843 0,-0.66016 0.5,-1.02344 0.50391,-0.36719 1.41406,-0.36719 h 0.70313 v -0.33203 q 0,-0.37891 -0.22656,-0.60156 -0.22657,-0.22656 -0.66797,-0.22656 -0.38672,0 -0.64844,0.19531 -0.26172,0.19531 -0.26172,0.47265 h -0.72656 q 0,-0.3164 0.22266,-0.60937 0.22656,-0.29688 0.60937,-0.46875 0.38672,-0.17188 0.84766,-0.17188 0.73047,0 1.14453,0.36719 0.41406,0.36328 0.42969,1.00391 v 1.94531 q 0,0.58203 0.14843,0.92578 v 0.0625 z m -1.19922,-0.55078 q 0.33985,0 0.64453,-0.17578 0.30469,-0.17578 0.44141,-0.45703 v -0.86719 h -0.56641 q -1.32812,0 -1.32812,0.77734 0,0.33985 0.22656,0.53125 0.22656,0.19141 0.58203,0.19141 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px"
id="path945" />
<path
d="m 651.78741,-340.49063 0.0234,0.53125 q 0.48438,-0.60938 1.26563,-0.60938 1.33984,0 1.35156,1.51172 v 2.79297 h -0.72266 v -2.79687 q -0.004,-0.45703 -0.21093,-0.67578 -0.20313,-0.21875 -0.63672,-0.21875 -0.35157,0 -0.61719,0.1875 -0.26563,0.1875 -0.41406,0.49218 v 3.01172 h -0.72266 v -4.22656 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px"
id="path947" />
<path
d="m 655.35382,-338.41251 q 0,-0.98828 0.45703,-1.57031 0.45703,-0.58594 1.21094,-0.58594 0.77344,0 1.20703,0.54688 l 0.0352,-0.46875 h 0.66015 v 4.125 q 0,0.82031 -0.48828,1.29297 -0.48437,0.47265 -1.30469,0.47265 -0.45703,0 -0.89453,-0.19531 -0.4375,-0.19531 -0.66797,-0.53515 l 0.375,-0.4336 q 0.46485,0.57422 1.13672,0.57422 0.52735,0 0.82032,-0.29687 0.29687,-0.29688 0.29687,-0.83594 v -0.36328 q -0.43359,0.5 -1.18359,0.5 -0.74219,0 -1.20313,-0.59766 -0.45703,-0.59766 -0.45703,-1.62891 z m 0.72656,0.082 q 0,0.71484 0.29297,1.125 0.29297,0.40625 0.82031,0.40625 0.6836,0 1.00391,-0.6211 v -1.92969 q -0.33203,-0.60546 -0.99609,-0.60546 -0.52735,0 -0.82422,0.41015 -0.29688,0.41016 -0.29688,1.21485 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px"
id="path949" />
<path
d="m 661.76398,-336.18594 q -0.85938,0 -1.39844,-0.5625 -0.53906,-0.56641 -0.53906,-1.51172 v -0.13281 q 0,-0.62891 0.23828,-1.1211 0.24219,-0.49609 0.67187,-0.77344 0.4336,-0.28125 0.9375,-0.28125 0.82422,0 1.28125,0.54297 0.45703,0.54297 0.45703,1.55469 v 0.30078 h -2.86328 q 0.0156,0.625 0.36328,1.01172 0.35157,0.38281 0.89063,0.38281 0.38281,0 0.64844,-0.15625 0.26562,-0.15625 0.46484,-0.41406 l 0.44141,0.34375 q -0.53125,0.81641 -1.59375,0.81641 z m -0.0898,-3.78907 q -0.4375,0 -0.73437,0.32032 -0.29688,0.3164 -0.36719,0.89062 h 2.11719 v -0.0547 q -0.0312,-0.55078 -0.29688,-0.85156 -0.26562,-0.30469 -0.71875,-0.30469 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px"
id="path951" />
</g>
<g
aria-label="Clock"
transform="scale(1,-1)"
style="font-style:normal;font-weight:normal;font-size:9px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.75px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
id="text900">
<path
d="m 626.61945,-302.73657 q -0.10547,0.90234 -0.66797,1.39453 -0.5586,0.48828 -1.48828,0.48828 -1.00782,0 -1.61719,-0.72266 -0.60547,-0.72265 -0.60547,-1.93359 v -0.54687 q 0,-0.79297 0.28125,-1.39454 0.28516,-0.60156 0.80469,-0.92187 0.51953,-0.32422 1.20312,-0.32422 0.90625,0 1.45313,0.50781 0.54687,0.50391 0.63672,1.39844 h -0.75391 q -0.0977,-0.67969 -0.42578,-0.98437 -0.32422,-0.30469 -0.91016,-0.30469 -0.71875,0 -1.1289,0.53125 -0.40625,0.53125 -0.40625,1.51172 v 0.55078 q 0,0.92578 0.38671,1.47265 0.38672,0.54688 1.08204,0.54688 0.625,0 0.95703,-0.28125 0.33593,-0.28516 0.44531,-0.98828 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px"
id="path930" />
<path
d="m 628.31085,-300.93188 h -0.72265 v -6 h 0.72265 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px"
id="path932" />
<path
d="m 629.27179,-303.08423 q 0,-0.62109 0.24219,-1.11719 0.24609,-0.49609 0.67968,-0.76562 0.4375,-0.26953 0.9961,-0.26953 0.86328,0 1.39453,0.59765 0.53516,0.59766 0.53516,1.58985 v 0.0508 q 0,0.61719 -0.23829,1.10937 -0.23437,0.48829 -0.67578,0.76172 -0.4375,0.27344 -1.00781,0.27344 -0.85937,0 -1.39453,-0.59766 -0.53125,-0.59765 -0.53125,-1.58203 z m 0.72656,0.0859 q 0,0.70312 0.32422,1.12891 0.32813,0.42578 0.875,0.42578 0.55078,0 0.875,-0.42969 0.32422,-0.43359 0.32422,-1.21094 0,-0.69531 -0.33203,-1.125 -0.32813,-0.43359 -0.875,-0.43359 -0.53516,0 -0.86328,0.42578 -0.32813,0.42578 -0.32813,1.21875 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px"
id="path934" />
<path
d="m 635.72101,-301.4436 q 0.38672,0 0.67578,-0.23438 0.28906,-0.23437 0.32031,-0.58594 h 0.6836 q -0.0195,0.36329 -0.25,0.69141 -0.23047,0.32813 -0.61719,0.52344 -0.38281,0.19531 -0.8125,0.19531 -0.86328,0 -1.375,-0.57422 -0.50781,-0.57812 -0.50781,-1.57812 v -0.1211 q 0,-0.61718 0.22656,-1.09765 0.22656,-0.48047 0.64844,-0.7461 0.42578,-0.26562 1.0039,-0.26562 0.71094,0 1.17969,0.42578 0.47266,0.42578 0.50391,1.10547 h -0.6836 q -0.0312,-0.41016 -0.3125,-0.67188 -0.27734,-0.26562 -0.6875,-0.26562 -0.55078,0 -0.85547,0.39844 -0.30078,0.39453 -0.30078,1.14453 v 0.13672 q 0,0.73046 0.30078,1.125 0.30078,0.39453 0.85938,0.39453 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px"
id="path937" />
<path
d="m 639.39288,-302.88892 -0.45312,0.47266 v 1.48438 h -0.72266 v -6 h 0.72266 v 3.6289 l 0.38672,-0.46484 1.3164,-1.39063 h 0.87891 l -1.64453,1.76563 1.83594,2.46094 h -0.84766 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px"
id="path939" />
</g>
</g>
</svg>

+ 0
- 163
repos/AepelzensModules/res/Werner.svg View File

@@ -1,163 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<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"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
id="svg8"
width="30"
height="380"
viewBox="0 0 29.999999 380.00001"
version="1.1"
sodipodi:docname="Werner.svg"
inkscape:version="0.92.2 5c3e80d, 2017-08-06">
<metadata
id="metadata29">
<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>BlankPanel1</dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs27">
<clipPath
id="clipPath837"
clipPathUnits="userSpaceOnUse">
<path
inkscape:connector-curvature="0"
id="path835"
d="M 0,842 H 595 V 0 H 0 Z" />
</clipPath>
<clipPath
id="clipPath13703"
clipPathUnits="userSpaceOnUse">
<path
inkscape:connector-curvature="0"
id="path13701"
d="M 0,1020.448 H 935.433 V 0 H 0 Z" />
</clipPath>
</defs>
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1898"
inkscape:window-height="1026"
id="namedview25"
showgrid="true"
inkscape:zoom="3.050832"
inkscape:cx="-76.662245"
inkscape:cy="263.50152"
inkscape:window-x="10"
inkscape:window-y="42"
inkscape:window-maximized="0"
inkscape:current-layer="g827"
showguides="true"
inkscape:guide-bbox="true"
inkscape:snap-grids="true"
inkscape:snap-global="true">
<inkscape:grid
type="xygrid"
id="grid826" />
</sodipodi:namedview>
<title
id="title2">BlankPanel1</title>
<g
transform="matrix(1.3333333,0,0,-1.3333333,-826.22953,717.78285)"
inkscape:label="1"
id="g827"
style="opacity:1">
<g
id="g831"
transform="matrix(0.32749997,0,0,0.99903815,416.92274,0.58772246)">
<g
transform="translate(619.08227,-482.18084)"
inkscape:label="02"
id="g13693">
<path
inkscape:connector-curvature="0"
id="path13695"
style="fill:#091942;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.22436777"
d="M 0,735.3352 H 68.666843 V 1020.448 H 0 Z" />
<path
style="opacity:1;fill:#e6e6e6;fill-opacity:1;stroke:#000000;stroke-width:0.47412768;stroke-linecap:square;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.98999999"
d="M -0.45300759,190.33385 V 0.445719 H 45.063249 90.579506 V 190.33385 380.22199 H 45.063249 -0.45300759 Z"
id="path26"
inkscape:connector-curvature="0"
transform="matrix(0.75000002,0,0,-0.75000002,0.58989299,1020.518)" />
</g>
</g>
<g
inkscape:groupmode="layer"
id="layer2"
inkscape:label="Layer 1"
style="opacity:0" />
<rect
style="opacity:1;fill:#3c3c3c;fill-opacity:1;stroke:none;stroke-width:0.39215845;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
id="rect27"
width="22.5"
height="92.313423"
x="619.67218"
y="-353.95505"
transform="scale(1,-1)"
ry="2.2476418" />
<g
aria-label="Time"
transform="matrix(1,0,0,-1,-1.6726946e-5,-6)"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.5px;line-height:125%;font-family:Roboto;-inkscape-font-specification:Roboto;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.75px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
id="text829">
<path
d="m 626.03107,-503.05994 h -2.05664 v 5.70411 h -0.83936 v -5.70411 h -2.05225 v -0.69433 h 4.94825 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:9px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px"
id="path831"
inkscape:connector-curvature="0" />
<path
d="m 627.74493,-497.35583 h -0.81298 v -4.75489 h 0.81298 z m -0.8789,-6.01612 q 0,-0.19775 0.11865,-0.33398 0.12305,-0.13623 0.36035,-0.13623 0.23731,0 0.36035,0.13623 0.12305,0.13623 0.12305,0.33398 0,0.19776 -0.12305,0.32959 -0.12304,0.13184 -0.36035,0.13184 -0.2373,0 -0.36035,-0.13184 -0.11865,-0.13183 -0.11865,-0.32959 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:9px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px"
id="path833"
inkscape:connector-curvature="0" />
<path
d="m 629.80597,-502.11072 0.022,0.52735 q 0.52295,-0.61524 1.41065,-0.61524 0.99756,0 1.35791,0.76465 0.2373,-0.34277 0.61523,-0.55371 0.38233,-0.21094 0.90088,-0.21094 1.56445,0 1.59082,1.65674 v 3.18604 h -0.81299 v -3.1377 q 0,-0.50977 -0.23291,-0.76025 -0.23291,-0.25489 -0.78222,-0.25489 -0.45264,0 -0.75147,0.27246 -0.29883,0.26807 -0.34717,0.7251 v 3.15528 h -0.81738 v -3.11573 q 0,-1.03711 -1.01514,-1.03711 -0.7998,0 -1.09424,0.68116 v 3.47168 h -0.81298 v -4.75489 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:9px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px"
id="path836"
inkscape:connector-curvature="0" />
<path
d="m 638.90704,-497.26794 q -0.96679,0 -1.57324,-0.63282 -0.60644,-0.6372 -0.60644,-1.70068 v -0.14941 q 0,-0.70752 0.26806,-1.26123 0.27246,-0.55811 0.75586,-0.87012 0.48779,-0.31641 1.05469,-0.31641 0.92725,0 1.44141,0.61084 0.51416,0.61084 0.51416,1.74902 v 0.33838 h -3.2212 q 0.0176,0.70313 0.4087,1.13819 0.3955,0.43066 1.00195,0.43066 0.43066,0 0.72949,-0.17578 0.29883,-0.17578 0.52295,-0.46582 l 0.49658,0.38672 q -0.59765,0.91846 -1.79297,0.91846 z m -0.10107,-4.2627 q -0.49219,0 -0.82617,0.36035 -0.33399,0.35596 -0.41309,1.00196 h 2.38184 v -0.0615 q -0.0352,-0.61963 -0.33399,-0.95801 -0.29883,-0.34277 -0.80859,-0.34277 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:9px;font-family:Roboto;-inkscape-font-specification:'Roboto, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.75px"
id="path838"
inkscape:connector-curvature="0" />
</g>
<g
aria-label="Δ"
transform="matrix(1,0,0,-1,-1.6726946e-5,-15)"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.5px;line-height:125%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.75px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
id="text843">
<path
d="m 630.92218,-477.70374 -2.70264,7.42237 h 5.41187 z m -4.50879,8.52979 3.75733,-9.84155 h 1.50952 l 3.75073,9.84155 z"
id="path849"
inkscape:connector-curvature="0" />
</g>
<rect
ry="2.2476418"
transform="scale(1,-1)"
y="-448.33716"
x="619.67218"
height="92.313423"
width="22.49996"
id="rect4520"
style="opacity:1;fill:#808080;fill-opacity:1;stroke:none;stroke-width:0.39215806;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0" />
</g>
</svg>

+ 0
- 70
repos/AepelzensModules/res/knob_29px.svg View File

@@ -1,70 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<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"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
version="1.1"
width="29"
height="29"
viewBox="0 0 29 29"
id="svg14"
sodipodi:docname="svg_render_tmp.svg"
inkscape:version="0.92.2 5c3e80d, 2017-08-06">
<metadata
id="metadata20">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs18" />
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="468"
inkscape:window-height="449"
id="namedview16"
showgrid="false"
inkscape:zoom="8.137931"
inkscape:cx="14.5"
inkscape:cy="14.5"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="0"
inkscape:current-layer="svg14" />
<path
style="fill:#333333"
d="M 28.8,14.5 A 14.3,14.3 0 0 1 14.5,28.8 14.3,14.3 0 0 1 0.19999981,14.5 14.3,14.3 0 0 1 14.5,0.19999981 14.3,14.3 0 0 1 28.8,14.5 Z"
id="circle2" />
<path
style="fill:#eeeeee"
d="M 25.4,14.5 A 10.9,10.9 0 0 1 14.5,25.4 10.9,10.9 0 0 1 3.6000004,14.5 10.9,10.9 0 0 1 14.5,3.6000004 10.9,10.9 0 0 1 25.4,14.5 Z"
id="circle4" />
<path
style="fill:#ffffff"
d="M 15.8,1.6 A 1.3,1.3 0 0 1 14.5,2.9 1.3,1.3 0 0 1 13.2,1.6 1.3,1.3 0 0 1 14.5,0.30000007 1.3,1.3 0 0 1 15.8,1.6 Z"
id="circle8" />
<path
style="fill:#ffffff"
d="M 15.8,1.9 A 1.3,1.3 0 0 1 14.5,3.1999999 1.3,1.3 0 0 1 13.2,1.9 1.3,1.3 0 0 1 14.5,0.60000002 1.3,1.3 0 0 1 15.8,1.9 Z"
id="circle10" />
<path
style="fill:#ffffff"
d="M 15.8,2.2 A 1.3,1.3 0 0 1 14.5,3.5 1.3,1.3 0 0 1 13.2,2.2 1.3,1.3 0 0 1 14.5,0.9000001 1.3,1.3 0 0 1 15.8,2.2 Z"
id="circle12" />
</svg>

+ 0
- 163
repos/AepelzensModules/src/Dice.cpp View File

@@ -1,163 +0,0 @@
#include "aepelzen.hpp"
#include "dsp/digital.hpp"

#define NUM_CHANNELS 4
#define NUM_STEPS 8

struct Dice : Module {
enum ParamIds {
RESET_PARAM,
CHANNEL_STEPS_PARAM,
CHANNEL_MODE_PARAM = CHANNEL_STEPS_PARAM + NUM_CHANNELS,
COLUMN1_PARAM = CHANNEL_MODE_PARAM + NUM_CHANNELS,
COLUMN2_PARAM = COLUMN1_PARAM + NUM_STEPS,
COLUMN3_PARAM = COLUMN2_PARAM + NUM_STEPS,
COLUMN4_PARAM = COLUMN3_PARAM + NUM_STEPS,
NUM_PARAMS = COLUMN4_PARAM + NUM_STEPS
};
enum InputIds {
CHANNEL_CLOCK_INPUT,
NUM_INPUTS = CHANNEL_CLOCK_INPUT + NUM_CHANNELS
};
enum OutputIds {
GATE_OUTPUT,
NUM_OUTPUTS = GATE_OUTPUT + NUM_CHANNELS
};
enum LightIds {
STEP_LIGHT,
NUM_LIGHTS = STEP_LIGHT + NUM_CHANNELS * NUM_STEPS
};

enum PlaybackModes {
MODE_FORWARD,
MODE_BACKWARD,
MODE_ALTERNATING,
MODE_RANDOM_NEIGHBOUR,
MODE_RANDOM
};

Dice() : Module(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS) {
//initialize RNG
//randomSeedTime();
}
void step() override;

SchmittTrigger channelClockTrigger[NUM_CHANNELS]; // for external clock
SchmittTrigger resetTrigger;
PulseGenerator gatePulse[NUM_CHANNELS];
SchmittTrigger clockTrigger;
int channel_index[NUM_CHANNELS] = {0};
bool direction[NUM_CHANNELS] = {};
float ColumnValue[NUM_CHANNELS] = {0};
float randomValue;
};


void Dice::step() {

//normalize to first clock input
for(int y=1;y<NUM_CHANNELS;y++) {
if(!inputs[CHANNEL_CLOCK_INPUT + y].active) {
inputs[CHANNEL_CLOCK_INPUT + y].value = inputs[CHANNEL_CLOCK_INPUT].value;
}
}

for(int y=0;y<NUM_CHANNELS;y++) {

bool pulse = false;
bool channelStep = false;

if (channelClockTrigger[y].process(inputs[CHANNEL_CLOCK_INPUT + y].value)) {
channelStep = true;
}

if (channelStep) {
int numSteps = clampi(roundf(params[CHANNEL_STEPS_PARAM + y].value), 1, 8);
int mode = clampi(roundf(params[CHANNEL_MODE_PARAM + y].value),0,5);
gatePulse[y].trigger(1e-3);
randomValue = randomf();
if (mode == MODE_RANDOM_NEIGHBOUR) {
mode = (randomf() > 0.5) ? MODE_FORWARD : MODE_BACKWARD;
}

switch(mode) {
case MODE_FORWARD:
channel_index[y] += 1;
channel_index[y] = (channel_index[y] >= numSteps) ? 0 : channel_index[y];
break;
case MODE_BACKWARD:
channel_index[y] -= 1;
channel_index[y] = (channel_index[y] < 0) ? numSteps - 1 : channel_index[y];
break;
case MODE_ALTERNATING:
if (direction[y]) {
channel_index[y] += 1;
if (channel_index[y] >= numSteps) {
channel_index[y] = numSteps - 2;
direction[y] = !direction[y];
}
}
else {
channel_index[y] -= 1;
if (channel_index[y] <= 0) {
channel_index[y] = 0;
direction[y] = !direction[y];
}
}
break;
case MODE_RANDOM:
channel_index[y] = rand() % numSteps;
break;
}
}
pulse = gatePulse[y].process(1.0 / engineGetSampleRate());
bool gateOn = (randomValue < (params[COLUMN1_PARAM + channel_index[y] + y * 8].value)) ? 1.0 : 0.0;
gateOn = gateOn && !pulse;
outputs[GATE_OUTPUT + y].value = (gateOn) ? 10.0 : 0.0;
for(int i=0;i<NUM_STEPS;i++) {
lights[STEP_LIGHT + y*NUM_STEPS + i].value = (i == channel_index[y] ? 1.0 : 0.0);
}
}

// Reset
if (resetTrigger.process(params[RESET_PARAM].value)) {
//nextStep = true;
for (int i=0;i<NUM_CHANNELS;i++) {
channel_index[i] = 0;
}
}
}


struct DiceWidget : ModuleWidget {
DiceWidget(Dice *module);
};

DiceWidget::DiceWidget(Dice *module) : ModuleWidget(module) {
box.size = Vec(8 * RACK_GRID_WIDTH, RACK_GRID_HEIGHT);

{
SVGPanel *panel = new SVGPanel();
panel->box.size = box.size;
panel->setBackground(SVG::load(assetPlugin(plugin, "res/Dice.svg")));
addChild(panel);
}

addParam(ParamWidget::create<LEDButton>(Vec(10, 5), module, Dice::RESET_PARAM, 0.0, 1.0, 0.0));
for(int y=0;y<NUM_CHANNELS;y++) {
for(int i=0;i<NUM_STEPS;i++) {
addParam(ParamWidget::create<Trimpot>(Vec(10 + y*27, 30 + i*28), module, Dice::COLUMN1_PARAM + y *NUM_STEPS + i, 0.0, 1.0, 0.0));
addChild(ModuleLightWidget::create<SmallLight<RedLight>>(Vec(16 + y*27, 50 + i*28), module, Dice::STEP_LIGHT + y *NUM_STEPS + i));
}
addParam(ParamWidget::create<Trimpot>(Vec(10 + y*27, 265), module, Dice::CHANNEL_STEPS_PARAM + y, 1.0, 8.0, 8.0));
addParam(ParamWidget::create<Trimpot>(Vec(10 + y*27, 290), module, Dice::CHANNEL_MODE_PARAM + y, 0, 5, 0));
addInput(Port::create<PJ301MPort>(Vec(7+y*27, 310), Port::INPUT, module, Dice::CHANNEL_CLOCK_INPUT + y));
addOutput(Port::create<PJ301MPort>(Vec(7 + y*27, 345), Port::OUTPUT, module, Dice::GATE_OUTPUT + y));
}
}

Model *modelDice = Model::create<Dice, DiceWidget>("Aepelzens Modules", "Dice", "Probability Sequencer", SEQUENCER_TAG);

+ 0
- 160
repos/AepelzensModules/src/Erwin.cpp View File

@@ -1,160 +0,0 @@
#include "aepelzen.hpp"
#include "dsp/digital.hpp"
#include <math.h>

#define NUM_CHANNELS 4

struct Erwin : Module {
enum ParamIds {
CHANNEL_TRANSPOSE_PARAM,
NOTE_PARAM = CHANNEL_TRANSPOSE_PARAM + NUM_CHANNELS,
NUM_PARAMS = NOTE_PARAM + 12
};
enum InputIds {
TRANSPOSE_INPUT,
SEMI_INPUT,
IN_INPUT,
NUM_INPUTS = IN_INPUT + 4
};
enum OutputIds {
OUT_OUTPUT,
NUM_OUTPUTS = OUT_OUTPUT + 4
};
enum LightIds {
NOTE_LIGHT,
NUM_LIGHTS = NOTE_LIGHT + 12
};

Erwin() : Module( NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS) { reset(); };
void step() override;
json_t* toJson() override;
void fromJson(json_t *rootJ) override;

//float ratios[13] = {1.0, 16.0/15, 9.0/8, 6.0/5, 5.0/4, 4.0/3, 7.0/5, 3.0/2, 8.0/5, 5.0/3, 16.0/9, 15.0/8, 2.0};

bool noteState[12] = {};
int octave;
int transposeOctave = 0;
int transposeSemi = 0;
float freq;

SchmittTrigger noteTriggers[12];
};

json_t* Erwin::toJson() {
json_t *rootJ = json_object();

// Note values
json_t *gatesJ = json_array();
for (int i = 0; i < 12; i++) {
json_t *gateJ = json_boolean(noteState[i]);
json_array_append_new(gatesJ, gateJ);
}
json_object_set_new(rootJ, "notes", gatesJ);
return rootJ;
}

void Erwin::fromJson(json_t *rootJ) {
// Note values
json_t *gatesJ = json_object_get(rootJ, "notes");
for (int i = 0; i < 12; i++) {
json_t *gateJ = json_array_get(gatesJ, i);
noteState[i] = !!json_boolean_value(gateJ);
}
}

void Erwin::step() {

for(int y=0;y<NUM_CHANNELS;y++) {
octave = trunc(inputs[IN_INPUT+y].value);
freq = inputs[IN_INPUT+y].value - octave;
//limit to 4 octaves
transposeOctave = clampi((int)round(inputs[TRANSPOSE_INPUT].value / 3.0) + (int)round(params[CHANNEL_TRANSPOSE_PARAM + y].value),-4, 4);
//limit to 1 octave
transposeSemi = (int)round(inputs[SEMI_INPUT].value * 1.2);

int semi = (int)(round(freq * 12));
//find last matching note in scale
int lastValidIndex = 0;
for(int i=semi;i>=0;i--) {
if(noteState[i]) {
lastValidIndex = i;
break;
}
}

if(transposeSemi) {
lastValidIndex = (lastValidIndex + transposeSemi);
}

outputs[OUT_OUTPUT + y].value = octave + lastValidIndex * 1/12.0 + transposeOctave;
}

// Note buttons
for (int i = 0; i < 12; i++) {
if (noteTriggers[i].process(params[NOTE_PARAM + i].value)) {
noteState[i] = !noteState[i];
}
lights[NOTE_LIGHT + i].value = (noteState[i] >= 1.0) ? 0.7 : 0;
}
}

template <typename BASE>
struct MuteLight : BASE {
MuteLight() {
this->box.size = mm2px(Vec(6.0, 6.0));
}
};

struct ErwinWidget : ModuleWidget {
ErwinWidget(Erwin *module);
};

ErwinWidget::ErwinWidget(Erwin *module) : ModuleWidget(module) {
box.size = Vec(15*8, 380);

{
SVGPanel *panel = new SVGPanel();
panel->box.size = box.size;
panel->setBackground(SVG::load(assetPlugin(plugin,"res/Erwin.svg")));
addChild(panel);
}

addChild(Widget::create<ScrewSilver>(Vec(15, 0)));
addChild(Widget::create<ScrewSilver>(Vec(box.size.x-30, 0)));
addChild(Widget::create<ScrewSilver>(Vec(15, 365)));
addChild(Widget::create<ScrewSilver>(Vec(box.size.x-30, 365)));

addInput(Port::create<PJ301MPort>(Vec(22.5, 42), Port::INPUT, module, Erwin::TRANSPOSE_INPUT));
addInput(Port::create<PJ301MPort>(Vec(76, 42), Port::INPUT, module, Erwin::SEMI_INPUT));

for(int i=0;i<4;i++) {
addOutput(Port::create<PJ301MPort>(Vec(76, 235 + i*30), Port::OUTPUT, module, Erwin::OUT_OUTPUT + i));
addInput(Port::create<PJ301MPort>(Vec(76, 100 +i*30), Port::INPUT, module, Erwin::IN_INPUT + i));
}

addParam(ParamWidget::create<Trimpot>(Vec(16, 90), module, Erwin::CHANNEL_TRANSPOSE_PARAM, -4, 4, 0));
addParam(ParamWidget::create<Trimpot>(Vec(38, 90), module, Erwin::CHANNEL_TRANSPOSE_PARAM + 1, -4, 4, 0));
addParam(ParamWidget::create<Trimpot>(Vec(16, 117.5), module, Erwin::CHANNEL_TRANSPOSE_PARAM + 2, -4, 4, 0));
addParam(ParamWidget::create<Trimpot>(Vec(38, 117.5), module, Erwin::CHANNEL_TRANSPOSE_PARAM + 3, -4, 4, 0));

//Note buttons
int white=0;
int black = 0;
for(int i=0; i<12; i++) {
if (i == 1 || i == 3 || i == 6 || i == 8 || i == 10 ) {
addParam(ParamWidget::create<LEDBezel>(Vec(10,311.5 - black*30), module, Erwin::NOTE_PARAM + i, 0.0, 1.0, 0.0));
addChild(ModuleLightWidget::create<MuteLight<GreenLight>>(Vec(12, 313.5 - black*30), module, Erwin::NOTE_LIGHT+i));
black++;
}
else {
if(i == 4)
black++;
addParam(ParamWidget::create<LEDBezel>(Vec(35,326.5 - white*30), module, Erwin::NOTE_PARAM + i, 0.0, 1.0, 0.0));
addChild(ModuleLightWidget::create<MuteLight<GreenLight>>(Vec(37, 328.5 - white*30), module, Erwin::NOTE_LIGHT+i));
white++;
}
}
}

Model *modelErwin = Model::create<Erwin, ErwinWidget>("Aepelzens Modules", "Erwin", "Erwin", UTILITY_TAG);

+ 0
- 520
repos/AepelzensModules/src/GateSeq.cpp View File

@@ -1,520 +0,0 @@
#include "aepelzen.hpp"
#include "dsp/digital.hpp"

const int NUM_STEPS = 16;
const int NUM_CHANNELS = 8;
const int NUM_GATES = NUM_STEPS * NUM_CHANNELS;

struct GateSeq : Module {

enum ParamIds {
LENGTH_PARAM,
CLOCK_PARAM,
RUN_PARAM,
RESET_PARAM,
INIT_PARAM,
COPY_PARAM,
MERGE_PARAM,
MERGE_MODE_PARAM,
PATTERN_SWITCH_MODE_PARAM,
CHANNEL_PROB_PARAM,
BANK_PARAM = CHANNEL_PROB_PARAM + NUM_CHANNELS,
PATTERN_PARAM = BANK_PARAM + 8,
GATE1_PARAM = PATTERN_PARAM + 8,
NUM_PARAMS = GATE1_PARAM + NUM_GATES + NUM_CHANNELS
};
enum InputIds {
CLOCK_INPUT,
EXT_CLOCK_INPUT,
RESET_INPUT,
PATTERN_INPUT,
CHANNEL_CLOCK_INPUT,
CHANNEL_PROB_INPUT = CHANNEL_CLOCK_INPUT + NUM_CHANNELS,
NUM_INPUTS = CHANNEL_PROB_INPUT + NUM_CHANNELS
};
enum OutputIds {
CLOCK_OUTPUT,
GATE1_OUTPUT,
NUM_OUTPUTS = GATE1_OUTPUT + NUM_CHANNELS
};
enum LightIds {
RUNNING_LIGHT,
RESET_LIGHT,
COPY_LIGHT,
MERGE_LIGHT,
LENGTH_LIGHT,
BANK_LIGHTS,
PATTERN_LIGHTS = BANK_LIGHTS + 8,
GATE_LIGHTS = PATTERN_LIGHTS + 8,
NUM_LIGHTS = GATE_LIGHTS + NUM_GATES + NUM_GATES
};

GateSeq() : Module(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS) {}
void step() override;
json_t *toJson() override;
void fromJson(json_t *rootJ) override;
void initializePattern(int bank, int pattern);
void copyPattern(int sourcePattern, int bank, int pattern);
void processPatternSelection();
bool mergePatterns(bool gate, int channel, int index, bool step);

enum MergeModes {
MERGE_OR,
MERGE_AND,
MERGE_XOR,
MERGE_NOR,
MERGE_RAND,
};
int mergeMode = 0;

struct patternInfo {
bool gates[NUM_GATES] = {false};
int length[NUM_CHANNELS] = { 16, 16, 16, 16, 16, 16, 16, 16};
//float prob[NUM_CHANNELS] = { 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0};
};

patternInfo patterns [64] = {};
patternInfo* currentPattern;

int bank = 0;
int pattern = 0;
//source pattern for copying (this uses the actual pattern index 0..64)
int sourcePattern = 0;
//source pattern for merging
int mergePattern = 0;

SchmittTrigger clockTrigger; // for external clock
SchmittTrigger channelClockTrigger[NUM_CHANNELS]; // for external clock
SchmittTrigger runningTrigger;
SchmittTrigger resetTrigger;
SchmittTrigger initTrigger;
SchmittTrigger copyTrigger;
SchmittTrigger mergeTrigger;
SchmittTrigger lengthTrigger;
SchmittTrigger gateTriggers[NUM_GATES];
SchmittTrigger bankTriggers[8];
SchmittTrigger patternTriggers[8];

PulseGenerator gatePulse[NUM_CHANNELS];
PulseGenerator clockOutPulse;

float stepLights[NUM_GATES] = {};
int channel_index[NUM_CHANNELS] = {};
bool running = true;
bool copyMode = false;
bool mergeParam = false;
bool lengthMode = false;
float phase = 0.0;
float prob = 0;
float rand = 0;

void reset() override {
for(int y=0;y<64;y++) {
for (int i = 0; i < NUM_GATES; i++) {
patterns[y].gates[i] = false;
}
for (int i=0; i<NUM_CHANNELS; i++) {
patterns[y].length[i] = 16;
}
}
bank = 0;
pattern = 0;
}

void randomize() override {
for (int i=0; i<NUM_CHANNELS; i++) {
for (int y=0; y<NUM_STEPS; y++) {
currentPattern->gates[i*NUM_CHANNELS + y] = (randomf() > 0.5);
}
currentPattern->length[i] = (int)(randomf()*15) + 1;
}
}
};


void GateSeq::step() {
float gSampleRate = engineGetSampleRate();
//const float lightLambda = 0.075;
const float lightLambda = 0.05;

// Run
if (runningTrigger.process(params[RUN_PARAM].value))
running = !running;
lights[RUNNING_LIGHT].value = running ? 1.0 : 0.0;

processPatternSelection();
bool nextStep = false;

if(lengthTrigger.process(params[LENGTH_PARAM].value)) {
lengthMode = !lengthMode;
}
lights[LENGTH_LIGHT].value = (lengthMode) ? 1.0 : 0.0;

if (running) {
if (inputs[EXT_CLOCK_INPUT].active) {
// External clock
if (clockTrigger.process(inputs[EXT_CLOCK_INPUT].value)) {
nextStep = true;
}
}
else {
// Internal clock
float clockTime = powf(2.0, params[CLOCK_PARAM].value + inputs[CLOCK_INPUT].value);
phase += clockTime / gSampleRate;
if (phase >= 1.0) {
phase -= 1.0;
nextStep = true;
}
}

if(nextStep)
clockOutPulse.trigger(1e-3);

bool pulse = false;
bool channelStep = false;

for (int y = 0; y < NUM_CHANNELS; y++) {
float channelProb = clampf(inputs[CHANNEL_PROB_INPUT + y].value /5.0 + params[CHANNEL_PROB_PARAM + y].value, 0.0, 1.0);
//channel clock overwrite
channelStep = false;
if(inputs[CHANNEL_CLOCK_INPUT + y].active) {
if (channelClockTrigger[y].process(inputs[CHANNEL_CLOCK_INPUT + y].value)) {
channelStep = true;
}
}
else {
channelStep = nextStep;
}
// Advance step
if (channelStep) {
//int numSteps = clampi(roundf(params[CHANNEL_STEPS_PARAM+y].value), 1, NUM_STEPS);
int numSteps = currentPattern->length[y];
//workaround to fix crashes on old saves without pattern support
if(numSteps == 0)
numSteps = 16;
channel_index[y] = (channel_index[y] + 1) % numSteps;
stepLights[y*NUM_STEPS + channel_index[y]] = 1.0;
gatePulse[y].trigger(1e-3);
//only compute new random number for active steps
if (currentPattern->gates[y*NUM_STEPS + channel_index[y]] && channelProb < 1) {
prob = randomf();
}
}

pulse = gatePulse[y].process(1.0 / engineGetSampleRate());
bool gateOn = currentPattern->gates[y*NUM_STEPS + channel_index[y]];

if(mergeParam) {
//gateOn = gateOn || patterns[mergePattern].gates[y*NUM_STEPS + channel_index[y]];
gateOn = mergePatterns(gateOn, y, channel_index[y], channelStep);
}
//probability
if(prob > channelProb) {
gateOn = false;
}
gateOn = gateOn && !pulse;
outputs[GATE1_OUTPUT + y].value = (gateOn) ? 10.0 : 0.0;
}
}
else {
//clear outputs, otherwise it holds it's last value
for(int y=0;y<NUM_CHANNELS;y++) {
outputs[GATE1_OUTPUT + y].value = 0;
}
}

// Reset
if (resetTrigger.process(params[RESET_PARAM].value + inputs[RESET_INPUT].value)) {
phase = 0.0;
for (int y = 0; y < NUM_CHANNELS; y++) {
channel_index[y] = 0;
}
nextStep = true;
lights[RESET_LIGHT].value = 1.0;
}
lights[RESET_LIGHT].value -= lights[RESET_LIGHT].value / lightLambda / gSampleRate;

// Gate buttons
for (int i = 0; i < NUM_GATES; i++) {
if (gateTriggers[i].process(params[GATE1_PARAM + i].value)) {
if(lengthMode) {
currentPattern->length[i/NUM_STEPS] = (i % NUM_STEPS ) + 1;
}
else
currentPattern->gates[i] = !currentPattern->gates[i];
}
stepLights[i] -= stepLights[i] / lightLambda / gSampleRate;
lights[GATE_LIGHTS + 2*i].value = (currentPattern->gates[i] >= 1.0) ? 0.7 - stepLights[i] : stepLights[i];
lights[GATE_LIGHTS + 2*i + 1].value = ( lengthMode && (i % NUM_STEPS + 1) == currentPattern->length[i/NUM_STEPS]) ? 1.0 : 0.0;
}

//clock out
outputs[CLOCK_OUTPUT].value = clockOutPulse.process(1.0/engineGetSampleRate()) ? 10.0 : 0.0;
}

template <typename BASE>
struct BigLight : BASE {
BigLight() {
this->box.size = Vec(17, 17);
}
};

struct GateSeqWidget : ModuleWidget {
GateSeqWidget(GateSeq *module);
};

GateSeqWidget::GateSeqWidget(GateSeq *module) : ModuleWidget(module) {
box.size = Vec(525, 380);

{
SVGPanel *panel = new SVGPanel();
panel->box.size = box.size;
panel->setBackground(SVG::load(assetPlugin(plugin, "res/GateSeq.svg")));
addChild(panel);
}

addChild(Widget::create<ScrewSilver>(Vec(15, 0)));
addChild(Widget::create<ScrewSilver>(Vec(box.size.x-30, 0)));
addChild(Widget::create<ScrewSilver>(Vec(15, 365)));
addChild(Widget::create<ScrewSilver>(Vec(box.size.x-30, 365)));

addParam(ParamWidget::create<RoundSmallBlackKnob>(Vec(15, 50), module, GateSeq::CLOCK_PARAM, -2.0, 10.0, 2.0));
addParam(ParamWidget::create<LEDBezel>(Vec(65, 55), module, GateSeq::RUN_PARAM, 0.0, 1.0, 0.0));
addChild(ModuleLightWidget::create<BigLight<GreenLight>>(Vec(67.5, 57.5), module, GateSeq::RUNNING_LIGHT));
addParam(ParamWidget::create<LEDBezel>(Vec(96.5, 55), module, GateSeq::RESET_PARAM, 0.0, 1.0, 0.0));
addChild(ModuleLightWidget::create<BigLight<GreenLight>>(Vec(99, 57.5), module, GateSeq::RESET_LIGHT));

addInput(Port::create<PJ301MPort>(Vec(32, 99-1), Port::INPUT, module, GateSeq::CLOCK_INPUT));
addInput(Port::create<PJ301MPort>(Vec(5, 99-1), Port::INPUT, module, GateSeq::EXT_CLOCK_INPUT));
addOutput(Port::create<PJ301MPort>(Vec(63.5, 98), Port::OUTPUT, module, GateSeq::CLOCK_OUTPUT));
addInput(Port::create<PJ301MPort>(Vec(95.0, 98), Port::INPUT, module, GateSeq::RESET_INPUT));
addInput(Port::create<PJ301MPort>(Vec(133, 98), Port::INPUT, module, GateSeq::PATTERN_INPUT));

addParam(ParamWidget::create<LEDBezel>(Vec(175, 55), module, GateSeq::COPY_PARAM , 0.0, 1.0, 0.0));
addChild(ModuleLightWidget::create<BigLight<YellowLight>>(Vec(177.5, 57.5), module, GateSeq::COPY_LIGHT));
addParam(ParamWidget::create<LEDBezel>(Vec(175, 98), module, GateSeq::INIT_PARAM , 0.0, 1.0, 0.0));

addParam(ParamWidget::create<LEDBezel>(Vec(205, 98), module, GateSeq::LENGTH_PARAM , 0.0, 1.0, 0.0));
addChild(ModuleLightWidget::create<BigLight<RedLight>>(Vec(207.5, 100.5), module, GateSeq::LENGTH_LIGHT));
addParam(ParamWidget::create<CKSS>(Vec(139, 55), module, GateSeq::PATTERN_SWITCH_MODE_PARAM , 0.0, 1.0, 0.0));

addParam(ParamWidget::create<LEDBezel>(Vec(465, 55), module, GateSeq::MERGE_PARAM , 0.0, 1.0, 0.0));
addChild(ModuleLightWidget::create<BigLight<RedLight>>(Vec(467.5, 57.5), module, GateSeq::MERGE_LIGHT));
addParam(ParamWidget::create<RoundSmallBlackKnob>(Vec(463, 90), module, GateSeq::MERGE_MODE_PARAM , 0.0, 5.0, 0.0));

//pattern/bank buttons
for(int i=0;i<8;i++) {
addParam(ParamWidget::create<LEDBezel>(Vec(252 + i*24, 55), module, GateSeq::BANK_PARAM + i, 0.0, 1.0, 0.0));
addChild(ModuleLightWidget::create<BigLight<GreenLight>>(Vec(254.5 + i*24, 57.5), module, GateSeq::BANK_LIGHTS + i));
addParam(ParamWidget::create<LEDBezel>(Vec(252 + i*24, 98), module, GateSeq::PATTERN_PARAM + i, 0.0, 1.0, 0.0));
addChild(ModuleLightWidget::create<BigLight<GreenLight>>(Vec(254.5 + i*24, 100.5), module, GateSeq::PATTERN_LIGHTS + i));
}

for (int y = 0; y < NUM_CHANNELS; y++) {
for (int x = 0; x < NUM_STEPS; x++) {
int i = y*NUM_STEPS+x;
addParam(ParamWidget::create<LEDBezel>(Vec(62 + x*25, 155+y*25), module, GateSeq::GATE1_PARAM + i, 0.0, 1.0, 0.0));
addChild(ModuleLightWidget::create<BigLight<GreenRedLight>>(Vec(62 + x*25 + 2.5, 155+y*25+2.5), module, GateSeq::GATE_LIGHTS + 2*i));
}
addInput(Port::create<PJ301MPort>(Vec(5, 155+y*25 - 1.5), Port::INPUT, module, GateSeq::CHANNEL_CLOCK_INPUT + y));
addInput(Port::create<PJ301MPort>(Vec(32, 155+y*25 - 1.5), Port::INPUT, module, GateSeq::CHANNEL_PROB_INPUT + y));
addOutput(Port::create<PJ301MPort>(Vec(465, 155+y*25 - 1.5), Port::OUTPUT, module, GateSeq::GATE1_OUTPUT + y));
addParam(ParamWidget::create<Trimpot>(Vec(495, 155+y*25 + 1.5), module, GateSeq::CHANNEL_PROB_PARAM + y, 0.0, 1.0, 1.0));
}
}

void GateSeq::processPatternSelection() {
if(initTrigger.process(params[INIT_PARAM].value))
initializePattern(bank, pattern);

//copy pattern
if(copyTrigger.process(params[COPY_PARAM].value)) {
if(copyMode)
copyPattern(sourcePattern, bank, pattern);
else
sourcePattern = 8*bank + pattern;
copyMode = (!copyMode);
}
lights[COPY_LIGHT].value = (copyMode) ? 1.0 : 0.0;

//merge Mode
if(mergeTrigger.process(params[MERGE_PARAM].value)) {
mergeParam = !mergeParam;
}
lights[MERGE_LIGHT].value = (mergeParam) ? 1.0 : 0.0;

//bank
for(int i=0;i<8;i++) {
if(bankTriggers[i].process(params[BANK_PARAM + i].value)) {
bank = i;
//Switch to first pattern in bank (TODO: do i really want this?)
pattern = 0;
break;
}
lights[BANK_LIGHTS + i].value = (bank == i) ? 1.0 : 0.0;
}
//pattern
for(int i=0;i<8;i++) {
if(inputs[PATTERN_INPUT].active) {
int in = clampi(trunc(inputs[PATTERN_INPUT].value),0 , 7);
if (in != pattern && params[PATTERN_SWITCH_MODE_PARAM].value) {
for(int y=0;y<NUM_CHANNELS;y++) {
channel_index[y] = -1;
}
}
pattern = in;
}
else if(patternTriggers[i].process(params[PATTERN_PARAM + i].value)) {
if(mergeParam) {
mergePattern = 8*bank + i;
}
else {
pattern = i;
//reset index
if(params[PATTERN_SWITCH_MODE_PARAM].value) {
for(int y=0;y<NUM_CHANNELS;y++) {
channel_index[y] = -1;
}
}
}
break;
}
}
for(int i=0;i<8;i++) {
lights[PATTERN_LIGHTS + i].value = (pattern == i || (mergeParam && mergePattern == i)) ? 1.0 : 0.0;
}
currentPattern = &patterns[8*bank + pattern];
}

/**
Merge Pattern steps

@param gate Gate State of the base Pattern
@param channel
@param index Position in channel
@param step true if the index increased in the active cycle (i.e. we have a new step)
*/
bool GateSeq::mergePatterns(bool gate, int channel, int index, bool step) {
bool out = false;
mergeMode = params[MERGE_MODE_PARAM].value;
if(step)
rand = randomf();

switch (mergeMode) {
case MERGE_OR: {
out = gate || patterns[mergePattern].gates[channel*NUM_STEPS + index];
break;
}
case MERGE_AND: {
out = gate && patterns[mergePattern].gates[channel*NUM_STEPS + index];
break;
}
case MERGE_XOR: {
out = gate ^ patterns[mergePattern].gates[channel*NUM_STEPS + index];
break;
}
case MERGE_NOR: {
out = !(gate || patterns[mergePattern].gates[channel*NUM_STEPS + index]);
break;
}
case MERGE_RAND: {
if(rand > 0.5)
out = gate;
else
out = patterns[mergePattern].gates[channel*NUM_STEPS + index];
break;
}
}
return out;
}

void GateSeq::initializePattern(int bank, int pattern) {
for(int i=0;i<NUM_GATES;i++) {
currentPattern->gates[i] = 0;
}

for (int i = 0; i<NUM_CHANNELS; i++) {
currentPattern->length[i] = 16;
//currentPatternp->rob[i] = 1;
}
}

/**
Copy a pattern

@param sourcePattern The Source pattern to be copied
@param bank The bank of the destination pattern
@param pattern The pattern of the destination pattern
*/
void GateSeq::copyPattern(int sourcePattern, int bank, int pattern) {
//currentPattern = &patterns[8*bank + pattern];
printf("Copying pattern: %d to bank: %d, pattern:%d\n", sourcePattern, bank, pattern);
for (int i=0; i<NUM_GATES; i++) {
patterns[8*bank + pattern].gates[i] = patterns[sourcePattern].gates[i];
}
for(int i=0;i<NUM_CHANNELS;i++) {
patterns[8*bank + pattern].length[i] = patterns[sourcePattern].length[i];
}
}

json_t* GateSeq::toJson() {
json_t *rootJ = json_object();

//patterns
json_t *patternsJ = json_array();
json_t *lengthsJ = json_array();

for(int y=0;y<64;y++) {
// Gate values
json_t *gatesJ = json_array();
for (int i = 0; i < NUM_GATES; i++) {
json_t *gateJ = json_integer((int) patterns[y].gates[i]);
json_array_append_new(gatesJ, gateJ);
}
json_array_append_new(patternsJ, gatesJ);

//second array for lengths to keep things simple
json_t *pLengthJ = json_array();
for(int i=0;i<NUM_CHANNELS;i++) {
json_t* lengthJ = json_integer(patterns[y].length[i]);
json_array_append_new(pLengthJ, lengthJ);
}
json_array_append_new(lengthsJ, pLengthJ);
}
json_object_set_new(rootJ, "patterns", patternsJ);
json_object_set_new(rootJ, "lengths", lengthsJ);

json_t *activePatternJ = json_integer(pattern);
json_object_set_new(rootJ, "pattern", activePatternJ);
json_t *activeBankJ = json_integer(bank);
json_object_set_new(rootJ, "bank", activeBankJ);
return rootJ;
}

void GateSeq::fromJson(json_t *rootJ) {
json_t *patternsJ = json_object_get(rootJ, "patterns");
json_t *lengthsJ = json_object_get(rootJ, "lengths");

for(int y=0;y<64;y++) {
// Gate values
json_t *gatesJ = json_array_get(patternsJ, y);
for (int i = 0; i < NUM_GATES; i++) {
json_t *gateJ = json_array_get(gatesJ, i);
//patterns[y][i] = json_integer_value(gateJ);
patterns[y].gates[i] = json_integer_value(gateJ);
}
json_t *pLengthsJ = json_array_get(lengthsJ, y);
for(int i=0;i<NUM_CHANNELS;i++) {
json_t *lengthJ = json_array_get(pLengthsJ, i);
patterns[y].length[i] = json_integer_value(lengthJ);
}
}
json_t * patternJ = json_object_get(rootJ, "pattern");
pattern = json_integer_value(patternJ);
json_t * bankJ = json_object_get(rootJ, "bank");
bank = json_integer_value(bankJ);

currentPattern = &patterns[8*bank + pattern];
}

Model *modelGateSeq = Model::create<GateSeq, GateSeqWidget>("Aepelzens Modules", "GateSEQ", "Gate Sequencer", SEQUENCER_TAG);

+ 0
- 292
repos/AepelzensModules/src/QuadSeq.cpp View File

@@ -1,292 +0,0 @@
#include "aepelzen.hpp"
#include "dsp/digital.hpp"

#define NUM_CHANNELS 4

struct QuadSeq : Module {
enum ParamIds {
CLOCK_PARAM,
RUN_PARAM,
RESET_PARAM,
CHANNEL_STEPS_PARAM,
CHANNEL_RANGE_PARAM = CHANNEL_STEPS_PARAM + NUM_CHANNELS,
CHANNEL_MODE_PARAM = CHANNEL_RANGE_PARAM + NUM_CHANNELS,
ROW1_PARAM = CHANNEL_MODE_PARAM + NUM_CHANNELS,
ROW2_PARAM = ROW1_PARAM + 8,
ROW3_PARAM = ROW2_PARAM + 8,
ROW4_PARAM = ROW3_PARAM + 8,
NUM_PARAMS = ROW4_PARAM + 8
};
enum InputIds {
CLOCK_INPUT,
EXT_CLOCK_INPUT,
RESET_INPUT,
CHANNEL_CLOCK_INPUT,
NUM_INPUTS = CHANNEL_CLOCK_INPUT + NUM_CHANNELS
};
enum OutputIds {
ROW1_OUTPUT,
NUM_OUTPUTS = ROW1_OUTPUT + NUM_CHANNELS
};
enum LightIds {
RUNNING_LIGHT,
RESET_LIGHT,
CHANNEL_LIGHTS,
NUM_LIGHTS = CHANNEL_LIGHTS + 8 * NUM_CHANNELS
};

enum PlaybackModes {
MODE_FORWARD,
MODE_BACKWARD,
MODE_ALTERNATING,
MODE_RANDOM_NEIGHBOUR,
MODE_RANDOM
};

bool running = true;
SchmittTrigger clockTrigger; // for external clock
SchmittTrigger channelClockTrigger[NUM_CHANNELS]; // for external clock
// For buttons
SchmittTrigger runningTrigger;
SchmittTrigger resetTrigger;

float phase = 0.0;
int index = 0;

float resetLight = 0.0;
float stepLights[NUM_CHANNELS][8] = {};

enum GateMode {
TRIGGER,
RETRIGGER,
CONTINUOUS,
};
GateMode gateMode = TRIGGER;
PulseGenerator gatePulse;

int channel_index[NUM_CHANNELS] = {};
float rowValue[NUM_CHANNELS] = {};
//playback direction: true for forward, false for backward
bool direction[NUM_CHANNELS] = {};

QuadSeq() : Module(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS) {
reset();
}
void step() override;

json_t *toJson() override {
json_t *rootJ = json_object();

// running
json_object_set_new(rootJ, "running", json_boolean(running));

// gates
// json_t *gatesJ = json_array();
// for (int i = 0; i < 8; i++) {
// json_t *gateJ = json_integer((int) gateState[i]);
// json_array_append_new(gatesJ, gateJ);
// }
// json_object_set_new(rootJ, "gates", gatesJ);

// // gateMode
// json_t *gateModeJ = json_integer((int) gateMode);
// json_object_set_new(rootJ, "gateMode", gateModeJ);

return rootJ;
}

void fromJson(json_t *rootJ) override {
// running
json_t *runningJ = json_object_get(rootJ, "running");
if (runningJ)
running = json_is_true(runningJ);

// gates
// json_t *gatesJ = json_object_get(rootJ, "gates");
// if (gatesJ) {
// for (int i = 0; i < 8; i++) {
// json_t *gateJ = json_array_get(gatesJ, i);
// if (gateJ)
// gateState[i] = !!json_integer_value(gateJ);
// }
// }

// // gateMode
// json_t *gateModeJ = json_object_get(rootJ, "gateMode");
// if (gateModeJ)
// gateMode = (GateMode)json_integer_value(gateModeJ);
}

void reset() override {
for(int i=0;i<NUM_CHANNELS;i++) {
direction[i] = true;
channel_index[i] = 0;
}
}

void randomize() override {

}
};


void QuadSeq::step() {
const float lightLambda = 0.075;
// Run
if (runningTrigger.process(params[RUN_PARAM].value)) {
running = !running;
}
lights[RUNNING_LIGHT].value = running ? 1.0 : 0.0;

bool nextStep = false;

if (running) {
if (inputs[EXT_CLOCK_INPUT].active) {
// External clock
if (clockTrigger.process(inputs[EXT_CLOCK_INPUT].value)) {
phase = 0.0;
nextStep = true;
}
}
else {
// Internal clock
float clockTime = powf(2.0, params[CLOCK_PARAM].value + inputs[CLOCK_INPUT].value);
phase += clockTime / engineGetSampleRate();
if (phase >= 1.0) {
phase -= 1.0;
nextStep = true;
}
}
}

// Reset
if (resetTrigger.process(params[RESET_PARAM].value + inputs[RESET_INPUT].value)) {
phase = 0.0;
//index = 8;
nextStep = true;
resetLight = 1.0;
for (int i=0;i<NUM_CHANNELS;i++) {
channel_index[i] = -1;
}
}

bool channelStep = false;

for (int y = 0; y < NUM_CHANNELS; y++) {
//channel clock overwrite
channelStep = false;
if(inputs[CHANNEL_CLOCK_INPUT + y].active) {
if (channelClockTrigger[y].process(inputs[CHANNEL_CLOCK_INPUT + y].value)) {
channelStep = true;
}
}
else {
channelStep = nextStep;
}

// Advance step
if (channelStep) {
int numSteps = clampi(roundf(params[CHANNEL_STEPS_PARAM + y].value), 1, 8);
int mode = clampi(roundf(params[CHANNEL_MODE_PARAM + y].value),0,5);

if (mode == MODE_RANDOM_NEIGHBOUR) {
mode = (randomf() > 0.5) ? MODE_FORWARD : MODE_BACKWARD;
}

switch(mode) {
case MODE_FORWARD:
channel_index[y] += 1;
channel_index[y] = (channel_index[y] >= numSteps) ? 0 : channel_index[y];
break;
case MODE_BACKWARD:
channel_index[y] -= 1;
channel_index[y] = (channel_index[y] < 0) ? numSteps - 1 : channel_index[y];
break;
case MODE_ALTERNATING:
if (direction[y]) {
channel_index[y] += 1;
if (channel_index[y] >= numSteps) {
channel_index[y] = numSteps - 2;
direction[y] = !direction[y];
}
}
else {
channel_index[y] -= 1;
if (channel_index[y] <= 0) {
channel_index[y] = 0;
direction[y] = !direction[y];
}
}
break;
case MODE_RANDOM:
//channel_index[y] = round(randomf() * (numSteps - 1));
channel_index[y] = rand() % numSteps;
break;
}

stepLights[y][channel_index[y]] = 1.0;

rowValue[y] = (params[ROW1_PARAM + channel_index[y] + y * 8].value) * params[CHANNEL_RANGE_PARAM + y].value;
// Outputs
outputs[ROW1_OUTPUT + y].value = rowValue[y];
}

// steplights
for (int i = 0; i < 8; i++) {
//stepLights[y][i] -= stepLights[y][i] / lightLambda / engineGetSampleRate();
stepLights[y][i] = (i == channel_index[y]) ? 1.0 : 0.0;
lights[CHANNEL_LIGHTS + i + 8*y].value = stepLights[y][i];
}
}
resetLight -= resetLight / lightLambda / engineGetSampleRate();
lights[RESET_LIGHT].value = resetLight;
}


struct QuadSeqWidget : ModuleWidget {
QuadSeqWidget(QuadSeq *module);
};

QuadSeqWidget::QuadSeqWidget(QuadSeq *module) : ModuleWidget(module) {
box.size = Vec(15*22, 380);

{
SVGPanel *panel = new SVGPanel();
panel->box.size = box.size;
panel->setBackground(SVG::load(assetPlugin(plugin, "res/QuadSeq.svg")));
addChild(panel);
}

// addChild(Widget::create<ScrewSilver>(Vec(5, 0)));
// addChild(Widget::create<ScrewSilver>(Vec(box.size.x-20, 0)));
// addChild(Widget::create<ScrewSilver>(Vec(5, 365)));
// addChild(Widget::create<ScrewSilver>(Vec(box.size.x-20, 365)));

//original 56
addParam(ParamWidget::create<RoundSmallBlackKnob>(Vec(56, 35), module, QuadSeq::CLOCK_PARAM, -2.0, 6.0, 2.0));
addParam(ParamWidget::create<LEDButton>(Vec(60, 82), module, QuadSeq::RUN_PARAM, 0.0, 1.0, 0.0));
addChild(ModuleLightWidget::create<MediumLight<GreenLight>>(Vec(64.4, 86.4), module, QuadSeq::RUNNING_LIGHT));
addParam(ParamWidget::create<LEDButton>(Vec(60, 120), module, QuadSeq::RESET_PARAM, 0.0, 1.0, 0.0));
addChild(ModuleLightWidget::create<MediumLight<GreenLight>>(Vec(64.4, 124.4), module, QuadSeq::RESET_LIGHT));

addInput(Port::create<PJ301MPort>(Vec(20, 36), Port::INPUT, module, QuadSeq::CLOCK_INPUT));
addInput(Port::create<PJ301MPort>(Vec(20, 79), Port::INPUT, module, QuadSeq::EXT_CLOCK_INPUT));
addInput(Port::create<PJ301MPort>(Vec(20, 117), Port::INPUT, module, QuadSeq::RESET_INPUT));


for (int i=0;i<NUM_CHANNELS;i++) {
//addParam(ParamWidget::create<RoundSmallBlackKnob>(Vec(135 + i*48, 56), module, QuadSeq::CHANNEL_STEPS_PARAM + i, 1.0, 8.0, 8.0));
addParam(ParamWidget::create<RoundSmallBlackKnob>(Vec(105 + i*55, 50), module, QuadSeq::CHANNEL_STEPS_PARAM + i, 1.0, 8.0, 8.0));
addParam(ParamWidget::create<Trimpot>(Vec(98 + i*55, 105), module, QuadSeq::CHANNEL_RANGE_PARAM + i, 0.0, 1.0, 1.0));
addParam(ParamWidget::create<Trimpot>(Vec(120 + i*55, 105), module, QuadSeq::CHANNEL_MODE_PARAM + i, 0, 5, 0));
addInput(Port::create<PJ301MPort>(Vec(18 + i*38, 350), Port::INPUT, module, QuadSeq::CHANNEL_CLOCK_INPUT + i));
addOutput(Port::create<PJ301MPort>(Vec(172 + i*38, 350), Port::OUTPUT, module, QuadSeq::ROW1_OUTPUT + i));
for (int y = 0; y < 8; y++) {
//addParam(ParamWidget::create<RoundSmallBlackKnob>(Vec(18 + y*38 ,175 + i*41), module, QuadSeq::ROW1_PARAM + y + i*8, 0.0, 10.0, 0.0));
addParam(ParamWidget::create<Knob29>(Vec(18 + y*38 ,170 + i*41), module, QuadSeq::ROW1_PARAM + y + i*8, 0.0, 10.0, 0.0));
addChild(ModuleLightWidget::create<SmallLight<RedLight>>(Vec(26.4 + y*38, 200 + i*41), module, QuadSeq::CHANNEL_LIGHTS + y + i*8));
}
}
}

Model *modelQuadSeq = Model::create<QuadSeq, QuadSeqWidget>("Aepelzens Modules", "QuadSeq", "Quad Sequencer", SEQUENCER_TAG);

+ 0
- 103
repos/AepelzensModules/src/Walker.cpp View File

@@ -1,103 +0,0 @@
#include "aepelzen.hpp"
#include "dsp/digital.hpp"

struct Walker : Module
{
enum ParamIds
{
STEP_PARAM,
STEP_ATT_PARAM,
SYM_PARAM,
RANGE_PARAM,
RANGE_ATT_PARAM,
RANGE_MODE_PARAM,
NUM_PARAMS
};
enum InputIds
{
CLOCK_INPUT,
STEP_INPUT,
RANGE_INPUT,
NUM_INPUTS
};
enum OutputIds
{
CV_OUTPUT,
NUM_OUTPUTS
};

enum LightIds
{
NUM_LIGHTS
};

void step() override;

Walker() : Module(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS) {
}

void reset() override {}

SchmittTrigger clockTrigger;
float stepsize, range, sym, cvout;
int mode = 1;
};

void Walker::step()
{
stepsize = clampf(params[STEP_PARAM].value + inputs[STEP_INPUT].value/5.0 * params[STEP_ATT_PARAM].value, 0.0, 1.0);
range = clampf(params[RANGE_PARAM].value + inputs[RANGE_INPUT].value * params[RANGE_ATT_PARAM].value, 0.0, 5.0);
mode = (int)params[RANGE_MODE_PARAM].value;
if( clockTrigger.process(inputs[CLOCK_INPUT].value) ) {
float rand = randomf();
cvout += (rand > 0.5 - params[SYM_PARAM].value / 2.0) ? + stepsize : -stepsize;
if(cvout > range || cvout < -range) {
switch (mode) {
case 1:
cvout = clampf(cvout, -range, range);
break;
case 2:
cvout = 0;
break;
case 3:
cvout = randomf() * range/2;
if (randomf() < 0.5 - params[SYM_PARAM].value / 2.0)
cvout = -cvout;
break;
}
}
}
outputs[CV_OUTPUT].value = cvout;
return;
}

struct WalkerWidget : ModuleWidget
{
SVGPanel *panel;
WalkerWidget(Walker *module);
};

WalkerWidget::WalkerWidget(Walker *module) : ModuleWidget(module)
{
box.size = Vec(4 * 15, RACK_GRID_HEIGHT);

panel = new SVGPanel();
panel->box.size = box.size;
panel->setBackground(SVG::load(assetPlugin(plugin, "res/Walker.svg")));
addChild(panel);

addParam(ParamWidget::create<RoundSmallBlackKnob>(Vec(16, 40), module, Walker::STEP_PARAM, 0.0, 1.0, 0.1));
addParam(ParamWidget::create<Trimpot>(Vec(21.5, 80), module, Walker::STEP_ATT_PARAM, -1.0, 1.0, 0));
addParam(ParamWidget::create<RoundSmallBlackKnob>(Vec(16, 110), module, Walker::RANGE_PARAM, 0, 5.0, 2.0));
addParam(ParamWidget::create<Trimpot>(Vec(21.5, 150), module, Walker::RANGE_ATT_PARAM, -1.0, 1.0, 0.0));
addParam(ParamWidget::create<BefacoSwitch>(Vec(16, 172.5), module, Walker::RANGE_MODE_PARAM, 1, 3, 1));
addParam(ParamWidget::create<RoundSmallBlackKnob>(Vec(16, 210), module, Walker::SYM_PARAM, -1.0, 1.0, 0));

addInput(Port::create<PJ301MPort>(Vec(3, 320), Port::INPUT, module, Walker::CLOCK_INPUT));;
addInput(Port::create<PJ301MPort>(Vec(3, 276), Port::INPUT, module, Walker::STEP_INPUT));;
addInput(Port::create<PJ301MPort>(Vec(30, 276), Port::INPUT, module, Walker::RANGE_INPUT));;
addOutput(Port::create<PJ301MPort>(Vec(30,320), Port::OUTPUT, module, Walker::CV_OUTPUT));
}

Model *modelWalker = Model::create<Walker, WalkerWidget>("Aepelzens Modules", "Walker", "Random Walk", UTILITY_TAG, RANDOM_TAG);

+ 0
- 76
repos/AepelzensModules/src/Werner.cpp View File

@@ -1,76 +0,0 @@
#include "aepelzen.hpp"
#include "dsp/digital.hpp"

#define NUM_CHANNELS 4

struct Werner : Module {
enum ParamIds {
TIME_PARAM,
DELTA_PARAM,
NUM_PARAMS
};
enum InputIds {
CV_INPUT,
NUM_INPUTS = NUM_CHANNELS
};
enum OutputIds {
GATE_OUTPUT,
NUM_OUTPUTS = NUM_CHANNELS
};
enum LightIds {
NUM_LIGHTS
};

Werner() : Module(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS) {}
void step() override;

PulseGenerator gatePulse[NUM_CHANNELS];
float lastValue[NUM_CHANNELS];
int res = 16;
float minDelta = 0;
int frame = 0;
};


void Werner::step() {
//max time is about 100ms at 44kHz
res = (int)clamp(params[TIME_PARAM].value * 4400.0f, 16.0f, 4400.0f);
minDelta = params[DELTA_PARAM].value * 2.0f;

if(++frame > res) {
for(int i=0; i<NUM_CHANNELS;i++) {
float value = inputs[CV_INPUT + i].value;

if(abs(value - lastValue[i]) > minDelta) {
gatePulse[i].trigger(0.01);
}

lastValue[i] = value;
}
frame = 0;
}

for(int i=0; i<NUM_CHANNELS;i++) {
outputs[GATE_OUTPUT + i].value = gatePulse[i].process(1.0 / engineGetSampleRate()) ? 10.0 : 0.0;
}
}


struct WernerWidget : ModuleWidget
{
WernerWidget(Werner *module);
};

WernerWidget::WernerWidget(Werner *module) : ModuleWidget(module) {
setPanel(SVG::load(assetPlugin(plugin, "res/Werner.svg")));

addParam(ParamWidget::create<Trimpot>(Vec(6, 30), module, Werner::TIME_PARAM, 0.0, 1.0, 0.0));
addParam(ParamWidget::create<Trimpot>(Vec(6, 75), module, Werner::DELTA_PARAM, 0.0, 1.0, 0.0));

for(int i=0;i<NUM_CHANNELS;i++) {
addInput(Port::create<PJ301MPort>(Vec(3, 125 + i*30), Port::INPUT, module, Werner::CV_INPUT + i));
addOutput(Port::create<PJ301MPort>(Vec(3, 250 + i*30), Port::OUTPUT, module, Werner::GATE_OUTPUT + i));
}
}

Model *modelWerner = Model::create<Werner, WernerWidget>("Aepelzens Modules", "Werner", "CV-to-Trigger", UTILITY_TAG);

+ 0
- 19
repos/AepelzensModules/src/aepelzen.cpp View File

@@ -1,19 +0,0 @@
#include "aepelzen.hpp"
#include <math.h>

Plugin *plugin;

void init(rack::Plugin *p) {
plugin = p;
plugin->slug = TOSTRING(SLUG);
p->version = TOSTRING(VERSION);

p->addModel(modelQuadSeq);
p->addModel(modelGateSeq);
p->addModel(modelDice);
p->addModel(modelBurst);
p->addModel(modelFolder);
p->addModel(modelWalker);
p->addModel(modelErwin);
p->addModel(modelWerner);
}

+ 0
- 21
repos/AepelzensModules/src/aepelzen.hpp View File

@@ -1,21 +0,0 @@
#include "rack.hpp"

using namespace rack;

extern Plugin *plugin;

struct Knob29 : RoundKnob {
Knob29() {
setSVG(SVG::load(assetPlugin(plugin, "res/knob_29px.svg")));
box.size = Vec(29, 29);
}
};

extern Model *modelQuadSeq;
extern Model *modelGateSeq;
extern Model *modelDice;
extern Model *modelBurst;
extern Model *modelFolder;
extern Model *modelWalker;
extern Model *modelErwin;
extern Model *modelWerner;

+ 0
- 253
repos/AepelzensModules/src/burst.cpp View File

@@ -1,253 +0,0 @@
#include "aepelzen.hpp"
#include "dsp/digital.hpp"
#include <math.h>

#define MAX_REPS 8
#define MAX_TIME 1

struct Burst : Module
{
enum ParamIds
{
BUTTON_PARAM,
TIME_PARAM,
REP_PARAM,
ACCEL_PARAM,
JITTER_PARAM,
CV_MODE_PARAM,
GATE_MODE_PARAM,
REP_ATT_PARAM,
TIME_ATT_PARAM,
NUM_PARAMS = TIME_ATT_PARAM
};
enum InputIds
{
GATE_INPUT,
CLOCK_INPUT,
REP_INPUT,
TIME_INPUT,
NUM_INPUTS = TIME_INPUT
};
enum OutputIds
{
GATE_OUTPUT,
EOC_OUTPUT,
CV_OUTPUT,
NUM_OUTPUTS = CV_OUTPUT
};

enum LightIds
{
NUM_LIGHTS
};

enum CvModes
{
CV_UP,
CV_DOWN,
CV_MODE3,
CV_MODE4,
CV_MODE_RANDOMP,
CV_MODE_RANDOMN,
CV_MODE_RANDOM,
};

const float euler = exp(1);
float timeParam = 0;
float clockedTimeParam = 0;
float pulseParam = 4;
float timer = 0;
float seconds = 0;
int pulseCount = 0;
int pulses = 4;
float delta = 0;
float randomcv = 0;
float cvOut = 0;

SchmittTrigger m_buttonTrigger;
SchmittTrigger gateTrigger;;
SchmittTrigger clockTrigger;

PulseGenerator outPulse;
PulseGenerator eocPulse;

//toggle for every received clock tick
float clockTimer = 0;
float lastClockTime = 0;
float gateOutLength = 0.01;

void step() override;

Burst() : Module(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS) {
reset();
}

void reset() override
{
onSampleRateChange();
}

void onSampleRateChange() override {delta = 1.0/engineGetSampleRate();}

void randomize() override {}
};

void Burst::step()
{
//ModuleWidget::step();
float schmittValue = gateTrigger.process(inputs[GATE_INPUT].value);

//seconds = params[TIME_PARAM].value + (inputs[TIME_INPUT].value / 20.0);
float accel = params[ACCEL_PARAM].value;
float jitter = params[JITTER_PARAM].value;
float randomDelta = 0;

timeParam = clampf(params[TIME_PARAM].value + (params[TIME_ATT_PARAM].value * inputs[TIME_INPUT].value / 10.0 * MAX_TIME),0.0, MAX_TIME);
pulseParam = clampf(params[REP_PARAM].value + (inputs[REP_INPUT].value * params[REP_ATT_PARAM].value /10.0 * MAX_REPS), 0.0, MAX_REPS);

//exponential scaling for timeparam
timeParam = (exp(timeParam) - 1)/(euler - 1);

if (inputs[CLOCK_INPUT].active) {
clockTimer += delta;
if( clockTrigger.process(inputs[CLOCK_INPUT].value) ) {
timeParam = params[TIME_PARAM].value;
int mult = (int)(timeParam*8 - 4);
//smooth clock (over 8 pulses) to reduce sensitivity
// float clockDelta = clockTimer - lastClockTime;
// clockTimer -= clockTimer - (clockDelta/8);
lastClockTime = clockTimer;

timeParam = clockTimer * pow(2, mult);
clockedTimeParam = timeParam;
clockTimer = 0;
}
timeParam = clockedTimeParam;
}

if( timer > seconds && pulseCount < pulses ) {
pulseCount ++;
timer = 0.0;

seconds = timeParam;

if(accel > 0) {
seconds = timeParam/pow(accel,pulseCount);
}

if(jitter > 0) {
randomDelta = randomf() * jitter * seconds;
if (randomf() > 0.5) {
seconds = seconds + randomDelta;
}
else {
seconds = seconds - randomDelta;
}
}

if (pulseCount == pulses) {
eocPulse.trigger(0.01);
}
gateOutLength = (params[GATE_MODE_PARAM].value) ? 0.01 : seconds/2;
outPulse.trigger(gateOutLength);
randomcv = randomf();

//cv
float cvDelta = 5.0/pulses;
int mode = roundf(params[CV_MODE_PARAM].value);
switch (mode) {
case CV_UP:
cvOut = pulseCount * cvDelta;
break;
case CV_DOWN:
cvOut = pulseCount * cvDelta * (-1);
break;
case CV_MODE3:
cvOut = trunc((pulseCount + 1)/2) * cvDelta;
if(pulseCount % 2 == 1) {
cvOut *= -1;
}
break;
case CV_MODE4:
cvOut = pulseCount * cvDelta;
if(pulseCount %2 == 1) {
cvOut *= -1;
}
break;
case CV_MODE_RANDOMP:
cvOut = randomcv *5.0;
break;
case CV_MODE_RANDOMN:
cvOut = randomcv * (-5.0);
break;
case CV_MODE_RANDOM:
cvOut = randomcv *10 - 5;
break;
}
}

if (schmittValue || m_buttonTrigger.process(params[BUTTON_PARAM].value)) {
pulseCount = 0;
timer = 0.0;
//outPulse.trigger(0.01);
outPulse.trigger(gateOutLength);
seconds = timeParam;
pulses = pulseParam;
//outputs[CV_OUTPUT].value = 0;
cvOut = 0;
}

timer += delta;
outputs[GATE_OUTPUT].value = outPulse.process(delta) ? 10.0 : 0.0;
outputs[EOC_OUTPUT].value = eocPulse.process(delta) ? 10.0 : 0.0;
outputs[CV_OUTPUT].value = (timer < seconds) ? cvOut : 0.0;
}


struct BurstWidget : ModuleWidget
{
SVGPanel *panel;
BurstWidget(Burst *module);
//void step() override;
};

BurstWidget::BurstWidget(Burst *module) : ModuleWidget(module)
{
//box.size = Vec(6 * RACK_GRID_WIDTH, RACK_GRID_HEIGHT);
box.size = Vec(6 * 15, RACK_GRID_HEIGHT);

panel = new SVGPanel();
panel->box.size = box.size;
panel->setBackground(SVG::load(assetPlugin(plugin, "res/Burst.svg")));
addChild(panel);

// addChild(Widget::create<ScrewSilver>(Vec(15, 0)));
// addChild(Widget::create<ScrewSilver>(Vec(box.size.x - 30, 0)));
// addChild(Widget::create<ScrewSilver>(Vec(15, 365)));
// addChild(Widget::create<ScrewSilver>(Vec(box.size.x - 30, 365)));

//note: SmallKnob size = 28px, Trimpot = 17 px
//addParam(ParamWidget::create<LEDBezel>(Vec(30, 105), module, Burst::BUTTON_PARAM, 0.0, 1.0, 0.0));
addParam(ParamWidget::create<CKD6>(Vec(30, 105), module, Burst::BUTTON_PARAM, 0.0, 1.0, 0.0));
//addParam(ParamWidget::create<RoundSmallBlackKnob>(Vec(35, 50), module, Burst::REP_PARAM, 1, 8, 4));
addParam(ParamWidget::create<Davies1900hLargeBlackKnob>(Vec(18, 30), module, Burst::REP_PARAM, 0, 8, 4));
addParam(ParamWidget::create<RoundSmallBlackKnob>(Vec(10, 150), module, Burst::TIME_PARAM, 0.02, 1, 0.5));
addParam(ParamWidget::create<RoundSmallBlackKnob>(Vec(52, 150), module, Burst::ACCEL_PARAM, 1.0, 2.0, 1.0));
addParam(ParamWidget::create<RoundSmallBlackKnob>(Vec(10, 195), module, Burst::JITTER_PARAM, 0.0, 1.0, 0.0));
addParam(ParamWidget::create<RoundSmallBlackKnob>(Vec(52, 195), module, Burst::CV_MODE_PARAM, 0, 6, 0));

addParam(ParamWidget::create<Trimpot>(Vec(15.5, 240), module, Burst::REP_ATT_PARAM, -1.0, 1.0, 0.0));
addParam(ParamWidget::create<Trimpot>(Vec(54, 240), module, Burst::TIME_ATT_PARAM, -1.0, 1.0, 0.0));
addInput(Port::create<PJ301MPort>(Vec(13, 265), Port::INPUT, module, Burst::REP_INPUT));;
addInput(Port::create<PJ301MPort>(Vec(50, 265), Port::INPUT, module, Burst::TIME_INPUT));;

addInput(Port::create<PJ301MPort>(Vec(5, 305), Port::INPUT, module, Burst::GATE_INPUT));;
addInput(Port::create<PJ301MPort>(Vec(60, 305), Port::INPUT, module, Burst::CLOCK_INPUT));;
addParam(ParamWidget::create<CKSS>(Vec(38, 300), module, Burst::GATE_MODE_PARAM, 0.0, 1.0, 0.0));

addOutput(Port::create<PJ301MPort>(Vec(5,335), Port::OUTPUT, module, Burst::CV_OUTPUT));
addOutput(Port::create<PJ301MPort>(Vec(32.5,335), Port::OUTPUT, module, Burst::EOC_OUTPUT));
addOutput(Port::create<PJ301MPort>(Vec(60,335), Port::OUTPUT, module, Burst::GATE_OUTPUT));
}

Model *modelBurst = Model::create<Burst, BurstWidget>("Aepelzens Modules", "burst", "Burst Generator", SEQUENCER_TAG);

+ 0
- 222
repos/AepelzensModules/src/folder.cpp View File

@@ -1,222 +0,0 @@
#include "aepelzen.hpp"
#include "dsp/digital.hpp"
#include <samplerate.h>

#define BUF_LEN 32
#define UPSAMPLE_RATIO 4

struct Folder : Module
{
enum ParamIds
{
GAIN_PARAM,
GAIN_ATT_PARAM,
SYM_PARAM,
SYM_ATT_PARAM,
STAGE_PARAM,
NUM_PARAMS
};
enum InputIds
{
GATE_INPUT,
GAIN_INPUT,
SYM_INPUT,
NUM_INPUTS
};
enum OutputIds
{
GATE_OUTPUT,
NUM_OUTPUTS
};

enum LightIds
{
NUM_LIGHTS
};

void step() override;

Folder() : Module(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS) {
state = src_new(SRC_SINC_MEDIUM_QUALITY, 1, &error);
state_down = src_new(SRC_SINC_MEDIUM_QUALITY, 1, &error);
}

~Folder() {
src_delete(state);
src_delete(state_down);
}

void reset() override
{
onSampleRateChange();
}

void onSampleRateChange() override {}

void randomize() override {}

json_t *toJson() override {
json_t *rootJ = json_object();
json_object_set_new(rootJ, "alternativeMode", json_boolean(alternativeMode));
return rootJ;
}

void fromJson(json_t *rootJ) override {
json_t *modeJ = json_object_get(rootJ, "alternativeMode");
if(modeJ) {
alternativeMode = json_boolean_value(modeJ);
}
}

float in, out, gain, sym;
float threshold = 1.0;

bool alternativeMode = false;

//variables for samplerate converter
SRC_DATA data;
SRC_DATA data_down;
SRC_STATE* state;
SRC_STATE* state_down;
int error = 0;
int frame = 0;
float in_buffer[BUF_LEN] = {};
float out_buffer[UPSAMPLE_RATIO*BUF_LEN] = {};
float folded_buffer[BUF_LEN] = {};
};

float fold(float in, float threshold) {
float out;
if (in>threshold || in<-threshold) {
out = clamp(fabs(fabs(fmod(in - threshold, threshold*4)) - threshold*2) - threshold, -5.0f,5.0f);
}
else {
out = in;
}
return out;
}

float fold3(float in, float t) {
float out = 0;
if(in>t) {
out = t - (in - t);
}
else if (in < -t) {
out = -t + (-t - in);
}
else {
out = in;
}
return out;
}


void Folder::step()
{
gain = clamp(params[GAIN_PARAM].value + (inputs[GAIN_INPUT].value * params[GAIN_ATT_PARAM].value), 0.0f,14.0f);
sym = clamp(params[SYM_PARAM].value + inputs[SYM_INPUT].value/5.0 * params[SYM_ATT_PARAM].value, -1.0f, 1.0f);
in = (inputs[GATE_INPUT].value/5.0 + sym) * gain;

if(++frame >= BUF_LEN) {
//upsampling
data.data_in = in_buffer;
data.data_out = out_buffer;
data.input_frames = BUF_LEN;
data.output_frames = UPSAMPLE_RATIO*BUF_LEN;
data.src_ratio = UPSAMPLE_RATIO;
data.end_of_input = 0;

src_process(state, &data);

//fold
for(int i=0;i<data.output_frames_gen;i++) {
if(!alternativeMode) {
int stages = (int)(params[STAGE_PARAM].value)*2;
for (int y=0;y<stages;y++) {
out_buffer[i] = fold3(out_buffer[i], threshold);
}
}
else {
out_buffer[i] = fold(out_buffer[i], threshold);
}
out_buffer[i] = tanh(out_buffer[i]);
}

//downsampling
data_down.data_in = out_buffer;
data_down.data_out = folded_buffer;
data_down.input_frames = data.output_frames_gen;
data_down.output_frames = BUF_LEN;
data_down.src_ratio = 1.0/UPSAMPLE_RATIO;
data_down.end_of_input = 0;
src_process(state_down, &data_down);
frame = 0;
}

in_buffer[frame] = in;
//out = folded_buffer[frame] * 5.0;
outputs[GATE_OUTPUT].value = folded_buffer[frame] * 5.0;
return;
}


struct FolderWidget : ModuleWidget
{
SVGPanel *panel;
FolderWidget(Folder *module);
Menu *createContextMenu() override;
};

FolderWidget::FolderWidget(Folder *module) : ModuleWidget(module)
{
//box.size = Vec(6 * RACK_GRID_WIDTH, RACK_GRID_HEIGHT);
box.size = Vec(4 * 15, RACK_GRID_HEIGHT);

panel = new SVGPanel();
panel->box.size = box.size;
panel->setBackground(SVG::load(assetPlugin(plugin, "res/Folder.svg")));
addChild(panel);

// addChild(Widget::create<ScrewSilver>(Vec(15, 0)));
// addChild(Widget::create<ScrewSilver>(Vec(box.size.x - 30, 0)));
// addChild(Widget::create<ScrewSilver>(Vec(15, 365)));
// addChild(Widget::create<ScrewSilver>(Vec(box.size.x - 30, 365)));

//note: SmallKnob size = 28px, Trimpot = 17 px
addParam(ParamWidget::create<BefacoSwitch>(Vec(16, 50), module, Folder::STAGE_PARAM, 1, 3, 2));
addParam(ParamWidget::create<RoundSmallBlackKnob>(Vec(16, 100), module, Folder::GAIN_PARAM, 0.0, 14.0, 1.0));
addParam(ParamWidget::create<Trimpot>(Vec(21.5, 145), module, Folder::GAIN_ATT_PARAM, -1.0, 1.0, 0));
addParam(ParamWidget::create<RoundSmallBlackKnob>(Vec(16, 185), module, Folder::SYM_PARAM, -1.0, 1.0, 0.0));
addParam(ParamWidget::create<Trimpot>(Vec(21.5, 230), module, Folder::SYM_ATT_PARAM, -1.0, 1.0, 0.0));


addInput(Port::create<PJ301MPort>(Vec(3, 320), Port::INPUT, module, Folder::GATE_INPUT));;
addInput(Port::create<PJ301MPort>(Vec(3, 276), Port::INPUT, module, Folder::GAIN_INPUT));;
addInput(Port::create<PJ301MPort>(Vec(30, 276), Port::INPUT, module, Folder::SYM_INPUT));;
addOutput(Port::create<PJ301MPort>(Vec(30,320), Port::OUTPUT, module, Folder::GATE_OUTPUT));
}

struct FolderMenuItem : MenuItem {
Folder *module;
void onAction(EventAction &e) override {
module->alternativeMode ^= true;
}
void step() override {
rightText = (module->alternativeMode) ? "✔" : "";
MenuItem::step();
}
};

Menu *FolderWidget::createContextMenu() {
Menu *menu = ModuleWidget::createContextMenu();

Folder *folder = dynamic_cast<Folder*>(module);
assert(folder);

menu->addChild(construct<MenuEntry>());
menu->addChild(construct<FolderMenuItem>(&FolderMenuItem::text, "Alternative Folding Algorithm", &FolderMenuItem::module, folder));

return menu;
}

Model *modelFolder = Model::create<Folder, FolderWidget>("Aepelzens Modules", "folder", "Manifold", WAVESHAPER_TAG);

+ 0
- 29
repos/AmalgamatedHarmonics/LICENSE View File

@@ -1,29 +0,0 @@
BSD 3-Clause License

Copyright (c) 2017, John Hoar
All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:

* Redistributions of source code must retain the above copyright notice, this
list of conditions and the following disclaimer.

* Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.

* Neither the name of the copyright holder nor the names of its
contributors may be used to endorse or promote products derived from
this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "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 COPYRIGHT HOLDER OR CONTRIBUTORS 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.

+ 0
- 27
repos/AmalgamatedHarmonics/Makefile View File

@@ -1,27 +0,0 @@
# Must follow the format in the Naming section of https://vcvrack.com/manual/PluginDevelopmentTutorial.html
SLUG = AmalgamatedHarmonics

# Must follow the format in the Versioning section of https://vcvrack.com/manual/PluginDevelopmentTutorial.html
VERSION = 0.6.9

# FLAGS will be passed to both the C and C++ compiler
FLAGS +=
CFLAGS +=
CXXFLAGS +=

# Careful about linking to shared libraries, since you can't assume much about the user's environment and library search path.
# Static libraries are fine.
LDFLAGS +=

# Add .cpp and .c files to the build
SOURCES += $(wildcard src/*.cpp)

# Add files to the ZIP package when running `make dist`
# The compiled plugin is automatically added.
DISTRIBUTABLES += $(wildcard LICENSE*) res

# If RACK_DIR is not defined when calling the Makefile, default to two levels above
RACK_DIR ?= ../..

# Include the VCV Rack plugin Makefile framework
include $(RACK_DIR)/plugin.mk

+ 0
- 10
repos/AmalgamatedHarmonics/README.md View File

@@ -1,10 +0,0 @@
Welcome to the Amalgamated Harmonics; your one-stop shop for barely usable modules for [VCVRack](www.vcvrack.com).

* [Scale Quantizer](https://github.com/jhoar/AmalgamatedHarmonics/wiki/Scale-Quantizer), a scale-aware quantizer with multiple input and outputs
* [Arpeggiator](https://github.com/jhoar/AmalgamatedHarmonics/wiki/Arpeggiator), a multi-input arpeggiator
* [Progress](https://github.com/jhoar/AmalgamatedHarmonics/wiki/Progress), a chord sequencer
* [Fifths and Fourths](https://github.com/jhoar/AmalgamatedHarmonics/wiki/54), an implementation of the Circle of Fifths intended to work with Progress and Scale Quantizer
* [Imperfect](https://github.com/jhoar/AmalgamatedHarmonics/wiki/Imperfect), a trigger-to-gate and clock divider module.

The latest release is [0.5.8](https://github.com/jhoar/AmalgamatedHarmonics/releases/tag/v0.5.8)


BIN
repos/AmalgamatedHarmonics/doc/54.jpg View File

Before After
Width: 251  |  Height: 400  |  Size: 37KB

BIN
repos/AmalgamatedHarmonics/doc/arp.jpg View File

Before After
Width: 253  |  Height: 400  |  Size: 40KB

BIN
repos/AmalgamatedHarmonics/doc/arp2.jpg View File

Before After
Width: 400  |  Height: 631  |  Size: 75KB

BIN
repos/AmalgamatedHarmonics/doc/imperfect.jpg View File

Before After
Width: 332  |  Height: 400  |  Size: 52KB

BIN
repos/AmalgamatedHarmonics/doc/progress.jpg View File

Before After
Width: 486  |  Height: 400  |  Size: 66KB

BIN
repos/AmalgamatedHarmonics/doc/quant1.jpg View File

Before After
Width: 253  |  Height: 400  |  Size: 47KB

BIN
repos/AmalgamatedHarmonics/doc/quant2.jpg View File

Before After
Width: 253  |  Height: 400  |  Size: 43KB

+ 0
- 1936
repos/AmalgamatedHarmonics/res/Arpeggiator.svg
File diff suppressed because it is too large
View File


+ 0
- 1943
repos/AmalgamatedHarmonics/res/Arpeggiator2.svg
File diff suppressed because it is too large
View File


+ 0
- 2146
repos/AmalgamatedHarmonics/res/Circle.svg
File diff suppressed because it is too large
View File


+ 0
- 81
repos/AmalgamatedHarmonics/res/ComponentLibrary/AHButton.svg View File

@@ -1,81 +0,0 @@
<?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"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="17.999601"
height="18"
viewBox="0 0 4.7623944 4.7624998"
version="1.1"
id="svg7595"
inkscape:version="0.92.2 5c3e80d, 2017-08-06"
sodipodi:docname="AHButton.svg">
<defs
id="defs7589">
<clipPath
id="clip444">
<path
d="m 1201.582,338.19922 h 18 v 18 h -18 z m 0,0"
id="path24586"
inkscape:connector-curvature="0" />
</clipPath>
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="7.9195959"
inkscape:cx="-67.764383"
inkscape:cy="0.82092183"
inkscape:document-units="mm"
inkscape:current-layer="layer1"
showgrid="false"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0"
inkscape:window-width="2560"
inkscape:window-height="1396"
inkscape:window-x="0"
inkscape:window-y="18"
inkscape:window-maximized="0"
units="px" />
<metadata
id="metadata7592">
<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 />
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-46.755712,-67.833036)">
<g
transform="matrix(0.26458333,0,0,0.26458333,-271.16296,-21.64884)"
clip-path="url(#clip444)"
id="g31387"
style="clip-rule:nonzero;fill:#d4af37;fill-opacity:1">
<path
style="fill:#d4af37;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="m 1202.125,344.12109 c -1.6953,4.66797 0.7148,9.83594 5.3789,11.53516 4.6719,1.69531 9.8359,-0.71094 11.5352,-5.37891 1.6992,-4.67187 -0.7071,-9.83203 -5.3789,-11.53515 -4.668,-1.69532 -9.8282,0.70703 -11.5352,5.3789"
id="path31385"
inkscape:connector-curvature="0" />
</g>
</g>
</svg>

+ 0
- 101
repos/AmalgamatedHarmonics/res/ComponentLibrary/AHKnob.svg View File

@@ -1,101 +0,0 @@
<?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"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="23.005993"
height="23.005983"
viewBox="0 0 6.087002 6.0869995"
version="1.1"
id="svg16908"
inkscape:version="0.92.2 5c3e80d, 2017-08-06"
sodipodi:docname="AHKnob1.svg">
<defs
id="defs16902">
<clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath6367">
<path
d="M 0,3193 H 2089 V 0 H 0 Z"
id="path6365"
inkscape:connector-curvature="0" />
</clipPath>
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="12.833327"
inkscape:cx="2.9610326"
inkscape:cy="18.000787"
inkscape:document-units="mm"
inkscape:current-layer="layer1"
showgrid="false"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0"
inkscape:window-width="1503"
inkscape:window-height="1003"
inkscape:window-x="766"
inkscape:window-y="55"
inkscape:window-maximized="0"
units="px" />
<metadata
id="metadata16905">
<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>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-230.09584,-126.67083)">
<g
style="fill:#000000;fill-opacity:1;stroke-width:1.33335185"
id="g6443"
transform="matrix(0.16908321,0,0,-0.16907394,236.18284,129.71437)">
<path
d="m 0,0 c 0,-9.941 -8.06,-18 -18,-18 -9.941,0 -18,8.059 -18,18 0,9.941 8.059,18 18,18 C -8.06,18 0,9.941 0,0"
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.33335185"
id="path6445"
inkscape:connector-curvature="0" />
</g>
<g
style="fill:#d4af37;fill-opacity:1;stroke-width:1.33335185"
id="g6447"
transform="matrix(0.16908321,0,0,-0.16907394,236.1656,129.39275)">
<path
d="m 0,0 c -0.79,1.279 -2.12,2.537 -2.86,4.327 -0.74,1.784 -0.691,3.609 -1.033,5.067 -0.805,0.997 -1.711,1.902 -2.709,2.708 -1.459,0.341 -3.282,0.293 -5.068,1.033 -1.79,0.742 -3.048,2.069 -4.325,2.86 -0.625,0.066 -1.26,0.104 -1.902,0.104 -0.644,0 -1.279,-0.038 -1.903,-0.104 -1.279,-0.791 -2.537,-2.118 -4.327,-2.86 -1.784,-0.74 -3.607,-0.692 -5.067,-1.033 -0.997,-0.806 -1.904,-1.711 -2.708,-2.708 -0.342,-1.458 -0.294,-3.283 -1.035,-5.067 -0.74,-1.79 -2.069,-3.048 -2.858,-4.327 -0.066,-0.625 -0.103,-1.26 -0.103,-1.902 0,-0.643 0.037,-1.278 0.103,-1.905 0.789,-1.277 2.118,-2.535 2.858,-4.325 0.741,-1.784 0.693,-3.609 1.035,-5.066 0.804,-0.998 1.711,-1.904 2.708,-2.709 1.46,-0.342 3.283,-0.293 5.067,-1.032 1.79,-0.743 3.048,-2.071 4.327,-2.861 0.624,-0.065 1.259,-0.103 1.903,-0.103 0.642,0 1.277,0.038 1.902,0.103 1.277,0.79 2.535,2.118 4.325,2.861 1.786,0.739 3.609,0.69 5.068,1.032 0.998,0.805 1.904,1.711 2.709,2.709 0.342,1.457 0.293,3.282 1.033,5.066 0.74,1.79 2.07,3.048 2.86,4.325 0.065,0.627 0.102,1.262 0.102,1.905 C 0.102,-1.26 0.065,-0.625 0,0"
style="fill:#d4af37;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.33335185"
id="path6449"
inkscape:connector-curvature="0" />
</g>
<g
style="fill:#000000;fill-opacity:1;stroke-width:1.33335185"
id="g6451"
transform="matrix(0.16908321,0,0,-0.16907394,233.24057,126.68261)">
<path
d="M 0,0 C -0.195,0.045 -0.393,0.069 -0.598,0.069 -0.804,0.069 -1.002,0.045 -1.196,0 V -18.157 H 0 Z"
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.33335185"
id="path6453"
inkscape:connector-curvature="0" />
</g>
</g>
</svg>

+ 0
- 433
repos/AmalgamatedHarmonics/res/ComponentLibrary/AHTrimpot.svg View File

@@ -1,433 +0,0 @@
<?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"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="6.2990241mm"
height="6.3003879mm"
viewBox="0 0 6.2990242 6.3003887"
version="1.1"
id="svg15246"
sodipodi:docname="Trimpot.svg"
inkscape:version="0.92.2 5c3e80d, 2017-08-06">
<defs
id="defs15240">
<clipPath
id="clip89">
<rect
y="0"
x="0"
width="18"
height="19"
id="rect4864" />
</clipPath>
<clipPath
id="clip90">
<path
inkscape:connector-curvature="0"
d="m 0.898438,0.128906 h 16.25 v 17.882813 h -16.25 z m 0,0"
id="path4861" />
</clipPath>
<mask
id="mask44">
<g
style="filter:url(#alpha)"
id="g4858"
transform="matrix(0.26458333,0,0,0.26458333,89.358789,128.57765)">
<rect
x="0"
y="0"
width="3052.8701"
height="3351.5"
style="fill:#000000;fill-opacity:0.14999402;stroke:none"
id="rect4856" />
</g>
</mask>
<filter
id="alpha"
filterUnits="objectBoundingBox"
x="0"
y="0"
width="1"
height="1">
<feColorMatrix
type="matrix"
in="SourceGraphic"
values="0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 1 0"
id="feColorMatrix4149" />
</filter>
<clipPath
id="clipPath17821">
<rect
y="0"
x="0"
width="18"
height="19"
id="rect17819" />
</clipPath>
<clipPath
id="clipPath17825">
<path
inkscape:connector-curvature="0"
d="m 0.898438,0.128906 h 16.25 v 17.882813 h -16.25 z m 0,0"
id="path17823" />
</clipPath>
<clipPath
id="clip87">
<rect
y="0"
x="0"
width="24"
height="26"
id="rect4848" />
</clipPath>
<clipPath
id="clip88">
<path
inkscape:connector-curvature="0"
d="m 0.683594,0.921875 h 22.679687 v 24.9375 H 0.683594 Z m 0,0"
id="path4845" />
</clipPath>
<mask
id="mask43">
<g
style="filter:url(#alpha)"
id="g4842"
transform="matrix(0.26458333,0,0,0.26458333,89.358789,128.57765)">
<rect
x="0"
y="0"
width="3052.8701"
height="3351.5"
style="fill:#000000;fill-opacity:0.14999402;stroke:none"
id="rect4840" />
</g>
</mask>
<filter
id="filter17836"
filterUnits="objectBoundingBox"
x="0"
y="0"
width="1"
height="1">
<feColorMatrix
type="matrix"
in="SourceGraphic"
values="0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 1 0"
id="feColorMatrix17834" />
</filter>
<clipPath
id="clipPath17840">
<rect
y="0"
x="0"
width="24"
height="26"
id="rect17838" />
</clipPath>
<clipPath
id="clipPath17844">
<path
inkscape:connector-curvature="0"
d="m 0.683594,0.921875 h 22.679687 v 24.9375 H 0.683594 Z m 0,0"
id="path17842" />
</clipPath>
<clipPath
id="clip95">
<rect
y="0"
x="0"
width="18"
height="18"
id="rect4912" />
</clipPath>
<clipPath
id="clip96">
<path
inkscape:connector-curvature="0"
d="M 0.140625,0.140625 H 17.199219 V 17.199219 H 0.140625 Z m 0,0"
id="path4909" />
</clipPath>
<mask
id="mask47">
<g
style="filter:url(#alpha-3)"
id="g4906"
transform="matrix(0.26458333,0,0,0.26458333,88.611154,119.19859)">
<rect
x="0"
y="0"
width="3052.8701"
height="3351.5"
style="fill:#000000;fill-opacity:0.33000201;stroke:none"
id="rect4904" />
</g>
</mask>
<filter
id="alpha-3"
filterUnits="objectBoundingBox"
x="0"
y="0"
width="1"
height="1">
<feColorMatrix
type="matrix"
in="SourceGraphic"
values="0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 1 0"
id="feColorMatrix4149-6" />
</filter>
<clipPath
id="clipPath18541">
<rect
y="0"
x="0"
width="18"
height="18"
id="rect18539" />
</clipPath>
<clipPath
id="clipPath18545">
<path
inkscape:connector-curvature="0"
d="M 0.140625,0.140625 H 17.199219 V 17.199219 H 0.140625 Z m 0,0"
id="path18543" />
</clipPath>
<clipPath
id="clip93">
<rect
y="0"
x="0"
width="22"
height="24"
id="rect4896" />
</clipPath>
<clipPath
id="clip94">
<path
inkscape:connector-curvature="0"
d="M 0.0390625,0.0390625 H 21.300781 V 23.421875 H 0.0390625 Z m 0,0"
id="path4893" />
</clipPath>
<mask
id="mask46">
<g
style="filter:url(#alpha-3)"
id="g4890"
transform="matrix(0.26458333,0,0,0.26458333,88.611154,119.19859)">
<rect
x="0"
y="0"
width="3052.8701"
height="3351.5"
style="fill:#000000;fill-opacity:0.14999402;stroke:none"
id="rect4888" />
</g>
</mask>
<filter
id="filter18556"
filterUnits="objectBoundingBox"
x="0"
y="0"
width="1"
height="1">
<feColorMatrix
type="matrix"
in="SourceGraphic"
values="0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 1 0"
id="feColorMatrix18554" />
</filter>
<clipPath
id="clipPath18560">
<rect
y="0"
x="0"
width="22"
height="24"
id="rect18558" />
</clipPath>
<clipPath
id="clipPath18564">
<path
inkscape:connector-curvature="0"
d="M 0.0390625,0.0390625 H 21.300781 V 23.421875 H 0.0390625 Z m 0,0"
id="path18562" />
</clipPath>
<clipPath
id="clip91">
<rect
y="0"
x="0"
width="29"
height="32"
id="rect4880" />
</clipPath>
<clipPath
id="clip92">
<path
inkscape:connector-curvature="0"
d="M 0.507812,0.5 H 28.855469 V 31.679688 H 0.507812 Z m 0,0"
id="path4877" />
</clipPath>
<mask
id="mask45">
<g
style="filter:url(#alpha-3)"
id="g4874"
transform="matrix(0.26458333,0,0,0.26458333,88.611154,119.19859)">
<rect
x="0"
y="0"
width="3052.8701"
height="3351.5"
style="fill:#000000;fill-opacity:0.14999402;stroke:none"
id="rect4872" />
</g>
</mask>
<filter
id="filter18575"
filterUnits="objectBoundingBox"
x="0"
y="0"
width="1"
height="1">
<feColorMatrix
type="matrix"
in="SourceGraphic"
values="0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 1 0"
id="feColorMatrix18573" />
</filter>
<clipPath
id="clipPath18579">
<rect
y="0"
x="0"
width="29"
height="32"
id="rect18577" />
</clipPath>
<clipPath
id="clipPath18583">
<path
inkscape:connector-curvature="0"
d="M 0.507812,0.5 H 28.855469 V 31.679688 H 0.507812 Z m 0,0"
id="path18581" />
</clipPath>
<clipPath
id="clip202">
<rect
y="0"
x="0"
width="18"
height="18"
id="rect5795" />
</clipPath>
<clipPath
id="clip203">
<path
inkscape:connector-curvature="0"
d="M 0.855469,0.140625 H 17.914062 V 17.199219 H 0.855469 Z m 0,0"
id="path5792" />
</clipPath>
<mask
id="mask104">
<g
style="filter:url(#alpha-7)"
id="g5789"
transform="matrix(0.26458333,0,0,0.26458333,74.416306,97.613551)">
<rect
x="0"
y="0"
width="3052.8701"
height="3351.5"
style="fill:#000000;fill-opacity:0.33000201;stroke:none"
id="rect5787" />
</g>
</mask>
<filter
id="alpha-7"
filterUnits="objectBoundingBox"
x="0"
y="0"
width="1"
height="1">
<feColorMatrix
type="matrix"
in="SourceGraphic"
values="0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 1 0"
id="feColorMatrix4149-5" />
</filter>
<clipPath
id="clipPath18765">
<rect
y="0"
x="0"
width="18"
height="18"
id="rect18763" />
</clipPath>
<clipPath
id="clipPath18769">
<path
inkscape:connector-curvature="0"
d="M 0.855469,0.140625 H 17.914062 V 17.199219 H 0.855469 Z m 0,0"
id="path18767" />
</clipPath>
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="5.6"
inkscape:cx="26.106375"
inkscape:cy="37.463453"
inkscape:document-units="mm"
inkscape:current-layer="layer1"
showgrid="false"
inkscape:window-width="1274"
inkscape:window-height="856"
inkscape:window-x="154"
inkscape:window-y="0"
inkscape:window-maximized="0"
units="px"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0" />
<metadata
id="metadata15243">
<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 />
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-46.318588,-97.647662)">
<path
inkscape:connector-curvature="0"
id="path7219"
d="m 46.318588,100.79786 c 0,1.74046 1.409735,3.15019 3.1502,3.15019 1.739088,0 3.148824,-1.40973 3.148824,-3.15019 0,-1.739087 -1.409736,-3.150198 -3.148824,-3.150198 -1.740465,0 -3.1502,1.411111 -3.1502,3.150198"
style="fill:#d4af37;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.35277775" />
<path
inkscape:connector-curvature="0"
id="path7221"
d="m 49.672764,97.658686 c -0.06752,-0.0055 -0.135079,-0.01101 -0.203976,-0.01101 -0.0689,0 -0.137795,0.0055 -0.205317,0.01101 v 3.139174 h 0.409293 z m 0,0"
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.35277775" />
</g>
</svg>

+ 0
- 95
repos/AmalgamatedHarmonics/res/DSEG-LICENSE.txt View File

@@ -1,95 +0,0 @@
Copyright (c) 2017, keshikan (http://www.keshikan.net),
with Reserved Font Name "DSEG".
This Font Software is licensed under the SIL Open Font License, Version 1.1.
This license is copied below, and is also available with a FAQ at:
http://scripts.sil.org/OFL
-----------------------------------------------------------
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
-----------------------------------------------------------
PREAMBLE
The goals of the Open Font License (OFL) are to stimulate worldwide
development of collaborative font projects, to support the font creation
efforts of academic and linguistic communities, and to provide a free and
open framework in which fonts may be shared and improved in partnership
with others.
The OFL allows the licensed fonts to be used, studied, modified and
redistributed freely as long as they are not sold by themselves. The
fonts, including any derivative works, can be bundled, embedded,
redistributed and/or sold with any software provided that any reserved
names are not used by derivative works. The fonts and derivatives,
however, cannot be released under any other type of license. The
requirement for fonts to remain under this license does not apply
to any document created using the fonts or their derivatives.
DEFINITIONS
"Font Software" refers to the set of files released by the Copyright
Holder(s) under this license and clearly marked as such. This may
include source files, build scripts and documentation.
"Reserved Font Name" refers to any names specified as such after the
copyright statement(s).
"Original Version" refers to the collection of Font Software components as
distributed by the Copyright Holder(s).
"Modified Version" refers to any derivative made by adding to, deleting,
or substituting -- in part or in whole -- any of the components of the
Original Version, by changing formats or by porting the Font Software to a
new environment.
"Author" refers to any designer, engineer, programmer, technical
writer or other person who contributed to the Font Software.
PERMISSION & CONDITIONS
Permission is hereby granted, free of charge, to any person obtaining
a copy of the Font Software, to use, study, copy, merge, embed, modify,
redistribute, and sell modified and unmodified copies of the Font
Software, subject to the following conditions:
1) Neither the Font Software nor any of its individual components,
in Original or Modified Versions, may be sold by itself.
2) Original or Modified Versions of the Font Software may be bundled,
redistributed and/or sold with any software, provided that each copy
contains the above copyright notice and this license. These can be
included either as stand-alone text files, human-readable headers or
in the appropriate machine-readable metadata fields within text or
binary files as long as those fields can be easily viewed by the user.
3) No Modified Version of the Font Software may use the Reserved Font
Name(s) unless explicit written permission is granted by the corresponding
Copyright Holder. This restriction only applies to the primary font name as
presented to the users.
4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
Software shall not be used to promote, endorse or advertise any
Modified Version, except to acknowledge the contribution(s) of the
Copyright Holder(s) and the Author(s) or with their explicit written
permission.
5) The Font Software, modified or unmodified, in part or in whole,
must be distributed entirely under this license, and must not be
distributed under any other license. The requirement for fonts to
remain under this license does not apply to any document created
using the Font Software.
TERMINATION
This license becomes null and void if any of the above conditions are
not met.
DISCLAIMER
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
OTHER DEALINGS IN THE FONT SOFTWARE.

BIN
repos/AmalgamatedHarmonics/res/DSEG14ClassicMini-BoldItalic.ttf View File


BIN
repos/AmalgamatedHarmonics/res/EurostileBold.ttf View File


+ 0
- 1615
repos/AmalgamatedHarmonics/res/Imperfect.svg
File diff suppressed because it is too large
View File


+ 0
- 1740
repos/AmalgamatedHarmonics/res/Imperfect2.svg
File diff suppressed because it is too large
View File


+ 0
- 2130
repos/AmalgamatedHarmonics/res/Progress.svg
File diff suppressed because it is too large
View File


BIN
repos/AmalgamatedHarmonics/res/Roboto-Light.ttf View File


+ 0
- 1464
repos/AmalgamatedHarmonics/res/Ruckus.svg
File diff suppressed because it is too large
View File


+ 0
- 2313
repos/AmalgamatedHarmonics/res/ScaleQuantizer.svg
File diff suppressed because it is too large
View File


+ 0
- 2230
repos/AmalgamatedHarmonics/res/ScaleQuantizerMkII.svg
File diff suppressed because it is too large
View File


+ 0
- 30
repos/AmalgamatedHarmonics/src/AH.cpp View File

@@ -1,30 +0,0 @@
#include "AH.hpp"

// The plugin-wide instance of the Plugin class
Plugin *plugin;

void init(rack::Plugin *p) {
plugin = p;
// This is the unique identifier for your plugin
p->slug = "AmalgamatedHarmonics";
#ifdef VERSION
p->version = TOSTRING(VERSION);
#endif
p->website = "https://github.com/jhoar/AmalgamatedHarmonics/wiki";
p->manual = "https://github.com/jhoar/AmalgamatedHarmonics/wiki";

// For each module, specify the ModuleWidget subclass, manufacturer slug (for saving in patches), manufacturer human-readable name, module slug,
// and module name
p->addModel(modelArpeggiator);
p->addModel(modelArpeggiator2);
p->addModel(modelCircle);
p->addModel(modelImperfect);
p->addModel(modelImperfect2);
p->addModel(modelProgress);
p->addModel(modelRuckus);
p->addModel(modelScaleQuantizer);
p->addModel(modelScaleQuantizer2);

// Any other plugin initialization may go here.
// As an alternative, consider lazy-loading assets and lookup tables when your module is created to reduce startup times of Rack.
}

+ 0
- 30
repos/AmalgamatedHarmonics/src/AH.hpp View File

@@ -1,30 +0,0 @@
#pragma once

#include "rack.hpp"

using namespace rack;

extern Plugin *plugin;

////////////////////
// module widgets
////////////////////

extern Model *modelArpeggiator;

extern Model *modelArpeggiator2;

extern Model *modelCircle;

extern Model *modelImperfect;

extern Model *modelImperfect2;

extern Model *modelProgress;

extern Model *modelRuckus;

extern Model *modelScaleQuantizer;

extern Model *modelScaleQuantizer2;


+ 0
- 573
repos/AmalgamatedHarmonics/src/Arpeggiator.cpp View File

@@ -1,573 +0,0 @@
#include "AH.hpp"
#include "Core.hpp"
#include "UI.hpp"
#include "componentlibrary.hpp"
#include "dsp/digital.hpp"

#include <iostream>

struct Sequence {
int pDir = 0;
int sDir = 0;
int nStep = 0;
int nDist = 0;
int stepI = 0;
int cycleI = 0;
int stepsRemaining = 0;
int cycleRemaining = 0;
int currDist = 0;
void advanceSequence() {
stepI++;
stepsRemaining--;
}
void advanceCycle() {
cycleI++;
cycleRemaining--;
}
void initSequence(int inputStep, int inputDist, int inputPDir, int inputSDir, bool locked) {
if (!locked) {
nStep = inputStep;
nDist = inputDist;
pDir = inputPDir;
sDir = inputSDir;
}
stepsRemaining = nStep;
stepI = 0;

// At the beginning of the sequence (i.e. dist = 0)
// currDist is the distance from the base note of the sequence, nDist controls the size of the increment
currDist = 0;
}
void setCycle(int n) {
cycleRemaining = n;
cycleI = 0;
}
bool isCycleFinished() {
return (cycleRemaining == 0);
}
bool isSequenceFinished() {
return (stepsRemaining == 0);
}
bool isSequenceStarted() {
return stepI;
}

};

struct Arpeggiator : AHModule {

const static int MAX_STEPS = 16;
const static int MAX_DIST = 12; //Octave
const static int NUM_PITCHES = 6;

enum ParamIds {
STEP_PARAM,
DIST_PARAM,
PDIR_PARAM,
SDIR_PARAM,
LOCK_PARAM,
TRIGGER_PARAM,
NUM_PARAMS
};
enum InputIds {
CLOCK_INPUT,
STEP_INPUT,
DIST_INPUT,
TRIG_INPUT,
PITCH_INPUT,
NUM_INPUTS = PITCH_INPUT + NUM_PITCHES
};
enum OutputIds {
OUT_OUTPUT,
GATE_OUTPUT,
EOC_OUTPUT,
EOS_OUTPUT,
NUM_OUTPUTS
};
enum LightIds {
LOCK_LIGHT,
NUM_LIGHTS
};
Arpeggiator() : AHModule(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS) { }
void step() override;
SchmittTrigger clockTrigger; // for clock
SchmittTrigger trigTrigger; // for step trigger
SchmittTrigger lockTrigger;
SchmittTrigger buttonTrigger;
PulseGenerator triggerPulse;
PulseGenerator gatePulse;
PulseGenerator eosPulse;
PulseGenerator eocPulse;

float pitches[NUM_PITCHES];
float inputPitches[NUM_PITCHES];
bool pitchStatus[NUM_PITCHES];
float pitchValue[NUM_PITCHES];

int inputPDir;
int inputSDir;
int inputStep = 0;
int inputDist = 0;
bool locked = false;

float outVolts;
bool isRunning = false;
bool freeRunning = false;
Sequence seq;
int newSequence = 0;
int newCycle = 0;
const static int LAUNCH = 1;
const static int COUNTDOWN = 3;
int nValidPitches = 0;

int poll = 5000;
};

void Arpeggiator::step() {
stepX++;
// Wait a few steps for the inputs to flow through Rack
if (stepX < 10) {
return;
}
// Get the clock rate and semi-tone
float semiTone = 1.0 / 12.0;
// Get inputs from Rack
float clockInput = inputs[CLOCK_INPUT].value;
float trigInput = inputs[TRIG_INPUT].value;
float trigActive = inputs[TRIG_INPUT].active;
float lockInput = params[LOCK_PARAM].value;
float buttonInput = params[TRIGGER_PARAM].value;
float iPDir = params[PDIR_PARAM].value;
float iSDir = params[SDIR_PARAM].value;
float iStep;
if (inputs[STEP_INPUT].active) {
iStep = inputs[STEP_INPUT].value;
inputStep = round(rescale(iStep, -10.0f, 10.0f, 0.0f, MAX_STEPS));
} else {
iStep = params[STEP_PARAM].value;
inputStep = iStep;
}

float iDist;
if (inputs[DIST_INPUT].active) {
iDist = inputs[DIST_INPUT].value;
inputDist = round(rescale(iDist, -10.0f, 10.0f, 0.0f, MAX_DIST));
} else {
iDist = params[DIST_PARAM].value;
inputDist = iDist;
}
for (int p = 0; p < NUM_PITCHES; p++) {
int index = PITCH_INPUT + p;
pitchStatus[p] = inputs[index].active;
pitchValue[p] = inputs[index].value;
}
// Process inputs
bool clockStatus = clockTrigger.process(clockInput);
bool triggerStatus = trigTrigger.process(trigInput);
bool lockStatus = lockTrigger.process(lockInput);
bool buttonStatus = buttonTrigger.process(buttonInput);
inputPDir = iPDir;
inputSDir = iSDir;
int nValidPitches = 0;
for (int p = 0; p < NUM_PITCHES; p++) {
if (pitchStatus[p]) { //Plugged in
inputPitches[nValidPitches] = pitchValue[p];
nValidPitches++;
}
}
// Check that we even have anything plugged in
if (nValidPitches == 0) {
return; // No inputs, no music
}
// Has the trigger input been fired
if (triggerStatus) {
triggerPulse.trigger(5e-5);
if (debug()) { std::cout << stepX << " Triggered" << std::endl; }
}
// Update the trigger pulse and determine if it is still high
bool triggerHigh = triggerPulse.process(delta);
if (debug()) {
if (triggerHigh) {
std::cout << stepX << " Trigger is high" << std::endl;
}
}
// Update lock
if (lockStatus) {
if (debug()) { std::cout << "Toggling lock: " << locked << std::endl; }
locked = !locked;
}
if (newSequence) {
newSequence--;
if (debug()) { std::cout << stepX << " Countdown newSequence " << newSequence << std::endl; }
}

if (newCycle) {
newCycle--;
if (debug()) { std::cout << stepX << " Countdown newCycle " << newCycle << std::endl; }
}
// OK so the problem here might be that the clock gate is still high right after the trigger gate fired on the previous step
// So we need to wait a while for the clock gate to go low
// Has the clock input been fired
bool isClocked = false;
if (clockStatus && !triggerHigh) {
if (debug()) { std::cout << stepX << " Clocked" << std::endl; }
isClocked = true;
}
// Has the trigger input been fired, either on the input or button
if (triggerStatus || buttonStatus) {
newSequence = COUNTDOWN;
newCycle = COUNTDOWN;
if (debug()) { std::cout << stepX << " Triggered" << std::endl; }
}
// So this is where the free-running could be triggered
if (isClocked && !isRunning) { // Must have a clock and not be already running
if (!trigActive) { // If nothing plugged into the TRIG input
if (debug()) { std::cout << stepX << " Free running sequence; starting" << std::endl; }
freeRunning = true; // We're free-running
newSequence = COUNTDOWN;
newCycle = LAUNCH;
} else {
if (debug()) { std::cout << stepX << " Triggered sequence; wait for trigger" << std::endl; }
freeRunning = false;
}
}
// Detect cable being plugged in when free-running, stop free-running
if (freeRunning && trigActive && isRunning) {
if (debug()) { std::cout << stepX << " TRIG input re-connected" << std::endl; }
freeRunning = false;
}
// Reached the end of the cycle
if (isRunning && isClocked && seq.isCycleFinished()) {
// Completed 1 step
seq.advanceSequence();
// Pulse the EOC gate
eocPulse.trigger(5e-3);
if (debug()) { std::cout << stepX << " Finished Cycle S: " << seq.stepI <<
" C: " << seq.cycleI <<
" sRemain: " << seq.stepsRemaining <<
" cRemain: " << seq.cycleRemaining << std::endl;
}
// Reached the end of the sequence
if (isRunning && seq.isSequenceFinished()) {
// Free running, so start new seqeuence & cycle
if (freeRunning) {
newCycle = COUNTDOWN;
newSequence = COUNTDOWN;
}

isRunning = false;
// Pulse the EOS gate
eosPulse.trigger(5e-3);
if (debug()) { std::cout << stepX << " Finished sequence S: " << seq.stepI <<
" C: " << seq.cycleI <<
" sRemain: " << seq.stepsRemaining <<
" cRemain: " << seq.cycleRemaining <<
" flag:" << isRunning << std::endl;
}

} else {
newCycle = LAUNCH;
if (debug()) { std::cout << stepX << " Flagging new cycle" << std::endl; }
}
}
// If we have been triggered, start a new sequence
if (newSequence == LAUNCH) {
// At the first step of the sequence
if (debug()) { std::cout << stepX << " New Sequence" << std::endl; }
if (!locked) {
if (debug()) { std::cout << stepX << " Update sequence inputs" << std::endl; }
}
// So this is where we tweak the sequence parameters
seq.initSequence(inputStep, inputDist, inputPDir, inputSDir, locked);
// We're running now
isRunning = true;
}
// Starting a new cycle
if (newCycle == LAUNCH) {
if (debug()) {
std::cout << stepX << " Defining cycle: nStep: " << seq.nStep <<
" nDist: " << seq.nDist <<
" pDir: " << seq.pDir <<
" sDir: " << seq.sDir <<
" nValidPitches: " << nValidPitches <<
" seqLen: " << seq.nStep * nValidPitches;
for (int i = 0; i < nValidPitches; i++) {
std::cout << " P" << i << " V: " << inputPitches[i];
}
std::cout << std::endl;
}
/// Reset the cycle counters
seq.setCycle(nValidPitches);
if (debug()) { std::cout << stepX << " New cycle" << std::endl; }
// Deal with RND setting, when sDir == 1, force it up or down
if (seq.sDir == 1) {
if (rand() % 2 == 0) {
seq.sDir = 0;
} else {
seq.sDir = 2;
}
}
// Only starting moving after the first cycle
if (seq.isSequenceStarted()) {
switch (seq.sDir) {
case 0: seq.currDist--; break;
case 2: seq.currDist++; break;
default: ;
}
}
if (!locked) {// Pitches are locked, and so is the order. This keeps randomly generated arps fixed when locked
// pitches[i] are offset from the input values according to the dist setting. Here we calculate the offsets
for (int i = 0; i < nValidPitches; i++) {
int target;
// Read the pitches according to direction, but we should do this for the sequence?
switch (seq.pDir) {
case 0: target = nValidPitches - i - 1; break; // DOWN
case 1: target = rand() % nValidPitches; break; // RANDOM
case 2: target = i; break; // UP
default: target = i; break; // For random case, read randomly from array, so order does not matter
}

// How many semi-tones do we need to shift
float dV = semiTone * seq.nDist * seq.currDist;
pitches[i] = clamp(inputPitches[target] + dV, -10.0, 10.0);
if (debug()) {
std::cout << stepX << " Pitch: " << i << " stepI: " << seq.stepI <<
" dV:" << dV <<
" target: " << target <<
" in: " << inputPitches[target] <<
" out: " << pitches[target] << std::endl;
}
}
}
if (debug()) {
std::cout << stepX << " Output pitches: ";
for (int i = 0; i < nValidPitches; i++) {
std::cout << " P" << i << " V: " << pitches[i];
}
std::cout << std::endl;
}
}
// Advance the sequence
// Are we starting a sequence or are running and have been clocked; if so advance the sequence
// Only advance from the clock
if (isRunning && (isClocked || newCycle == LAUNCH)) {

if (debug()) { std::cout << stepX << " Advance Cycle S: " << seq.stepI <<
" C: " << seq.cycleI <<
" sRemain: " << seq.stepsRemaining <<
" cRemain: " << seq.cycleRemaining << std::endl;
}
// Finally set the out voltage
outVolts = pitches[seq.cycleI];
if (debug()) { std::cout << stepX << " Output V = " << outVolts << std::endl; }
// Update counters
seq.advanceCycle();
// Pulse the output gate
gatePulse.trigger(5e-4);
}
// Set the value
lights[LOCK_LIGHT].value = locked ? 1.0 : 0.0;
outputs[OUT_OUTPUT].value = outVolts;
bool gPulse = gatePulse.process(delta);
bool sPulse = eosPulse.process(delta);
bool cPulse = eocPulse.process(delta);
outputs[GATE_OUTPUT].value = gPulse ? 10.0 : 0.0;
outputs[EOS_OUTPUT].value = sPulse ? 10.0 : 0.0;
outputs[EOC_OUTPUT].value = cPulse ? 10.0 : 0.0;
}

struct ArpeggiatorDisplay : TransparentWidget {
Arpeggiator *module;
int frame = 0;
std::shared_ptr<Font> font;

ArpeggiatorDisplay() {
font = Font::load(assetPlugin(plugin, "res/Roboto-Light.ttf"));
}

void draw(NVGcontext *vg) override {
Vec pos = Vec(0, 20);

nvgFontSize(vg, 20);
nvgFontFaceId(vg, font->handle);
nvgTextLetterSpacing(vg, -1);

nvgFillColor(vg, nvgRGBA(212, 175, 55, 0xff));
char text[128];

snprintf(text, sizeof(text), "STEP: %d [%d]", module->seq.nStep, module->inputStep);
nvgText(vg, pos.x + 10, pos.y + 5, text, NULL);
snprintf(text, sizeof(text), "DIST: %d [%d]", module->seq.nDist, module->inputDist);
nvgText(vg, pos.x + 10, pos.y + 25, text, NULL);
if (module->seq.sDir == 0) {
snprintf(text, sizeof(text), "SEQ: DSC");
} else {
snprintf(text, sizeof(text), "SEQ: ASC");
}
nvgText(vg, pos.x + 10, pos.y + 45, text, NULL);
switch(module->seq.pDir) {
case 0: snprintf(text, sizeof(text), "ARP: R-L"); break;
case 1: snprintf(text, sizeof(text), "ARP: RND"); break;
case 2: snprintf(text, sizeof(text), "ARP: L-R"); break;
default: snprintf(text, sizeof(text), "ARP: ERR"); break;
}
nvgText(vg, pos.x + 10, pos.y + 65, text, NULL);
std::string inputs ("IN: ");
for (int p = 0; p < Arpeggiator::NUM_PITCHES; p++) {
if (module->pitchStatus[p] && module->pitchValue[p] > -9.999) { //Plugged in or approx -10.0
inputs = inputs + std::to_string(p + 1);
}
}
nvgText(vg, pos.x + 10, pos.y + 85, inputs.c_str(), NULL);
}
};

struct ArpeggiatorWidget : ModuleWidget {
ArpeggiatorWidget(Arpeggiator *module);
};

ArpeggiatorWidget::ArpeggiatorWidget(Arpeggiator *module) : ModuleWidget(module) {
UI ui;
box.size = Vec(240, 380);

{
SVGPanel *panel = new SVGPanel();
panel->box.size = box.size;
panel->setBackground(SVG::load(assetPlugin(plugin, "res/Arpeggiator.svg")));
addChild(panel);
}

addChild(Widget::create<ScrewSilver>(Vec(15, 0)));
addChild(Widget::create<ScrewSilver>(Vec(box.size.x - 30, 0)));
addChild(Widget::create<ScrewSilver>(Vec(15, 365)));
addChild(Widget::create<ScrewSilver>(Vec(box.size.x - 30, 365)));

{
ArpeggiatorDisplay *display = new ArpeggiatorDisplay();
display->module = module;
display->box.pos = Vec(10, 95);
display->box.size = Vec(100, 140);
addChild(display);
}

addOutput(Port::create<PJ301MPort>(ui.getPosition(UI::PORT, 0, 0, false, false), Port::OUTPUT, module, Arpeggiator::OUT_OUTPUT));
addOutput(Port::create<PJ301MPort>(ui.getPosition(UI::PORT, 1, 0, false, false), Port::OUTPUT, module, Arpeggiator::GATE_OUTPUT));
addParam(ParamWidget::create<AHButton>(ui.getPosition(UI::BUTTON, 2, 0, false, false), module, Arpeggiator::LOCK_PARAM, 0.0, 1.0, 0.0));
addChild(ModuleLightWidget::create<MediumLight<GreenLight>>(ui.getPosition(UI::LIGHT, 2, 0, false, false), module, Arpeggiator::LOCK_LIGHT));
addOutput(Port::create<PJ301MPort>(ui.getPosition(UI::PORT, 3, 0, false, false), Port::OUTPUT, module, Arpeggiator::EOC_OUTPUT));
addOutput(Port::create<PJ301MPort>(ui.getPosition(UI::PORT, 4, 0, false, false), Port::OUTPUT, module, Arpeggiator::EOS_OUTPUT));
addParam(ParamWidget::create<BefacoPush>(Vec(127, 155), module, Arpeggiator::TRIGGER_PARAM, 0.0, 1.0, 0.0));
for (int i = 0; i < Arpeggiator::NUM_PITCHES; i++) {
addInput(Port::create<PJ301MPort>(ui.getPosition(UI::PORT, i, 5, true, false), Port::INPUT, module, Arpeggiator::PITCH_INPUT + i));
}
addInput(Port::create<PJ301MPort>(ui.getPosition(UI::PORT, 0, 4, true, false), Port::INPUT, module, Arpeggiator::STEP_INPUT));
addParam(ParamWidget::create<AHKnobSnap>(ui.getPosition(UI::KNOB, 1, 4, true, false), module, Arpeggiator::STEP_PARAM, 1.0, 16.0, 1.0));
addInput(Port::create<PJ301MPort>(ui.getPosition(UI::PORT, 2, 4, true, false), Port::INPUT, module, Arpeggiator::DIST_INPUT));
addParam(ParamWidget::create<AHKnobSnap>(ui.getPosition(UI::KNOB, 3, 4, true, false), module, Arpeggiator::DIST_PARAM, 0.0, 12.0, 0.0));
addInput(Port::create<PJ301MPort>(ui.getPosition(UI::PORT, 4, 4, true, false), Port::INPUT, module, Arpeggiator::TRIG_INPUT));
addInput(Port::create<PJ301MPort>(ui.getPosition(UI::PORT, 5, 4, true, false), Port::INPUT, module, Arpeggiator::CLOCK_INPUT));
addParam(ParamWidget::create<BefacoSwitch>(Vec(178.5, 112.0), module, Arpeggiator::SDIR_PARAM, 0, 2, 0));
addParam(ParamWidget::create<BefacoSwitch>(Vec(178.5, 187.0), module, Arpeggiator::PDIR_PARAM, 0, 2, 0));

}

Model *modelArpeggiator = Model::create<Arpeggiator, ArpeggiatorWidget>( "Amalgamated Harmonics", "Arpeggiator", "Arpeggiator (deprecated)", ARPEGGIATOR_TAG);



+ 0
- 1016
repos/AmalgamatedHarmonics/src/ArpeggiatorMkII.cpp
File diff suppressed because it is too large
View File


+ 0
- 297
repos/AmalgamatedHarmonics/src/Circle.cpp View File

@@ -1,297 +0,0 @@
#include "AH.hpp"
#include "Core.hpp"
#include "UI.hpp"
#include "dsp/digital.hpp"

#include <iostream>

struct Circle : AHModule {

const static int NUM_PITCHES = 6;
enum ParamIds {
KEY_PARAM,
MODE_PARAM,
NUM_PARAMS
};
enum InputIds {
ROTL_INPUT,
ROTR_INPUT,
KEY_INPUT,
MODE_INPUT,
NUM_INPUTS
};
enum OutputIds {
KEY_OUTPUT,
MODE_OUTPUT,
NUM_OUTPUTS
};
enum LightIds {
ENUMS(MODE_LIGHT,7),
ENUMS(BKEY_LIGHT,12),
ENUMS(CKEY_LIGHT,12),
NUM_LIGHTS
};
enum Scaling {
CHROMATIC,
FIFTHS
};
Scaling voltScale = FIFTHS;
Circle() : AHModule(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS) {}
void step() override;
json_t *toJson() override {
json_t *rootJ = json_object();

// gateMode
json_t *scaleModeJ = json_integer((int) voltScale);
json_object_set_new(rootJ, "scale", scaleModeJ);

return rootJ;
}
void fromJson(json_t *rootJ) override {
// gateMode
json_t *scaleModeJ = json_object_get(rootJ, "scale");
if (scaleModeJ) {
voltScale = (Scaling)json_integer_value(scaleModeJ);
}
}
SchmittTrigger rotLTrigger;
SchmittTrigger rotRTrigger;
PulseGenerator stepPulse;
float outVolts[NUM_PITCHES];
int baseKeyIndex = 0;
int curKeyIndex = 0;
int curMode = 0;
int poll = 50000;
};

void Circle::step() {
AHModule::step();

// Get inputs from Rack
float rotLInput = inputs[ROTL_INPUT].value;
float rotRInput = inputs[ROTR_INPUT].value;
int newKeyIndex = 0;
int deg;
if (inputs[KEY_INPUT].active) {
float fRoot = inputs[KEY_INPUT].value;
if (voltScale == FIFTHS) {
newKeyIndex = CoreUtil().getKeyFromVolts(fRoot);
} else {
CoreUtil().getPitchFromVolts(fRoot, Core::NOTE_C, Core::SCALE_CHROMATIC, &newKeyIndex, &deg);
}
} else {
newKeyIndex = params[KEY_PARAM].value;
}

int newMode = 0;
if (inputs[MODE_INPUT].active) {
float fMode = inputs[MODE_INPUT].value;
newMode = round(rescale(fabs(fMode), 0.0f, 10.0f, 0.0f, 6.0f));
} else {
newMode = params[MODE_PARAM].value;
}

curMode = newMode;
// Process inputs
bool rotLStatus = rotLTrigger.process(rotLInput);
bool rotRStatus = rotRTrigger.process(rotRInput);
if (rotLStatus) {
if (debug()) { std::cout << stepX << " Rotate left: " << curKeyIndex; }
if (voltScale == FIFTHS) {
if (curKeyIndex == 0) {
curKeyIndex = 11;
} else {
curKeyIndex--;
}
} else {
curKeyIndex = curKeyIndex + 5;
if (curKeyIndex > 11) {
curKeyIndex = curKeyIndex - 12;
}
}
if (debug()) { std::cout << " -> " << curKeyIndex << std::endl; }
}
if (rotRStatus) {
if (debug()) { std::cout << stepX << " Rotate right: " << curKeyIndex; }
if (voltScale == FIFTHS) {
if (curKeyIndex == 11) {
curKeyIndex = 0;
} else {
curKeyIndex++;
}
} else {
curKeyIndex = curKeyIndex - 5;
if (curKeyIndex < 0) {
curKeyIndex = curKeyIndex + 12;
}
}
if (debug()) { std::cout << " -> " << curKeyIndex << std::endl; }
}
if (rotLStatus && rotRStatus) {
if (debug()) { std::cout << stepX << " Reset " << curKeyIndex << std::endl; }
curKeyIndex = baseKeyIndex;
}
if (newKeyIndex != baseKeyIndex) {
if (debug()) { std::cout << stepX << " New base: " << newKeyIndex << std::endl;}
baseKeyIndex = newKeyIndex;
curKeyIndex = newKeyIndex;
}
int curKey;
int baseKey;

if (voltScale == FIFTHS) {
curKey = CoreUtil().CIRCLE_FIFTHS[curKeyIndex];
baseKey = CoreUtil().CIRCLE_FIFTHS[baseKeyIndex];
} else {
curKey = curKeyIndex;
baseKey = baseKeyIndex;
}


float keyVolts = CoreUtil().getVoltsFromKey(curKey);
float modeVolts = CoreUtil().getVoltsFromMode(curMode);
for (int i = 0; i < Core::NUM_NOTES; i++) {
lights[CKEY_LIGHT + i].value = 0.0;
lights[BKEY_LIGHT + i].value = 0.0;
}

lights[CKEY_LIGHT + curKey].value = 1.0;
lights[BKEY_LIGHT + baseKey].value = 1.0;
for (int i = 0; i < Core::NUM_MODES; i++) {
lights[MODE_LIGHT + i].value = 0.0;
}
lights[MODE_LIGHT + curMode].value = 1.0;
outputs[KEY_OUTPUT].value = keyVolts;
outputs[MODE_OUTPUT].value = modeVolts;
}

struct CircleWidget : ModuleWidget {
CircleWidget(Circle *module);
Menu *createContextMenu() override;
};

CircleWidget::CircleWidget(Circle *module) : ModuleWidget(module) {
UI ui;
box.size = Vec(240, 380);

{
SVGPanel *panel = new SVGPanel();
panel->box.size = box.size;
panel->setBackground(SVG::load(assetPlugin(plugin, "res/Circle.svg")));
addChild(panel);
}

addChild(Widget::create<ScrewSilver>(Vec(15, 0)));
addChild(Widget::create<ScrewSilver>(Vec(box.size.x - 30, 0)));
addChild(Widget::create<ScrewSilver>(Vec(15, 365)));
addChild(Widget::create<ScrewSilver>(Vec(box.size.x - 30, 365)));

addInput(Port::create<PJ301MPort>(ui.getPosition(UI::PORT, 0, 0, true, false), Port::INPUT, module, Circle::ROTL_INPUT));
addInput(Port::create<PJ301MPort>(ui.getPosition(UI::PORT, 5, 0, true, false), Port::INPUT, module, Circle::ROTR_INPUT));
addInput(Port::create<PJ301MPort>(ui.getPosition(UI::PORT, 0, 5, true, false), Port::INPUT, module, Circle::KEY_INPUT));
addParam(ParamWidget::create<AHKnobSnap>(ui.getPosition(UI::KNOB, 1, 5, true, false), module, Circle::KEY_PARAM, 0.0, 11.0, 0.0));
addInput(Port::create<PJ301MPort>(ui.getPosition(UI::PORT, 2, 5, true, false), Port::INPUT, module, Circle::MODE_INPUT));
addParam(ParamWidget::create<AHKnobSnap>(ui.getPosition(UI::KNOB, 3, 5, true, false), module, Circle::MODE_PARAM, 0.0, 6.0, 0.0));

float div = (M_PI * 2) / 12.0;

for (int i = 0; i < 12; i++) {

float cosDiv = cos(div * i);
float sinDiv = sin(div * i);
float xPos = sinDiv * 52.5;
float yPos = cosDiv * 52.5;
float xxPos = sinDiv * 60.0;
float yyPos = cosDiv * 60.0;

// ui.calculateKeyboard(i, xSpace, xOffset, 230.0, &xPos, &yPos, &scale);
addChild(ModuleLightWidget::create<SmallLight<GreenLight>>(Vec(xxPos + 116.5, 149.5 - yyPos), module, Circle::CKEY_LIGHT + CoreUtil().CIRCLE_FIFTHS[i]));

// ui.calculateKeyboard(i, xSpace, xOffset + 72.0, 165.0, &xPos, &yPos, &scale);
addChild(ModuleLightWidget::create<SmallLight<RedLight>>(Vec(xPos + 116.5, 149.5 - yPos), module, Circle::BKEY_LIGHT + CoreUtil().CIRCLE_FIFTHS[i]));
}
float xOffset = 18.0;
for (int i = 0; i < 7; i++) {
float xPos = 2 * xOffset + i * 18.2;
addChild(ModuleLightWidget::create<SmallLight<GreenLight>>(Vec(xPos, 280.0), module, Circle::MODE_LIGHT + i));
}

addOutput(Port::create<PJ301MPort>(ui.getPosition(UI::PORT, 4, 5, true, false), Port::OUTPUT, module, Circle::KEY_OUTPUT));
addOutput(Port::create<PJ301MPort>(ui.getPosition(UI::PORT, 5, 5, true, false), Port::OUTPUT, module, Circle::MODE_OUTPUT));

}


struct CircleScalingItem : MenuItem {
Circle *circle;
Circle::Scaling scalingMode;
void onAction(EventAction &e) override {
circle->voltScale = scalingMode;
}
void step() override {
rightText = (circle->voltScale == scalingMode) ? "✔" : "";
}
};

Menu *CircleWidget::createContextMenu() {
Menu *menu = ModuleWidget::createContextMenu();

MenuLabel *spacerLabel = new MenuLabel();
menu->addChild(spacerLabel);

Circle *circle = dynamic_cast<Circle*>(module);
assert(circle);

MenuLabel *modeLabel = new MenuLabel();
modeLabel->text = "Root Volt Scaling";
menu->addChild(modeLabel);

CircleScalingItem *fifthsItem = new CircleScalingItem();
fifthsItem->text = "Fifths";
fifthsItem->circle = circle;
fifthsItem->scalingMode = Circle::FIFTHS;
menu->addChild(fifthsItem);

CircleScalingItem *chromaticItem = new CircleScalingItem();
chromaticItem->text = "Chromatic (V/OCT)";
chromaticItem->circle = circle;
chromaticItem->scalingMode = Circle::CHROMATIC;
menu->addChild(chromaticItem);

return menu;
}

Model *modelCircle = Model::create<Circle, CircleWidget>( "Amalgamated Harmonics", "Circle", "Fifths and Fourths", SEQUENCER_TAG);

// ♯♭

+ 0
- 202
repos/AmalgamatedHarmonics/src/Core.cpp View File

@@ -1,202 +0,0 @@
#include "Core.hpp"

#include <iostream>

float Core::getPitchFromVolts(float inVolts, float inRoot, float inScale, int *outRoot, int *outScale, int *outNote, int *outDegree) {
// get the root note and scale
int currRoot = getKeyFromVolts(inRoot);
int currScale = getScaleFromVolts(inScale);

if (debug && stepX % poll == 0) {
std::cout << "QUANT " << stepX << " Root in: " << inRoot << " Root out: " << currRoot<< " Scale in: " << inScale << " Scale out: " << currScale << std::endl;
}
float outVolts = getPitchFromVolts(inVolts, currRoot, currScale, outNote, outDegree);
*outRoot = currRoot;
*outScale = currScale;
return outVolts;
}

float Core::getPitchFromVolts(float inVolts, int currRoot, int currScale, int *outNote, int *outDegree) {
int *curScaleArr;
int notesInScale = 0;
switch (currScale){
case SCALE_CHROMATIC: curScaleArr = ASCALE_CHROMATIC; notesInScale=LENGTHOF(ASCALE_CHROMATIC); break;
case SCALE_IONIAN: curScaleArr = ASCALE_IONIAN; notesInScale=LENGTHOF(ASCALE_IONIAN); break;
case SCALE_DORIAN: curScaleArr = ASCALE_DORIAN; notesInScale=LENGTHOF(ASCALE_DORIAN); break;
case SCALE_PHRYGIAN: curScaleArr = ASCALE_PHRYGIAN; notesInScale=LENGTHOF(ASCALE_PHRYGIAN); break;
case SCALE_LYDIAN: curScaleArr = ASCALE_LYDIAN; notesInScale=LENGTHOF(ASCALE_LYDIAN); break;
case SCALE_MIXOLYDIAN: curScaleArr = ASCALE_MIXOLYDIAN; notesInScale=LENGTHOF(ASCALE_MIXOLYDIAN); break;
case SCALE_AEOLIAN: curScaleArr = ASCALE_AEOLIAN; notesInScale=LENGTHOF(ASCALE_AEOLIAN); break;
case SCALE_LOCRIAN: curScaleArr = ASCALE_LOCRIAN; notesInScale=LENGTHOF(ASCALE_LOCRIAN); break;
case SCALE_MAJOR_PENTA: curScaleArr = ASCALE_MAJOR_PENTA; notesInScale=LENGTHOF(ASCALE_MAJOR_PENTA); break;
case SCALE_MINOR_PENTA: curScaleArr = ASCALE_MINOR_PENTA; notesInScale=LENGTHOF(ASCALE_MINOR_PENTA); break;
case SCALE_HARMONIC_MINOR: curScaleArr = ASCALE_HARMONIC_MINOR; notesInScale=LENGTHOF(ASCALE_HARMONIC_MINOR); break;
case SCALE_BLUES: curScaleArr = ASCALE_BLUES; notesInScale=LENGTHOF(ASCALE_BLUES); break;
default: curScaleArr = ASCALE_CHROMATIC; notesInScale=LENGTHOF(ASCALE_CHROMATIC);
}

// get the octave
int octave = floor(inVolts);
float closestVal = 10.0;
float closestDist = 10.0;
int noteFound = 0;

if (debug && stepX % poll == 0) {
std::cout << "QUANT Octave: " << octave << " Scale: " << scaleNames[currScale] << " Root: " << noteNames[currRoot] << std::endl;
}

float octaveOffset = 0;
if (currRoot != 0) {
octaveOffset = (12 - currRoot) / 12.0;
}
if (debug && stepX % poll == 0) {
std::cout << "QUANT Octave: " << octave << " currRoot: " << currRoot << " -> Offset: " << octaveOffset << " inVolts: " << inVolts << std::endl;
}
float fOctave = (float)octave - octaveOffset;
int scaleIndex = 0;
int searchOctave = 0;
do {

int degree = curScaleArr[scaleIndex]; // 0 - 11!
float fVoltsAboveOctave = searchOctave + degree / 12.0;
float fScaleNoteInVolts = fOctave + fVoltsAboveOctave;
float distAway = fabs(inVolts - fScaleNoteInVolts);

if (debug && stepX % poll == 0) {
std::cout << "QUANT input: " << inVolts
<< " index: " << scaleIndex
<< " root: " << currRoot
<< " octave: " << fOctave
<< " degree: " << degree
<< " V above O: " << fVoltsAboveOctave
<< " note in V: " << fScaleNoteInVolts
<< " distance: " << distAway
<< std::endl;
}

// Assume that the list of notes is ordered, so there is an single inflection point at the minimum value
if (distAway >= closestDist){
break;
} else {
// Let's remember this
closestVal = fScaleNoteInVolts;
closestDist = distAway;
}
scaleIndex++;
if (scaleIndex == notesInScale - 1) {
scaleIndex = 0;
searchOctave++;
}

} while (true);

if(scaleIndex == 0) {
noteFound = notesInScale - 2; // NIS is a count, not index
} else {
noteFound = scaleIndex - 1;
}

if (debug && stepX % poll == 0) {
std::cout << "QUANT NIS: " << notesInScale << " scaleIndex: " << scaleIndex << " NF: " << noteFound << std::endl;
}
int currNote = (currRoot + curScaleArr[noteFound]) % 12; // So this is the nth note of the scale;
// case in point, V=0, Scale = F#m returns the 6th note, which should be C#

if (debug && stepX % poll == 0) {
// Dump the note and degree, mod the size in case where we have wrapped round

std::cout << "QUANT Found index in scale: " << noteFound << ", currNote: " << currNote;
std::cout << " This is scale note: " << curScaleArr[noteFound] << " (Interval: " << intervalNames[curScaleArr[noteFound]] << ")";
std::cout << ": " << inVolts << " -> " << closestVal << std::endl;

}

*outNote = currNote;
*outDegree = curScaleArr[noteFound];
return closestVal;
}


void Core::getRootFromMode(int inMode, int inRoot, int inTonic, int *currRoot, int *quality) {
*quality = ModeQuality[inMode][inTonic];

int positionRelativeToStartOfScale = tonicIndex[inMode + inTonic];
int positionStartOfScale = scaleIndex[inMode];
// FIXME should be mapped into the Circle of Fifths??
*currRoot = inRoot + noteIndex[positionStartOfScale + positionRelativeToStartOfScale];
if (*currRoot < 0) {
*currRoot += 12;
}
if (*currRoot > 11) {
*currRoot -= 12;
}
// Quantizer q;
//
// std::cout << "Mode: " << inMode
// << " Root: " << q.noteNames[inRoot]
// << " Tonic: " << q.tonicNames[inTonic]
// << " Scale Pos: " << positionStartOfScale
// << " Rel Pos: " << positionRelativeToStartOfScale
// << " Note Index: " << positionStartOfScale + positionRelativeToStartOfScale
// << " Note: " << noteIndex[positionStartOfScale + positionRelativeToStartOfScale]
// << " Offset: " << ModeOffset[inMode][inTonic]
// << " Output: " << *currRoot
// << " " << q.noteNames[*currRoot]
// << std::endl;
}
Core & CoreUtil() {
static Core core;
return core;
}
// http://c-faq.com/lib/gaussian.html
double Core::gaussrand() {
static double U, V;
static int phase = 0;
double Z;

if(phase == 0) {
U = (rand() + 1.) / (RAND_MAX + 2.);
V = rand() / (RAND_MAX + 1.);
Z = sqrt(-2 * log(U)) * sin(2 * M_PI * V);
} else
Z = sqrt(-2 * log(U)) * cos(2 * M_PI * V);

phase = 1 - phase;

return Z;
}
int Core::ipow(int base, int exp) {
int result = 1;
while (exp)
{
if (exp & 1)
result *= base;
exp >>= 1;
base *= base;
}

return result;
}

+ 0
- 524
repos/AmalgamatedHarmonics/src/Core.hpp View File

@@ -1,524 +0,0 @@
#pragma once

#include <iostream>

#include "dsp/digital.hpp"

#include "AH.hpp"


struct AHPulseGenerator {
float time = 0.f;
float pulseTime = 0.f;
bool ishigh() {
return time < pulseTime;
}
bool process(float deltaTime) {
time += deltaTime;
return time < pulseTime;
}

bool trigger(float pulseTime) {
// Keep the previous pulseTime if the existing pulse would be held longer than the currently requested one.
if (time + pulseTime >= this->pulseTime) {
time = 0.f;
this->pulseTime = pulseTime;
return true;
} else {
return false;
}
}
};

struct BpmCalculator {
float timer = 0.0f;
int misses = 0;
float seconds = 0;
SchmittTrigger gateTrigger;
inline bool checkBeat(int mult) {
return ( ((timer - mult * seconds) * (timer - mult * seconds) / (seconds * seconds) < 0.2f ) && misses < 4);
}

float calculateBPM(float delta, float input) {

if (gateTrigger.process(input) ) {

if (timer > 0) {

float new_seconds;
bool found = false;

for(int mult = 1; !found && mult < 20; mult++ ) {

if (checkBeat(mult)) {
new_seconds = timer / mult;
if (mult == 1) {
misses = 0;
} else {
misses++;
}
found = true;
};
};

if (!found) {
// std::cerr << "default. misses = " << misses << "\n";
new_seconds = timer;
misses = 0;
}

float a = 0.5f; // params[SMOOTH_PARAM].value;
seconds = ((1.0f - a) * seconds + a * new_seconds);
timer -= seconds;

}

};

timer += delta;
if (seconds < 2.0e-05) {
return 0.0f;
} else {
return 60.0f / seconds;
}
};

};


struct ChordDef {
int number;
std::string quality;
int root[6];
int first[6];
int second[6];
};

struct Core {

static constexpr float TRIGGER = 5e-4;

static constexpr float SEMITONE = 1.0 / 12.0;

// Reference, midi note to scale
// 0 1
// 1 b2 (#1)
// 2 2
// 3 b3 (#2)
// 4 3
// 5 4
// 6 b5 (#4)
// 7 5
// 8 b6 (#5)
// 9 6
// 10 b7 (#6)
// 11 7

// http://www.grantmuller.com/MidiReference/doc/midiReference/ScaleReference.html
// Although their definition of the Blues scale is wrong
// Added the octave note to ensure that the last note is correctly processed
int ASCALE_CHROMATIC [13]= {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12}; // All of the notes
int ASCALE_IONIAN [8] = {0, 2, 4, 5, 7, 9, 11, 12}; // 1,2,3,4,5,6,7
int ASCALE_DORIAN [8] = {0, 2, 3, 5, 7, 9, 10, 12}; // 1,2,b3,4,5,6,b7
int ASCALE_PHRYGIAN [8] = {0, 1, 3, 5, 7, 8, 10, 12}; // 1,b2,b3,4,5,b6,b7
int ASCALE_LYDIAN [8] = {0, 2, 4, 6, 7, 9, 10, 12}; // 1,2,3,#4,5,6,7
int ASCALE_MIXOLYDIAN [8] = {0, 2, 4, 5, 7, 9, 10, 12}; // 1,2,3,4,5,6,b7
int ASCALE_AEOLIAN [8] = {0, 2, 3, 5, 7, 8, 10, 12}; // 1,2,b3,4,5,b6,b7
int ASCALE_LOCRIAN [8] = {0, 1, 3, 5, 6, 8, 10, 12}; // 1,b2,b3,4,b5,b6,b7
int ASCALE_MAJOR_PENTA [6] = {0, 2, 4, 7, 9, 12}; // 1,2,3,5,6
int ASCALE_MINOR_PENTA [6] = {0, 3, 5, 7, 10, 12}; // 1,b3,4,5,b7
int ASCALE_HARMONIC_MINOR [8] = {0, 2, 3, 5, 7, 8, 11, 12}; // 1,2,b3,4,5,b6,7
int ASCALE_BLUES [7] = {0, 3, 5, 6, 7, 10, 12}; // 1,b3,4,b5,5,b7

enum Notes {
NOTE_C = 0,
NOTE_D_FLAT, // C Sharp
NOTE_D,
NOTE_E_FLAT, // D Sharp
NOTE_E,
NOTE_F,
NOTE_G_FLAT, //F Sharp
NOTE_G,
NOTE_A_FLAT, // G Sharp
NOTE_A,
NOTE_B_FLAT, // A Sharp
NOTE_B,
NUM_NOTES
};

int CIRCLE_FIFTHS [12] = {
NOTE_C,
NOTE_G,
NOTE_D,
NOTE_A,
NOTE_E,
NOTE_B,
NOTE_G_FLAT,
NOTE_D_FLAT,
NOTE_A_FLAT,
NOTE_E_FLAT,
NOTE_B_FLAT,
NOTE_F
};
std::string noteNames[12] = {
"C",
"C#/Db",
"D",
"D#/Eb",
"E",
"F",
"F#/Gb",
"G",
"G#/Ab",
"A",
"A#/Bb",
"B",
};

enum Scales {
SCALE_CHROMATIC = 0,
SCALE_IONIAN,
SCALE_DORIAN,
SCALE_PHRYGIAN,
SCALE_LYDIAN,
SCALE_MIXOLYDIAN,
SCALE_AEOLIAN,
SCALE_LOCRIAN,
SCALE_MAJOR_PENTA,
SCALE_MINOR_PENTA,
SCALE_HARMONIC_MINOR,
SCALE_BLUES,
NUM_SCALES
};

std::string scaleNames[12] = {
"Chromatic",
"Ionian (Major)",
"Dorian",
"Phrygian",
"Lydian",
"Mixolydian",
"Aeolian (Natural Minor)",
"Locrian",
"Major Pentatonic",
"Minor Pentatonic",
"Harmonic Minor",
"Blues"
};

std::string intervalNames[13] {
"1",
"b2",
"2",
"b3",
"3",
"4",
"b5",
"5",
"b6",
"6",
"b7",
"7",
"O"
};
enum Modes {
MODE_IONIAN = 0,
MODE_DORIAN,
MODE_PHRYGIAN,
MODE_LYDIAN,
MODE_MIXOLYDIAN,
MODE_AEOLIAN,
MODE_LOCRIAN,
NUM_MODES
};
std::string modeNames[7] {
"Ionian (Major)",
"Dorian",
"Phrygian",
"Lydian",
"Mixolydian",
"Aeolian (Natural Minor)",
"Locrian"
};

enum DEGREES {
DEGREE_I = 0,
DEGREE_II,
DEGREE_III,
DEGREE_IV,
DEGREE_V,
DEGREE_VI,
DEGREE_VII,
NUM_DEGREES
};
std::string degreeNames[21] { // Degree * 3 + Quality
"I",
"i",
"i°",
"II",
"ii",
"ii°",
"III",
"iii",
"iii°",
"IV",
"iv",
"iv°",
"V",
"v",
"v°",
"VI",
"vi",
"vi°",
"VII",
"vii",
"vii°"
};
enum Inversion {
ROOT,
FIRST_INV,
SECOND_INV,
NUM_INV
};
std::string inversionNames[5] {
"",
"(1)",
"(2)"
};
enum Quality {
MAJ = 0,
MIN,
DIM,
NUM_QUALITY
};

std::string qualityNames[3] {
"Maj",
"Min",
"Dim"
};
double gaussrand();
int ipow(int base, int exp);
bool debug = false;
int poll = 100000;
int stepX = 0;
/*
* Convert a V/OCT voltage to a quantized pitch, key and scale, and calculate various information about the quantised note.
*/
float getPitchFromVolts(float inVolts, int inRoot, int inScale, int *outNote, int *outDegree);

float getPitchFromVolts(float inVolts, float inRoot, float inScale, int *outRoot, int *outScale, int *outNote, int *outDegree);
/*
* Convert a root note (relative to C, C=0) and positive semi-tone offset from that root to a voltage (1V/OCT, 0V = C4 (or 3??))
*/
float getVoltsFromPitch(int inNote, int inRoot){
return (inRoot + inNote) * SEMITONE;
}
float getVoltsFromScale(int scale) {
return rescale(scale, 0.0f, NUM_SCALES - 1, 0.0f, 10.0f);
}
int getScaleFromVolts(float volts) {
return round(rescale(fabs(volts), 0.0f, 10.0f, 0.0f, NUM_SCALES - 1));
}
int getModeFromVolts(float volts) {
int mode = round(rescale(fabs(volts), 0.0f, 10.0f, 0.0f, NUM_SCALES - 1));
return clamp(mode - 1, 0, 6);
}
float getVoltsFromMode(int mode) {
// Mode 0 = IONIAN, MODE 6 = LOCRIAN -> Scale 1 - 7
return rescale(mode + 1, 0.0f, NUM_SCALES - 1, 0.0f, 10.0f);
}
float getVoltsFromKey(int key) {
return rescale(key, 0.0f, NUM_NOTES - 1, 0.0f, 10.0f);
}
int getKeyFromVolts(float volts) {
return round(rescale(fabs(volts), 0.0f, 10.0f, 0.0f, NUM_NOTES - 1));
}
void getRootFromMode(int inMode, int inRoot, int inTonic, int *currRoot, int *quality);
const static int NUM_CHORDS = 99;

ChordDef ChordTable[NUM_CHORDS] {
{ 0 ,"None",{ -24 , -24 , -24 , -24 , -24 , -24 },{ -24 , -24 , -24 , -24 , -24 , -24 },{ -24 , -24 , -24 , -24 , -24 , -24 }},
{ 1 ,"",{ 0 , 4 , 7 , -24 , -20 , -17 },{ 12 , 4 , 7 , -12 , -20 , -17 },{ 12 , 16 , 7 , -12 , -8 , -17 }},
{ 2 ,"M#5",{ 0 , 4 , 8 , -24 , -20 , -16 },{ 12 , 4 , 8 , -12 , -20 , -16 },{ 12 , 16 , 8 , -12 , -8 , -16 }},
{ 3 ,"M#5add9",{ 0 , 4 , 8 , 14 , -24 , -20 },{ 12 , 4 , 8 , 14 , -24 , -20 },{ 12 , 16 , 8 , 14 , -12 , -20 }},
{ 4 ,"M13",{ 0 , 4 , 7 , 11 , 14 , 21 },{ 12 , 4 , 7 , 11 , 14 , 21 },{ 12 , 16 , 7 , 11 , 14 , 21 }},
{ 5 ,"M6",{ 0 , 4 , 7 , 21 , -24 , -20 },{ 12 , 4 , 7 , 21 , -24 , -20 },{ 12 , 16 , 7 , 21 , -12 , -20 }},
{ 6 ,"M6#11",{ 0 , 4 , 7 , 9 , 18 , -24 },{ 12 , 4 , 7 , 9 , 18 , -24 },{ 12 , 16 , 7 , 9 , 18 , -24 }},
{ 7 ,"M6/9",{ 0 , 4 , 7 , 9 , 14 , -24 },{ 12 , 4 , 7 , 9 , 14 , -24 },{ 12 , 16 , 7 , 9 , 14 , -24 }},
{ 8 ,"M6/9#11",{ 0 , 4 , 7 , 9 , 14 , 18 },{ 12 , 4 , 7 , 9 , 14 , 18 },{ 12 , 16 , 7 , 9 , 14 , 18 }},
{ 9 ,"M7#11",{ 0 , 4 , 7 , 11 , 18 , -24 },{ 12 , 4 , 7 , 11 , 18 , -24 },{ 12 , 16 , 7 , 11 , 18 , -24 }},
{ 10 ,"M7#5",{ 0 , 4 , 8 , 11 , -24 , -20 },{ 12 , 4 , 8 , 11 , -24 , -20 },{ 12 , 16 , 8 , 11 , -12 , -20 }},
{ 11 ,"M7#5sus4",{ 0 , 5 , 8 , 11 , -24 , -19 },{ 12 , 5 , 8 , 11 , -24 , -19 },{ 12 , 17 , 8 , 11 , -12 , -19 }},
{ 12 ,"M7#9#11",{ 0 , 4 , 7 , 11 , 15 , 18 },{ 12 , 4 , 7 , 11 , 15 , 18 },{ 12 , 16 , 7 , 11 , 15 , 18 }},
{ 13 ,"M7add13",{ 0 , 4 , 7 , 9 , 11 , 14 },{ 12 , 4 , 7 , 9 , 11 , 14 },{ 12 , 16 , 7 , 9 , 11 , 14 }},
{ 14 ,"M7b5",{ 0 , 4 , 6 , 11 , -24 , -20 },{ 12 , 4 , 6 , 11 , -24 , -20 },{ 12 , 16 , 6 , 11 , -12 , -20 }},
{ 15 ,"M7b6",{ 0 , 4 , 8 , 11 , -24 , -20 },{ 12 , 4 , 8 , 11 , -24 , -20 },{ 12 , 16 , 8 , 11 , -12 , -20 }},
{ 16 ,"M7b9",{ 0 , 4 , 7 , 11 , 13 , -20 },{ 12 , 4 , 7 , 11 , 13 , -20 },{ 12 , 16 , 7 , 11 , 13 , -20 }},
{ 17 ,"M7sus4",{ 0 , 5 , 7 , 11 , -24 , -19 },{ 12 , 5 , 7 , 11 , -24 , -19 },{ 12 , 17 , 7 , 11 , -12 , -19 }},
{ 18 ,"M9",{ 0 , 4 , 7 , 11 , 14 , -24 },{ 12 , 4 , 7 , 11 , 14 , -24 },{ 12 , 16 , 7 , 11 , 14 , -24 }},
{ 19 ,"M9#11",{ 0 , 4 , 7 , 11 , 14 , 18 },{ 12 , 4 , 7 , 11 , 14 , 18 },{ 12 , 16 , 7 , 11 , 14 , 18 }},
{ 20 ,"M9#5",{ 0 , 4 , 8 , 11 , 14 , -24 },{ 12 , 4 , 8 , 11 , 14 , -24 },{ 12 , 16 , 8 , 11 , 14 , -24 }},
{ 21 ,"M9#5sus4",{ 0 , 5 , 8 , 11 , 14 , -24 },{ 12 , 5 , 8 , 11 , 14 , -24 },{ 12 , 17 , 8 , 11 , 14 , -24 }},
{ 22 ,"M9b5",{ 0 , 4 , 6 , 11 , 14 , -24 },{ 12 , 4 , 6 , 11 , 14 , -24 },{ 12 , 16 , 6 , 11 , 14 , -24 }},
{ 23 ,"M9sus4",{ 0 , 5 , 7 , 11 , 14 , -24 },{ 12 , 5 , 7 , 11 , 14 , -24 },{ 12 , 17 , 7 , 11 , 14 , -24 }},
{ 24 ,"Madd9",{ 0 , 4 , 7 , 14 , -24 , -20 },{ 12 , 4 , 7 , 14 , -24 , -20 },{ 12 , 16 , 7 , 14 , -12 , -20 }},
{ 25 ,"Maj7",{ 0 , 4 , 7 , 11 , -24 , -20 },{ 12 , 4 , 7 , 11 , -24 , -20 },{ 12 , 16 , 7 , 11 , -12 , -20 }},
{ 26 ,"Mb5",{ 0 , 4 , 6 , -24 , -20 , -18 },{ 12 , 4 , 6 , -12 , -20 , -18 },{ 12 , 16 , 6 , -12 , -8 , -18 }},
{ 27 ,"Mb6",{ 0 , 4 , 20 , -24 , -20 , -4 },{ 12 , 4 , 20 , -12 , -20 , -4 },{ 12 , 16 , 20 , -12 , -8 , -4 }},
{ 28 ,"Msus2",{ 0 , 2 , 7 , -24 , -22 , -17 },{ 12 , 2 , 7 , -12 , -22 , -17 },{ 12 , 14 , 7 , -12 , -10 , -17 }},
{ 29 ,"Msus4",{ 0 , 5 , 7 , -24 , -19 , -17 },{ 12 , 5 , 7 , -12 , -19 , -17 },{ 12 , 17 , 7 , -12 , -7 , -17 }},
{ 30 ,"Maddb9",{ 0 , 4 , 7 , 13 , -24 , -20 },{ 12 , 4 , 7 , 13 , -24 , -20 },{ 12 , 16 , 7 , 13 , -12 , -20 }},
{ 31 ,"7",{ 0 , 4 , 7 , 10 , -24 , -20 },{ 12 , 4 , 7 , 10 , -24 , -20 },{ 12 , 16 , 7 , 10 , -12 , -20 }},
{ 32 ,"9",{ 0 , 4 , 7 , 10 , 14 , -24 },{ 12 , 4 , 7 , 10 , 14 , -24 },{ 12 , 16 , 7 , 10 , 14 , -24 }},
{ 33 ,"11",{ 0 , 7 , 10 , 14 , 17 , -24 },{ 12 , 7 , 10 , 14 , 17 , -24 },{ 12 , 19 , 10 , 14 , 17 , -24 }},
{ 34 ,"13",{ 0 , 4 , 7 , 10 , 14 , 21 },{ 12 , 4 , 7 , 10 , 14 , 21 },{ 12 , 16 , 7 , 10 , 14 , 21 }},
{ 35 ,"11b9",{ 0 , 7 , 10 , 13 , 17 , -24 },{ 12 , 7 , 10 , 13 , 17 , -24 },{ 12 , 19 , 10 , 13 , 17 , -24 }},
{ 36 ,"13#9",{ 0 , 4 , 7 , 10 , 15 , 21 },{ 12 , 4 , 7 , 10 , 15 , 21 },{ 12 , 16 , 7 , 10 , 15 , 21 }},
{ 37 ,"13b5",{ 0 , 4 , 6 , 9 , 10 , 14 },{ 12 , 4 , 6 , 9 , 10 , 14 },{ 12 , 16 , 6 , 9 , 10 , 14 }},
{ 38 ,"13b9",{ 0 , 4 , 7 , 10 , 13 , 21 },{ 12 , 4 , 7 , 10 , 13 , 21 },{ 12 , 16 , 7 , 10 , 13 , 21 }},
{ 39 ,"13no5",{ 0 , 4 , 10 , 14 , 21 , -24 },{ 12 , 4 , 10 , 14 , 21 , -24 },{ 12 , 16 , 10 , 14 , 21 , -24 }},
{ 40 ,"13sus4",{ 0 , 5 , 7 , 10 , 14 , 21 },{ 12 , 5 , 7 , 10 , 14 , 21 },{ 12 , 17 , 7 , 10 , 14 , 21 }},
{ 41 ,"69#11",{ 0 , 4 , 7 , 9 , 14 , 18 },{ 12 , 4 , 7 , 9 , 14 , 18 },{ 12 , 16 , 7 , 9 , 14 , 18 }},
{ 42 ,"7#11",{ 0 , 4 , 7 , 10 , 18 , -24 },{ 12 , 4 , 7 , 10 , 18 , -24 },{ 12 , 16 , 7 , 10 , 18 , -24 }},
{ 43 ,"7#11b13",{ 0 , 4 , 7 , 10 , 18 , 20 },{ 12 , 4 , 7 , 10 , 18 , 20 },{ 12 , 16 , 7 , 10 , 18 , 20 }},
{ 44 ,"7#5",{ 0 , 4 , 8 , 10 , -24 , -20 },{ 12 , 4 , 8 , 10 , -24 , -20 },{ 12 , 16 , 8 , 10 , -12 , -20 }},
{ 45 ,"7#5#9",{ 0 , 4 , 8 , 10 , 15 , -24 },{ 12 , 4 , 8 , 10 , 15 , -24 },{ 12 , 16 , 8 , 10 , 15 , -24 }},
{ 46 ,"7#5b9",{ 0 , 4 , 8 , 10 , 13 , -24 },{ 12 , 4 , 8 , 10 , 13 , -24 },{ 12 , 16 , 8 , 10 , 13 , -24 }},
{ 47 ,"7#5b9#11",{ 0 , 4 , 8 , 10 , 13 , 18 },{ 12 , 4 , 8 , 10 , 13 , 18 },{ 12 , 16 , 8 , 10 , 13 , 18 }},
{ 48 ,"7#5sus4",{ 0 , 5 , 8 , 10 , -24 , -19 },{ 12 , 5 , 8 , 10 , -24 , -19 },{ 12 , 17 , 8 , 10 , -12 , -19 }},
{ 49 ,"7#9",{ 0 , 4 , 7 , 10 , 15 , -24 },{ 12 , 4 , 7 , 10 , 15 , -24 },{ 12 , 16 , 7 , 10 , 15 , -24 }},
{ 50 ,"7#9#11",{ 0 , 4 , 7 , 10 , 15 , 18 },{ 12 , 4 , 7 , 10 , 15 , 18 },{ 12 , 16 , 7 , 10 , 15 , 18 }},
{ 51 ,"7#9b13",{ 0 , 4 , 7 , 10 , 15 , 20 },{ 12 , 4 , 7 , 10 , 15 , 20 },{ 12 , 16 , 7 , 10 , 15 , 20 }},
{ 52 ,"7add6",{ 0 , 4 , 7 , 10 , 21 , -24 },{ 12 , 4 , 7 , 10 , 21 , -24 },{ 12 , 16 , 7 , 10 , 21 , -24 }},
{ 53 ,"7b13",{ 0 , 4 , 10 , 20 , -24 , -20 },{ 12 , 4 , 10 , 20 , -24 , -20 },{ 12 , 16 , 10 , 20 , -12 , -20 }},
{ 54 ,"7b5",{ 0 , 4 , 6 , 10 , -24 , -20 },{ 12 , 4 , 6 , 10 , -24 , -20 },{ 12 , 16 , 6 , 10 , -12 , -20 }},
{ 55 ,"7b6",{ 0 , 4 , 7 , 8 , 10 , -24 },{ 12 , 4 , 7 , 8 , 10 , -24 },{ 12 , 16 , 7 , 8 , 10 , -24 }},
{ 56 ,"7b9",{ 0 , 4 , 7 , 10 , 13 , -24 },{ 12 , 4 , 7 , 10 , 13 , -24 },{ 12 , 16 , 7 , 10 , 13 , -24 }},
{ 57 ,"7b9#11",{ 0 , 4 , 7 , 10 , 13 , 18 },{ 12 , 4 , 7 , 10 , 13 , 18 },{ 12 , 16 , 7 , 10 , 13 , 18 }},
{ 58 ,"7b9#9",{ 0 , 4 , 7 , 10 , 13 , 15 },{ 12 , 4 , 7 , 10 , 13 , 15 },{ 12 , 16 , 7 , 10 , 13 , 15 }},
{ 59 ,"7b9b13",{ 0 , 4 , 7 , 10 , 13 , 20 },{ 12 , 4 , 7 , 10 , 13 , 20 },{ 12 , 16 , 7 , 10 , 13 , 20 }},
{ 60 ,"7no5",{ 0 , 4 , 10 , -24 , -20 , -14 },{ 12 , 4 , 10 , -12 , -20 , -14 },{ 12 , 16 , 10 , -12 , -8 , -14 }},
{ 61 ,"7sus4",{ 0 , 5 , 7 , 10 , -24 , -19 },{ 12 , 5 , 7 , 10 , -24 , -19 },{ 12 , 17 , 7 , 10 , -12 , -19 }},
{ 62 ,"7sus4b9",{ 0 , 5 , 7 , 10 , 13 , -24 },{ 12 , 5 , 7 , 10 , 13 , -24 },{ 12 , 17 , 7 , 10 , 13 , -24 }},
{ 63 ,"7sus4b9b13",{ 0 , 5 , 7 , 10 , 13 , 20 },{ 12 , 5 , 7 , 10 , 13 , 20 },{ 12 , 17 , 7 , 10 , 13 , 20 }},
{ 64 ,"9#11",{ 0 , 4 , 7 , 10 , 14 , 18 },{ 12 , 4 , 7 , 10 , 14 , 18 },{ 12 , 16 , 7 , 10 , 14 , 18 }},
{ 65 ,"9#5",{ 0 , 4 , 8 , 10 , 14 , -24 },{ 12 , 4 , 8 , 10 , 14 , -24 },{ 12 , 16 , 8 , 10 , 14 , -24 }},
{ 66 ,"9#5#11",{ 0 , 4 , 8 , 10 , 14 , 18 },{ 12 , 4 , 8 , 10 , 14 , 18 },{ 12 , 16 , 8 , 10 , 14 , 18 }},
{ 67 ,"9b13",{ 0 , 4 , 10 , 14 , 20 , -24 },{ 12 , 4 , 10 , 14 , 20 , -24 },{ 12 , 16 , 10 , 14 , 20 , -24 }},
{ 68 ,"9b5",{ 0 , 4 , 6 , 10 , 14 , -24 },{ 12 , 4 , 6 , 10 , 14 , -24 },{ 12 , 16 , 6 , 10 , 14 , -24 }},
{ 69 ,"9no5",{ 0 , 4 , 10 , 14 , -24 , -20 },{ 12 , 4 , 10 , 14 , -24 , -20 },{ 12 , 16 , 10 , 14 , -12 , -20 }},
{ 70 ,"9sus4",{ 0 , 5 , 7 , 10 , 14 , -24 },{ 12 , 5 , 7 , 10 , 14 , -24 },{ 12 , 17 , 7 , 10 , 14 , -24 }},
{ 71 ,"m",{ 0 , 3 , 7 , -24 , -21 , -17 },{ 12 , 3 , 7 , -12 , -21 , -17 },{ 12 , 15 , 7 , -12 , -9 , -17 }},
{ 72 ,"m#5",{ 0 , 3 , 8 , -24 , -21 , -16 },{ 12 , 3 , 8 , -12 , -21 , -16 },{ 12 , 15 , 8 , -12 , -9 , -16 }},
{ 73 ,"m11",{ 0 , 3 , 7 , 10 , 14 , 17 },{ 12 , 3 , 7 , 10 , 14 , 17 },{ 12 , 15 , 7 , 10 , 14 , 17 }},
{ 74 ,"m11A5",{ 0 , 3 , 8 , 10 , 14 , 17 },{ 12 , 3 , 8 , 10 , 14 , 17 },{ 12 , 15 , 8 , 10 , 14 , 17 }},
{ 75 ,"m11b5",{ 0 , 3 , 10 , 14 , 17 , 18 },{ 12 , 3 , 10 , 14 , 17 , 18 },{ 12 , 15 , 10 , 14 , 17 , 18 }},
{ 76 ,"m6",{ 0 , 3 , 5 , 7 , 21 , -24 },{ 12 , 3 , 5 , 7 , 21 , -24 },{ 12 , 15 , 5 , 7 , 21 , -24 }},
{ 77 ,"m69",{ 0 , 3 , 7 , 9 , 14 , -24 },{ 12 , 3 , 7 , 9 , 14 , -24 },{ 12 , 15 , 7 , 9 , 14 , -24 }},
{ 78 ,"m7",{ 0 , 3 , 7 , 10 , -24 , -21 },{ 12 , 3 , 7 , 10 , -24 , -21 },{ 12 , 15 , 7 , 10 , -12 , -21 }},
{ 79 ,"m7#5",{ 0 , 3 , 8 , 10 , -24 , -21 },{ 12 , 3 , 8 , 10 , -24 , -21 },{ 12 , 15 , 8 , 10 , -12 , -21 }},
{ 80 ,"m7add11",{ 0 , 3 , 7 , 10 , 17 , -24 },{ 12 , 3 , 7 , 10 , 17 , -24 },{ 12 , 15 , 7 , 10 , 17 , -24 }},
{ 81 ,"m7b5",{ 0 , 3 , 6 , 10 , -24 , -21 },{ 12 , 3 , 6 , 10 , -24 , -21 },{ 12 , 15 , 6 , 10 , -12 , -21 }},
{ 82 ,"m9",{ 0 , 3 , 7 , 10 , 14 , -24 },{ 12 , 3 , 7 , 10 , 14 , -24 },{ 12 , 15 , 7 , 10 , 14 , -24 }},
{ 83 ,"#5",{ 0 , 3 , 8 , 10 , 14 , -24 },{ 12 , 3 , 8 , 10 , 14 , -24 },{ 12 , 15 , 8 , 10 , 14 , -24 }},
{ 84 ,"m9b5",{ 0 , 3 , 10 , 14 , 18 , -24 },{ 12 , 3 , 10 , 14 , 18 , -24 },{ 12 , 15 , 10 , 14 , 18 , -24 }},
{ 85 ,"mMaj7",{ 0 , 3 , 7 , 11 , -24 , -21 },{ 12 , 3 , 7 , 11 , -24 , -21 },{ 12 , 15 , 7 , 11 , -12 , -21 }},
{ 86 ,"mMaj7b6",{ 0 , 3 , 7 , 8 , 11 , -24 },{ 12 , 3 , 7 , 8 , 11 , -24 },{ 12 , 15 , 7 , 8 , 11 , -24 }},
{ 87 ,"mM9",{ 0 , 3 , 7 , 11 , 14 , -24 },{ 12 , 3 , 7 , 11 , 14 , -24 },{ 12 , 15 , 7 , 11 , 14 , -24 }},
{ 88 ,"mM9b6",{ 0 , 3 , 7 , 8 , 11 , 14 },{ 12 , 3 , 7 , 8 , 11 , 14 },{ 12 , 15 , 7 , 8 , 11 , 14 }},
{ 89 ,"mb6M7",{ 0 , 3 , 8 , 11 , -24 , -21 },{ 12 , 3 , 8 , 11 , -24 , -21 },{ 12 , 15 , 8 , 11 , -12 , -21 }},
{ 90 ,"mb6b9",{ 0 , 3 , 8 , 13 , -24 , -21 },{ 12 , 3 , 8 , 13 , -24 , -21 },{ 12 , 15 , 8 , 13 , -12 , -21 }},
{ 91 ,"dim",{ 0 , 3 , 6 , -24 , -21 , -18 },{ 12 , 3 , 6 , -12 , -21 , -18 },{ 12 , 15 , 6 , -12 , -9 , -18 }},
{ 92 ,"dim7",{ 0 , 3 , 6 , 21 , -24 , -21 },{ 12 , 3 , 6 , 21 , -24 , -21 },{ 12 , 15 , 6 , 21 , -12 , -21 }},
{ 93 ,"dim7M7",{ 0 , 3 , 6 , 9 , 11 , -24 },{ 12 , 3 , 6 , 9 , 11 , -24 },{ 12 , 15 , 6 , 9 , 11 , -24 }},
{ 94 ,"dimM7",{ 0 , 3 , 6 , 11 , -24 , -21 },{ 12 , 3 , 6 , 11 , -24 , -21 },{ 12 , 15 , 6 , 11 , -12 , -21 }},
{ 95 ,"sus24",{ 0 , 2 , 5 , 7 , -24 , -22 },{ 12 , 2 , 5 , 7 , -24 , -22 },{ 12 , 14 , 5 , 7 , -12 , -22 }},
{ 96 ,"augadd#9",{ 0 , 4 , 8 , 15 , -24 , -20 },{ 12 , 4 , 8 , 15 , -24 , -20 },{ 12 , 16 , 8 , 15 , -12 , -20 }},
{ 97 ,"madd4",{ 0 , 3 , 5 , 7 , -24 , -21 },{ 12 , 3 , 5 , 7 , -24 , -21 },{ 12 , 15 , 5 , 7 , -12 , -21 }},
{ 98 ,"madd9",{ 0 , 3 , 7 , 14 , -24 , -21 },{ 12 , 3 , 7 , 14 , -24 , -21 },{ 12 , 15 , 7 , 14 , -12 , -21 }},
};
int ModeQuality[7][7] {
{MAJ,MIN,MIN,MAJ,MAJ,MIN,DIM}, // Ionian
{MIN,MIN,MAJ,MAJ,MIN,DIM,MAJ}, // Dorian
{MIN,MAJ,MAJ,MIN,DIM,MAJ,MIN}, // Phrygian
{MAJ,MAJ,MIN,DIM,MAJ,MIN,MIN}, // Lydian
{MAJ,MIN,DIM,MAJ,MIN,MIN,MAJ}, // Mixolydian
{MIN,DIM,MAJ,MIN,MIN,MAJ,MAJ}, // Aeolian
{DIM,MAJ,MIN,MIN,MAJ,MAJ,MIN} // Locrian
};

int ModeOffset[7][7] {
{0,0,0,0,0,0,0}, // Ionian
{0,0,-1,-1,0,0,-1}, // Dorian
{0,-1,-1,0,0,-1,-1}, // Phrygian
{0,0,0,1,0,0,0}, // Lydian
{0,0,0,0,0,0,-1}, // Mixolydian
{0,0,-1,0,0,-1,-1}, // Aeolian
{0,-1,-1,0,-1,-1,-1} // Locrian
};

// NOTE_C = 0,
// NOTE_D_FLAT, // C Sharp
// NOTE_D,
// NOTE_E_FLAT, // D Sharp
// NOTE_E,
// NOTE_F,
// NOTE_G_FLAT, //F Sharp
// NOTE_G,
// NOTE_A_FLAT, // G Sharp
// NOTE_A,
// NOTE_B_FLAT, // A Sharp
// NOTE_B,

//0 1 2 3 4 5 6 7 8 9 10 11 12
int tonicIndex[13] {1, 3, 5, 0, 2, 4, 6, 1, 3, 5, 0, 2, 4};
int scaleIndex[7] {5, 3, 1, 6, 4, 2, 0};
int noteIndex[13] {
NOTE_G_FLAT,
NOTE_D_FLAT,
NOTE_A_FLAT,
NOTE_E_FLAT,
NOTE_B_FLAT,
NOTE_F,
NOTE_C,
NOTE_G,
NOTE_D,
NOTE_A,
NOTE_E,
NOTE_B,
NOTE_G_FLAT};
};

Core & CoreUtil();

+ 0
- 204
repos/AmalgamatedHarmonics/src/Imperfect.cpp View File

@@ -1,204 +0,0 @@
#include "dsp/digital.hpp"

#include "AH.hpp"
#include "Core.hpp"
#include "UI.hpp"

#include <iostream>

struct Imperfect : AHModule {

enum ParamIds {
DELAY_PARAM,
DELAYSPREAD_PARAM = DELAY_PARAM + 8,
LENGTH_PARAM = DELAYSPREAD_PARAM + 8,
LENGTHSPREAD_PARAM = LENGTH_PARAM + 8,
DIVISION_PARAM = LENGTHSPREAD_PARAM + 8,
NUM_PARAMS = DIVISION_PARAM + 8
};
enum InputIds {
TRIG_INPUT,
NUM_INPUTS = TRIG_INPUT + 8
};
enum OutputIds {
OUT_OUTPUT,
NUM_OUTPUTS = OUT_OUTPUT + 8
};
enum LightIds {
OUT_LIGHT,
NUM_LIGHTS = OUT_LIGHT + 16
};

Imperfect() : AHModule(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS) {
reset();
}
void step() override;
void reset() override {
for (int i = 0; i < 8; i++) {
delayState[i] = false;
gateState[i] = false;
delayTime[i] = 0.0;
gateTime[i] = 0.0;
}
}
Core core;

bool delayState[8];
bool gateState[8];
float delayTime[8];
float gateTime[8];
PulseGenerator delayPhase[8];
PulseGenerator gatePhase[8];
SchmittTrigger inTrigger[8];

int counter[8];
};

void Imperfect::step() {
stepX++;
float dlyLen;
float dlySpr;
float gateLen;
float gateSpr;
int lastValidInput = -1;
for (int i = 0; i < 8; i++) {
bool generateSignal = false;
bool inputActive = inputs[TRIG_INPUT + i].active;
bool haveTrigger = inTrigger[i].process(inputs[TRIG_INPUT + i].value);
bool outputActive = outputs[OUT_OUTPUT + i].active;
// If we have an active input, we should forget about previous valid inputs
if (inputActive) {
lastValidInput = -1;
if (haveTrigger) {
if (debug()) { std::cout << stepX << " " << i << " has active input and has received trigger" << std::endl; }
generateSignal = true;
lastValidInput = i;
}
} else {
// We have an output and previously seen a trigger
if (outputActive && lastValidInput > -1) {
if (debug()) { std::cout << stepX << " " << i << " has active out and has seen trigger on " << lastValidInput << std::endl; }
generateSignal = true;
}
}
if (generateSignal) {

counter[i]++;
int target = core.ipow(2,params[DIVISION_PARAM + i].value);
if (debug()) {
std::cout << stepX << " Div: " << i << ": Target: " << target << " Cnt: " << counter[lastValidInput] << " Exp: " << counter[lastValidInput] % target << std::endl;
}

if (counter[lastValidInput] % target == 0) {

dlyLen = log2(params[DELAY_PARAM + i].value);
dlySpr = log2(params[DELAYSPREAD_PARAM + i].value);
gateLen = log2(params[LENGTH_PARAM + i].value);
gateSpr = log2(params[LENGTHSPREAD_PARAM + i].value);

// Determine delay and gate times for all active outputs
double rndD = clamp(core.gaussrand(), -2.0f, 2.0f);
delayTime[i] = clamp(dlyLen + dlySpr * rndD, 0.0f, 100.0f);
// The modified gate time cannot be earlier than the start of the delay
double rndG = clamp(core.gaussrand(), -2.0f, 2.0f);
gateTime[i] = clamp(gateLen + gateSpr * rndG, 0.02f, 100.0f);

if (debug()) {
std::cout << stepX << " Delay: " << i << ": Len: " << dlyLen << " Spr: " << dlySpr << " r: " << rndD << " = " << delayTime[i] << std::endl;
std::cout << stepX << " Gate: " << i << ": Len: " << gateLen << ", Spr: " << gateSpr << " r: " << rndG << " = " << gateTime[i] << std::endl;
}

// Trigger the respective delay pulse generators
delayState[i] = true;
delayPhase[i].trigger(delayTime[i]);
}
}
}
for (int i = 0; i < 8; i++) {
if (delayState[i] && !delayPhase[i].process(delta)) {
gatePhase[i].trigger(gateTime[i]);
gateState[i] = true;
delayState[i] = false;
}

lights[OUT_LIGHT + i * 2].value = 0.0;
lights[OUT_LIGHT + i * 2 + 1].value = 0.0;
if (gatePhase[i].process(delta)) {
outputs[OUT_OUTPUT + i].value = 10.0;

lights[OUT_LIGHT + i * 2].value = 1.0;
lights[OUT_LIGHT + i * 2 + 1].value = 0.0;

} else {
outputs[OUT_OUTPUT + i].value = 0.0;
gateState[i] = false;

if (delayState[i]) {
lights[OUT_LIGHT + i * 2].value = 0.0;
lights[OUT_LIGHT + i * 2 + 1].value = 1.0;
}
}
}
}

struct ImperfectWidget : ModuleWidget {
ImperfectWidget(Imperfect *module);
};

ImperfectWidget::ImperfectWidget(Imperfect *module) : ModuleWidget(module) {
UI ui;
box.size = Vec(315, 380);

{
SVGPanel *panel = new SVGPanel();
panel->box.size = box.size;
panel->setBackground(SVG::load(assetPlugin(plugin, "res/Imperfect.svg")));
addChild(panel);
}

addChild(Widget::create<ScrewSilver>(Vec(15, 0)));
addChild(Widget::create<ScrewSilver>(Vec(box.size.x - 30, 0)));
addChild(Widget::create<ScrewSilver>(Vec(15, 365)));
addChild(Widget::create<ScrewSilver>(Vec(box.size.x - 30, 365)));

for (int i = 0; i < 8; i++) {
addInput(Port::create<PJ301MPort>(ui.getPosition(UI::PORT, 0, i + 1, true, true), Port::INPUT, module, Imperfect::TRIG_INPUT + i));
addParam(ParamWidget::create<AHKnobNoSnap>(ui.getPosition(UI::KNOB, 1, i + 1, true, true), module, Imperfect::DELAY_PARAM + i, 1.0, 2.0, 1.0));
addParam(ParamWidget::create<AHKnobNoSnap>(ui.getPosition(UI::KNOB, 2, i + 1, true, true), module, Imperfect::DELAYSPREAD_PARAM + i, 1.0, 2.0, 1.0));
addParam(ParamWidget::create<AHKnobNoSnap>(ui.getPosition(UI::KNOB, 3, i + 1, true, true), module, Imperfect::LENGTH_PARAM + i, 1.001, 2.0, 1.001)); // Always produce gate
addParam(ParamWidget::create<AHKnobNoSnap>(ui.getPosition(UI::KNOB, 4, i + 1, true, true), module, Imperfect::LENGTHSPREAD_PARAM + i, 1.0, 2.0, 1.0));
addParam(ParamWidget::create<AHKnobSnap>(ui.getPosition(UI::KNOB, 5, i + 1, true, true), module, Imperfect::DIVISION_PARAM + i, 0, 8, 0));
addChild(ModuleLightWidget::create<MediumLight<GreenRedLight>>(ui.getPosition(UI::LIGHT, 6, i + 1, true, true), module, Imperfect::OUT_LIGHT + i * 2));
addOutput(Port::create<PJ301MPort>(ui.getPosition(UI::PORT, 7, i + 1, true, true), Port::OUTPUT, module, Imperfect::OUT_OUTPUT + i));
}
}

Model *modelImperfect = Model::create<Imperfect, ImperfectWidget>( "Amalgamated Harmonics", "Imperfect", "Imperfect (deprecated)", UTILITY_TAG);


+ 0
- 407
repos/AmalgamatedHarmonics/src/Imperfect2.cpp View File

@@ -1,407 +0,0 @@
#include "dsp/digital.hpp"

#include "AH.hpp"
#include "Core.hpp"
#include "UI.hpp"

#include <iostream>

struct Imperfect2 : AHModule {

enum ParamIds {
ENUMS(DELAY_PARAM,4),
ENUMS(DELAYSPREAD_PARAM,4),
ENUMS(LENGTH_PARAM,4),
ENUMS(LENGTHSPREAD_PARAM,4),
ENUMS(DIVISION_PARAM,4),
NUM_PARAMS
};
enum InputIds {
ENUMS(TRIG_INPUT,4),
ENUMS(DELAY_INPUT,4),
ENUMS(DELAYSPREAD_INPUT,4),
ENUMS(LENGTH_INPUT,4),
ENUMS(LENGTHSPREAD_INPUT,4),
NUM_INPUTS
};
enum OutputIds {
ENUMS(OUT_OUTPUT,4),
NUM_OUTPUTS
};
enum LightIds {
ENUMS(OUT_LIGHT,8),
NUM_LIGHTS
};

Imperfect2() : AHModule(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS) {
reset();
}
void step() override;
void reset() override {
for (int i = 0; i < 4; i++) {
delayState[i] = false;
gateState[i] = false;
delayTime[i] = 0.0;
gateTime[i] = 0.0;
bpm[i] = 0.0;
}
}

Core core;

bool delayState[4];
bool gateState[4];
float delayTime[4];
int delayTimeMs[4];
int delaySprMs[4];
float gateTime[4];
int gateTimeMs[4];
int gateSprMs[4];
float bpm[4];
int division[4];
int actDelayMs[4] = {0, 0, 0, 0};
int actGateMs[4] = {0, 0, 0, 0};
AHPulseGenerator delayPhase[4];
AHPulseGenerator gatePhase[4];
SchmittTrigger inTrigger[4];

int counter[4];
BpmCalculator bpmCalc[4];
};



void Imperfect2::step() {
stepX++;
float dlyLen;
float dlySpr;
float gateLen;
float gateSpr;
int lastValidInput = -1;
for (int i = 0; i < 4; i++) {
bool generateSignal = false;
bool inputActive = inputs[TRIG_INPUT + i].active;
bool haveTrigger = inTrigger[i].process(inputs[TRIG_INPUT + i].value);
bool outputActive = outputs[OUT_OUTPUT + i].active;
// This is where we manage row-chaining/normalisation, i.e a row can be active without an
// input by receiving the input clock from a previous (higher) row
// If we have an active input, we should forget about previous valid inputs
if (inputActive) {
bpm[i] = bpmCalc[i].calculateBPM(delta, inputs[TRIG_INPUT + i].value);
lastValidInput = -1;
if (haveTrigger) {
if (debug()) { std::cout << stepX << " " << i << " has active input and has received trigger" << std::endl; }
generateSignal = true;
lastValidInput = i; // Row i has a valid input
}
} else {
// We have an output plugged in this row and previously seen a trigger on previous row
if (outputActive && lastValidInput > -1) {
if (debug()) { std::cout << stepX << " " << i << " has active out and has seen trigger on " << lastValidInput << std::endl; }
generateSignal = true;
}
bpm[i] = 0.0;
}
if (inputs[DELAY_INPUT + i].active) {
dlyLen = log2(fabs(inputs[DELAY_INPUT + i].value) + 1.0f);
} else {
dlyLen = log2(params[DELAY_PARAM + i].value);
}

if (inputs[DELAYSPREAD_INPUT + i].active) {
dlySpr = log2(fabs(inputs[DELAYSPREAD_INPUT + i].value) + 1.0f);
} else {
dlySpr = log2(params[DELAYSPREAD_PARAM + i].value);
}
if (inputs[LENGTH_INPUT + i].active) {
gateLen = log2(fabs(inputs[LENGTH_INPUT + i].value) + 1.001f);
} else {
gateLen = log2(params[LENGTH_PARAM + i].value);
}
if (inputs[LENGTHSPREAD_INPUT + i].active) {
gateSpr = log2(fabs(inputs[LENGTHSPREAD_INPUT + i].value) + 1.0f);
} else {
gateSpr = log2(params[LENGTHSPREAD_PARAM + i].value);
}
division[i] = params[DIVISION_PARAM + i].value;
delayTimeMs[i] = dlyLen * 1000;
delaySprMs[i] = dlySpr * 2000; // scaled by ±2 below
gateTimeMs[i] = gateLen * 1000;
gateSprMs[i] = gateSpr * 2000; // scaled by ±2 below
if (generateSignal) {

counter[i]++;
int target = division[i];
if (debug()) {
std::cout << stepX << " Div: " << i << ": Target: " << target << " Cnt: " << counter[lastValidInput] << " Exp: " << counter[lastValidInput] % division[i] << std::endl;
}

if (counter[lastValidInput] % target == 0) {

// check that we are not in the gate phase
if (!gatePhase[i].ishigh() && !delayPhase[i].ishigh()) {

// Determine delay and gate times for all active outputs
double rndD = clamp(core.gaussrand(), -2.0f, 2.0f);
delayTime[i] = clamp(dlyLen + dlySpr * rndD, 0.0f, 100.0f);
// The modified gate time cannot be earlier than the start of the delay
double rndG = clamp(core.gaussrand(), -2.0f, 2.0f);
gateTime[i] = clamp(gateLen + gateSpr * rndG, Core::TRIGGER, 100.0f);

if (debug()) {
std::cout << stepX << " Delay: " << i << ": Len: " << dlyLen << " Spr: " << dlySpr << " r: " << rndD << " = " << delayTime[i] << std::endl;
std::cout << stepX << " Gate: " << i << ": Len: " << gateLen << ", Spr: " << gateSpr << " r: " << rndG << " = " << gateTime[i] << std::endl;
}

// Trigger the respective delay pulse generator
delayState[i] = true;
if (delayPhase[i].trigger(delayTime[i])) {
actDelayMs[i] = delayTime[i] * 1000;
}
}
}
}
}
for (int i = 0; i < 4; i++) {
if (delayState[i] && !delayPhase[i].process(delta)) {
if (gatePhase[i].trigger(gateTime[i])) {
actGateMs[i] = gateTime[i] * 1000;
}
gateState[i] = true;
delayState[i] = false;
}

lights[OUT_LIGHT + i * 2].value = 0.0f;
lights[OUT_LIGHT + i * 2 + 1].value = 0.0f;
if (gatePhase[i].process(delta)) {
outputs[OUT_OUTPUT + i].value = 10.0f;

lights[OUT_LIGHT + i * 2].value = 1.0f;
lights[OUT_LIGHT + i * 2 + 1].value = 0.0f;

} else {
outputs[OUT_OUTPUT + i].value = 0.0f;
gateState[i] = false;

if (delayState[i]) {
lights[OUT_LIGHT + i * 2].value = 0.0f;
lights[OUT_LIGHT + i * 2 + 1].value = 1.0f;
}
}
}
}

struct Imperfect2Box : TransparentWidget {
Imperfect2 *module;
int frame = 0;
std::shared_ptr<Font> font;
float *bpm;
int *dly;
int *dlySpr;
int *gate;
int *gateSpr;
int *division;
int *actDly;
int *actGate;
Imperfect2Box() {
font = Font::load(assetPlugin(plugin, "res/DSEG14ClassicMini-BoldItalic.ttf"));
}

void draw(NVGcontext *vg) override {
Vec pos = Vec(0, 15);

nvgFontSize(vg, 10);
nvgFontFaceId(vg, font->handle);
nvgTextLetterSpacing(vg, -1);
nvgTextAlign(vg, NVGalign::NVG_ALIGN_CENTER);

nvgFillColor(vg, nvgRGBA(255, 0, 0, 0xff));
char text[10];
if (*bpm == 0.0f) {
snprintf(text, sizeof(text), "-");
} else {
snprintf(text, sizeof(text), "%.1f", *bpm);
}
nvgText(vg, pos.x + 20, pos.y, text, NULL);
snprintf(text, sizeof(text), "%d", *dly);
nvgText(vg, pos.x + 74, pos.y, text, NULL);

if (*dlySpr != 0) {
snprintf(text, sizeof(text), "%d", *dlySpr);
nvgText(vg, pos.x + 144, pos.y, text, NULL);
}

snprintf(text, sizeof(text), "%d", *gate);
nvgText(vg, pos.x + 214, pos.y, text, NULL);

if (*gateSpr != 0) {
snprintf(text, sizeof(text), "%d", *gateSpr);
nvgText(vg, pos.x + 284, pos.y, text, NULL);
}

snprintf(text, sizeof(text), "%d", *division);
nvgText(vg, pos.x + 334, pos.y, text, NULL);
nvgFillColor(vg, nvgRGBA(0, 0, 0, 0xff));
snprintf(text, sizeof(text), "%d", *actDly);
nvgText(vg, pos.x + 372, pos.y, text, NULL);

snprintf(text, sizeof(text), "%d", *actGate);
nvgText(vg, pos.x + 408, pos.y, text, NULL);

}
};


struct Imperfect2Widget : ModuleWidget {
Imperfect2Widget(Imperfect2 *module);
};

Imperfect2Widget::Imperfect2Widget(Imperfect2 *module) : ModuleWidget(module) {
UI ui;
box.size = Vec(450, 380);

{
SVGPanel *panel = new SVGPanel();
panel->box.size = box.size;
panel->setBackground(SVG::load(assetPlugin(plugin, "res/Imperfect2.svg")));
addChild(panel);
}

addChild(Widget::create<ScrewSilver>(Vec(15, 0)));
addChild(Widget::create<ScrewSilver>(Vec(box.size.x - 30, 0)));
addChild(Widget::create<ScrewSilver>(Vec(15, 365)));
addChild(Widget::create<ScrewSilver>(Vec(box.size.x - 30, 365)));
{
Imperfect2Box *display = new Imperfect2Box();
display->module = module;
display->box.pos = Vec(10, 95);
display->box.size = Vec(200, 20);
display->bpm = &(module->bpm[0]);
display->dly = &(module->delayTimeMs[0]);
display->dlySpr = &(module->delaySprMs[0]);
display->gate = &(module->gateTimeMs[0]);
display->gateSpr = &(module->gateSprMs[0]);
display->division = &(module->division[0]);
display->actDly = &(module->actDelayMs[0]);
display->actGate = &(module->actGateMs[0]);
addChild(display);
}

{
Imperfect2Box *display = new Imperfect2Box();
display->module = module;
display->box.pos = Vec(10, 165);
display->box.size = Vec(200, 20);
display->bpm = &(module->bpm[1]);
display->dly = &(module->delayTimeMs[1]);
display->dlySpr = &(module->delaySprMs[1]);
display->gate = &(module->gateTimeMs[1]);
display->gateSpr = &(module->gateSprMs[1]);
display->division = &(module->division[1]);
display->actDly = &(module->actDelayMs[1]);
display->actGate = &(module->actGateMs[1]);
addChild(display);
}

{
Imperfect2Box *display = new Imperfect2Box();
display->module = module;
display->box.pos = Vec(10, 235);
display->box.size = Vec(200, 20);
display->bpm = &(module->bpm[2]);
display->dly = &(module->delayTimeMs[2]);
display->dlySpr = &(module->delaySprMs[2]);
display->gate = &(module->gateTimeMs[2]);
display->gateSpr = &(module->gateSprMs[2]);
display->division = &(module->division[2]);
display->actDly = &(module->actDelayMs[2]);
display->actGate = &(module->actGateMs[2]);
addChild(display);
}

{
Imperfect2Box *display = new Imperfect2Box();
display->module = module;
display->box.pos = Vec(10, 305);
display->box.size = Vec(200, 20);
display->bpm = &(module->bpm[3]);
display->dly = &(module->delayTimeMs[3]);
display->dlySpr = &(module->delaySprMs[3]);
display->gate = &(module->gateTimeMs[3]);
display->gateSpr = &(module->gateSprMs[3]);
display->division = &(module->division[3]);
display->actDly = &(module->actDelayMs[3]);
display->actGate = &(module->actGateMs[3]);
addChild(display);
}



for (int i = 0; i < 4; i++) {
addInput(Port::create<PJ301MPort>(ui.getPosition(UI::PORT, 0, i * 2 + 1, true, true), Port::INPUT, module, Imperfect2::TRIG_INPUT + i));
addInput(Port::create<PJ301MPort>(ui.getPosition(UI::PORT, 1, i * 2 + 1, true, true), Port::INPUT, module, Imperfect2::DELAY_INPUT + i));
addParam(ParamWidget::create<AHKnobNoSnap>(ui.getPosition(UI::KNOB, 2, i * 2 + 1, true, true), module, Imperfect2::DELAY_PARAM + i, 1.0f, 2.0f, 1.0f));
addInput(Port::create<PJ301MPort>(ui.getPosition(UI::PORT, 3, i * 2 + 1, true, true), Port::INPUT, module, Imperfect2::DELAYSPREAD_INPUT + i));
addParam(ParamWidget::create<AHKnobNoSnap>(ui.getPosition(UI::KNOB, 4, i * 2 + 1, true, true), module, Imperfect2::DELAYSPREAD_PARAM + i, 1.0f, 2.0f, 1.0f));
addInput(Port::create<PJ301MPort>(ui.getPosition(UI::PORT, 5, i * 2 + 1, true, true), Port::INPUT, module, Imperfect2::LENGTH_INPUT + i));
addParam(ParamWidget::create<AHKnobNoSnap>(ui.getPosition(UI::KNOB, 6, i * 2 + 1, true, true), module, Imperfect2::LENGTH_PARAM + i, 1.001f, 2.0f, 1.001f)); // Always produce gate
addInput(Port::create<PJ301MPort>(ui.getPosition(UI::PORT, 7, i * 2 + 1, true, true), Port::INPUT, module, Imperfect2::LENGTHSPREAD_INPUT + i));
addParam(ParamWidget::create<AHKnobNoSnap>(ui.getPosition(UI::KNOB, 8, i * 2 + 1, true, true), module, Imperfect2::LENGTHSPREAD_PARAM + i, 1.0, 2.0, 1.0f));
addParam(ParamWidget::create<AHKnobSnap>(ui.getPosition(UI::KNOB, 9, i * 2 + 1, true, true), module, Imperfect2::DIVISION_PARAM + i, 1, 64, 1));
addChild(ModuleLightWidget::create<MediumLight<GreenRedLight>>(ui.getPosition(UI::LIGHT, 10, i * 2 + 1, true, true), module, Imperfect2::OUT_LIGHT + i * 2));
addOutput(Port::create<PJ301MPort>(ui.getPosition(UI::PORT, 11, i * 2+ 1, true, true), Port::OUTPUT, module, Imperfect2::OUT_OUTPUT + i));
}
}

Model *modelImperfect2 = Model::create<Imperfect2, Imperfect2Widget>( "Amalgamated Harmonics", "Imperfect2", "Imperfect MkII", UTILITY_TAG);


+ 0
- 556
repos/AmalgamatedHarmonics/src/Progress.cpp View File

@@ -1,556 +0,0 @@
#include "AH.hpp"
#include "Core.hpp"
#include "UI.hpp"
#include "dsp/digital.hpp"

#include <iostream>

struct Progress : AHModule {

const static int NUM_PITCHES = 6;
enum ParamIds {
CLOCK_PARAM,
RUN_PARAM,
RESET_PARAM,
STEPS_PARAM,
ENUMS(ROOT_PARAM,8),
ENUMS(CHORD_PARAM,8),
ENUMS(INV_PARAM,8),
ENUMS(GATE_PARAM,8),
NUM_PARAMS
};
enum InputIds {
KEY_INPUT,
MODE_INPUT,
CLOCK_INPUT,
EXT_CLOCK_INPUT,
RESET_INPUT,
STEPS_INPUT,
NUM_INPUTS
};
enum OutputIds {
GATES_OUTPUT,
ENUMS(PITCH_OUTPUT,6),
ENUMS(GATE_OUTPUT,8),
NUM_OUTPUTS
};
enum LightIds {
RUNNING_LIGHT,
RESET_LIGHT,
GATES_LIGHT,
ENUMS(GATE_LIGHTS,8),
NUM_LIGHTS
};

float sampleRate;
Progress() : AHModule(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS) {
sampleRate = engineGetSampleRate();
}
void onSampleRateChange() override {
sampleRate = engineGetSampleRate();
}

void step() override;
enum ParamType {
ROOT_TYPE,
CHORD_TYPE,
INV_TYPE
};

void receiveEvent(ParamEvent e) override {
if (receiveEvents && e.pType != -1) { // AHParamWidgets that are no config through set<>() have a pType of -1
if (modeMode) {
paramState = "> " +
CoreUtil().noteNames[currRoot[e.pId]] +
CoreUtil().ChordTable[currChord[e.pId]].quality + " " +
CoreUtil().inversionNames[currInv[e.pId]] + " " + "[" +
CoreUtil().degreeNames[currDegree[e.pId] * 3 + currQuality[e.pId]] + "]";
} else {
paramState = "> " +
CoreUtil().noteNames[currRoot[e.pId]] +
CoreUtil().ChordTable[currChord[e.pId]].quality + " " +
CoreUtil().inversionNames[currInv[e.pId]];
}
}
keepStateDisplay = 0;
}
json_t *toJson() override {
json_t *rootJ = json_object();

// running
json_object_set_new(rootJ, "running", json_boolean(running));

// gates
json_t *gatesJ = json_array();
for (int i = 0; i < 8; i++) {
json_t *gateJ = json_integer((int) gates[i]);
json_array_append_new(gatesJ, gateJ);
}
json_object_set_new(rootJ, "gates", gatesJ);

// gateMode
json_t *gateModeJ = json_integer((int) gateMode);
json_object_set_new(rootJ, "gateMode", gateModeJ);

return rootJ;
}
void fromJson(json_t *rootJ) override {
// running
json_t *runningJ = json_object_get(rootJ, "running");
if (runningJ)
running = json_is_true(runningJ);

// gates
json_t *gatesJ = json_object_get(rootJ, "gates");
if (gatesJ) {
for (int i = 0; i < 8; i++) {
json_t *gateJ = json_array_get(gatesJ, i);
if (gateJ)
gates[i] = !!json_integer_value(gateJ);
}
}

// gateMode
json_t *gateModeJ = json_object_get(rootJ, "gateMode");
if (gateModeJ)
gateMode = (GateMode)json_integer_value(gateModeJ);
}
bool running = true;
// for external clock
SchmittTrigger clockTrigger;
// For buttons
SchmittTrigger runningTrigger;
SchmittTrigger resetTrigger;
SchmittTrigger gateTriggers[8];
PulseGenerator gatePulse;

/** Phase of internal LFO */
float phase = 0.0f;

// Step index
int index = 0;
bool gates[8] = {true,true,true,true,true,true,true,true};

float resetLight = 0.0f;
float gateLight = 0.0f;
float stepLights[8] = {};

enum GateMode {
TRIGGER,
RETRIGGER,
CONTINUOUS,
};
GateMode gateMode = CONTINUOUS;
bool modeMode = false;
bool prevModeMode = false;
int offset = 24; // Repeated notes in chord and expressed in the chord definition as being transposed 2 octaves lower.
// When played this offset needs to be removed (or the notes removed, or the notes transposed to an octave higher)
float prevRootInput[8] = {-100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0};
float prevChrInput[8] = {-100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0};

float prevDegreeInput[8] = {-100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0};
float prevQualityInput[8] = {-100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0};

float prevInvInput[8] = {-100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0, -100.0};

float currRootInput[8];
float currChrInput[8];

float currDegreeInput[8];
float currQualityInput[8];

float currInvInput[8];
int currMode;
int currKey;
int prevMode = -1;
int prevKey = -1;
int currRoot[8];
int currChord[8];
int currInv[8];

int currDegree[8];
int currQuality[8];
float pitches[8][6];
float oldPitches[6];
void reset() override {
for (int i = 0; i < 8; i++) {
gates[i] = true;
}
}
void setIndex(int index, int nSteps) {
phase = 0.0f;
this->index = index;
if (this->index >= nSteps) {
this->index = 0;
}
this->gatePulse.trigger(Core::TRIGGER);
}
};

void Progress::step() {
AHModule::step();
// Run
if (runningTrigger.process(params[RUN_PARAM].value)) {
running = !running;
}

int numSteps = (int) clamp(roundf(params[STEPS_PARAM].value + inputs[STEPS_INPUT].value), 1.0f, 8.0f);

if (running) {
if (inputs[EXT_CLOCK_INPUT].active) {
// External clock
if (clockTrigger.process(inputs[EXT_CLOCK_INPUT].value)) {
setIndex(index + 1, numSteps);
}
}
else {
// Internal clock
float clockTime = powf(2.0f, params[CLOCK_PARAM].value + inputs[CLOCK_INPUT].value);
phase += clockTime * engineGetSampleTime();
if (phase >= 1.0f) {
setIndex(index + 1, numSteps);
}
}
}

// Reset
if (resetTrigger.process(params[RESET_PARAM].value + inputs[RESET_INPUT].value)) {
setIndex(0, numSteps);
}

bool haveRoot = false;
bool haveMode = false;

// index is our current step
if (inputs[KEY_INPUT].active) {
float fRoot = inputs[KEY_INPUT].value;
currKey = CoreUtil().getKeyFromVolts(fRoot);
haveRoot = true;
}

if (inputs[MODE_INPUT].active) {
float fMode = inputs[MODE_INPUT].value;
currMode = CoreUtil().getModeFromVolts(fMode);
haveMode = true;
}
modeMode = haveRoot && haveMode;
if (modeMode && ((prevMode != currMode) || (prevKey != currKey))) { // Input changes so force re-read
for (int step = 0; step < 8; step++) {
prevDegreeInput[step] = -100.0;
prevQualityInput[step] = -100.0;
}
prevMode = currMode;
prevKey = currKey;
}
// Read inputs
for (int step = 0; step < 8; step++) {
if (modeMode) {
currDegreeInput[step] = params[CHORD_PARAM + step].value;
currQualityInput[step] = params[ROOT_PARAM + step].value;
if (prevModeMode != modeMode) { // Switching mode, so reset history to ensure re-read on return
prevChrInput[step] = -100.0;
prevRootInput[step] = -100.0;
}
} else {
currChrInput[step] = params[CHORD_PARAM + step].value;
currRootInput[step] = params[ROOT_PARAM + step].value;
if (prevModeMode != modeMode) { // Switching mode, so reset history to ensure re-read on return
prevDegreeInput[step] = -100.0;
prevQualityInput[step] = -100.0;
}
}
currInvInput[step] = params[INV_PARAM + step].value;
}
// Remember mode
prevModeMode = modeMode;
// Check for changes on all steps
for (int step = 0; step < 8; step++) {
bool update = false;
if (modeMode) {
currDegreeInput[step] = params[ROOT_PARAM + step].value;
currQualityInput[step] = params[CHORD_PARAM + step].value;
if (prevDegreeInput[step] != currDegreeInput[step]) {
prevDegreeInput[step] = currDegreeInput[step];
update = true;
}
if (prevQualityInput[step] != currQualityInput[step]) {
prevQualityInput[step] = currQualityInput[step];
update = true;
}
if (update) {
// Get Degree (I- VII)
currDegree[step] = round(rescale(fabs(currDegreeInput[step]), 0.0f, 10.0f, 0.0f, Core::NUM_DEGREES - 1));

// From the input root, mode and degree, we can get the root chord note and quality (Major,Minor,Diminshed)
CoreUtil().getRootFromMode(currMode,currKey,currDegree[step],&currRoot[step],&currQuality[step]);

// Now get the actual chord from the main list
switch(currQuality[step]) {
case Core::MAJ:
currChord[step] = round(rescale(fabs(currQualityInput[step]), 0.0f, 10.0f, 1.0f, 70.0f));
break;
case Core::MIN:
currChord[step] = round(rescale(fabs(currQualityInput[step]), 0.0f, 10.0f, 71.0f, 90.0f));
break;
case Core::DIM:
currChord[step] = round(rescale(fabs(currQualityInput[step]), 0.0f, 10.0f, 91.0f, 98.0f));
break;
}
}

} else {
// Chord Mode
// If anything has changed, recalculate output for that step
if (prevRootInput[step] != currRootInput[step]) {
prevRootInput[step] = currRootInput[step];
currRoot[step] = round(rescale(fabs(currRootInput[step]), 0.0f, 10.0f, 0.0f, Core::NUM_NOTES - 1)); // Param range is 0 to 10, mapped to 0 to 11
update = true;
}
if (prevChrInput[step] != currChrInput[step]) {
prevChrInput[step] = currChrInput[step];
currChord[step] = round(rescale(fabs(currChrInput[step]), 0.0f, 10.0f, 1.0f, 98.0f)); // Param range is 0 to 10
update = true;
}
}
// Inversions remain the same between Chord and Mode mode
if (prevInvInput[step] != currInvInput[step]) {
prevInvInput[step] = currInvInput[step];
currInv[step] = currInvInput[step];
update = true;
}
// So, after all that, we calculate the pitch output
if (update) {
int *chordArray;
// Get the array of pitches based on the inversion
switch(currInv[step]) {
case Core::ROOT: chordArray = CoreUtil().ChordTable[currChord[step]].root; break;
case Core::FIRST_INV: chordArray = CoreUtil().ChordTable[currChord[step]].first; break;
case Core::SECOND_INV: chordArray = CoreUtil().ChordTable[currChord[step]].second; break;
default: chordArray = CoreUtil().ChordTable[currChord[step]].root;
}
for (int j = 0; j < NUM_PITCHES; j++) {
// Set the pitches for this step. If the chord has less than 6 notes, the empty slots are
// filled with repeated notes. These notes are identified by a 24 semi-tome negative
// offset. We correct for that offset now, pitching thaem back into the original octave.
// They could be pitched into the octave above (or below)
if (chordArray[j] < 0) {
pitches[step][j] = CoreUtil().getVoltsFromPitch(chordArray[j] + offset,currRoot[step]);
} else {
pitches[step][j] = CoreUtil().getVoltsFromPitch(chordArray[j],currRoot[step]);
}
}
}
}
bool pulse = gatePulse.process(delta);
// Gate buttons
for (int i = 0; i < 8; i++) {
if (gateTriggers[i].process(params[GATE_PARAM + i].value)) {
gates[i] = !gates[i];
}
bool gateOn = (running && i == index && gates[i]);
if (gateMode == TRIGGER) {
gateOn = gateOn && pulse;
} else if (gateMode == RETRIGGER) {
gateOn = gateOn && !pulse;
}
outputs[GATE_OUTPUT + i].value = gateOn ? 10.0f : 0.0f;
lights[GATE_LIGHTS + i].setBrightnessSmooth((pulse && i == index) ? (gates[i] ? 1.f : 0.33) : (gates[i] ? 0.66 : 0.0));
}

bool gatesOn = (running && gates[index]);
if (gateMode == TRIGGER) {
gatesOn = gatesOn && pulse;
} else if (gateMode == RETRIGGER) {
gatesOn = gatesOn && !pulse;
}

// Outputs
outputs[GATES_OUTPUT].value = gatesOn ? 10.0f : 0.0f;
lights[RUNNING_LIGHT].value = (running);
lights[RESET_LIGHT].setBrightnessSmooth(resetTrigger.isHigh());
lights[GATES_LIGHT].setBrightnessSmooth(pulse);

for (int i = 0; i < NUM_PITCHES; i++) {
outputs[PITCH_OUTPUT + i].value = pitches[index][i];
}
}

struct ProgressWidget : ModuleWidget {
ProgressWidget(Progress *module);
Menu *createContextMenu() override;
};

ProgressWidget::ProgressWidget(Progress *module) : ModuleWidget(module) {
UI ui;
box.size = Vec(15*26, 380);

{
SVGPanel *panel = new SVGPanel();
panel->box.size = box.size;
panel->setBackground(SVG::load(assetPlugin(plugin, "res/Progress.svg")));
addChild(panel);
}

addChild(Widget::create<ScrewSilver>(Vec(15, 0)));
addChild(Widget::create<ScrewSilver>(Vec(box.size.x-30, 0)));
addChild(Widget::create<ScrewSilver>(Vec(15, 365)));
addChild(Widget::create<ScrewSilver>(Vec(box.size.x-30, 365)));
{
StateDisplay *display = new StateDisplay();
display->module = module;
display->box.pos = Vec(0, 135);
display->box.size = Vec(100, 140);
addChild(display);
}
addParam(ParamWidget::create<AHKnobNoSnap>(ui.getPosition(UI::KNOB, 0, 0, true, false), module, Progress::CLOCK_PARAM, -2.0, 6.0, 2.0));
addParam(ParamWidget::create<AHButton>(ui.getPosition(UI::BUTTON, 1, 0, true, false), module, Progress::RUN_PARAM, 0.0, 1.0, 0.0));
addChild(ModuleLightWidget::create<MediumLight<GreenLight>>(ui.getPosition(UI::LIGHT, 1, 0, true, false), module, Progress::RUNNING_LIGHT));
addParam(ParamWidget::create<AHButton>(ui.getPosition(UI::BUTTON, 2, 0, true, false), module, Progress::RESET_PARAM, 0.0, 1.0, 0.0));
addChild(ModuleLightWidget::create<MediumLight<GreenLight>>(ui.getPosition(UI::LIGHT, 2, 0, true, false), module, Progress::RESET_LIGHT));
addParam(ParamWidget::create<AHKnobSnap>(ui.getPosition(UI::KNOB, 3, 0, true, false), module, Progress::STEPS_PARAM, 1.0, 8.0, 8.0));
addChild(ModuleLightWidget::create<MediumLight<GreenLight>>(ui.getPosition(UI::LIGHT, 4, 0, true, false), module, Progress::GATES_LIGHT));

// static const float portX[13] = {20, 58, 96, 135, 173, 212, 250, 288, 326, 364, 402, 440, 478};
addInput(Port::create<PJ301MPort>(ui.getPosition(UI::PORT, 0, 1, true, false), Port::INPUT, module, Progress::CLOCK_INPUT));
addInput(Port::create<PJ301MPort>(ui.getPosition(UI::PORT, 1, 1, true, false), Port::INPUT, module, Progress::EXT_CLOCK_INPUT));
addInput(Port::create<PJ301MPort>(ui.getPosition(UI::PORT, 2, 1, true, false), Port::INPUT, module, Progress::RESET_INPUT));
addInput(Port::create<PJ301MPort>(ui.getPosition(UI::PORT, 3, 1, true, false), Port::INPUT, module, Progress::STEPS_INPUT));

addInput(Port::create<PJ301MPort>(ui.getPosition(UI::PORT, 4, 1, true, false), Port::INPUT, module, Progress::KEY_INPUT));
addInput(Port::create<PJ301MPort>(ui.getPosition(UI::PORT, 5, 1, true, false), Port::INPUT, module, Progress::MODE_INPUT));

for (int i = 0; i < 3; i++) {
addOutput(Port::create<PJ301MPort>(ui.getPosition(UI::PORT, 7 + i, 0, true, false), Port::OUTPUT, module, Progress::PITCH_OUTPUT + i));
}

for (int i = 0; i < 3; i++) {
addOutput(Port::create<PJ301MPort>(ui.getPosition(UI::PORT, 7 + i, 1, true, false), Port::OUTPUT, module, Progress::PITCH_OUTPUT + 3 + i));
}

for (int i = 0; i < 8; i++) {
AHKnobNoSnap *rootW = ParamWidget::create<AHKnobNoSnap>(ui.getPosition(UI::KNOB, i + 1, 4, true, true), module, Progress::ROOT_PARAM + i, 0.0, 10.0, 0.0);
AHParamWidget::set<AHKnobNoSnap>(rootW, Progress::ROOT_TYPE, i);
addParam(rootW);
AHKnobNoSnap *chordW = ParamWidget::create<AHKnobNoSnap>(ui.getPosition(UI::KNOB, i + 1, 5, true, true), module, Progress::CHORD_PARAM + i, 0.0, 10.0, 0.0);
AHParamWidget::set<AHKnobNoSnap>(chordW, Progress::CHORD_TYPE, i);
addParam(chordW);

AHKnobSnap *invW = ParamWidget::create<AHKnobSnap>(ui.getPosition(UI::KNOB, i + 1, 6, true, true), module, Progress::INV_PARAM + i, 0.0, 2.0, 0.0);
AHParamWidget::set<AHKnobSnap>(invW, Progress::INV_TYPE, i);
addParam(invW);

addParam(ParamWidget::create<AHButton>(ui.getPosition(UI::BUTTON, i + 1, 7, true, true), module, Progress::GATE_PARAM + i, 0.0, 1.0, 0.0));
addChild(ModuleLightWidget::create<MediumLight<GreenLight>>(ui.getPosition(UI::LIGHT, i + 1, 7, true, true), module, Progress::GATE_LIGHTS + i));
addOutput(Port::create<PJ301MPort>(ui.getPosition(UI::PORT, i + 1, 5, true, false), Port::OUTPUT, module, Progress::GATE_OUTPUT + i));
}

addOutput(Port::create<PJ301MPort>(ui.getPosition(UI::PORT, 9, 5, true, false), Port::OUTPUT, module, Progress::GATES_OUTPUT));
}

struct ProgressGateModeItem : MenuItem {
Progress *progress;
Progress::GateMode gateMode;
void onAction(EventAction &e) override {
progress->gateMode = gateMode;
}
void step() override {
rightText = (progress->gateMode == gateMode) ? "✔" : "";
}
};

Menu *ProgressWidget::createContextMenu() {
Menu *menu = ModuleWidget::createContextMenu();

MenuLabel *spacerLabel = new MenuLabel();
menu->addChild(spacerLabel);

Progress *progress = dynamic_cast<Progress*>(module);
assert(progress);

MenuLabel *modeLabel = new MenuLabel();
modeLabel->text = "Gate Mode";
menu->addChild(modeLabel);

ProgressGateModeItem *triggerItem = new ProgressGateModeItem();
triggerItem->text = "Trigger";
triggerItem->progress = progress;
triggerItem->gateMode = Progress::TRIGGER;
menu->addChild(triggerItem);

ProgressGateModeItem *retriggerItem = new ProgressGateModeItem();
retriggerItem->text = "Retrigger";
retriggerItem->progress = progress;
retriggerItem->gateMode = Progress::RETRIGGER;
menu->addChild(retriggerItem);

ProgressGateModeItem *continuousItem = new ProgressGateModeItem();
continuousItem->text = "Continuous";
continuousItem->progress = progress;
continuousItem->gateMode = Progress::CONTINUOUS;
menu->addChild(continuousItem);

return menu;
}

Model *modelProgress = Model::create<Progress, ProgressWidget>( "Amalgamated Harmonics", "Progress", "Progress", SEQUENCER_TAG);



+ 0
- 284
repos/AmalgamatedHarmonics/src/Ruckus.cpp View File

@@ -1,284 +0,0 @@
#include "util/common.hpp"
#include "dsp/digital.hpp"

#include "AH.hpp"
#include "Core.hpp"
#include "UI.hpp"

struct Ruckus : AHModule {

enum ParamIds {
ENUMS(DIV_PARAM,16),
ENUMS(PROB_PARAM,16),
ENUMS(SHIFT_PARAM,16),
ENUMS(XMUTE_PARAM,16),
ENUMS(YMUTE_PARAM,4),
NUM_PARAMS
};
enum InputIds {
TRIG_INPUT,
NUM_INPUTS
};
enum OutputIds {
ENUMS(XOUT_OUTPUT,4),
ENUMS(YOUT_OUTPUT,4),
NUM_OUTPUTS
};
enum LightIds {
ENUMS(XMUTE_LIGHT,4),
ENUMS(YMUTE_LIGHT,4),
NUM_LIGHTS
};

Ruckus() : AHModule(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS) {
reset();
}
void step() override;

json_t *toJson() override {
json_t *rootJ = json_object();

// gates
json_t *xMutesJ = json_array();
json_t *yMutesJ = json_array();
for (int i = 0; i < 4; i++) {
json_t *xMuteJ = json_integer((int) xMute[i]);
json_array_append_new(xMutesJ, xMuteJ);

json_t *yMuteJ = json_integer((int) yMute[i]);
json_array_append_new(yMutesJ, yMuteJ);
}
json_object_set_new(rootJ, "xMutes", xMutesJ);
json_object_set_new(rootJ, "yMutes", yMutesJ);

return rootJ;
}
void fromJson(json_t *rootJ) override {
// gates
json_t *xMutesJ = json_object_get(rootJ, "xMutes");
if (xMutesJ) {
for (int i = 0; i < 4; i++) {
json_t *xMuteJ = json_array_get(xMutesJ, i);
if (xMuteJ)
xMute[i] = !!json_integer_value(xMuteJ);
}
}

json_t *yMutesJ = json_object_get(rootJ, "yMutes");
if (yMutesJ) {
for (int i = 0; i < 4; i++) {
json_t *yMuteJ = json_array_get(yMutesJ, i);
if (yMuteJ)
yMute[i] = !!json_integer_value(yMuteJ);
}
}
}

enum ParamType {
DIV_TYPE,
SHIFT_TYPE,
PROB_TYPE
};
void receiveEvent(ParamEvent e) override {
if (receiveEvents) {
switch(e.pType) {
case ParamType::DIV_TYPE:
paramState = "> Division: " + std::to_string((int)e.value);
break;
case ParamType::SHIFT_TYPE:
paramState = "> Beat shift: " + std::to_string((int)e.value);
break;
case ParamType::PROB_TYPE:
paramState = "> Probability: " + std::to_string(e.value).substr(0,6);
break;
default:
paramState = "> UNK:" + std::to_string(e.value).substr(0,6);
}
}
keepStateDisplay = 0;
}
void reset() override {
for (int i = 0; i < 4; i++) {
xMute[i] = true;
yMute[i] = true;
}
}
Core core;

AHPulseGenerator xGate[4];
AHPulseGenerator yGate[4];
bool xMute[4] = {true, true, true, true};
bool yMute[4] = {true, true, true, true};
SchmittTrigger xLockTrigger[4];
SchmittTrigger yLockTrigger[4];

SchmittTrigger inTrigger;

int division[16];
int shift[16];
float prob[16];
unsigned int beatCounter = 100;
};

void Ruckus::step() {
AHModule::step();
for (int i = 0; i < 4; i++) {

if (xLockTrigger[i].process(params[XMUTE_PARAM + i].value)) {
xMute[i] = !xMute[i];
}
if (yLockTrigger[i].process(params[YMUTE_PARAM + i].value)) {
yMute[i] = !yMute[i];
}
}

for (int i = 0; i < 16; i++) {
division[i] = params[DIV_PARAM + i].value;
prob[i] = params[PROB_PARAM + i].value;
shift[i] = params[SHIFT_PARAM + i].value;
}
if (inTrigger.process(inputs[TRIG_INPUT].value)) {

beatCounter++;

for (int y = 0; y < 4; y++) {
for (int x = 0; x < 4; x++) {
int i = y * 4 + x;
if(division[i] == 0) {
continue; // 0 == skip
}
if ((beatCounter + shift[i]) % division[i] == 0) {
if (randomUniform() < prob[i]) {
xGate[x].trigger(Core::TRIGGER);
yGate[y].trigger(Core::TRIGGER);
}
}
}
}
}

for (int i = 0; i < 4; i++) {

if (xGate[i].process(delta) && xMute[i]) {
outputs[XOUT_OUTPUT + i].value = 10.0f;
} else {
outputs[XOUT_OUTPUT + i].value = 0.0f;
}
lights[XMUTE_LIGHT + i].value = xMute[i] ? 1.0 : 0.0;

if (yGate[i].process(delta) && yMute[i]) {
outputs[YOUT_OUTPUT + i].value = 10.0f;
} else {
outputs[YOUT_OUTPUT + i].value = 0.0f;
}
lights[YMUTE_LIGHT + i].value = yMute[i] ? 1.0 : 0.0;

}
}

struct RuckusWidget : ModuleWidget {
RuckusWidget(Ruckus *module);
};

RuckusWidget::RuckusWidget(Ruckus *module) : ModuleWidget(module) {
UI ui;
box.size = Vec(390, 380);

{
SVGPanel *panel = new SVGPanel();
panel->box.size = box.size;
panel->setBackground(SVG::load(assetPlugin(plugin, "res/Ruckus.svg")));
addChild(panel);
}

addChild(Widget::create<ScrewSilver>(Vec(15, 0)));
addChild(Widget::create<ScrewSilver>(Vec(box.size.x - 30, 0)));
addChild(Widget::create<ScrewSilver>(Vec(15, 365)));
addChild(Widget::create<ScrewSilver>(Vec(box.size.x - 30, 365)));
{
StateDisplay *display = new StateDisplay();
display->module = module;
display->box.pos = Vec(30, 335);
display->box.size = Vec(100, 140);
addChild(display);
}
addInput(Port::create<PJ301MPort>(ui.getPosition(UI::PORT, 9, 8, true, true), Port::INPUT, module, Ruckus::TRIG_INPUT));

float xd = 18.0f;
float yd = 20.0f;

for (int y = 0; y < 4; y++) {
for (int x = 0; x < 4; x++) {
int i = y * 4 + x;
Vec v = ui.getPosition(UI::KNOB, 1 + x * 2, y * 2, true, true);
AHKnobSnap *divW = ParamWidget::create<AHKnobSnap>(v, module, Ruckus::DIV_PARAM + i, 0, 64, 0);
AHParamWidget::set<AHKnobSnap>(divW, Ruckus::DIV_TYPE, i);
addParam(divW);

AHTrimpotNoSnap *probW = ParamWidget::create<AHTrimpotNoSnap>(Vec(v.x + xd, v.y + yd), module, Ruckus::PROB_PARAM + i, 0.0f, 1.0f, 1.0f);
AHParamWidget::set<AHTrimpotNoSnap>(probW, Ruckus::PROB_TYPE, i);
addParam(probW);

AHTrimpotSnap *shiftW = ParamWidget::create<AHTrimpotSnap>(Vec(v.x - xd + 4, v.y + yd), module, Ruckus::SHIFT_PARAM + i, -64.0f, 64.0f, 0.0f);
AHParamWidget::set<AHTrimpotSnap>(shiftW, Ruckus::SHIFT_TYPE, i);
addParam(shiftW);
}
}

float d = 12.0f;

for (int x = 0; x < 4; x++) {
addOutput(Port::create<PJ301MPort>(ui.getPosition(UI::PORT, 1 + x * 2, 8, true, true), Port::OUTPUT, module, Ruckus::XOUT_OUTPUT + x));
Vec bVec = ui.getPosition(UI::BUTTON, 1 + x * 2, 7, true, true);
bVec.y = bVec.y + d;
addParam(ParamWidget::create<AHButton>(bVec, module, Ruckus::XMUTE_PARAM + x, 0.0, 1.0, 0.0));
Vec lVec = ui.getPosition(UI::LIGHT, 1 + x * 2, 7, true, true);
lVec.y = lVec.y + d;
addChild(ModuleLightWidget::create<MediumLight<GreenLight>>(lVec, module, Ruckus::XMUTE_LIGHT + x));

}

for (int y = 0; y < 4; y++) {
addOutput(Port::create<PJ301MPort>(ui.getPosition(UI::PORT,9, y * 2, true, true), Port::OUTPUT, module, Ruckus::YOUT_OUTPUT + y));

Vec bVec = ui.getPosition(UI::BUTTON, 8, y * 2, true, true);
bVec.x = bVec.x + d;
addParam(ParamWidget::create<AHButton>(bVec, module, Ruckus::YMUTE_PARAM + y, 0.0, 1.0, 0.0));

Vec lVec = ui.getPosition(UI::LIGHT, 8, y * 2, true, true);
lVec.x = lVec.x + d;
addChild(ModuleLightWidget::create<MediumLight<GreenLight>>(lVec, module, Ruckus::YMUTE_LIGHT + y));

}

}

Model *modelRuckus = Model::create<Ruckus, RuckusWidget>( "Amalgamated Harmonics", "Ruckus", "Ruckus", SEQUENCER_TAG);


+ 0
- 158
repos/AmalgamatedHarmonics/src/ScaleQuantizer.cpp View File

@@ -1,158 +0,0 @@
#include "AH.hpp"
#include "Core.hpp"
#include "UI.hpp"

#include <iostream>

struct ScaleQuantizer : AHModule {

enum ParamIds {
NUM_PARAMS
};
enum InputIds {
IN_INPUT,
KEY_INPUT,
SCALE_INPUT,
NUM_INPUTS
};
enum OutputIds {
OUT_OUTPUT,
TRIG_OUTPUT,
GATE_OUTPUT,
NUM_OUTPUTS = GATE_OUTPUT + 12
};
enum LightIds {
NOTE_LIGHT,
KEY_LIGHT = NOTE_LIGHT + 12,
SCALE_LIGHT = KEY_LIGHT + 12,
DEGREE_LIGHT = SCALE_LIGHT + 12,
NUM_LIGHTS = DEGREE_LIGHT + 12
};

ScaleQuantizer() : AHModule(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS) {}
void step() override;

bool firstStep = true;
int lastScale = 0;
int lastRoot = 0;
float lastPitch = 0.0;
int currScale = 0;
int currRoot = 0;
int currNote = 0;
int currDegree = 0;
float currPitch = 0.0;

};

void ScaleQuantizer::step() {
stepX++;
lastScale = currScale;
lastRoot = currRoot;
lastPitch = currPitch;

// Get the input pitch
float volts = inputs[IN_INPUT].value;
float root = inputs[KEY_INPUT].value;
float scale = inputs[SCALE_INPUT].value;

// Calculate output pitch from raw voltage
currPitch = CoreUtil().getPitchFromVolts(volts, root, scale, &currRoot, &currScale, &currNote, &currDegree);

// Set the value
outputs[OUT_OUTPUT].value = currPitch;

// update tone lights
for (int i = 0; i < Core::NUM_NOTES; i++) {
lights[NOTE_LIGHT + i].value = 0.0;
}
lights[NOTE_LIGHT + currNote].value = 1.0;

// update degree lights
for (int i = 0; i < Core::NUM_NOTES; i++) {
lights[DEGREE_LIGHT + i].value = 0.0;
outputs[GATE_OUTPUT + i].value = 0.0;
}
lights[DEGREE_LIGHT + currDegree].value = 1.0;
outputs[GATE_OUTPUT + currDegree].value = 10.0;

if (lastScale != currScale || firstStep) {
for (int i = 0; i < Core::NUM_NOTES; i++) {
lights[SCALE_LIGHT + i].value = 0.0;
}
lights[SCALE_LIGHT + currScale].value = 1.0;
}

if (lastRoot != currRoot || firstStep) {
for (int i = 0; i < Core::NUM_NOTES; i++) {
lights[KEY_LIGHT + i].value = 0.0;
}
lights[KEY_LIGHT + currRoot].value = 1.0;
}

if (lastPitch != currPitch || firstStep) {
outputs[TRIG_OUTPUT].value = 10.0;
} else {
outputs[TRIG_OUTPUT].value = 0.0;
}

firstStep = false;

}
struct ScaleQuantizerWidget : ModuleWidget {
ScaleQuantizerWidget(ScaleQuantizer *module);
};

ScaleQuantizerWidget::ScaleQuantizerWidget(ScaleQuantizer *module) : ModuleWidget(module) {
UI ui;
box.size = Vec(240, 380);

{
SVGPanel *panel = new SVGPanel();
panel->box.size = box.size;
panel->setBackground(SVG::load(assetPlugin(plugin, "res/ScaleQuantizer.svg")));
addChild(panel);
}

addChild(Widget::create<ScrewSilver>(Vec(15, 0)));
addChild(Widget::create<ScrewSilver>(Vec(box.size.x - 30, 0)));
addChild(Widget::create<ScrewSilver>(Vec(15, 365)));
addChild(Widget::create<ScrewSilver>(Vec(box.size.x - 30, 365)));

addInput(Port::create<PJ301MPort>(ui.getPosition(UI::PORT, 0, 5, false, false), Port::INPUT, module, ScaleQuantizer::IN_INPUT));
addInput(Port::create<PJ301MPort>(ui.getPosition(UI::PORT, 1, 5, false, false), Port::INPUT, module, ScaleQuantizer::KEY_INPUT));
addInput(Port::create<PJ301MPort>(ui.getPosition(UI::PORT, 2, 5, false, false), Port::INPUT, module, ScaleQuantizer::SCALE_INPUT));
addOutput(Port::create<PJ301MPort>(ui.getPosition(UI::PORT, 3, 5, false, false), Port::OUTPUT, module, ScaleQuantizer::TRIG_OUTPUT));
addOutput(Port::create<PJ301MPort>(ui.getPosition(UI::PORT, 4, 5, false, false), Port::OUTPUT, module, ScaleQuantizer::OUT_OUTPUT));

float xOffset = 18.0;
float xSpace = 21.0;
float xPos = 0.0;
float yPos = 0.0;
int scale = 0;

for (int i = 0; i < 12; i++) {
addChild(ModuleLightWidget::create<SmallLight<GreenLight>>(Vec(xOffset + i * 18.0, 280.0), module, ScaleQuantizer::SCALE_LIGHT + i));

ui.calculateKeyboard(i, xSpace, xOffset, 230.0, &xPos, &yPos, &scale);
addChild(ModuleLightWidget::create<SmallLight<GreenLight>>(Vec(xPos, yPos), module, ScaleQuantizer::KEY_LIGHT + scale));

ui.calculateKeyboard(i, xSpace, xOffset + 72.0, 165.0, &xPos, &yPos, &scale);
addChild(ModuleLightWidget::create<SmallLight<GreenLight>>(Vec(xPos, yPos), module, ScaleQuantizer::NOTE_LIGHT + scale));

ui.calculateKeyboard(i, 30.0, xOffset + 9.5, 110.0, &xPos, &yPos, &scale);
addChild(ModuleLightWidget::create<SmallLight<GreenLight>>(Vec(xPos, yPos), module, ScaleQuantizer::DEGREE_LIGHT + scale));

ui.calculateKeyboard(i, 30.0, xOffset, 85.0, &xPos, &yPos, &scale);

addOutput(Port::create<PJ301MPort>(Vec(xPos, yPos), Port::OUTPUT, module, ScaleQuantizer::GATE_OUTPUT + scale));
}

}

Model *modelScaleQuantizer = Model::create<ScaleQuantizer, ScaleQuantizerWidget>( "Amalgamated Harmonics", "ScaleQuantizer", "Scale Quantizer (deprecated)", QUANTIZER_TAG);


+ 0
- 206
repos/AmalgamatedHarmonics/src/ScaleQuantizerMkII.cpp View File

@@ -1,206 +0,0 @@
#include "dsp/digital.hpp"

#include "AH.hpp"
#include "Core.hpp"
#include "UI.hpp"

#include <iostream>

struct ScaleQuantizer2 : AHModule {

enum ParamIds {
KEY_PARAM,
SCALE_PARAM,
ENUMS(SHIFT_PARAM,8),
TRANS_PARAM,
NUM_PARAMS
};
enum InputIds {
ENUMS(IN_INPUT,8),
KEY_INPUT,
SCALE_INPUT,
TRANS_INPUT,
ENUMS(HOLD_INPUT,8),
NUM_INPUTS
};
enum OutputIds {
ENUMS(OUT_OUTPUT,8),
ENUMS(TRIG_OUTPUT,8),
NUM_OUTPUTS
};
enum LightIds {
ENUMS(KEY_LIGHT,12),
ENUMS(SCALE_LIGHT,12),
NUM_LIGHTS
};

ScaleQuantizer2() : AHModule(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS) {}

void step() override;

bool firstStep = true;
int lastScale = 0;
int lastRoot = 0;
float lastTrans = -10000.0f;
SchmittTrigger holdTrigger[8];
float holdPitch[8] = {0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0};
float lastPitch[8] = {0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0};
PulseGenerator triggerPulse[8];
int currScale = 0;
int currRoot = 0;

};

void ScaleQuantizer2::step() {
AHModule::step();
lastScale = currScale;
lastRoot = currRoot;

int currNote = 0;
int currDegree = 0;

if (inputs[KEY_INPUT].active) {
float fRoot = inputs[KEY_INPUT].value;
currRoot = CoreUtil().getKeyFromVolts(fRoot);
} else {
currRoot = params[KEY_PARAM].value;
}
if (inputs[SCALE_INPUT].active) {
float fScale = inputs[SCALE_INPUT].value;
currScale = CoreUtil().getScaleFromVolts(fScale);
} else {
currScale = params[SCALE_PARAM].value;
}

float trans = (inputs[TRANS_INPUT].value + params[TRANS_PARAM].value) / 12.0;
if (trans != 0.0) {
if (trans != lastTrans) {
int i;
int d;
trans = CoreUtil().getPitchFromVolts(trans, Core::NOTE_C, Core::SCALE_CHROMATIC, &i, &d);
lastTrans = trans;
} else {
trans = lastTrans;
}
}
for (int i = 0; i < 8; i++) {
float holdInput = inputs[HOLD_INPUT + i].value;
bool holdActive = inputs[HOLD_INPUT + i].active;
bool holdStatus = holdTrigger[i].process(holdInput);

float volts = inputs[IN_INPUT + i].value;
float shift = params[SHIFT_PARAM + i].value;

if (holdActive) {
// Sample the pitch
if (holdStatus && inputs[IN_INPUT + i].active) {
holdPitch[i] = CoreUtil().getPitchFromVolts(volts, currRoot, currScale, &currNote, &currDegree);
}
} else {

if (inputs[IN_INPUT + i].active) {
holdPitch[i] = CoreUtil().getPitchFromVolts(volts, currRoot, currScale, &currNote, &currDegree);
}
}
// If the quantised pitch has changed
if (lastPitch[i] != holdPitch[i]) {
// Pulse the gate
triggerPulse[i].trigger(Core::TRIGGER);
// Record the pitch
lastPitch[i] = holdPitch[i];
}
if (triggerPulse[i].process(delta)) {
outputs[TRIG_OUTPUT + i].value = 10.0f;
} else {
outputs[TRIG_OUTPUT + i].value = 0.0f;
}

outputs[OUT_OUTPUT + i].value = holdPitch[i] + shift + trans;

}

if (lastScale != currScale || firstStep) {
for (int i = 0; i < Core::NUM_NOTES; i++) {
lights[SCALE_LIGHT + i].value = 0.0f;
}
lights[SCALE_LIGHT + currScale].value = 1.0f;
}

if (lastRoot != currRoot || firstStep) {
for (int i = 0; i < Core::NUM_NOTES; i++) {
lights[KEY_LIGHT + i].value = 0.0f;
}
lights[KEY_LIGHT + currRoot].value = 1.0f;
}

firstStep = false;

}

struct ScaleQuantizer2Widget : ModuleWidget {
ScaleQuantizer2Widget(ScaleQuantizer2 *module);
};

ScaleQuantizer2Widget::ScaleQuantizer2Widget(ScaleQuantizer2 *module) : ModuleWidget(module) {
UI ui;
box.size = Vec(300, 380);

{
SVGPanel *panel = new SVGPanel();
panel->box.size = box.size;
panel->setBackground(SVG::load(assetPlugin(plugin, "res/ScaleQuantizerMkII.svg")));
addChild(panel);
}

addChild(Widget::create<ScrewSilver>(Vec(15, 0)));
addChild(Widget::create<ScrewSilver>(Vec(box.size.x - 30, 0)));
addChild(Widget::create<ScrewSilver>(Vec(15, 365)));
addChild(Widget::create<ScrewSilver>(Vec(box.size.x - 30, 365)));

addInput(Port::create<PJ301MPort>(ui.getPosition(UI::PORT, 0, 5, true, false), Port::INPUT, module, ScaleQuantizer2::KEY_INPUT));
addParam(ParamWidget::create<AHKnobSnap>(ui.getPosition(UI::KNOB, 1, 5, true, false), module, ScaleQuantizer2::KEY_PARAM, 0.0f, 11.0f, 0.0f)); // 12 notes
addInput(Port::create<PJ301MPort>(ui.getPosition(UI::PORT, 3, 5, true, false), Port::INPUT, module, ScaleQuantizer2::SCALE_INPUT));
addParam(ParamWidget::create<AHKnobSnap>(ui.getPosition(UI::PORT, 4, 5, true, false), module, ScaleQuantizer2::SCALE_PARAM, 0.0f, 11.0f, 0.0f)); // 12 notes
addInput(Port::create<PJ301MPort>(ui.getPosition(UI::PORT, 6, 5, true, false), Port::INPUT, module, ScaleQuantizer2::TRANS_INPUT));
addParam(ParamWidget::create<AHKnobSnap>(ui.getPosition(UI::PORT, 7, 5, true, false), module, ScaleQuantizer2::TRANS_PARAM, -11.0f, 11.0f, 0.0f)); // 12 notes

for (int i = 0; i < 8; i++) {
addInput(Port::create<PJ301MPort>(Vec(6 + i * 29, 41), Port::INPUT, module, ScaleQuantizer2::IN_INPUT + i));
addParam(ParamWidget::create<AHTrimpotSnap>(Vec(9 + i * 29.1, 101), module, ScaleQuantizer2::SHIFT_PARAM + i, -3.0f, 3.0f, 0.0f));
addOutput(Port::create<PJ301MPort>(Vec(6 + i * 29, 125), Port::OUTPUT, module, ScaleQuantizer2::OUT_OUTPUT + i));
addInput(Port::create<PJ301MPort>(Vec(6 + i * 29, 71), Port::INPUT, module, ScaleQuantizer2::HOLD_INPUT + i));
addOutput(Port::create<PJ301MPort>(Vec(6 + i * 29, 155), Port::OUTPUT, module, ScaleQuantizer2::TRIG_OUTPUT + i));
}

float xOffset = 18.0;
float xSpace = 21.0;
float xPos = 0.0;
float yPos = 0.0;
int scale = 0;

for (int i = 0; i < 12; i++) {
addChild(ModuleLightWidget::create<SmallLight<GreenLight>>(Vec(xOffset + i * 18.0f, 280.0f), module, ScaleQuantizer2::SCALE_LIGHT + i));

ui.calculateKeyboard(i, xSpace, xOffset, 230.0f, &xPos, &yPos, &scale);
addChild(ModuleLightWidget::create<SmallLight<GreenLight>>(Vec(xPos, yPos), module, ScaleQuantizer2::KEY_LIGHT + scale));

}

}

Model *modelScaleQuantizer2 = Model::create<ScaleQuantizer2, ScaleQuantizer2Widget>( "Amalgamated Harmonics", "ScaleQuantizer2", "Scale Quantizer MkII", QUANTIZER_TAG);


+ 0
- 76
repos/AmalgamatedHarmonics/src/UI.cpp View File

@@ -1,76 +0,0 @@
#include "UI.hpp"

void UI::calculateKeyboard(int inKey, float spacing, float xOff, float yOff, float *x, float *y, int *scale) {

// Sanitise input
int key = inKey % 12;

// White
int whiteO [7] = {0, 1, 2, 3, 4, 5, 6}; // 'spaces' occupied by keys
int whiteK [7] = {0, 2, 4, 5, 7, 9, 11}; // scale mapped to key
// Black
int blackO [5] = {0, 1, 3, 4, 5}; // 'spaces' occupied by keys
int blackK [5] = {1, 3, 6, 8, 10}; // scale mapped to keys

float bOffset = xOff + (spacing / 2);
float bSpace = spacing;
// Make an equilateral triangle pattern, tri height = base * (sqrt(3) / 2)
float bDelta = bSpace * sqrt(3) * 0.5;

// Are we black or white key?, check black keys
for (int i = 0; i < 5; i++) {
if (blackK[i] == key) {
*x = bOffset + bSpace * blackO[i];
*y = yOff - bDelta;
*scale = blackK[i];
return;
}
}

int wOffset = xOff;
int wSpace = spacing;
for (int i = 0; i < 7; i++) {
if (whiteK[i] == key) {
*x = wOffset + wSpace * whiteO[i];
*y = yOff;
*scale = whiteK[i];
return;
}
}
}

Vec UI::getPosition(int type, int xSlot, int ySlot, bool xDense, bool yDense) {

float *xArray;
float *yArray;
switch(type) {
case KNOB:
if (xDense) { xArray = X_KNOB_COMPACT; } else { xArray = X_KNOB; }
if (yDense) { yArray = Y_KNOB_COMPACT; } else { yArray = Y_KNOB; }
break;
case PORT:
if (xDense) { xArray = X_PORT_COMPACT; } else { xArray = X_PORT; }
if (yDense) { yArray = Y_PORT_COMPACT; } else { yArray = Y_PORT; }
break;
case BUTTON:
if (xDense) { xArray = X_BUTTON_COMPACT; } else { xArray = X_BUTTON; }
if (yDense) { yArray = Y_BUTTON_COMPACT; } else { yArray = Y_BUTTON; }
break;
case LIGHT:
if (xDense) { xArray = X_LIGHT_COMPACT; } else { xArray = X_LIGHT; }
if (yDense) { yArray = Y_LIGHT_COMPACT; } else { yArray = Y_LIGHT; }
break;
case TRIMPOT:
if (xDense) { xArray = X_TRIMPOT_COMPACT; } else { xArray = X_TRIMPOT; }
if (yDense) { yArray = Y_TRIMPOT_COMPACT; } else { yArray = Y_TRIMPOT; }
break;
default:
if (xDense) { xArray = X_KNOB_COMPACT; } else { xArray = X_KNOB; }
if (yDense) { yArray = Y_KNOB_COMPACT; } else { yArray = Y_KNOB; }
}

return Vec(xArray[0] + xArray[1] * xSlot, yArray[0] + yArray[1] * ySlot);
}

+ 0
- 201
repos/AmalgamatedHarmonics/src/UI.hpp View File

@@ -1,201 +0,0 @@
#pragma once

#include <iostream>

#include "AH.hpp"
#include "componentlibrary.hpp"

struct ParamEvent {
ParamEvent(int t, int i, float v) : pType(t), pId(i), value(v) {}
int pType;
int pId;
float value;

};

struct AHModule : Module {

float delta;

AHModule(int numParams, int numInputs, int numOutputs, int numLights = 0) : Module(numParams, numInputs, numOutputs, numLights) {
delta = 1.0 / engineGetSampleRate();
}

void onSampleRateChange() override {
delta = 1.0 / engineGetSampleRate();
}

int stepX = 0;
bool debugFlag = false;
inline bool debug() {
return debugFlag;
}
bool receiveEvents = false;
int keepStateDisplay = 0;
std::string paramState = ">";
virtual void receiveEvent(ParamEvent e) {
paramState = ">";
keepStateDisplay = 0;
}
void step() override {
stepX++;
// Once we start stepping, we can process events
receiveEvents = true;
// Timeout for display
keepStateDisplay++;
if (keepStateDisplay > 50000) {
paramState = ">";
}
}
};

struct StateDisplay : TransparentWidget {
AHModule *module;
int frame = 0;
std::shared_ptr<Font> font;

StateDisplay() {
font = Font::load(assetPlugin(plugin, "res/EurostileBold.ttf"));
}

void draw(NVGcontext *vg) override {
Vec pos = Vec(0, 15);

nvgFontSize(vg, 16);
nvgFontFaceId(vg, font->handle);
nvgTextLetterSpacing(vg, -1);

nvgFillColor(vg, nvgRGBA(255, 0, 0, 0xff));
char text[128];
snprintf(text, sizeof(text), "%s", module->paramState.c_str());
nvgText(vg, pos.x + 10, pos.y + 5, text, NULL);

}
};

struct AHParamWidget { // it's a mix-in

int pType = -1; // Should be set by ste<>(), but if not this allows us to catch pwidgers we are not interested in
int pId;
AHModule *mod = NULL;
virtual ParamEvent generateEvent(float value) {
return ParamEvent(pType,pId,value);
};
template <typename T = AHParamWidget>
static void set(T *param, int pType, int pId) {
param->pType = pType;
param->pId = pId;
}

};

// Not going to monitor buttons
struct AHButton : SVGSwitch, MomentarySwitch {
AHButton() {
addFrame(SVG::load(assetPlugin(plugin,"res/ComponentLibrary/AHButton.svg")));
}
};

struct AHKnob : RoundKnob, AHParamWidget {
void onChange(EventChange &e) override {
// One off cast, don't want to subclass from ParamWidget, so have to grab it here
if (!mod) {
mod = static_cast<AHModule *>(this->module);
}
mod->receiveEvent(generateEvent(value));
RoundKnob::onChange(e);
}
};

struct AHKnobSnap : AHKnob {
AHKnobSnap() {
snap = true;
setSVG(SVG::load(assetPlugin(plugin,"res/ComponentLibrary/AHKnob.svg")));
}
};

struct AHKnobNoSnap : AHKnob {
AHKnobNoSnap() {
snap = false;
setSVG(SVG::load(assetPlugin(plugin,"res/ComponentLibrary/AHKnob.svg")));
}
};


struct AHTrimpotSnap : AHKnob {
AHTrimpotSnap() {
snap = true;
setSVG(SVG::load(assetPlugin(plugin,"res/ComponentLibrary/AHTrimpot.svg")));
}
};

struct AHTrimpotNoSnap : AHKnob {
AHTrimpotNoSnap() {
snap = false;
setSVG(SVG::load(assetPlugin(plugin,"res/ComponentLibrary/AHTrimpot.svg")));
}
};


struct UI {

enum UIElement {
KNOB = 0,
PORT,
BUTTON,
LIGHT,
TRIMPOT
};
float Y_KNOB[2] = {50.8, 56.0}; // w.r.t 22 = 28.8 from bottom
float Y_PORT[2] = {49.7, 56.0}; // 27.7
float Y_BUTTON[2] = {53.3, 56.0}; // 31.3
float Y_LIGHT[2] = {57.7, 56.0}; // 35.7
float Y_TRIMPOT[2] = {52.8, 56.0}; // 30.8

float Y_KNOB_COMPACT[2] = {30.1, 35.0}; // Calculated relative to PORT=29 and the deltas above
float Y_PORT_COMPACT[2] = {29.0, 35.0};
float Y_BUTTON_COMPACT[2] = {32.6, 35.0};
float Y_LIGHT_COMPACT[2] = {37.0, 35.0};
float Y_TRIMPOT_COMPACT[2] = {32.1, 35.0};
float X_KNOB[2] = {12.5, 48.0}; // w.r.t 6.5 = 6 from left
float X_PORT[2] = {11.5, 48.0}; // 5
float X_BUTTON[2] = {14.7, 48.0}; // 8.2
float X_LIGHT[2] = {19.1, 48.0}; // 12.6
float X_TRIMPOT[2] = {14.7, 48.0}; // 8.2

float X_KNOB_COMPACT[2] = {21.0, 35.0}; // 15 + 6, see calc above
float X_PORT_COMPACT[2] = {20.0, 35.0}; // 15 + 5
float X_BUTTON_COMPACT[2] = {23.2, 35.0}; // 15 + 8.2
float X_LIGHT_COMPACT[2] = {27.6, 35.0}; // 15 + 12.6
float X_TRIMPOT_COMPACT[2] = {23.2, 35.0}; // 15 + 8.2

Vec getPosition(int type, int xSlot, int ySlot, bool xDense, bool yDense);
/* From the numerical key on a keyboard (0 = C, 11 = B), spacing in px between white keys and a starting x and Y coordinate for the C key (in px)
* calculate the actual X and Y coordinate for a key, and the scale note to which that key belongs (see Midi note mapping)
* http://www.grantmuller.com/MidiReference/doc/midiReference/ScaleReference.html */
void calculateKeyboard(int inKey, float spacing, float xOff, float yOff, float *x, float *y, int *scale);
};



+ 0
- 1899
repos/AmalgamatedHarmonics/ui/Arpeggiator2_src.svg
File diff suppressed because it is too large
View File


+ 0
- 1862
repos/AmalgamatedHarmonics/ui/Arpeggiator_src.svg
File diff suppressed because it is too large
View File


+ 0
- 1932
repos/AmalgamatedHarmonics/ui/Circle_src.svg
File diff suppressed because it is too large
View File


+ 0
- 1668
repos/AmalgamatedHarmonics/ui/Imperfect2_src.svg
File diff suppressed because it is too large
View File


+ 0
- 1593
repos/AmalgamatedHarmonics/ui/Imperfect_src.svg
File diff suppressed because it is too large
View File


+ 0
- 2024
repos/AmalgamatedHarmonics/ui/Progress_src.svg
File diff suppressed because it is too large
View File


+ 0
- 1474
repos/AmalgamatedHarmonics/ui/Ruckus_src.svg
File diff suppressed because it is too large
View File


+ 0
- 2079
repos/AmalgamatedHarmonics/ui/ScaleQuantizerMkII_src.svg
File diff suppressed because it is too large
View File


+ 0
- 2328
repos/AmalgamatedHarmonics/ui/ScaleQuantizer_src.svg
File diff suppressed because it is too large
View File


+ 0
- 3
repos/ArableInstruments/.gitignore View File

@@ -1,3 +0,0 @@
/build
/dist
plugin.*

+ 0
- 18
repos/ArableInstruments/.gitmodules View File

@@ -1,18 +0,0 @@
[submodule "eurorack"]
path = eurorack
url = https://github.com/AndrewBelt/eurorack.git
[submodule "avrlib"]
path = parasites/avrlib
url = https://github.com/pichenettes/avril.git
[submodule "avrlibx"]
path = parasites/avrlibx
url = https://github.com/pichenettes/avrilx.git
[submodule "stm_audio_bootloader"]
path = parasites/stm_audio_bootloader
url = https://github.com/pichenettes/stm-audio-bootloader.git
[submodule "avr_audio_bootloader"]
path = parasites/avr_audio_bootloader
url = https://github.com/pichenettes/avr-audio-bootloader.git
[submodule "stmlib"]
path = parasites/stmlib
url = https://github.com/mqtthiqs/stmlib.git

+ 0
- 23
repos/ArableInstruments/LICENSE-dist.txt View File

@@ -1,23 +0,0 @@
# eurorack (applies to STM32F modules, not AVR modules)

Copyright 2014 Olivier Gillet.

Author: Olivier Gillet (ol.gillet@gmail.com)

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:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

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 NONINFRINGEMENT. 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.

+ 0
- 11
repos/ArableInstruments/LICENSE.txt View File

@@ -1,11 +0,0 @@
Copyright 2016 Andrew Belt

Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:

1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.

2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.

3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "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 COPYRIGHT HOLDER OR CONTRIBUTORS 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.

+ 0
- 30
repos/ArableInstruments/Makefile View File

@@ -1,30 +0,0 @@
VERSION ?= v0.5.0

FLAGS += \
-DTEST \
-I./eurorack \
-Wno-unused-local-typedefs


SOURCES = $(wildcard src/*.cpp) \
eurorack/stmlib/utils/random.cc \
eurorack/stmlib/dsp/atan.cc \
eurorack/stmlib/dsp/units.cc \
eurorack/clouds/dsp/correlator.cc \
eurorack/clouds/dsp/granular_processor.cc \
eurorack/clouds/dsp/mu_law.cc \
eurorack/clouds/dsp/pvoc/frame_transformation.cc \
eurorack/clouds/dsp/pvoc/phase_vocoder.cc \
eurorack/clouds/dsp/pvoc/stft.cc \
eurorack/clouds/resources.cc

include ../../plugin.mk


dist: all
mkdir -p dist/ArableInstruments
cp LICENSE* dist/ArableInstruments/
cp plugin.* dist/ArableInstruments/
cp -R res dist/ArableInstruments/
rm -f dist/ArableInstruments/res/*.pdn
cd dist && zip -5 -r ArableInstruments-$(VERSION)-$(ARCH).zip ArableInstruments

+ 0
- 32
repos/ArableInstruments/Makefile.parasite View File

@@ -1,32 +0,0 @@
VERSION ?= v0.5.0
FLAGS += \
-DTEST -DPARASITES \
-I./parasites \
-Wno-unused-local-typedefs
SOURCES = $(wildcard src/*.cpp) \
parasites/stmlib/utils/random.cc \
parasites/stmlib/dsp/atan.cc \
parasites/stmlib/dsp/units.cc \
parasites/clouds/dsp/correlator.cc \
parasites/clouds/dsp/granular_processor.cc \
parasites/clouds/dsp/mu_law.cc \
parasites/clouds/dsp/pvoc/frame_transformation.cc \
parasites/clouds/dsp/pvoc/phase_vocoder.cc \
parasites/clouds/dsp/pvoc/stft.cc \
parasites/clouds/resources.cc
include ../../plugin.mk
dist: all
mkdir -p dist/ParableInstruments
cp LICENSE* dist/ParableInstruments/
cp plugin.* dist/ParableInstruments/
cp -R res dist/ParableInstruments/
rm -f dist/ParableInstruments/res/*.pdn
cd dist && zip -5 -r ParableInstruments-$(VERSION)-$(ARCH).zip ParableInstruments

+ 0
- 48
repos/ArableInstruments/README.md View File

@@ -1,48 +0,0 @@

# Arable Instruments - Joni

Fork of Audible Instruments 'Texture Synthesizer', based on Mutable Instrument's Clouds.

Features:
- Implements the alternative modes and quality options of Clouds as a menu options
- Inputs and knobs for the 3 addition 'Blend' parameters (Stereo Spread, Feedback, and Reverb)
- Dedicated Freeze button


# Parable Instruments - Neil

This repository also builds an alternative version, based on the 'Parasites' alternative firmware for Clouds (https://mqtthiqs.github.io/parasites/clouds.html).

Parasites has many features and tweaks compared to the vanilla firmware, including:
- Options for sharper and asymmetrical grain envelopes
- New alternative modes (Oliverb reverb and Resonestor resonator)
- Reverse option for some modes (implemented here as a dedicated button)

IMPORTANT NOTE:
This repository includes code for both the vanilla firmware (Joni) and Parasites firmware (Neil), but only builds one at a time as separate libraries. If you want to maintain both side by side in a development branch, you can have two clones of the repository under different names in the plugins folder.
The parasites firmware is build using the makefile 'Makefile.parasite'.
To build the parasites firmware, run 'make clean', and then build using the makefile Makefile.parasite:
make -f Makefile.parasite
make -f Makefile.parasite dist
# Building Instructions:
After cloning the repo, do a submodule update with
git submodule update --init --recursive

To build the plugin:
make
To package:
make dist

To build the parasites firmware, run 'make clean', and then build using the makefile Makefile.parasite:
make -f Makefile.parasite
make -f Makefile.parasite dist

Possible future plans:
- Support for changing buffer size via menu (this has been tested, but lead to crashes in some alternative modes, to enable for testing purposes you can compile with BUFFERRESIZING defined)

Many thanks to Olivier Gillet for open sourcing the Clouds firmware, Andrew Belt for the orignal VCV Rack ports, and Matthias Puech for the Parasites firmware.




+ 0
- 48
repos/ArableInstruments/parasites/.gitignore View File

@@ -1,48 +0,0 @@
# Precompiled python modules
*.pyc

# Eagle backups
*.s#?
*.b#?
*.bak

# Gerber files
*.CUT
*.GBL
*.GBO
*.GBS
*.GML
*.GTL
*.GTO
*.GTP
*.GTS
*.TXT
*.dri
*.gpi
*.pro

# Assembly files
*assembly.zip
*top.pdf
*bottom.pdf
*.csv
*partlist.txt
*.zip

# LaTeX compiled file
*.pdf
*.log
*.aux

# OS X crap
.DS_Stor?

# Build directory
build

# BETA Layout variants
*_beta.sch
*_BETA.sch
*_beta.brd
*_BETA.brd
audio_samples/

+ 0
- 15
repos/ArableInstruments/parasites/.gitmodules View File

@@ -1,15 +0,0 @@
[submodule "avrlib"]
path = avrlib
url = https://github.com/pichenettes/avril.git
[submodule "avrlibx"]
path = avrlibx
url = https://github.com/pichenettes/avrilx.git
[submodule "stm_audio_bootloader"]
path = stm_audio_bootloader
url = https://github.com/pichenettes/stm-audio-bootloader.git
[submodule "avr_audio_bootloader"]
path = avr_audio_bootloader
url = https://github.com/pichenettes/avr-audio-bootloader.git
[submodule "stmlib"]
path = stmlib
url = git@github.com:mqtthiqs/stmlib.git

+ 0
- 28
repos/ArableInstruments/parasites/README.md View File

@@ -1,28 +0,0 @@
Mutable Instruments' Eurorack Modules.

* Braids: Macro-oscillator.
* Branches: Dual Bernoulli gate.
* Clouds: Texture synthesizer.
* Edges: Quad chiptune digital oscillator.
* Elements: Modal synthesizer.
* Frames: Keyframer/mixer.
* Grids: Topographic drum sequencer.
* Links: Utility module - buffer, mixer.
* Peaks: Dual trigger converter.
* Rings: Resonator.
* Ripples: Liquid 2-pole BP, 2-pole LP and 4-pole LP filter.
* Shades: Triple attenuverter.
* Shelves: EQ filter.
* Streams: Dual dynamics gate.
* Tides: Tidal modulator.
* Volts: +5V power module.
* Warps: Meta-modulator.
* Yarns: MIDI interface.

License
=======

Code (AVR projects): GPL3.0.
Code (STM32F projects): MIT license.
Hardware: cc-by-sa-3.0
By: Olivier Gillet (olivier@mutable-instruments.net)

+ 0
- 0
repos/ArableInstruments/parasites/__init__.py View File


+ 0
- 0
repos/ArableInstruments/parasites/braids/__init__.py View File


+ 0
- 602
repos/ArableInstruments/parasites/braids/analog_oscillator.cc View File

@@ -1,602 +0,0 @@
// Copyright 2012 Olivier Gillet.
//
// Author: Olivier Gillet (ol.gillet@gmail.com)
//
// 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:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// 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 NONINFRINGEMENT. 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.
//
// See http://creativecommons.org/licenses/MIT/ for more information.
//
// -----------------------------------------------------------------------------
//
// Oscillator - analog style waveforms.

#include "braids/analog_oscillator.h"

#include "stmlib/utils/dsp.h"

#include "braids/resources.h"
#include "braids/parameter_interpolation.h"

namespace braids {

using namespace stmlib;

static const size_t kNumZones = 15;

static const uint16_t kHighestNote = 128 * 128;
static const uint16_t kPitchTableStart = 128 * 128;
static const uint16_t kOctave = 12 * 128;

uint32_t AnalogOscillator::ComputePhaseIncrement(int16_t midi_pitch) {
if (midi_pitch >= kHighestNote) {
midi_pitch = kHighestNote - 1;
}
int32_t ref_pitch = midi_pitch;
ref_pitch -= kPitchTableStart;
size_t num_shifts = 0;
while (ref_pitch < 0) {
ref_pitch += kOctave;
++num_shifts;
}
uint32_t a = lut_oscillator_increments[ref_pitch >> 4];
uint32_t b = lut_oscillator_increments[(ref_pitch >> 4) + 1];
uint32_t phase_increment = a + \
(static_cast<int32_t>(b - a) * (ref_pitch & 0xf) >> 4);
phase_increment >>= num_shifts;
return phase_increment;
}

void AnalogOscillator::Render(
const uint8_t* sync_in,
int16_t* buffer,
uint8_t* sync_out,
size_t size) {
RenderFn fn = fn_table_[shape_];
if (shape_ != previous_shape_) {
Init();
previous_shape_ = shape_;
}
phase_increment_ = ComputePhaseIncrement(pitch_);
if (pitch_ > kHighestNote) {
pitch_ = kHighestNote;
} else if (pitch_ < 0) {
pitch_ = 0;
}
(this->*fn)(sync_in, buffer, sync_out, size);
}

void AnalogOscillator::RenderCSaw(
const uint8_t* sync_in,
int16_t* buffer,
uint8_t* sync_out,
size_t size) {
BEGIN_INTERPOLATE_PHASE_INCREMENT
int32_t next_sample = next_sample_;
while (size--) {
bool sync_reset = false;
bool self_reset = false;
bool transition_during_reset = false;
uint32_t reset_time = 0;
INTERPOLATE_PHASE_INCREMENT
uint32_t pw = static_cast<uint32_t>(parameter_) * 49152;
if (pw < 8 * phase_increment) {
pw = 8 * phase_increment;
}
int32_t this_sample = next_sample;
next_sample = 0;

if (*sync_in) {
// sync_in contain the fractional reset time.
reset_time = static_cast<uint32_t>(*sync_in - 1) << 9;
uint32_t phase_at_reset = phase_ + \
(65535 - reset_time) * (phase_increment >> 16);
sync_reset = true;
transition_during_reset = false;
if (phase_at_reset < phase_ || (!high_ && phase_at_reset >= pw)) {
transition_during_reset = true;
}
if (phase_ >= pw) {
discontinuity_depth_ = -2048 + (aux_parameter_ >> 2);
int32_t before = (phase_at_reset >> 18);
int16_t after = discontinuity_depth_;
int32_t discontinuity = after - before;
this_sample += discontinuity * ThisBlepSample(reset_time) >> 15;
next_sample += discontinuity * NextBlepSample(reset_time) >> 15;
}
}
sync_in++;

phase_ += phase_increment;
if (phase_ < phase_increment) {
self_reset = true;
}
if (sync_out) {
if (phase_ < phase_increment) {
*sync_out++ = phase_ / (phase_increment >> 7) + 1;
} else {
*sync_out++ = 0;
}
}
while (transition_during_reset || !sync_reset) {
if (!high_) {
if (phase_ < pw) {
break;
}
uint32_t t = (phase_ - pw) / (phase_increment >> 16);
int16_t before = discontinuity_depth_;
int16_t after = phase_ >> 18;
int16_t discontinuity = after - before;
this_sample += discontinuity * ThisBlepSample(t) >> 15;
next_sample += discontinuity * NextBlepSample(t) >> 15;
high_ = true;
}
if (high_) {
if (!self_reset) {
break;
}
self_reset = false;
discontinuity_depth_ = -2048 + (aux_parameter_ >> 2);
uint32_t t = phase_ / (phase_increment >> 16);
int16_t before = 16383;
int16_t after = discontinuity_depth_;
int16_t discontinuity = after - before;
this_sample += discontinuity * ThisBlepSample(t) >> 15;
next_sample += discontinuity * NextBlepSample(t) >> 15;
high_ = false;
}
}

if (sync_reset) {
phase_ = reset_time * (phase_increment >> 16);
high_ = false;
}

next_sample += phase_ < pw
? discontinuity_depth_
: phase_ >> 18;
*buffer++ = (this_sample - 8192) << 1;
}
next_sample_ = next_sample;
END_INTERPOLATE_PHASE_INCREMENT
}

void AnalogOscillator::RenderSquare(
const uint8_t* sync_in,
int16_t* buffer,
uint8_t* sync_out,
size_t size) {
BEGIN_INTERPOLATE_PHASE_INCREMENT
if (parameter_ > 32000) {
parameter_ = 32000;
}
int32_t next_sample = next_sample_;
while (size--) {
bool sync_reset = false;
bool self_reset = false;
bool transition_during_reset = false;
uint32_t reset_time = 0;
INTERPOLATE_PHASE_INCREMENT
uint32_t pw = static_cast<uint32_t>(32768 - parameter_) << 16;
int32_t this_sample = next_sample;
next_sample = 0;
if (*sync_in) {
// sync_in contain the fractional reset time.
reset_time = static_cast<uint32_t>(*sync_in - 1) << 9;
uint32_t phase_at_reset = phase_ + \
(65535 - reset_time) * (phase_increment >> 16);
sync_reset = true;
if (phase_at_reset < phase_ || (!high_ && phase_at_reset >= pw)) {
transition_during_reset = true;
}
if (phase_at_reset >= pw) {
this_sample -= ThisBlepSample(reset_time);
next_sample -= NextBlepSample(reset_time);
}
}
sync_in++;
phase_ += phase_increment;
if (phase_ < phase_increment) {
self_reset = true;
}
if (sync_out) {
if (phase_ < phase_increment) {
*sync_out++ = phase_ / (phase_increment >> 7) + 1;
} else {
*sync_out++ = 0;
}
}
while (transition_during_reset || !sync_reset) {
if (!high_) {
if (phase_ < pw) {
break;
}
uint32_t t = (phase_ - pw) / (phase_increment >> 16);
this_sample += ThisBlepSample(t);
next_sample += NextBlepSample(t);
high_ = true;
}
if (high_) {
if (!self_reset) {
break;
}
self_reset = false;
uint32_t t = phase_ / (phase_increment >> 16);
this_sample -= ThisBlepSample(t);
next_sample -= NextBlepSample(t);
high_ = false;
}
}
if (sync_reset) {
phase_ = reset_time * (phase_increment >> 16);
high_ = false;
}
next_sample += phase_ < pw ? 0 : 32767;
*buffer++ = (this_sample - 16384) << 1;
}
next_sample_ = next_sample;
END_INTERPOLATE_PHASE_INCREMENT
}

void AnalogOscillator::RenderSaw(
const uint8_t* sync_in,
int16_t* buffer,
uint8_t* sync_out,
size_t size) {
BEGIN_INTERPOLATE_PHASE_INCREMENT
int32_t next_sample = next_sample_;
while (size--) {
bool sync_reset = false;
bool self_reset = false;
bool transition_during_reset = false;
uint32_t reset_time = 0;
INTERPOLATE_PHASE_INCREMENT
int32_t this_sample = next_sample;
next_sample = 0;

if (*sync_in) {
// sync_in contain the fractional reset time.
reset_time = static_cast<uint32_t>(*sync_in - 1) << 9;
uint32_t phase_at_reset = phase_ + \
(65535 - reset_time) * (phase_increment >> 16);
sync_reset = true;
if (phase_at_reset < phase_) {
transition_during_reset = true;
}
int32_t discontinuity = phase_at_reset >> 17;
this_sample -= discontinuity * ThisBlepSample(reset_time) >> 15;
next_sample -= discontinuity * NextBlepSample(reset_time) >> 15;
}
sync_in++;

phase_ += phase_increment;
if (phase_ < phase_increment) {
self_reset = true;
}

if (sync_out) {
if (phase_ < phase_increment) {
*sync_out++ = phase_ / (phase_increment >> 7) + 1;
} else {
*sync_out++ = 0;
}
}

if ((transition_during_reset || !sync_reset) && self_reset) {
uint32_t t = phase_ / (phase_increment >> 16);
this_sample -= ThisBlepSample(t);
next_sample -= NextBlepSample(t);
}

if (sync_reset) {
phase_ = reset_time * (phase_increment >> 16);
high_ = false;
}
next_sample += phase_ >> 17;
*buffer++ = (this_sample - 16384) << 1;
}
next_sample_ = next_sample;
END_INTERPOLATE_PHASE_INCREMENT
}

void AnalogOscillator::RenderVariableSaw(
const uint8_t* sync_in,
int16_t* buffer,
uint8_t* sync_out,
size_t size) {
BEGIN_INTERPOLATE_PHASE_INCREMENT
int32_t next_sample = next_sample_;
if (parameter_ < 1024) {
parameter_ = 1024;
}
while (size--) {
bool sync_reset = false;
bool self_reset = false;
bool transition_during_reset = false;
uint32_t reset_time = 0;

INTERPOLATE_PHASE_INCREMENT
uint32_t pw = static_cast<uint32_t>(parameter_) << 16;

int32_t this_sample = next_sample;
next_sample = 0;

if (*sync_in) {
// sync_in contain the fractional reset time.
reset_time = static_cast<uint32_t>(*sync_in - 1) << 9;
uint32_t phase_at_reset = phase_ + \
(65535 - reset_time) * (phase_increment >> 16);
sync_reset = true;
if (phase_at_reset < phase_ || (!high_ && phase_at_reset >= pw)) {
transition_during_reset = true;
}
int32_t before = (phase_at_reset >> 18) + ((phase_at_reset - pw) >> 18);
int32_t after = (0 >> 18) + ((0 - pw) >> 18);
int32_t discontinuity = after - before;
this_sample += discontinuity * ThisBlepSample(reset_time) >> 15;
next_sample += discontinuity * NextBlepSample(reset_time) >> 15;
}
sync_in++;

phase_ += phase_increment;
if (phase_ < phase_increment) {
self_reset = true;
}

if (sync_out) {
if (phase_ < phase_increment) {
*sync_out++ = phase_ / (phase_increment >> 7) + 1;
} else {
*sync_out++ = 0;
}
}

while (transition_during_reset || !sync_reset) {
if (!high_) {
if (phase_ < pw) {
break;
}
uint32_t t = (phase_ - pw) / (phase_increment >> 16);
this_sample -= ThisBlepSample(t) >> 1;
next_sample -= NextBlepSample(t) >> 1;
high_ = true;
}
if (high_) {
if (!self_reset) {
break;
}
self_reset = false;
uint32_t t = phase_ / (phase_increment >> 16);
this_sample -= ThisBlepSample(t) >> 1;
next_sample -= NextBlepSample(t) >> 1;
high_ = false;
}
}

if (sync_reset) {
phase_ = reset_time * (phase_increment >> 16);
high_ = false;
}
next_sample += phase_ >> 18;
next_sample += (phase_ - pw) >> 18;
*buffer++ = (this_sample - 16384) << 1;
}
next_sample_ = next_sample;
END_INTERPOLATE_PHASE_INCREMENT
}

void AnalogOscillator::RenderTriangle(
const uint8_t* sync_in,
int16_t* buffer,
uint8_t* sync_out,
size_t size) {
BEGIN_INTERPOLATE_PHASE_INCREMENT
uint32_t phase = phase_;
while (size--) {
INTERPOLATE_PHASE_INCREMENT
int16_t triangle;
uint16_t phase_16;
if (*sync_in++) {
phase = 0;
}
phase += phase_increment >> 1;
phase_16 = phase >> 16;
triangle = (phase_16 << 1) ^ (phase_16 & 0x8000 ? 0xffff : 0x0000);
triangle += 32768;
*buffer = triangle >> 1;
phase += phase_increment >> 1;
phase_16 = phase >> 16;
triangle = (phase_16 << 1) ^ (phase_16 & 0x8000 ? 0xffff : 0x0000);
triangle += 32768;
*buffer++ += triangle >> 1;
}
phase_ = phase;
END_INTERPOLATE_PHASE_INCREMENT
}

void AnalogOscillator::RenderSine(
const uint8_t* sync_in,
int16_t* buffer,
uint8_t* sync_out,
size_t size) {
uint32_t phase = phase_;
BEGIN_INTERPOLATE_PHASE_INCREMENT
while (size--) {
INTERPOLATE_PHASE_INCREMENT
phase += phase_increment;
if (*sync_in++) {
phase = 0;
}
*buffer++ = Interpolate824(wav_sine, phase);
}
END_INTERPOLATE_PHASE_INCREMENT
phase_ = phase;
}

void AnalogOscillator::RenderTriangleFold(
const uint8_t* sync_in,
int16_t* buffer,
uint8_t* sync_out,
size_t size) {
uint32_t phase = phase_;
BEGIN_INTERPOLATE_PHASE_INCREMENT
BEGIN_INTERPOLATE_PARAMETER
while (size--) {
INTERPOLATE_PARAMETER
INTERPOLATE_PHASE_INCREMENT
uint16_t phase_16;
int16_t triangle;
int16_t gain = 2048 + (parameter * 30720 >> 15);
if (*sync_in++) {
phase = 0;
}
// 2x oversampled WF.
phase += phase_increment >> 1;
phase_16 = phase >> 16;
triangle = (phase_16 << 1) ^ (phase_16 & 0x8000 ? 0xffff : 0x0000);
triangle += 32768;
triangle = triangle * gain >> 15;
triangle = Interpolate88(ws_tri_fold, triangle + 32768);
*buffer = triangle >> 1;
phase += phase_increment >> 1;
phase_16 = phase >> 16;
triangle = (phase_16 << 1) ^ (phase_16 & 0x8000 ? 0xffff : 0x0000);
triangle += 32768;
triangle = triangle * gain >> 15;
triangle = Interpolate88(ws_tri_fold, triangle + 32768);
*buffer++ += triangle >> 1;
}
END_INTERPOLATE_PARAMETER
END_INTERPOLATE_PHASE_INCREMENT
phase_ = phase;
}

void AnalogOscillator::RenderSineFold(
const uint8_t* sync_in,
int16_t* buffer,
uint8_t* sync_out,
size_t size) {
uint32_t phase = phase_;
BEGIN_INTERPOLATE_PHASE_INCREMENT
BEGIN_INTERPOLATE_PARAMETER
while (size--) {
INTERPOLATE_PARAMETER
INTERPOLATE_PHASE_INCREMENT
int16_t sine;
int16_t gain = 2048 + (parameter * 30720 >> 15);
if (*sync_in++) {
phase = 0;
}
// 2x oversampled WF.
phase += phase_increment >> 1;
sine = Interpolate824(wav_sine, phase);
sine = sine * gain >> 15;
sine = Interpolate88(ws_sine_fold, sine + 32768);
*buffer = sine >> 1;
phase += phase_increment >> 1;
sine = Interpolate824(wav_sine, phase);
sine = sine * gain >> 15;
sine = Interpolate88(ws_sine_fold, sine + 32768);
*buffer++ += sine >> 1;
}
END_INTERPOLATE_PARAMETER
END_INTERPOLATE_PHASE_INCREMENT
phase_ = phase;
}

void AnalogOscillator::RenderBuzz(
const uint8_t* sync_in,
int16_t* buffer,
uint8_t* sync_out,
size_t size) {
int32_t shifted_pitch = pitch_ + ((32767 - parameter_) >> 1);
uint16_t crossfade = shifted_pitch << 6;
size_t index = (shifted_pitch >> 10);
if (index >= kNumZones) {
index = kNumZones - 1;
}
const int16_t* wave_1 = waveform_table[WAV_BANDLIMITED_COMB_0 + index];
index += 1;
if (index >= kNumZones) {
index = kNumZones - 1;
}
const int16_t* wave_2 = waveform_table[WAV_BANDLIMITED_COMB_0 + index];
while (size--) {
phase_ += phase_increment_;
if (*sync_in++) {
phase_ = 0;
}
*buffer++ = Crossfade(wave_1, wave_2, phase_, crossfade);
}
}

/* static */
AnalogOscillator::RenderFn AnalogOscillator::fn_table_[] = {
&AnalogOscillator::RenderSaw,
&AnalogOscillator::RenderVariableSaw,
&AnalogOscillator::RenderCSaw,
&AnalogOscillator::RenderSquare,
&AnalogOscillator::RenderTriangle,
&AnalogOscillator::RenderSine,
&AnalogOscillator::RenderTriangleFold,
&AnalogOscillator::RenderSineFold,
&AnalogOscillator::RenderBuzz,
};

} // namespace braids

+ 0
- 162
repos/ArableInstruments/parasites/braids/analog_oscillator.h View File

@@ -1,162 +0,0 @@
// Copyright 2012 Olivier Gillet.
//
// Author: Olivier Gillet (ol.gillet@gmail.com)
//
// 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:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// 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 NONINFRINGEMENT. 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.
//
// See http://creativecommons.org/licenses/MIT/ for more information.
//
// -----------------------------------------------------------------------------
//
// Oscillator - analog style waveforms.

#ifndef BRAIDS_ANALOG_OSCILLATOR_H_
#define BRAIDS_ANALOG_OSCILLATOR_H_

#include "stmlib/stmlib.h"

#include <cstring>
#include <cstdio>

#include "braids/resources.h"

namespace braids {

enum AnalogOscillatorShape {
OSC_SHAPE_SAW,
OSC_SHAPE_VARIABLE_SAW,
OSC_SHAPE_CSAW,
OSC_SHAPE_SQUARE,
OSC_SHAPE_TRIANGLE,
OSC_SHAPE_SINE,
OSC_SHAPE_TRIANGLE_FOLD,
OSC_SHAPE_SINE_FOLD,
OSC_SHAPE_BUZZ
};

enum SyncMode {
OSCILLATOR_SYNC_MODE_OFF,
OSCILLATOR_SYNC_MODE_MASTER,
OSCILLATOR_SYNC_MODE_SLAVE
};

class AnalogOscillator {
public:
typedef void (AnalogOscillator::*RenderFn)(
const uint8_t*,
int16_t*,
uint8_t*,
size_t);

AnalogOscillator() { }
~AnalogOscillator() { }
inline void Init() {
phase_ = 0;
phase_increment_ = 1;
high_ = false;
parameter_ = previous_parameter_ = 0;
aux_parameter_ = 0;
discontinuity_depth_ = -16383;
pitch_ = 60 << 7;
next_sample_ = 0;
}
inline void set_shape(AnalogOscillatorShape shape) {
shape_ = shape;
}
inline void set_pitch(int16_t pitch) {
pitch_ = pitch;
}

inline void set_parameter(int16_t parameter) {
parameter_ = parameter;
}

inline void set_aux_parameter(int16_t parameter) {
aux_parameter_ = parameter;
}
inline uint32_t phase_increment() const {
return phase_increment_;
}
inline void Reset() {
phase_ = -phase_increment_;
}

void Render(
const uint8_t* sync_in,
int16_t* buffer,
uint8_t* sync_out,
size_t size);
private:
void RenderSquare(const uint8_t*, int16_t*, uint8_t*, size_t);
void RenderSaw(const uint8_t*, int16_t*, uint8_t*, size_t);
void RenderVariableSaw(const uint8_t*, int16_t*, uint8_t*, size_t);
void RenderCSaw(const uint8_t*, int16_t*, uint8_t*, size_t);
void RenderTriangle(const uint8_t*, int16_t*, uint8_t*, size_t);
void RenderSine(const uint8_t*, int16_t*, uint8_t*, size_t);
void RenderTriangleFold(const uint8_t*, int16_t*, uint8_t*, size_t);
void RenderSineFold(const uint8_t*, int16_t*, uint8_t*, size_t);
void RenderBuzz(const uint8_t*, int16_t*, uint8_t*, size_t);
uint32_t ComputePhaseIncrement(int16_t midi_pitch);
inline int32_t ThisBlepSample(uint32_t t) {
if (t > 65535) {
t = 65535;
}
return t * t >> 18;
}
inline int32_t NextBlepSample(uint32_t t) {
if (t > 65535) {
t = 65535;
}
t = 65535 - t;
return -static_cast<int32_t>(t * t >> 18);
}
uint32_t phase_;
uint32_t phase_increment_;
uint32_t previous_phase_increment_;
bool high_;

int16_t parameter_;
int16_t previous_parameter_;
int16_t aux_parameter_;
int16_t discontinuity_depth_;
int16_t pitch_;
int32_t next_sample_;
AnalogOscillatorShape shape_;
AnalogOscillatorShape previous_shape_;
static RenderFn fn_table_[];
DISALLOW_COPY_AND_ASSIGN(AnalogOscillator);
};

} // namespace braids

#endif // BRAIDS_ANALOG_OSCILLATOR_H_

+ 0
- 0
repos/ArableInstruments/parasites/braids/bootloader/__init__.py View File


+ 0
- 231
repos/ArableInstruments/parasites/braids/bootloader/bootloader.cc View File

@@ -1,231 +0,0 @@
// Copyright 2012 Olivier Gillet.
//
// Author: Olivier Gillet (ol.gillet@gmail.com)
//
// 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:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// 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 NONINFRINGEMENT. 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.
//
// See http://creativecommons.org/licenses/MIT/ for more information.

#include <stm32f10x_conf.h>
#include <string.h>

#include "stmlib/utils/dsp.h"
#include "stmlib/utils/ring_buffer.h"
#include "stmlib/system/bootloader_utils.h"
#include "stmlib/system/flash_programming.h"
#include "stmlib/system/system_clock.h"

#include "stm_audio_bootloader/qpsk/packet_decoder.h"
#include "stm_audio_bootloader/qpsk/demodulator.h"

#include "braids/drivers/adc.h"
#include "braids/drivers/display.h"
#include "braids/drivers/encoder.h"
#include "braids/drivers/system.h"

using namespace braids;
using namespace stmlib;
using namespace stm_audio_bootloader;

const double kSampleRate = 48000.0;
const double kModulationRate = 6000.0;
const double kBitRate = 12000.0;

const uint32_t kStartAddress = 0x08004000;

Adc adc;
System sys;
Display display;
Encoder encoder;
PacketDecoder decoder;
Demodulator demodulator;

extern "C" {
void HardFault_Handler(void) { while (1); }
void MemManage_Handler(void) { while (1); }
void BusFault_Handler(void) { while (1); }
void UsageFault_Handler(void) { while (1); }
void NMI_Handler(void) { }
void SVC_Handler(void) { }
void DebugMon_Handler(void) { }
void PendSV_Handler(void) { }

}

extern "C" {

volatile uint8_t packet_inspector_byte = 0;
volatile bool encoder_released = false;

void SysTick_Handler() {
system_clock.Tick(); // Tick global ms counter.
encoder.Debounce();
encoder_released = encoder_released | encoder.released();
packet_inspector_byte += encoder.increment();
uint32_t ms_clock = system_clock.milliseconds();
if ((ms_clock & 0x3f) == 0 && display.mutable_buffer()[0] >= '\x98') {
display.mutable_buffer()[0] = '\x98' + ((ms_clock >> 6) & 7);
}
display.Refresh();
}

uint16_t discard_samples = 8000;

void TIM1_UP_IRQHandler(void) {
if (TIM_GetITStatus(TIM1, TIM_IT_Update) == RESET) {
return;
}
TIM_ClearITPendingBit(TIM1, TIM_IT_Update);
if (adc.PipelinedRead(3)) {
if (!discard_samples) {
int16_t sample = adc.channel(3);
demodulator.PushSample(sample);
} else {
--discard_samples;
}
}
}

}

static uint32_t current_address;
static uint16_t packet_index;

void ProgramPage(const uint8_t* data, size_t size) {
FLASH_Unlock();
FLASH_ErasePage(current_address);
const uint32_t* words = static_cast<const uint32_t*>(
static_cast<const void*>(data));
for (size_t written = 0; written < size; written += 4) {
FLASH_ProgramWord(current_address, *words++);
current_address += 4;
}
}

void PrintPageNumber(uint16_t page_number, bool error) {
char string[5];
string[0] = '\x98';
string[1] = error ? 'X' : '0' + page_number / 100;
string[2] = '0' + (page_number / 10) % 10;
string[3] = '0' + page_number % 10;
string[4] = '\0';
display.Print(string);
}

const char kHexChar[] = "0123456789ABCDEF";
void PacketInspector() {
while (1) {
char string[5];
string[0] = kHexChar[packet_inspector_byte >> 4];
string[1] = kHexChar[packet_inspector_byte & 0xf];
string[2] = kHexChar[decoder.packet_data()[packet_inspector_byte] >> 4];
string[3] = kHexChar[decoder.packet_data()[packet_inspector_byte] & 0xf];
string[4] = '\0';
display.Print(string);
}
}

void Init() {
sys.Init(F_CPU / (3 * kSampleRate) - 1, false);
system_clock.Init();
adc.Init(3 * kSampleRate > 96000);
encoder.Init();
display.Init();
sys.StartTimers();
}

void InitializeReception() {
decoder.Init();
demodulator.Init(
kModulationRate / kSampleRate * 4294967296.0,
kSampleRate / kModulationRate,
2.0 * kSampleRate / kBitRate);
demodulator.SyncCarrier(true);
decoder.Reset();
current_address = kStartAddress;
packet_index = 0;
display.Print("\x98RDY");
}

uint8_t rx_buffer[PAGE_SIZE];
const uint16_t kPacketsPerPage = PAGE_SIZE / kPacketSize;
const char* kErrorStrings[2] = { "@SYN", "@CRC", };

int main(void) {
Init();
InitializeReception();

bool exit_updater = !encoder.pressed_immediate();
while (!exit_updater) {
bool error = false;

if (demodulator.state() == DEMODULATOR_STATE_OVERFLOW) {
display.Print("@OVF");
error = true;
} else {
demodulator.ProcessAtLeast(32);
}
while (demodulator.available() && !error && !exit_updater) {
uint8_t symbol = demodulator.NextSymbol();
PacketDecoderState state = decoder.ProcessSymbol(symbol);
switch (state) {
case PACKET_DECODER_STATE_OK:
{
memcpy(
rx_buffer + (packet_index % kPacketsPerPage) * kPacketSize,
decoder.packet_data(),
kPacketSize);
++packet_index;
if ((packet_index % kPacketsPerPage) == 0) {
PrintPageNumber(packet_index / kPacketsPerPage, false);
ProgramPage(rx_buffer, PAGE_SIZE);
decoder.Reset();
demodulator.SyncCarrier(false);
} else {
decoder.Reset();
demodulator.SyncDecision();
}
}
break;
case PACKET_DECODER_STATE_ERROR_SYNC:
case PACKET_DECODER_STATE_ERROR_CRC:
display.Print(kErrorStrings[state - PACKET_DECODER_STATE_ERROR_SYNC]);
error = true;
break;
case PACKET_DECODER_STATE_END_OF_TRANSMISSION:
exit_updater = true;
break;
default:
break;
}
}
if (error) {
encoder_released = false;
while (!encoder_released); // Polled in ISR
InitializeReception();
}
}
Uninitialize();
JumpTo(kStartAddress);
while (1) { }
}

+ 0
- 104
repos/ArableInstruments/parasites/braids/bootloader/characters.cc View File

@@ -1,104 +0,0 @@
// Copyright 2012 Olivier Gillet.
//
// Author: Olivier Gillet (ol.gillet@gmail.com)
//
// 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:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// 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 NONINFRINGEMENT. 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.
//
// See http://creativecommons.org/licenses/MIT/ for more information.
//
// -----------------------------------------------------------------------------
//
// Resources definitions.
//
// Automatically generated with:
// make resources


#include "braids/resources.h"

namespace braids {

const uint16_t chr_characters[] = {
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, 272, 1280, 29012,
46420, 9352, 39716, 256,
39936, 61440, 952, 340,
8, 68, 16, 136,
64648, 24704, 55364, 61504,
25668, 46148, 48196, 32912,
64580, 62532, 272, 264,
160, 4164, 520, 33936,
64592, 60484, 61776, 39936,
61712, 40004, 35908, 48192,
27716, 37136, 30720, 3236,
7168, 28288, 28192, 64512,
52292, 64544, 52324, 46148,
33040, 31744, 3208, 27688,
680, 656, 37000, 39936,
544, 61440, 40, 4096,
512, 63556, 7204, 6212,
28744, 39940, 35844, 62016,
11332, 4180, 12352, 432,
272, 10324, 8272, 14404,
35972, 50276, 80, 45632,
7172, 14336, 2056, 10280,
680, 29248, 4108, 37388,
272, 37088, 68, 0,
24736, 3592, 33408, 4136,
224, 524, 896, 56,
24712, 18568, 24, 40,
60416, 2068, 4368, 11840,
64520, 64516, 65024, 64768,
64640, 64576, 64544, 64528,
49152, 57344, 28672, 14336,
6144, 7168, 35840, 50176,
65532, 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, 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, 65532,
};

} // namespace braids

+ 0
- 45
repos/ArableInstruments/parasites/braids/bootloader/characters.h View File

@@ -1,45 +0,0 @@
// Copyright 2012 Olivier Gillet.
//
// Author: Olivier Gillet (ol.gillet@gmail.com)
//
// 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:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// 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 NONINFRINGEMENT. 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.
//
// See http://creativecommons.org/licenses/MIT/ for more information.
//
// -----------------------------------------------------------------------------
//
// Resources definitions.
//
// Automatically generated with:
// make resources


#ifndef BRAIDS_BOOTLOADER_CHARACTERS_H_
#define BRAIDS_BOOTLOADER_CHARACTERS_H_


#include "stmlib/stmlib.h"

namespace braids {

extern const uint16_t chr_characters[];

} // namespace braids

#endif // BRAIDS_BOOTLOADER_CHARACTERS_H_

+ 0
- 43
repos/ArableInstruments/parasites/braids/bootloader/makefile View File

@@ -1,43 +0,0 @@
# Copyright 2012 Olivier Gillet.
#
# Author: Olivier Gillet (ol.gillet@gmail.com)
#
# 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:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# 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 NONINFRINGEMENT. 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.
#
# See http://creativecommons.org/licenses/MIT/ for more information.

# System specifications
F_CRYSTAL = 8000000L
F_CPU = 72000000L
SYSCLOCK = SYSCLK_FREQ_72MHz
FAMILY = f10x
DENSITY = md
MEMORY_MODE = flash
# USB = enabled

# Preferred upload command
UPLOAD_COMMAND = upload_jtag

# Packages to build
TARGET = braids_bootloader
PACKAGES = braids/bootloader braids/drivers stmlib/utils stmlib/system \
stm_audio_bootloader/qpsk
RESOURCES = braids/resources

include stmlib/makefile.inc

+ 0
- 311
repos/ArableInstruments/parasites/braids/braids.cc View File

@@ -1,311 +0,0 @@
// Copyright 2012 Olivier Gillet.
//
// Author: Olivier Gillet (ol.gillet@gmail.com)
//
// 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:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// 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 NONINFRINGEMENT. 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.
//
// See http://creativecommons.org/licenses/MIT/ for more information.

#include <stm32f10x_conf.h>

#include <algorithm>

#include "stmlib/utils/dsp.h"
#include "stmlib/utils/ring_buffer.h"
#include "stmlib/system/system_clock.h"
#include "stmlib/system/uid.h"

#include "braids/drivers/adc.h"
#include "braids/drivers/dac.h"
#include "braids/drivers/debug_pin.h"
#include "braids/drivers/gate_input.h"
#include "braids/drivers/internal_adc.h"
#include "braids/drivers/system.h"
#include "braids/envelope.h"
#include "braids/macro_oscillator.h"
#include "braids/quantizer.h"
#include "braids/signature_waveshaper.h"
#include "braids/vco_jitter_source.h"
#include "braids/ui.h"

#include "braids/quantizer_scales.h"

// #define PROFILE_RENDER 1

using namespace braids;
using namespace std;
using namespace stmlib;


const size_t kNumBlocks = 4;
const size_t kBlockSize = 24;

MacroOscillator osc;
Envelope envelope;
Adc adc;
Dac dac;
DebugPin debug_pin;
GateInput gate_input;
InternalAdc internal_adc;
Quantizer quantizer;
SignatureWaveshaper ws;
System sys;
VcoJitterSource jitter_source;
Ui ui;

uint8_t current_scale = 0xff;
size_t current_sample;
volatile size_t playback_block;
volatile size_t render_block;
int16_t audio_samples[kNumBlocks][kBlockSize];
uint8_t sync_samples[kNumBlocks][kBlockSize];

bool trigger_detected_flag;
volatile bool trigger_flag;
uint16_t trigger_delay;

extern "C" {
void HardFault_Handler(void) { while (1); }
void MemManage_Handler(void) { while (1); }
void BusFault_Handler(void) { while (1); }
void UsageFault_Handler(void) { while (1); }
void NMI_Handler(void) { }
void SVC_Handler(void) { }
void DebugMon_Handler(void) { }
void PendSV_Handler(void) { }

}

extern "C" {

void SysTick_Handler() {
ui.Poll();
}

void TIM1_UP_IRQHandler(void) {
if (!(TIM1->SR & TIM_IT_Update)) {
return;
}
TIM1->SR = (uint16_t)~TIM_IT_Update;
dac.Write(-audio_samples[playback_block][current_sample] + 32768);

bool trigger_detected = gate_input.raised();
sync_samples[playback_block][current_sample] = trigger_detected;
trigger_detected_flag = trigger_detected_flag | trigger_detected;
current_sample = current_sample + 1;
if (current_sample >= kBlockSize) {
current_sample = 0;
playback_block = (playback_block + 1) % kNumBlocks;
}
bool adc_scan_cycle_complete = adc.PipelinedScan();
if (adc_scan_cycle_complete) {
ui.UpdateCv(adc.channel(0), adc.channel(1), adc.channel(2), adc.channel(3));
if (trigger_detected_flag) {
trigger_delay = settings.trig_delay()
? (1 << settings.trig_delay()) : 0;
++trigger_delay;
trigger_detected_flag = false;
}
if (trigger_delay) {
--trigger_delay;
if (trigger_delay == 0) {
trigger_flag = true;
}
}
}
}

}

void Init() {
sys.Init(F_CPU / 96000 - 1, true);
settings.Init();
ui.Init();
system_clock.Init();
adc.Init(false);
gate_input.Init();
#ifdef PROFILE_RENDER
debug_pin.Init();
#endif
dac.Init();
osc.Init();
quantizer.Init();
internal_adc.Init();
for (size_t i = 0; i < kNumBlocks; ++i) {
fill(&audio_samples[i][0], &audio_samples[i][kBlockSize], 0);
fill(&sync_samples[i][0], &sync_samples[i][kBlockSize], 0);
}
playback_block = kNumBlocks / 2;
render_block = 0;
current_sample = 0;
envelope.Init();
ws.Init(GetUniqueId(1));
jitter_source.Init();
sys.StartTimers();
}

const uint16_t bit_reduction_masks[] = {
0xc000,
0xe000,
0xf000,
0xf800,
0xff00,
0xfff0,
0xffff };

const uint16_t decimation_factors[] = { 24, 12, 6, 4, 3, 2, 1 };

void RenderBlock() {
static int16_t previous_pitch = 0;
static int16_t previous_shape = 0;
static uint16_t gain_lp;

#ifdef PROFILE_RENDER
debug_pin.High();
#endif
envelope.Update(
settings.GetValue(SETTING_AD_ATTACK) * 8,
settings.GetValue(SETTING_AD_DECAY) * 8);
uint32_t ad_value = envelope.Render();
if (ui.paques()) {
osc.set_shape(MACRO_OSC_SHAPE_QUESTION_MARK);
} else if (settings.meta_modulation()) {
int16_t shape = adc.channel(3);
shape -= settings.data().fm_cv_offset;
if (shape > previous_shape + 2 || shape < previous_shape - 2) {
previous_shape = shape;
} else {
shape = previous_shape;
}
shape = MACRO_OSC_SHAPE_LAST * shape >> 11;
shape += settings.shape();
if (shape >= MACRO_OSC_SHAPE_LAST_ACCESSIBLE_FROM_META) {
shape = MACRO_OSC_SHAPE_LAST_ACCESSIBLE_FROM_META;
} else if (shape <= 0) {
shape = 0;
}
MacroOscillatorShape osc_shape = static_cast<MacroOscillatorShape>(shape);
osc.set_shape(osc_shape);
ui.set_meta_shape(osc_shape);
} else {
osc.set_shape(settings.shape());
}
// Set timbre and color: CV + internal modulation.
uint16_t parameters[2];
for (uint16_t i = 0; i < 2; ++i) {
uint16_t value = adc.channel(i) << 3;
Setting ad_mod_setting = i == 0 ? SETTING_AD_TIMBRE : SETTING_AD_COLOR;
value += ad_value * settings.GetValue(ad_mod_setting) >> 5;
if (value > 32767) value = 32767;
parameters[i] = value;
}
osc.set_parameters(parameters[0], parameters[1]);
// Apply hysteresis to ADC reading to prevent a single bit error to move
// the quantized pitch up and down the quantization boundary.
int32_t pitch = quantizer.Process(
settings.adc_to_pitch(adc.channel(2)),
(60 + settings.quantizer_root()) << 7);
if (!settings.meta_modulation()) {
pitch += settings.adc_to_fm(adc.channel(3));
}
// Check if the pitch has changed to cause an auto-retrigger
int32_t pitch_delta = pitch - previous_pitch;
if (settings.data().auto_trig &&
(pitch_delta >= 0x40 || -pitch_delta >= 0x40)) {
trigger_detected_flag = true;
}
previous_pitch = pitch;
pitch += jitter_source.Render(settings.vco_drift());
pitch += internal_adc.value() >> 8;
pitch += ad_value * settings.GetValue(SETTING_AD_FM) >> 7;
if (pitch > 16383) {
pitch = 16383;
} else if (pitch < 0) {
pitch = 0;
}
if (settings.vco_flatten()) {
pitch = Interpolate88(lut_vco_detune, pitch << 2);
}
osc.set_pitch(pitch + settings.pitch_transposition());

if (trigger_flag) {
osc.Strike();
envelope.Trigger(ENV_SEGMENT_ATTACK);
ui.StepMarquee();
trigger_flag = false;
}
uint8_t* sync_buffer = sync_samples[render_block];
int16_t* render_buffer = audio_samples[render_block];
if (settings.GetValue(SETTING_AD_VCA) != 0
|| settings.GetValue(SETTING_AD_TIMBRE) != 0
|| settings.GetValue(SETTING_AD_COLOR) != 0
|| settings.GetValue(SETTING_AD_FM) != 0) {
memset(sync_buffer, 0, kBlockSize);
}
osc.Render(sync_buffer, render_buffer, kBlockSize);
// Copy to DAC buffer with sample rate and bit reduction applied.
int16_t sample = 0;
size_t decimation_factor = decimation_factors[settings.data().sample_rate];
uint16_t bit_mask = bit_reduction_masks[settings.data().resolution];
int32_t gain = settings.GetValue(SETTING_AD_VCA) ? ad_value : 65535;
uint16_t signature = settings.signature() * settings.signature() * 4095;
for (size_t i = 0; i < kBlockSize; ++i) {
if ((i % decimation_factor) == 0) {
sample = render_buffer[i] & bit_mask;
}
sample = sample * gain_lp >> 16;
gain_lp += (gain - gain_lp) >> 4;
int16_t warped = ws.Transform(sample);
render_buffer[i] = Mix(sample, warped, signature);
}
render_block = (render_block + 1) % kNumBlocks;
#ifdef PROFILE_RENDER
debug_pin.Low();
#endif
}

int main(void) {
Init();
while (1) {
if (current_scale != settings.GetValue(SETTING_QUANTIZER_SCALE)) {
current_scale = settings.GetValue(SETTING_QUANTIZER_SCALE);
quantizer.Configure(scales[current_scale]);
}
while (render_block != playback_block) {
RenderBlock();
}
ui.DoEvents();
}
}

BIN
repos/ArableInstruments/parasites/braids/data/map.bin View File


+ 0
- 97
repos/ArableInstruments/parasites/braids/data/waves.bin View File

@@ -1,97 +0,0 @@
hiklnpstvz||~亙剣墛審憫摂晹敂搾悗媺�ytne]XSNJIIKPV]ht倧灜妓阡祯��麴柁尤急�崉{rib[URNJHHIHHKNPSX\_dhlquxz}~}}|zxvtqonlkiihgghgh{z|xvuuvuqrsqnmmnnlnrtvz}儑垏嫀崑妸妵儊}wrokd_ZTROPRWao|尃端阱��鲱邕辛喘�枙晹憦弽妴儉}ytnifaZVVUTRUZ]_binoprtsqoopppquxz||~€}{晻敁敀弿帇妷垏唵厔剟倎}yvrmigc`_]\\[ZXXVTROMKIGFHJKNV]dq亶洴了凫蝓���纛溘账扛哎湐寔zskb\UMFA:8767:?ELU\clswz€€亗亐倐們噳墠悜挄唩ywxvu{}€ztqmils{儛櫆湙�si_]bhn}墝帗拠噵嫀牠�喇攨i<$&Et幏�����wPHNGFZfcn}亖摗ⅹ冻�搙aSE43@JZv帨�藩�{ibWNS\`hx€儔強唵敋灑&Ζ�湕巿€vng`[WTSTVY\bgnt{亝墡悘帋媶倉xrkf_[UOKJHFIRZey寷彼苕簋��胲使�坸jbZTMLMKKLOQTX\airy€姅洜えà灄弳{ohc\YZ\^djqy€噹敂*��悅sli_QKKGEM`p~帤湜攧wqiZPLE<46@K\t垨ⅲ殢噭yxylP@>2+Lp叕蒿铟�疖忠陋棈oikqz墬さ蒙是啪瑪ybJ'-6Gi嫕Ρ富拱�憖lVJIC=FZgr倲舶�牊強墋yrjd_ZTQPQFQNFKRPKOVWRYaYZ`_ZY_XUXWPRUOQTXS_fbhw~{崯毃韭捎噫桉�����綮遴蚜匠灁弚jdXKB:5/&'+(+.8;BOS^inw唻彎う┒弹芳繁矖櫆悏強~z�sptvqqvuvz倐€垘墢悊彊寑姂}q}waZhcICSM<AM@8R[HPkmf拠彴怀河苎隰钯��嬷栳排刹湙晝pgdQ?F@&&1"./!.?AAN^deo~們帣枛ⅵ牊ぃ�椃�倉qSPYRPez厤潬攼彁僲caT;5Kiqu惁珢uwkA.D'7FDOgvz唸uxyg\t俲p枠剦ó櫇妓锰拮严籂灅xp懀ⅸ灰夏碌爖e\UaM@a剺�脘艜€p8>1=fv啴型法瀽亁tqru|噷噰摌弽棤洏檸€ugTJS^en倱枏�p\G?=:6;GT_efkrl[STRJMTg捊赏��宸�刬gs}帰Д不瓫牣�オ�噏dYNGL\m€敚道颈�mUH3",AKTr崣ざ疾▁噣{~}y|尀�毃父獰洅寣則oqj_dw乻go亜~r_OO^aK63/"#4=5%5ZfWIE^��拾冽箬胥硾牂嫋�cVl崸�妽澃嫉牀枂u儫昹TXemx|lWVgqidw唞p倫噣崝厁増剮'潩Κ┆�櫅棈厑€zolqqiefghfed_^eaOHSYH32BE1!+=@32ALP\u唟q曈丕澷�峥豌芈盟簻敠獕ls垏sfm|亃x亰妷崠槖挍煋垘晭|v{{pfiohahqnjq{儔�ぃ舅净排菩慰杭糠�晱晬sfeaWQC:232/!##-#;:52;K]jo{{x曇虦犵�庑睇龛�暌噪蛩ǘ嘶�殞亱妕bfggaULORRUNDFX]SN\`]gvnhw唺墛彍瓂|qnqz}t~倆彁€垘憤墖噷€啀e{搈h亪|~悞嫚珕叄乽媈OdH77%"&B38pmeシ牻沌彗��噫杷徒敊爍apWJZPBLVW_aa_t乛i攞v張悡摑攼湥攲洕帀墘厇~{oy�沽僚乙驼赜蜒吓驴拱�晱媦ro`XUUC=>9090'*!*)&&(,56=GWa^t悋壔默漓巅瘕貊��麝潢夼呐睙�~{乯]bYDKI64?4.303:77>EFMVXZfrsy唽嫏Ζ瑇far惈獥牴侥尸弶彇弚ks~噲{tyskszbDBQ^fY>=WopdVbn_]dU<+&?URHI[kva楝児�铷挧��⿵懕橇▽~摬�Zl€垐onqv墫€[Og唡UBPgvzlo啔ア妏s彏恱hr|墧牚暗犯党�洃�wpjb]XRQPRTX]dnx厧殻�逗当�弨q`QB82-.+-/7G[t墴泵组齄��嘈惊攡hTE;41025;DPZfnv}啂敎ⅵ┈��á檻�tkaXPJHGJOW_hhfddglry~垜槨¨ィ灇搶厃qg_][ZY]bit~垗敇煝"湕垊zndZOC?;;<:98?K`z挧夹弼��蜩秩急�悑墘寣噦wnd\RF=1/-6?MYgw厲牗���枎噧|ztuqonlkih47ANc槾枢祚镙味�xi[XPQNMNHH>?=ALXn倽睬剞滟痛焾pbRJBDINWROC>?EWdu劃乖轱蜷菪露�亁uv{xuokd\YOI?91-6C\v毣嘴觞��摊弜bULGFBFEFC>914Z[_ft倸�晾丹巤g[PLLScny|~zvnjiipy姈ˉ�晥xdL<33;GTbq}墣妧pggs啟非蚁评返吹寂暂孓械梱ZG868?Sdw|zlUB9BSq幉题觜�峁巇E1)&+5D\lwxug_Zt垞煪春磕穆扛畅煏�vmg`YVVTVTX^`hgkjjhgb[WNJA@;;:=@FNXet~問灠豪涡抑圯噱珉轲聱�鲺熹鬯阔殏lYH5& )7DN]hv|€�€}zsqida]\]adlt
#=b偆料辛獣~rpp{垯�珐塳J,.[嚥忆蝠闾瘧qQB:;>BHKQWcpsy尀迷招畠smw垷�喵�蛴漦E'":[埊授蟹杚Q.>i摴媚耽廽I.*Cl椇者阖祾a4
€亇|zyune\TOOOVX^chlrx{們唹帒暃、ウЖイ灃媬vmf]WQLLMRRTRROS`r姕�爆┇�ぃ�验��疒篓棅�}xxvyxobK5-DUcjlpproqor|尃�晾藩洂妱個ǐΕⅲ灈搻墐~zwrojkgkikihefeddehhmmsuz}亗亇zxpoig```ahlx~}€剰枴Η�脑忪蝙�����菪脸�攧ykcXRGA4*+4BLXbis}嫃櫄、Ε┆�╥u姀搼媯zslmox~儙悜坺cO<:Hd尩匍嫠�[LRq毱弪愫匧 Bl墳殑cI31;Vr彥耗陆搏Д�棵禄搐拑reWRQW^jrroeWI?;AO_w崬Ε瀷}njmy墯Й�巠k`^_i缕仙式掸à�殝噚mkdaVRIIBF?B:BGXY[PNGLP[fggggejfn`d`o|崪�搷棳掠瓤埠蜜徨瘴狡套遗�拫弽噏fQTJVMJ84&)1/1##H]m]XPd}灚川Θ竿谵滞韭仐犊玫珱洓ǒ焦矚僺u厲湊vXQSkz卽cKGOeqrbQGIVeqkg[\Zcgw帒憖vx啓煔垊柟烫禑棿怎鹫瓩灪延綕剒厪檵乲aRQINV_\G$!RruK"#W惁歬KFi浛矛弡丠BY~潷歿\NYq敧瘺{`Ua~湱�gQQh姢獢sVM\|毃瀱j]e}毇獢wbct摪甫俌;0:_埆攻xK=[溾�町lI]欆�燴3:i浄瓌P,%;c嚇恡N.)Bu�穵Y>P伝茉�JMtB綔lHL/0P埥站嘚4K広�醣e4;u鸿谉S B}Μ媂-0\劅爧mWVk懘嚷�il嫶油猳<'T劚尽e,<呉襦�;O幵�痩BEl⒙罏lB.=]儧檣R*0b樁瓋P4Bv�萤rNRwㄇ弄yL;*&.J\nv嚡���耔屑梸relTD!;q媼|ir彣京厃w倈hRAQm倖mhw�鹞歚I@Tpq媺yTDFm狠旌wDGy陪蕪I%)e毐�jY^x垰Γ泙S2%L€�丂#q奉悚kOp�鄯孿;笣Tm�;W泑此l曥璡et~靖V0娊峮rft獰HFФr^ge兎濦>剺殐jBg钙oSYnv槐^O摤{l|jf枑et�BY悹棎[Htǔ俉H兺狤:灡唥kP嬤�4Z棐�J z�糮H4z�+壪笝]nx榺Z|禌:}窎P儩恠n€暛]qv抾憉宼u亪恟~€u巻a#ZC�昣|墂z◣`Y獁u帞4]虏:K柭kRf翖l9囓�m璜:锲3��\%f銔8n簶Jv彅wr劀x[弻憌厴Ke�`Rs稒v:3?(3W|叆氯拱爳倊剰唓x墠倎儊odcjunsyy}€亝弾wv噽棊墥毀瓫€r剣{aKAUuvjmy垔墖媺儁t垔}噾悐彈媬|挋俲]lrrmjjt墐厲牁墂hbayzw墽兄斧切攙_B 2)8a姇Φ涵�晢z}妶{~寬坿xzvmfeklnsx剝啇拤墣悗嫀搾彅搳亐zuoh^ertpsz倓{{zzss~亄剱憣彈檹噳崊wlmorqpp}媺剨妢nfb]_y摕せ��艽困q_^H%V|\=G^^仾搂崊挄敊�}nw�tqvqidiz~~x|}~剰攱悮檾崚棑媶€|{€倕ucgqyvqmmnmnx{}vx倕~対�亊儏垘晪rv€崌wea_Y^y唫z墳檪樐桩荡拑偙璵^泇F]+ 0v牜既但憙iafga]o摠焾倫槒{bgookhry儓悪枻�槍�|v|倈€厞崏乴lmnia\h{亄vr}亜墢厖審墐€€{~嚀憡|y{rXBQk倠Ю惊煵穮cg<;壞瘇y悯罌晀@R48m挙�谀殎e]jnbNUi寪挒�s|剚xnt|儔憵殮憚}|€|vlnuw|€姀媴xv|厗vv}|~倗~qgmv}€{vy嫅晽湐剆kissea€湤暏旁瓐g:;K[F@p�炒��詴歾".M:"Kw槺懒疄殧剏lUQi厪�|彔潌souytqw{亙姃晼攲媷墎ujmzzuv~剣剗}€倐€剫寖xrvtpdeiw儎倗憼潖噣}qhdg仈拑嫴焉�{RWZ9"DWmム钕缸�毐堿#HM(/Ur垱�檻媶噷煚憮攤xs{€~rehx姀垈wjky唶姃棐悜妬yplkjlw垙憢妼墡憟}{{vqlllorrry増~倈rrps櫘传槨舅瑔YO^qb66OMFOn|壆阼伟��舯袘^$.JB$5Zu姏�晱�啇搰{帵瘺亃|噧rcdijox|{|儖崓搻厊ux{unpz唻嫅枖帇巼~toty€}{€{z|}xmdff^_iw墭�墙焕京峯?=\_NH`tpv倇eY`hn嚥焉甭��戌沠*&FH2*Qt姙按瓲憙ywuoo倵煍垙ò晈c_hidbfjnu€嫆棔崅|亅uv亞剣暆檹噧剝wlt~亊xxrsxteYU]it姟�└疫繘nRbj]50Rr}倧殢妰s\NP\c|�纬��琰�* 7?% Nv尋讣穿槇xxysku垞崌將�{媼x`R^ed^`jx厭枙憮拫倕棢憛厬槒wgpyxop~噭zqbYWYVZk尐�底晟煇yttY:8NbVZ|殲棔檷亂iQAFYev浵涮芬����08OC#(Nv帲贝�檹~~亊~垘乸hy妽mnwwx剤vhaf{墜媼妺暃檴{€妴ypz崟寖噲亄~scRMUh拸€€⌒要搚o|}t`_lkhx嫅xkz崐}唫€剛hMF[o€柡突チ���祪KCYL&&Fo垺驳�湑亀txuw儚寖}亙wfVWcjns|啇湧灅媺搻乶gnw{}倗實彅檹€zuk_\dmv仌�敔捣峲fOTcdYZk嚄'瀷唸俰]fz}剷晫�o[JLXp嵅恋⒓���绹Y7PM3.Lt姏�搐憜wpoomq寢亊嚀憓e^cb^_gw亣彏�棘枊rfghefmx剬敍槄pikmp枴潛「禃唃OT\]NOfw}剨憲灉寊{唽}nv姁厊儖墈n^QINZp嫯帕����諒`#IR;,Fo姉牗�媯|wxww亷攲zs}噮weblqolmu{yy啘�湋棪�rakxvk_am|€~垵�敋裁�uYVc^G>Ncku垥枔悜摉搮ut�nm}帊�亙|q`RLOWh埑种交���隊j)2KB&+Sz悶�珱�nfjlow亜~}噿枎}qruz|wsrqlkt倫敆櫉�憦弜`UQd儫�墵戎磿fbfcF7IZ_et|x}嫄帄噴憵�媨y€~wru~{ssv}~nYLIQd}樃坻勇����菂N!>?,*In厸��€qbZ_ekv儚敆棗殬憛wmhjonjehu剮摋檶~wxwwsl|澝胃┊梁恮Y=Od_NTjmku}}usokq€垑墠枬、瀾亂yrg`cmqt}剤�vk`UVez熎咴肯�饱棄ui]ULG>4-&&&&# $(+0:CNX`it倯牠逗科艳祯�黧铍腚觇滢紫羌菠晪剕voaSD:/+($  '-37<AJQZbhq}嫏Σ咕锰盂忖嶷找幼葸拮吓痉汕恋�€snkkcZLA8/*#  #,1689;@JXempqqt嫏П咕檬于怄腼赭黩柃屎挡爱�寎vrsroeWLGDJPVZ]bfltwvtoot~垚憣噦厪湰辈��裂坂塾饲蓅tuvslc[TQQQOI@5*"!(.5;AEKPW_hqx噵彄晼棖槞灐Ι┄�潩灎ぅЕИ�寂艘刿徜轫蝼���镤塾紊媒传�枔攽寘~yxz厙�xts竟抄�殨巿vkaWNE<2(  "*2;AGLRYcnz厤摋殱ˉì�倒痪炯悍档刀贩幢�Дィ�洍搸妶厔剠唶噭儊€們厙唵噳崜槦ぉ�妇派烫是美緬弸厈qf^VPKFA<5/)#  !(06<AEJPWakw儚洢�壕氯沃捩腠盱腱锺貊黪耢珏汊沐玷玟噘油扰昧谅量几窗�┆�ē�槙搾��攱€ug\SMJGFD?9/%
 )5@KSZ_dkqx倠枲┌逗夯换玖剖吞汕拿钠侨汕坡拷揪苛们送衔似篮挡隘膊嘲�ěИ�蹈构返碑�冀技还唱爾巿儊|vph_VLA4( 
  '.39@HQY_bceipx倞悞摋灗尘翘瓮窝走轳鼷������蜩芪恋�憚wj`YUUVYZ]aeinswz€墥灙彻綒牕�富环钞��床鲍ァ潤晱唥sja[SLE<61-*'!!#$'*07>CIOYds亶棡お焙锰咱掴骐秭����蹴阗闻徊�拝yk`XOHB<7656:<ACGLRW^dipv}厡敋mjhhfc]WOIDB?<:62248>CFFDA@@BDEC@;7558:<;840.-,,,+*(((*-04:@IS]gov{亪彊�彻铰窍诌珈镳蝮鳄������箜孓籽躺敲炕冻渤脖�潛媴個|wrm卾i^SI?5*  %+.149@FLPQPOPSX\abbbbdfghfd`]\]_``adhq{厧枩煟И����殩搻帊帍弿弾彂敇潰Θ�导檬亿噫眢鳄����蜱谖鹿抱瀿吇洞铂�l^TOH@7*$.6763200/-'$)-5?M[iry~€儕憳煡┉步戎泐貅鲵龛庳涂瓫墄kb\XUQOMLMNNNLHFFHKOUZaly姛雌攒噱牝���遒蚁挝伺阑厐}xo_N</'$%%""$$!"&+--*&#!"$%%$"!#%)+-,**,2;DLPSSV^j{崫┍逗狼握仝卣友研邢挝涎栽椅饶履人吞嗜饰诌珈眄觌眈蝌礤苡唐栏�攱厙儉}wnbUI?840+'!"&('$!  !$%'*.4;CKSZ`jt嫋〃�豪铺岩严吞绦又刳圯哜骀驸哔沼蜒矣灾佥怄觌祀腴桎咧堂撼�Б洈崌殩拰俽aQF?;84.%    *7DOWZ[]`eoy亞噯剟噵憰枔憥帒枦灋洏晻枡洑槗弽帎摂敁拻摋殰湝洐殰〃�廊显佘咪轲貘鲵赈苜刂油碌�歬gdb^YRLGDBBA?;60,*))(%

!$&*/4:>@AACEJOSVXZ\biqw}亖儏嫅殺ì�督檬性棕茑骒耵趔蝰蝓�������镩溧壅文汞�槗巼€xpkPNKG@80(#!"#%&'%$&)/6=DGJLNQX^gmqrrpru{€唹妶唭€|wphaYRMFA<868=CIMONNOT\eow|倖寬洟┋椿锰邹彗梃殡盹耵貅�����鲴脬靥颈�悎亁ne\VQP嚷戳�檵乿`WL;@$"  '%4EH]\nt啘ㄎ挽蜷秫赧痃诟�弸ipaA@99B&04'+6EPjw悈敓崬殻泩晑t唞妵€~riohegS\XVtk寬暛冻剖势膊���サ�钳蕊磴钭坡�張vgZTF6$ 
.2:SBONSVZgxz棜Ч琅谪抻耘浇挤钵瓪枙巸wgWWM@HOX[Zigjqt€|倂msgeym€亝€{tm\[XJQLM[Ubmt嚁悾珷煔晲姏洭导裳袖埏���痄陨鲸湐坾ldQ8) &26CCCJMPW\nsz寵�菊淹闻录脚量径椽 弰sWZNGOPW_YZY\`hw~zsoiemyx~�倁plVSLBOIKSUZZ`v}啌潪弻妜~噺牋布恳苠���蜷靥揩ā晵噞iUC*%,-;ECITTS[belx~垵�咳亢谰�吕劳厦净瘽拋hZREJPORTXLR[Yhrpjegadwxz噧剒|uZVTEKMRPT[X[mw€彍潝妳rt{}彅湩�套铊���蝈遗杯Α洐崄tbK<.& #%(47=FSU_hmnvz姖Н饺几蛋Ο蛊厢庹搪瓰憖gYJBDMNYZXPRORZheb`a\fr€墦敀唫qaWXOTWZY]\]cqx厫牃搰~klks{亙崝Ы骤蓰�蜞骗瀿櫇洏攷€yobTE8/+19CHKLNS^iqty|vu亸”俗珊珮噺�冁熨亩ā搟eK?BJRZieZRPHKTcc\TQQdw崪�殞€tf^`[`dgiohgks{嫋�槆{heflw}vxz墹螺痒�渑瀢ci~墠噧|mqsm`ULDIM[_XQNHObmv儏坰n{墰糙胝粺唃p暰葆闶瑹潷殏nQEL]y媽zdG?AS^e_I5$.Vp尀�厐{uggnks~巻儎zwz嫗Т徊恷mgiq崚|n_gw犙���笉dYk€妷墑vhuum_ZLDKTfe\RJDRdn€帋唎m}專彭踝箼}cyQ珈榍�┆搙`F<F^{厎hR1.<LS[R:"3^w暒�墔tmmux償煋悓}}仒Н伎﹥sgcew搱mWNYr���烨沶TWgy儊xmkoj`XMGHS^h`VJGK^m儚棆乼z垹妈�盈妐n惥屮鲡茂�瀮eI:;Sj€|oS7!+8FLL8 :f劄�崋}vpkmx倵ˇ�媮厲ü盘粶|mdfx寣vVFE_幧蝓笾�XLP]mtwngica]THEBH]`bVMHMWj厱殩唭{嫞田��旖檣€幏摞�啄公檲cK;>OertiQ4*!)092((Jv嫓湒噠qkiku垰┈并棊師�谯涩憉mo亷僾ZC@W埣骢铉翇`LBJVks~rmg[PMC?BJSeZSFDI\k厺�坸}€澔纨�靴坴啓娩��芪陇jH=6JbwymX;&/-68;&
 >]啌潤晜xgdeq仒�渤槕挋�坻佣枀sy~拻v\F8Jk┮耦篁菒^429Wz摜渻aI64=BZdptSG5:Rf啞�憇cgn摣昨戾罎卥es炏���屑媑SBPPew€{aM:AEMXT[K4&&Bk挬鲍檟`FFYj槴量爣ln劃赶凼窉儌€憥枠}f@3Bi櫲祗�蹪a;19]~毉�cA2.9ATejpY@63C^}洭�r_Zd仮音�唯坰bh徔���筵茤mRCNRg|�eI26FSb`_T9& ?l暜喊榶]EEVm懇炕�igx柍授媳峾y厰暁檯mD2:_捗铧镟裉瘹啊ē拵弿巭€oxlW\y潒帀儤��啇潟煪显治嫉漂罚棙┧喾Б灳獁{nMNTbz儉]<H?3,%(%5D]R"-ECJ9-)7=[jhueA^q儝皳�唥寛ql卝墡姁擦摅镡惹性珯啈妛ran卭cX>JSVX]k墇]Kb崑{SbXYX]剷枛妕噝唚oqv敍k`x崿巓x{tjr€澂瘲噰媣fZVcnjKQz��u�刾u~€U?^v唓N8Ml俿ux嚄湋|帩焬q摴珮椑��忄桀闼畩灡晅乭SJ.RUC<58BHEOKg[XcckEgO/SfpjKEqaXFYXN_4OoDOZ[y\BirqLh摃�惱癌芒�吵紪彧腺寥若援�棗me恑\U8<>7Poqam{~卽仧咖ü即返��鲟盱鹨同渻摗洅qI?0DNH>2*=6$1Mnr`_o塪N28t乗@)6=0H!%-27 4%LKTY?=IJ^Gbo亯�侵剃黠�睨倌稍聒趄捱馄伽檶懌~aV2#2/A[EIVszrs啽肚莎┟闷��砭坪潳巣q啍帠|SI5[yWHGCYKGPa搖vx媔ROR€wM>)9P1#,9K3&*CFIIM`E&8J^NTk{儠浵苷嵊��羿僦唾弩驽舟辖仁ⅶ槧簴wbGTWC9FTWk€|塼n樁搏殬槚殾湃睛��悑唹寍厜~s]d_XLTP`PPTjw妢噵杧omm€iPMBM<-(+#0('21720CT@-.7K<:Idlq叜记厌怍�鼢铒���镝匦僬铆岛禈噊kZP?BKLHT_nrpy€剠悙媻悙洠�棤潪崁}摌挐�uwcjkkcwokl~姪ガォ槜恱~厖rfdMJ@A,@@@94+<C67=8#0%'%2>Xkf墽�仆唢皴珀��黧骝渥讼问未灟禎妡XRN?1.(:HDPbXQcstq噲乻x垞湕棑洃媹厰�い潩洔憲�彄|}剻�洉墣垇{uwrj[DK/.8,%#2);C8@NCXaifz棪切商茆蝌��鼬�蹴坩踊ⅲ潧檰r寬}m`B?E?6;32<GNSVV^lon}{}亪湡棿寄淌质杏兆卯岛锭攩妵v俧j~俷paXSNNC&*
8_UURbw剒vvz洂敁蚕桴骅辄�煨怦蜮酝赜撩皶啇帠坣gttcO836+*&.545DQToqWV^t厎姇ǚ链谶悠列敲勘洍巿uzm`WI12"(%9")1)&)'G8FKUY~|}eo厯�晸�ˇ�灂姕棎煂挔�-棓Д�いえ煹�~{~搶€br亞ugW]VkbbQTTm\cx唙攬摖脯悼黉橼逃稳帛�搰xuni`PV;3# 
 6QXLYds啠�敺攘ザ捣窍涪甭购☉槙唘lcgokcjnox|tv|{v崗儑媠崝xds|亰|cp儏乶b{ttah[Ul卾啍洟既嚼运哏噤靥挡�檳€tmaVID>6&&  +/;AYbcht}暎ウ�郊共碑��灆湕崁urogZYZ[][[eoppusxz倓寪搾晲挅搲帞棜攬崠槖寛帊崈儐彋オ�灸饰室孕饰似坏�悗剉fZNG?9-$!

'1;JY^nu~倯煪蹈荒履门痉弹┃�搻€~vg^XPOXWOMMWemhomot{亖媽垐悗審悎彋槚憠彉櫃拫悢棈櫇ⅹ坊榔舷哲茏匮侨鹿��拤~rfZOC81(  '5?ITaju厭湩�焊纠寐靖刀鲍�悓亁maZVQNNKILSW_dgims{倖寧彂殰殰灇殶湞殩槦。灆潱ィ┄┎杭盟兄谯坜圩沂驴拨搏�崁vjbWLF=3+! 
!,7AIS^gs~姅櫍�豆患垢贩当��棈厃nid_ZVSTXY\adehinw{倖姁枙摃晿灊湜洕。 煙 灍牐�锤痪氯怂吞扇让凉擦靖獩憤wi\SPE:+$ 
$,.5CMYbly帢殹┋创炒冀档铂�攭僽lf[SRNNURQV]^cjny厠憺〃捕倒冻缓恫���櫁枙悗弿枮灎Θ�汗唤虑饲锹辽露�墍xsqnkfa]XUTQK@1! !-8@GNT[cjorvz}亪挏ク岛玖纳噬啪栋�灅枒弻垇ypkfdcca_\Z[]`eilmoqttustuy}亝垔媿悥洠�北�│К尘窍杂游扇眉椽�枒媯vhZNFB@>9/"
 "&')+-.0369>DIMT^gp|嚀潶�购唤烂迫扰美胶但爾強増垎�{zz}€倎~yrmgb``dhnsx}€儓帟湧�蹈灸商舷吞托已刑荣骀苑攕abr厧弫hWOR[fpqmf_VSXaYG/$8EIJJPRWam{厳�盟严藕倒孪棕滞巳瓶皳vZG717ADGOU`s崵艾�ydTHAK]mv€儓媽垀m_^hs}彚��潟湭噶廊钨 洆�sic^[YUQLGB=94/+)(('$   !)1:BIPYcmuz€剤憳煡�撤杭汗贩辜聊拍吕烂粕滔延栽椅赡炕狗斗兜嘲�Гⅲ┎脚缮坡谰憾矮В垡呛〇乸bYUTSPJB;50./48;;81*! #&)*)*.28>BEGLXj摝澈玖屡峭炎圮仔饶抗蛋�灈洘お狈唤己凡�棃xlb^\^__^]`fq敮溶膂���痣溘煖槗媮uj`ZVUTROJC=71-+)'%! "&*+*))*,.0248BRey嫍潪潩煠�壕揽靠撩哪辆苟吹附盟易圹谧杂右刑偶勃�潩潯Ν醇萌适膳澜苟铂В煓晱墏zpe[RKFA=82,'# 


!%+2:DRanz厤摋洜オ�壕屡人臀瓮耸适宋颜谵怃溻噍谪渍右咸噬墒颂臀闲釉匝问趴旱艾В灆��殥唜j]TNJE?70)%   #*06;@FMU^els|噾湧��Ё�掣患浇窘脊疮─�ⅴ┉辈舶�Δ�煚ⅳ�可易渍蚁窝诱匝糖驴己垢挡�煑拸墏wj\PE:1( 
 #&+2<GOW\afks|儔彆殲ⅵèГ�牎うèЕイぃ�櫀拸帋憰櫄殬棔暁ⅷ�刀妇葡遮谮儋佘哙噢谥倚躺帕翰�寕xqjaVK@5*  

&2<ELQSVXZ]bipv}亜唻摓�琅侨商弦灾晕瓶栋��┄Е 灋)辰莆洲屙斛���黪蝽驵僖唐扛�槓噣xri_UH?70*% 
 '-39@GPW]acdcdefgjpy亪媽媺崜殹Й�陡阜钞�灈槚晹晻枠灔�坊柯妊汆珥蝓���耦扉驿哔疑凉暴��xsnjf`YQIB<61)!
 $1<FOW]aehjlnoopomkjkosutrqqu~唽悢殺�逗赋��洍敀拻敄殹�潦颜剌忤铘������铊噘晕誓疾�枍�崉{toib\TMF@90&

 &,38>FOYajqvwy{~亝嫄敄晹敂棛洑櫂櫅牏ⅱ煕棑憫摂枛棔晹棞ⅸ狈祭菩兮轱痧耱趱鼬鲶痣驵僭纹抗暴牀崝唚ia[YUQKC<5.& !#!!%,7DQ_lw€噹枲┍倒汗贩航撩穆镜�拠~zyyxslcZRMIJOT\aefc_\\akx厬殺┎缴者珙豉�����獒匮伺阑动�敎枑噞oaSIB>?@?<81+'%$$"!!!$&''%!)5BOZbinv亸煬犊门市汆彗驷苷颓梁鲍�攰乿gXI<1,*-/0.(#!,=Rfx垟’啃唠篪�����鲱遘昭似栏癌�噣{unf]TNIFDA=730/158:<<;:84/(  "+4=DINUap€帤ⅷ盎蒲佥壑椅松热坡喊�棓晹悐亁rory倢暃煟�醚茕珑珀秕���钿傩嚷挤皑煐巼k_TH=4+" 
"(+/35777631-)$


!&+19DMXcn{啌潷埠盟于咪桕腚殍遽捋盅糖驴郊苛攀险汆尻矬鼹�����躏栲叵萍宝洂儀kvhYI;0(  $+.27;?>>=>==:6-%!#).///29@HOZhv厪洢�孪纵溟铗趄耜汔哌墼兔交铰扑窝诱刭谳徼腩镳痧蝮蝾玎匾颓匠�搵僾剄[E4+'#%-68:>AB?<:;<>>7*$(##/794.-169>J[n€寳煠�特捩腭鳄�赀刎苒丈罕埠盼宰谯圹卦宰掴珈痿鲼�镦菰型墙療枖攽剴z^C.(,//"!2>C@95:BLOMNMKE=9:;@?8( (0*
$9HKD:42334?Sj}墥枟牤囊卺溏眚蝻菟澜粕姆�’老棕圳圪亚娜颜茜酐���焘孜扰恋�嫈潬挌`E1.6@D:-)1E\lqi]VXakmifc]UJDDEIIA1
"4<5! )CW\VKB=964=Qh|噸崐憽杜萄矣剌拶暖煕ガ�寔嫗材烫挝纤路驳矫无稃��镝质阑钩��尀�潄aG43@OWODALe€摋崀ss|唶€ztlbTLKKOMF4
$7@8# *G_gcYMGA;8@Tl~垗妱墭�闷拍撬糖瘶�姃憜wmy惁孤撩媚粮�┎概兕���枳汤栋�槃ut厸�恥V=+-?Ta\STd~洴钵攨亪憫噡uj_OFCBDA9'
4@9%7Vpxuk\RH=5<Qgy亜€{倱┗铺松卧蕴瘮~s垑€rhu帲椿够航礁��笨蚤�躅庹吐钒�搢jgv崢恥Y@/"7Tfd`h~櫜哪福悎寫巰skaXIA>:=:3# 5C@1#'6Rq嫇悇rdWH;=Oaosurp|帰何苻阡腌酃潈t}剢倂nz彙���返�槥~涝滂彷酝嗣贡�抳aYbr}uT=0(0Ndim|摣幻恋�€€儅k^VOI?=?=?:4,!-?LKE@GXq尅ě瀷{j\MKX^ghfeeu問拔彘琪��食檯媿帋唨嚄��湜煭播檺搻挔�阑竞嚎痉卑⿹ydTSZ^TE4.-%#-G]it啔┋�煈qnngVJEB@=?DGIDAB@>@CKS[[[^gw墱�抄煈€rd`fdgfcbfx啀A茚圄��耘皾灈洕枒挏牁枓憪敜獰拝�|剫枤棞湣┆Βあ�p_UQPE:,**$!(=Scr厴。牁憜wjdc\LB>>ACHPVXTQTWY[]`cginu~嫏Ξ撤董�噟y|tsoigm€妺澔纵茯��质功�·煔棞湈媷厓啒��{uqux亊倓寱棔敇構}qaRID:;/,*%&+<P_l~摓灉槗噛lfe`RHABFGLV^`[XY[_`^`bfglu亷潽卜患惮�悙攲�wv~摏枼幂噗���兔睕湗棟檿挊檳儊亖嚋�晜vjfhghjfefq}儍唽寗{rcVLE;LC?<:=?GS_fw悾ぁ�坹mhgdWI<;===HTUNFBAGKIKS\\`n儞ɑ娜仕沤恫�帆�噲敪钵蔽殄荏�筅话殌儌儚拻摓�妿摌〖兔瘨u\WXQHG?83>OY\fryz{zpi`WLkjkmqyxrnmm|浀还怀杽|wtrdQ;//& ,*")?UX^t槹输痫玑窒舷赏衣⿳剷�&磊夏揸芸潛}`jlj}垘摙睕崣〃氛栀漂僜XZM;;1 )+8JYhx剣媶uk摌洖М�寔x|挭隘勃憛倎亐xhUKH<++0) (0G\afz毑殊赇滞每纳魄确瀮w{啎棃啌牀帨�寃vjX`eft噷毇潚湥ū判慕硰ploeUVO;-*+)&0?Ocz彊ⅱ棑�菇窍瓢殘zx垶ぃ�僿wwxzviZROC426/ %.ATW\p懍呸獒胰揽窍醒锌�y{儗巵|€唥u}儈pab]OW]^kv€姎暴牞锤刻郧每渰vxlXYUA3+( #3D]}枾炊�槧А「糖榎Nh€搸棩矟憵殶揼DOqvdDTv刡OLUuc+ .JSUq幖钎~Takyw厹��裟�牆憐屍枵走煽�gOD]u嚛�敠紡WOP??bt|彍yFF\aFSRQSScl^cxqgz⒉畾崢煈t剼牃哫DC@Fj溌匹vzΩ簯mTv呈揑8l揨=/HlyR-=faGW姫�GPo崗寧碘槎~b{捞漥囑��Xf毦碂nJfzzo[c嫗珮洟憆\s敤来e(=ai[ap寭儂l?7]€櫈洠俺�牏槙様巬ngegny墴凹�〕酣巐v唫sYObq]I12=D6*,6;AHP[hjZS\m剰悤煥犯�敒0桓箩��旨按疮渿敡�晬洦◤yrxx}{fVhs[?65>@FGIO_if_cuvx~厞垖悹摕攲儉€俽ccs亪彎钢抻售殪辕í�sacplU<30:30,&!"(6FJGGO]hmw儝.�こ量久镶聩�箅萆番背�煒拠剳拝oou~{rmW8,.' +59-0>NNPT]ah{€儕巬t亾嚍攼乴wznXKan€媴κ彳且珂爻�瀸kZXgm`NGDNMSQ=(#&%-AKKQbspnv啅洟湕�贩捕琳泐��鲩彰碑�晱妼嫀帀乼z唲tkqa8!#7GDAI]_\Zgu{~sv儘弤q|噖寚僸[drpQEWmy|s暳嶂磕殛乇�渿p`ZnzqYKDPXdeP52878ESWZp億s|崡煙晳〖绦拭无潢��麝庑赖�潝妶彂拪oqz|lji`< ,=85>X^YTau�jjt儈uitw厰媯nS`upTObt儌z炋桎驼雉枘�煇k\l儂aH:G[loW93<::BMNRj亂hs嚃�墕櫣炎星砚邈��蹼嵬勾勃枅€倠寠厃fhspe`]T6
#50(6R_]Uay寛mjx垎spw厑櫁宺MTxvXG^z厓t幟瘃云犏袷瑺煆yl^t倈dQDN]lseH:A<<BTWYl倈mv嚀檾倐惎脱苹刨盅屮疰诼�━憖tw厛唩v^`rqj\WT:
(71-9_ojbq厴憏u{唹y{|丩zsT<:}卥hR1">Ku懛皰r��kotkd啑竞榝[Yy拲噡y倿洃垍}懡苑牤藩烤恞.x犯讷拞溰�寰瑐e偯晡漧Vb|⒈焃Lf嫪景慠2RV`cA<B|嫄wxhcit帥塖7E8L"/PslC#5Su摗煋oP5*-=Tj~帬�pM7<Rs柉恳桄臈zy嫑牚儡豉锿潁}倯湯替聆耒械�潰澄沌渥罓厁ri`l姫冀畳fE7;ADVt憽殟uW8.3:?Kf亪z[@ ,@Yu唩hC$!3X儧槂eF,"2Kh儝棎}[7'3Sr帾掠粤焳hfq~姖句翮桑僶qs|惏裒��捉�晻⒒醉躜芊恮ppov嫪滤票攔YPOWk尓汗◤rVA:<DSg崐|^8 '7Pn唺tP/%0D_y剉Y:#/Icy亁eM8,0B[t崶肪矓tb`hv厰�矣郡妝qt~帴逆�襻痰アū雷���税棄垑垝�垡饥寁gel|暠魄範噈UHHSan~帎€cC*/8CSeqsfO4.:BQamiT6'0<IYfaN7& &9Mbs啒灅俬VT`p寶�静泤vv崰恢眦钶撇┆尘朴屮�褡恭煙&�羞芴耽搳垕挓猜攘異wf`cjov€寫坢P8/-/KV]djkbP8%"0@MQUWUH4 ,6?FLLA,'>P^jw€倄cOHObx墦洠�搥ojr儝Ц韶彐倌豹熬唾泐鼯钯庐Λ仿恃籴阕陋檿湬彻狼躺埂坹sw厛彅晩uXA56@KalrpmcQ>,#%3EW`a\SH5 0?DD>82$
2J^hmqldWHAFUk儜棖搳rd^dw挏忱刃铀憨牕固囔螋箅谂敞�窃萼挹阅玻湣懊险自信皹億亷湤�棈zbJ<;ETarvqeXI9/*-8HW`_VG7( '8=90' '@T_b_XMC=<AQex噺崊{mb\Zar崷猜扇趴东か咀膣��朕渭炊裂哏殇偬莱�熬蛙邋咴裙�悤煬潮�媨fUGDL[krqofXJ<1/3=HRYYO=( $186* *;IQPNHC:57?M`oy€€xlaZ[cmz専�脊嘲��皆轼��幺蚊颗雄潢扉扌赂渤臼揍玷哂蔷氮!┎阜癄弣n_YW_iqsqj`UH?99?EKPROI;*&)& !0<CD@<8658AMZfmppkbYVXamy啍ⅸ爱─オ备谜犄�熹苷形眼屐镲赆丈侣峭洲骐脘姿录苟蹈纠急�僾mfcfmsvrjaWNFCCFJLOOJC8+   (03775435:AJRZ`a`^YVVZ`ht~垝殯!煛О蝗帚铗痣溥圪谳徼眍龛嶙问氏折徭殓廑阉颇妹排木胆泹亂urstttqka^YTQQPOMIFA<5-&  
 #%'*,16<AFJLNOOPQSX^fmsz€唽悩潱�可于徨珑珂珑殪铒镲黻遽掭葸徜驽驽廪谥友邢蜕媒懂�攷墔�zvqlf^kgd`]ZVPKGB>93-($  !$(,03579=@CGJMQU\_ekry亪挊々惫狼鸵剌徜玳腱眄盱祉眄铑铒镲镲眍铐腓驺噍匾颓粱弹�潡憢唨{vspkv憇g壃妚]�墕晳bkw]_F8/4P$71@%?''"-/+"%9amb^ZQhgRnbOFJ\VPq~vO堑桑廊翱叫苠昭��蔗谀值劂牒祝茅瓬鹊亣伂晙墛v剰Kvgid們m寽|€嚑寠xvlM][_dQUKoTDJAA22O6%-!A! 4.) +C^^DHEd灑東g倞0畳r挘枊厲�媿洓櫜瓚崯� ⒆�萋�易镯艺结瓮绥细�拇煘煥超焲攬崚€噛gisikup[YVlZ7SO><9IMS4<1'*%'4),,)0!%.@2:4B[u|bRQq屡矕|挬莆腔毜屠殨�茁zu儢韭瀦仏�檻矽镥骗期梓暝腿抻钟逅谴�睏憰�摀z{ow�rZ^EEUbdL.0EZ9:D3('5;5'E;"!.+&/+-55,),9I:P?Hk帒r_b咩业敡倪遴俅吗蕞暯铖賵d€惻知{€〃帥壍腼峤潽���亟眠塾韶冀钵�彃枙sz€njbbriPF`C2@PP;!%A9%/<4+*.47=OF3-*(5>99*)5>B><?MQM`WTr殶nt撴煦迎�祉桤遗镩紴匡�孹u兊散sx煈y殔欂缰瓕栃�镤未狄涨虑�疂殤垑垀bakbcaVYXMMXI7:EH<))1%!./+'%,9GVO?5-)7D@8(!.7?IHDGTYWee`t煫憕儳臌�士����遵��忑鍟Ujy浄漦o拑l噧嚶湟▍愄�蜾曳蓖幽量��帄剝oRKRTZYKCFKPUJ:16;:-#&4=>937DR`_RC;:CLLE;8>HOVXTV^dgmomy枿�挮仵�智羽��贽骖俜此芪瀓cq倴恠hyzlqw~⑵猫彂羔庠某�拦铂牅潝厎~}yhPFJRYXPGELX[SF947<:3(.>EC<;CRacXJ><CJLJC>DLS[`_`dkostv倷�Γ痴颃踱诱琦�鲳觏疸歉克偏}jn{妺{kntpmnv挻堪灉秤咧堑�返�潡棊srsoaN@@KVXRHBEPWRF5))042' "-8@HMOMHB:4-(&%%(.7@HNU\bgkot{儘槩�朗显肿鬃衷姨强翻�噥}{zvy}亜儊}|~倝挕磁逸琊鲼躜礴彷儆膛椒�棆vnhcabfjmprtrme[N@2$ &;N^n}垙巻zk[K;.&"&.8CLT^jsxsja[[bjqw~嚂1铰镜�{cQC9.$"Ai摥颗室坫玑泻��醚鬃刿徭腠檗雅钩��枊€wtttrprv|亯悩灎潝噒bO?1"NDFSew啍~哺覆�媤dRIFKT^ejnv亴晻寍j][dt倣摍’啃圳颧{Q3''*%U柹溏苄桃苘洽uQ>ASgtvurtz啎煗拋sllt}厛唨}厞崓媹儉亞帟殰槕�xqle[Nuqnkgda^\YXWVUUUUVWXYZ\]^_`___^\ZWUQMJEA=841.+)'&''*-05;BJS\fp|垟煫读苏萱眚鼷�����耠遛紫壤共�潣搹媹厓倎亖們剠唸垑妸妸墖唲�|yu|wqlhc_[XVTSSSTVX[^beimpsuwyzzyxurnic]WPHA:3-'"!&-5?IUan{墫ぐ缴赞顼貔�����铉嘭吓汲�殦寙倊{ywwxy{}€儑妿憯棛洔湜殬晸弸唩|亖亐€~|ywspmifc`^]\\\]_behlptwz}}~}{xsme^ULB8.%

 *6EUev垯┕勺忪酊����螂阙衅汲�洉弻墖唵噲妼帎憮摂敁搼悗寜噮儊€~~~~€仜棆znjnx亣厏unigeca_adimmkgfku€妽噟oggmvzwjWA0# "" #4Nm姞��非垲���镩滢滞没侗�枈�儖憭崈yuz嚃え�巹€亝墠彂憦妬ukfjv啎洅'潒{sv€嫆拲�zvqi`YX]gorlbXV]l{儊tcVPU_ff\J7&)241**5Nr棿钠良旧垲���痍遘新栋�窗�噦啌々�巹剭湬�瀼剕zywuux}儎~rbWWcz拸瓜说檰儛さ交钵灁坴aOFKYhmcK2"#6RipbJ0#):P]]N9% %:LQF12^暷哚泻�磊瘕��镪嵋辣�迷垡剑敄�茚庸煈摚独将抺i_XQJGKWgsscI1)9^弰2瑯噮暠韧綘剋~悷瀴hJ=EZmqbH1*8SltgN70<ShkZ< 2FI: 3Q`[LAF`埆窘�す脔�筚粮仑腠诨爼煼搜茅搷湻现僧枎槷懒瓕n_dv唵rT90<Wpyq]LMb剙挗擦拓噫觋桢咦兔脯爼媯zsnjgfghikmopqpnkf`YPG<2( 
*9J[n倳Ч寿屣鼽���蜿嶝兔汞�殨搼悙憮晽櫄殬枓寘}ti^RF;1(  )3@O_o€仏�羞膈����礅杖公湉儁qkgffimsy€垘敇殮檿弳|pcTE7)
 "2DWl仏�羞膈����礅杖公湉儁qkgffimsy€垘敇殯檿弳|pcTF7)
 "2DWl亄暓�┉佳潇嬲链贝赋�xmny厞倀e_dr厐re_er|~r\E616;9.
(>NRPNUh優惫付继怫��资忍型涧拡墧牓瀼€z寵煓媫v{噾憛nVE@CGD7%+@NRNKPa{t挩吵�坾w|垬П超瀶ucUOOT^irxyvmcVLECGP\googXA)-APVRH;0.8Nn摰毅桠丈谰乓泸�鲦鸦�弾摏Ο刀超�帀墢櫐郴降�t]LFITdr{zq_J9/1?Xtu師�噉WHENby彏�晢ypmqy儘摃攺�ti]RICBEKRVTL<)2NcopeTC:=Nl惐腾谖憨灍�贞鼯襻凸�ⅴ�膊�牀巺}vqpt}墪灐湋乷a\bq啘�〇{aMEK]uy⒐浮}ZD=EUgw剳殶泹ydZ^q姛�拋uty|vfO:28I\faO4
%9Odrp`D+!/W尶沩嗯珱毀和揠觖�廾�敓猜萍〝垎嫄巵o`]i仜��xidgoz啎Ф话杙K57Qy~蔽湿{S=>Odw亣帡、槃m_at帬煁kOFRm啅€a>'%4JXTA& -C^u{lL) K娖铛薰槉懅琳忾瘌��亟�妒卦紮|q|棻及搕acw懁�j`aipv{剸�耿xJ,,K~喐综牵€h`cjprtx€垔乹]PQ`v墣坵hdp厵�刴_^jx~uaF/" $*/28CQ\[M4%Q嵢��蜃华Ξ咐媚韧严卢拃z剶ⅳ梼qlv嫚�搧w|崱�渾sjkrz~亝崠湑^=,3U� !"$%&()*,-/0134679:<=?@BCEFHIKLNPQSTVXY[]^`bceghjlnoqsuwxz|~€們厙墜崗憮晽櫄湠牏ぇ┇�背捣够嚼履迫释涎诱刳苻徙彖觎铖篚���€��������������������������������������������������������������� &,27=CHMRW\`dhloruxz|~€亖倎亐~|zxurolhd`\WRMHC=72,& �痍漭籽唐阑侗��洍攽帇墖厔儌倐倐儎厙墜帒敆洘'�痘榔萄纵潢瘀�€€€€€€€€鞍鞍鞍鞍谮谮谮谮貂貂貂貂��������貂貂貂貂谮谮谮谮鞍鞍鞍鞍€€€€€€€€OOOOOOOO%%%%%%%%














%%%%%%%%OOOOOOOO€唽挊灔�都疗诵遮掴骊眇篚���������躞痦赕廪谡兴屏级蔼�槖寙€ysmgaZUOIC>94/*%!

!%*/49>CIOUZagmsy€€€€€亙剣墠憰殸Ν澈律凶掬觑豇������镪滢仔陕撼�牃晳崏噭儊€€€€€~|{xvrnje_YRLE=6/(!  !(/6=ELRY_ejnrvx{|~€€€€€€€€€亖倓唹崙枩*不奶辙骓篪����礞拚棠徊�湒憤墕剛亖€€€€€€€€~~}{yvrnic\UMD;3*!  !*3;DMU\cinrvy{}~~€  $(-159=AEIMQUY]aeimquy}倖妿挅殲ⅵ�捕壕缕饰易圻沌腼篦����箫腌氵圩椅势戮憾伯��殩拵妴倉yuqmiea]YUQMIEA=951-($   "%(*-0369<?BEHKNQUX[_bfimptw{儐妿挅殲ⅵ�捕豢萌萄遮捭珈聃�� "%(*-0369<?BEHKNQUX[_bfimptw{儐妿挅殲ⅵ�捕豢萌萄遮捭珈聃������������������������������������������������������������������ &2>IS]fmtz~亙剝亊ztmf]SI>2& �嵴删椽�搸墕剟剢墡摎—淳烧犷� &2>IS]fmtz~亙剝亊ztmf]SI>2& �嵴删椽�搸墕剟剢墡摎—淳烧犷�€€€€鞍鞍谮谮貂貂����貂貂谮谮鞍鞍€€€€OOOO%%%%






%%%%OOOO€€€€鞍鞍谮谮貂貂����貂貂谮谮鞍鞍€€€€OOOO%%%%






%%%%OOOO€€寴グ计汹怅瘐�����痍廒衅及�寑sgZOC9/%

%/9COZgs€寴グ计汹怅瘐�����痍廒衅及�寑sgZOC9/%

%/9COZgs€€€€儑崟牠荷卒秫���镤咨涵爼崌儉€€|xrj_RE6((6ER_jrx|€€€儑崟牠荷卒秫���镤咨涵爼崌儉€€|xrj_RE6((6ER_jrx|€€€€€亗啀枺材真簏��嬲牟�崋倎€€€€~}yri\M;*  *;M\iry}~€€€€亗啀枺材真簏��嬲牟�崋倎€€€€~}yri\M;*  *;M\iry}~€ (19AIQYaiqy倞挌ⅹ埠率役汶篼�黠邕孜凭懂�枎唥ume]UME=5-$  (19AIQYaiqy倞挌ⅹ埠率役汶篼�黠邕孜凭懂�枎唥ume]UME=5-$ znbTG;1'
#*18@HMQUX[]^]ZVRMHC=7/)"%-7@M[iw嚀�忌榆屙豉����躜铊嘀仙媒弹��·ェ�醇氖性籴珀祉祆殒巅忧话�妟卽dTF7*

+7DSbp帨Р寂释衔唐糠�晧zl]OB6," (2?N]m}崬�俗沆簌���綮阖司療悅tfXMC;40/037?HS_m{垥2渴盂忡觌殒咧塘触枀{n_OB5* *5?M\iv厱牚淳那适糖媒但牀寏pbVKB;4.+*,/3;DP]kz墪ご镣揍犟���躅遒夏锭檵}n`UJ@944446;CMXcny儛煫导寥我乙兴没钵槈{:>6%
;PSUh{~懗灸疼汔蒌蝰耧柁佥靥喊�煙潖噰崗寫枱サ菩诵怆铈屐秕�镢捋徒当�垀mQA8/$ ,..02?N\`YUXgigkstljicN=:Yhg\_jvrottru儑{叆憾Г�櫗坭驵哕招亻邂茏咸似巩补倡�憣摕牀悑媻櫑�洷篮�媼棫��zndgrsh`\N6+'&()+7/*?=5,"'.<E@;@OUQU\c^borbVYLLE@L\onhg_\VV^c€5﹥Z;&*R幃皸yaaix妱厑寯�jX]w挆卙MCRr枼湇{}倱Ο镀���硵彮殷�懈ァ�娜噬海弫}應咕漡=/O儷瑪hB2,:DBBCR^[[LB9:KWZVL|€xtoh[K;0--5CQhvxlQ/%47.$").5./+0-' '=LMG@DP_npeZPUbu墱�阼暾捆潷挥骊脲徙轸��尜膛秦睇�鹪颈核窒剑強崠潰И��俻_VYakx|傲饶禐僥L928EZq厲灈峺bN<1++,./18AKQWSOE9+ $5DP\hnoj^RGCHUi摟放是抚拝€剱煭磺腺噱滢崖�櫂牤列葸傧露瑹憞€亯摖�腹恫�媧lehr剼巴桉缧皫iH30<Ro崳澈东檰xeRB<6322:CO\fe_O>) #6EWm儎p^OJMXk倵�剖垃東kegp専奔扔谧朔�zoq}惂核仙吉殞|leht啑こ济屏涵湁whbjx懐秃茕泻�卍QZj€⒓绿滓煽澈獉kmh_VF:5=PVNO;# V\!KaU]惌�巩湀寫寴ǐ�咎窎{ZFN]fkku儊仏�棆tbXGJT\u嚃棃wgcxzbVZi対櫖隘翰�寕zoin{姏簵��げ长枿埠怛谫筢臻冁屺洟爲僱?/1;B4=60ɡV$O|槃t�Κ世氨坏(�媢€恥[L75E[`RIEKF;Wof[g[DNB8@@LLj_;S>9y妚lv{柉挀搳枏寧|剰噦亙亊椗赢谯劫傩勒依忮恋饫欇硽紣wu{[PN''$ &`m;<YIgzTt況}�埐磱ǹ湤陇熃瑮湢枍灋償唦搙€寕ls}I\n>:aLwSwCj_OFobH宷^yzyp~塼v湌劑З┡真蔑跷秕滠镦斟栌昏蛽浜娋瀬x~bJP8)# 08(;&8J-B\;Lk[R剛Y帰y姼湈悍潷氓暶瑡繜尪摂�倐�d揰A唌媕圴gWN9kd,yqJptjlt坿z�徑腹谜Р椡緙窝�唯┦茮偱篤亍o缹檕q€S>d3%<GZ2&]G卋1eg\_\lm)w}6e�T痽q嫙攊驴l徺ln褈|纻h蓻兤絳r讙Z螙1蒙A眜L僙�b�m琿WrxjN}jv唊垞抰�}}�丩澢問聖f‘ZM惂#�A杋盬]狤1�?B`~�?@昉簱]崠厠嚈�ィ*幏Pu衈垬s甂怪G€鉍L蘡z碽K菬b绽ZP瀣K鼙0锈冋6�|塉荺W聓^邪<t檤<q€爈b爏奊絵strmf`ZSJC><<<92+$
 "(/589::<?IT^ejloprz儘棢┋卑辈肪葡周噌噜徜桧篪�黥蝠矧鼯�痖氵苴圯咻痔潞抄���拠|vs洕潫ⅸ胺购夯祭徘坡竞洞吹抄�崋€}wncYNC;51/*#&3BPYago~摟仿搜众怅酎��铋殚桡厥化�槕唞j\RMJHE>6.)()/7=@>;<BKVckoprv}啅棝唦xtrqpnhb]ZZ\\ZWROMLLNONJC>:9875/("  #/;FNU]gw垰ū毫认阡铛鼯�����耖遽噢谥星炕汉焊抄┃З��ǎ、ェД灆晸搾憤唴}wutssuy}~~{vm`PB:67:<=@CEEDEGIIFB<71+%$'-244320-)%$Bj椏蓠���孳渍种踪苻掭圳儇招瓤沟帛�辜究懒晾揽靠徊�悐唭剣嫀彁悘帉厖倊€厞墘帠湠煙檶|nhhlqssuy|}剨帍憭巹vi_[_fjif`XOHEA8/)# 3`摽唪��湄仙媒换桓勃ァ灋煙殠~ohfhkpw}亜噴寣妸崙憢~pfabdiptwy}亙剠厎攩煾榒Uu�姶剩Y# J偀嘳\€巋CNkj^y墩綇hH6M嚢瓡€_3"A`J%b巶cQ7 F扮倌弦�i┽鄞Ь讶瑢kRV|�緳e71Y垰暆炒梶劀�i{�邰\?Ofs壄硡RVz`Z}k湑~敻�G_wt}8扚=w弍BEoyK&;^T>a�畇O6"3qΗ媜K(T@Q攷_A2Gㄢ谌遮�h��衾池翡練wY_懮菹矂J2[〗�旁祶摰箶u嚲铑秐L]w倱毒奒M~哢>kg攼w洅aAM^^`x卛2
+S`F%(GK' ;07w攖E-IvydO6D: G倓]D?85X櫯萍韧獄€蔓笫缅�腋焿惞羼逭笂p幧阈青褓饭载篃�蝰蕱{剸湥咕昦a噷_Dgn垊ppz[DFNLKUYG& 49(%& ?O<! *FJ@5( !:7!Emq\OQRTh帿�芳珤樎玟翁漉镛心箍袤�磉某溺麟潋�谫栝峙奢盱侄&��笧}z弿p\nx}wlghcWKHF@<<:1#  


"&%$" *5959IY_\\`eku啍洘Λ��托滔阡邂噙葆膈��铋铢�鼷�耧耧栲哜溻靥驴竞洞挨枓晳倂xxuqmigda][YVSPOMJGEDB?=:8641/-+(%"  (1:BKU_jw剱湨昂率盂汩铗鳅�����箴扉驺哕自盐巳颇辆郊己返潮�Г牃晳崍倈xuvxyyxwurpnmlkjiiijkjigdb`][XUROKGC=6.%  ")/7@L]r嚉�率凶葶桧聃����麴黹遴僖誓谰己恫��潥枔憫挃棛殯洑槙拲垉zwuuu€墡弾妳€}}亝妿憮棜灍灇晱妵�|yyxvpfYK>3*#  #()&" '=a嫲速圪照剞滂腼觖���铄葚犹脸�悗彂悓唦xtpmgb_`bflqw|亜厔倊xsnkilus値拹崐噮唹帒摋殲ⅵ�á檻寜垏垑垎€vi[OFA>;6.%"('N屌忐�咦邹彖珂珀眄脲坌敲吕徊�寗亐~{wrnjd]VSSW\cjosvy|€亐{skebgst儙弶剝厜彅晲寢嫀挅殮枏墑亖剦帍寗xk_WUVY]bd`YTRRPKE>5/18<7(J娗���智萌屯平恫隘��殱)��檶亃vuwz{xuqlfbbfmtz{zustz亜倇skfhtm償棛/爆�攤z亃ty~{倰煠Й�灃�m^VRNHJXhopx姍�l`SC=AB4 

=幷蝌铎崽玖让睙巣jhy嫃嫄4冬�珰唞reWTY\Y[iz€{w|剨媽妬qc^]XSXfokdmm償殻杜幕传晍qwyohnspn~櫖捕究搐洃乲[TOG>@Skwy劇悍檤n`L@CB/1愨�轲暌纠暮�~aGGb~唲帺究箔爱殐um^JAGNMOc帄儑憯拻拠pZPLC<E^omemRPQRVY]_acdeedc`^^_bhqx}~|xuuutw{€厠彃拸墍ui]SMFB<72.)%!)8Oo挷毋秣�黩脬茉文含煆}kZMC=9:;>CLUcp~寶ǖ恼弩���豚优订殠儂rkf`[VRLR[^]YRKKNSY_afls儚槦ⅱ煔拰儂qd[ZZYYTQNMQX_dfedccb_VOF>:;=CIKOZi厺袄乔伤涡腥勘�湙潧搵儃wunhZH?<>O_m}姇ス五觞��篁钿跃�€vj`[RJJL[]feYL:'$$%.0-07Cd€棸矫讼奄尤建攺墔剋i_UT_gnqh\SMMPF<0 (9LR[ix柕剔溱找显匚卤殣弻暃拪乼rqhaQ5",4@KOd倿沏瘌����钤僵枔寑|m\Z[xt{xh[E-'# :Ys挙�讨骊驿张爬浇盃搮}儐唭t`REAB7, #;HWjz櫣绣磴苴召噘侠�槓暁崈xhde]YO4! "()=Yu澔扔盅剽溏阈碌┇�煈~{x枏悗倄hWTUTXSC;9@]{暟榔弦阎夏龚棖晻槒�vmppolaRHDHQLA1 *9Nb叓舍礤徕漤�耒尤路贩�唖npnqn\N@/++"2Kl倝崑厜憯洖棔棜�讣睜湒�攼妷唭嫍々�噥啙凳萱珏抻谴潌n[WVX[[\__XVPIC:1/7J]c_O6  .C[ι忭殒桧����驵盅烁�worx剭崍}naUA0 ,@LJC>9:=?DIMVey棸壳霉宝�媶噸暊财黉庵壤囊泸���嬲舰刢F1(%'*1<GOKC7, -IdsuiT=($2D^€ド忪腴腭鲽黪篁痣遛涌�vmp|帯�瑹巣aG-')! $:Z仯既让俯畾寘厞挓澄琏鲨资捎怵��嵛稓}_G6-'%%+7ENKA/=\qxp[D-(=]啺最黧耋���趔痦殂夜焿}}厲┑腐爧tW<! &&
*Lu櫟铺煽��厐儘灦语��峙狼余栝阒陌殕wmhe`WKB>CMURJ9( =[s€~q]H4'&<`尨肄芤涛揍邈菰团撩室尤礉坿嫑ǐ�z_C+.?JG9' %2Fb~浀窍晒暖槇~}厴从���虾俺计屯聘�{qt亾ⅳ殗ra[Z\ZULC;61/7G]u啂墋lVA- $:a彸屏皺崕櫓倒掸梾}亽�嗣瑤xmq}墠坹cJ3"'<Zr~xdJ6-.6@HNQQQQVbz毟脱琶瑩倃rs倻寡徭芴媚市黉暹用瓟亄}倛�n_TOLOW]]bike__cgoxxpeU=$Dw牶痉�煬耗巳禋乼px嫗�寊kcjz寲洏塹\LCBM`jjaP5$0?Q]afmv懍眯厦煀tid`\e{悷�侣蓉忄徵孥温瘬{nha]][TSX[[bt倝敘�崊zi`^SE;0 =l惄房沟喝舷鲜硳thaaiy~yvxyy剺�柯禍噝l]Y[TG=4" 1>Sk{~厭潯С憾瓱weSOSSLQaow啛�顽箨噙偃嫉�qbWI??BFRguz儣ō改懦�乪RG6# $En嫙裁魄污偎慕�md\UWaddl}嫈セ恃佥系�卨]TB," 5MZm厲棟�侗报槅whvwl]C*6[}櫌潝崣氰贽疲妴暙�qO5:Ol厜倅ir熍粥酞峽創刴T#"3,&a惔幕�∨揶止嘷O]w厓zbP^偉渴露�烧傻昲B9AMNB2Fu暍灀儏┨窒祶pchr�殅G'>e敼珗iNZ摷世嶿JNx�獖T<Qo犇皭rN^毮嚆皚cX|�梥- 7f卪K #[尲紮}fnㄒ苜╥OKk8珤dF]啽帐�hl浖粮咼.*EsoW,1g澢谩別k熑赜�WUr偸湛歅.Nrパ畊K.q槷�*(f材紱WEh嚹烀慻5L捈咻昢KE~们笉:!=]灷榢-'X壙畒]AM毸圯焃NR|勤磨d@a叞睾}V18zコ瞭4&)P暏憇9J~疯訚wMU敿形廡MS俍R:ANH]対灡矙毌��€w嫈棯�trej厙xxc88U[p┓搹焹{褂�汥*/Ii* )%{凹骒樊饥б缹|Y;FW倝qt€偊蒡��墉潓v乚B6%CSx湠煵侥再晒爔b]PLZlYGZZFWojx枖帴��灃&ǔ⿰raNOaf_[L4-<Sp暜厂棐棡绷珋[+ #,?N1!8V撊州值煣┆翻俓A'$Im~憶巸彛洁鼢枞�剗儈gZS:3C?;]y~槺�啪妒隆湐nal寑i`R5")>Xm|儉崯└撬善海妐_PA:1 8Xp挱疮瀼摐�遥sP%1N_lP/Z樎召紭棬堆叨vP5$9b|憵俠cv彿帏�皼灉7磽t]E3+/Kr剝剮澀菊铐一�噷啊弮pbenqoi\PMXj|姄敁棧�珶噈]O@99-/Ux寱晩儙�油皝R98COVK) 4j⒗绕锭�蔗俑圽=5D^s~zh[ax炐���钳�朝�gXX_kyzssy厫櫍�挌湞�瑩俿ZRWW^mjaingmxm\^ei|摉悗妵彇搵zT3$*DGDJA8Rz柗痔獡ns€|kO# $W儛棦槝睫琏魅槅nYhzqieSKb偄舒腚缱脱忻抚僩`ZZoxjksip枻》力湯��洉彂媬{€剝�o`baX\_OOdjs憸櫙户+槆eJLA$';43L\b€ⅹ合枚莱搼坉XJ%-B##XS<u泲侧室�甯凯}vnD?S:#Hli|/慧站糟坎罏x}sXj€ut}pr唨v嫇}vyv嫑�z~|mcd\TWSDDJBF[]Udl^fweWlhD:7%"*4)?bZTq{nw~sz€cR]Q>KPEYn`f噰叏冬孪扯永ケ珡挄~啠檸�壳谲瑛脎庾汉廉┐���煤饺袱┇殠崌~|仏⿺�the[Y^USkpYamL6F?#*7"  ,"(::-FWIUl]TjgWepjx垊寪~晲嵁辑加母恃苏噘烫世闹嘭诌氵怵絷骘痂�����找暖ァ媝gaJGgx{杻smzrdlrijcG8<0(?J7<K<8YfasfUO;()& !:NWcmmq儕墥巔_ZD9JNI\f]h|儢骨仍粤厩桨厂墏噝{槪牳腿襄腩��疸咏巢┆抱湨�笔抢紊�籂彏恞v儙巼znaXUTQI?5/,*(" !" "$+7CQ^eggc`dhmqqoljlt~姌ⅶ�房试儇韵让湃释问商榆骝�����镤治退送团焦犯铰鹿�棌帋晽拡wg[VWTI@?;9??/ %)'"*5;?:)"-670)(+4H_kpslchu姂弮umow剶灈棗棞扒载叵梁酒艘忧覆泊酪哚捋衷垭貂蜷月谅缕删珷殩湰洞�枊帓悗崓妳€zn\L=5453-!   +4431-,26;<720,0<HS`ccjpv創櫇湐帉帟洓潪槙潹绰萄有涎蛰溻苷嗣烂上矣兴椭捩蝓镨嶝照油殴珴枛棛湞槗抷yvuyzyzyumbYRH?9.$! %-358<CKPSTOGEECJTUV]`cn}垥牑Εえ���灊潰�泛撩且圻沔丬子严吞抢冀苛擞肇苴宗壑彝酶�殥寜億y湜憞亄uuwreWI:1.,(('! &/6840037BLNLMIEN\ep€剙倗姁湦イ牄棗湧┃�ウ澈饺烟人巳陀友膛辆九适我倘嫌屹彳杂土柯痉蛋�殭槝湥槉儏�yq`L@;7793%  -50&#&*6KWUTUPO]ny倝儀x}剱湣潟彁憲Т窗蔼+狡氏屠壕缕险宜目久唾苷严侨哲佥芡旅昧任冉弹�掣唱�洆噡xnfhg]UNC841-)'% 
 $+,.5;:<GORX`_]bghmw}~€儑噵敋洜ア灓┅�疮�创宦亮妹滥饰舷邢瞧拖萄酝仁敲任退汕镁烂谰考豹á湜�皱瘐箸战�kYOLMPSTTQI>52136:?AAAAAADHPWajrx}剨帒晽晱厁i\RNR`w暣验���逭帽�媭ulfbbdhnstrnic]ZZ_dlu|~~~}|€墧牞附挤瓱巭qiehoy剶獞ǹ愉蝤翥嫂坘XRVaoz倕儃rljjlmoqpmifa\YWX\clw倞悡搹寛�wiXF5(&0Jo櫬泺��致�槓�tjdadlx儗弾墎woifghkorrqonkiimv儝�爆瀲mS>319GXi{憞澇容嵇�潍塲UMSbr倢拺媰~}~€倓厓~yrjaZWW\eq€崠殮晭噥}xqdR=(7`幗狲�麇虾�攺�sia]`jx嚁湞殤唡snkjjmoonnmjfegq~彙�瓪_@)(:Nas噠崱断骥�麽緭hD,#(7Las}亐~~儗棧�煀pVB8<Mj尛侵傩揩槈€zul\G. )T喍荇�渫叮枎妰wgR>,#(;Xz浀呐福塺_WZcmw|~}zz€帰竿圯腋揾@  6K^m}

+ 0
- 2568
repos/ArableInstruments/parasites/braids/digital_oscillator.cc
File diff suppressed because it is too large
View File


+ 0
- 383
repos/ArableInstruments/parasites/braids/digital_oscillator.h View File

@@ -1,383 +0,0 @@
// Copyright 2012 Olivier Gillet.
//
// Author: Olivier Gillet (ol.gillet@gmail.com)
//
// 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:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// 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 NONINFRINGEMENT. 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.
//
// See http://creativecommons.org/licenses/MIT/ for more information.
//
// -----------------------------------------------------------------------------
//
// Oscillator - digital style waveforms.

#ifndef BRAIDS_DIGITAL_OSCILLATOR_H_
#define BRAIDS_DIGITAL_OSCILLATOR_H_

#include "stmlib/stmlib.h"

#include "braids/excitation.h"
#include "braids/svf.h"

#include <cstring>

namespace braids {

static const size_t kWGBridgeLength = 1024;
static const size_t kWGNeckLength = 4096;
static const size_t kWGBoreLength = 2048;
static const size_t kWGJetLength = 1024;
static const size_t kWGFBoreLength = 4096;
static const size_t kCombDelayLength = 8192;

static const size_t kNumFormants = 5;
static const size_t kNumPluckVoices = 3;
static const size_t kNumOverlappingFof = 3;
static const size_t kNumBellPartials = 11;
static const size_t kNumDrumPartials = 6;
static const size_t kNumAdditiveHarmonics = 12;

enum DigitalOscillatorShape {
OSC_SHAPE_TRIPLE_RING_MOD,
OSC_SHAPE_SAW_SWARM,
OSC_SHAPE_COMB_FILTER,
OSC_SHAPE_TOY,

OSC_SHAPE_DIGITAL_FILTER_LP,
OSC_SHAPE_DIGITAL_FILTER_PK,
OSC_SHAPE_DIGITAL_FILTER_BP,
OSC_SHAPE_DIGITAL_FILTER_HP,
OSC_SHAPE_VOSIM,
OSC_SHAPE_VOWEL,
OSC_SHAPE_VOWEL_FOF,
OSC_SHAPE_HARMONICS,

OSC_SHAPE_FM,
OSC_SHAPE_FEEDBACK_FM,
OSC_SHAPE_CHAOTIC_FEEDBACK_FM,

OSC_SHAPE_STRUCK_BELL,
OSC_SHAPE_STRUCK_DRUM,

OSC_SHAPE_KICK,
OSC_SHAPE_HAT,
OSC_SHAPE_SNARE,
OSC_SHAPE_PLUCKED,
OSC_SHAPE_BOWED,
OSC_SHAPE_BLOWN,
OSC_SHAPE_FLUTED,
OSC_SHAPE_WAVETABLES,
OSC_SHAPE_WAVE_MAP,
OSC_SHAPE_WAVE_LINE,
OSC_SHAPE_WAVE_PARAPHONIC,
OSC_SHAPE_FILTERED_NOISE,
OSC_SHAPE_TWIN_PEAKS_NOISE,
OSC_SHAPE_CLOCKED_NOISE,
OSC_SHAPE_GRANULAR_CLOUD,
OSC_SHAPE_PARTICLE_NOISE,

OSC_SHAPE_DIGITAL_MODULATION,

OSC_SHAPE_QUESTION_MARK_LAST
};

struct ResoSquareState {
uint32_t modulator_phase_increment;
uint32_t modulator_phase;
uint32_t square_modulator_phase;
int32_t integrator;
bool polarity;
};

struct VowelSynthesizerState {
uint32_t formant_increment[3];
uint32_t formant_phase[3];
uint32_t formant_amplitude[3];
uint16_t consonant_frames;
uint16_t noise;
};

struct SawSwarmState {
uint32_t phase[6];
int32_t filter_state[2][2];
int32_t dc_blocked;
int32_t lp;
int32_t bp;
};

struct HarmonicsState {
int32_t amplitude[kNumAdditiveHarmonics];
};

struct AdditiveState {
uint32_t partial_phase[kNumBellPartials];
uint32_t partial_phase_increment[kNumBellPartials];
int32_t partial_amplitude[kNumBellPartials];
int32_t target_partial_amplitude[kNumBellPartials];
int16_t previous_sample;
size_t current_partial;
int32_t lp_noise[3];
};

struct PluckState {
size_t size;
size_t write_ptr;
size_t shift;
size_t mask;
size_t pluck_position;
size_t initialization_ptr;
uint32_t phase;
uint32_t phase_increment;
uint32_t max_phase_increment;
int16_t previous_sample;
uint8_t polyphony_assigner;
};

struct FeedbackFmState {
uint32_t modulator_phase;
int16_t previous_sample;
};

struct ParticleNoiseState {
uint16_t amplitude;
int32_t filter_state[3][2];
int32_t filter_scale[3];
int32_t filter_coefficient[3];
};

struct PhysicalModellingState {
uint16_t delay_ptr;
uint16_t excitation_ptr;
int32_t lp_state;
int32_t filter_state[2];
int16_t previous_sample;
};

struct Grain {
uint32_t phase;
uint32_t phase_increment;
uint32_t envelope_phase;
uint32_t envelope_phase_increment;
};

struct FofState {
int32_t next_saw_sample;
int16_t previous_sample;
int32_t svf_lp[kNumFormants];
int32_t svf_bp[kNumFormants];
};

struct ToyState {
uint8_t held_sample;
uint16_t decimation_counter;
};

struct SvfState {
int32_t bp;
int32_t lp;
};

struct DigitalModulationState {
uint32_t symbol_phase;
uint16_t symbol_count;
int32_t filter_state;
uint8_t data_byte;
};

struct ClockedNoiseState {
uint32_t cycle_phase;
uint32_t cycle_phase_increment;
uint32_t rng_state;
int32_t seed;
int16_t sample;
};

struct HatState {
uint32_t phase[6];
uint32_t rng_state;
};

union DigitalOscillatorState {
ResoSquareState res;
VowelSynthesizerState vow;
SawSwarmState saw;
PluckState plk[4];
FeedbackFmState ffm;
ParticleNoiseState pno;
PhysicalModellingState phy;
Grain grain[4];
FofState fof;
ToyState toy;
SvfState svf;
AdditiveState add;
DigitalModulationState dmd;
ClockedNoiseState clk;
HatState hat;
HarmonicsState hrm;
uint32_t modulator_phase;
};

class DigitalOscillator {
public:
typedef void (DigitalOscillator::*RenderFn)(const uint8_t*, int16_t*, size_t);

DigitalOscillator() { }
~DigitalOscillator() { }
inline void Init() {
memset(&state_, 0, sizeof(state_));
pulse_[0].Init();
pulse_[1].Init();
pulse_[2].Init();
pulse_[3].Init();
svf_[0].Init();
svf_[1].Init();
svf_[2].Init();
phase_ = 0;
strike_ = true;
init_ = true;
}
inline void set_shape(DigitalOscillatorShape shape) {
shape_ = shape;
}
inline void set_pitch(int16_t pitch) {
// Smooth HF noise when the pitch CV is noisy.
if (pitch_ > (90 << 7) && pitch > (90 << 7)) {
pitch_ = (static_cast<int32_t>(pitch_) + pitch) >> 1;
} else {
pitch_ = pitch;
}
}

inline void set_parameters(
int16_t parameter_1,
int16_t parameter_2) {
parameter_[0] = parameter_1;
parameter_[1] = parameter_2;
}
inline uint32_t phase_increment() const {
return phase_increment_;
}
inline void Strike() {
strike_ = true;
}

void Render(const uint8_t* sync, int16_t* buffer, size_t size);
private:
void RenderTripleRingMod(const uint8_t*, int16_t*, size_t);
void RenderSawSwarm(const uint8_t*, int16_t*, size_t);
void RenderComb(const uint8_t*, int16_t*, size_t);
void RenderToy(const uint8_t*, int16_t*, size_t);

void RenderDigitalFilter(const uint8_t*, int16_t*, size_t);
void RenderVosim(const uint8_t*, int16_t*, size_t);
void RenderVowel(const uint8_t*, int16_t*, size_t);
void RenderVowelFof(const uint8_t*, int16_t*, size_t);

void RenderHarmonics(const uint8_t*, int16_t*, size_t);

void RenderFm(const uint8_t*, int16_t*, size_t);
void RenderFeedbackFm(const uint8_t*, int16_t*, size_t);
void RenderChaoticFeedbackFm(const uint8_t*, int16_t*, size_t);
void RenderStruckBell(const uint8_t*, int16_t*, size_t);
void RenderStruckDrum(const uint8_t*, int16_t*, size_t);
void RenderPlucked(const uint8_t*, int16_t*, size_t);
void RenderBowed(const uint8_t*, int16_t*, size_t);
void RenderBlown(const uint8_t*, int16_t*, size_t);
void RenderFluted(const uint8_t*, int16_t*, size_t);

void RenderWavetables(const uint8_t*, int16_t*, size_t);
void RenderWaveMap(const uint8_t*, int16_t*, size_t);
void RenderWaveLine(const uint8_t*, int16_t*, size_t);
void RenderWaveParaphonic(const uint8_t*, int16_t*, size_t);
void RenderTwinPeaksNoise(const uint8_t*, int16_t*, size_t);
void RenderFilteredNoise(const uint8_t*, int16_t*, size_t);
void RenderClockedNoise(const uint8_t*, int16_t*, size_t);
void RenderGranularCloud(const uint8_t*, int16_t*, size_t);
void RenderParticleNoise(const uint8_t*, int16_t*, size_t);
void RenderDigitalModulation(const uint8_t*, int16_t*, size_t);
void RenderKick(const uint8_t*, int16_t*, size_t);
void RenderSnare(const uint8_t*, int16_t*, size_t);
void RenderCymbal(const uint8_t*, int16_t*, size_t);
void RenderQuestionMark(const uint8_t*, int16_t*, size_t);
// void RenderYourAlgo(const uint8_t*, int16_t*, size_t);
uint32_t ComputePhaseIncrement(int16_t midi_pitch);
uint32_t ComputeDelay(int16_t midi_pitch);
int16_t InterpolateFormantParameter(
const int16_t table[][kNumFormants][kNumFormants],
int16_t x,
int16_t y,
uint8_t formant);
uint32_t phase_;
uint32_t phase_increment_;
uint32_t delay_;

int16_t parameter_[2];
int16_t previous_parameter_[2];
int32_t smoothed_parameter_;
int16_t pitch_;
uint8_t active_voice_;
bool init_;
bool strike_;

DigitalOscillatorShape shape_;
DigitalOscillatorShape previous_shape_;
DigitalOscillatorState state_;
Excitation pulse_[4];
Svf svf_[3];
union {
int16_t comb[kCombDelayLength];
int16_t ks[1025 * 4];
struct {
int8_t bridge[kWGBridgeLength];
int8_t neck[kWGNeckLength];
} bowed;
int16_t bore[kWGBoreLength];
struct {
int8_t jet[kWGJetLength];
int8_t bore[kWGFBoreLength];
} fluted;
} delay_lines_;
static RenderFn fn_table_[];
DISALLOW_COPY_AND_ASSIGN(DigitalOscillator);
};

} // namespace braids

#endif // BRAIDS_DIGITAL_OSCILLATOR_H_

+ 0
- 128
repos/ArableInstruments/parasites/braids/drivers/adc.cc View File

@@ -1,128 +0,0 @@
// Copyright 2012 Olivier Gillet.
//
// Author: Olivier Gillet (ol.gillet@gmail.com)
//
// 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:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// 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 NONINFRINGEMENT. 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.
//
// See http://creativecommons.org/licenses/MIT/ for more information.
//
// -----------------------------------------------------------------------------
//
// Driver for ADC scanning.

#include "braids/drivers/adc.h"

#include <string.h>

namespace braids {
const uint16_t kPinSS = GPIO_Pin_0;

void Adc::Init(bool double_speed) {
// Initialize SS pin.
GPIO_InitTypeDef gpio_init;
gpio_init.GPIO_Pin = kPinSS;
gpio_init.GPIO_Speed = GPIO_Speed_50MHz;
gpio_init.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOB, &gpio_init);
// Initialize MOSI and SCK pins.
gpio_init.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_7;
gpio_init.GPIO_Speed = GPIO_Speed_50MHz;
gpio_init.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(GPIOA, &gpio_init);
// Initialize MISO pin.
gpio_init.GPIO_Pin = GPIO_Pin_6;
gpio_init.GPIO_Speed = GPIO_Speed_50MHz;
gpio_init.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOA, &gpio_init);
// Initialize SPI
SPI_InitTypeDef spi_init;
spi_init.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
spi_init.SPI_Mode = SPI_Mode_Master;
spi_init.SPI_DataSize = SPI_DataSize_8b;
spi_init.SPI_CPOL = SPI_CPOL_Low;
spi_init.SPI_CPHA = SPI_CPHA_1Edge;
spi_init.SPI_NSS = SPI_NSS_Soft;
spi_init.SPI_BaudRatePrescaler = double_speed ? SPI_BaudRatePrescaler_32 : SPI_BaudRatePrescaler_64;
spi_init.SPI_FirstBit = SPI_FirstBit_MSB;
spi_init.SPI_CRCPolynomial = 7;
SPI_Init(SPI1, &spi_init);
GPIO_SetBits(GPIOB, kPinSS);
SPI_Cmd(SPI1, ENABLE);
rx_word_ = 0;
active_channel_ = 0;
acquisition_stage_ = 0;
memset(channels_, 0, sizeof(channels_));
}

bool Adc::PipelinedRead(uint8_t channel) {
switch (acquisition_stage_) {
case 0:
rx_word_ |= SPI_I2S_ReceiveData(SPI1);
channels_[active_channel_] = rx_word_;
GPIO_SetBits(GPIOB, kPinSS);
GPIO_ResetBits(GPIOB, kPinSS);
SPI_I2S_SendData(SPI1, 0x04 | 0x02);
active_channel_ = channel;
acquisition_stage_ = 1;
break;
case 1:
SPI_I2S_ReceiveData(SPI1);
SPI_I2S_SendData(SPI1, active_channel_ << 6);
acquisition_stage_ = 2;
break;
case 2:
rx_word_ = (SPI_I2S_ReceiveData(SPI1) & 0xf) << 8;
SPI_I2S_SendData(SPI1, 0x00); // Dummy trailing data.
acquisition_stage_ = 0;
break;
}
return acquisition_stage_ == 1;
}

uint16_t Adc::Read(uint8_t channel) {
uint16_t value = 0;
// Send header
GPIO_ResetBits(GPIOB, kPinSS);
SPI_I2S_SendData(SPI1, 0x04 | 0x02);
while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_RXNE) == RESET);
SPI_I2S_ReceiveData(SPI1);
// Send channel
SPI_I2S_SendData(SPI1, channel << 6);
while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_RXNE) == RESET);
value = (SPI_I2S_ReceiveData(SPI1) & 0xf) << 8;

// Send trailing word
SPI_I2S_SendData(SPI1, 0x00);
while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_RXNE) == RESET);
value |= SPI_I2S_ReceiveData(SPI1);
GPIO_SetBits(GPIOB, kPinSS);
return value;
}

} // namespace braids

+ 0
- 90
repos/ArableInstruments/parasites/braids/drivers/adc.h View File

@@ -1,90 +0,0 @@
// Copyright 2012 Olivier Gillet.
//
// Author: Olivier Gillet (ol.gillet@gmail.com)
//
// 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:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// 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 NONINFRINGEMENT. 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.
//
// See http://creativecommons.org/licenses/MIT/ for more information.
//
// -----------------------------------------------------------------------------
//
// Driver for ADC scanning.

#ifndef BRAIDS_DRIVERS_ADC_H_
#define BRAIDS_DRIVERS_ADC_H_

#include <stm32f10x_conf.h>
#include "stmlib/stmlib.h"

namespace braids {

const size_t kNumChannels = 4;

class Adc {
public:
Adc() { }
~Adc() { }
void Init(bool double_speed);
// Inlined and optimized!
inline bool PipelinedScan() {
switch (acquisition_stage_) {
case 0:
rx_word_ |= SPI1->DR;
channels_[active_channel_] = rx_word_;
GPIOB->BSRR = GPIO_Pin_0;
GPIOB->BRR = GPIO_Pin_0;
SPI1->DR = 0x04 | 0x02;
active_channel_ = (active_channel_ + 1) % kNumChannels;
acquisition_stage_ = 1;
break;

case 1:
SPI1->DR;
SPI1->DR = active_channel_ << 6;
acquisition_stage_ = 2;
break;

case 2:
rx_word_ = (SPI1->DR & 0xf) << 8;
SPI1->DR = 0x00; // Dummy trailing data.
acquisition_stage_ = 0;
break;
}
return (active_channel_ == 0 && acquisition_stage_ == 1);
}

bool PipelinedRead(uint8_t channel);

uint16_t Read(uint8_t channel);
uint16_t channel(uint8_t index) const { return channels_[index]; }
private:
uint16_t rx_word_;
size_t active_channel_;
size_t acquisition_stage_;
uint16_t channels_[kNumChannels];

DISALLOW_COPY_AND_ASSIGN(Adc);
};

} // namespace braids

#endif // BRAIDS_DRIVERS_ADC_H_

+ 0
- 64
repos/ArableInstruments/parasites/braids/drivers/dac.cc View File

@@ -1,64 +0,0 @@
// Copyright 2012 Olivier Gillet.
//
// Author: Olivier Gillet (ol.gillet@gmail.com)
//
// 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:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// 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 NONINFRINGEMENT. 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.
//
// See http://creativecommons.org/licenses/MIT/ for more information.
//
// -----------------------------------------------------------------------------
//
// Driver for DAC.

#include "braids/drivers/dac.h"

#include <string.h>

namespace braids {
void Dac::Init() {
// Initialize SS pin.
GPIO_InitTypeDef gpio_init;
gpio_init.GPIO_Pin = GPIO_Pin_12;
gpio_init.GPIO_Speed = GPIO_Speed_50MHz;
gpio_init.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOB, &gpio_init);
// Initialize MOSI and SCK pins.
gpio_init.GPIO_Pin = GPIO_Pin_13 | GPIO_Pin_15;
gpio_init.GPIO_Speed = GPIO_Speed_50MHz;
gpio_init.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(GPIOB, &gpio_init);
// Initialize SPI
SPI_InitTypeDef spi_init;
spi_init.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
spi_init.SPI_Mode = SPI_Mode_Master;
spi_init.SPI_DataSize = SPI_DataSize_16b;
spi_init.SPI_CPOL = SPI_CPOL_High;
spi_init.SPI_CPHA = SPI_CPHA_1Edge;
spi_init.SPI_NSS = SPI_NSS_Soft;
spi_init.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_2;
spi_init.SPI_FirstBit = SPI_FirstBit_MSB;
spi_init.SPI_CRCPolynomial = 7;
SPI_Init(SPI2, &spi_init);
SPI_Cmd(SPI2, ENABLE);
}

} // namespace braids

Some files were not shown because too many files changed in this diff

Loading…
Cancel
Save