diff options
author | Loek Le Blansch <loek@pipeframe.xyz> | 2024-05-25 17:47:34 +0200 |
---|---|---|
committer | Loek Le Blansch <loek@pipeframe.xyz> | 2024-05-25 17:47:34 +0200 |
commit | 078038da762d7f64ae07cf416a2a08dddfc0c651 (patch) | |
tree | 474a8f9a82a7848f851f5f14ba4f65de1022c87e | |
parent | 0350186840aa15ff2c5547d48fe831d0729b3ef0 (diff) | |
parent | 23017163757ea5e674bec4fb5529c24fe54002d7 (diff) |
Merge branch 'master' into prot/vault-puzzle (merge #5)
80 files changed, 9782 insertions, 1 deletions
diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..cd37156 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,12 @@ +root = true + +[*] +indent_style = tab +end_of_line = lf +insert_final_newline = true + +[*.md] +indent_style = space +indent_size = 2 + + diff --git a/.gitmodules b/.gitmodules index 5c66c79..c951407 100644 --- a/.gitmodules +++ b/.gitmodules @@ -6,3 +6,5 @@ [submodule "test/lib/googletest"] path = test/lib/googletest url = https://github.com/google/googletest + branch = v1.14.0 + shallow = true diff --git a/docs/.bundle/config b/docs/.bundle/config new file mode 100644 index 0000000..92d0e5f --- /dev/null +++ b/docs/.bundle/config @@ -0,0 +1,2 @@ +--- +BUNDLE_PATH: "res/bundle" diff --git a/docs/.gitignore b/docs/.gitignore new file mode 100644 index 0000000..a2f45c2 --- /dev/null +++ b/docs/.gitignore @@ -0,0 +1,5 @@ +*.pdf +res + +# i know this is bad +Gemfile.lock diff --git a/docs/Gemfile b/docs/Gemfile new file mode 100644 index 0000000..efd0f36 --- /dev/null +++ b/docs/Gemfile @@ -0,0 +1,13 @@ +ruby '~> 3.0' +source 'https://rubygems.org' + +gem 'json' # required for bibtex + +gem 'asciidoctor', '~> 2.0' +gem 'asciidoctor-pdf', '~> 2.3' +gem 'asciidoctor-bibtex', '~> 0.8.0' +# gem 'asciidoctor-interdoc-reftext', '~> 0.5.2' +gem 'asciidoctor-interdoc-reftext', git: 'https://github.com/lonkaars/asciidoctor-interdoc-reftext' +gem 'asciidoctor-lists', '~> 1.0' +gem 'text-hyphen', '~> 1.5' + diff --git a/docs/design.adoc b/docs/design.adoc new file mode 100644 index 0000000..5ebbb15 --- /dev/null +++ b/docs/design.adoc @@ -0,0 +1,568 @@ +:document: Software Design +include::share/meta.adoc[] + +== Introduction + +This document contains all the design considerations made for the separate +software components that make up the puzzle box. This document has a top-down +structure, and has three levels of design 'depth': + +. Top-level (hardware diagrams, OSes, communication buses, etc.) +. Module-level (puzzle inputs/outputs, top-level software diagram, etc.) +. Component-level (software dependencies, game state, etc.) + +Only design details deemed relevant by the document authors are documented +here. Low-level implementation details such as API interfaces, code paths and +workarounds are documented inside the source code repository. + +[[sec:lv1]] +== Top-Level + +This section of the design document establishes the development target +hardware. It also specifies the modules that are elaborated further in +<<sec:lv2>>. + +<<fig:system-top>> shows a block diagram that describes the context in which +the puzzle box is used. The puzzle box in this diagram internally consists of a +main controller and multiple puzzle modules. Other notable details include: + +* The charger is removable, and the puzzle box is intended to be used as a + battery-powered device (i.e. not while tethered). +* Puzzle outputs are used to complete a feedback loop (gameplay) with the + players, as well as eventually provide a solution to diffuse a bomb. This + bomb is part of a standalone project that has already been finished at the + time of writing (2024-03-11), and this project only describes the interface + between the puzzle box and the bomb. +* The puzzle box is capable of bidirectional communication over Wi-Fi. This + connection is used to configure the puzzle box before gameplay or modify its + state during gameplay. + +[[fig:system-top]] +.Context block diagram +image::img/system-top.svg[] + +The rest of this section details the internal hardware modules and the +separation of functionality of these modules. + +=== Puzzle Modules + +The puzzle box hardware produced by the 21-22 group consists of 6 sides, 4 of +which are utilized by puzzle modules. This section defines the properties of a +puzzle module. + +Puzzle modules can occupy one or more physical sides of the puzzle box to +implement the physical interface required for a puzzle or game. In order to +realize a complete game, each of these puzzle modules must have the ability to +control game inputs and outputs. Two approaches for this were considered: + +. Let the main controller handle game state and logic for all puzzle modules. ++ +This approach has the main benefit of allowing puzzle module controllers to be +substituted for I^2^C I/O expanders that draw less power than a complete MCU. ++ +The major drawback of this approach is that the main controller's software +needs to be configured for each different hardware configuration, which makes +the main controller software more complicated. + +. Design an abstract 'game interface' and give each puzzle module its own MCU. ++ +This approach provides the most flexibility, as the main controller's software +is no longer dependent on the physically installed hardware. This approach is +also favorable with regards to testability, as each puzzle module can run +standalone. ++ +The main drawback of this approach is the possible increase in power +consumption, as each puzzle module now must have its own MCU for managing game +state and communication with the main controller. + +The current hardware (developed by the 21-22 group) uses the second approach, +though with MCUs that were not designed for power efficiency. This year +(23-24), the hardware produced by the 21-22 group was utilized due to the 23-24 +group not including students from the hardware study path. Minimizing power +draw for each puzzle module is still a priority, so a different microcontroller +was selected. + +The criteria for a puzzle module controller are: + +* Must have an I^2^C peripheral (<<reqs.adoc#req:pm-i2c-ctrl>>). +* Should have enough I/O ports to directly control moderately complex puzzles + (<<reqs.adoc#req:pm-gpio>>). +* Should be power efficient (<<reqs.adoc#req:pm-pwr-efficient>>). + +The research document cite:[research] compares various microcontrollers +matching these criteria. As a result of this research, the Microchip +PIC16F15276 was selected as the recommended microcontroller for future puzzle +modules. The current development hardware utilizes an ESP32-PICO-D4 module, so +the puzzle module software is written with portability in mind. + +[[fig:puzzle-module-top]] +.Generic puzzle module top-level block diagram +image::img/puzzle-module-top.svg[] + +<<fig:puzzle-module-top>> shows a block diagram of how most puzzle modules are +implemented. Since the internal components of the puzzle module block from +<<fig:puzzle-module-top>> differ for each puzzle, they are left out in this +section. <<sec:lv2>> includes the next detail level for all of the implemented +puzzles this year. The puzzle bus is detailed further in +<<sec:lv1-communication>>. + +=== Main Controller + +This section describes the responsibilities of the main controller inside the +puzzle box. The main controller is a central processor that is responsible for +the following: + +* Integrate installed puzzle modules to form a cohesive experience by— +** Detecting and initializing installed puzzle modules. +** Aggregating game state for all installed puzzle modules. +** Reading and writing game state for all installed puzzle modules. +** Broadcasting updates internally. +* Serve TCP socket connections for— +** Sending state updates +** Manually updating game state +** Integration with the bomb + +The specific requirement of being able to serve TCP socket connections was +created so this year's puzzle box could keep compatibility with the software +produced by the 21-22 group. + +As mentioned in the research document cite:[research], the 21-22 group produced +the hardware that is used as development target for this year's (23-24) run of +the puzzle box project. The existing hardware utilizes a Raspberry Pi 3B+ as +main controller, but this controller caused issues with power consumption +cite:[2122_handover]. Choosing a different controller during development +requires significant refactoring, so a different main controller has been +selected at the start of this year's run of the puzzle box project. + +The criteria for the main controller are: + +* Must have an I^2^C peripheral (<<reqs.adoc#req:main-i2c-ctrl>>). +* Must be able to connect to a standard 802.11b/g/n access point + (<<reqs.adoc#req:main-802-11-ap>>). +* Must be able to serve TCP socket connection(s) + (<<reqs.adoc#req:main-tcp-socket>>). +* Should be power efficient (<<reqs.adoc#req:main-pwr-efficient>>). + +The requirements document compares various microcontrollers that fit these +criteria. After this comparison, the decision was made to utilize the Raspberry +Pi Pico W as main controller during development. + +[[fig:main-controller-top]] +.Main controller top-level block diagram +image::img/main-controller-top.svg[] + +<<fig:main-controller-top>> shows a block diagram of the main controller and +its inputs and outputs. The main controller is the only module in the puzzle +box that is able to communicate over Wi-Fi and is therefore responsible for all +communication between the puzzle box and game operator. The puzzle bus is +detailed further in <<sec:lv1-communication>>. + +[[sec:lv1-communication]] +=== Communication + +Communication between puzzle modules, the main controller and other auxiliary +peripherals is handled through a central I^2^C bus referred to as the 'puzzle +bus'. This design was again carried over from the hardware design from the +21-22 group cite:[2122_design]. + +The only notable difference made this year was the removal of the +"HarwareInterrupt" line1{empty}footnote:[This is not a typo], which was +connected but not utilized cite:[research]. + +Address definitions and protocol specifications are further detailed in +<<sec:lv2-bus>>. + +=== Power supply + +One of the user requirements is that the puzzle box runs on battery power +(<<reqs.adoc#req:pwr-battery>>). Due to the team composition of this year's +(23-24) run of the puzzle box project, a new power supply was not chosen, even +though the current power supply was determined insufficient by the 21-22 group. +This year, additional requirements were specified for the power supply, which +were used when selecting MCUs suitable for battery-powered applications. + +[[fig:power-supply-top]] +.Power supply module top-level block diagram +image::img/power-supply-top.svg[] + +<<fig:puzzle-module-top>> shows a block diagram of how most puzzle modules are +implemented. Besides the additional requirements, the power supply remains the +same, and will not be elaborated further on in this document. + +=== Overview + +<<fig:system-bus>> is the resulting combination of the modules from +<<fig:puzzle-module-top>>, <<fig:main-controller-top>> and +<<fig:power-supply-top>>. + +[[fig:system-bus]] +.Hardware component overview +image::img/system-bus.svg[] + +[[sec:lv2]] +== Modules + +This section elaborates on the top-level specifications from <<sec:lv1>> with +additional hardware specifications and software design decisions. + +=== Puzzle Module Framework + +This subsection defines aspects of the 'puzzle framework' and the interface +that allows puzzle modules to integrate with this framework. All communication +described within this subsection refers to 'internal' communication between the +main controller and puzzle module. + +The puzzle framework is the foundation of the puzzle box software, and is +designed to facilitate the following: + +* Allow puzzle modules to be swapped with minimal downtime or maintenance + (<<reqs.adoc#req:pm-swap>>). +* Simplify the development process and integration of new puzzle modules + (<<reqs.adoc#req:main-static>>). +* Provide abstracted interfaces to allow for easy integration of the puzzle box + as part of a larger whole (<<reqs.adoc#req:main-interface>>). + +[[sec:framework-state]] +==== State + +All puzzle modules implement the same state machine shown in +<<fig:puzzle-module-common-state>>. Note that the arrows indicate state +transitions that a puzzle module may take on its own. The main controller also +allows the game operator to manually set the current state as one of the states +on the right half of <<fig:puzzle-module-common-state>>, which can be used to +skip a puzzle if a player is stuck (<<reqs.adoc#req:edge-skip-puzzle>>) or +reset a game if it is malfunctioning (<<reqs.adoc#req:edge-manual-reset>>). + +Puzzle modules start in the 'uninitialized' state, where they repeatedly send +messages to the main controller (see <<sec:main-bridge>>). The state transition +from 'uninitialized' to 'reset' is forced by the main controller upon +initialization. States on the right half of <<fig:puzzle-module-common-state>> +are used during gameplay. + +[[fig:puzzle-module-common-state]] +.Global puzzle module state machine +image::img/puzzle-module-common-state.svg[] + +The state machine described in <<fig:puzzle-module-common-state>> is referred +to as the global state. Puzzle modules may also declare and define custom state +variables, which is referred to as auxiliary state. These auxiliary state +variables contain game-specific variables; e.g. the binary state of each button +on the Neotrellis puzzle module, or the last passcode entered on the vault +puzzle module. + +Separating the auxiliary state from the generic state allows the main +controller to handle the auxiliary state as an arbitrary blob, which allows for +future expansion without modification of the main controller software. + +==== Commands + +The puzzle module framework describes the following commands: + +* Read state +* Write state +* Update + +The 'read' and 'write' commands are used to communicate both types of state +defined in <<sec:framework-state>>. + +To avoid issues caused by state synchronization memory consumption on the main +controller and puzzle modules, auxiliary state is only stored on each +respective puzzle module's controller. Only global state is cached on the main +controller to reduce the number of back-and-forth messages required for state +updates. + +These commands are sufficient to realize the puzzle box, but this means that +the puzzle box would rely heavily on polling-based updates internally. To solve +this, the 'update' command was created. This command is utilized for various +kinds of updates, including registering new puzzle modules and updating global +state. + +=== Main Controller + +This subsection defines the function and state of the main controller. + +==== State + +The global state of the main controller is an aggregated version of all +installed puzzle modules and is defined by the state machine shown in +<<fig:main-controller-state>>. + +[[fig:main-controller-state]] +.Main controller global state machine +image::img/main-controller-state.svg[] + +The following list describes when each state is active: + +* If all puzzle modules are in the 'reset' state, the main controller is also + in the 'reset' state. +* If all puzzle modules are in the 'solved' state, the main controller is also + in the 'solved' state. +* Else, the main controller is in the 'playing' state. + +Because the main controller's state is only dependent on the installed puzzle +modules' state, it is only updated when a puzzle module sends an update +notification. When the global state of the main module changes, an update +broadcast is sent to all puzzle modules. + +To simplify the commands used to control the puzzle box, the list of installed +puzzle modules is stored as an auxiliary state variable of the main controller. + +==== Initializing Puzzle Modules + +Puzzle modules start in the 'uninitialized' state (see +<<fig:puzzle-module-common-state>>). In this state, the puzzle module +repeatedly sends an update command to the main controller. The main controller +responds to this message by sending a 'set state' command with the target state +as 'reset' as reply. Before this response is sent, the main controller +internally adds the bus address of the puzzle module requesting to be +initialized to the list of installed puzzle modules. From the main controller's +point of view, this reply marks the moment the initialization is complete. + +[[fig:sequence-puzzle-module-init]] +.Puzzle module initialization sequence diagram +image::img/sequence-puzzle-module-init.svg[] + +(Activated lifeline indicates the module is no longer in 'uninitialized' state) + +[[sec:main-bridge]] +==== Bridge + +The bridge is used to remotely access and control the puzzle box. + +The Raspberry Pi 3B+ used as main controller during the 21-22 run of the +project set up a Wi-Fi Mesh network cite:[2122_design] to communicate with the +puzzle box. This year's main controller (Raspberry Pi Pico W cite:[research]) +uses a standard 802.11b/g/n access point instead +(<<reqs.adoc#req:main-802-11-ap>>). + +On this network, the main controller hosts a server that serves TCP socket +connections. These sockets directly forward all internal messages sent to the +main controller bidirectionally (i.e. on behalf of the main controller). +Detailed specifications on the TCP socket server are in +<<sec:lv3-remote-control>>. + +==== Operating System + +The research document cite:[research] contains a detailed comparison of various +operating systems that are suitable to realize the functionality described in +this section. After this comparison, the decision was made to utilize FreeRTOS +as the operating system on the Rasberry Pi Pico W. + +[[sec:lv2-bus]] +=== Puzzle Bus + +This section describes the addresses and communication protocol used on the +puzzle bus. These specifications only apply to messages sent internally in the +puzzle box, as messages forwarded by the bridge (see <<sec:main-bridge>>) are +sent on behalf of the main controller. + +==== Addresses + +The I^2^C addresses remain mostly unchanged from the 20-21 group's +implementation cite:[2021_design]. Addresses that were modified since the 20-21 +implementation are marked with an asterisk. Table 1 lists these addresses for +reference. These addresses are also used to identify specific puzzle modules. + +.I^2^C address reference +[%autowidth] +|=== +| Peripheral | Address + +| Main controller | 0x10* +| Neotrellis puzzle controller | 0x11* +| Neotrellis button matrix | 0x12* +| Software puzzle controller | 0x03 +| Hardware puzzle controller | 0x04 +| Vault puzzle controller | 0x06 +|=== + +==== Messages + +All messages sent over the puzzle bus have a similar format. This format is +shown in Table 2. Notable details include: + +The 'subject' field does not have to match the I^2^C address of the message +sender or recipient + +Property 0x00 stores a module's global state + +.Puzzle bus message format +[%autowidth] +|=== +| Field | Content + +| Command | Enum: read, write, update +| Subject | I^2^C address (7-bit) +| Property | Address (8-bit) +| Value | Byte string (variable length) +|=== + +The messages described in Table 2 are (de)serialized using Google's protocol +buffer library. This choice was made after considering various alternative +options for sending structured messages cite:[research]. + +<<fig:sequence-puzzle-module-init>> shows an example of how messages are +exchanged for the initialization of a puzzle module. + +<<fig:sequence-puzzle-finish>> shows an example exchange where the last puzzle +module (A) is solved while (B) is already solved. + +. First, module A sets it's own state to 'solved' and subsequently informs the + main controller of this change. +. As a result of this update notification, the main controller queries puzzle + module A for its new global state. +. Once the main controller has received and confirmed that all puzzle module + global states are set to 'solved', the main controller sets its own state to + 'solved', and broadcasts an update message to all puzzle modules. +. As a result of the update message from the main controller, module B requests + the main controller's new global state, and is able to verify that all puzzle + modules have been solved. + +In this example, module B could be the vault puzzle module, which displays a +code when the entire puzzle box is solved. + +[[fig:sequence-puzzle-finish]] +.Puzzle box finish sequence diagram +image::img/sequence-puzzle-finish.svg[] + +=== NeoTrellis Puzzle + +This subsection defines aspects of the 'NeoTrellis puzzle' module and gives a +summary of how the puzzle is meant to be solved. This module will be created to +facilitate the NeoTrellis puzzle game logic and communication with the main +controller about the puzzle state. + +==== NeoTrellis puzzle gameplay + +The NeoTrellis puzzle is an 8x8 button matrix with Neopixels underneath each +button. The way to solve this puzzle is by dimming every Neopixel in the 8x8 +matrix. This is done by clicking on a button, which switches the state of the +Neopixel underneath the pixel and the Neopixels in each cardinal direction from +the pressed button. This means that if a Neopixel was on and the button was +pressed it will turn off and vice-versa. A visual example can be found in +Appendix B. + +==== Puzzle inputs & outputs + +The inputs and outputs of this puzzle have been taken from the design document +of the previous group which worked on this project (??). This input and output +diagram has been shown in <<fig:neotrellis-io>>. + +[[fig:neotrellis-io]] +.NeoTrellis puzzle in-out +image::img/neotrellis-io.png[] + +=== Software Puzzle + +This subsection defines aspects of the 'software puzzle' module and gives a +summary of how the puzzle is meant to be solved. This module will be created to +facilitate the software puzzle game logic and communication with the main +controller about the software puzzle state. + +[[sec:software-gameplay]] +==== Software puzzle gameplay + +The software puzzle consists of 12 input ports which can be connected using a +banana plug connector. The 6 input ports on the left side of the puzzle each +have their own logical circuit engraved in the box, and the 6 input ports on +the right side of the puzzle have a letter (A through F) engraved in the box. +The way to solve the puzzle is by connecting the banana plug cable from an +input port on the left side of the puzzle to the corresponding input port on +the right side of the puzzle. An example of this can be found in Appendix C. + +When the puzzle starts, the participants of the game will have 6 code-fragments +written on paper, corresponding to the logical circuits on the puzzle box. The +bomb participants will have description of the C-code fragments, while the +puzzle box participants only have the logical circuits on the puzzle box. The +participants must communicate with each other to figure out which a fragment of +C code corresponds with a logical circuit engraved on the puzzle box. Once this +has been done the puzzle box participants can use a banana plug cable to +connect the input and output to each other. Once the correct combination of +logical gates with the correct letter is made, the puzzle is solved (shown by +an LED lighting up above the puzzle). Allowing the participants to both see a +binary code using 16 LEDs above the puzzle, and to continue to the next puzzle. + +==== Puzzle inputs & outputs + +As stated in <<sec:software-gameplay>> the puzzle has 12 inputs, as well as an +LED which shows whether the puzzle has been solved and 16 LEDs showing a binary +code. This is shown in <<fig:software-io>>. + +[[fig:software-io]] +.Software puzzle in-out +image::img/software-io.png[] + +=== Hardware Puzzle + +==== Hardware Puzzle gameplay + +The hardware puzzle has a logic gate puzzle engraved on the front plate of the +puzzle box. To solve the puzzle, the user must set the toggle switches to the +correct position. To solve the puzzle, a truth table is used. + +The second part of the puzzle is unlocked after solving the logic gate puzzle, +the user has to listen to a Morse code from which a four-digit code follows. +The user then turns potentiometers to change this code on the display. The +puzzle is solved when the user has put the correct code on the display. Once +successful, the indicator LED will light up. + +==== Puzzle inputs / outputs + +The inputs and outputs of this puzzle have been taken from the design document +of the previous group which worked on this project (21-22). This input and +output diagram has been shown in Figure ??. + +=== Vault Puzzle + +==== Vault puzzle gameplay + +The vault puzzle is a puzzle created to test the communication skills of the +student. It shows a code on the puzzle box, which then needs to be given to +students with the game manual, who communicates this to the students at the +puzzle box the button they must click. This needs to be done 5 times before the +vault opens and the last code is given to defuse the bomb if a wrong button is +clicked the vault resets and they need to start over from the beginning. + +==== Puzzle inputs & outputs + +[[fig:vault-io]] +.Vault puzzle in-out +image::img/vault-io.png[] + +=== Bomb device + +==== Bomb device connection + +The bomb connects to a WiFi-network using the 802.11x standard. The hub hosts +an interface that can be used to identify all the devices including the bomb +and also pair it to a puzzlebox. After that the game can be set-up and a given +countdown time and start time will be communicated to the bomb over a TCP +socket connection. The hub generates a code that will be send to both the +puzzlebox and bomb so that both devices know what would be or can be expected. + +The bomb can also use the WiFi connection to sync. the time. + +==== Device inputs & outputs + +[[fig:bomb-io]] +.Bomb device in-out +image::img/bomb-io.png[] + +== Components +[[sec:lv3-remote-control]] +=== Remote Control +==== Socket Server +==== Socket Commands +=== Neotrellis Puzzle +=== Game state diagrams, activity diagrams (if applicable) +=== Software Puzzle +=== Hardware Puzzle +=== Vault Puzzle + +[appendix] +== NeoTrellis puzzle example + +[appendix] +== Software puzzle example + +include::share/footer.adoc[] diff --git a/docs/figs.drawio b/docs/figs.drawio new file mode 100644 index 0000000..a40503b --- /dev/null +++ b/docs/figs.drawio @@ -0,0 +1,904 @@ +<mxfile host="Electron" modified="2024-03-17T13:05:37.082Z" agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/23.1.5 Chrome/120.0.6099.109 Electron/28.1.0 Safari/537.36" etag="7STPuaY27yiGeP_RMlUo" version="23.1.5" type="device" pages="12"> + <diagram name="planning-condensed" id="ntlEKQOA_ElMvQzKZB-_"> + <mxGraphModel dx="1646" dy="488" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0"> + <root> + <mxCell id="0" /> + <mxCell id="1" parent="0" /> + <mxCell id="LZjEHdl2kUvcbKKKhykF-43" value="16" style="endArrow=none;dashed=1;html=1;rounded=0;opacity=70;verticalAlign=top;labelPosition=center;verticalLabelPosition=bottom;align=center;fontFamily=Arial;" parent="1" edge="1"> + <mxGeometry x="-1" width="50" height="50" relative="1" as="geometry"> + <mxPoint x="619.31" y="200" as="sourcePoint" /> + <mxPoint x="619.31" as="targetPoint" /> + <mxPoint as="offset" /> + </mxGeometry> + </mxCell> + <mxCell id="LZjEHdl2kUvcbKKKhykF-38" value="13" style="endArrow=none;dashed=1;html=1;rounded=0;opacity=70;verticalAlign=top;labelPosition=center;verticalLabelPosition=bottom;align=center;fontFamily=Arial;" parent="1" edge="1"> + <mxGeometry x="-1" width="50" height="50" relative="1" as="geometry"> + <mxPoint x="460" y="200" as="sourcePoint" /> + <mxPoint x="460" as="targetPoint" /> + <mxPoint as="offset" /> + </mxGeometry> + </mxCell> + <mxCell id="LZjEHdl2kUvcbKKKhykF-34" value="7" style="endArrow=none;dashed=1;html=1;rounded=0;opacity=70;verticalAlign=top;labelPosition=center;verticalLabelPosition=bottom;align=center;fontFamily=Arial;" parent="1" edge="1"> + <mxGeometry x="-1" width="50" height="50" relative="1" as="geometry"> + <mxPoint x="160" y="200" as="sourcePoint" /> + <mxPoint x="160" as="targetPoint" /> + <mxPoint as="offset" /> + </mxGeometry> + </mxCell> + <mxCell id="LZjEHdl2kUvcbKKKhykF-35" value="10" style="endArrow=none;dashed=1;html=1;rounded=0;opacity=70;verticalAlign=top;labelPosition=center;verticalLabelPosition=bottom;align=center;fontFamily=Arial;" parent="1" edge="1"> + <mxGeometry x="-1" width="50" height="50" relative="1" as="geometry"> + <mxPoint x="340" y="200" as="sourcePoint" /> + <mxPoint x="340" as="targetPoint" /> + <mxPoint as="offset" /> + </mxGeometry> + </mxCell> + <mxCell id="LZjEHdl2kUvcbKKKhykF-36" value="11" style="endArrow=none;dashed=1;html=1;rounded=0;opacity=70;verticalAlign=top;labelPosition=center;verticalLabelPosition=bottom;align=center;fontFamily=Arial;" parent="1" edge="1"> + <mxGeometry x="-1" width="50" height="50" relative="1" as="geometry"> + <mxPoint x="380" y="200" as="sourcePoint" /> + <mxPoint x="380" as="targetPoint" /> + <mxPoint as="offset" /> + </mxGeometry> + </mxCell> + <mxCell id="LZjEHdl2kUvcbKKKhykF-37" value="12" style="endArrow=none;dashed=1;html=1;rounded=0;opacity=70;verticalAlign=top;labelPosition=center;verticalLabelPosition=bottom;align=center;fontFamily=Arial;" parent="1" edge="1"> + <mxGeometry x="-1" width="50" height="50" relative="1" as="geometry"> + <mxPoint x="420" y="200" as="sourcePoint" /> + <mxPoint x="420" as="targetPoint" /> + <mxPoint as="offset" /> + </mxGeometry> + </mxCell> + <mxCell id="LZjEHdl2kUvcbKKKhykF-13" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;fontFamily=Arial;" parent="1" source="LZjEHdl2kUvcbKKKhykF-1" target="LZjEHdl2kUvcbKKKhykF-3" edge="1"> + <mxGeometry relative="1" as="geometry"> + <Array as="points"> + <mxPoint x="20" y="50" /> + </Array> + </mxGeometry> + </mxCell> + <mxCell id="LZjEHdl2kUvcbKKKhykF-19" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;fontFamily=Arial;" parent="1" source="LZjEHdl2kUvcbKKKhykF-1" target="LZjEHdl2kUvcbKKKhykF-4" edge="1"> + <mxGeometry relative="1" as="geometry" /> + </mxCell> + <mxCell id="LZjEHdl2kUvcbKKKhykF-1" value="Research" style="rounded=0;whiteSpace=wrap;html=1;align=left;spacingLeft=3;spacingRight=3;fontFamily=Arial;" parent="1" vertex="1"> + <mxGeometry x="10" y="10" width="150" height="20" as="geometry" /> + </mxCell> + <mxCell id="LZjEHdl2kUvcbKKKhykF-17" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;fontFamily=Arial;" parent="1" source="LZjEHdl2kUvcbKKKhykF-2" target="LZjEHdl2kUvcbKKKhykF-4" edge="1"> + <mxGeometry relative="1" as="geometry"> + <Array as="points"> + <mxPoint x="170" y="80" /> + <mxPoint x="170" y="20" /> + </Array> + </mxGeometry> + </mxCell> + <mxCell id="LZjEHdl2kUvcbKKKhykF-2" value="Planning" style="rounded=0;whiteSpace=wrap;html=1;align=left;spacingLeft=3;spacingRight=3;fontFamily=Arial;" parent="1" vertex="1"> + <mxGeometry x="80" y="70" width="80" height="20" as="geometry" /> + </mxCell> + <mxCell id="LZjEHdl2kUvcbKKKhykF-12" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;fontFamily=Arial;" parent="1" source="LZjEHdl2kUvcbKKKhykF-3" target="LZjEHdl2kUvcbKKKhykF-2" edge="1"> + <mxGeometry relative="1" as="geometry"> + <Array as="points"> + <mxPoint x="60" y="80" /> + </Array> + </mxGeometry> + </mxCell> + <mxCell id="LZjEHdl2kUvcbKKKhykF-18" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;fontFamily=Arial;" parent="1" source="LZjEHdl2kUvcbKKKhykF-3" target="LZjEHdl2kUvcbKKKhykF-4" edge="1"> + <mxGeometry relative="1" as="geometry"> + <Array as="points"> + <mxPoint x="170" y="50" /> + <mxPoint x="170" y="20" /> + </Array> + </mxGeometry> + </mxCell> + <mxCell id="LZjEHdl2kUvcbKKKhykF-3" value="Design" style="rounded=0;whiteSpace=wrap;html=1;align=left;spacingLeft=3;spacingRight=3;fontFamily=Arial;" parent="1" vertex="1"> + <mxGeometry x="40" y="40" width="120" height="20" as="geometry" /> + </mxCell> + <mxCell id="LZjEHdl2kUvcbKKKhykF-24" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;fontFamily=Arial;" parent="1" source="LZjEHdl2kUvcbKKKhykF-4" target="LZjEHdl2kUvcbKKKhykF-5" edge="1"> + <mxGeometry relative="1" as="geometry"> + <Array as="points"> + <mxPoint x="200" y="50" /> + </Array> + </mxGeometry> + </mxCell> + <mxCell id="LZjEHdl2kUvcbKKKhykF-25" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;fontFamily=Arial;" parent="1" source="LZjEHdl2kUvcbKKKhykF-4" target="LZjEHdl2kUvcbKKKhykF-6" edge="1"> + <mxGeometry relative="1" as="geometry"> + <Array as="points"> + <mxPoint x="200" y="80" /> + </Array> + </mxGeometry> + </mxCell> + <mxCell id="LZjEHdl2kUvcbKKKhykF-26" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;fontFamily=Arial;" parent="1" source="LZjEHdl2kUvcbKKKhykF-4" target="LZjEHdl2kUvcbKKKhykF-7" edge="1"> + <mxGeometry relative="1" as="geometry"> + <Array as="points"> + <mxPoint x="200" y="110" /> + </Array> + </mxGeometry> + </mxCell> + <mxCell id="LZjEHdl2kUvcbKKKhykF-27" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;fontFamily=Arial;" parent="1" source="LZjEHdl2kUvcbKKKhykF-4" target="LZjEHdl2kUvcbKKKhykF-8" edge="1"> + <mxGeometry relative="1" as="geometry"> + <Array as="points"> + <mxPoint x="200" y="140" /> + </Array> + </mxGeometry> + </mxCell> + <mxCell id="LZjEHdl2kUvcbKKKhykF-30" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;fontFamily=Arial;" parent="1" source="LZjEHdl2kUvcbKKKhykF-4" target="LZjEHdl2kUvcbKKKhykF-29" edge="1"> + <mxGeometry relative="1" as="geometry"> + <Array as="points"> + <mxPoint x="200" y="150" /> + <mxPoint x="170" y="150" /> + <mxPoint x="170" y="170" /> + </Array> + </mxGeometry> + </mxCell> + <mxCell id="LZjEHdl2kUvcbKKKhykF-4" value="Main controller development" style="rounded=0;whiteSpace=wrap;html=1;align=left;spacingLeft=3;spacingRight=3;fontFamily=Arial;" parent="1" vertex="1"> + <mxGeometry x="190" y="10" width="280" height="20" as="geometry" /> + </mxCell> + <mxCell id="LZjEHdl2kUvcbKKKhykF-20" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=1;entryY=0.5;entryDx=0;entryDy=0;fontFamily=Arial;" parent="1" source="LZjEHdl2kUvcbKKKhykF-5" target="LZjEHdl2kUvcbKKKhykF-4" edge="1"> + <mxGeometry relative="1" as="geometry"> + <Array as="points"> + <mxPoint x="490" y="50" /> + <mxPoint x="490" y="20" /> + </Array> + </mxGeometry> + </mxCell> + <mxCell id="LZjEHdl2kUvcbKKKhykF-5" value="Side 1 development" style="rounded=0;whiteSpace=wrap;html=1;align=left;spacingLeft=3;spacingRight=3;fontFamily=Arial;" parent="1" vertex="1"> + <mxGeometry x="220" y="40" width="120" height="20" as="geometry" /> + </mxCell> + <mxCell id="LZjEHdl2kUvcbKKKhykF-21" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=1;entryY=0.5;entryDx=0;entryDy=0;fontFamily=Arial;" parent="1" source="LZjEHdl2kUvcbKKKhykF-6" target="LZjEHdl2kUvcbKKKhykF-4" edge="1"> + <mxGeometry relative="1" as="geometry"> + <Array as="points"> + <mxPoint x="490" y="80" /> + <mxPoint x="490" y="20" /> + </Array> + </mxGeometry> + </mxCell> + <mxCell id="LZjEHdl2kUvcbKKKhykF-6" value="Side 2 development" style="rounded=0;whiteSpace=wrap;html=1;align=left;spacingLeft=3;spacingRight=3;fontFamily=Arial;" parent="1" vertex="1"> + <mxGeometry x="260" y="70" width="120" height="20" as="geometry" /> + </mxCell> + <mxCell id="LZjEHdl2kUvcbKKKhykF-22" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=1;entryY=0.5;entryDx=0;entryDy=0;fontFamily=Arial;" parent="1" source="LZjEHdl2kUvcbKKKhykF-7" target="LZjEHdl2kUvcbKKKhykF-4" edge="1"> + <mxGeometry relative="1" as="geometry"> + <Array as="points"> + <mxPoint x="490" y="110" /> + <mxPoint x="490" y="20" /> + </Array> + </mxGeometry> + </mxCell> + <mxCell id="LZjEHdl2kUvcbKKKhykF-7" value="Side 3 development" style="rounded=0;whiteSpace=wrap;html=1;align=left;spacingLeft=3;spacingRight=3;fontFamily=Arial;" parent="1" vertex="1"> + <mxGeometry x="300" y="100" width="120" height="20" as="geometry" /> + </mxCell> + <mxCell id="LZjEHdl2kUvcbKKKhykF-23" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=1;entryY=0.5;entryDx=0;entryDy=0;fontFamily=Arial;" parent="1" source="LZjEHdl2kUvcbKKKhykF-8" target="LZjEHdl2kUvcbKKKhykF-4" edge="1"> + <mxGeometry relative="1" as="geometry"> + <Array as="points"> + <mxPoint x="490" y="140" /> + <mxPoint x="490" y="20" /> + </Array> + </mxGeometry> + </mxCell> + <mxCell id="LZjEHdl2kUvcbKKKhykF-8" value="Side 4 development" style="rounded=0;whiteSpace=wrap;html=1;align=left;spacingLeft=3;spacingRight=3;fontFamily=Arial;" parent="1" vertex="1"> + <mxGeometry x="340" y="130" width="120" height="20" as="geometry" /> + </mxCell> + <mxCell id="LZjEHdl2kUvcbKKKhykF-31" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=1;entryY=0.5;entryDx=0;entryDy=0;fontFamily=Arial;" parent="1" source="LZjEHdl2kUvcbKKKhykF-29" target="LZjEHdl2kUvcbKKKhykF-4" edge="1"> + <mxGeometry relative="1" as="geometry"> + <Array as="points"> + <mxPoint x="500" y="170" /> + <mxPoint x="500" y="140" /> + <mxPoint x="490" y="140" /> + <mxPoint x="490" y="20" /> + </Array> + </mxGeometry> + </mxCell> + <mxCell id="LZjEHdl2kUvcbKKKhykF-40" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;fontFamily=Arial;" parent="1" source="LZjEHdl2kUvcbKKKhykF-29" target="LZjEHdl2kUvcbKKKhykF-39" edge="1"> + <mxGeometry relative="1" as="geometry"> + <Array as="points"> + <mxPoint x="510" y="170" /> + <mxPoint x="510" y="20" /> + </Array> + </mxGeometry> + </mxCell> + <mxCell id="LZjEHdl2kUvcbKKKhykF-42" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;fontFamily=Arial;" parent="1" source="LZjEHdl2kUvcbKKKhykF-29" target="LZjEHdl2kUvcbKKKhykF-41" edge="1"> + <mxGeometry relative="1" as="geometry" /> + </mxCell> + <mxCell id="LZjEHdl2kUvcbKKKhykF-29" value="Test development" style="rounded=0;whiteSpace=wrap;html=1;align=left;spacingLeft=3;spacingRight=3;fontFamily=Arial;" parent="1" vertex="1"> + <mxGeometry x="190" y="160" width="300" height="20" as="geometry" /> + </mxCell> + <mxCell id="LZjEHdl2kUvcbKKKhykF-32" value="week no." style="endArrow=classic;html=1;rounded=0;align=left;verticalAlign=top;endFill=1;fontFamily=Arial;" parent="1" edge="1"> + <mxGeometry x="-1" width="50" height="50" relative="1" as="geometry"> + <mxPoint y="200" as="sourcePoint" /> + <mxPoint x="640" y="200" as="targetPoint" /> + <mxPoint as="offset" /> + </mxGeometry> + </mxCell> + <mxCell id="LZjEHdl2kUvcbKKKhykF-39" value="Validation" style="rounded=0;whiteSpace=wrap;html=1;align=left;spacingLeft=3;spacingRight=3;fontFamily=Arial;" parent="1" vertex="1"> + <mxGeometry x="530" y="10" width="90" height="20" as="geometry" /> + </mxCell> + <mxCell id="LZjEHdl2kUvcbKKKhykF-41" value="Documentation" style="rounded=0;whiteSpace=wrap;html=1;align=left;spacingLeft=3;spacingRight=3;fontFamily=Arial;" parent="1" vertex="1"> + <mxGeometry x="530" y="40" width="90" height="20" as="geometry" /> + </mxCell> + </root> + </mxGraphModel> + </diagram> + <diagram id="n9IdmxlkFl1pJjqhBrGT" name="system-bus"> + <mxGraphModel dx="1422" dy="822" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0"> + <root> + <mxCell id="0" /> + <mxCell id="1" parent="0" /> + <mxCell id="EFqebEYhPqh4IJWovyJC-1" value="Puzzle bus<br>(I²C + power)" style="line;strokeWidth=4;html=1;perimeter=backbonePerimeter;points=[];outlineConnect=0;align=right;labelPosition=left;verticalLabelPosition=middle;verticalAlign=middle;spacingTop=0;spacing=8;fontFamily=Arial;" parent="1" vertex="1"> + <mxGeometry x="80" y="110" width="320" height="20" as="geometry" /> + </mxCell> + <mxCell id="EFqebEYhPqh4IJWovyJC-3" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;startArrow=classic;startFill=1;fontFamily=Arial;" parent="1" source="EFqebEYhPqh4IJWovyJC-2" target="EFqebEYhPqh4IJWovyJC-1" edge="1"> + <mxGeometry relative="1" as="geometry"> + <Array as="points"> + <mxPoint x="120" y="100" /> + <mxPoint x="120" y="100" /> + </Array> + </mxGeometry> + </mxCell> + <mxCell id="EFqebEYhPqh4IJWovyJC-2" value="Main controller" style="rounded=0;whiteSpace=wrap;html=1;fontFamily=Arial;" parent="1" vertex="1"> + <mxGeometry x="80" width="80" height="80" as="geometry" /> + </mxCell> + <mxCell id="EFqebEYhPqh4IJWovyJC-11" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;startArrow=classic;startFill=1;fontFamily=Arial;" parent="1" source="EFqebEYhPqh4IJWovyJC-4" target="EFqebEYhPqh4IJWovyJC-1" edge="1"> + <mxGeometry relative="1" as="geometry"> + <Array as="points"> + <mxPoint x="240" y="140" /> + <mxPoint x="240" y="140" /> + </Array> + </mxGeometry> + </mxCell> + <mxCell id="EFqebEYhPqh4IJWovyJC-4" value="Puzzle module 3<br>(neotrellis)" style="rounded=0;whiteSpace=wrap;html=1;fontFamily=Arial;" parent="1" vertex="1"> + <mxGeometry x="200" y="160" width="80" height="80" as="geometry" /> + </mxCell> + <mxCell id="EFqebEYhPqh4IJWovyJC-10" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;startArrow=classic;startFill=1;fontFamily=Arial;" parent="1" source="EFqebEYhPqh4IJWovyJC-5" target="EFqebEYhPqh4IJWovyJC-1" edge="1"> + <mxGeometry relative="1" as="geometry"> + <Array as="points"> + <mxPoint x="360" y="150" /> + <mxPoint x="360" y="150" /> + </Array> + </mxGeometry> + </mxCell> + <mxCell id="EFqebEYhPqh4IJWovyJC-5" value="Puzzle module 4<br style="border-color: var(--border-color);">(safe)" style="rounded=0;whiteSpace=wrap;html=1;fontFamily=Arial;" parent="1" vertex="1"> + <mxGeometry x="320" y="160" width="80" height="80" as="geometry" /> + </mxCell> + <mxCell id="EFqebEYhPqh4IJWovyJC-8" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;startArrow=classic;startFill=1;fontFamily=Arial;" parent="1" source="EFqebEYhPqh4IJWovyJC-6" target="EFqebEYhPqh4IJWovyJC-1" edge="1"> + <mxGeometry relative="1" as="geometry"> + <Array as="points"> + <mxPoint x="240" y="100" /> + <mxPoint x="240" y="100" /> + </Array> + </mxGeometry> + </mxCell> + <mxCell id="EFqebEYhPqh4IJWovyJC-6" value="Puzzle module 1<br>(software)" style="rounded=0;whiteSpace=wrap;html=1;fontFamily=Arial;" parent="1" vertex="1"> + <mxGeometry x="200" width="80" height="80" as="geometry" /> + </mxCell> + <mxCell id="EFqebEYhPqh4IJWovyJC-9" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;startArrow=classic;startFill=1;fontFamily=Arial;" parent="1" source="EFqebEYhPqh4IJWovyJC-7" target="EFqebEYhPqh4IJWovyJC-1" edge="1"> + <mxGeometry relative="1" as="geometry"> + <Array as="points"> + <mxPoint x="360" y="100" /> + <mxPoint x="360" y="100" /> + </Array> + </mxGeometry> + </mxCell> + <mxCell id="EFqebEYhPqh4IJWovyJC-7" value="Puzzle module 2<br style="border-color: var(--border-color);">(hardware)" style="rounded=0;whiteSpace=wrap;html=1;fontFamily=Arial;" parent="1" vertex="1"> + <mxGeometry x="320" width="80" height="80" as="geometry" /> + </mxCell> + <mxCell id="EFqebEYhPqh4IJWovyJC-13" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;fontFamily=Arial;" parent="1" source="EFqebEYhPqh4IJWovyJC-12" target="EFqebEYhPqh4IJWovyJC-1" edge="1"> + <mxGeometry relative="1" as="geometry"> + <Array as="points"> + <mxPoint x="120" y="130" /> + <mxPoint x="120" y="130" /> + </Array> + </mxGeometry> + </mxCell> + <mxCell id="EFqebEYhPqh4IJWovyJC-12" value="Power supply<br>(battery pack)" style="rounded=0;whiteSpace=wrap;html=1;fontFamily=Arial;" parent="1" vertex="1"> + <mxGeometry x="80" y="160" width="80" height="80" as="geometry" /> + </mxCell> + </root> + </mxGraphModel> + </diagram> + <diagram id="h3DvyZ0KajeRp1tPME5F" name="system-top"> + <mxGraphModel dx="1422" dy="822" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0"> + <root> + <mxCell id="0" /> + <mxCell id="1" parent="0" /> + <mxCell id="nQz1uFQE7kBfjPpRPLva-4" value="Puzzle outputs" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;labelPosition=right;verticalLabelPosition=middle;align=left;verticalAlign=middle;spacing=8;fontFamily=Arial;" parent="1" source="nQz1uFQE7kBfjPpRPLva-1" target="nQz1uFQE7kBfjPpRPLva-3" edge="1"> + <mxGeometry x="-0.8049" y="-20" relative="1" as="geometry"> + <Array as="points"> + <mxPoint x="230" y="110" /> + <mxPoint x="230" y="30" /> + </Array> + <mxPoint as="offset" /> + </mxGeometry> + </mxCell> + <mxCell id="rSJYnGe5hIWkDpeJhH4a-6" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;fontFamily=Arial;" parent="1" source="nQz1uFQE7kBfjPpRPLva-1" target="rSJYnGe5hIWkDpeJhH4a-5" edge="1"> + <mxGeometry relative="1" as="geometry"> + <Array as="points"> + <mxPoint x="220" y="150" /> + <mxPoint x="220" y="150" /> + </Array> + </mxGeometry> + </mxCell> + <mxCell id="nQz1uFQE7kBfjPpRPLva-1" value="Puzzle box" style="rounded=0;whiteSpace=wrap;html=1;fontFamily=Arial;" parent="1" vertex="1"> + <mxGeometry x="110" y="90" width="80" height="80" as="geometry" /> + </mxCell> + <mxCell id="nQz1uFQE7kBfjPpRPLva-2" value="Puzzle inputs" style="endArrow=classic;html=1;rounded=0;edgeStyle=orthogonalEdgeStyle;elbow=vertical;labelPosition=left;verticalLabelPosition=middle;align=right;verticalAlign=middle;spacing=8;fontFamily=Arial;" parent="1" source="nQz1uFQE7kBfjPpRPLva-3" target="nQz1uFQE7kBfjPpRPLva-1" edge="1"> + <mxGeometry x="0.6098" width="50" height="50" relative="1" as="geometry"> + <mxPoint x="70" y="110" as="sourcePoint" /> + <mxPoint x="120" y="130" as="targetPoint" /> + <Array as="points"> + <mxPoint x="70" y="30" /> + <mxPoint x="70" y="110" /> + </Array> + <mxPoint as="offset" /> + </mxGeometry> + </mxCell> + <mxCell id="nQz1uFQE7kBfjPpRPLva-3" value="Player(s)" style="shape=umlActor;verticalLabelPosition=bottom;verticalAlign=top;html=1;outlineConnect=0;fontFamily=Arial;" parent="1" vertex="1"> + <mxGeometry x="135" width="30" height="60" as="geometry" /> + </mxCell> + <mxCell id="nQz1uFQE7kBfjPpRPLva-6" value="Charger" style="endArrow=classic;html=1;rounded=0;edgeStyle=elbowEdgeStyle;elbow=vertical;labelPosition=left;verticalLabelPosition=middle;align=right;verticalAlign=middle;dashed=1;spacing=8;fontFamily=Arial;" parent="1" target="nQz1uFQE7kBfjPpRPLva-1" edge="1"> + <mxGeometry x="-1" width="50" height="50" relative="1" as="geometry"> + <mxPoint x="70" y="150" as="sourcePoint" /> + <mxPoint x="90" y="150.2" as="targetPoint" /> + <mxPoint as="offset" /> + </mxGeometry> + </mxCell> + <mxCell id="rSJYnGe5hIWkDpeJhH4a-4" value="Wi-Fi" style="shape=link;html=1;rounded=0;edgeStyle=orthogonalEdgeStyle;dashed=1;labelPosition=center;verticalLabelPosition=bottom;align=center;verticalAlign=top;fontFamily=Arial;" parent="1" source="nQz1uFQE7kBfjPpRPLva-1" edge="1"> + <mxGeometry x="1" width="100" relative="1" as="geometry"> + <mxPoint x="120" y="210" as="sourcePoint" /> + <mxPoint x="150" y="210" as="targetPoint" /> + <mxPoint as="offset" /> + </mxGeometry> + </mxCell> + <mxCell id="rSJYnGe5hIWkDpeJhH4a-5" value="Bomb" style="rounded=0;whiteSpace=wrap;html=1;dashed=1;fontFamily=Arial;" parent="1" vertex="1"> + <mxGeometry x="310" y="90" width="80" height="80" as="geometry" /> + </mxCell> + </root> + </mxGraphModel> + </diagram> + <diagram id="V5677hnVqFOUu4LEfIlK" name="main-controller-top"> + <mxGraphModel dx="1422" dy="822" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0"> + <root> + <mxCell id="0" /> + <mxCell id="1" parent="0" /> + <mxCell id="E0vY4Tb27X8IZZSuRO_E-1" value="Main controller" style="rounded=0;whiteSpace=wrap;html=1;fontFamily=Arial;" parent="1" vertex="1"> + <mxGeometry x="70" y="60" width="80" height="80" as="geometry" /> + </mxCell> + <mxCell id="E0vY4Tb27X8IZZSuRO_E-2" value="" style="endArrow=classic;startArrow=classic;html=1;rounded=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;fontFamily=Arial;" parent="1" source="_QeJvxVuYCE5Bx7Zj5Sh-1" target="E0vY4Tb27X8IZZSuRO_E-1" edge="1"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="110" y="190" as="sourcePoint" /> + <mxPoint x="140" y="110" as="targetPoint" /> + </mxGeometry> + </mxCell> + <mxCell id="_QeJvxVuYCE5Bx7Zj5Sh-1" value="Puzzle bus" style="line;strokeWidth=4;html=1;perimeter=backbonePerimeter;points=[];outlineConnect=0;align=right;labelPosition=left;verticalLabelPosition=middle;verticalAlign=middle;spacingTop=0;spacing=8;fontFamily=Arial;" parent="1" vertex="1"> + <mxGeometry x="70" y="170" width="80" height="20" as="geometry" /> + </mxCell> + <mxCell id="eXW24AF1M1Q80XVxQB3d-1" value="Wi-Fi" style="shape=link;html=1;rounded=0;edgeStyle=orthogonalEdgeStyle;dashed=1;labelPosition=center;verticalLabelPosition=top;align=center;verticalAlign=bottom;fontFamily=Arial;" parent="1" source="E0vY4Tb27X8IZZSuRO_E-1" edge="1"> + <mxGeometry x="1" width="100" relative="1" as="geometry"> + <mxPoint x="160" y="30" as="sourcePoint" /> + <mxPoint x="110" y="20" as="targetPoint" /> + <mxPoint as="offset" /> + </mxGeometry> + </mxCell> + </root> + </mxGraphModel> + </diagram> + <diagram name="puzzle-module-top" id="5pAH2Yn7Y32GPKnI9U_5"> + <mxGraphModel dx="1422" dy="822" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0"> + <root> + <mxCell id="BVMe8izj958RTkFm3z60-0" /> + <mxCell id="BVMe8izj958RTkFm3z60-1" parent="BVMe8izj958RTkFm3z60-0" /> + <mxCell id="BVMe8izj958RTkFm3z60-2" value="Puzzle module" style="rounded=0;whiteSpace=wrap;html=1;fontFamily=Arial;" parent="BVMe8izj958RTkFm3z60-1" vertex="1"> + <mxGeometry x="120" y="10" width="80" height="80" as="geometry" /> + </mxCell> + <mxCell id="BVMe8izj958RTkFm3z60-3" value="" style="endArrow=classic;startArrow=classic;html=1;rounded=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;fontFamily=Arial;" parent="BVMe8izj958RTkFm3z60-1" source="BVMe8izj958RTkFm3z60-4" target="BVMe8izj958RTkFm3z60-2" edge="1"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="160" y="140" as="sourcePoint" /> + <mxPoint x="190" y="60" as="targetPoint" /> + </mxGeometry> + </mxCell> + <mxCell id="BVMe8izj958RTkFm3z60-4" value="Puzzle bus" style="line;strokeWidth=4;html=1;perimeter=backbonePerimeter;points=[];outlineConnect=0;align=right;labelPosition=left;verticalLabelPosition=middle;verticalAlign=middle;spacingTop=0;spacing=8;fontFamily=Arial;" parent="BVMe8izj958RTkFm3z60-1" vertex="1"> + <mxGeometry x="120" y="120" width="80" height="20" as="geometry" /> + </mxCell> + <mxCell id="tTlcU9ZqAkPjyI4FRPs--0" value="Puzzle outputs" style="endArrow=classic;html=1;rounded=0;edgeStyle=orthogonalEdgeStyle;labelPosition=right;verticalLabelPosition=middle;align=left;verticalAlign=middle;spacing=8;fontFamily=Arial;" parent="BVMe8izj958RTkFm3z60-1" source="BVMe8izj958RTkFm3z60-2" edge="1"> + <mxGeometry x="1" width="50" height="50" relative="1" as="geometry"> + <mxPoint x="150" y="130" as="sourcePoint" /> + <mxPoint x="240" y="50" as="targetPoint" /> + <mxPoint as="offset" /> + </mxGeometry> + </mxCell> + <mxCell id="tTlcU9ZqAkPjyI4FRPs--1" value="Puzzle inputs" style="endArrow=classic;html=1;rounded=0;edgeStyle=orthogonalEdgeStyle;labelPosition=left;verticalLabelPosition=middle;align=right;verticalAlign=middle;spacing=8;fontFamily=Arial;" parent="BVMe8izj958RTkFm3z60-1" target="BVMe8izj958RTkFm3z60-2" edge="1"> + <mxGeometry x="-1" width="50" height="50" relative="1" as="geometry"> + <mxPoint x="80" y="50" as="sourcePoint" /> + <mxPoint x="270" y="60" as="targetPoint" /> + <mxPoint as="offset" /> + </mxGeometry> + </mxCell> + </root> + </mxGraphModel> + </diagram> + <diagram name="power-supply-top" id="OyUTR4VJhJkLCMkp9sBg"> + <mxGraphModel dx="1422" dy="822" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0"> + <root> + <mxCell id="JhLPvhhKfH0WU0wtARFb-0" /> + <mxCell id="JhLPvhhKfH0WU0wtARFb-1" parent="JhLPvhhKfH0WU0wtARFb-0" /> + <mxCell id="JhLPvhhKfH0WU0wtARFb-2" value="Power supply" style="rounded=0;whiteSpace=wrap;html=1;fontFamily=Arial;" parent="JhLPvhhKfH0WU0wtARFb-1" vertex="1"> + <mxGeometry x="120" y="10" width="80" height="80" as="geometry" /> + </mxCell> + <mxCell id="JhLPvhhKfH0WU0wtARFb-3" value="" style="endArrow=none;startArrow=classic;html=1;rounded=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;fontFamily=Arial;endFill=0;" parent="JhLPvhhKfH0WU0wtARFb-1" source="JhLPvhhKfH0WU0wtARFb-4" target="JhLPvhhKfH0WU0wtARFb-2" edge="1"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="160" y="140" as="sourcePoint" /> + <mxPoint x="190" y="60" as="targetPoint" /> + </mxGeometry> + </mxCell> + <mxCell id="JhLPvhhKfH0WU0wtARFb-4" value="Puzzle bus" style="line;strokeWidth=4;html=1;perimeter=backbonePerimeter;points=[];outlineConnect=0;align=right;labelPosition=left;verticalLabelPosition=middle;verticalAlign=middle;spacingTop=0;spacing=8;fontFamily=Arial;" parent="JhLPvhhKfH0WU0wtARFb-1" vertex="1"> + <mxGeometry x="120" y="120" width="80" height="20" as="geometry" /> + </mxCell> + <mxCell id="G88CfNIh1Ql9ssuBFCwE-0" value="Charger" style="endArrow=classic;html=1;rounded=0;edgeStyle=elbowEdgeStyle;elbow=vertical;labelPosition=left;verticalLabelPosition=middle;align=right;verticalAlign=middle;dashed=1;spacing=8;fontFamily=Arial;" parent="JhLPvhhKfH0WU0wtARFb-1" target="JhLPvhhKfH0WU0wtARFb-2" edge="1"> + <mxGeometry x="-1" width="50" height="50" relative="1" as="geometry"> + <mxPoint x="80" y="50" as="sourcePoint" /> + <mxPoint x="110" y="150" as="targetPoint" /> + <mxPoint as="offset" /> + </mxGeometry> + </mxCell> + </root> + </mxGraphModel> + </diagram> + <diagram id="tQJt-i1klPodeKevl6yF" name="puzzle-module-common-state"> + <mxGraphModel dx="1422" dy="822" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0"> + <root> + <mxCell id="0" /> + <mxCell id="1" parent="0" /> + <mxCell id="5xofdATqJuVrBNkdsEzn-2" value="Uninitialized" style="ellipse;whiteSpace=wrap;html=1;fontFamily=Arial;" parent="1" vertex="1"> + <mxGeometry width="80" height="80" as="geometry" /> + </mxCell> + <mxCell id="5xofdATqJuVrBNkdsEzn-6" style="rounded=0;orthogonalLoop=1;jettySize=auto;html=1;fontFamily=Arial;" parent="1" source="5xofdATqJuVrBNkdsEzn-3" target="5xofdATqJuVrBNkdsEzn-4" edge="1"> + <mxGeometry relative="1" as="geometry" /> + </mxCell> + <mxCell id="5xofdATqJuVrBNkdsEzn-3" value="Reset" style="ellipse;whiteSpace=wrap;html=1;fontFamily=Arial;" parent="1" vertex="1"> + <mxGeometry x="100" width="60" height="60" as="geometry" /> + </mxCell> + <mxCell id="5xofdATqJuVrBNkdsEzn-7" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;fontFamily=Arial;" parent="1" source="5xofdATqJuVrBNkdsEzn-4" target="5xofdATqJuVrBNkdsEzn-5" edge="1"> + <mxGeometry relative="1" as="geometry" /> + </mxCell> + <mxCell id="5xofdATqJuVrBNkdsEzn-4" value="Playing" style="ellipse;whiteSpace=wrap;html=1;fontFamily=Arial;" parent="1" vertex="1"> + <mxGeometry x="100" y="80" width="60" height="60" as="geometry" /> + </mxCell> + <mxCell id="5xofdATqJuVrBNkdsEzn-5" value="Solved" style="ellipse;whiteSpace=wrap;html=1;fontFamily=Arial;" parent="1" vertex="1"> + <mxGeometry x="100" y="160" width="60" height="60" as="geometry" /> + </mxCell> + </root> + </mxGraphModel> + </diagram> + <diagram id="3POUz5nivpBRA6uf3okY" name="main-controller-state"> + <mxGraphModel dx="1434" dy="854" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0"> + <root> + <mxCell id="0" /> + <mxCell id="1" parent="0" /> + <mxCell id="7O8kuJQz2iaT31b0g9wK-1" style="rounded=0;orthogonalLoop=1;jettySize=auto;html=1;fontFamily=Arial;curved=1;" parent="1" source="7O8kuJQz2iaT31b0g9wK-2" target="7O8kuJQz2iaT31b0g9wK-4" edge="1"> + <mxGeometry relative="1" as="geometry"> + <Array as="points"> + <mxPoint x="70" y="60" /> + </Array> + </mxGeometry> + </mxCell> + <mxCell id="7O8kuJQz2iaT31b0g9wK-2" value="Reset" style="ellipse;whiteSpace=wrap;html=1;fontFamily=Arial;" parent="1" vertex="1"> + <mxGeometry width="60" height="60" as="geometry" /> + </mxCell> + <mxCell id="7O8kuJQz2iaT31b0g9wK-4" value="Playing" style="ellipse;whiteSpace=wrap;html=1;fontFamily=Arial;" parent="1" vertex="1"> + <mxGeometry x="80" width="60" height="60" as="geometry" /> + </mxCell> + <mxCell id="7O8kuJQz2iaT31b0g9wK-5" value="Solved" style="ellipse;whiteSpace=wrap;html=1;fontFamily=Arial;" parent="1" vertex="1"> + <mxGeometry x="160" width="60" height="60" as="geometry" /> + </mxCell> + <mxCell id="7O8kuJQz2iaT31b0g9wK-6" style="rounded=0;orthogonalLoop=1;jettySize=auto;html=1;fontFamily=Arial;curved=1;" parent="1" source="7O8kuJQz2iaT31b0g9wK-4" target="7O8kuJQz2iaT31b0g9wK-2" edge="1"> + <mxGeometry relative="1" as="geometry"> + <mxPoint x="55" y="66" as="sourcePoint" /> + <mxPoint x="55" y="114" as="targetPoint" /> + <Array as="points"> + <mxPoint x="70" /> + </Array> + </mxGeometry> + </mxCell> + <mxCell id="7O8kuJQz2iaT31b0g9wK-7" style="rounded=0;orthogonalLoop=1;jettySize=auto;html=1;fontFamily=Arial;curved=1;" parent="1" source="7O8kuJQz2iaT31b0g9wK-4" target="7O8kuJQz2iaT31b0g9wK-5" edge="1"> + <mxGeometry relative="1" as="geometry"> + <mxPoint x="45" y="140" as="sourcePoint" /> + <mxPoint x="45" y="188" as="targetPoint" /> + <Array as="points"> + <mxPoint x="150" y="60" /> + </Array> + </mxGeometry> + </mxCell> + <mxCell id="7O8kuJQz2iaT31b0g9wK-8" style="rounded=0;orthogonalLoop=1;jettySize=auto;html=1;fontFamily=Arial;curved=1;" parent="1" source="7O8kuJQz2iaT31b0g9wK-5" target="7O8kuJQz2iaT31b0g9wK-4" edge="1"> + <mxGeometry relative="1" as="geometry"> + <mxPoint x="15" y="188" as="sourcePoint" /> + <mxPoint x="15" y="140" as="targetPoint" /> + <Array as="points"> + <mxPoint x="150" /> + </Array> + </mxGeometry> + </mxCell> + </root> + </mxGraphModel> + </diagram> + <diagram id="Rp6IhanA7F14BRU2Iihj" name="sequence-puzzle-module-init"> + <mxGraphModel dx="683" dy="407" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0"> + <root> + <mxCell id="0" /> + <mxCell id="1" parent="0" /> + <mxCell id="FgPCU9YjluK7leEd9PPU-4" value="Main" style="shape=umlLifeline;perimeter=lifelinePerimeter;whiteSpace=wrap;html=1;container=1;dropTarget=0;collapsible=0;recursiveResize=0;outlineConnect=0;portConstraint=eastwest;newEdgeStyle={"edgeStyle":"elbowEdgeStyle","elbow":"vertical","curved":0,"rounded":0};size=20;fontFamily=Arial;" parent="1" vertex="1"> + <mxGeometry x="20" width="40" height="150" as="geometry" /> + </mxCell> + <mxCell id="FgPCU9YjluK7leEd9PPU-9" value="" style="html=1;points=[[0,0,0,0,5],[0,1,0,0,-5],[1,0,0,0,5],[1,1,0,0,-5]];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={"curved":0,"rounded":0};fontFamily=Arial;" parent="FgPCU9YjluK7leEd9PPU-4" vertex="1"> + <mxGeometry x="15" y="50" width="10" height="100" as="geometry" /> + </mxCell> + <mxCell id="FgPCU9YjluK7leEd9PPU-11" value="update" style="edgeStyle=elbowEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;elbow=vertical;fontFamily=Arial;" parent="1" source="FgPCU9YjluK7leEd9PPU-5" target="FgPCU9YjluK7leEd9PPU-9" edge="1"> + <mxGeometry relative="1" as="geometry"> + <Array as="points"> + <mxPoint x="120" y="70" /> + <mxPoint x="80" y="60" /> + </Array> + </mxGeometry> + </mxCell> + <mxCell id="FgPCU9YjluK7leEd9PPU-5" value="A" style="shape=umlLifeline;perimeter=lifelinePerimeter;whiteSpace=wrap;html=1;container=1;dropTarget=0;collapsible=0;recursiveResize=0;outlineConnect=0;portConstraint=eastwest;newEdgeStyle={"edgeStyle":"elbowEdgeStyle","elbow":"vertical","curved":0,"rounded":0};size=20;fontFamily=Arial;" parent="1" vertex="1"> + <mxGeometry x="130" width="20" height="150" as="geometry" /> + </mxCell> + <mxCell id="FgPCU9YjluK7leEd9PPU-10" value="" style="html=1;points=[[0,0,0,0,5],[0,1,0,0,-5],[1,0,0,0,5],[1,1,0,0,-5]];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={"curved":0,"rounded":0};fontFamily=Arial;" parent="FgPCU9YjluK7leEd9PPU-5" vertex="1"> + <mxGeometry x="5" y="130" width="10" height="20" as="geometry" /> + </mxCell> + <mxCell id="AQniHDs8FXXc9mSBzi3H-1" value="state := reset" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;elbow=vertical;fontFamily=Arial;labelPosition=right;verticalLabelPosition=middle;align=left;verticalAlign=middle;" edge="1" parent="FgPCU9YjluK7leEd9PPU-5" source="FgPCU9YjluK7leEd9PPU-5" target="FgPCU9YjluK7leEd9PPU-10"> + <mxGeometry x="0.8571" y="-10" relative="1" as="geometry"> + <mxPoint x="40" y="110" as="sourcePoint" /> + <mxPoint x="40" y="130" as="targetPoint" /> + <Array as="points"> + <mxPoint x="40" y="110" /> + <mxPoint x="40" y="130" /> + </Array> + <mxPoint as="offset" /> + </mxGeometry> + </mxCell> + <mxCell id="FgPCU9YjluK7leEd9PPU-12" value="state := reset" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;curved=0;fontFamily=Arial;" parent="1" source="FgPCU9YjluK7leEd9PPU-9" target="FgPCU9YjluK7leEd9PPU-5" edge="1"> + <mxGeometry relative="1" as="geometry"> + <Array as="points"> + <mxPoint x="90" y="90" /> + <mxPoint x="90" y="90" /> + </Array> + </mxGeometry> + </mxCell> + <mxCell id="FgPCU9YjluK7leEd9PPU-13" value="power on" style="endArrow=none;html=1;endSize=12;startArrow=none;startSize=14;startFill=0;edgeStyle=orthogonalEdgeStyle;align=right;verticalAlign=bottom;endFill=0;rounded=0;labelPosition=left;verticalLabelPosition=top;fontFamily=Arial;dashed=1;" parent="1" edge="1"> + <mxGeometry x="1" relative="1" as="geometry"> + <mxPoint y="50" as="sourcePoint" /> + <mxPoint x="200" y="50" as="targetPoint" /> + <mxPoint as="offset" /> + </mxGeometry> + </mxCell> + <mxCell id="Yg9NV-g9DN27sBcjv-cp-1" value="update" style="edgeStyle=elbowEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;elbow=vertical;fontFamily=Arial;" edge="1" parent="1" source="FgPCU9YjluK7leEd9PPU-10" target="FgPCU9YjluK7leEd9PPU-9"> + <mxGeometry relative="1" as="geometry"> + <Array as="points"> + <mxPoint x="120" y="140" /> + <mxPoint x="80" y="110" /> + </Array> + <mxPoint x="140" y="120" as="sourcePoint" /> + <mxPoint x="45" y="120" as="targetPoint" /> + </mxGeometry> + </mxCell> + </root> + </mxGraphModel> + </diagram> + <diagram name="sequence-puzzle-finish" id="c22ujPTqKurZEIIZxMnS"> + <mxGraphModel dx="989" dy="589" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0"> + <root> + <mxCell id="Zx0YANjdZ0Bqq7mGd-Li-0" /> + <mxCell id="Zx0YANjdZ0Bqq7mGd-Li-1" parent="Zx0YANjdZ0Bqq7mGd-Li-0" /> + <mxCell id="Zx0YANjdZ0Bqq7mGd-Li-2" value="Main" style="shape=umlLifeline;perimeter=lifelinePerimeter;whiteSpace=wrap;html=1;container=1;dropTarget=0;collapsible=0;recursiveResize=0;outlineConnect=0;portConstraint=eastwest;newEdgeStyle={"edgeStyle":"elbowEdgeStyle","elbow":"vertical","curved":0,"rounded":0};size=20;fontFamily=Arial;" parent="Zx0YANjdZ0Bqq7mGd-Li-1" vertex="1"> + <mxGeometry x="20" width="40" height="320" as="geometry" /> + </mxCell> + <mxCell id="Zx0YANjdZ0Bqq7mGd-Li-3" value="" style="html=1;points=[[0,0,0,0,5],[0,1,0,0,-5],[1,0,0,0,5],[1,1,0,0,-5]];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={"curved":0,"rounded":0};fontFamily=Arial;" parent="Zx0YANjdZ0Bqq7mGd-Li-2" vertex="1"> + <mxGeometry x="15" y="30" width="10" height="290" as="geometry" /> + </mxCell> + <mxCell id="mC0UOUuOwT6DkYXV2a_g-6" value="state := solved" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;elbow=vertical;fontFamily=Arial;labelPosition=right;verticalLabelPosition=middle;align=left;verticalAlign=middle;" parent="Zx0YANjdZ0Bqq7mGd-Li-2" source="Zx0YANjdZ0Bqq7mGd-Li-3" target="Zx0YANjdZ0Bqq7mGd-Li-3" edge="1"> + <mxGeometry x="0.8571" y="-10" relative="1" as="geometry"> + <mxPoint x="25" y="130" as="sourcePoint" /> + <mxPoint x="25" y="150" as="targetPoint" /> + <Array as="points"> + <mxPoint x="50" y="180" /> + <mxPoint x="50" y="200" /> + </Array> + <mxPoint as="offset" /> + </mxGeometry> + </mxCell> + <mxCell id="Zx0YANjdZ0Bqq7mGd-Li-5" value="A" style="shape=umlLifeline;perimeter=lifelinePerimeter;whiteSpace=wrap;html=1;container=1;dropTarget=0;collapsible=0;recursiveResize=0;outlineConnect=0;portConstraint=eastwest;newEdgeStyle={"edgeStyle":"elbowEdgeStyle","elbow":"vertical","curved":0,"rounded":0};size=20;fontFamily=Arial;" parent="Zx0YANjdZ0Bqq7mGd-Li-1" vertex="1"> + <mxGeometry x="130" width="20" height="320" as="geometry" /> + </mxCell> + <mxCell id="Zx0YANjdZ0Bqq7mGd-Li-6" value="" style="html=1;points=[[0,0,0,0,5],[0,1,0,0,-5],[1,0,0,0,5],[1,1,0,0,-5]];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={"curved":0,"rounded":0};fontFamily=Arial;" parent="Zx0YANjdZ0Bqq7mGd-Li-5" vertex="1"> + <mxGeometry x="5" y="30" width="10" height="290" as="geometry" /> + </mxCell> + <mxCell id="mC0UOUuOwT6DkYXV2a_g-1" value="state := solved" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;elbow=vertical;fontFamily=Arial;labelPosition=right;verticalLabelPosition=middle;align=left;verticalAlign=middle;" parent="Zx0YANjdZ0Bqq7mGd-Li-5" source="Zx0YANjdZ0Bqq7mGd-Li-6" target="Zx0YANjdZ0Bqq7mGd-Li-6" edge="1"> + <mxGeometry x="0.8571" y="-10" relative="1" as="geometry"> + <mxPoint x="40" y="60" as="sourcePoint" /> + <mxPoint x="15" y="60" as="targetPoint" /> + <Array as="points"> + <mxPoint x="40" y="50" /> + <mxPoint x="40" y="70" /> + </Array> + <mxPoint as="offset" /> + </mxGeometry> + </mxCell> + <mxCell id="p1oUzKR6Frcw5nPdyHcq-0" value="B" style="shape=umlLifeline;perimeter=lifelinePerimeter;whiteSpace=wrap;html=1;container=1;dropTarget=0;collapsible=0;recursiveResize=0;outlineConnect=0;portConstraint=eastwest;newEdgeStyle={"edgeStyle":"elbowEdgeStyle","elbow":"vertical","curved":0,"rounded":0};size=20;fontFamily=Arial;" parent="Zx0YANjdZ0Bqq7mGd-Li-1" vertex="1"> + <mxGeometry x="230" width="20" height="320" as="geometry" /> + </mxCell> + <mxCell id="p1oUzKR6Frcw5nPdyHcq-1" value="" style="html=1;points=[[0,0,0,0,5],[0,1,0,0,-5],[1,0,0,0,5],[1,1,0,0,-5]];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={"curved":0,"rounded":0};fontFamily=Arial;" parent="p1oUzKR6Frcw5nPdyHcq-0" vertex="1"> + <mxGeometry x="5" y="30" width="10" height="290" as="geometry" /> + </mxCell> + <mxCell id="mC0UOUuOwT6DkYXV2a_g-2" value="update" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;elbow=vertical;fontFamily=Arial;labelPosition=center;verticalLabelPosition=middle;align=center;verticalAlign=middle;" parent="Zx0YANjdZ0Bqq7mGd-Li-1" source="Zx0YANjdZ0Bqq7mGd-Li-6" target="Zx0YANjdZ0Bqq7mGd-Li-3" edge="1"> + <mxGeometry relative="1" as="geometry"> + <mxPoint x="155" y="45" as="sourcePoint" /> + <mxPoint x="155" y="70" as="targetPoint" /> + <Array as="points"> + <mxPoint x="90" y="80" /> + <mxPoint x="90" y="80" /> + </Array> + <mxPoint as="offset" /> + </mxGeometry> + </mxCell> + <mxCell id="mC0UOUuOwT6DkYXV2a_g-3" value="update" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;elbow=vertical;fontFamily=Arial;labelPosition=center;verticalLabelPosition=middle;align=center;verticalAlign=middle;" parent="Zx0YANjdZ0Bqq7mGd-Li-1" source="Zx0YANjdZ0Bqq7mGd-Li-3" target="p1oUzKR6Frcw5nPdyHcq-1" edge="1"> + <mxGeometry x="-0.5263" relative="1" as="geometry"> + <mxPoint x="45" y="190" as="sourcePoint" /> + <mxPoint x="235" y="190" as="targetPoint" /> + <Array as="points"> + <mxPoint x="130" y="240" /> + <mxPoint x="130" y="240" /> + </Array> + <mxPoint as="offset" /> + </mxGeometry> + </mxCell> + <mxCell id="mC0UOUuOwT6DkYXV2a_g-4" value="main state?" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;elbow=vertical;fontFamily=Arial;labelPosition=center;verticalLabelPosition=middle;align=center;verticalAlign=middle;" parent="Zx0YANjdZ0Bqq7mGd-Li-1" source="p1oUzKR6Frcw5nPdyHcq-1" target="Zx0YANjdZ0Bqq7mGd-Li-3" edge="1"> + <mxGeometry x="-0.5263" relative="1" as="geometry"> + <mxPoint x="235" y="210" as="sourcePoint" /> + <mxPoint x="45" y="210" as="targetPoint" /> + <Array as="points"> + <mxPoint x="130" y="280" /> + <mxPoint x="130" y="280" /> + </Array> + <mxPoint as="offset" /> + </mxGeometry> + </mxCell> + <mxCell id="mC0UOUuOwT6DkYXV2a_g-5" value="= solved" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;elbow=vertical;fontFamily=Arial;labelPosition=center;verticalLabelPosition=middle;align=center;verticalAlign=middle;" parent="Zx0YANjdZ0Bqq7mGd-Li-1" source="Zx0YANjdZ0Bqq7mGd-Li-3" target="p1oUzKR6Frcw5nPdyHcq-1" edge="1"> + <mxGeometry x="0.5263" relative="1" as="geometry"> + <mxPoint x="45" y="230" as="sourcePoint" /> + <mxPoint x="235" y="230" as="targetPoint" /> + <Array as="points"> + <mxPoint x="130" y="300" /> + <mxPoint x="130" y="300" /> + </Array> + <mxPoint as="offset" /> + </mxGeometry> + </mxCell> + <mxCell id="mC0UOUuOwT6DkYXV2a_g-7" value="update" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;elbow=vertical;fontFamily=Arial;labelPosition=center;verticalLabelPosition=middle;align=center;verticalAlign=middle;" parent="Zx0YANjdZ0Bqq7mGd-Li-1" source="Zx0YANjdZ0Bqq7mGd-Li-3" target="Zx0YANjdZ0Bqq7mGd-Li-6" edge="1"> + <mxGeometry relative="1" as="geometry"> + <mxPoint x="45" y="170" as="sourcePoint" /> + <mxPoint x="135" y="170" as="targetPoint" /> + <Array as="points"> + <mxPoint x="90" y="220" /> + <mxPoint x="90" y="220" /> + </Array> + <mxPoint as="offset" /> + </mxGeometry> + </mxCell> + <mxCell id="WlnYjSTvFQ-Kx6sK1-3f-0" value="state?" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;curved=0;fontFamily=Arial;" edge="1" parent="Zx0YANjdZ0Bqq7mGd-Li-1" source="Zx0YANjdZ0Bqq7mGd-Li-3" target="Zx0YANjdZ0Bqq7mGd-Li-6"> + <mxGeometry relative="1" as="geometry"> + <Array as="points"> + <mxPoint x="90" y="120" /> + <mxPoint x="90" y="120" /> + </Array> + </mxGeometry> + </mxCell> + <mxCell id="WlnYjSTvFQ-Kx6sK1-3f-1" value="= solved" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;curved=0;fontFamily=Arial;" edge="1" parent="Zx0YANjdZ0Bqq7mGd-Li-1" source="Zx0YANjdZ0Bqq7mGd-Li-6" target="Zx0YANjdZ0Bqq7mGd-Li-3"> + <mxGeometry relative="1" as="geometry"> + <Array as="points"> + <mxPoint x="90" y="140" /> + <mxPoint x="90" y="140" /> + </Array> + </mxGeometry> + </mxCell> + <mxCell id="K4EzKAKXCnabXeHCjeBN-0" value="" style="endArrow=none;dashed=1;html=1;rounded=0;fontFamily=Arial;" edge="1" parent="Zx0YANjdZ0Bqq7mGd-Li-1"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="10" y="30" as="sourcePoint" /> + <mxPoint x="260" y="30" as="targetPoint" /> + </mxGeometry> + </mxCell> + <mxCell id="K4EzKAKXCnabXeHCjeBN-1" value="" style="endArrow=none;dashed=1;html=1;rounded=0;fontFamily=Arial;" edge="1" parent="Zx0YANjdZ0Bqq7mGd-Li-1"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="10" y="100" as="sourcePoint" /> + <mxPoint x="260" y="100" as="targetPoint" /> + </mxGeometry> + </mxCell> + <mxCell id="K4EzKAKXCnabXeHCjeBN-2" value="" style="endArrow=none;dashed=1;html=1;rounded=0;fontFamily=Arial;" edge="1" parent="Zx0YANjdZ0Bqq7mGd-Li-1"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="10" y="159.82999999999998" as="sourcePoint" /> + <mxPoint x="260" y="159.82999999999998" as="targetPoint" /> + </mxGeometry> + </mxCell> + <mxCell id="K4EzKAKXCnabXeHCjeBN-3" value="" style="endArrow=none;dashed=1;html=1;rounded=0;fontFamily=Arial;" edge="1" parent="Zx0YANjdZ0Bqq7mGd-Li-1"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="10" y="260" as="sourcePoint" /> + <mxPoint x="260" y="260" as="targetPoint" /> + </mxGeometry> + </mxCell> + <mxCell id="K4EzKAKXCnabXeHCjeBN-4" value="1" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontFamily=Arial;" vertex="1" parent="Zx0YANjdZ0Bqq7mGd-Li-1"> + <mxGeometry y="30" width="20" height="70" as="geometry" /> + </mxCell> + <mxCell id="K4EzKAKXCnabXeHCjeBN-5" value="2" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontFamily=Arial;" vertex="1" parent="Zx0YANjdZ0Bqq7mGd-Li-1"> + <mxGeometry y="100" width="20" height="60" as="geometry" /> + </mxCell> + <mxCell id="K4EzKAKXCnabXeHCjeBN-6" value="3" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontFamily=Arial;" vertex="1" parent="Zx0YANjdZ0Bqq7mGd-Li-1"> + <mxGeometry y="160" width="20" height="100" as="geometry" /> + </mxCell> + <mxCell id="K4EzKAKXCnabXeHCjeBN-7" value="4" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontFamily=Arial;" vertex="1" parent="Zx0YANjdZ0Bqq7mGd-Li-1"> + <mxGeometry y="260" width="20" height="60" as="geometry" /> + </mxCell> + </root> + </mxGraphModel> + </diagram> + <diagram id="nZD7urG06ZLRag7bfLhG" name="vault-puzzle-io"> + <mxGraphModel dx="1422" dy="822" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1100" pageHeight="850" math="0" shadow="0"> + <root> + <mxCell id="7HM9CflW6hoJ5ROsD5Xs-0" /> + <mxCell id="7HM9CflW6hoJ5ROsD5Xs-1" parent="7HM9CflW6hoJ5ROsD5Xs-0" /> + <mxCell id="7HM9CflW6hoJ5ROsD5Xs-2" value="[Vault puzzle module]<br>ESP32 PICO D4 Devkit" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="7HM9CflW6hoJ5ROsD5Xs-1"> + <mxGeometry x="490" y="250" width="120" height="200" as="geometry" /> + </mxCell> + <mxCell id="7HM9CflW6hoJ5ROsD5Xs-3" value="IN" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="7HM9CflW6hoJ5ROsD5Xs-1"> + <mxGeometry x="440" y="250" width="40" height="20" as="geometry" /> + </mxCell> + <mxCell id="7HM9CflW6hoJ5ROsD5Xs-4" value="OUT" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="7HM9CflW6hoJ5ROsD5Xs-1"> + <mxGeometry x="620" y="250" width="40" height="20" as="geometry" /> + </mxCell> + <mxCell id="7HM9CflW6hoJ5ROsD5Xs-6" value="" style="endArrow=none;html=1;strokeWidth=3;" edge="1" parent="7HM9CflW6hoJ5ROsD5Xs-1"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="280" y="560" as="sourcePoint" /> + <mxPoint x="920" y="560" as="targetPoint" /> + </mxGeometry> + </mxCell> + <mxCell id="7HM9CflW6hoJ5ROsD5Xs-7" value="" style="endArrow=classic;startArrow=classic;html=1;strokeWidth=1;entryX=0.5;entryY=1;entryDx=0;entryDy=0;" edge="1" parent="7HM9CflW6hoJ5ROsD5Xs-1" target="7HM9CflW6hoJ5ROsD5Xs-2"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="550" y="560" as="sourcePoint" /> + <mxPoint x="390" y="370" as="targetPoint" /> + </mxGeometry> + </mxCell> + <mxCell id="7HM9CflW6hoJ5ROsD5Xs-8" value="Puzzle bus<br>I²C + power" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="7HM9CflW6hoJ5ROsD5Xs-1"> + <mxGeometry x="180" y="550" width="110" height="20" as="geometry" /> + </mxCell> + <mxCell id="7HM9CflW6hoJ5ROsD5Xs-9" value="4x 7-SEG diplay package" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="7HM9CflW6hoJ5ROsD5Xs-1"> + <mxGeometry x="780" y="240" width="120" height="60" as="geometry" /> + </mxCell> + <mxCell id="7HM9CflW6hoJ5ROsD5Xs-10" value="Keypad" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="7HM9CflW6hoJ5ROsD5Xs-1"> + <mxGeometry x="230" y="320" width="120" height="60" as="geometry" /> + </mxCell> + <mxCell id="7HM9CflW6hoJ5ROsD5Xs-11" value="Solenoid lock" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="7HM9CflW6hoJ5ROsD5Xs-1"> + <mxGeometry x="780" y="320" width="120" height="60" as="geometry" /> + </mxCell> + <mxCell id="7HM9CflW6hoJ5ROsD5Xs-12" value="Buzzer" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="7HM9CflW6hoJ5ROsD5Xs-1"> + <mxGeometry x="780" y="400" width="120" height="60" as="geometry" /> + </mxCell> + <mxCell id="7HM9CflW6hoJ5ROsD5Xs-13" value="" style="endArrow=classic;startArrow=none;html=1;strokeWidth=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;startFill=0;" edge="1" parent="7HM9CflW6hoJ5ROsD5Xs-1" source="7HM9CflW6hoJ5ROsD5Xs-10" target="7HM9CflW6hoJ5ROsD5Xs-2"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="290" y="480" as="sourcePoint" /> + <mxPoint x="340" y="430" as="targetPoint" /> + </mxGeometry> + </mxCell> + <mxCell id="7HM9CflW6hoJ5ROsD5Xs-14" value="" style="endArrow=classic;startArrow=none;html=1;strokeWidth=1;entryX=-0.008;entryY=0.617;entryDx=0;entryDy=0;entryPerimeter=0;exitX=1.025;exitY=0.535;exitDx=0;exitDy=0;exitPerimeter=0;startFill=0;" edge="1" parent="7HM9CflW6hoJ5ROsD5Xs-1" source="7HM9CflW6hoJ5ROsD5Xs-2" target="7HM9CflW6hoJ5ROsD5Xs-11"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="660" y="390" as="sourcePoint" /> + <mxPoint x="710" y="340" as="targetPoint" /> + </mxGeometry> + </mxCell> + <mxCell id="7HM9CflW6hoJ5ROsD5Xs-15" value="" style="endArrow=classic;startArrow=none;html=1;strokeWidth=1;entryX=0;entryY=0.75;entryDx=0;entryDy=0;exitX=1.025;exitY=0.175;exitDx=0;exitDy=0;exitPerimeter=0;startFill=0;" edge="1" parent="7HM9CflW6hoJ5ROsD5Xs-1" source="7HM9CflW6hoJ5ROsD5Xs-2" target="7HM9CflW6hoJ5ROsD5Xs-9"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="630" y="290" as="sourcePoint" /> + <mxPoint x="710" y="420" as="targetPoint" /> + </mxGeometry> + </mxCell> + <mxCell id="7HM9CflW6hoJ5ROsD5Xs-16" value="" style="endArrow=classic;startArrow=none;html=1;strokeWidth=1;entryX=0;entryY=0.25;entryDx=0;entryDy=0;exitX=1.025;exitY=0.83;exitDx=0;exitDy=0;exitPerimeter=0;startFill=0;" edge="1" parent="7HM9CflW6hoJ5ROsD5Xs-1" source="7HM9CflW6hoJ5ROsD5Xs-2" target="7HM9CflW6hoJ5ROsD5Xs-12"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="620" y="520" as="sourcePoint" /> + <mxPoint x="670" y="470" as="targetPoint" /> + </mxGeometry> + </mxCell> + <mxCell id="7HM9CflW6hoJ5ROsD5Xs-18" value="" style="endArrow=none;html=1;strokeWidth=1;" edge="1" parent="7HM9CflW6hoJ5ROsD5Xs-1"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="410" y="360" as="sourcePoint" /> + <mxPoint x="420" y="340" as="targetPoint" /> + </mxGeometry> + </mxCell> + <mxCell id="7HM9CflW6hoJ5ROsD5Xs-22" value="" style="endArrow=none;html=1;strokeWidth=1;" edge="1" parent="7HM9CflW6hoJ5ROsD5Xs-1"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="690" y="296" as="sourcePoint" /> + <mxPoint x="700" y="276" as="targetPoint" /> + </mxGeometry> + </mxCell> + <mxCell id="7HM9CflW6hoJ5ROsD5Xs-23" value="5" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="7HM9CflW6hoJ5ROsD5Xs-1"> + <mxGeometry x="400" y="310" width="40" height="20" as="geometry" /> + </mxCell> + <mxCell id="7HM9CflW6hoJ5ROsD5Xs-24" value="2" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="7HM9CflW6hoJ5ROsD5Xs-1"> + <mxGeometry x="680" y="250" width="40" height="20" as="geometry" /> + </mxCell> + <mxCell id="7HM9CflW6hoJ5ROsD5Xs-27" value="" style="endArrow=none;html=1;strokeWidth=1;" edge="1" parent="7HM9CflW6hoJ5ROsD5Xs-1"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="540" y="512" as="sourcePoint" /> + <mxPoint x="560" y="492" as="targetPoint" /> + </mxGeometry> + </mxCell> + <mxCell id="7HM9CflW6hoJ5ROsD5Xs-28" value="2" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="7HM9CflW6hoJ5ROsD5Xs-1"> + <mxGeometry x="550" y="490" width="40" height="20" as="geometry" /> + </mxCell> + </root> + </mxGraphModel> + </diagram> + <diagram id="7POXNBDTHuzmCPITFMB0" name="puzzlebox-bomb"> + <mxGraphModel dx="1422" dy="822" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1100" pageHeight="850" math="0" shadow="0"> + <root> + <mxCell id="VDsyqYXPtuEwqBrCnzhW-0" /> + <mxCell id="VDsyqYXPtuEwqBrCnzhW-1" parent="VDsyqYXPtuEwqBrCnzhW-0" /> + <mxCell id="MrWMUG4uQ_69N9tKeiNV-0" value="Puzzlebox" style="rounded=0;whiteSpace=wrap;html=1;fontFamily=Arial;" vertex="1" parent="VDsyqYXPtuEwqBrCnzhW-1"> + <mxGeometry x="300" y="415" width="80" height="80" as="geometry" /> + </mxCell> + <mxCell id="MrWMUG4uQ_69N9tKeiNV-3" value="Wi-Fi" style="shape=link;html=1;rounded=0;edgeStyle=orthogonalEdgeStyle;dashed=1;labelPosition=center;verticalLabelPosition=top;align=center;verticalAlign=bottom;fontFamily=Arial;" edge="1" parent="VDsyqYXPtuEwqBrCnzhW-1" source="MrWMUG4uQ_69N9tKeiNV-0"> + <mxGeometry x="1" width="100" relative="1" as="geometry"> + <mxPoint x="390" y="385" as="sourcePoint" /> + <mxPoint x="340" y="375" as="targetPoint" /> + <mxPoint as="offset" /> + </mxGeometry> + </mxCell> + <mxCell id="MrWMUG4uQ_69N9tKeiNV-4" value="Bomb" style="rounded=0;whiteSpace=wrap;html=1;fontFamily=Arial;" vertex="1" parent="VDsyqYXPtuEwqBrCnzhW-1"> + <mxGeometry x="700" y="415" width="80" height="80" as="geometry" /> + </mxCell> + <mxCell id="MrWMUG4uQ_69N9tKeiNV-7" value="Wi-Fi" style="shape=link;html=1;rounded=0;edgeStyle=orthogonalEdgeStyle;dashed=1;labelPosition=center;verticalLabelPosition=top;align=center;verticalAlign=bottom;fontFamily=Arial;" edge="1" parent="VDsyqYXPtuEwqBrCnzhW-1" source="MrWMUG4uQ_69N9tKeiNV-4"> + <mxGeometry x="1" width="100" relative="1" as="geometry"> + <mxPoint x="790" y="385" as="sourcePoint" /> + <mxPoint x="740" y="375" as="targetPoint" /> + <mxPoint as="offset" /> + </mxGeometry> + </mxCell> + <mxCell id="MrWMUG4uQ_69N9tKeiNV-8" value="" style="endArrow=classic;startArrow=classic;html=1;strokeWidth=1;entryX=1;entryY=0.5;entryDx=0;entryDy=0;exitX=0;exitY=0.5;exitDx=0;exitDy=0;" edge="1" parent="VDsyqYXPtuEwqBrCnzhW-1" source="MrWMUG4uQ_69N9tKeiNV-9" target="MrWMUG4uQ_69N9tKeiNV-4"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="850" y="455" as="sourcePoint" /> + <mxPoint x="820" y="500" as="targetPoint" /> + </mxGeometry> + </mxCell> + <mxCell id="MrWMUG4uQ_69N9tKeiNV-9" value="[Bomb related components]" style="whiteSpace=wrap;html=1;aspect=fixed;" vertex="1" parent="VDsyqYXPtuEwqBrCnzhW-1"> + <mxGeometry x="810" y="415" width="80" height="80" as="geometry" /> + </mxCell> + <mxCell id="MrWMUG4uQ_69N9tKeiNV-10" value="[Bomb related components]" style="whiteSpace=wrap;html=1;aspect=fixed;" vertex="1" parent="VDsyqYXPtuEwqBrCnzhW-1"> + <mxGeometry x="190" y="415" width="80" height="80" as="geometry" /> + </mxCell> + <mxCell id="MrWMUG4uQ_69N9tKeiNV-11" value="" style="endArrow=classic;startArrow=classic;html=1;strokeWidth=1;entryX=1;entryY=0.5;entryDx=0;entryDy=0;exitX=0;exitY=0.5;exitDx=0;exitDy=0;" edge="1" parent="VDsyqYXPtuEwqBrCnzhW-1" source="MrWMUG4uQ_69N9tKeiNV-0" target="MrWMUG4uQ_69N9tKeiNV-10"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="660" y="465" as="sourcePoint" /> + <mxPoint x="590" y="465" as="targetPoint" /> + </mxGeometry> + </mxCell> + <mxCell id="MrWMUG4uQ_69N9tKeiNV-15" value="Hub" style="rounded=0;whiteSpace=wrap;html=1;fontFamily=Arial;" vertex="1" parent="VDsyqYXPtuEwqBrCnzhW-1"> + <mxGeometry x="500" y="415" width="80" height="80" as="geometry" /> + </mxCell> + <mxCell id="MrWMUG4uQ_69N9tKeiNV-16" value="Wi-Fi" style="shape=link;html=1;rounded=0;edgeStyle=orthogonalEdgeStyle;dashed=1;labelPosition=center;verticalLabelPosition=top;align=center;verticalAlign=bottom;fontFamily=Arial;" edge="1" parent="VDsyqYXPtuEwqBrCnzhW-1" source="MrWMUG4uQ_69N9tKeiNV-15"> + <mxGeometry x="1" width="100" relative="1" as="geometry"> + <mxPoint x="590" y="385" as="sourcePoint" /> + <mxPoint x="540" y="375" as="targetPoint" /> + <mxPoint as="offset" /> + </mxGeometry> + </mxCell> + <mxCell id="MrWMUG4uQ_69N9tKeiNV-18" value="" style="endArrow=classic;startArrow=classic;html=1;strokeWidth=1;" edge="1" parent="VDsyqYXPtuEwqBrCnzhW-1"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="350" y="395" as="sourcePoint" /> + <mxPoint x="530" y="395" as="targetPoint" /> + </mxGeometry> + </mxCell> + <mxCell id="MrWMUG4uQ_69N9tKeiNV-19" value="" style="endArrow=classic;startArrow=classic;html=1;strokeWidth=1;" edge="1" parent="VDsyqYXPtuEwqBrCnzhW-1"> + <mxGeometry width="50" height="50" relative="1" as="geometry"> + <mxPoint x="550" y="395" as="sourcePoint" /> + <mxPoint x="730" y="395" as="targetPoint" /> + </mxGeometry> + </mxCell> + <mxCell id="MrWMUG4uQ_69N9tKeiNV-20" value="TCP socket connection" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="VDsyqYXPtuEwqBrCnzhW-1"> + <mxGeometry x="410" y="355" width="60" height="30" as="geometry" /> + </mxCell> + <mxCell id="MrWMUG4uQ_69N9tKeiNV-24" value="TCP socket connection" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="VDsyqYXPtuEwqBrCnzhW-1"> + <mxGeometry x="610" y="355" width="60" height="30" as="geometry" /> + </mxCell> + </root> + </mxGraphModel> + </diagram> +</mxfile> diff --git a/docs/font.mk b/docs/font.mk new file mode 100644 index 0000000..8646e0f --- /dev/null +++ b/docs/font.mk @@ -0,0 +1,36 @@ +TEX_GYRE_SCHOLA += res/font/texgyreschola-bold.otf +TEX_GYRE_SCHOLA += res/font/texgyreschola-bolditalic.otf +TEX_GYRE_SCHOLA += res/font/texgyreschola-italic.otf +TEX_GYRE_SCHOLA += res/font/texgyreschola-regular.otf +$(TEX_GYRE_SCHOLA) &: + mkdir -p res/font + curl -sLo- 'https://www.gust.org.pl/projects/e-foundry/tex-gyre/schola/qcs2.005otf.zip' > texgyreschola.zip + unzip -oq texgyreschola.zip -d res/font + rm texgyreschola.zip + +JETBRAINS_MONO += res/font/JetBrainsMono-Bold.ttf +JETBRAINS_MONO += res/font/JetBrainsMono-BoldItalic.ttf +JETBRAINS_MONO += res/font/JetBrainsMono-Italic.ttf +JETBRAINS_MONO += res/font/JetBrainsMono-Regular.ttf +$(JETBRAINS_MONO) &: + mkdir -p res/font + curl -sLo- 'https://download-cdn.jetbrains.com/fonts/JetBrainsMono-2.304.zip' > jetbrainsmono.zip + unzip -oqj jetbrainsmono.zip -x 'fonts/webfonts/*' 'fonts/variable/*' '*/JetBrainsMonoNL-*' 'AUTHORS.txt' 'OFL.txt' -d res/font + rm jetbrainsmono.zip + +INTER += res/font/Inter-Bold.otf +INTER += res/font/Inter-BoldItalic.otf +INTER += res/font/Inter-Italic.otf +INTER += res/font/Inter-Regular.otf +$(INTER) &: + mkdir -p res/font + curl -sLo- 'https://github.com/rsms/inter/releases/download/v4.0/Inter-4.0.zip' > inter.zip + unzip -oqj inter.zip -x 'web/*' 'extras/ttf/*' '*.ttc' '*Variable*.ttf' '*/InterDisplay-*' 'LICENSE.txt' 'help.txt' -d res/font + rm inter.zip + +SANS_SERIF_FONTS := $(INTER) +SERIF_FONTS := $(TEX_GYRE_SCHOLA) +MONOSPACE_FONTS := $(JETBRAINS_MONO) + +ALL_FONTS := $(SANS_SERIF_FONTS) $(SERIF_FONTS) $(MONOSPACE_FONTS) + diff --git a/docs/img/22-23/HardwarePuzzel.png b/docs/img/22-23/HardwarePuzzel.png Binary files differnew file mode 100644 index 0000000..fe3f260 --- /dev/null +++ b/docs/img/22-23/HardwarePuzzel.png diff --git a/docs/img/22-23/Kluis.png b/docs/img/22-23/Kluis.png Binary files differnew file mode 100644 index 0000000..43a2257 --- /dev/null +++ b/docs/img/22-23/Kluis.png diff --git a/docs/img/22-23/Neotrellis.png b/docs/img/22-23/Neotrellis.png Binary files differnew file mode 100644 index 0000000..adc650b --- /dev/null +++ b/docs/img/22-23/Neotrellis.png diff --git a/docs/img/22-23/SV.png b/docs/img/22-23/SV.png Binary files differnew file mode 100644 index 0000000..f63d1ea --- /dev/null +++ b/docs/img/22-23/SV.png diff --git a/docs/img/22-23/SoftwarePuzzel.png b/docs/img/22-23/SoftwarePuzzel.png Binary files differnew file mode 100644 index 0000000..86c9e94 --- /dev/null +++ b/docs/img/22-23/SoftwarePuzzel.png diff --git a/docs/img/Figures-puzzlebox-bomb.png b/docs/img/Figures-puzzlebox-bomb.png Binary files differnew file mode 100644 index 0000000..20d33da --- /dev/null +++ b/docs/img/Figures-puzzlebox-bomb.png diff --git a/docs/img/Figures-vault-puzzle-io.png b/docs/img/Figures-vault-puzzle-io.png Binary files differnew file mode 100644 index 0000000..74e420c --- /dev/null +++ b/docs/img/Figures-vault-puzzle-io.png diff --git a/docs/img/automation-example.png b/docs/img/automation-example.png Binary files differnew file mode 100644 index 0000000..33c7259 --- /dev/null +++ b/docs/img/automation-example.png diff --git a/docs/img/bomb-io.png b/docs/img/bomb-io.png Binary files differnew file mode 100644 index 0000000..20d33da --- /dev/null +++ b/docs/img/bomb-io.png diff --git a/docs/img/bus-connector.jpg b/docs/img/bus-connector.jpg Binary files differnew file mode 100644 index 0000000..90ffbc2 --- /dev/null +++ b/docs/img/bus-connector.jpg diff --git a/docs/img/external-architecture-old.png b/docs/img/external-architecture-old.png Binary files differnew file mode 100644 index 0000000..ee5c1cd --- /dev/null +++ b/docs/img/external-architecture-old.png diff --git a/docs/img/hardware-example-sketch.png b/docs/img/hardware-example-sketch.png Binary files differnew file mode 100644 index 0000000..e6ba035 --- /dev/null +++ b/docs/img/hardware-example-sketch.png diff --git a/docs/img/hardware-io.png b/docs/img/hardware-io.png Binary files differnew file mode 100644 index 0000000..54bf1d7 --- /dev/null +++ b/docs/img/hardware-io.png diff --git a/docs/img/hardware-pcb.jpg b/docs/img/hardware-pcb.jpg Binary files differnew file mode 100644 index 0000000..e317c4e --- /dev/null +++ b/docs/img/hardware-pcb.jpg diff --git a/docs/img/hardware-side.jpg b/docs/img/hardware-side.jpg Binary files differnew file mode 100644 index 0000000..800b3ad --- /dev/null +++ b/docs/img/hardware-side.jpg diff --git a/docs/img/light-sensor.jpg b/docs/img/light-sensor.jpg Binary files differnew file mode 100644 index 0000000..cf00dfb --- /dev/null +++ b/docs/img/light-sensor.jpg diff --git a/docs/img/main-controller-state.svg b/docs/img/main-controller-state.svg new file mode 100644 index 0000000..6e0333b --- /dev/null +++ b/docs/img/main-controller-state.svg @@ -0,0 +1,3 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="221px" height="61px" viewBox="-0.5 -0.5 221 61"><defs/><g><path d="M 54 48 Q 70 60 80.91 51.82" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 85.11 48.67 L 81.61 55.67 L 80.91 51.82 L 77.41 50.07 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><ellipse cx="30" cy="30" rx="30" ry="30" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 58px; height: 1px; padding-top: 30px; margin-left: 1px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Arial; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">Reset</div></div></div></foreignObject><image x="1" y="23.5" width="58" height="17" xlink:href="data:image/png;base64,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"/></switch></g><ellipse cx="110" cy="30" rx="30" ry="30" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 58px; height: 1px; padding-top: 30px; margin-left: 81px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Arial; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">Playing</div></div></div></foreignObject><image x="81" y="23.5" width="58" height="17" xlink:href="data:image/png;base64,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"/></switch></g><ellipse cx="190" cy="30" rx="30" ry="30" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 58px; height: 1px; padding-top: 30px; margin-left: 161px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Arial; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">Solved</div></div></div></foreignObject><image x="161" y="23.5" width="58" height="17" xlink:href="data:image/png;base64,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"/></switch></g><path d="M 86 12 Q 70 0 59.09 8.18" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 54.89 11.33 L 58.39 4.33 L 59.09 8.18 L 62.59 9.93 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><path d="M 134 48 Q 150 60 160.91 51.82" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 165.11 48.67 L 161.61 55.67 L 160.91 51.82 L 157.41 50.07 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><path d="M 166 12 Q 150 0 139.09 8.18" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 134.89 11.33 L 138.39 4.33 L 139.09 8.18 L 142.59 9.93 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/></g></svg>
\ No newline at end of file diff --git a/docs/img/main-controller-top.svg b/docs/img/main-controller-top.svg new file mode 100644 index 0000000..5bb7cda --- /dev/null +++ b/docs/img/main-controller-top.svg @@ -0,0 +1,3 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="149px" height="188px" viewBox="-0.5 -0.5 149 188"><defs/><g><rect x="67" y="55" width="80" height="80" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 78px; height: 1px; padding-top: 95px; margin-left: 68px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Arial; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">Main controller</div></div></div></foreignObject><image x="68" y="81" width="78" height="32" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAATgAAACACAYAAACfkXXGAAAAAXNSR0IArs4c6QAAFn5JREFUeF7tnQfQNt14x/9KghiMFkEGGSWM0UcZJQiDCNE+NTpBkAhGT4gSRHSihUTv/ZMESUSPGkIEIwlmEkSUwXxalOzvfc9yvuPs7jn3vff97H32f2aemfd9nt1T/ufsb6/rlGtPIScrYAWsQKMKnKLRdrlZVsAKWAEZcB4EVsAKNKuAAdds17phVsAKGHAeA1bACjSrgAHXbNe6YVbAChhwHgNWwAo0q4AB12zXumFWwAoYcB4DVsAKNKuAAXdYXfvbkl48UOW7SXr2TM05k6TnSjohk9+VJb1npnI2zeZKkt4d3Uy77y3pO5tm6PvaVMCAO6x+HQPciyTdQ9K3ZmjSZSSd2AHznAbcDGo6iyNTwIA7Muk3KngMcJ8JFtfHNsr55DdhDT1xIB9bcDMI7Cz2o4ABtx+d5yplDHCUMYebOuaeUoYBN1dvOp+dK2DA7VziWQuYAtzzJd1T0klblDrmnhpwWwjrW/evgAG3f823KTEF3BclfVPSr4ZMPynppt3PJzYshPGAe/qEcP+XJZ2u+/8ZovyWYMFt2DzftjYFDLjD6vEUcG+R9C+S7h81486Snrdhs84c7r1RuP+Zki7YrVhe04DbUFHfdqQKGHBHKn914TnAPVnSX0Yrntu4qZeT9PqQF6uxt5N0V0nXNuCq+8o3LEABA24BnVBRhRzg7t65kX8a7Vnb1E1N3dPXdfvKHiDpaQZcRQ/50kUpYMAtqjsmK5MDHL+7bbKtYxM3NXVP7yvphWFj8aYW3KklXUjSNSRdMcwVXipq5efDfOH7JL1Z0kck/WBSBalmo2+qWTyHSP0uL+lmkrBerxDK/nSoyxu63/9NmOcsqJYvWZoCBtzSemS8PkOAO1+yMXeTnf2xe8rixQ0l/Uc3B/eSDSy400i6XrAAL1sh8QclPVjS2yT9aOS+OQB3SUmPDPUcq+LXuro8NJzs+F5FW3zpAhQw4BbQCRVVGAIcVk98tIqFh5tLwhIpSTn39E6STrkB4M4eVmFvU1Jw5hrm/gDPk0asuW0Bd45g8Z63oo5PkfSQLbfgVBTnS+dQwICbQ8X95TEEuK+G7R3x6YNbBziV1C7nngKYs1QC7vSSHieJecE4Aa2PSsIVpa6ks0q6SuQWxtdjQd5C0jsHKr8N4B7VWabAt4cbdeNs7Xs76/H73YLNeYJL3W+9iatQo2mJ7r5mxwoYcDsWeObsxwCXbtCtcVNz7ukHAoRqXNTcRuTHB2sJaOUSQMEyukvyx6eG7S85t3AbwPXFALZnSMIyS+uGi30rSdQdyPeJhRcs26/P3K/ObkcKGHA7EnZH2Y4BLj1iVeqmpu7pqyWxSPGNSsClViASPFrSwwoWDgAK1z0o0u3tkmjvFzJabgs44IaV+dKRuT50uaWkZ0UbnbnvNxYQTWVHw6u9bA24w+rTMcDRkvSQfIlLlYLpPmH+q3cjSy241IJ8fwDEZwslvrgk4MrGYtLHw+rmp3YAOE5qYDVOLRrkoM3eQFaXnQ5AAQPuADopquIU4FLIjLl5fbZYQ38brBRctet3Px8Of2SerBRwFwj3Aqrzd/NY7wqrjz8slLimrG0suBor7FRhwSO2LFlRZRHE6QAUMOAOoJMqAJe6qVNWFP2PJdM/sLF7WmvBbavkvgA35vrm2sBJDtzUPhlw2/b0Hu834PYo9gxFTVlwFJG6qTeR9NqBss/WWVsEyrxO+HvsnrYKOLbT3KtbwPh2YX+kmhtwhcIt4TIDbgm9UF6HEsDVuKmxe5oLmFljVZW34qdXcpLgl8N2kRuH7RklkUu2cVFZOeWUxncLK2zAFQq1xMsMuCX2ynCdSgBX6qam7mku5PkcgKOcM0o6V/hhf9lFJV16YA9c3Pqh0EzbAK7WAjPgDusZOVltDbjD6rwSwOXc1Bt0QHlj0tTUPc1FA94UcP0ZzzuEUEs1JwYMuMMak4uurQG36O75mcqVAi51UzmV8MCwU7/PdMo93WQOjvHEYfqHF5zxjBvHyiYbi1mJjWFoC+6wxufiamvALa5LRitUCrjUTeUYEjvzid5BKnFPawFHngTK5LjYmMXG4XU2IX8oHN8iggiH+pl7K92SYhf1sMbtkdXWgDsy6TcquBRwU25q6p4OhVeqcVEv0oVDepmkS0QtwzJ7Uzfn9qoAsy+NfLu0piwDbqPhs76bDLjD6vMawI25qbF7OhYgsxQ6bIjlqNUfRXISyYR5vXd0f/txgcylZZGVAVcgqC857qo4HY4CNYBL3dR+gyunFeLNvWMhzkuhwwop7uXVIik5PM+esxK4cduFJb1S0sWiPDwHdzhjc5E1NeAW2S2DlaoBXM5NvVaIVBtv7h2L/lsKuPQcaXrkq0Rl9sG9JrnQgCtRztcMKmDAHdbgqAVc6qY+RhJf4joxTOpPfb+hFHBpOcy9AVPiv5Wkc4cTFVc34Erk8jWlChhwpUot47pawKVuKnD7XPhSFi2a+gJXKeDY3vHyDpyArk/Mxz22IFQScGMbC99zTdNVB4Jeeg5uGeNx8bUw4BbfRSerYC3gcm5qnOFUOKVSwBHJ9+kdPG8fZY4V9whJfFv1pIzMnG7gnCxf7spFz+WWofoZcIc1bo+stgbckUm/UcGbAC51H/uCSwJilgKOPHFJiUYSnyXl9+y9I6oJ5RE6ib/z9SqiCMfXsupK7Lj+4D/3DsVeM+A2Gj7ru8mAO6w+3wRwqZvat7gkpHkN4DieRSQTXNMUclMqs1fufmEPHa5unzgRwU+6EmvATSnqvx9TwIA7rIGwCeCG3NQp95T7agDH9UCOuTT2xA25nbHifCaQj1YDOKLrptYm30rlAzFfSbrJgDuscXtktTXgjkz6jQreFHApOErc000A1zeK+TU+Fn3dYJX1H3vmmBZQ4ytWuQ89pyHCmcc7ofto9FsNuI3Gy+pvMuBWPwQsgBVoVwEDrt2+dcuswOoVMOBWPwQsgBVoVwEDrt2+dcuswOoVMOBWPwQsgBVoVwEDrt2+dcuswOoVMOBWPwQsgBVoVwEDrt2+dcuswOoVMOBWPwQsgBVoVwEDrt2+dcuswOoVMOBWPwQsgBVoVwEDrt2+dcuswOoVMOBWPwQsgBVoVwEDrt2+dcuswOoVMOBWPwQsgBVoVwEDrt2+dcuswOoVMOBWPwQsgBVoVwEDrt2+dcuswOoVMOBWPwQsgBVoVwEDrt2+dcuswOoVMOBWPwQsgBVoVwEDrt2+dcvKFeATh68IXwDjrrGvjvHd10dEWT9U0iPLi/KV+1TAgNun2u2UdT5Jt5T0LElfb6BZBlwDnZhrggHXaMfuqFl8CPqOkh4Yvm/Kd1q/uqOy9pmtAbdPtfdYlgG3R7EPvKjzS3px98HmK4R2vEWSASfZRV3wwDbgFtw5C6taauUYcMc7yIBb2ECNq2PALbhzFlY1A+54h3iRYWEDc6w6BtwBddYRV9WAM+COeAjWF2/A1Wu21jsMOAPu4Ma+AXdwXXZkFTbgDLgjG3ybFmzAHVfu1JIuJek6kq4k6bKSziLpW5I+Kund3e/+WtL7Jf1gA7H7/H9L0lUlXVLSGUI+75P0z135b5D0HkknFeZ/OklPknTXcH066X9GSdeVdIPQNgBForwPSHplQXvQgraXpHRz7Fj92Ef3+5JuLOm8XR0/IuldhXWiXVeRdELYmEu/kb4Wtq6g4eslfbKir/a5TQRdLt9tJr6RpMtFq9Jx/V8n6d+6BYwflQgvie07L5F07XD9syXdu9vO811JF+/2Kt4rjAPGNP3/92Fjc00ZhVVZ1mVrB9wpJf16WAnjoZlKPITsAfsnST+euljSaSRdT9IDAjSnbvm8pKdIek4B6IYA8g1JN+3q9zBJPdSGyv2gpD8Yac/cgLu1pF+T9MQAtly9APIbM384e4A5Dy4P6lSirzhx8LYCUOwDcIyFm4SxNtUvtO1NoQ+B/9RYywHu/pJuK+nR0cs01uyLkq7f/Xx4SshD/vuaAYcF9SfdRtXfq+xArDoeshdMWAg8hBzhuXtl/lzOG5wyAN5QygHuLgECD64oE8vhHuGNnj5IcwPueZL+bARuWBY8lDx8cbp0B7WnBuu6omnHLPDHdQ/4E7qXzHdGbtw14H4p1OM2NZUPHgR9yYmRMc8hBdxfdC/WD0l6/ADcqMbzJd2z4EVaWeVlXb5WwJ0+DLgcfHhj8qCxQx8IXjm4lXHP8eAAk5cPdOc5JOEmYI2kqSR/7sHVulN3JOrTA2WkgMNiIW9cvz4ByLcHd+1UwTW+RsYCGjp7ecHgRpIfwOYBPWfIHBcQN7cHx/eCHl8Kf0/rB7S+GVmVuPvo/O1g3VKvPw5udwxaXHpeJriyaR+g0XslfV/SeTo3lzxy1hFW8UNGHuZdAm5oLDCGmCrAZeTfQ2ONNuM1AOkhyKWAY8zgyvd99Q+S3hHEQ090wpp87bJwNH9t1gg4HvT7BMDFiuISPDzMh8VzH7ixWDIMMObm+sTDhcv1uaRbeLCxGng7xgmrjE2hn8i4HMxJUTbWS3oPc2z/m+n6FCDxJQzwR0l6TcZywdUDJCnc75uBS5xn7SLDUP14mIENbjhQ7NMvhgcYi7JPAPZFYc6q/x33M/eIRZceE+unHHDL4r7iXlw2XOMfZrTcFeByL1Lq/4wwFZFaqjyPvxL6jrO+cZvHXqgp4Pr7eMHdL4yDfkxTBuCjHvw0ndYIuItKelXnkl0k6tlnhnmysQ7n+r9KHrYcFLDaeCj7RQSK4YHjZ2wBgYWIu2XmTJgj42FO3cchgGAZ3bmbhP/XkZGbe/DeHCy0rwzcNxfg2Cj72IIFAOasmEJA4/iB5eXEy2JsXgqI80KKXUIedhYmcN3StCvAcZSN420xqHixvHRiXpC+Bci8iPr0j6E9/52p/xDgaD+LD1NzeM1Cbm2Ao73MbTH4+8TqKEDoXauxzk4HbDpnBDie3ll1t48yeWGY58M9m0pADksunkMbsxTjVVTyBtAMalZkpxIreKw29m7Mx7uVu5tJ+tTAjXMADreWBRCs2KmUexFhxTy38IE9d3jRXD0qiH7HeowtR/68C8CdWRJzjqyW9mnK1Yw1wcV8WmLVM07JM005wA3NZ07p3tTf1wa4s4VBz3aQPuFm8pYrScAAYF0zXAxQrhXmUfjVZbqfEyNo4ILcMMy1lOTPNbgoL0ssxVwdcxbclBUW1+Fcod1Xi37JfCNAzaU5AIdly4JGiWvEiwiXsk9YbcxJ1oRnYhsKbnqfhuYadwE45rmoc2/Jj1lgQ2MjzePV4WXMSnmccoB7TDhWlnPJS8fiwV+3NsClAMKdY67js4U9yfwdFtYVg6vDXBdvyn61k/kyVrz6VPNA9/dQBquvD4rywVLj7c9kep9ygKsZ1Dx4f564cbsGHNrxM+Uy5eqG+87CTU3KQTy3DWVuwPFcYSnGgTBxzXG5p9oety+t/2eCm/2xAsDdLryMa/Rq7tq1Ae7mycon7g6bIFnJ2zadNri+8eQ980XAqTaxITh2M3ORO3KAqxnUuft3DbhSa/kCoZ94IZE23bP182G+D2uwT7noH3MDLgfoW4StODVj4RfCYgSuaZ9ygM5ZcGN9WVOHg752bYBLI0GUWhQlnXymMD/ERPbYYCzJi93nuCOsIpJyrlUOUDUP0VEADnf+7woESC1ttoLcamJf4FC2qVXd7/KP98XNDbic5cjc7H8VtD2+5Oei0zX973OWbAq4IUuvsvjDv3xNgKOt7O7np09M5uPWzZHmfIuWPHC1gErbWHv/HHNwpVZFusF4m9hz6cLQPgCXajXH+OrzyFmg6dgb+6bEnHVZfF5rAlzugS51mUo6cpeAo/wUDrWAMuCOK5CDZckLpdevJB6cAVfyxOzhGgOufAV1qjt2Cbicy2HATfXI8b+nFlxu4ceAK9Py4K5aE+Byq5N2UX8ajSRnJcYD2i7qcTU2seB27TLaRR1A75oAlxucS11kSCfZifjAAsK/R/3YsgU35yJDup+OY1KcjiCUUJ/mtuDSVeB0v+TclpABZ8AdU4Cznhzc7tMm20SYAGeHOXvfiOPGDxtssRA5ghRvSdjUQky3s3DaghMK8SbXlgHHwXqOM7HfkLQpIHJbd3J9MjfgOMWAK/yb0Vibc743fZwNOAPumAJ88u6t0e7yTbYfpNsO4s21R73Rt3SVEi1qAblPF/XQN/rm9t9xnpjzpekxsTFrDlCy6ssJHI65YcFzUia25LnfgDPgjimQHrXidzVhY3JnTeONl7mjWriW76zwSXIrcKVHtVoBHHKlriVBMH+ni4Ly5Qot0wWGfR7VSo+JASjGQnoKYaw57BtkP2R/3Gtow7MBZ8AdUwA3kn1wTBT3qeawPdFoiQHXH1BPj3rt4rD90HGyWgssHQK19+/TgqOuuzhsP2RFze2iUn9CYBFJhCmNPjH/hxVXEpaeiChYb/Fh/VeEOIRp4AYDzoD7iQK5B6dk4BGdgrObcRBL5nOI/RYfaM6FS5oKuEjlhsIlDcUxqwXU3IAjkCYW0hcGxta29cuFSxqLPhxXYyhcEvXNBRPYBeBYwCP46JMTfQiBxJgZizBM2znmR4itPo1FijHgDLifKDA08Ijg8Yfh4H18IJogigRPJNRO/DauDXg5FmOfaLQcziYcUJw4j8q83v9k+m9bgNTen5v4H4ttVpt/bogOBbzkhUR/pIFA6SvcdMAQ9xV5j4Uq2gXgKDNnhfF7xhoH8QlNlR6+Hwp+OvYSNuAMuJMpMBaynNDOfEmKNyYDh9BI/Zeb+kxYQeVgex8GOpV3jpDluKZ3CJPLue7bFiC19+fO2lIvwqQDmv8Lcez6Oaba/AeG6LGvkG0bsnzKQt8V4GhTLlBq39Y4fD0LE3048VQLFsZ+t9sF8J8DIhlwBtzPKADkcDFrPtBCJsCNwcbWkKmosmwbuePQkzvye6w9XBROMAylbQFSe/+Q5RvXLz5MX5v/mEysfjN/loYhn5KWlxTTA/TD2LzXLgFHHbFEOWyPPrUJuBH+fmwsGHAGXFaBsRj+uRsIdskiRfodhqFBy1wKq2nEdrtYwcgmvhzbTuKPuSwFcNSDD88AC1YzcymOdDEn4CgLd4/w7ZRR8tlAXhK4qnzUZSoG264BR/15oTIFQXiu9AM6OS2Zb+S7GiWfkDTgDLhRvDDBz8d42ZjJHE7/Yeb+y0e4orUf440L5GEnf97gaf79h6V5U+OWjk0+p3mmIct3uU2kLxto80FptjzQpvhhjfcEzg24vnw+TsO3bPnI8SWi6QMsa7aBEDmXA/W8LEo/nLwPwPX1B3TMD7IYxUsv/Qg483JsDeEraSVh7snXgDPgCuwnX2IFrEBTCqztLGpTnefGWAErMK6AAecRYgWsQLMKGHDNdq0bZgWsgAHnMWAFrECzChhwzXatG2YFrIAB5zFgBaxAswoYcM12rRtmBayAAecxYAWsQLMKGHDNdq0bZgWsgAHnMWAFrECzChhwzXatG2YFrIAB5zFgBaxAswoYcM12rRtmBayAAecxYAWsQLMKGHDNdq0bZgWsgAHnMWAFrECzChhwzXatG2YFrIAB5zFgBaxAswoYcM12rRtmBayAAecxYAWsQLMKGHDNdq0bZgWsgAHnMWAFrECzChhwzXatG2YFrIAB5zFgBaxAswoYcM12rRtmBayAAecxYAWsQLMKGHDNdq0bZgWswP8DkuXh27H5NOUAAAAASUVORK5CYII="/></switch></g><path d="M 107 166.63 L 107 141.37" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 107 171.88 L 103.5 164.88 L 107 166.63 L 110.5 164.88 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><path d="M 107 136.12 L 110.5 143.12 L 107 141.37 L 103.5 143.12 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><path d="M 67 175 L 147 175" fill="none" stroke="rgb(0, 0, 0)" stroke-width="4" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-end; width: 1px; height: 1px; padding-top: 175px; margin-left: 59px;"><div data-drawio-colors="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); " style="box-sizing: border-box; font-size: 0px; text-align: right;"><div style="display: inline-block; font-size: 12px; font-family: Arial; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; background-color: rgb(255, 255, 255); white-space: nowrap;">Puzzle bus</div></div></div></foreignObject><image x="0" y="168.5" width="59" height="17" xlink:href="data:image/png;base64,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"/></switch></g><path d="M 105 55 L 105 35.52 L 105 15 M 109 15 L 109 35.52 L 109 55 M 109 15" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="1.42" stroke-dasharray="3 3" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-end; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 12px; margin-left: 107px;"><div data-drawio-colors="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 11px; font-family: Arial; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; background-color: rgb(255, 255, 255); white-space: nowrap;">Wi-Fi</div></div></div></foreignObject><image x="94" y="-0.5" width="26" height="15.75" xlink:href="data:image/png;base64,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"/></switch></g></g></svg>
\ No newline at end of file diff --git a/docs/img/main-pcb.jpg b/docs/img/main-pcb.jpg Binary files differnew file mode 100644 index 0000000..c6d1c2c --- /dev/null +++ b/docs/img/main-pcb.jpg diff --git a/docs/img/neotrellis-example.png b/docs/img/neotrellis-example.png Binary files differnew file mode 100644 index 0000000..2f836cd --- /dev/null +++ b/docs/img/neotrellis-example.png diff --git a/docs/img/neotrellis-hardware-sketch.png b/docs/img/neotrellis-hardware-sketch.png Binary files differnew file mode 100644 index 0000000..692cd91 --- /dev/null +++ b/docs/img/neotrellis-hardware-sketch.png diff --git a/docs/img/neotrellis-io.png b/docs/img/neotrellis-io.png Binary files differnew file mode 100644 index 0000000..5f28562 --- /dev/null +++ b/docs/img/neotrellis-io.png diff --git a/docs/img/neotrellis-pcb.jpg b/docs/img/neotrellis-pcb.jpg Binary files differnew file mode 100644 index 0000000..1b193b4 --- /dev/null +++ b/docs/img/neotrellis-pcb.jpg diff --git a/docs/img/neotrellis-side.jpg b/docs/img/neotrellis-side.jpg Binary files differnew file mode 100644 index 0000000..96ac5a7 --- /dev/null +++ b/docs/img/neotrellis-side.jpg diff --git a/docs/img/neotrellis-start.png b/docs/img/neotrellis-start.png Binary files differnew file mode 100644 index 0000000..64fc328 --- /dev/null +++ b/docs/img/neotrellis-start.png diff --git a/docs/img/neotrellis-toggle.png b/docs/img/neotrellis-toggle.png Binary files differnew file mode 100644 index 0000000..b83b8cf --- /dev/null +++ b/docs/img/neotrellis-toggle.png diff --git a/docs/img/planning-condensed.svg b/docs/img/planning-condensed.svg new file mode 100644 index 0000000..e693b95 --- /dev/null +++ b/docs/img/planning-condensed.svg @@ -0,0 +1,3 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="656px" height="221px" viewBox="-0.5 -0.5 656 221"><defs/><g><path d="M 626.31 200 L 626.31 0" fill="none" stroke="rgb(0, 0, 0)" stroke-opacity="0.7" stroke-miterlimit="10" stroke-dasharray="3 3" pointer-events="stroke"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 207px; margin-left: 626px;"><div data-drawio-colors="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 11px; font-family: Arial; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; background-color: rgb(255, 255, 255); white-space: nowrap;">16</div></div></div></foreignObject><image x="620" y="207.5" width="12" height="15.75" xlink:href="data:image/png;base64,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"/></switch></g><path d="M 467 200 L 467 0" fill="none" stroke="rgb(0, 0, 0)" stroke-opacity="0.7" stroke-miterlimit="10" stroke-dasharray="3 3" pointer-events="stroke"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 207px; margin-left: 467px;"><div data-drawio-colors="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 11px; font-family: Arial; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; background-color: rgb(255, 255, 255); white-space: nowrap;">13</div></div></div></foreignObject><image x="461" y="207.5" width="12" height="15.75" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAA/CAYAAACmVEtSAAAAAXNSR0IArs4c6QAABN5JREFUaEPtWVkotGEUPv6UJEQhV5QL1xI3irKkLEnIGoXsF0Sy73shiSiyJReyhSxlzZqsiURKLuSGsmTJ8ve89X2Zz4xvxjSD+s6V4X3PnOc85z0bnff393f6w6IjAfhh9iQGfpgAkhiQGFDTA98KodnZWYqIiKCLiwtaWloiJyenb5nx8vJC6+vrND4+TnNzc7S2tsb02Nrakp2dHfn5+ZGXlxcZGRkp1K8ygMvLS4qPj6eRkRGm9LsAdnZ2KD8/n8bGxr4Eb2pqSnl5eRQXF0cGBgafzqoE4P7+njIzM6m5uZlXpCoAFP7JyUlKTEyks7MzpZkLCgqixsZGsrCwkLmjNICHhweqqamhoqIiGQWqAlheXqbw8HAZ4z09PRmrDg4OpK+vz0ITYdXR0UFHR0f890VGRjIQH0NKKQC3t7eUm5vLLgtFFQDX19fM0P7+fl4NHAJWYbhQwFBycjIDw0lbWxvFxMTwn0UBnJ6eUkZGBg0NDcmlWxUAg4ODFBAQwOtJSkpirMqLbe7Q4eEhhYaG0u7uLvuVv78/tbe3k4mJCfusEMDT0xMNDAxQSUmJDI3fZQAhmJaWRq2trUyFpaUlDQ8Pk6Oj45fv4PX1lT32yspK/t7o6CjZ29vLB/D29kYrKytUXV39KUN4e3uziwDFibIMIBzCwsKYbkhgYCAhHIyNjUUfMkAnJCTw5xYWFsjZ2Vk+ADya4OBgnjLuFuguLS2liYkJVgNUBXB1dcXyPNLn6uoq8zzSo46OjsoApqenycPDQzkAKCqFhYWENKarq0u9vb3fAiBqpYIDz8/PlJWVRfX19cqFEMcAHi+8np6eTmZmZrx6bQPY29ujkJAQwmNW6hGfnJxQV1cXS1XW1taf/KItACh429vblJ2dTQgZiKGhIfX09LAWgxPRNCpEoGkAd3d3dHBwwAyFI1GDOKmqqmIRgVD+dQCQIAoKCuS+BOE7/HjoVzDw+PjIPPuxx+KMNDc3Z9U7OjqarKysPmWtXwEAYYKWAWGjSBD/SCpoO9Ch/qoQQtzPz8+TjY0NweOo2vv7+9Td3U19fX0ymPCAUdi4rvRXMKDI68hEU1NTlJqaKtPOINzKy8tJT09P9aFe01lIHhi0DlFRUXwL/rGP+tUMcGAweqIbqKio4PHhZ9SIPwEAVi8uLpKLiwsPAJkJ7cWfASBsMjHFIZwlAMrOAzMzM2wW2NraovPzc2poaFBpHYOmDjPE8fExC6PY2FimQ2sMCLNXbW0tm9CUmQdgsHAcReuBOV1rADY3N8nX15dtHCDu7u6sUCEliolwGYCqjBndzc1NewCwU0pJSaHOzs4vu0shGKRQsIWhhhMMV6jGGOy1xgCXCjGccCzAk0iFGFFRVYWClgINXnFxMd9Wo6FDm82lVK0CkOdNGC1cbN3c3LC839TURBsbGzwuAG5paWFrFu7taBUALMG6BtmjrKxMZlgRewfoQOvq6thW78cHGqxusOHOycmR8bAiED4+PiyMsLEWZi2tM/DRSEXrdXgbe1JXV1eWuTCR/fv3Ty4+lQGIUa3tv0sAtO1x4fdJDEgMqOkBKYTUdKDa1yUG1HahmgokBtR0oNrXxf9BpfZXaFaBBECz/hXXLjEg7iPNnpAY0Kx/xbVLDIj7SLMnJAY0619x7f8BiBOA71mZfUUAAAAASUVORK5CYII="/></switch></g><path d="M 167 200 L 167 0" fill="none" stroke="rgb(0, 0, 0)" stroke-opacity="0.7" stroke-miterlimit="10" stroke-dasharray="3 3" pointer-events="stroke"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 207px; margin-left: 167px;"><div data-drawio-colors="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 11px; font-family: Arial; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; background-color: rgb(255, 255, 255); white-space: nowrap;">7</div></div></div></foreignObject><image x="164" y="207.5" width="6" height="15.75" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAA/CAYAAAD63gh2AAAAAXNSR0IArs4c6QAAAu5JREFUWEftVj1IcmEUfiSXEAcnqYYIXFpahIKIyKEWCUEM+zNqEAcbikAwCMkgQ7BAGtTFQcsEBXWqiKBBoUGiICIawkmSGsQWwfDjfcEL9XV77/XaBx/cM+nlvc9zznOe856raDabTfxiKGQClrqyRCyF8G8kent7w8LCAs7OzpgZCT0Qj8cpJq3g/yd4f38HKalarQpV4NO5m5sbJJNJ7pnJZEI4HIZWq5Xe5IeHB6ysrOD6+poSjIyMIBqNYnBwkP6X5KKXlxc4HA5ks1kKplarEYlEMDs7y1XTNkGj0cDe3h62trY4sM3NTWxvb0OpVEonuLy8xOLiIsrlMgUzGAyIxWLo6+v71J+2KqhUKrDb7cjlcpw0qVQKU1NTf5lENAHZT8FgEGtraxzY6uoq/H4/uru7pRM8Pj7CarXi9vaWghG3nJycYGho6FuLi6qANNbj8WB3d5cDI79dLhe6urqkE9zd3VELEu+3PJ9IJDAwMMA7oIIr+Pj4oBbc2dnhwAKBANbX16FQKKQT3N/fY2ZmRlT2gieZOOfg4AAbGxtcpmTASD/4tG8dFCQRGaalpSVcXFzQ93p6epDJZDA8PMwrjSgCMlDkhmzF8vIyDg8PoVKppBPU63VqQzJcrUin0zCbzUxwQT14fn7G3Nwcdx1PTEzg6OgIvb29nSH4Ko/b7aZWZTVXUA+I94lbfD4fl+35+TkmJycFZc+U6PX1FTabDaenpxRwdHQUx8fH6O/v7wxBsVjE9PQ0d+eT7UXm4btbk4/xxzkgzSRLpRWhUIiuSDHBS/Cd/ldXVxgfHxeDz7/0a7UanE4nXYMk9Ho9vfd1Ol1nCEqlEubn51EoFCig0WikZBqNpjME5O63WCx4enqigO00+Eeb5vN5jI2Ncdl6vd5PnyhCy+Bt8lcH7e/v0+UiNgQTtD7HO0YgFqitQesEiaCNJoVIJmCqJ0skS8RUgHmA/7ub+aqwAzIBUydZIlkipgLMA7/uoj+gx+N/FFnunAAAAABJRU5ErkJggg=="/></switch></g><path d="M 347 200 L 347 0" fill="none" stroke="rgb(0, 0, 0)" stroke-opacity="0.7" stroke-miterlimit="10" stroke-dasharray="3 3" pointer-events="stroke"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 207px; margin-left: 347px;"><div data-drawio-colors="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 11px; font-family: Arial; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; background-color: rgb(255, 255, 255); white-space: nowrap;">10</div></div></div></foreignObject><image x="341" y="207.5" width="12" height="15.75" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAA/CAYAAACmVEtSAAAAAXNSR0IArs4c6QAABJBJREFUaEPtWksobWEU/k4kkok8MmLGnCjEBJE88i4GhAglkTzyyJtC8shr4F3yfkUGohDKQAYoKRNiQEgicVt/7Z2zzzl3P+7ZR7f2P7v3rL3+9a1vrfWvtaL7/v7+xn98dBqAX2ZPY+CXCYDGgMbAP3pAUQhtbW0hLS0Nt7e32N3dRUBAgGIz7u/vsbi4iJWVFezv7+Ph4QEODg7w9fVFWFgYkpKS4O7uDp1OZ/QO2QDu7u6Qk5ODpaUlplApgLe3N/T396OhoYEZbeoQmLy8PJSWlsLR0dFATBaA19dXpqivr49XpASAMT1iFMbExGBgYACurq56opIBkMfa2tpQW1urp0AugM/PT7S3t6OsrIzXQyFCXo6KioKLiwsorDY2NpjBFxcXvFx2djY6Ozthb2/P/58kAC8vL6isrER3d7eBo+QC2NzcREJCAkgnHYrzrq4ueHl5Gei+vr5Gfn4+1tbW+N8GBweRlZXF54QogKurK5SUlGBhYcEoy3IAUOgUFBRgZGSE6SLPz87OwsfHx2QEnZ2dISMjA4eHh0wmJCQEY2NjcHNzY/82CeD9/R1zc3Ooq6vTo1F4kxwAR0dHiI2NZdWLTlVVFWpqamBlZfXXFJifn0d8fDwvQ3bFxcUZB/D19cXKWWtrK1ZXV/UUR0ZGwtvbm4HijlQA1LU3NjYyo+mQB6l8UrkUOzc3N0hNTcX29jYTpSpIuWBnZ2fIACVNcnIyTk5O9PRSktXX12N9fZ29AXIBPD09sdilkOFCYWpqCs7OzmL24+PjgyU9GU3H398f9C17H4TzgBCAp6cnozkxMRHW1taYnJxUBODy8hIpKSk4Pj5mRpBDqBrZ2tqKAiABqki5ubm87M7ODoKCgkwDoOSlS4qLi/W8pBTA3t4eAgMDeQOamppQXl4uyXgSWl5eBr0F3JmYmGBhZcAAeWp0dBSZmZnw8PAwuEApgOnpacaA0ACpCIQOoDykfBIto8ILlAIQfketSHR0tFT7WSX8mZvEHuWkxQDQZdXV1bKTn/tACICrRBoAqe+AxoAgB7QQkvsSNzc3o6Ki4v9NYmEZpbY6NDRUchk9Pz9n4+Xp6Sn7xuJl1NRLKhXBrz9kBwcHbHjhBpmOjg4UFRVJtV96KyGmUelLLGzmyPiWlhbY2NiIXcl+FzZzXPm22EMmbKfDw8MxPj4OJycnUQCy2mkxbUoZMDbQ0C6IBiSxIxxo0tPT0dPTw4Z7izFARlIiRkRE8HlALTWtacRGSqHThoeHWbdMx6IAHh8f2Tg4MzPDLqeJilr34OBgkyQIh3raAtIswLX6FgVAVgrXKn5+fujt7TUaSmZZq5hrHuD00LaDdkw0TnKHVoaFhYVs00DD/vPzMxv4zbbY+glCaRL/1EG7UBrSh4aGxPKX//2fV4ucJnMAIF2/styli80FgHOIxdfrkjm3kKDsKmQhuyRfowGQ7CqVBDUGVHKsZLUaA5JdpZKgxoBKjpWsVmNAsqtUEjT+BwgqXaaGWg2AGl6Vo1NjQI631JDVGFDDq3J0agzI8ZYashoDanhVjs4/OOK56WzVDS8AAAAASUVORK5CYII="/></switch></g><path d="M 387 200 L 387 0" fill="none" stroke="rgb(0, 0, 0)" stroke-opacity="0.7" stroke-miterlimit="10" stroke-dasharray="3 3" pointer-events="stroke"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 207px; margin-left: 387px;"><div data-drawio-colors="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 11px; font-family: Arial; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; background-color: rgb(255, 255, 255); white-space: nowrap;">11</div></div></div></foreignObject><image x="381.5" y="207.5" width="11" height="15.75" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACwAAAA/CAYAAACbxio0AAAAAXNSR0IArs4c6QAAAmxJREFUaEPtmM+LcVEcxh+yk82UNTvryWZqFv4AtrKxoxg1i8kkJfm1QiRTylLNNDaalGmsrGQrWSkpNtjYSFJiOvftFdfMe997j7tQ37M9eXzu5zzn3NPV7Pf7Pa5oaAhY5dUiwyoLBhkmwyIDiirRarXgdrsxnU7Rbrdxf3/PLXY2m8Hr9eLz8xPJZBLRaPTHTNnA8/kcPp8P9XpdCLwE8Ha7RS6XQzgcFjIvBrxarRAKhVAqlQ5PzwvMXrTv7+/w+/1YLpeXA16v18hkMojH4ydLxQPMYJvNJh4eHjAejw+53IbZk0ciEby8vJz1SinwbrdDtVrF4+MjFovFSS4X8Gg0wvPzMz4+Pn7cBEqAWbXy+Tyy2eyhBsfhioA3mw1qtZqwAQaDwa+ngBxgVoFut4tYLIZGo/FrpixgtlSdTgfpdPos1G63w2q1Cg/xd/wv8GQyESpVLpdPrJpMJgQCAby+vqLf78vfdMymy+VCr9c7McBCU6kUvr6+hDNYDjDbsE9PTwLs8WDnd7FYhF6vP/lPWYbFwBaLRVhCp9MJnU6Ht7c3bmCDwSBYZUfkzc2NULljSYqA2WZjocFgEEaj8SCGF9jhcCCRSOD29hYajUbI5QIeDoeoVCrweDwwm81nG0MpcKFQwN3dHWw2G7Ra7UkuF7DUpUAJsFQmAR8bIsO8m06qb2SYDIs6QpWgSlAlzg9OejXTq1nUCqoEVYIq8Y875tXdJaTuy2rPy/4+rDaQVD4BSxninSfDvAalfk+GpQzxzpNhXoNSvyfDUoZ45/98Ar+iQcBqLxYZJsMiA1QJqgRVQu0OiPK/AUIFJ52yPyWkAAAAAElFTkSuQmCC"/></switch></g><path d="M 427 200 L 427 0" fill="none" stroke="rgb(0, 0, 0)" stroke-opacity="0.7" stroke-miterlimit="10" stroke-dasharray="3 3" pointer-events="stroke"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 207px; margin-left: 427px;"><div data-drawio-colors="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 11px; font-family: Arial; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; background-color: rgb(255, 255, 255); white-space: nowrap;">12</div></div></div></foreignObject><image x="421" y="207.5" width="12" height="15.75" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAA/CAYAAACmVEtSAAAAAXNSR0IArs4c6QAABI1JREFUaEPtWFkodGEYfqaUJIriSnEjKZEkiiw3FBcSIktIskSyhCwRNyiUNYRsUbYsRUQUIjeWJCXlAnFBkUTi7/3qnGbMjDnLmJm/zlsu8H3v9zzv/h7V9/f3N/5jUSkEzOw9xQNmdgAUDygekGkBSSG0ubmJ1NRU3N3dYWdnB0FBQZJgfH194eLiAktLSyCdh4eHeHx8ZLp8fX3h4+ODqKgoREZGwt7eXucbognc398jJycHCwsLTKFUAkdHR2hoaMD8/LxB8o6OjqipqUFubi5sbGw0zosi8Pr6ivLycvT09PBKxBKgxk+gS0pKcH19bRC8+oHs7Gw0NTWBCHEimMDb2xtaWlpQX1+v8ahYAtvb20hPT9cA7+/vj8zMTISFhcHZ2Rmfn584Pj7GxMQEI/vy8sK/mZ+fz3DY2tqyvwkiQAqqq6vR2dmpZTExBB4eHkBWXFxc5PVUVlaiqqoKdnZ2WrrJW6urq8jLy9MgPD4+jpSUFGEErq6uUFZWpjdWxRCYm5tDXFycXmvqi6e1tTXEx8fznoiNjcXg4CAcHBz0e+D9/R2zs7Ms0ahS6BOhBCgEi4uL0dfXx1R5enpiamoK3t7eBvOAsFDudXR0sLPkLSIVGBioTYBK297eHpqbm7G8vKyhPDo6Gn5+fowUJ0IJUMImJycz3SRpaWno7u7WGTq6GI2OjrLc4YQLI60cIGsnJiayJFIXSp7GxkasrKywHiCWwP7+PiIiIvgwICPU1tYatD53YHd3F8HBwfx57r5BAh4eHqirq0NCQgKsrKxYZZBC4PT0FGNjY8wwz8/PKCgo4BNRCIv19XVmAE7a2tpYSOolQMlLVi8tLYWTkxN/USoBISB/O9Pe3s56ByeUPxQpWgQuLy8xMjKCrKwsuLm5aek0B4GnpyeGh+va7u7umJmZYQVAUB9QZ2FqAtQL6E1Kek4yMjLQ1dXFmpnFEzg/P2dd+uDggC+hlEsxMTHsd4sm8HNwJMCSRglzhJCuwTEgIADDw8OsCXJikR6g2auiogK9vb08UFdXV1ZcQkNDNQqLxRGghYYGvIGBAQ3wQ0NDCA8Ph0qlslwCNzc3rDlNT08LAm9RSXx2dsY2PRoZOKEpoL+/HyEhIXp7nNlDiOo8LTm0LqpPvZSwNOzR8PibmJUATb40EhQWFvLLPIGlmYcaFXVcQ2I2ArQ20nxDE676ykgdt7W1VWP+sjgPEHgCSdVGXWi1pB9u3zVkfbMksS7wtGHRZ5OioiJYW1sLwW2eRkYJOzk5yRKWCxsCT6FE2xbtG2LFpDlwcnKCpKQk0IDGCX3noZ1DCniThhBtYVRtaLfl5OdgJtb6JiWwsbEB+hyiXnForXRxcZGCG15eXqCPDCYJoY+PD1ZxKNaNJXqXekMPSNnIbm9v2QK/tbVlSL3g/5uUgL5PNYLR6jgomYCcR//irugc+AsQcnQqBORYzxh3FQ8Yw4pydCgekGM9Y9xVPGAMK8rRoXhAjvWMcVfzO50xNJpYh0LAxAbXek7xgOIBmRZQQkimAWVfVzwg24QyFfz3HvgHhbxFnbRuIwUAAAAASUVORK5CYII="/></switch></g><path d="M 27 30 L 27 50 L 40.63 50" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 45.88 50 L 38.88 53.5 L 40.63 50 L 38.88 46.5 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><path d="M 167 20 L 187 20 L 177 20 L 190.63 20" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 195.88 20 L 188.88 23.5 L 190.63 20 L 188.88 16.5 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><rect x="17" y="10" width="150" height="20" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 142px; height: 1px; padding-top: 20px; margin-left: 22px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: left;"><div style="display: inline-block; font-size: 12px; font-family: Arial; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">Research</div></div></div></foreignObject><image x="22" y="13.5" width="142" height="17" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAjgAAABECAYAAACMCk9lAAAAAXNSR0IArs4c6QAAEnFJREFUeF7tnQesNUUZhl+7xhYb1ijGHgs2LNjR2FGs2HvDErGABRRRbFgBFQWxICoWFBuiYi8o2I0VDYhYQY0aoxjbPsmMTsbZ3Zm7d8+/9/hO8ofkntmdmWcOd977tTmb3EzABEzABEzABExgzQicbc3W4+WYgAmYgAmYgAmYgCxw/CUwARMwARMwARNYOwIWOGu3pV6QCZiACZiACZiABY6/AyZgAiZgAiZgAmtHwAJn7bbUCzIBEzABEzABE7DA8XfABEzABEzABExg7QhY4KzdlnpBJmACJmACJmACFjj+DpiACZiACZiACawdgVzgXE3SuyTtMHGlP5V0sqQfSfq6pOMl/UzSPye+14+bQA2Bi0l6u6Q7hM7fkrSbpB/WPOw+JmACJmACW5/AXAKnRObDkvaV9I3uv//a+ui8ggUTsMBZ8OZ4aiZgAiawCgKrFDis53eSnhCsRBY5q9jh/88xLHD+P/fdqzYBEzCB/xCoEThflvTHBmbnCi6ui/Y8g/vqoZI+2/BOdzWBFgIWOC203NcETMAE1pBAjcC5uaQvNq6d915S0n2CxYbYnrQRk/MQSb9sfK+7m0ANAQucGkruYwImYAJrTGAugZMiu4Kk10q6S8bxUZIOX2O2Xtq2I2CBs+3Ye2QTMAETWASBVQgcFnodSUd1sTfXSFb9FklPlPTnRZDwJNaJgAXOOu2m12ICJmACGyCwKoFzDkkvkPSsZI5f6tLIHyCJmBw3E9hMAhY4m0nT7zIBEzCBLUhgVQIHNA+UdGTCyLVJtuAXZotM2QJni2yUp2kCJmACcxHYagLnQpJuIeneIVPregEMViAE06clHROsQhtJQz9ncKPtKulmknaUFLPBqN9DobjPSDpW0ukT6vmcXRKB17tI2jkbh6w1iiN+QNLnJf1lwuaznqt277mtpJ3CmJEZr4XbdyUx5nGhRtHfK8bLBcQbJD1F0l+DO/LJ3bvuHtjxboLKKSD5vZFij9sFHhToo9hknCvc4c97PiTpNyNzHBM4fM4YzPHGkogTo8W58h1iPBemrPgyuIsJmIAJLJHAKgXOYyW9foMWnPNLeoykfRLBMcTziFBU8NRK6HC4Tdf3eUFA1TzWOgbvZBwO7f0k3bViEA7250s6unPvnVXRP3Y5T3j/M4J4qn30JEnPlvSpkcO9JHD2CplxL5J0wcKAZMwh6L5W+OwSkvaQ9LiK/aWWEkHrL5P0p56F9Qmc08IYNd8jClPuKekHtfDczwRMwARMYDkEViVwsLwcHA7AuPqPSHqwpN+P4Li6pAMl3b4RG9aJp3aWgPePWFqwphAL9Lqeg3loWMbYPVg/xixGiA5E2gs3MM7busP8aV3K/RkVDBALrwhsK7r/TxdEA/FSr+oEZZ81JxcQh3WC6quSXj6wtlJQOd+/WwXhm5cSGJs73x+KRpZiuEoC50mSHt3IBYHJnn1ubDL+3ARMwARMYFkEViFwGOP+4RBL/7J/Tjjsh4QBWVdvDm6ElBx/xROkfGJncfhbJ5440G6XuDRiXw5rrALvHBA5HLBvTdwUPMtzvBuXRbQSMJdbZ/3oi2uM9X1/YGtxFSFQXlLogyvkBElYFwjGvm5wKeWFEnFZYQX79cA4WLoO6Fw4j8/6sIZvhvX8NnwGM9x9Nym8D2vL/QYO9lxAIAQQsZcO7/pkUsgRvrjI7tW5r96XjVViTxf2l3cw538Et2GJPeIVJrnwy+fHen6VfT8QRrgb2bdzBxcebsnc+oSQoqQBz7uZgAmYgAlsEQJzCxysIxxsuBNinANoOFQoAkj8R1+jUCCxHcRJxMbBt3+on5NXV2as6wfRlFp7OMgIcC4VK+RQPjRcxBjHwBrBnVmlIoTnC2KG9aQCBIsHbicO47z1CTxcIDxDvE0e68G8sBw8NztwXyMJV1BfXE4eyM1csKq8cqCo4uUl7R3GS+d+UBir5BrLBUR8Dta4dXCpxTWxfoQPIit1KV1FEpYpYmBq9vcikp4uCUtMKkJwbTHXVCj3zY9xhtx+23diBxcbgjVtrtm0RX6heZomYAImEAnMIXAu0MVI4CahAvJ9C7EmNVYVLBkc5Bw26eH5iBBIPGT1QXhgKcEdERvxMhyMuSi6QQhajZYHLAKPHHGbwQwhweEc21DKe+mG9kM6kUJ8TF8MCe9lnDt2FaHpG8Uh/Qmw/njhK4wAoHDiPZLP4IdYGwscxn1GvzSNH+sG6/xFYaw+AYHLkVu8x9x17C/jYcVr2d+SJewrQZCckryrb370ffiIta0krGMQ9ZSAb//WMQETMAETWCGBGoGzmdOpie9gvCsGt1L8675GFKXzvGwQIAQO03iegx+3R9p2CwUI48+wmGCNGWslMYHV6BPZg/Alu4iYmNhqXE2xL89jPcDKFFtfgcRcrJUO/qF1UYzxvZ1AwbJC+04QqKUg25KAaLl+I99fxqsVR2RaYWW7W7KY3MJSmh8WuQeFAOqx/b1nsELFfqyNOK2aGKixd/tzEzABEzCBFRBYpcDhwCRLiRTcsfRbrChvTNbfZ4EZQpS/g6DZZ4aYnfhc7tJ5cbAqlFxN6Vhww/pA3M9PgquNWI08DgfLEHOnH23IAtO3lvwdfdlIVw5ZSgiVK4UUcwTb2FriuCVR0HcPWalvLTvGy7l/MFjcxtK/41zzvSVAnBgn0tRppfm1VM4msP3dnci5dnifazat4JeRhzABEzCBzSQwt8DhQMdqQg0U6pfUXMtAnAtihODR2PjLG9dHS8stEiWXyy2zW81bsqJq5kLQ6keTmBFqzWCpOLPm4dCnVAWawGncJpvZpgocbohHzI01AnpxIWLZig1xwp6PubZif/aWzDoCfwnSJvX8C0kqfWktLczy54esWWPr9ecmYAImYALbgECNwCGTKI9diVMlGLaUhUMhPFw9/OXbGrdwmSBmyJqhIZJw/zCPlkYc0DsS60nJ8pFbR+J4BAAjqIitGUtjH5pTXvsntzTUroeb18n0iq1kjap9V1+/qQKn9tZ53HvEL6WXr5JNtZmp2KW1tIzRwmIqdz9vAiZgAiYwA4EagTN2cCFyyJQiaDatZYK44S9zisbV/mXOEnPLC8KEA5EMqpaGJYgg5/SCzzxOphTjko/x2VC5GEsUf8mTll7TSpYXhN9GDvJrhfiROC48qAEzFKRcM0eCdi8X0sWJOyGdO81QqnVRnRyCn79dMWgedD2HdWSqQJn6fAUGdzEBEzABE5iTwGYInDg/glNJY05TtDmAcUVgfRjL5Invwa2Du2GOVnJ1UTuG4ntcLzDWEFnE2uBy4xqFPssW7ym52sbeX/v5x0IcS6xpM/Qce4wIxTLGPwTGNUNKfcn6lr6rVuC0xKjk8S24l6i58+PaxVf0G7uqYewVFjhjhPy5CZiACSycwGYKHJZaKszXmgG1aoHDvEmTxgpFUG5tRV3WRdYRNXHINMqtVNtS4GCZIQONlGgCnNMaRC1fyTkETr6/LWKtdu4WOLWk3M8ETMAE1pTAZgscMGHB4eBPXR0E7xKEirtnrG0LgRPnhCgh9ocie7m7pm/eWHW4EoKYndRKtS0ETutdV3FNsXIzmVipGLLA+e+uj7lqx77X/twETMAETGCFBOYQOFgPSMfO68nU1n9ZxV/4NYhxXXFtAsX2CIhNb+HOn0cgIIqOSj7YrGywmrnSh72k1g9Vi4csNggyXErcHcVVCGQhkeqOIEWkcct2bHMInDzGyi6q2h12PxMwARMwgWoCcwgcBr9UqGOTZsrwc2rHkCI8FI9DXAiVeqMFaI4DsBpQ6AgnKiQzN4oDsq78rqi8CvJ5Q4G/9F4obuqmXswcDfcgd27tkLwc4UVG2HuCmCGtui+rrSXuZIoLaFsEGbfECIGvhcUce+l3moAJmIAJTCQwl8BhWn2uqr57oeJScJNgCaEyL41D+k49d0lNXP6GHycFncDk9DqIUjo7Vx+k103MVfK/dPUBdy5R+wW3YE0WW8uhPkXg5On7bEJLCjf9sY5xxxaijuKKBCgT+B2vlZgyPwucDf9v4QdNwARMYDkE5hQ4BO4iAkgVTxvWBOrD9NWXuXCw/nDnUmytheB4jusA3hSsRbhhTg3l9+Nt3FiIcIdxQeeO3SWeuNaYV+nupdKOkV5NnR1u5I4tz9LiOgFcc7G1Xp/Ac/G6By4nZQ2kVVMTCOESqxTntYN4DpcZ1aBrxA398+wmfjaHi6pk2SKGido+tS1fb56mboFTS9L9TMAETGBNCcwpcEBWujGanw/dO1S6v+nT4ZmfV+5Dqb5NfiHmxUN9HWJsaK2WopoYm9KdS63CI79Xi7nmgqBUO2iXUOG3Epny+5fmEji8N79qoeaS03QdBIDzTHRjEtTOfVR/CJ0scGp33f1MwARMYE0JzC1w+grpYclA5PCXd6ndMGRipcGyBC5zaWVNPZ2SsDogxADFQn2lQny1t28z51wg8bPc1VKyYtXcaB2ZMEfEDHOPjYy0XUNMTfxZftFma/XnkoiaU+BQhwdLXlqEsfayzZKwzC18Fjhr+gvLyzIBEzCBWgJzCxzmQWl+Yk9wsaRtSEyUhEFt0UD+qn+ppN0zUYDLi8yhtOWWgNqaPXAjloiKwrGV7rris5JYo1gglYgRK32NMbgNHTdbKvQQeXsn9y7xfB63xM9qArrph7jBPZTvD5/1xcZMFRClmKGaUgJnD7d6c+VFtN6UAoinzq8lHqn2/zX3MwETMAETWCGBVQgclrNzdwgf2Qkd7n6KjSsYiFnhKodS63NvcRi/WtJp2UNDNWD6rD9U+D1YEnc9xUYa9f6SDu+pVEz6OOKJooBprZ89usyqgwoxLyUrDGNxMCNUjs/ECp8xBq6sfbJsrT7rD/2pIv2wZB2ItedLOqTnktO+KzZSrH2XnE4VEIyxffhOEAcVGyKHNR9dyPZivlSb3rOC+9T5WeCs8JeQhzIBEzCBOQisSuBsNOAYCwLXPJTquhBky5UOHOQIDSr2Ur03bzyPC6PvWoOShYV3IHSI2zkx3D/FLdg36lLYdyqkiI/V+EGA4GZKU8bTQx3rD9lANNw3pTR0Dn9E1DE9X4RS1hpdeQ5hhKAiKBlWpLuzllSgkXV1Sqj7E4fouyF8qoCI7+/bX+YcmSAQqUeEtS1PzceSs1dBwE2dnwXOHL9t/E4TMAETWCGBVQkcltRnkRkLur1psEKk9V1qEeFCQtycMfAADAg0xtKxkSsNCHblvq0hdxPDI3Kog8O/1sa7icVhrL6sKLLAmAeuqVS41IxFrRwsIzBOixXu12Vx8S8fc6qASOe00f09LBSULF3COnV+Fjg13xr3MQETMIEFE1ilwNlowDH4qJ2C9YK6Lvlf8SW8WCNwz+DqOKuSP2nSxAVRDbimIToO7C6wPLTHBVR6BzEkuOtwb6Xp5UPjHdEJjH1DivjYvBA5xNLQv+ZOrZNCvBICB055sPJxIRj8zGzgqQIiXwf7ixDFwjUmzmr2dur8LHDGvmn+3ARMwAQWTmCVAgcUfQHHpcDZEjqexxV151C3Jd6GjZsqXjuAlQOXTF/F3qEtgQf1bXg/d1IhEuIVDXEM6tDgkvpig7DJx0SIkEFENhRrwC0VrUcc4LirqOaM8Di9oZZNHId4Fa5cYB1YZeIasHYgapg74oX6QGlWGnyJPYoijzUTnM1c0jZVQPTtwXZdajvp7ewxc44iDSYndG61YyVxOefQLe68e+r8LHAW/ovL0zMBEzCBMQK5wBnr789NwARMwARMwARMYPEELHAWv0WeoAmYgAmYgAmYQCsBC5xWYu5vAiZgAiZgAiaweAIWOIvfIk/QBEzABEzABEyglYAFTisx9zcBEzABEzABE1g8AQucxW+RJ2gCJmACJmACJtBKwAKnlZj7m4AJmIAJmIAJLJ6ABc7it8gTNAETMAETMAETaCVggdNKzP1NwARMwARMwAQWT8ACZ/Fb5AmagAmYgAmYgAm0ErDAaSXm/iZgAiZgAiZgAosnYIGz+C3yBE3ABEzABEzABFoJWOC0EnN/EzABEzABEzCBxROwwFn8FnmCJmACJmACJmACrQQscFqJub8JmIAJmIAJmMDiCVjgLH6LPEETMAETMAETMIFWAhY4rcTc3wRMwARMwARMYPEELHAWv0WeoAmYgAmYgAmYQCsBC5xWYu5vAiZgAiZgAiaweAIWOIvfIk/QBEzABEzABEyglYAFTisx9zcBEzABEzABE1g8AQucxW+RJ2gCJmACJmACJtBKwAKnlZj7m4AJmIAJmIAJLJ6ABc7it8gTNAETMAETMAETaCXwbxGpN4HQ7y0zAAAAAElFTkSuQmCC"/></switch></g><path d="M 167 80 L 177 80 L 177 20 L 190.63 20" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 195.88 20 L 188.88 23.5 L 190.63 20 L 188.88 16.5 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><rect x="87" y="70" width="80" height="20" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 72px; height: 1px; padding-top: 80px; margin-left: 92px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: left;"><div style="display: inline-block; font-size: 12px; font-family: Arial; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">Planning</div></div></div></foreignObject><image x="92" y="73.5" width="72" height="17" xlink:href="data:image/png;base64,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"/></switch></g><path d="M 67 60 L 67 80 L 80.63 80" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 85.88 80 L 78.88 83.5 L 80.63 80 L 78.88 76.5 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><path d="M 167 50 L 177 50 L 177 20 L 190.63 20" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 195.88 20 L 188.88 23.5 L 190.63 20 L 188.88 16.5 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><rect x="47" y="40" width="120" height="20" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 112px; height: 1px; padding-top: 50px; margin-left: 52px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: left;"><div style="display: inline-block; font-size: 12px; font-family: Arial; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">Design</div></div></div></foreignObject><image x="52" y="43.5" width="112" height="17" xlink:href="data:image/png;base64,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"/></switch></g><path d="M 207 30 L 207 50 L 220.63 50" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 225.88 50 L 218.88 53.5 L 220.63 50 L 218.88 46.5 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><path d="M 207 30 L 207 80 L 260.63 80" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 265.88 80 L 258.88 83.5 L 260.63 80 L 258.88 76.5 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><path d="M 207 30 L 207 110 L 300.63 110" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 305.88 110 L 298.88 113.5 L 300.63 110 L 298.88 106.5 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><path d="M 207 30 L 207 140 L 340.63 140" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 345.88 140 L 338.88 143.5 L 340.63 140 L 338.88 136.5 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><path d="M 207 30 L 207 150 L 177 150 L 177 170 L 190.63 170" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 195.88 170 L 188.88 173.5 L 190.63 170 L 188.88 166.5 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><rect x="197" y="10" width="280" height="20" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 272px; height: 1px; padding-top: 20px; margin-left: 202px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: left;"><div style="display: inline-block; font-size: 12px; font-family: Arial; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">Main controller development</div></div></div></foreignObject><image x="202" y="13.5" width="272" height="17" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABEAAAABECAYAAACBIUBKAAAAAXNSR0IArs4c6QAAIABJREFUeF7tnXn0f89cx1+0qJxyUpRIHCkV/SgUJWv97CkkpWyR7CVLSLKFIpLIvq/JLksoS8ke/SxHshzKmkNH1uj9YOYYrzMz9zX3vu/7+36/v8855/vH9/O+d+7M487MnddzXq+Z05mSCIiACIiACIiACIiACIiACIiACIiACBw5gdMdef1UPREQAREQAREQAREQAREQAREQAREQAREwCSBqBCIgAiIgAiIgAiIgAiIgAiIgAiIgAkdPQALI0b9iVVAEREAEREAEREAEREAEREAEREAEREACiNqACIiACIiACIiACIiACIiACIiACIjA0ROQAHL0r1gVFAEREAEREAEREAEREAEREAEREAERkACiNiACIiACIiACIiACIiACIiACIiACInD0BCSAHP0rVgVFQAREQAREQAREQAREQAREQAREQAQkgKgNiIAIiIAIiIAIiIAIiIAIiIAIiIAIHD0BL4D8upk9oVHrm5jZX2+JyJnM7BFmdo1Kfj9rZq/e0nPmZvNdZvZEMzs1ZfCvZnYtM3vn3Ax1nwjsEYEfNrOnmtkpgfbtxwTGgN81s8/sUX0OpSh/aGZ3Kwp7nTTOHEr5972cnu9dzOzu+15olU8EREAEREAEREAERGB3BEYEkMeb2c3M7H+2ULyfNLPnbgSVs0kA2QJNZbE2gXNtxK9rm9lDzewTaz9sB/lLANkB5MojJICsy10CyLp8lfs0gWP7VkzXWFeIgAiIgAiIwIERGBFA3pU8Nt6yhTqygnz/Rj7yANkCYGWxFQJ4At3AzO5gZq8zM7whPr6VnE9sJhJATgx/CSDrcpcAsi5f5d4mcKzfCr1zERABERABETg6AiMCCJXfRhhML/yFZ0gAObpmdpAVOk8KB/vpVPoXSQD5CgmFwMxvzhJA5rOL3CkBJEJJ12ybwDF/K7bNSvmJgAiIgAiIwAknMCqAPMbMbm5mn15Q8l74iwSQBWB161YJeC8JCSBfxSsBZH4zkwAyn13kTgkgEUq6ZtsEjvlbsW1Wyk8EREAEREAETjiBKQHkv8zsU2bGB570djO75ubfaTNLzvMIf7lfuv8jZvatm/9/e5HfPniAzKyebjsiAsc8qVUIzIlpqBJA1uUuAWRdvsq9TuCYvxV65yIgAiIgAiJwdASmBBBWvTkB5XZFzX/LzB45k8R3pnt/Kd3/kM0pCOc1s8tJAJlJVLetReCYJ7USQNZqNf18JYCsy10CyLp8lbsEELUBERABERABETh4AhEB5AFm9qjixJYlYTAXNbNnpbw4Tea6ZvbbxXGzAJUHyME3q6OogASQr75GHYO7veYsAWR7LGs5SQBZl69ylwCiNiACIiACIiACB08gIoDcdBOmcp90AgwVnhsG48NfnmlmtzezB0kAOfh2dIwVkAAiAWTb7VoCyLaJfn1+EkDW5avcJYCoDYiACIiACIjAwROICCCsAP+mO7Z2ThiMD3+5jZk9Lp20cWpBcsQD5BvN7IfM7LJmdvG0V8mFirzel/YreY2ZvdDM3mRmXwy8NY60e2IhzBAGdC0ze2flXr9CXpaf8v2Umf2KmeH9kk8UIR/K8uzN31+Q9lkJFGtrl5w+sYL7pc3sFDP7gZQ7rN6YyvbKjUj1mRlPzflfxcwuY2YXMbMzp3yoNzyp99+b2SeC+bNXzJ8njyFu8ZuSfoeZXXHD9Rc3ZacN5H1rqM9rzexpZvYvE+//ZzbhWK8Klse3iV75zmVmtzSzX06cYQDbSJmo1yWSAMl7yu37v9PRvK9OXlUIk5G2TfV2GQIDF/oAYW9lHyjLjxj6NjP7UpC97595Y9bPmtmPb9rUrVI7oM3x/mlnTx18RqQojJ/nMLMrp7bHGMQzGXf+IY0hrzCzz6XMlgogrbbA82iPL09tgf9/uVOBb9j8/kdmRnly+pP0//+LVLy4Bg++hxb/p49ybPTnO/mU3C7vxp9yfKCPswdVNC0VQNboa35MuU5qF9TpDGb2c2b2a5vx7GJuzJrTZnvfoiXPymMrfZi+zLci99/npXGM/bzmpN63Yu63aN+/FXM46R4REAEREAEREIEtEYgKIBhwzy3CYOacBFGGv7C56tXM7N1OaKBaEQGEyRxGBx4kGNfR9LrNxPyOm0nnyyaMrW0IIBc0s7uncvbKx0TyLhtD6hGFoRStz+h1vG8M6Dsng3Tq/rduLrhrMqoiximT2Uum91KKWq3nUHeMJ8KsPjpRmNak9pNpY14Muix6tLLi/d96I2z9c8NA3LYAgrGDgXP/QmDyZUOweU6lwGdJYg+bBmfxqIcIQeVugbZNHrsQQOijV09te+q9UCYMKd4hBnDPeOfamgDCPkUItfdymypnZow5CHJvmGr0wd95P4i4eMiVmzj726nXbc3sHUlg4B3lVBrDvcee0cxunPptpC0gLMPyvZ1MEY0RnnLZEWwwoP8zWH8u494Hb8bx30j3ENaIkfzSTh58S/44vaupRzE+3MPMHhY8eWyuALJmX2sJIOczsz8NfB9oP9TrzVOwKuFqfEv/KYkrjLFT38q/Ss+CO4nxHNGWd9Drw1z/e+lbHhVh87eItsC3fCqxaEDfeUbgO7nv34qpuup3ERABERABERCBFQlEBRAmNRjo10hl6XlE1IpbC3+5YZpglZ4W3DslgDBZ5RSZPOkexcMkHWGClcrWZG2pAPI9E0ZvrcwPNLM7BSf6o3XmegxSVsYRP3oGWy1vRJD7TniDMOnEIMQQHc0fLwY8JPA8aaXapBajkBVoRK1oYrJ+s+QR4A3tbQsgbBaMkZO9a3wZWeXFaMc4L9NPbESPvzAzyjOSaNu8J/pHz3NnbQHke1M5Rvso5eddIor1DCnfPx++MaJeb2Z/1ml7S/Yu8u9g9P3geYTXHOLAqACCoczY8AsjDSF5oWCUInLUBCXvkUf2POMlA8/xR5q32jNZYkwjiPX6Q+vRL07Hr79romxzBJDRd5mLEO1rNQGE7yffU7wpIgmPnt67zHnUPEC+P4lUEeGMfBBBGMPxWkJ8hWlkPM99F0FsSsDkW8TYfc9g3iWjx6fvTE8w3/dvReSd6xoREAEREAEREIGVCEQFkI+nyRAr2TlFVy+5vhb+ggDBpGxEAGElFAOPVdcyMflihQyXWcpKwkgidCCHnZTXY3D+6iY8A/f0WloigLBahuGXjV7KhoHPShxu4edMITu1FbURpiNNglAcxIl7V25iZY0V2/dvVs+/OYUSMWn3k14mxbz/mot8673wuGj+XMekuPVO/KQWjwe8BRBOcsqhB4SD4OaPFw4r3X7y3xLwOJGIFU8S9/Aez5b+T56ErGRhAQPhKWb2ofS7L58/QhojGAPxf9NKLOVCWKIflAYDHjSPrYgmI+1oSkxbUwBB/MNDDM8W30cJRaKPUhfaF2In9fWJEApEnKhASdvBTT+/K9rzP6ZMyR/WGN9/O9JpGtf+yObdPLpivCKsPT+F3NX6Eb99LG38nLOe6u+9ZzGewJMxhfGKk7TK8D+eAeebbFbvn1wxSr0ozfWR8JUSCwZy+U3AWMao9QYwz7p2Erb8uMK7wyMLDxkSdb5Upf3Tf66f9qBqvcZRAWQXfc0LIH+Q2v2VikrksYH3xXeDUD4vmjK2sWl4btc1Bl4A8d+iqTaa82Tcw+MPITK/L94Tnmp8X2lvV614hUT2B+t9ixjPaQt8i3rjN6GjCN8fbjSEff9WbGEYUhYiIAIiIAIiIAJzCYwIIH61byQMphb+wuTdCw3Uo+cB4id4XM+qL5Nwv4qemSA44FmBcV0mVtjzSpfnt0QAyXkxmWU1DWPUl40VMOK+KXtpnLNai2dMdF+M6HtH7MGNvDQ+CAeBC/sGlIYmbQIjhI1vS9dkJuB4ALHSXiYmqqxOIkyVCdGH1Xz21PDhM63wAQwBJt+1lV4/qS2fxeScyT7u0d7zgWchNHjRDEHIiw9lnqOboLbKRzuAM/zzXhA856yJe3Y3528IMKxwlivD3E85aa9Z3MvlZFWdPVYI+/Du7T3Bai0BpCaE9foBbe3c6d1hIJd9h/6KwFRLtXGD62ijhJvQDnKb4xkII5SDf0sSIgubNuO1U5YVrwb6ud+vgufSN36/8dCeAFITknJICJ5F/lm0BbwZECBKbxGYMG7SH33yYzqiCuMS90ylMzmvwBzWyLjuU01oaI0/3EtfQrCiT5dCAOMjhm9r9X9EANlVX+t5lbVCMqk//YF2VX4feuMj3GrfR/5Ou8fziDGobDf0jQunNl2OOeznQRn4XiAW06cQFctxnG8Y7Zexqfyu9MbVlhBGmA+hMHgA+m8FfY6xgDDR8jl/mb7fNU+3ff9WTPUt/S4CIiACIiACIrAigREBxE94o2EwfqXxb5I7OHs3jAggNZdtDD9i3afijpmscR2rbzn1Yt6XCiBMODG4n9TZa6Q2GeS+KzSMlbnNACOMPQFYIc6JFTTCQD7YybRmgNVEIybQvNPSUIm4KVN/QgL8/his/CMYlGJBNorKTVBz0XN4wb916lIzzNkUF7GFVfla2pYAglGG502kjWK8YkDkFHV9r4WFtQQr8l5LAPEGWKQf5HeLYINQlRPCHO+n1kZbAgjX41E25YI/ty/h1ULbzoZYpH69Fe+WAIKoCA/Gt7It3CAJlr36YTDT3m5U3Ev/v0VFNKFfYEher7i2tSeNZ1aK2vzWEm8R+ghRwmNgZPzhWgQaQipK4xxjmPCRGoOoAML3YFd9rSWA4BHEGNwSmxgf2aCaI+jLsZXwTcSCmideTQDpeQHl94HXG6KhT1NeN7RtvLUoU07l993n58cdfn9I2jOqJ07Cgs1yubb0rESQJzzKp5YAsi/firnjj+4TAREQAREQARHYAoERAYTHeZfnKRdu7vHCBSuiGLKkEQHEr1YymWGV7D1BDpwOweSMlT8SG3xyOkt2vS6zWSqAtIx4X9SaqIObMwbLtpKf3CJcwQ135anEBp6swpdhINdMbv7cWztNome4+ufR/tgbgZXJnFqGe21Sy6QZoxdBZyp5g633/slrGwJIxCU8l/vHzOzpyfsm/61n7Pn6nj0Z5xhNObXa4RoCSK0tT4WylHWoeVe0TpuqjRu9/Sem2kbk95pYEBVguZcxrxQleGZr/MQrhrCVbPhHjNiyDr4t9DYnxeMMQSGnSBhMLXyGUBu8An3y48+UUe3vx5uFcTuLTr33HBVAdtnXagJIdAyGM6IGoltOve9eTQDpeTrmPL8vCYeEHuUUHVujXkS1NjMVylK2hdq3orWvz75/KyLjja4RAREQAREQARFYicCoAOInO5HJFRPAv0sTWH8Sw4gA8oPpFAeEjPOkY0Rxi40e2zjyrCUCyIgXBwICq2elZwp1KlfUlrz62kSQsBTCVSLcakYf4TQcKUpiNQ4vF47/zGl0r4Wa4VzbS6BWlykvjpJdbZLfC7fahgCC4cIqbyT0wouLc8KhamJX7fjmNQQQf6rIiBCW35PPo7WaXOvLc49xjfYvL6COiFs8wwtw/K0lgHhRouXB0St7VNjwbSESBuP7bItFbfwYEfWo34iXSlQA2WVfqwkgU+F35XutedC02k3NA2vqVB6etWRs9d+Almeo90RkTGx5cLTatc+jdbLTkvrw7LW/FdExR9eJgAiIgAiIgAisQGBUAPFhMFNeGORPOEM26L1BMyJKLK3+yLOWCCCjx0kS085mczltUwDxk9NenH6LL6vWeFngMXFa2qQ0h5v8vHNBHq17fqZnUDN8a5PaEaPXH9nJs9cWQHBV599USEatbK0V9V4/qE3cayEN2xZAfD+njK0NMUfKz14wGElvcTfV+vK2Pad8Ob1xOSJukVftHdcM2Vo7j3ja+fJ6wabVNwkHQRAtNxOeEjFLUZvntlbiR9pZr1348aHV7yMCyK77mhdARoUzuHjBpuWl49toRMwi/5oQHx1bo99K32ZGxOvcNmrlrI2T+/6tWDqX0f0iIAIiIAIiIAILCIwKILXJWG+y/N3JfZf4XVIZ/sL/R0SJBdX8yq0jz4pO6sjXTzpxJ+e4WU77iCR//zYFEE7AIUa6dB9nk8PeEYKRMudr8Fwp9ymIuM/X8veeRbVVxNqkdsTord2/tgASNVzxbiLUCA6k1srm1Lvh9BH2f8BgyqnWnkYMU98+a5sf14zK0lNoqtz5929Lm4kS+pJTTcAZ6cvRZ/euqxlefiyLPMf3l1r78CIWK+WEgXB6zkhiXxi8s/LeP702xf4cZRhZz7OvJna12rkXSNn3AjF1dJNnQvHK009ankERAWTXfc0LIKPCGe/c17/FcYlI59lF23f0W+lFLDYIxxPmsyONOm1AzClZOdW+Ofv+rRissi4XAREQAREQARHYJoE5AshIGEy56lNbzV3bkGGTtnOk43AJD8DFvtxJvmUARyd1vAs/6Ryd2K0pgCwVZ3ptrWZsRyfNPt+Iy3FtUjtiZJ8IAQTD9SWBDhuNow9k9ZVTMkqPoppgsW0BpPb+2FzzA5ECF9d8U9rskHEjp9oKr++fLU+Rwcc3L68JMyNtL2dMOFJ5sk1NOPCeGwgXGM3laUGRetHe2eOIE51yarVH//56nn1e1O5d69siJ9Gw8v+FSAWKaxjDb178v+XNEhFAdt3XvAAS9QorEUX7a0SsbKH37KLibeRbWRMQX9A58rzXPM6fQsfyNTVBad+/FYPNX5eLgAiIgAiIgAhsk8AcASQaBuNXCmsTlW0IIDyHDRSZxPOPySKb3HEkJB4QvbSGADLqwbGmAMJxneVq2ag402O3LVd9nhFpB6MChi/76P3b2AOk52FSls8bSS9Kwpo/9jbS9yNGUNSg4nlz8ouUM3pNrT9FjK5o/pHrIu0zko9/zzUjs3dsauQZvWt6p85wShZGcE4tzz6/T0vP68sb1UvLn+9v7TMREUB23df880a81nJ9vUDVEvx8X42GsfCcNQWQ3rG0S9tEbawcHet3/a1YWmfdLwIiIAIiIAIisIDAHAGEx/mY5Jqbul8pjKzkknfEaMSzgxMSrp9cvMtjAkdwHLsAEjEIRniV164tgHhjbd8ntUvKt6ZRVjMQJICMtfpjF0Cg4fdoqIXB1E596nk5nWwCSK2vRUSvqdYYbX9LxHQJIF97C6Nj+ahYPvW+9bsIiIAIiIAIiMCKBOYKIN6NuLYKOBX+QrWiE7uMgPJeKG0seeUBLsTRv9bMiP8uxRIJIAMQ3aVrCyDesBqdlPqajd4/Oqkdzb8s35oCSM3zSgLIWLsfHadauUeM4RPhAUJ5/ckutdAWfwrH1NHDJ5sAUutrkXc+1Rqj7U8CyFdJLhmL59w/+q2Yet/6XQREQAREQAREYEUCcwUQHwbjd5uPhL+MCiDkyZF+93cihsdDrDwu0q83szeb2Zs2G++9O+398UQzO7W44dgFkG1tPFdrgmsLIP7d7Pukdkn51hRAdrEHyIigso3h7GQKgVkSDjXCmvEVz777FTd5Lyy/qSmne7GnRetI7TU90Gp1izxv131tGwJI9KjZQxJAonuMjLThfO2SsVgCyBziukcEREAEREAEDojAXAGEKvbCYHz4C6c6PLLCJbqyxa1s5vdkMzulyAfPjudt9vx4ehI7PmRmn2nwH3nWiIG1ZNJJUZfe32tuh7IJqp/g106+2PdJ7ZLybXNjRt8va/u+jAgWkT1A/Mkac08uiQ6dI/0zmmfvum2JfV5AqBmB/uSmN5gZG67++zYqMpGH34C1FM/8RpaRI7X9qTfb3INorgCy677mBZA7mhl7c4yk85nZ08zsAumm1vG2S74la4bAfEsS1m5aVHoOhyizJWOxBJAoZV0nAiIgAiIgAgdKYIkA0guDKcNf3m5m19z8O22BAFKLPX+nmbGvCMcjfjnA/2QUQPzxibisjx6Di7HMqSKfTiLTO5Lg9LmKCDbXwIkYffs+qV1SvogAFGjiFjU0ti2AED6B+/+VikKuucK7awGEcZJNQvmXEwbjPYNjT77He2TVGNXEpCuYGSeorJ3OaGac3nO99KBys1HfRp9pZjecONLWn3rDCTAcg/uxlSoS8QDZdV/zAsico8K9cNY6BnhfBRBetxfDap5p22oWS8ZiCSDbegvKRwREQAREQAT2lMASAcSHweSjCVkZvJOZ4R5Nekw6whAD2qeoKFE7ZvPGmyNuHzFggPhVNMpy7CEw3pji3Vxl849V5Wjyk+8yzt3/1jqecupZ3jCsTfD3fVK7pHwczfzgZBxmVrVNg6c41vpJbYPibQsgtSORa5toTpUfIQXDCA8yhFO8Hp5b8X7YtQBCub0x3zJCW3WMepH4cZX8bmNmGM4RoTc//9xm9igz+2IKA3zvxoPgGWb24YmXgKjBuJpTFmmuutl/6dnF3yNHXnuRPOI1UiseR5jfebPp9fvM7I1JTH/+xqhGhC1TRADZdV/zAsjUvim+/j6clN9b4ts+CyC+/fSOT2410RymxYIK7fmtm2OzX5MWQcowrCVjMc8evV97gEyN7PpdBERABERABPaIwBIBhGp4d3s2rmTPDYzky6d6tsJf+DkqgHjX7DmGPJNoDIAyHbsA4ld0R42pmudNafj41VTyH135P6uZPXxj2DBBzqk2wR+dlPpuNnr/6KR2NH9fPt+XnmNmNzKzjwyMF94Aah0Xum0BhCL6/oWAQejGWwbKz/iBsICRSmr18xMhgHhmlI36vSJYP47mJlSPUL6can2lthfHy5M49sHgs8iDcfdhxfWtsAmfJcIJoYacskVCeEHQpk+yik9qHcPq8/Ibq/L7vZInDcJMJHHE+YPMjCO9c2p5UUQEEPLYZV/zAgjhYexl9dJI5TeCoN94tnf/Pgsgvl1R/dFFjLOnucWlC3Y1IW7pWDx6/+i3IvjqdZkIiIAIiIAIiMAaBJYKIH6Fj9hmNu1j1RYjphf+Qn2iAoh/zugeA7WJE88/dgGEOvoVXYzia6d3M9Wmakbf1dKJOtxbE0hGjLWaodZaJR6dlPq6jd4/Oqkdzd+Xr2YgjxgItTbe8sJYQwA51+aUpSek41Rz3QiJul0Kn5pqa2dJ3h8Yhzk9NRlJn3I3nwgB5Axmdl8zu2VRlseZ2S3MzJfP15Vju9kslH0PytQSCy+chKDyxKo7pH0UIsLBeZOhmEUMnknZEQg+P/EifD3x6uIdcv+l0r09r74ye/o3vB5Q/BEvjuumVfupNsHviEwIOVkUY+xn/MIDxKeoALLLvlY71QchDK+3T0wAqPHrhR7tswBCuyJkDG+mnPAC4Sh75glTiW8NYgftMCfaEt8jNjsv09KxePT+0W/FVF31uwiIgAiIgAiIwIoElgog3l0b8QPXVCZ3pKmJclQA8aEc5M1k997JxbuHCMOQFUPcZn26ZGMFd8TAWjLppDxL759qHn4FketxZecd9dzhMTjus7nmd4oH1OK2a8YaE3wMw17+rVN92IMAg8tvZjs6KfVcRu/3k9qp8J7R/H35agYCJxrdbOM1gBDQC39APOD0DvZXyAnjgLZV2ztiDQGkZqxRlrsmo6W1OTHXUHeMG7wDcsLQpT5l2EX+baR/TvWPkd9rbX2qfqdP++4gBmUjPj+zJYDU2gI88Fx47MSYV+u3tIVrpJOxIvX14Qr32BjrtyrKP+LlVRPGMHxp11OheOdP4TilkNMTD6ICyC77WutY46l20xofe+yXfEvW3AQ1t7la/0HIoi3QRlsJFnh9ENJVioKMeXgn+VCopWPx6P2j34pIH9Q1IiACIiACIiACKxFYKoBQLO9OXBZ1aqIcFUBqoRwYBHczs4c0Vphxnb76xpC+/calmwlKLbXKN2JgLZl0Uqal90eaBvtAEJZUGmAvTpNHYuq/VGRCm0BwQvwoV+NbRlRtZY7sXpdWvF/m8uc3+LIyTNspy9RbERydlHouo/fXNkvkFIMnVerDs0bzr7232so97Rzjmcn+R91NGNd4MSEcYGiVqecxsIYAwrNrXhz8nZAK9gRiA10v5GAg4x1RhjhwT897ZKR/RvpH9Bo8OVjBRngtE54gbJCK+FsmxiCEg9tWxA+u642PtbbAPYi5eFS83z2LfnuhxPLKA22hVveaaJqvm7N3g/fiIC/GE8ZvxD2/PxQCBWP3XdzYPeU9EhVAeP6u+lpLAKEMrXbD9w7hmfqX4+OUx9GSb8kuBJDWtwKvRIQM9kfxYgYs8IRjD5gzF431kL8V0fFG14mACIiACIiACKxAYBsCiA9PycVs7T9QViMqgHCP3x8g58OkmMkQz2MjNCaMnCpyUTd55NSY9xR7k3A/rthMKn0aMbCWTDp57tL7I82iZbhxL3u2MPH8eOKFQY1nTJkwwtmUE0O25onAJBXX5PKYw3w/3Il3x2Bjs8yLJ2Pdr4ZPGTdLBYbR+2ubUWZeCBFfSAJP3uNiNP/We4M9q/zlSifX8g7w5mAvB8IYzmlml22Ie1OhJ2sJIJSTPS4eXewhUdazbGu0BepKHXxCnMMA/I8GpJH+GekfI9e02nr5fhiHLpjqVhpt/jlTAnGrLZAPp1+9KrUL+tLlGsxpS4g29O9oqoW25XvnbG7bG3/wcmJ8IIwBbrT7KzbaP2I24TDlhpdlnUYEEO7bRV/zAgh7+jBWlCE9Zb8mPIfTlHy7iYSLLPmW7EIAgXnvW8E3AE+7HBLTYsF1t970sWc1GvTSsXj0/tFvRbQf6joREAEREAEREIEVCGxDAGl9/CPH3I0IIEyi8RhgouaN5yk0z0ursKeY2VOKi1l55p836kcMrCWTToqy9P6puuff4YeIgbfACL+o6z0TW7wOSlf5aNnwFsEjhB39W2l0UurzGb2/FdJR5oso95L0h9H8e2wQ8DA0LxIFmK7jXT0weSjUTl3K2a0pgPAMVtcJZYLPaEL8uHnaaLN170j/HH1+5HqMU7xA2KQ2mjBy8cLiSOmcpgQQrrtY8nJj7BpNPA/xw3sORfIncSNMAAAF+ElEQVQpjzIvr6+dKhTJb+74Q960a/ZPgV1vD5RRAYS81+5rXgBhw2fEDATjnjhWMo30Ca5f8i3ZlQBCOflW8D79njiRdoT4Qbgce6G0wgKXjsWj949+KyL11DUiIAIiIAIiIAIrEdiGAELRamEwkcn9iADCc5hEs5cH7uatsJYSFYY1oRwIILjWem+VF6Z9Bj7m+I4YWEsmnUsnraPNoucmX8sLbrBm5T5yBCchGZdJrtuXCBSO1V8MSVZ1Pzlx/eik1Gc35/4pQ7c8qnZO/r0qE07CKifPiBhKvCvELUSkqXe1tgCSjRxc1xHEvDdLrd60BfaaoC30xBvuHemfgWY465JWmEYtM/YuwMX/PMlrI18TGSO5drQt4HVFeAmnXvmQgmhlaye4jB7h6p+Vxx/CGcrwul6ZRsagOQLIHL4jfc0LICwMIEohaBHK1BM5R/rE0m/JLgUQyjr6reCeVsjQNsb6Mo85Y/nItyLaB3WdCIiACIiACIjACgS2JYB4YSES/lIzZPhb62SWsvrE1p+aXKWZSBL7TmLCiOjBaiviBoZ7uWLoJ/WsLLI5ICtsZRoxsA5JAMl1ZPL5o8kIYYLOJDwb2RjQnOTC5nSsVEZOnfBNE6GKd8JRyLX82XfkBZsQgVcGTtDIec+ZlC6d1HI/hi4u+exjwGaMpTHPqUcYDrjkLy1fq3tzTDCiEu29bOushNLPeFdsPozRW+7l0hsudiGA5Oez2ksbwHPgAik0JHsg0dbYF4Sjb0fawkj/XGHY/LosGYtoH9SPNp+FWeqGYMAeF29L78Ybw1EBJD+Q8YtQF553vuS9wG+MY4SQMN6xMk6/7W06G2XihW32ccFjrhWCEs2X8Ye9X9hslTAUwqYyN9r1aSnEh9PERtr1XAEkl3uNvlYTQODK+6FvXCUdIU0oGGNwDulk81/69Ujo0pJv0a4FkMycbwXvn9Nc8MYh7CWPsbx7wmH4PiM6fSAg7pLv0rF47v3Rb0W0n+g6ERABERABERCBFQh4AWSFRyhLERABERABETgpCfQEkJMSiCotAiIgAiIgAiIgAieSgASQE0lfzxYBERABEThmAhJAjvntqm4iIAIiIAIiIAIHR0ACyMG9MhVYBERABETgQAhIADmQF6ViioAIiIAIiIAInBwEJICcHO9ZtRQBERABEdg9AQkgu2euJ4qACIiACIiACIhAk4AEEDUOERABERABEViHgASQdbgqVxEQAREQAREQARGYRUACyCxsukkEREAEREAEJglIAJlEpAtEQAREQAREQAREYHcEJIDsjrWeJAIiIAIicHIRkABycr1v1VYEREAEREAERGDPCUgA2fMXpOKJgAiIgAgcLAEJIAf76lRwERABERABERCBYyQgAeQY36rqJAIiIAIisA8EJIDsw1tQGURABERABERABEQgEZAAoqYgAiIgAiIgAusQkACyDlflKgIiIAIiIAIiIAKzCEgAmYVNN4mACIiACIiACIiACIiACIiACIiACBwSAQkgh/S2VFYREAEREAEREAEREAEREAEREAEREIFZBCSAzMKmm0RABERABERABERABERABERABERABA6JgASQQ3pbKqsIiIAIiIAIiIAIiIAIiIAIiIAIiMAsAhJAZmHTTSIgAiIgAiIgAiIgAiIgAiIgAiIgAodEQALIIb0tlVUEREAEREAEREAEREAEREAEREAERGAWAQkgs7DpJhEQAREQAREQAREQAREQAREQAREQgUMiIAHkkN6WyioCIiACIiACIiACIiACIiACIiACIjCLgASQWdh0kwiIgAiIgAiIgAiIgAiIgAiIgAiIwCERkABySG9LZRUBERABERABERABERABERABERABEZhFQALILGy6SQREQAREQAREQAREQAREQAREQARE4JAISAA5pLelsoqACIiACIiACIiACIiACIiACIiACMwiIAFkFjbdJAIiIAIiIAIiIAIiIAIiIAIiIAIicEgEJIAc0ttSWUVABERABERABERABERABERABERABGYR+H/kEuT5Hd66CQAAAABJRU5ErkJggg=="/></switch></g><path d="M 347 50 L 497 50 L 497 20 L 483.37 20" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 478.12 20 L 485.12 16.5 L 483.37 20 L 485.12 23.5 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><rect x="227" y="40" width="120" height="20" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 112px; height: 1px; padding-top: 50px; margin-left: 232px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: left;"><div style="display: inline-block; font-size: 12px; font-family: Arial; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">Side 1 development</div></div></div></foreignObject><image x="232" y="43.5" width="112" height="17" xlink:href="data:image/png;base64,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"/></switch></g><path d="M 387 80 L 497 80 L 497 20 L 483.37 20" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 478.12 20 L 485.12 16.5 L 483.37 20 L 485.12 23.5 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><rect x="267" y="70" width="120" height="20" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 112px; height: 1px; padding-top: 80px; margin-left: 272px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: left;"><div style="display: inline-block; font-size: 12px; font-family: Arial; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">Side 2 development</div></div></div></foreignObject><image x="272" y="73.5" width="112" height="17" xlink:href="data:image/png;base64,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"/></switch></g><path d="M 427 110 L 497 110 L 497 20 L 483.37 20" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 478.12 20 L 485.12 16.5 L 483.37 20 L 485.12 23.5 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><rect x="307" y="100" width="120" height="20" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 112px; height: 1px; padding-top: 110px; margin-left: 312px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: left;"><div style="display: inline-block; font-size: 12px; font-family: Arial; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">Side 3 development</div></div></div></foreignObject><image x="312" y="103.5" width="112" height="17" xlink:href="data:image/png;base64,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"/></switch></g><path d="M 467 140 L 497 140 L 497 20 L 483.37 20" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 478.12 20 L 485.12 16.5 L 483.37 20 L 485.12 23.5 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><rect x="347" y="130" width="120" height="20" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 112px; height: 1px; padding-top: 140px; margin-left: 352px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: left;"><div style="display: inline-block; font-size: 12px; font-family: Arial; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">Side 4 development</div></div></div></foreignObject><image x="352" y="133.5" width="112" height="17" xlink:href="data:image/png;base64,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"/></switch></g><path d="M 497 170 L 507 170 L 507 140 L 497 140 L 497 20 L 483.37 20" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 478.12 20 L 485.12 16.5 L 483.37 20 L 485.12 23.5 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><path d="M 497 170 L 517 170 L 517 20 L 530.63 20" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 535.88 20 L 528.88 23.5 L 530.63 20 L 528.88 16.5 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><path d="M 497 170 L 517 170 L 517 50 L 530.63 50" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 535.88 50 L 528.88 53.5 L 530.63 50 L 528.88 46.5 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><rect x="197" y="160" width="300" height="20" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 292px; height: 1px; padding-top: 170px; margin-left: 202px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: left;"><div style="display: inline-block; font-size: 12px; font-family: Arial; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">Test development</div></div></div></foreignObject><image x="202" y="163.5" width="292" height="17" xlink:href="data:image/png;base64,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"/></switch></g><path d="M 7 200 L 640.63 200" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 645.88 200 L 638.88 203.5 L 640.63 200 L 638.88 196.5 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe flex-start; width: 1px; height: 1px; padding-top: 207px; margin-left: 9px;"><div data-drawio-colors="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); " style="box-sizing: border-box; font-size: 0px; text-align: left;"><div style="display: inline-block; font-size: 11px; font-family: Arial; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; background-color: rgb(255, 255, 255); white-space: nowrap;">week no.</div></div></div></foreignObject><image x="9" y="207.5" width="44" height="15.75" xlink:href="data:image/png;base64,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"/></switch></g><rect x="537" y="10" width="90" height="20" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 82px; height: 1px; padding-top: 20px; margin-left: 542px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: left;"><div style="display: inline-block; font-size: 12px; font-family: Arial; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">Validation</div></div></div></foreignObject><image x="542" y="13.5" width="82" height="17" xlink:href="data:image/png;base64,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"/></switch></g><rect x="537" y="40" width="90" height="20" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 82px; height: 1px; padding-top: 50px; margin-left: 542px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: left;"><div style="display: inline-block; font-size: 12px; font-family: Arial; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">Documentation</div></div></div></foreignObject><image x="542" y="43.5" width="82" height="17" xlink:href="data:image/png;base64,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"/></switch></g></g></svg>
\ No newline at end of file diff --git a/docs/img/power-supply-top.svg b/docs/img/power-supply-top.svg new file mode 100644 index 0000000..89107a6 --- /dev/null +++ b/docs/img/power-supply-top.svg @@ -0,0 +1,3 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="170px" height="133px" viewBox="-0.5 -0.5 170 133"><defs/><g><rect x="88" y="0" width="80" height="80" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 78px; height: 1px; padding-top: 40px; margin-left: 89px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Arial; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">Power supply</div></div></div></foreignObject><image x="89" y="33.5" width="78" height="17" xlink:href="data:image/png;base64,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"/></switch></g><path d="M 128 111.63 L 128 80" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 128 116.88 L 124.5 109.88 L 128 111.63 L 131.5 109.88 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><path d="M 88 120 L 168 120" fill="none" stroke="rgb(0, 0, 0)" stroke-width="4" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-end; width: 1px; height: 1px; padding-top: 120px; margin-left: 80px;"><div data-drawio-colors="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); " style="box-sizing: border-box; font-size: 0px; text-align: right;"><div style="display: inline-block; font-size: 12px; font-family: Arial; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; background-color: rgb(255, 255, 255); white-space: nowrap;">Puzzle bus</div></div></div></foreignObject><image x="21" y="113.5" width="59" height="17" xlink:href="data:image/png;base64,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"/></switch></g><path d="M 48 40 L 81.63 40.17" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" stroke-dasharray="3 3" pointer-events="stroke"/><path d="M 86.88 40.19 L 79.86 43.66 L 81.63 40.17 L 79.9 36.66 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-end; width: 1px; height: 1px; padding-top: 40px; margin-left: 40px;"><div data-drawio-colors="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); " style="box-sizing: border-box; font-size: 0px; text-align: right;"><div style="display: inline-block; font-size: 11px; font-family: Arial; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; background-color: rgb(255, 255, 255); white-space: nowrap;">Charger</div></div></div></foreignObject><image x="0" y="34" width="40" height="15.75" xlink:href="data:image/png;base64,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"/></switch></g></g></svg>
\ No newline at end of file diff --git a/docs/img/puzzle-bus-connector.svg b/docs/img/puzzle-bus-connector.svg new file mode 100644 index 0000000..9a45137 --- /dev/null +++ b/docs/img/puzzle-bus-connector.svg @@ -0,0 +1,5558 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<svg + width="116.61022" + height="61.631149" + viewBox="0 0 116.61022 61.631151" + version="1.1" + id="svg1504" + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg"> + <defs + id="defs1504" /> + <path + fill-rule="evenodd" + fill="#ffffc2" + fill-opacity="1" + d="m 39.58441,12.934715 h 14.398438 v 36 H 39.58441 Z m 0,0" + id="path950" /> + <path + fill="none" + stroke-width="0.719884" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 39.58441,12.934715 v 36" + id="path951" /> + <path + fill="none" + stroke-width="0.719884" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="M 39.58441,48.934715 H 53.982848" + id="path952" /> + <path + fill="none" + stroke-width="0.719884" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 53.982848,48.934715 v -36" + id="path953" /> + <path + fill="none" + stroke-width="0.719884" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="M 53.982848,12.934715 H 39.58441" + id="path954" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#000084" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 27.103941,22.055809 3.359376,3.359375" + id="path955" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#000084" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 30.463317,22.055809 -3.359376,3.359375" + id="path956" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#000084" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 27.103941,36.454246 3.359376,3.359375" + id="path957" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#000084" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 30.463317,36.454246 -3.359376,3.359375" + id="path958" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#000084" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 63.103939,22.055809 3.35938,3.359375" + id="path959" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#000084" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 66.463319,22.055809 -3.35938,3.359375" + id="path960" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="M 3.5844095,32.85659 V 29.255027" + id="path961" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 5.2640975,29.493309 h 0.238281" + id="path962" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 5.5023785,29.493309 0.242188,-0.238282" + id="path963" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 5.7445665,29.255027 h 0.960937" + id="path964" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 6.7055035,29.255027 0.238281,0.238282" + id="path965" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 6.9437845,29.493309 h 0.238282" + id="path966" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 7.1820665,29.493309 v 0.480468" + id="path967" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 7.1820665,29.973777 v 0.242188" + id="path968" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 7.1820665,30.215965 v 0.480469" + id="path969" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="M 7.1820665,30.696434 5.0219095,32.85659" + id="path970" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 5.0219095,32.85659 h 2.160157" + id="path971" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 10.783629,32.376121 v 0.238282" + id="path972" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="M 10.783629,32.614403 10.30316,32.85659" + id="path973" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="M 10.30316,32.85659 H 9.8226905" + id="path974" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="M 9.8226905,32.85659 9.3422225,32.614403" + id="path975" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="M 9.3422225,32.614403 9.1039405,32.376121" + id="path976" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="M 9.1039405,32.376121 8.8617535,31.895653" + id="path977" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="M 8.8617535,31.895653 8.6234725,31.172996" + id="path978" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="M 8.6234725,31.172996 V 30.696434" + id="path979" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 8.6234725,30.696434 0.238281,-0.722657" + id="path980" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 8.8617535,29.973777 0.242187,-0.238281" + id="path981" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 9.1039405,29.735496 0.238282,-0.242187" + id="path982" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 9.3422225,29.493309 0.480468,-0.238282" + id="path983" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="M 9.8226905,29.255027 H 10.30316" + id="path984" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 10.30316,29.255027 0.480469,0.238282" + id="path985" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 10.783629,29.493309 v 0" + id="path986" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 11.502379,33.094871 h 2.882812" + id="path987" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="M 17.264098,32.376121 17.02191,32.614403" + id="path988" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="M 17.02191,32.614403 16.545348,32.85659" + id="path989" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="M 16.545348,32.85659 H 16.30316" + id="path990" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="M 16.30316,32.85659 15.58441,32.614403" + id="path991" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="M 15.58441,32.614403 15.342223,32.376121" + id="path992" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="M 15.342223,32.376121 15.103941,31.895653" + id="path993" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="M 15.103941,31.895653 V 31.172996" + id="path994" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="M 15.103941,31.172996 V 30.696434" + id="path995" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="M 15.103941,30.696434 V 29.973777" + id="path996" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 15.103941,29.973777 0.238282,-0.238281" + id="path997" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="M 15.342223,29.735496 15.58441,29.493309" + id="path998" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 15.58441,29.493309 0.71875,-0.238282" + id="path999" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 16.30316,29.255027 h 0.242188" + id="path1000" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 16.545348,29.255027 0.476562,0.238282" + id="path1001" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 17.02191,29.493309 h 0.242188" + id="path1002" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="M 20.385191,32.85659 H 18.705504" + id="path1003" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="M 18.705504,32.85659 V 29.255027" + id="path1004" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="M 21.58441,32.85659 V 29.255027" + id="path1005" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="M 23.744567,32.85659 22.30316,30.696434" + id="path1006" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="M 23.744567,29.255027 21.58441,31.172996" + id="path1007" /> + <path + fill="none" + stroke-width="0.450069" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="M 28.783629,30.934715 25.662535,27.333153" + id="path1008" /> + <path + fill="none" + stroke-width="0.450069" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="M 25.662535,27.333153 H 0.22503451" + id="path1009" /> + <path + fill="none" + stroke-width="0.450069" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 0.22503451,27.333153 v 3.601562" + id="path1010" /> + <path + fill="none" + stroke-width="0.450069" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 0.22503451,30.934715 v 3.601562" + id="path1011" /> + <path + fill="none" + stroke-width="0.450069" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="M 0.22503451,34.536277 H 25.662535" + id="path1012" /> + <path + fill="none" + stroke-width="0.450069" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 25.662535,34.536277 3.121094,-3.601562" + id="path1013" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="M 70.064879,40.055809 V 36.454246" + id="path1014" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 70.064879,38.133934 h 1.91797" + id="path1015" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="M 71.982849,40.055809 V 36.454246" + id="path1016" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="M 75.342219,40.055809 V 38.133934" + id="path1017" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 75.342219,38.133934 -0.23828,-0.238281" + id="path1018" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 75.103939,37.895653 -0.24218,-0.242188" + id="path1019" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 74.861759,37.653465 h -0.71875" + id="path1020" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 74.143009,37.653465 -0.48047,0.242188" + id="path1021" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 75.342219,39.813621 -0.48046,0.242188" + id="path1022" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 74.861759,40.055809 h -0.71875" + id="path1023" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 74.143009,40.055809 -0.48047,-0.242188" + id="path1024" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="M 73.662539,39.813621 V 39.57534" + id="path1025" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="M 73.662539,39.57534 V 39.094871" + id="path1026" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="M 73.662539,39.094871 V 38.85659" + id="path1027" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 73.662539,38.85659 0.48047,-0.242187" + id="path1028" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 74.143009,38.614403 h 0.71875" + id="path1029" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 74.861759,38.614403 0.48046,-0.238282" + id="path1030" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="M 77.021909,40.055809 V 37.653465" + id="path1031" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 77.021909,38.376121 0.24219,-0.480468" + id="path1032" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 77.264099,37.895653 v 0" + id="path1033" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 77.264099,37.895653 0.48047,-0.242188" + id="path1034" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 77.744569,37.653465 h 0.23828" + id="path1035" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 78.943789,37.653465 0.71875,2.402344" + id="path1036" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 79.662539,40.055809 0.48047,-1.679688" + id="path1037" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 80.143009,38.376121 0.71875,1.679688" + id="path1038" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 80.861759,40.055809 0.72265,-2.402344" + id="path1039" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="M 84.463319,40.055809 V 38.133934" + id="path1040" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="M 84.463319,38.133934 V 37.895653" + id="path1041" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 84.463319,37.895653 -0.48047,-0.242188" + id="path1042" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 83.982849,37.653465 h -0.71875" + id="path1043" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 83.264099,37.653465 -0.24219,0.242188" + id="path1044" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 84.463319,39.813621 -0.23828,0.242188" + id="path1045" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 84.225039,40.055809 h -0.96094" + id="path1046" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 83.264099,40.055809 -0.24219,-0.242188" + id="path1047" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="M 83.021909,39.813621 82.783629,39.57534" + id="path1048" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="M 82.783629,39.57534 V 39.094871" + id="path1049" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 82.783629,39.094871 0.23828,-0.238281" + id="path1050" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 83.021909,38.85659 0.24219,-0.242187" + id="path1051" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 83.264099,38.614403 h 0.96094" + id="path1052" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 84.225039,38.614403 0.23828,-0.238282" + id="path1053" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="M 86.142999,40.055809 V 37.653465" + id="path1054" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 86.142999,38.376121 0.24219,-0.480468" + id="path1055" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 86.385189,37.895653 h 0.23828" + id="path1056" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 86.623469,37.895653 0.23828,-0.242188" + id="path1057" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 86.861749,37.653465 h 0.48047" + id="path1058" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 89.744569,39.813621 -0.24219,0.242188" + id="path1059" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 89.502379,40.055809 h -0.71875" + id="path1060" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 88.783629,40.055809 -0.23828,-0.242188" + id="path1061" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="M 88.545349,39.813621 88.303159,39.57534" + id="path1062" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="M 88.303159,39.57534 V 38.133934" + id="path1063" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 88.303159,38.133934 0.24219,-0.238281" + id="path1064" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 88.545349,37.895653 0.23828,-0.242188" + id="path1065" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 88.783629,37.653465 h 0.71875" + id="path1066" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 89.502379,37.653465 0.24219,0.242188" + id="path1067" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 89.744569,37.895653 0.23828,0.238281" + id="path1068" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 89.982849,38.133934 v 0.242187" + id="path1069" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 89.982849,38.376121 -1.67969,0.480469" + id="path1070" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="M 91.662539,40.055809 V 36.454246" + id="path1071" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 93.342219,37.653465 v 2.402344" + id="path1072" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 93.342219,37.895653 v 0" + id="path1073" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 93.342219,37.895653 0.48047,-0.242188" + id="path1074" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 93.822689,37.653465 h 0.48047" + id="path1075" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 94.303159,37.653465 0.24219,0.242188" + id="path1076" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 94.545349,37.895653 0.23828,0.238281" + id="path1077" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 94.783629,38.133934 v 1.921875" + id="path1078" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 95.982849,37.653465 h 1.4414" + id="path1079" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="M 96.463319,36.454246 V 39.57534" + id="path1080" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 96.463319,39.57534 0.24218,0.238281" + id="path1081" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 96.705499,39.813621 0.23829,0.242188" + id="path1082" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 96.943789,40.055809 h 0.48046" + id="path1083" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 100.06488,39.813621 -0.480471,0.242188" + id="path1084" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 99.584409,40.055809 h -0.72266" + id="path1085" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 98.861749,40.055809 -0.23828,-0.242188" + id="path1086" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="M 98.623469,39.813621 98.385189,39.57534" + id="path1087" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="M 98.385189,39.57534 V 38.133934" + id="path1088" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 98.385189,38.133934 0.23828,-0.238281" + id="path1089" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 98.623469,37.895653 0.23828,-0.242188" + id="path1090" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 98.861749,37.653465 h 0.72266" + id="path1091" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 99.584409,37.653465 0.480471,0.242188" + id="path1092" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 100.06488,37.895653 v 0.238281" + id="path1093" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 100.06488,38.133934 v 0.242187" + id="path1094" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="M 100.06488,38.376121 98.385189,38.85659" + id="path1095" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="M 101.74457,40.055809 V 37.653465" + id="path1096" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="M 101.74457,38.376121 V 37.895653" + id="path1097" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 101.74457,37.895653 h 0.23828" + id="path1098" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 101.98285,37.895653 0.48047,-0.242188" + id="path1099" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 102.46332,37.653465 h 0.24218" + id="path1100" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="M 103.90472,40.055809 V 37.653465" + id="path1101" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="M 103.90472,38.376121 104.143,37.895653" + id="path1102" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 104.143,37.895653 v 0" + id="path1103" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 104.143,37.895653 0.48047,-0.242188" + id="path1104" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 104.62347,37.653465 h 0.23828" + id="path1105" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 107.74457,37.653465 v 2.402344" + id="path1106" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="M 106.06488,37.653465 V 39.57534" + id="path1107" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 106.06488,39.57534 0.23828,0.238281" + id="path1108" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 106.30316,39.813621 0.24219,0.242188" + id="path1109" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 106.54535,40.055809 h 0.71875" + id="path1110" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 107.2641,40.055809 0.23828,-0.242188" + id="path1111" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 107.50238,39.813621 0.24219,-0.238281" + id="path1112" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 109.42425,37.653465 v 3.601562" + id="path1113" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 109.42425,37.895653 0.23829,-0.242188" + id="path1114" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 109.66254,37.653465 h 0.72265" + id="path1115" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 110.38519,37.653465 0.47656,0.242188" + id="path1116" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 110.86175,37.895653 v 0" + id="path1117" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 110.86175,37.895653 0.24219,0.480468" + id="path1118" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 111.10394,38.376121 v 0.957032" + id="path1119" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 111.10394,39.333153 -0.24219,0.242187" + id="path1120" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 110.86175,39.57534 v 0.238281" + id="path1121" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 110.86175,39.813621 -0.47656,0.242188" + id="path1122" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 110.38519,40.055809 h -0.72265" + id="path1123" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 109.66254,40.055809 -0.23829,-0.242188" + id="path1124" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 112.06488,37.653465 h 1.4375" + id="path1125" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="M 112.54535,36.454246 V 39.57534" + id="path1126" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 112.54535,39.57534 0.23828,0.238281" + id="path1127" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 112.78363,39.813621 0.48047,0.242188" + id="path1128" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 113.2641,40.055809 h 0.23828" + id="path1129" /> + <path + fill="none" + stroke-width="0.450069" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 64.783629,38.133934 3.12109,3.601562" + id="path1130" /> + <path + fill="none" + stroke-width="0.450069" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="M 67.904719,41.735496 H 116.38519" + id="path1131" /> + <path + fill="none" + stroke-width="0.450069" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="M 116.38519,41.735496 V 38.133934" + id="path1132" /> + <path + fill="none" + stroke-width="0.450069" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="M 116.38519,38.133934 V 34.536277" + id="path1133" /> + <path + fill="none" + stroke-width="0.450069" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="M 116.38519,34.536277 H 67.904719" + id="path1134" /> + <path + fill="none" + stroke-width="0.450069" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 67.904719,34.536277 -3.12109,3.597657" + id="path1135" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="M 70.064879,32.85659 V 29.255027" + id="path1136" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 71.502379,29.493309 h 0.24219" + id="path1137" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 71.744569,29.493309 0.23828,-0.238282" + id="path1138" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 71.982849,29.255027 h 0.96094" + id="path1139" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 72.943789,29.255027 0.23828,0.238282" + id="path1140" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 73.182069,29.493309 h 0.24219" + id="path1141" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 73.424259,29.493309 0.23828,0.480468" + id="path1142" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 73.662539,29.973777 v 0.242188" + id="path1143" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 73.662539,30.215965 -0.23828,0.480469" + id="path1144" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 73.424259,30.696434 -2.16016,2.160156" + id="path1145" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 71.264099,32.85659 h 2.39844" + id="path1146" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 77.264099,32.376121 -0.24219,0.238282" + id="path1147" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 77.021909,32.614403 -0.47656,0.242187" + id="path1148" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 76.545349,32.85659 h -0.48047" + id="path1149" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 76.064879,32.85659 -0.48047,-0.242187" + id="path1150" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 75.584409,32.614403 -0.24219,-0.238282" + id="path1151" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 75.342219,32.376121 -0.23828,-0.480468" + id="path1152" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 75.103939,31.895653 -0.24218,-0.722657" + id="path1153" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="M 74.861759,31.172996 V 30.696434" + id="path1154" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 74.861759,30.696434 0.24218,-0.722657" + id="path1155" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 75.103939,29.973777 0.23828,-0.238281" + id="path1156" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 75.342219,29.735496 0.24219,-0.242187" + id="path1157" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 75.584409,29.493309 0.48047,-0.238282" + id="path1158" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 76.064879,29.255027 h 0.48047" + id="path1159" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 76.545349,29.255027 0.47656,0.238282" + id="path1160" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 77.021909,29.493309 h 0.24219" + id="path1161" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 77.744569,33.094871 h 2.8789" + id="path1162" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="M 81.342219,32.85659 V 29.255027" + id="path1163" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 81.342219,29.255027 h 0.96094" + id="path1164" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 82.303159,29.255027 0.48047,0.238282" + id="path1165" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 82.783629,29.493309 0.48047,0.242187" + id="path1166" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 83.264099,29.735496 v 0.238281" + id="path1167" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 83.264099,29.973777 0.23828,0.722657" + id="path1168" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 83.502379,30.696434 v 0.476562" + id="path1169" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 83.502379,31.172996 -0.23828,0.722657" + id="path1170" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 83.264099,31.895653 v 0.480468" + id="path1171" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 83.264099,32.376121 -0.48047,0.238282" + id="path1172" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 82.783629,32.614403 -0.48047,0.242187" + id="path1173" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 82.303159,32.85659 h -0.96094" + id="path1174" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 84.943789,31.895653 h 1.67968" + id="path1175" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 84.463319,32.85659 1.19922,-3.601563" + id="path1176" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 85.662539,29.255027 1.19921,3.601563" + id="path1177" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 87.584409,29.255027 h 2.16016" + id="path1178" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="M 88.545349,32.85659 V 29.255027" + id="path1179" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 90.705499,31.895653 h 1.67969" + id="path1180" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 90.463319,32.85659 1.19922,-3.601563" + id="path1181" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 91.662539,29.255027 1.19921,3.601563" + id="path1182" /> + <path + fill="none" + stroke-width="0.450069" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 64.783629,30.934715 3.12109,3.601562" + id="path1183" /> + <path + fill="none" + stroke-width="0.450069" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 67.904719,34.536277 h 27.83985" + id="path1184" /> + <path + fill="none" + stroke-width="0.450069" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="M 95.744569,34.536277 V 30.934715" + id="path1185" /> + <path + fill="none" + stroke-width="0.450069" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="M 95.744569,30.934715 V 27.333153" + id="path1186" /> + <path + fill="none" + stroke-width="0.450069" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="M 95.744569,27.333153 H 67.904719" + id="path1187" /> + <path + fill="none" + stroke-width="0.450069" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 67.904719,27.333153 -3.12109,3.601562" + id="path1188" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="M 26.623473,12.934715 28.783629,9.333153" + id="path1189" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="M 28.783629,16.536277 V 9.333153" + id="path1190" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 28.783629,9.333153 2.160156,3.601562" + id="path1191" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#006464" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 24.225035,2.376121 h 2.636719" + id="path1192" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#006464" + stroke-opacity="1" + stroke-miterlimit="10" + d="M 25.424254,3.813621 V 0.934715" + id="path1193" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#006464" + stroke-opacity="1" + stroke-miterlimit="10" + d="M 30.225035,0.215965 H 28.545348" + id="path1194" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#006464" + stroke-opacity="1" + stroke-miterlimit="10" + d="M 28.545348,0.215965 V 1.895653" + id="path1195" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#006464" + stroke-opacity="1" + stroke-miterlimit="10" + d="M 28.545348,1.895653 V 1.653465" + id="path1196" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#006464" + stroke-opacity="1" + stroke-miterlimit="10" + d="M 28.545348,1.653465 H 29.02191" + id="path1197" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#006464" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 29.02191,1.653465 h 0.722657" + id="path1198" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#006464" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 29.744567,1.653465 h 0.480468" + id="path1199" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#006464" + stroke-opacity="1" + stroke-miterlimit="10" + d="M 30.225035,1.653465 V 1.895653" + id="path1200" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#006464" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 30.225035,1.895653 0.238282,0.238281" + id="path1201" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#006464" + stroke-opacity="1" + stroke-miterlimit="10" + d="M 30.463317,2.133934 V 3.094871" + id="path1202" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#006464" + stroke-opacity="1" + stroke-miterlimit="10" + d="M 30.463317,3.094871 30.225035,3.333153" + id="path1203" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#006464" + stroke-opacity="1" + stroke-miterlimit="10" + d="M 30.225035,3.333153 V 3.57534" + id="path1204" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#006464" + stroke-opacity="1" + stroke-miterlimit="10" + d="M 30.225035,3.57534 29.744567,3.813621" + id="path1205" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#006464" + stroke-opacity="1" + stroke-miterlimit="10" + d="M 29.744567,3.813621 H 29.02191" + id="path1206" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#006464" + stroke-opacity="1" + stroke-miterlimit="10" + d="M 29.02191,3.813621 28.545348,3.57534" + id="path1207" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#006464" + stroke-opacity="1" + stroke-miterlimit="10" + d="M 28.545348,3.57534 V 3.333153" + id="path1208" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#006464" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 31.424254,0.215965 1.199219,3.597656" + id="path1209" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#006464" + stroke-opacity="1" + stroke-miterlimit="10" + d="M 32.623473,3.813621 33.822691,0.215965" + id="path1210" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 28.783629,45.333153 v 3.601562" + id="path1211" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 28.783629,48.934715 h 3.601562" + id="path1212" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 32.385191,48.934715 -3.601562,3.601562" + id="path1213" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="M 28.783629,52.536277 25.182067,48.934715" + id="path1214" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 25.182067,48.934715 h 3.601562" + id="path1215" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#006464" + stroke-opacity="1" + stroke-miterlimit="10" + d="M 26.143004,57.813621 H 25.662535" + id="path1216" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#006464" + stroke-opacity="1" + stroke-miterlimit="10" + d="M 25.662535,57.813621 H 25.182067" + id="path1217" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#006464" + stroke-opacity="1" + stroke-miterlimit="10" + d="M 25.182067,57.813621 H 24.705504" + id="path1218" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#006464" + stroke-opacity="1" + stroke-miterlimit="10" + d="M 24.705504,57.813621 24.225035,58.29409" + id="path1219" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#006464" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 24.225035,58.29409 v 0.242187" + id="path1220" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#006464" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 24.225035,58.536277 -0.242187,0.718748" + id="path1221" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#006464" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 23.982848,59.255025 v 0.48047" + id="path1222" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#006464" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 23.982848,59.735495 0.242187,0.71875" + id="path1223" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#006464" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 24.225035,60.454245 v 0.48047" + id="path1224" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#006464" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 24.225035,60.934715 0.480469,0.23828" + id="path1225" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#006464" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 24.705504,61.172995 0.476563,0.24219" + id="path1226" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#006464" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 25.182067,61.415185 h 0.242187" + id="path1227" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#006464" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 25.424254,61.415185 0.71875,-0.24219" + id="path1228" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#006464" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 26.143004,61.172995 v -0.23828" + id="path1229" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#006464" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 26.143004,60.934715 v -1.19922" + id="path1230" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#006464" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 26.143004,59.735495 h -0.71875" + id="path1231" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#006464" + stroke-opacity="1" + stroke-miterlimit="10" + d="M 27.822691,61.415185 V 57.813621" + id="path1232" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#006464" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 27.822691,57.813621 1.921876,3.601564" + id="path1233" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#006464" + stroke-opacity="1" + stroke-miterlimit="10" + d="M 29.744567,61.415185 V 57.813621" + id="path1234" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#006464" + stroke-opacity="1" + stroke-miterlimit="10" + d="M 31.424254,61.415185 V 57.813621" + id="path1235" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#006464" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 31.424254,57.813621 h 0.960937" + id="path1236" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#006464" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 32.385191,57.813621 h 0.476563" + id="path1237" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#006464" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 32.861754,57.813621 0.480469,0.480469" + id="path1238" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#006464" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 33.342223,58.29409 v 0.242187" + id="path1239" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#006464" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 33.342223,58.536277 0.242187,0.718748" + id="path1240" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#006464" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 33.58441,59.255025 v 0.48047" + id="path1241" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#006464" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 33.58441,59.735495 -0.242187,0.71875" + id="path1242" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#006464" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 33.342223,60.454245 v 0.48047" + id="path1243" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#006464" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 33.342223,60.934715 -0.480469,0.23828" + id="path1244" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#006464" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 32.861754,61.172995 -0.476563,0.24219" + id="path1245" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#006464" + stroke-opacity="1" + stroke-miterlimit="10" + d="M 32.385191,61.415185 H 31.424254" + id="path1246" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 62.623469,12.934715 2.16016,-3.601562" + id="path1247" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="M 64.783629,16.536277 V 9.333153" + id="path1248" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 64.783629,9.333153 2.16016,3.601562" + id="path1249" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#006464" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 60.225039,2.376121 h 2.63672" + id="path1250" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#006464" + stroke-opacity="1" + stroke-miterlimit="10" + d="M 61.424259,3.813621 V 0.934715" + id="path1251" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#006464" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 66.225039,0.215965 h -1.67969" + id="path1252" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#006464" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 64.545349,0.215965 -0.24219,1.679688" + id="path1253" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#006464" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 64.303159,1.895653 0.24219,-0.242188" + id="path1254" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#006464" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 64.545349,1.653465 h 0.47656" + id="path1255" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#006464" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 65.021909,1.653465 h 0.72266" + id="path1256" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#006464" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 65.744569,1.653465 h 0.48047" + id="path1257" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#006464" + stroke-opacity="1" + stroke-miterlimit="10" + d="M 66.225039,1.653465 V 1.895653" + id="path1258" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#006464" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 66.225039,1.895653 0.23828,0.238281" + id="path1259" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#006464" + stroke-opacity="1" + stroke-miterlimit="10" + d="M 66.463319,2.133934 V 3.094871" + id="path1260" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#006464" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 66.463319,3.094871 -0.23828,0.238282" + id="path1261" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#006464" + stroke-opacity="1" + stroke-miterlimit="10" + d="M 66.225039,3.333153 V 3.57534" + id="path1262" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#006464" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 66.225039,3.57534 -0.48047,0.238281" + id="path1263" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#006464" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 65.744569,3.813621 h -0.72266" + id="path1264" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#006464" + stroke-opacity="1" + stroke-miterlimit="10" + d="M 65.021909,3.813621 64.545349,3.57534" + id="path1265" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#006464" + stroke-opacity="1" + stroke-miterlimit="10" + d="M 64.545349,3.57534 64.303159,3.333153" + id="path1266" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#006464" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 67.424259,0.215965 1.19921,3.597656" + id="path1267" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#006464" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 68.623469,3.813621 1.19922,-3.597656" + id="path1268" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 39.58441,44.85659 v 0.71875" + id="path1269" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 39.58441,45.57534 h 3.597657" + id="path1270" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="M 43.182067,45.57534 V 44.85659" + id="path1271" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="M 43.182067,44.85659 H 39.58441" + id="path1272" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 39.58441,37.653465 v 0.722656" + id="path1273" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 39.58441,38.376121 h 3.597657" + id="path1274" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="M 43.182067,38.376121 V 37.653465" + id="path1275" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="M 43.182067,37.653465 H 39.58441" + id="path1276" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 39.58441,30.454246 v 0.71875" + id="path1277" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 39.58441,31.172996 h 3.597657" + id="path1278" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 43.182067,31.172996 v -0.71875" + id="path1279" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="M 43.182067,30.454246 H 39.58441" + id="path1280" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 39.58441,23.255027 v 0.71875" + id="path1281" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 39.58441,23.973777 h 3.597657" + id="path1282" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 43.182067,23.973777 v -0.71875" + id="path1283" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="M 43.182067,23.255027 H 39.58441" + id="path1284" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 39.58441,16.055809 v 0.71875" + id="path1285" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 39.58441,16.774559 h 3.597657" + id="path1286" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 43.182067,16.774559 v -0.71875" + id="path1287" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="M 43.182067,16.055809 H 39.58441" + id="path1288" /> + <path + fill="none" + stroke-width="0.719884" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 39.58441,12.934715 v 36" + id="path1289" /> + <path + fill="none" + stroke-width="0.719884" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="M 39.58441,48.934715 H 53.982848" + id="path1290" /> + <path + fill="none" + stroke-width="0.719884" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 53.982848,48.934715 v -36" + id="path1291" /> + <path + fill="none" + stroke-width="0.719884" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="M 53.982848,12.934715 H 39.58441" + id="path1292" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 53.982848,44.85659 v 0.71875" + id="path1293" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="M 53.982848,45.57534 H 50.385191" + id="path1294" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="M 50.385191,45.57534 V 44.85659" + id="path1295" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 50.385191,44.85659 h 3.597657" + id="path1296" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 53.982848,37.653465 v 0.722656" + id="path1297" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="M 53.982848,38.376121 H 50.385191" + id="path1298" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="M 50.385191,38.376121 V 37.653465" + id="path1299" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 50.385191,37.653465 h 3.597657" + id="path1300" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 53.982848,30.454246 v 0.71875" + id="path1301" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="M 53.982848,31.172996 H 50.385191" + id="path1302" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 50.385191,31.172996 v -0.71875" + id="path1303" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 50.385191,30.454246 h 3.597657" + id="path1304" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 53.982848,23.255027 v 0.71875" + id="path1305" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="M 53.982848,23.973777 H 50.385191" + id="path1306" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 50.385191,23.973777 v -0.71875" + id="path1307" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 50.385191,23.255027 h 3.597657" + id="path1308" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 53.982848,16.055809 v 0.71875" + id="path1309" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="M 53.982848,16.774559 H 50.385191" + id="path1310" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 50.385191,16.774559 v -0.71875" + id="path1311" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 50.385191,16.055809 h 3.597657" + id="path1312" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="M 39.58441,16.536277 H 28.783629" + id="path1313" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#a90000" + stroke-opacity="1" + stroke-miterlimit="10" + d="M 35.264098,15.333153 H 33.103941" + id="path1314" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#a90000" + stroke-opacity="1" + stroke-miterlimit="10" + d="M 34.064879,15.333153 V 11.735496" + id="path1315" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#a90000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 34.064879,11.735496 -0.242188,0.480469" + id="path1316" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#a90000" + stroke-opacity="1" + stroke-miterlimit="10" + d="M 33.822691,12.215965 33.58441,12.696434" + id="path1317" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#a90000" + stroke-opacity="1" + stroke-miterlimit="10" + d="M 33.58441,12.696434 H 33.103941" + id="path1318" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="M 53.982848,45.333153 H 64.783629" + id="path1319" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#a90000" + stroke-opacity="1" + stroke-miterlimit="10" + d="M 58.783629,44.133934 H 56.623473" + id="path1320" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#a90000" + stroke-opacity="1" + stroke-miterlimit="10" + d="M 57.584409,44.133934 V 40.536277" + id="path1321" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#a90000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 57.584409,40.536277 -0.24219,0.476563" + id="path1322" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#a90000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 57.342219,41.01284 -0.48046,0.480469" + id="path1323" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#a90000" + stroke-opacity="1" + stroke-miterlimit="10" + d="M 56.861759,41.493309 H 56.623473" + id="path1324" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#a90000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 60.943789,40.536277 h 0.23828" + id="path1325" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#a90000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 61.182069,40.536277 0.48047,0.238282" + id="path1326" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#a90000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 61.662539,40.774559 v 0" + id="path1327" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#a90000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 61.662539,40.774559 0.24218,0.480468" + id="path1328" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#a90000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 61.904719,41.255027 0.23829,0.71875" + id="path1329" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#a90000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 62.143009,41.973777 v 0.722657" + id="path1330" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#a90000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 62.143009,42.696434 -0.23829,0.71875" + id="path1331" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#a90000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 61.904719,43.415184 -0.24218,0.480469" + id="path1332" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#a90000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 61.662539,43.895653 v 0" + id="path1333" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#a90000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 61.662539,43.895653 -0.48047,0.238281" + id="path1334" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#a90000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 61.182069,44.133934 h -0.23828" + id="path1335" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#a90000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 60.943789,44.133934 -0.48047,-0.238281" + id="path1336" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#a90000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 60.463319,43.895653 v 0" + id="path1337" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#a90000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 60.463319,43.895653 -0.23828,-0.480469" + id="path1338" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#a90000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 60.225039,43.415184 -0.24219,-0.71875" + id="path1339" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#a90000" + stroke-opacity="1" + stroke-miterlimit="10" + d="M 59.982849,42.696434 V 41.973777" + id="path1340" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#a90000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 59.982849,41.973777 0.24219,-0.71875" + id="path1341" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#a90000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 60.225039,41.255027 0.23828,-0.480468" + id="path1342" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#a90000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 60.463319,40.774559 v 0" + id="path1343" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#a90000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 60.463319,40.774559 0.48047,-0.238282" + id="path1344" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="M 53.982848,16.536277 H 64.783629" + id="path1345" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#a90000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 58.303159,11.973777 h 0.24219" + id="path1346" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#a90000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 58.545349,11.973777 0.23828,-0.238281" + id="path1347" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#a90000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 58.783629,11.735496 h 0.96094" + id="path1348" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#a90000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 59.744569,11.735496 0.23828,0.238281" + id="path1349" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#a90000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 59.982849,11.973777 h 0.24219" + id="path1350" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#a90000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 60.225039,11.973777 0.23828,0.480469" + id="path1351" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#a90000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 60.463319,12.454246 v 0.242188" + id="path1352" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#a90000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 60.463319,12.696434 -0.23828,0.476562" + id="path1353" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#a90000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 60.225039,13.172996 -2.16016,2.160157" + id="path1354" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#a90000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 58.064879,15.333153 h 2.39844" + id="path1355" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="M 39.58441,23.735496 H 28.783629" + id="path1356" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#a90000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 32.861754,18.934715 h 2.402344" + id="path1357" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#a90000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 35.264098,18.934715 -1.199219,1.441406" + id="path1358" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#a90000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 34.064879,20.376121 h 0.480469" + id="path1359" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#a90000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 34.545348,20.376121 h 0.238281" + id="path1360" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#a90000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 34.783629,20.376121 0.238281,0.238282" + id="path1361" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#a90000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 35.02191,20.614403 0.242188,0.480468" + id="path1362" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#a90000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 35.264098,21.094871 v 0.71875" + id="path1363" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#a90000" + stroke-opacity="1" + stroke-miterlimit="10" + d="M 35.264098,21.813621 35.02191,22.29409" + id="path1364" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#a90000" + stroke-opacity="1" + stroke-miterlimit="10" + d="M 35.02191,22.29409 H 34.783629" + id="path1365" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#a90000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 34.783629,22.29409 -0.238281,0.242187" + id="path1366" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#a90000" + stroke-opacity="1" + stroke-miterlimit="10" + d="M 34.545348,22.536277 H 33.58441" + id="path1367" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#a90000" + stroke-opacity="1" + stroke-miterlimit="10" + d="M 33.58441,22.536277 33.103941,22.29409" + id="path1368" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#a90000" + stroke-opacity="1" + stroke-miterlimit="10" + d="M 33.103941,22.29409 H 32.861754" + id="path1369" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="M 53.982848,23.735496 H 64.783629" + id="path1370" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#a90000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 59.982849,20.133934 v 2.402343" + id="path1371" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#a90000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 59.264099,18.696434 -0.96094,2.636719" + id="path1372" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#a90000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 58.303159,21.333153 h 2.16016" + id="path1373" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="M 39.58441,30.934715 H 28.783629" + id="path1374" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#a90000" + stroke-opacity="1" + stroke-miterlimit="10" + d="M 35.02191,26.133934 H 33.342223" + id="path1375" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#a90000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 33.342223,26.133934 -0.238282,1.679687" + id="path1376" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#a90000" + stroke-opacity="1" + stroke-miterlimit="10" + d="M 33.103941,27.813621 33.342223,27.57534" + id="path1377" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#a90000" + stroke-opacity="1" + stroke-miterlimit="10" + d="M 33.342223,27.57534 H 33.58441" + id="path1378" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#a90000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 33.58441,27.57534 h 0.960938" + id="path1379" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#a90000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 34.545348,27.57534 h 0.238281" + id="path1380" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#a90000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 34.783629,27.57534 0.238281,0.238281" + id="path1381" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#a90000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 35.02191,27.813621 0.242188,0.480469" + id="path1382" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#a90000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 35.264098,28.29409 v 0.71875" + id="path1383" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#a90000" + stroke-opacity="1" + stroke-miterlimit="10" + d="M 35.264098,29.01284 35.02191,29.493309" + id="path1384" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#a90000" + stroke-opacity="1" + stroke-miterlimit="10" + d="M 35.02191,29.493309 H 34.783629" + id="path1385" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#a90000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 34.783629,29.493309 -0.238281,0.242187" + id="path1386" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#a90000" + stroke-opacity="1" + stroke-miterlimit="10" + d="M 34.545348,29.735496 H 33.58441" + id="path1387" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#a90000" + stroke-opacity="1" + stroke-miterlimit="10" + d="M 33.58441,29.735496 33.342223,29.493309" + id="path1388" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#a90000" + stroke-opacity="1" + stroke-miterlimit="10" + d="M 33.342223,29.493309 H 33.103941" + id="path1389" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="M 53.982848,30.934715 H 64.783629" + id="path1390" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#a90000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 59.982849,26.133934 h -0.71875" + id="path1391" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#a90000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 59.264099,26.133934 -0.24219,0.242187" + id="path1392" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#a90000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 59.021909,26.376121 h -0.23828" + id="path1393" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#a90000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 58.783629,26.376121 -0.23828,0.71875" + id="path1394" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#a90000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 58.545349,27.094871 -0.24219,0.480469" + id="path1395" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#a90000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 58.303159,27.57534 v 1.4375" + id="path1396" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#a90000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 58.303159,29.01284 0.24219,0.480469" + id="path1397" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#a90000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 58.545349,29.493309 h 0.23828" + id="path1398" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#a90000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 58.783629,29.493309 0.23828,0.242187" + id="path1399" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#a90000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 59.021909,29.735496 h 0.72266" + id="path1400" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#a90000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 59.744569,29.735496 0.23828,-0.242187" + id="path1401" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#a90000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 59.982849,29.493309 h 0.24219" + id="path1402" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#a90000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 60.225039,29.493309 0.23828,-0.480469" + id="path1403" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#a90000" + stroke-opacity="1" + stroke-miterlimit="10" + d="M 60.463319,29.01284 V 28.29409" + id="path1404" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#a90000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 60.463319,28.29409 -0.23828,-0.480469" + id="path1405" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#a90000" + stroke-opacity="1" + stroke-miterlimit="10" + d="M 60.225039,27.813621 59.982849,27.57534" + id="path1406" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#a90000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 59.982849,27.57534 h -0.23828" + id="path1407" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#a90000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 59.744569,27.57534 h -0.72266" + id="path1408" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#a90000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 59.021909,27.57534 h -0.23828" + id="path1409" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#a90000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 58.783629,27.57534 -0.23828,0.238281" + id="path1410" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#a90000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 58.545349,27.813621 -0.24219,0.480469" + id="path1411" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="M 39.58441,38.133934 H 28.783629" + id="path1412" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#a90000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 32.861754,33.333153 h 2.402344" + id="path1413" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#a90000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 35.264098,33.333153 -1.441407,3.601562" + id="path1414" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="M 53.982848,38.133934 H 64.783629" + id="path1415" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#a90000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 59.021909,34.774559 h -0.23828" + id="path1416" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#a90000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 58.783629,34.774559 -0.23828,-0.238282" + id="path1417" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#a90000" + stroke-opacity="1" + stroke-miterlimit="10" + d="M 58.545349,34.536277 58.303159,34.29409" + id="path1418" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#a90000" + stroke-opacity="1" + stroke-miterlimit="10" + d="M 58.303159,34.29409 V 34.055809" + id="path1419" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#a90000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 58.303159,34.055809 0.24219,-0.480469" + id="path1420" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#a90000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 58.545349,33.57534 h 0.23828" + id="path1421" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#a90000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 58.783629,33.57534 0.23828,-0.242187" + id="path1422" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#a90000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 59.021909,33.333153 h 0.72266" + id="path1423" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#a90000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 59.744569,33.333153 0.23828,0.242187" + id="path1424" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#a90000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 59.982849,33.57534 h 0.24219" + id="path1425" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#a90000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 60.225039,33.57534 0.23828,0.480469" + id="path1426" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#a90000" + stroke-opacity="1" + stroke-miterlimit="10" + d="M 60.463319,34.055809 V 34.29409" + id="path1427" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#a90000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 60.463319,34.29409 -0.23828,0.242187" + id="path1428" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#a90000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 60.225039,34.536277 -0.24219,0.238282" + id="path1429" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#a90000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 59.982849,34.774559 h -0.23828" + id="path1430" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#a90000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 59.744569,34.774559 h -0.72266" + id="path1431" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#a90000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 59.021909,34.774559 -0.23828,0.238281" + id="path1432" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#a90000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 58.783629,35.01284 -0.23828,0.242187" + id="path1433" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#a90000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 58.545349,35.255027 -0.24219,0.238282" + id="path1434" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#a90000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 58.303159,35.493309 v 0.722656" + id="path1435" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#a90000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 58.303159,36.215965 0.24219,0.480469" + id="path1436" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#a90000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 58.545349,36.696434 h 0.23828" + id="path1437" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#a90000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 58.783629,36.696434 0.23828,0.238281" + id="path1438" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#a90000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 59.021909,36.934715 h 0.72266" + id="path1439" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#a90000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 59.744569,36.934715 0.23828,-0.238281" + id="path1440" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#a90000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 59.982849,36.696434 h 0.24219" + id="path1441" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#a90000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 60.225039,36.696434 0.23828,-0.480469" + id="path1442" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#a90000" + stroke-opacity="1" + stroke-miterlimit="10" + d="M 60.463319,36.215965 V 35.493309" + id="path1443" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#a90000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 60.463319,35.493309 -0.23828,-0.238282" + id="path1444" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#a90000" + stroke-opacity="1" + stroke-miterlimit="10" + d="M 60.225039,35.255027 59.982849,35.01284" + id="path1445" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#a90000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 59.982849,35.01284 -0.23828,-0.238281" + id="path1446" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="M 39.58441,45.333153 H 28.783629" + id="path1447" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#a90000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 33.58441,44.133934 h 0.480469" + id="path1448" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#a90000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 34.064879,44.133934 0.480469,-0.238281" + id="path1449" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#a90000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 34.545348,43.895653 h 0.238281" + id="path1450" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#a90000" + stroke-opacity="1" + stroke-miterlimit="10" + d="M 34.783629,43.895653 35.02191,43.172996" + id="path1451" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#a90000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 35.02191,43.172996 0.242188,-0.476562" + id="path1452" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#a90000" + stroke-opacity="1" + stroke-miterlimit="10" + d="M 35.264098,42.696434 V 41.255027" + id="path1453" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#a90000" + stroke-opacity="1" + stroke-miterlimit="10" + d="M 35.264098,41.255027 35.02191,40.774559" + id="path1454" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#a90000" + stroke-opacity="1" + stroke-miterlimit="10" + d="M 35.02191,40.774559 H 34.783629" + id="path1455" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#a90000" + stroke-opacity="1" + stroke-miterlimit="10" + d="M 34.783629,40.774559 34.545348,40.536277" + id="path1456" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#a90000" + stroke-opacity="1" + stroke-miterlimit="10" + d="M 34.545348,40.536277 H 33.822691" + id="path1457" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#a90000" + stroke-opacity="1" + stroke-miterlimit="10" + d="M 33.822691,40.536277 33.58441,40.774559" + id="path1458" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#a90000" + stroke-opacity="1" + stroke-miterlimit="10" + d="M 33.58441,40.774559 H 33.342223" + id="path1459" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#a90000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 33.342223,40.774559 -0.238282,0.480468" + id="path1460" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#a90000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 33.103941,41.255027 v 0.71875" + id="path1461" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#a90000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 33.103941,41.973777 0.238282,0.480469" + id="path1462" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#a90000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 33.342223,42.454246 0.242187,0.242188" + id="path1463" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#a90000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 33.58441,42.696434 h 0.238281" + id="path1464" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#a90000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 33.822691,42.696434 h 0.722657" + id="path1465" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#a90000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 34.545348,42.696434 h 0.238281" + id="path1466" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#a90000" + stroke-opacity="1" + stroke-miterlimit="10" + d="M 34.783629,42.696434 35.02191,42.454246" + id="path1467" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#a90000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 35.02191,42.454246 0.242188,-0.480469" + id="path1468" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 64.783629,45.333153 v 3.601562" + id="path1469" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 64.783629,48.934715 h 3.60156" + id="path1470" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 68.385189,48.934715 -3.60156,3.601562" + id="path1471" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 64.783629,52.536277 -3.60156,-3.601562" + id="path1472" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#840000" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 61.182069,48.934715 h 3.60156" + id="path1473" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#006464" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 62.143009,57.813621 h -0.48047" + id="path1474" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#006464" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 61.662539,57.813621 h -0.48047" + id="path1475" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#006464" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 61.182069,57.813621 h -0.47656" + id="path1476" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#006464" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 60.705509,57.813621 -0.48047,0.480469" + id="path1477" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#006464" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 60.225039,58.29409 v 0.242187" + id="path1478" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#006464" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 60.225039,58.536277 -0.24219,0.718748" + id="path1479" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#006464" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 59.982849,59.255025 v 0.48047" + id="path1480" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#006464" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 59.982849,59.735495 0.24219,0.71875" + id="path1481" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#006464" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 60.225039,60.454245 v 0.48047" + id="path1482" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#006464" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 60.225039,60.934715 0.48047,0.23828" + id="path1483" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#006464" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 60.705509,61.172995 0.47656,0.24219" + id="path1484" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#006464" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 61.182069,61.415185 h 0.24219" + id="path1485" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#006464" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 61.424259,61.415185 0.71875,-0.24219" + id="path1486" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#006464" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 62.143009,61.172995 v -0.23828" + id="path1487" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#006464" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 62.143009,60.934715 v -1.19922" + id="path1488" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#006464" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 62.143009,59.735495 h -0.71875" + id="path1489" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#006464" + stroke-opacity="1" + stroke-miterlimit="10" + d="M 63.822689,61.415185 V 57.813621" + id="path1490" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#006464" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 63.822689,57.813621 1.92188,3.601564" + id="path1491" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#006464" + stroke-opacity="1" + stroke-miterlimit="10" + d="M 65.744569,61.415185 V 57.813621" + id="path1492" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#006464" + stroke-opacity="1" + stroke-miterlimit="10" + d="M 67.424259,61.415185 V 57.813621" + id="path1493" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#006464" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 67.424259,57.813621 h 0.96093" + id="path1494" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#006464" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 68.385189,57.813621 h 0.47657" + id="path1495" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#006464" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 68.861759,57.813621 0.24218,0.480469" + id="path1496" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#006464" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 69.103939,58.29409 0.23828,0.242187" + id="path1497" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#006464" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 69.342219,58.536277 0.24219,0.718748" + id="path1498" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#006464" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 69.584409,59.255025 v 0.48047" + id="path1499" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#006464" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 69.584409,59.735495 -0.24219,0.71875" + id="path1500" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#006464" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 69.342219,60.454245 -0.23828,0.48047" + id="path1501" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#006464" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 69.103939,60.934715 -0.24218,0.23828" + id="path1502" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#006464" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 68.861759,61.172995 -0.47657,0.24219" + id="path1503" /> + <path + fill="none" + stroke-width="0.43193" + stroke-linecap="round" + stroke-linejoin="round" + stroke="#006464" + stroke-opacity="1" + stroke-miterlimit="10" + d="m 68.385189,61.415185 h -0.96093" + id="path1504" /> +</svg> diff --git a/docs/img/puzzle-module-common-state.svg b/docs/img/puzzle-module-common-state.svg new file mode 100644 index 0000000..b5688ef --- /dev/null +++ b/docs/img/puzzle-module-common-state.svg @@ -0,0 +1,3 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="161px" height="221px" viewBox="-0.5 -0.5 161 221"><defs/><g><ellipse cx="40" cy="40" rx="40" ry="40" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 78px; height: 1px; padding-top: 40px; margin-left: 1px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Arial; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">Uninitialized</div></div></div></foreignObject><image x="1" y="33.5" width="78" height="17" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAATgAAABECAYAAAAV6ClkAAAAAXNSR0IArs4c6QAADmVJREFUeF7tnQWsNTsVhddDAwQIFtyCuwV3fTjB3QLBJUBwd3i4SyAEd3d3ggYLFpzgGvQBweZ7fwulaWfac849d+bc1eRP3rvT6ems7q7u7u69e5hcjIARMAI7isBhO/pd/iwjYASMgExwFgIjYAR2FgET3M4OrT/MCBgBE5xlwAgYgZ1FwAS3s0PrDzMCRsAEZxkwAkZgZxEwwe3s0PrDjIARMMFZBoyAEdhZBPaT4B4q6VEJsi+QdC9JR66J9iUlfSJr41KSPrlmu+u+fhxJT5N0x6ShOfTr5pJekfTpYZIeve7HJu/vdfurdPVskl4r6Xzh5S9LurGkbxUam2P/V/nmbb6T4/teSeD4m212gt8ywW0P8V0juJNJupmkd0r6zgiMcyQIE9zeyr0JTpI1OGmJGtzxJN1o0LTvL+mvI5pPnEImuL0lkzm2boIzwR0ll0sjuBNJeomk6zRs7Uxwc6Se7fTJBGeCWyTBnUTSKyUdboLbDlMs9FdMcAeQ4BYqq//X7VUIbo7f3WODm2P/594nE5wJbu4yWuyfCW6Rw7b1TpvgTHBbF7pN/KAJbhMo7n4bJjgT3CKl3AS3yGHbeqdNcDMiuNyNIT3ZPIakiwa3iItIulgQFRxCvyjprZLeJekPDSLU4weXOyvfIhj3+ZmjSTpncM+4rKTzSzq+pB9KwmEVv7S3SPplQ5+oMuXGkQvrVLP5yfBU+2Ptgf9ZJV1R0iUk0ZcLJC/wzV+T9OlhbN4TxuQfUx0M7WzS0bcXo6kujjke5+8iV8jodQdZTGX0t5I+Fxzc3zzI8Ncl/Wvqh0eep79z6WQcPhrmwGsk/Si8b4JbAMFBHHj0X3NCKBAkvP9fJOlvEwLSGslQI7jTSnqMpFtN9OmPkp4l6QmS+O+xMkVAvZN3EwR37IA7vnYX7piUTOgHSfrQxGTuOWSYwofu9WI09UktBAdG1w+yx+9PlXdIenhYBP49VTl5zoJ6BUmPmxiLdB6cIYsUcSSDpP0K1SppcCeX9NTB5+v0HYLwDEkPlvTnyjvranDfk/S8JLyopWuvH8Jj7i7pFyOVpyZw7+Rdl+CIkHiKpFu2fGChDoTOwsRiUtPmlk5wp5B0xAoYgQ0LwPNHsEkhRWbvI+l+YZfQMiS0D5m+PJFVE9yMCA4NickVyQ2hII71U4Nw/F3S6cKWqbRqplvJ0lZiVQ0OskWrYysSC1sDYm7pH7axK2Xbt1gPgWMy/LMinVMEx2S6iSQ0BgSeKIZzhLZ+FgSZ1TuWNw3b3m8n/z/VftotoiTo612yvvKNXwpb0RjPyDezVYpmg/QV+kWfP1b55k0TXIpRCwnEOnHs0phsnj0gkHyJoFl8UQais3Xa1mcDRrSL2YLFBjNGXsbaj3UxD0Bu7ALy8pmh7Q8E2SvNB+T1ypLOE140wc2I4FKBea4kNDMmTFqY7MRhPlnSiZMH2DpuJ+l3BaFYR4NLm3vZEEP8SEnfH7Yc6VaDrcTVwsRIyRdhvGmoX5p8PQS0yiFDT/t5XfoLxkyYfAzitzDB0JzvkH3cM4PmUTIbbJrgekgtrctWjkQHLF6xIHNoTKWdQGkBgMxqckqs+RmDWQMZSGUbvLCb1cpVJL0h09xY6CE9TAGpPQ8yZBvL4hQTGKTtmuBmRnAIDVrEq0ZsOQgPQoO6z2pJ4T1IppS5ZBMEhzbGZB+z9bFivzTbXo9plj0EtJcERxjYi4OxPE4O7D7YjaYODlhwqPfAZFZ9JByg/LQwg+dAcCWy4tCKbDM1k0I+Vi1yyucje5DmIxIsPhx2Kj8p4MNYoCXeMHlG3+4qqVQ/VkOzJ5Qv3WnwzAQ3M4LDBoRWMEYkDFxpUt5aElpWXtYlOOxpCH9JO0x/i8nOSnqP5I9ofPwrGZfnQnAXkvT2QQ5OGfo9pXnm+J43aBxnCQ++GrbT35whwZW2f3zvbYfT8W9UVKqSrLVsNWNzJwgHT+kB1e3DopL/JKfW7Ebiwk2f2PJ/pa7w/fcJmhxaaRxHE1yAZi6HDGNaWD6+Rw8G7VRzqOVTW5fgxrSwvF8QIZplLGPYzoXgzizpWpIgqjMNds6PhxPCmu0w/+Zcu+R5LZnBfmpwNc3/TsNp7KsrixDfkpPOmAZW46G8DbagkNzvkxdKMs2hDQtky1iUFlhrcDPS4Ma2NiXByclkLwgOo/0NGldQ+oiB930LI7gG5WC0ylIIrmRCmNLEIEV2FGkiUtKNPXaEEEtgnSr4U14uPCzJ1UnDwdFVkwawx72/Y4By+TPBzYjg8Ge752Cz+EvjgLZqQOtocJxYcajxq8Y+5X50S9DgGj+tWm0JBFeyUY0dKsSPZav4nMwthC0jzso95bjh0AytLRZOY9+W/H++1cd7ANnDqbq1oI1zgIHZgWKCmxHBIXCcFJHMsaVsg+CITsB1Zcr+Fvt7UAgOW9ZpgrvI9cI2LtqNwGJOW9SSe8fUoUIcz1zz4u/PHraXP24R0KTOMQc3EjSz9NSWrTELYCyXkYQLUiy9ssd72Avxg7uGCe5/QM7FBtd7J8E2CK4Xm10iOLZnGMiZ5PzDfnauQeu4YMUHLp3zcyG40onp1KFC+h29ztY9vJfLey7PvbLHb+e7FWtwM9LgTHD1S2f20k0knZQxBphTRRyYeyJK5kZwpRNTDrLQyNHgWooJrgWlQp05XTqDSoufzVTs5NSn5trLVFxfqwZW+93W99exwfWuokvV4JBHguk5sZuKAU7HA5nBix/bT0qG+63BlU5M6ffUoUIuaya4qVlfeb6fBIc/Dg6psWxKjeX6t9RD2wQ3HufbStCM015qcMgiGTGmYoAJC2NMPx/Ct8jq8t3gs5WmU6e/+01wpRPTlkOFKYKbkukV6eCo17xFXQe95N1rZyr6F4Iz4dgVdC0/zd2qTJJW4uyZ4KXfb33fGtwh9GomAE4Y8QNLQ33QzAjcxsmZWNSfj9ybO7dT1NKJaeuhQi5n+akkuOC6QZqoTZdc+19F8chPfVdpYyPftZ8aXO653uNgW/v4EolMuX20ElTtN1vfN8HVCQ7nUkKt8O2KhZx7nPBxoteS3mdOBFc6Me05VMhlLT+V5HmP43cPWZx9yDf4uiRQfhVtMT/1PZAEVzr6xj2DjBstAl0aNAKL0QLSWLh7hzbXJah13zfB1QmuJAsEg7M4tcpCPjH5tf3YopZOTEkUACGRp26VcqyQ1YPdSSxjyQRqvxFjTHHmJfyK3RLhcemuqUSmua/c1DegBb47CfU6kARXGjSC1BGEH0whWHiONooD4wuTZy1aYasGZoLbOxtc7lwKIRC2hdmiteAH98as8rYJrpZiqPdQofTN+ff1xIfG9vIMISWcS1ETPYdcJW38QBIcoOexcfxtFSMs75VsHmPpi+Kgm+AOBUfHMuYms1eHDCVzRY+N6dTBsfTy+0hwtRPTVeU5J7ne1Er5+yQShag4yImFSAg05TzlPqnPSXsfA+ZRFAgVTMP/agsPixWHfDFnIPUOLMGV0rIACNtMUgO1aHLkQYMon1QwULf4GpngVie4lhjZFnxzIzoygD2OZItTqZIgN8waaWqfOPk4xSwlvdyLYPvSiemqhwol8oBAyRDz9OwhKZDIHnPkiKpLADymGtJPxTLmi0d94lwxGcWCDRE3rjGtmrEgpCxPxnlgCQ7w2K9zvJ87c+IOgG8cOdkwOLPKRHsM9iyyqLIFIcNsyWeqdeVsmYAjsjN5aUt8dxdscCcMdjFW81imctS14IvditCj22QTkEy3pGkvJX8kuoE7Cbi3oXYnQc0Qv2mCK+0e1jlUqMlbSQuLCgGB+KSGym2WaH74Feb3eEzNj9I3MQ8ZE0wBaSoxlAzuziDNWBoGFr/jQBMcKxO+azB/mh13jFSmnkGMrD4twektE9AEdwiBkt2UvyP4MRgbFx0EOpZWfEsZZGmDdiELTvNI14MLAmnK2Ualcaf0gSzHaRaMWm6+TRIcRIvdFxmOhRvN0KrIn3bugNuUzObPSWGE6eBP2YNaUkmq4RNIYgbSujNWaJXsbvLCVvPOA+lxz8dYKWmlcbw/GG7RGkuXb4ILCEByJMpjBSilPG4Vjp7bpHonYK0PrRN4FzQ4MGD7wQKSkkuKTR683YoPBnpOCdma1tqujQG+cvcNspM6edcSfW6S4EruKa3yOlZvTOshqScaL4tCb4Hc7pbdm1Frg3nJgoEW3RouxxzEZEAq+aiRH2gNLgUXYQEUboJqBTS+z4ECF8awirW6FvBu6wQ0wR1CoJT+OsXm8YGkYnLEHnwhOWxp+MS1XIXH3QBPDM7AbJnywwruSsUO++ts8JZOcHwO23oOCEjt1TJXMPkwP9A2aze/1WS8ts3N66NFPyS4iKCskCuRYoLLkEK95kYeLvvlHwCntyfFcB2Oysn8SpJK8tj3EJs1uEMI9BBQxAybCzdasRhdPCOjPKZ4lfbZ9h0+xJdePWhl8bLn9DLj0kXPeVrv2unfLhBcHAuIDrsXmjVzJl4EznMiHbDLkbmXedJyQXmN5MYuHMeEgIIRL0F3NpFevdr1jYARMAK9COxnqFZvX13fCBgBI9CFgAmuCy5XNgJGYEkImOCWNFruqxEwAl0ImOC64HJlI2AEloSACW5Jo+W+GgEj0IWACa4LLlc2AkZgSQiY4JY0Wu6rETACXQiY4LrgcmUjYASWhIAJbkmj5b4aASPQhYAJrgsuVzYCRmBJCJjgljRa7qsRMAJdCJjguuByZSNgBJaEgAluSaPlvhoBI9CFgAmuCy5XNgJGYEkImOCWNFruqxEwAl0ImOC64HJlI2AEloSACW5Jo+W+GgEj0IWACa4LLlc2AkZgSQiY4JY0Wu6rETACXQiY4LrgcmUjYASWhIAJbkmj5b4aASPQhYAJrgsuVzYCRmBJCJjgljRa7qsRMAJdCPwHme2jkICHSpYAAAAASUVORK5CYII="/></switch></g><path d="M 130 60 L 130 73.63" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 130 78.88 L 126.5 71.88 L 130 73.63 L 133.5 71.88 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><ellipse cx="130" cy="30" rx="30" ry="30" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 58px; height: 1px; padding-top: 30px; margin-left: 101px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Arial; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">Reset</div></div></div></foreignObject><image x="101" y="23.5" width="58" height="17" xlink:href="data:image/png;base64,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"/></switch></g><path d="M 130 140 L 130 160 L 130 140 L 130 153.63" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 130 158.88 L 126.5 151.88 L 130 153.63 L 133.5 151.88 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><ellipse cx="130" cy="110" rx="30" ry="30" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 58px; height: 1px; padding-top: 110px; margin-left: 101px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Arial; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">Playing</div></div></div></foreignObject><image x="101" y="103.5" width="58" height="17" xlink:href="data:image/png;base64,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"/></switch></g><ellipse cx="130" cy="190" rx="30" ry="30" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 58px; height: 1px; padding-top: 190px; margin-left: 101px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Arial; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">Solved</div></div></div></foreignObject><image x="101" y="183.5" width="58" height="17" xlink:href="data:image/png;base64,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"/></switch></g></g></svg>
\ No newline at end of file diff --git a/docs/img/puzzle-module-top.svg b/docs/img/puzzle-module-top.svg new file mode 100644 index 0000000..79c16ed --- /dev/null +++ b/docs/img/puzzle-module-top.svg @@ -0,0 +1,3 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="313px" height="133px" viewBox="-0.5 -0.5 313 133"><defs/><g><rect x="113" y="0" width="80" height="80" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 78px; height: 1px; padding-top: 40px; margin-left: 114px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Arial; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">Puzzle module</div></div></div></foreignObject><image x="114" y="26" width="78" height="32" xlink:href="data:image/png;base64,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"/></switch></g><path d="M 153 111.63 L 153 86.37" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 153 116.88 L 149.5 109.88 L 153 111.63 L 156.5 109.88 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><path d="M 153 81.12 L 156.5 88.12 L 153 86.37 L 149.5 88.12 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><path d="M 113 120 L 193 120" fill="none" stroke="rgb(0, 0, 0)" stroke-width="4" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-end; width: 1px; height: 1px; padding-top: 120px; margin-left: 105px;"><div data-drawio-colors="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); " style="box-sizing: border-box; font-size: 0px; text-align: right;"><div style="display: inline-block; font-size: 12px; font-family: Arial; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; background-color: rgb(255, 255, 255); white-space: nowrap;">Puzzle bus</div></div></div></foreignObject><image x="46" y="113.5" width="59" height="17" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAOwAAABECAYAAACCnNmXAAAAAXNSR0IArs4c6QAADm5JREFUeF7tXQXMVEcXHbxAgACFBgkWKBakxV2DtbhrgxNcglvwFoJLW9wluHuQ4BosaIK7Q1oCQf6cyT9f3s43b3fe2/eGXXpv8iWw+8bOu2fmzr13ZuN8+fLlCyMhBAiBqEAgDhE2Kt4TdZIQ4AgQYUkRCIEoQoAIG0Uvi7pKCBBhSQcIgShCgAgbRS+LukoIEGFJBwiBKEKACBtFL4u6SggQYUkHCIEoQiCAsIcPH2alS5d23f3MmTOzHDlysIwZM/J68If/x40b13WdVDA2AlevXmWNGzdm586d418WKFCArVq1iuXMmTPq4JJ1rmPHjmzy5MksceLEUTcWEx32lLCqDpcpU4YNGzaMVaxYkYjr0RslwnoEZBRW4zthBSaDBg1i+EuaNGkUwhRZXSbCRtb7MNkbY4TFoH7//XfWp08fFj9+fJNj/ObaIsJ+c69Ue0AhCXvo0CFWqlQprQo/fvzIXr16xfdWU6ZMYVu2bAkolyxZMrZmzRpWpUoVrfroITUCRNj/rmZ4SlgrjO/fv2eTJk3iZrBVGjZsyP7++2+WMmXK/y7qYY6cCBsmgFFc3DfCApN//vmH9evXj82aNSsGIqyy27dv1161oxhb37pOhPUN2oiv2FfCYvQnTpxgderUYQ8fPowBAytvr169Ih6cSO0gETZS34z//fKdsK9fv2bt2rXje1chFGsL78USYcPDL5pL+07Yd+/e8dUU+1YhLVu2ZDNnzmQwj4U8f/6cNW/enO3cuTPmMycOL93y4SaHyC+7atWqbNmyZSx16tT8K7/rRxvhEhaXjNy7d487BXfs2MGdhLdv3+b9/+mnn3giRo0aNRjGljx5cl/1O1jiBJyY0IFFixaxo0eP8nFDZ4oWLcrKlSvH6taty/LkyaMV39fVD7vBhlP+5cuXbM+ePWzbtm0c67Nnz/JmUqVKxbEuXrw4d8QWK1YsZMLIVyGsrOTofDiAOCnvN6H8rj9cwt66dYsNHz6cLV68OCQRoVBDhgxhHTp08C1+bkdYTCB9+/aNFWmQOw3SIjGnYMGCQcdjSr+snXjx4gWbOHEi++uvvxj+HUqQqYax1K9fnyVKlEj5+FchrMokNgWo34Tyu363hP38+TNbu3YtJ4FYTUMpkPges/+MGTN4mqnXoiIsfB49e/bkK6qOICUWfhGQN06cOMoipvRLNH7//n3WpUsXtnHjRp0hBDzTvn17nrOACVMW3wn77NkzBhMYppeQgQMHslGjRrF48eLFfGYK0OvXr7N169Y5BhEm7/nz59n06dNjysI8w+zZtGnTGEXxu343hIUJvGLFCtapUyf29u3bgLFjVi9RogTLlSsX//zy5cts//79sUgNc23BggUsd+7cjrELVkAmbN68edmHDx8YcBSCtitXrszNYUw2MC3lSQekhekMU1klpvQLbauiI/hcxhrvAib/gQMHYnUZ/BgwYECsJCPfCbt3714+81kVZenSpXy/ahWTgLrRuFOnTrEGDRoEKIqXmVtO6ne6h4VC/PbbbwF9L1KkCBszZgyrUKFCLKWA3wGrMcxhKzHwHuGLSJMmjRsIlWWCWSRY2ceNG8f31daVE/3DBARrwWpqIsEHupUlS5ZYbZnUr61bt/JJXOg8JhNM9NWrV4+FNSbTGzdusP79+7P169fH9BsT4+rVqxkmMKv4SlhstmH+omEhdh0xCahTbXv8+DEfh9W86dy5Mxs/frwnezun9Tsh7JMnTxhMrE2bNsUMu3bt2tzplyFDhqBQnD59mpt1x48fj3lu9uzZ3OtvZ3o6xdaOsOgjJocffvhBWSUUfd++faxNmzYBk8rYsWN57N9qvaECU/oF6wArI04cCcHkV69evaDQPHr0iOMKsgtRhT99I+zTp0/Z4MGD2Zw5cwI6ilxizOzyptoUoE4VSmXehFImJ224qd8JYWH+w4khxKlpu2vXLm5ZiNUCpikcVunSpXMyTNtnVYTV7SNIO3fuXO4Us44Pq2/WrFm/igWHRQpbQEE8J0cf5XeliqZ4RliA9+bNG768Y48xb968WPsMdB5gqvZBkUhYhBXg5cOMKSTUXsmJFrutX5ewmAy6du3KFi5c6HqFVNUBS6NWrVpOhuqIsCBh27ZttepHQk6rVq142CTYimZKv+R24KhDDkL+/PlDjufKlSt88kEoDV5v+BWQymtd3EISNmQrmg+oHDTWoqYA1ewuUzlqQo1Bt248F079uoTVfS5Uv2GawmElROU0DFWH3ffyCovVVbVC2pUHjrDYhg4dGrR/pvTr33//ZT169OArv5BgXl+nuBkhLNzT2HQ3adLENshtClBdgFSOGi+dTOHUr0vE3bt3B5yM+uWXX9iSJUscH7w4ePBggPcVJjIUMkWKFLpwaq+w2MdNnTqVJUmSRLtunXGa1C9YlxiHVfLly8datGjBfv31V/bjjz+6PmLqK2GxIuHlIhis8txF6gqL0Ebr1q0DnC1eOpnCrV+XsPLKCC9qtWrVWIIECbTJgAeRFYU4rJDy5cvz7K706dM7qkf1sLzCjhw5MmC11GkA4TbomQgFFSpUiK1cuZJlz549prhJwiIGi/0nnGIqwbYKGMIRhawtONZ0nXieEhbud7zEwoULs5IlSzKEDnSP0ZkENJgSqDy2XjqZvKhfl7CI5WGy9FqcOFJCtS0TFrFU7EmdiA4epvULVgn2ozrJH9gGgLw1a9bksdpgd6CFJKyTfF4nIMvPmgZU1VeVxxazIZwGmITCFa/q11FQ9DUaCauK0YfCHRGJZs2axTieVBPK19AvJ2mgYowwnRFJgcWguk6JCPt/pFQeWy+dTF7WT4QNpPCDBw94Ig4ytCCRQlj0BU4xJJ9gIsKfzoqLckhSQSwXC4ZViLA2HluA5JWTyS410G39bgnrZn8YanUL9/tv1SRW4YJ87rt37zKYy5s3b2bIAgx2KECVWUaEZYzncsqpe146mbyuX5ewSOuzXtGDMSGu/N1334XLM8/K++F0UjnFvoZJHAokZEVdu3aN5y0gacKaUSbKyllSEUNY1UF3J/tnJGwgbIR0OiE65VUeWy+dTH7Ur0tYXC4OTITAQ4ywzvfffx9Kl4x9LxPWzaSCtEu8MyGqDKGvpV+6QGL1xdVJSAW15m/LeEQMYVUH3bEylS1bVmvMx44d4zFH6yGDUIRVeWyDZWNpdcTykF/16xIWkxc8j+J6HqQTbtiwgYcSnAhm/9GjR/P91M8//8wT0hHTtTuz6aRumbBOQ0afPn1iI0aM4A42Ifg30mLlAwPyRQp+6Bcm6CNHjrAzZ86wCxcu8PAOEid0BFsnnP4CSYXIZ8cjmrBOXPzYoPfu3TsAl2CEtbsgTj4upwO06hk/69clLPJakeJnPQUCExkKrns3NNJNu3XrFnDgHYqP/XfChAndwhNTTiYsHH3ob6VKlbTqvnnzJj8ZI8xJu/KqBcEP/UJ8GgkSQpxehyTjEbGExUyJ9DLsu4R0796dn4gJNZPbBartCKvy2KJNt04gWbP8rl+XsJixp02bxg+DC3GaC40EBMQTheUCQiB1ECusF6JK/te9Chc4451Z0xLhqEGmkRz/N6VfchIH8uaBoU4uMfCUCS9nfkXMCqvqrI5yQZFwlvDPP/+MpT8qwtp5bL1yMvldPwapS1g8i1ggZnwQQwgC9Theh4ygYHLx4kWeYmd1huiSSZfMdsfrcEwOFpPdZI093/Lly7n5GOqsteiLTAY/9Et1WELXJ6I6YgeLD6u0kIgirKyI6CT2lBMmTOAmkjUDBC8M+wSYd/IvDIjBqQir8tjqAqqjhH7X75SweF5eJfEZlBVZUPgVPDlAj0vg4Z1EGMgaN9RRcB2MrM8EO8AOMuIQvXyUD2Y68o2hF1ayYq+IrZHd7zeZ0C+MTT6SiM+QQ4y7tOADkDOZMMnjYjYcqkBZIaoD+RFFWJgtMIHlXwvAAKzXhMBFj+NU4vY5fA/S4aoT61E4mbB37tzhaW/WKzmyZcvGTSrcogCHAfrgVDJlysTPnGKG9LN+sWd0ssJiLHYmOr7DwQxMhjjOhUPfdlewwBT+448/uHksHw53ilcwwsJ8Rw6u+ClNtIv+Ic0V7V66dImfNZXjlzr3TvmtX2JcmPDg9EIITRak70JPoTMQ6CRuhLTqMj63S9qJKMKio0gzQ2oWwg+6gv0UTDwQ1LrhlwmrmmF12wj2nHAsAHzr77Z6UTfqkB0XTgkrSAvzCpOhfK9TqH5CeWCi4oidrrMqVJ3ie3mFxXvHSR2Yw7qXxdllBan64Kd+WdvDhILFQ77AQQcXTKK4bQLZWzLeEUdYDAj7AFxFglBCsEwQKBLMJlwJgkHKexQibKB6CNMLuFo9x8GUCKYcth3yvUo6iqfzjExYpO8hLxirDlbbkydP2lbj9hpWv/RL7ihW2vnz53PLxMnkg22AHd4RSVgxcNxHhLghTCBx2TVeEswj/EB0o0aN+F5MxNuIsHq/wI79P5xRSDjA9gBbAbFXBZ6Is+L2QZ3TIzqkDPaMirDigj4QCyl8mFzg+ILS4/3jJBj6hutQ06ZN67oLXuuXXUcQUkL/sT9FvgB0WSxEOJ0DTzLwxi0eOIaqfVrH9cipICFACBhBIGCFNdIiNUIIEAKuESDCuoaOChIC5hEgwprHnFokBFwjQIR1DR0VJATMI0CENY85tUgIuEaACOsaOipICJhHgAhrHnNqkRBwjQAR1jV0VJAQMI8AEdY85tQiIeAaASKsa+ioICFgHgEirHnMqUVCwDUCcVyXpIKEACFgHAEirHHIqUFCwD0CRFj32FFJQsA4AkRY45BTg4SAewSIsO6xo5KEgHEEiLDGIacGCQH3CBBh3WNHJQkB4wgQYY1DTg0SAu4RIMK6x45KEgLGESDCGoecGiQE3CNAhHWPHZUkBIwjQIQ1Djk1SAi4R+B/nTepKJD+LIAAAAAASUVORK5CYII="/></switch></g><path d="M 193 40 L 213 40 L 226.63 40" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 231.88 40 L 224.88 43.5 L 226.63 40 L 224.88 36.5 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 1px; height: 1px; padding-top: 40px; margin-left: 241px;"><div data-drawio-colors="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); " style="box-sizing: border-box; font-size: 0px; text-align: left;"><div style="display: inline-block; font-size: 11px; font-family: Arial; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; background-color: rgb(255, 255, 255); white-space: nowrap;">Puzzle outputs</div></div></div></foreignObject><image x="241" y="34" width="72" height="15.75" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAASAAAAA/CAYAAABAdBV6AAAAAXNSR0IArs4c6QAAEOdJREFUeF7tnQesFUUXxwc1KEGxBbEQNCaCvWDDgmIlgg2ViILYe9eoYMHeQRDQ2EVQUbFRFCuCgmJXiBEhVgKCRozYCcqX33yZm3njltk7u2/ve/dM8hJ4b2d25j8z/znnzDlnW6xYsWKFkiIICAKCQAkItBACKgF1eaUgIAhoBISAZCEIAoJAaQgIAZUGvbxYEBAEhIBkDQgCgkBpCAgBlQa9vFgQEASEgGQNCAKCQGkICAGVBr28WBAQBBoQ0PXXX68GDRpUFSpdunRR6667rtp1111V9+7d1fbbb69atmxZVVv1XGnGjBlqzz33rEDw6KOPqr59+9YzJDL2ZoxAbgTkYtSpUydNZkceeaRaddVVmzGE+Q5NCChfPENa++abb9SkSZPUySefrFq1ahXSVJOp++OPP6rHH39c9e/fX6299tqF97swAjI9P//889WNN96oWrduXfhgmsMLhIDKn8Xff/9d3XfffeqGG25QvXv3VkOHDm32BPT333+rZ555Rl133XVqk002UY899pjWaIouiQTUr18/tfXWW3v14bvvvlMfffSRmjlz5n+ev+WWW9TFF1+sVlllFa+26vkhIaByZ//nn39WJ554oho/frzuyOmnn97sCeivv/5SAwYMUHfeeaceMyaUmiCgrPYHwso+/vhjNXDgQPXKK69UVtIGG2ygnnjiCbXXXnuVu7qawNuFgMqdpJ9++knb3F5++eW6IaA///xTXXjhheree+9t2gRkls6iRYvUKaecol544YXKajrvvPPUbbfdJvaglP0lBCQE1NgINDsCAsBnn31WG6BN2X333bVxa+ONN25sfJvU+4SAyp0ukYCasApmL52FCxdqUXbq1KmVX0+fPl3tscce5a6wGn+7EFC5EyQE1EwI6I8//lDcgD3wwAOVFYVh79BDDy13hdX424WAyp0gIaBmQkCuXsmywhB99NFHV1ZYiO75xRdf6LY+/fRT3R7Xh1dddVWD1Ysln5u80LLddtupJ598UuHbRCmqXdquloC4APj222/V888/r9544w2NC/+n4CTauXNnddhhh6muXbs22pXy8uXL1bvvvqttgUi/n3zyifr111/VGmusoR1V9957b30g7bDDDl43pNVi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"/></switch></g><path d="M 73 40 L 93.52 40.52 L 106.63 40.17" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 111.88 40.03 L 104.98 43.72 L 106.63 40.17 L 104.79 36.72 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-end; width: 1px; height: 1px; padding-top: 40px; margin-left: 65px;"><div data-drawio-colors="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); " style="box-sizing: border-box; font-size: 0px; text-align: right;"><div style="display: inline-block; font-size: 11px; font-family: Arial; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; background-color: rgb(255, 255, 255); white-space: nowrap;">Puzzle inputs</div></div></div></foreignObject><image x="0" y="34" width="65" height="15.75" xlink:href="data:image/png;base64,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"/></switch></g></g></svg>
\ No newline at end of file diff --git a/docs/img/sequence-puzzle-finish.svg b/docs/img/sequence-puzzle-finish.svg new file mode 100644 index 0000000..d1dc35a --- /dev/null +++ b/docs/img/sequence-puzzle-finish.svg @@ -0,0 +1,3 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="262px" height="321px" viewBox="-0.5 -0.5 262 321"><defs/><g><rect x="20" y="0" width="40" height="20" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/><path d="M 40 20 L 40 320" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" stroke-dasharray="3 3" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 38px; height: 1px; padding-top: 10px; margin-left: 21px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Arial; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">Main</div></div></div></foreignObject><image x="21" y="3.5" width="38" height="17" xlink:href="data:image/png;base64,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"/></switch></g><rect x="35" y="30" width="10" height="290" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/><path d="M 45 180.03 L 70.03 180.03 L 70.03 200.03 L 51.37 200.03" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 46.12 200.03 L 53.12 196.53 L 51.37 200.03 L 53.12 203.53 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 1px; height: 1px; padding-top: 190px; margin-left: 52px;"><div data-drawio-colors="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); " style="box-sizing: border-box; font-size: 0px; text-align: left;"><div style="display: inline-block; font-size: 11px; font-family: Arial; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; background-color: rgb(255, 255, 255); white-space: nowrap;">state := solved</div></div></div></foreignObject><image x="52" y="184" width="71" height="18.5" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAARwAAABKCAYAAABpVOu+AAAAAXNSR0IArs4c6QAAEd1JREFUeF7tnWWsbTUThntwQoDgHtzd3d3d3d0lOMEJ7sFdg7u7u7uT4A5BA1zy9Pu60zOnXavd0rvv2dNfcE9X5e307cx0prtvyJAhQ4wWRUARUAQKINCnhFMAZe1CEVAELAJKOCoIioAiUAwBJZxiUGtHioAioISjMqAIKALFEFDCKQa1dqQIKAJKOCoDioAiUAwBJZxiUGtHioAioISjMqAINIHA77//bvbcc09z7rnn2q+XX355c+WVV5pxxhmnidYG1yffffed2Xjjjc0999xjJ7b99tubU045xYw66qhlr8X//fdf8+CDD5rffvvNrLbaal2B8p9//mluuOEGM/3005u55567K8akg+h+BJRw4mvUFYTz8ccfm8MOO8xcdtll5oorrrAMODQLAdYvvfSSHdPtt99uHn/8cbPwwgsPzSFp38MQAko4XUw4zz77rFlxxRXN999/b0fZDYRz/fXXm6222sr88ssvdkxKOMPQbu+CoSrhdDHhPPHEE2aRRRZpjLAbCAd7e5NNNmmMSQmnC3bxMDQEJRwlnCxxVcLJgksrCwSUcJRwsjaFEk4WXFpZCSdZBoa601hNquS10orDCAKq4aiGkyWqquFkwaWVVcNJloFsDefvv/82zzzzjLnjjjvs7c3LL79sb3NGH310M8ccc5hZZ53VrL766mbRRRe1wTyh8s4775j111/fvPLKK7UDrXPYcpownnvvvdc8/fTTtk134zX22GOb2Wef3SywwAJm5ZVXNvPPP78ZYYQRgn1KTSs2MNq79tprbWxOrDCmxx57zNxyyy3mxRdftOOiTD755HY8Sy65pFljjTXs//f19dVi0EwFSZp+gFUz7Q3tb2KY5qxx1Ry+/vprc9ttt5n777/fhkQgoxTWec455zSrrrqqWWaZZcz4449fC0WdhvPqq6+addZZx7z33nu2rd12280cf/zxZuSRR65tmwqEbRx99NHmkEMOsfUnmmgic/PNN5v55ptvqMnkzz//bO68805z00032f34ySefGNZmoYUWstgh72CXTDhM8qGHHjL777+/ee6552qBYaEOPfRQs/baaw8Ash2E8+uvv5rzzjvPnHbaaXZyKWXeeec1xx13nN3wcqO3g3Ag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"/></switch></g><rect x="130" y="0" width="20" height="20" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/><path d="M 140 20 L 140 320" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" stroke-dasharray="3 3" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 18px; height: 1px; padding-top: 10px; margin-left: 131px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Arial; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">A</div></div></div></foreignObject><image x="131" y="3.5" width="18" height="17" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEgAAABECAYAAAAiL3M8AAAAAXNSR0IArs4c6QAAA35JREFUeF7tmk3ITUEYx39vQpJENmxkYSHFjmKjUDa+SSgpiiKSUpQk5atQsqAo+Vz4tlGirBQlWUhWsmFhIcnCQsxT59U0Pfeec8+cmXkXz6l3896ZufP8zn/+859z7hB29SUwZHz6EzBANQoxQAYozkRMQaYgU1AcAVNQHL+R4EFTgWvAEq+UD8B69/c+rrz43iMB0BrgnlLKfuAc8De+zPYjlAY0FjgN7FFKeAZsAb62Ly++Z2lAs4E7wKyqFIEhS274Wgvcjy+z/QilAe0ALnpwjgOHPEhXgd3Ar/YlxvUsCWgScAVYXZXwAtgLnAKWVf8rbtYlAc0DHnpquQSIMe8Djnn3vahZlwI0yu1OR4DDHoidDpZAWgg8ASZUnxU161KApgE3gUWe/ywH3gBTgOveMpMmxcy6FKAw+9wFtrvl9QOQOckyO+Opq5hZlwA0rgqAsoMNX6HPhP4k2/+wwuK2pQF7lwCkZZ+w+InAZWBdabMuAUiWz1mvcPGbXW4H+xncXD8jyUdFzDo3oDD7SOHiPZKHwitUWhGzzg0o3MLfARuAjwqg8W5HuwBsLWnWOQFp2ec8cAD43cM7NwM3vM/ErFcBrwf02tbNcwKaDtwCFnizrcs3M4DbLjjOL2XWOQGF2eclsAn43Of2jgFOVrlouFlWs84FSPOTE9VR40+N/pc61T0N2tQpr/WSCjvmAhTuSLKlyyn+eYNKtEey2ZJ1LkBh9hlkmWjmns2scwDSsk8D4dQ2kUciR90yrVuitQP1a5AD0GLggff4ImrCXudBVNj6O1MD0pZH68kqHZObdWpAWo55685e31pQGu2UOBeYnDNZpwYUZp8Yc9VeEcWM1+gepQSkZZ9eJ/dGkwVWAI+CxknNOiWgOYA8KZzpFdTr5N4UkJaJ5G2InNm+NB1kkHapAGmPTfud3JvOWRtX+iYz61SAtOxTd3JvCklTZrJknQqQln1WAo+bUujTTvO2ZGadApBkHzHOgwlDnfaLkCRmnQKQln26nnz4Xk3uxSv3ZHIj8KkDlf4fIgWgHE8BeyX0zs26a0CaP8g5bJv7YcL3Lu8sEL47k+E7N+uuAXXMoPxwBqjmHhggAxS3TE1BpiBTUBwBU1AcP/MgU5ApKI6AKSiOn3mQKcgUFEfAFBTHzzzIFGQKiiNgCorjZx5kCjIFxREwBcXx+wf5lq5FzOjpHAAAAABJRU5ErkJggg=="/></switch></g><rect x="135" y="30" width="10" height="290" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/><path d="M 145 50.03 L 170.03 50.03 L 170.03 70.03 L 151.37 70.03" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 146.12 70.03 L 153.12 66.53 L 151.37 70.03 L 153.12 73.53 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 1px; height: 1px; padding-top: 60px; margin-left: 152px;"><div data-drawio-colors="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); " style="box-sizing: border-box; font-size: 0px; text-align: left;"><div style="display: inline-block; font-size: 11px; font-family: Arial; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; background-color: rgb(255, 255, 255); white-space: nowrap;">state := solved</div></div></div></foreignObject><image x="152" y="52.625" width="71" height="18.5" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAARwAAABKCAYAAABpVOu+AAAAAXNSR0IArs4c6QAAEd1JREFUeF7tnWWsbTUThntwQoDgHtzd3d3d3d0lOMEJ7sFdg7u7u7uT4A5BA1zy9Pu60zOnXavd0rvv2dNfcE9X5e307cx0prtvyJAhQ4wWRUARUAQKINCnhFMAZe1CEVAELAJKOCoIioAiUAwBJZxiUGtHioAioISjMqAIKALFEFDCKQa1dqQIKAJKOCoDioAiUAwBJZxiUGtHioAioISjMqAINIHA77//bvbcc09z7rnn2q+XX355c+WVV5pxxhmnidYG1yffffed2Xjjjc0999xjJ7b99tubU045xYw66qhlr8X//fdf8+CDD5rffvvNrLbaal2B8p9//mluuOEGM/3005u55567K8akg+h+BJRw4mvUFYTz8ccfm8MOO8xcdtll5oorrrAMODQLAdYvvfSSHdPtt99uHn/8cbPwwgsPzSFp38MQAko4XUw4zz77rFlxxRXN999/b0fZDYRz/fXXm6222sr88ssvdkxKOMPQbu+CoSrhdDHhPPHEE2aRRRZpjLAbCAd7e5NNNmmMSQmnC3bxMDQEJRwlnCxxVcLJgksrCwSUcJRwsjaFEk4WXFpZCSdZBoa601hNquS10orDCAKq4aiGkyWqquFkwaWVVcNJloFsDefvv/82zzzzjLnjjjvs7c3LL79sb3NGH310M8ccc5hZZ53VrL766mbRRRe1wTyh8s4775j111/fvPLKK7UDrXPYcpownnvvvdc8/fTTtk134zX22GOb2Wef3SywwAJm5ZVXNvPPP78ZYYQRgn1KTSs2MNq79tprbWxOrDCmxx57zNxyyy3mxRdftOOiTD755HY8Sy65pFljjTXs//f19dVi0EwFSZp+gFUz7Q3tb2KY5qxx1Ry+/vprc9ttt5n777/fhkQgoxTWec455zSrrrqqWWaZZcz4449fC0WdhvPqq6+addZZx7z33nu2rd12280cf/zxZuSRR65tmwqEbRx99NHmkEMOsfUnmmgic/PNN5v55ptvqMnkzz//bO68805z00032f34ySefGNZmoYUWstgh72CXTDhM8qGHHjL777+/ee6552qBYaEOPfRQs/baaw8Ash2E8+uvv5rzzjvPnHbaaXZyKWXeeec1xx13nN3wcqO3g3Ag4+uuu84cfvjhDYGtGtdmm21mjjrqKDPZZJOlDD+rTg7hHHnkkXat2lVSSDm1r1xMWeNjjjnGLLXUUma44Yar7eabb74xJ510kjn77LMbYRCxj9hAO+ywg9ljjz3MeOONV7m5qyKNkd1ddtnFXHLJJbaNXLy++OILg+xAjhTI64ILLjBjjjnmgDHl4pcrky449ogjjqiUebA7+eSTzQorrGA233zz6khjyIZTfeedd25oD7Ur+f8Ku+++u2Xj0UYbrfFJq4Tz1VdfmV133dVu7tyCVnHppZeaxRdfvN+nrRIOWt5BBx1kzjjjjKwhQcwQ52KLLZb1XV3lwUA4bBbC3iFEFxNVN2/+jrbN6c+mj2m01HvqqafMjjvumKRp+/0SBErawswzzxwcTp2Gw0dyfSCMrbfeOmV65oEHHjBrrrlmA5PYt52WSYgTmefQTy1oc2iQWACUYGoDKuAGG2xg3nrrLVsJttp0002tmjTjjDPaRUU4MGdg7auvvrrRP4vPhuJ7V6gLGKQzoC0R+OcKdddaa61+34800kiN/2eS++23nz2RXGHTbrnllpZEpp56anuy0Qfjve+++8w555zTjyhRjYlqRhV15a+//mos4I033mi22267xt/uuusuw8lJoW3m5AtyaEzUIWIaweAEoz5qO4GOF154YQNw2oyRYOoihuoNBsLBTOb0dmQDTmzKZZddtrHObG5kCAJw+TkOUzCIRYgjG8gM6r8rToNZaaWVzHTTTWf/+d1337UH2+WXX95PhjDPL774Yiv/sqQQzkcffWQ23HDDRv9bbLGFOfPMM/sdzKF1/eeffyyZHnvssfbPMe2o0zLJ/kIzxOLxC3Ni7zgyfuONNyxOmFqhQ2MA4Uh7kUW/6KKLgmYJHUMiV111ldlpp50aHVSpfLm3VPhFIDs3ePxFZ511lplkkkmi+/PDDz+0djJ+J1cQZgQ3ZbNW+ZHAhxPGJ6jlllvOsv4MM8wQbB81lABHTmA3D4iJTVOlqrdCQFXfgsvrr7/etubxRXDATDjhhE23KTctGxycZ5llliimqOwHHnhg4+/giwntH1j8ETMKQWcTuAL+J554oplqqqmC7YdkaN1117VrNtZYY/X7JoVwJHFMO+20hgj32WabrRIzSVQh/08JmXz00UftGmPeOYJnH6I8SFOW8XAYYIo635ib5ADC+emnn8w222xjwaCkOB/ZUGghp59+uv2mCswcwpG2L+THuOaZZ55awUZrwZ/kCsKJQLZKOFIAcE6jUU066aSVY2IROIEhT1dy1OraCQ/jFfDLbbTRRubJJ5+0M8GsQn2vcrL/8MMPVgNyRLLEEktYjCeeeOJ+aKBhItOucGhBHBNMMEElapjyyD+HniuhyPgUwuF7aRpVyaTrT8oxY5HJzp2WSbkP0eaRebSbqvV55JFHrP/G97kOIJwqr3LV6tx6661W7ZtiiinszRWnAcQjSw7hSN9Pjnf/7bffNuutt5557bXX7BBwcjkvvxxTzrW4L7wAj+qNAKcUuUGqNMGU9gZTHbnWKYTD/NEsyfDHtMbckJqWPEAxq6+55ppkHxovGpD24k720JqlEo5cf7Qs5ElqTG5dZbsh1wB1Oy2T8pYNRzO+yzHGGKNSBDHDSIjGqe/KAMJB5cdZzEaioFXEVKdmBD6HcLhGxJ6GNMgwx9OfmlkuBbgdhCOxiZ2oMVykuZqqVjeD87D2zeeff27X9uGHH7ZDx6RCqNFmWwklkJsl1Xfi8JNrHlqzVMJh/XGK77333rb5uutt/CEc3M6XGiLhEjIpD+Sc/Ef2O2aXcyUEfTg+KA74VVZZxapQbDJs9ZQryJDQ5xBOzqZhMX/88UdrM2Jvoor6DsJ2EI5U+3FCIgSjjDJK8lClgzqkIic3NogqSrOcqaFBIncQEbFVOHlzyYfbVv8CA1MAoc8p7Ie99tqr8QkaEnFlMU2k6gGuFBJx7fqaS4ycOi2Tzfqe3BzkQRK8pUKbQI2EHEKFW6Kll17a4N0n0CemEnaCcFDTvvzyS/P++++bN99802o+zz//fL8AwFC/7SCcF154wQY1OfU6R2hjdZvZAO3otxvbYB0xWWJxVgTkEdeBk55bRD/0IjYfSRZVlwexNnAX+Gaz9L2kaji0L/0hMTNJai74/rA0IGG/dFomeSCPUBf8jRT2O5dEWD4pRX4fffEvJ2YB8sFBy2mE87TqFGpGw0F7wTGGU1peV6ZMmjrtIJzU2J3UMdWNK6edwVCXdcYBjDZRF9zJxkPuMDmqIoJlkGNdJHvKISllKYdwaN93BDMP5sxc/EI4BWEo7nCLXTB0WialTzf3+dQ//vjDmpAurKXyiVGuE88//3wbV1MnAIAFeKivLEjsijSXcFC16Z8bi5RgMGJzWLyZZprJRgC302nc6cUtRRrdHGkMBmitp556avLhgqmF33HfffcdoAF0I+HIW6UDDjjAmubDDz+8FQHp66mKTO60TLZKOMzHX4OkN40JkiOHitwTnLjybl1ulKprxxzCiQUb0R/qNQtBHAOxGtNMM40lOZfP1QmnsRx7ldZUijya6afbCcfNCfODID80AsyaukOPWDBylHxTqxsJB78IhyFjC5kp3377rQ2fuPvuu+3fq25nOy2TrRKO9AElEY4v1LAvyZLYjgSQEeATIiDUKFIcZIJaDuHIYCM0KGJpCE8nhqLKdOvEtThJmfgPnKYVCzRrhgRKfjOsEI6PCQGm+O7w80BA3GaFCAjNiA3qZKMdPpw6x3OuScW8ZEyOf3kg/1bld+q0TLbqw5HYZBOO3BgIAs7bE044waYPuBJzLqUSDloVYdQIjCtEkUJkVfkyrm4O86fG4eCoxmSEbCk4MPEpjTvuuCX5ouW+ujHSOHdSaL/4GdFoePjeFRknIx2+zTjpJWnJm8VmCEfG5DgtBtn2tZ+YU9nNt9MyKTUUbsuwdFJ/1YR5oq25qP8BhEN+FFmpnCSffvqpddSmNE66OgmWjnTQRmBmrjP9kko4UpXLzbAlkpRMX1fa4TQOBZHVPROQu5F6sT5CDXmg0WJCsYFZv5SbkM8++8wKNC8bUJBVrq0xsSmtxuHINW8lDkeurU9k7oAeccQR+8Uj1QVAlpBJeSDnkLbEfwDhyBMhJ/zeV9XbTTgwPddxKblHsCoT87PL20E40pmHAMVMxxBxuMhLkkOZByRKNHRKqsZgJyJ/88VubkIYSO1CEk6rkcYyobSVSGM5fhmTg+aEDxKznVIXGEidEjIp/aGkVnCZVPdWUGhsAwgnlJcB6dQl5kkNp1WTSmo4KeCzADFHMw5Fsl1DQXqpJhXtSyFJzSvhW5lbQjQtmfZTTjnlYOeT2vnJa+Btt93WmtN1sTZSwwkRQjtzqUIHcDMmFYDI7/bZZx+LE0mllFjsTR1xtVsmQykKKe4N+eoE4x5AOKHGWXwcwDHtInR1neo0JtsXm1X6ZUI+HMbBRLkGDRWu8bHp3YL5daqSUCXhcA1Psl/IKY36T+AXyaquMB76JPkw9IobTE9SIle3/quH0sFZuysHcQV5YDFV8nC46o6RDs578nSQCVdCmLYrWzyW4d8s4TBmPybHPZ9SF3sjxaCETJJeQaaBk19IDU7g1YSQzOPnRN79aP8g4fCP5DDBrn5l9wYNpg0JmhSEhIZ54Mp33GEqcHKH3g6Rt0e0Q/CW8xNxpe6eeZDeeuoSYcpEeMCK5DH3Dg5+J3I83M2FXLwqwsF34D/QBZiEruMH4KkD/tvPQEaA8Vdxe+EXgqIIw+d3txgbgsiTo/gUwMePI0rNWE7lmJz3cFLbLF0P/x74+bdPrDcpJKTUOBU+9s4QmfsxbTznPRyezpRvKrX6Hk4MS5ma4Orl+iw7LZMcmuxp/KK+HCPz7C3WCXPwgw8+sK6PWIBu9JYqlFqeIoB17+dIm1q26SeGVcXhVI2FiGfYl8fB3C1XlQ8otuiuj1B0KguMFueSXFOwcXUgWMZV9aZPTnvUHQyEExPqFCzq3s+hjZzoeb9PHvXi8mSuueYKDqUVDUfG5LgOcl5GcN90WibZjygX/rtOdWtDihQWkPOnVl6LE+zHkw6+9lLVASonKm7sISr3bRWZSecug+XU4g1e91h6bAxoYeR9kBEM2/qOyKrrvDpBj2XHpr7v6saL6XXwwQdbNbTON1G3kPLvg4FwmFPuW9op0e0+VkPjTeO6tZQZ1dRvJueL7zotk6wPxM3jWnVvneOTYj/yjje3jpTaOBwXZ0O+B0FGOE2dyuv/KgGea0yt1Cxywtd5foDrTN48dSVm+uAc5AYNdRd/iCMfrt05eUK/HCEdkZAnfgEXQu4LAkDi5OLZR95f9YMZ6yKKY78wQPtufCS68ssWdW+I1Aln7O+DhXDc/PxfC5G/zuF+WQGtFTOqLgg0hFnVrzYsuOCCNjEZcyFlvVrRcBibjMmpi71JkZFOyyTEBvHAC+wXt4eRd8aPPxPFg1wq/4H5WsJJmZzWUQQUAUUgF4G+IRzzWhQBRUARKICAEk4BkLULRUAR+B8CSjgqCYqAIlAMASWcYlBrR4qAIqCEozKgCCgCxRBQwikGtXakCCgCSjgqA4qAIlAMASWcYlBrR4qAIqCEozKgCCgCxRBQwikGtXakCCgCSjgqA4qAIlAMgb5iPWlHioAi0PMIKOH0vAgoAIpAOQSUcMphrT0pAj2PgBJOz4uAAqAIlENACacc1tqTItDzCCjh9LwIKACKQDkElHDKYa09KQI9j4ASTs+LgAKgCJRDQAmnHNbakyLQ8wgo4fS8CCgAikA5BJRwymGtPSkCPY+AEk7Pi4ACoAiUQ0AJpxzW2pMi0PMIKOH0vAgoAIpAOQSUcMphrT0pAj2PgBJOz4uAAqAIlENACacc1tqTItDzCCjh9LwIKACKQDkElHDKYa09KQI9j4ASTs+LgAKgCJRDQAmnHNbakyLQ8wgo4fS8CCgAikA5BP4DrNRqXAGZw00AAAAASUVORK5CYII="/></switch></g><rect x="230" y="0" width="20" height="20" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/><path d="M 240 20 L 240 320" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" stroke-dasharray="3 3" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 18px; height: 1px; padding-top: 10px; margin-left: 231px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Arial; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">B</div></div></div></foreignObject><image x="231" y="3.5" width="18" height="17" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEgAAABECAYAAAAiL3M8AAAAAXNSR0IArs4c6QAAAx5JREFUeF7tmkuoTlEUx38XKQNE5krJ4CoDSqGMSBlIKboXZe6RSCiEgUeZEJFHuGTCgJnHEKUQJlJSBjJiQPJIOKv2qe3U/b79+PbnLK0z/L619jn/3/mftfde5wxgR0cCA8anMwED1MUhBsgA5RURc5A5yByUR8AclMevdA0aBq4kXuIr4DXwCLgNPAN+JI6VnNZmQE1RAuwAcAP4nqw4MlEToFraWWAn8DFSa1K4RkAi9BSwA/iSpDoiqd+ApJZIXfrQ5RrHAROBGcByYAswtZGzFrgaoTUptK2AmmJmA+eA+d4f94D1wPsk5YFJWgCJnBXAiHNWLW8pcDdQa1KYJkDTHKBlntLdwKEk5YFJmgCNBw4DWz1tUqy3VbPat0C90WGaAIm4PW4tVAs944B9jVYemKAJ0FjgYLVI3OVp2+t+C5QbH6YJ0BTgPLDSkymF+1a87PAMTYBkxrruzWI2zXv3eS5wsrEOWucWir/D/RAf2VYHjQEmVwBmAkOAwPBX0v/tViP+Fv6d8Rk4Wj1mx4BiM5d/yn47KAfQG2A7cBP4lTNQTK4mQLWua8AR4AVQtP7ICTUCkuuWR022GaeBnzGOiI3tN6DQdofomABMAua4Fomsf6QFUh8CSbYdF0o6qc2AmrVygZvqBVh9vAVWAY9jnREarwVQrWcxcAmY7gk87rqLRfrU2gBJp3G/qz81oyfAGvcGJNQYwXHaAImwJcCdhsJF1e8PglVHBGoEtBC439BYrD9tgLq4SSMge8Q63FRpmu1zncU67DmwGpA3rz0/tDlonusJ+dP8RWBjqZeImgANAtKDliLtr6alFSIb2CJHmwHJtclWY9YoPSEBcrl6S7sJ+FSEjuLNqvCQz2I2VPXnZSk4Mm6/HdQrLbIo3Aw87dWAo42jDZDMVCcAKczFv+xou4OknSFflb0DHrqthDTJivZ/mk4q7aDST0Dx8Q3QP95qFL/DpU9gDjIH5XnMHGQOMgflETAH5fGzGmQOMgflETAH5fGzGmQOMgflETAH5fGzGmQOMgflETAH5fGzGmQOMgflEeiS/QcqjbNFDRAFnQAAAABJRU5ErkJggg=="/></switch></g><rect x="235" y="30" width="10" height="290" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/><path d="M 135 80.03 L 90.03 80.03 L 51.37 80.03" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 46.12 80.03 L 53.12 76.53 L 51.37 80.03 L 53.12 83.53 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 80px; margin-left: 90px;"><div data-drawio-colors="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 11px; font-family: Arial; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; background-color: rgb(255, 255, 255); white-space: nowrap;">update</div></div></div></foreignObject><image x="73" y="74" width="34" height="21.25" xlink:href="data:image/png;base64,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"/></switch></g><path d="M 45 240.03 L 130.03 240.03 L 228.63 240.03" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 233.88 240.03 L 226.88 243.53 L 228.63 240.03 L 226.88 236.53 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 240px; margin-left: 90px;"><div data-drawio-colors="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 11px; font-family: Arial; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; background-color: rgb(255, 255, 255); white-space: nowrap;">update</div></div></div></foreignObject><image x="73" y="232.625" width="34" height="21.25" xlink:href="data:image/png;base64,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"/></switch></g><path d="M 235 280.03 L 130.03 280.03 L 51.37 280.03" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 46.12 280.03 L 53.12 276.53 L 51.37 280.03 L 53.12 283.53 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 280px; margin-left: 190px;"><div data-drawio-colors="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 11px; font-family: Arial; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; background-color: rgb(255, 255, 255); white-space: nowrap;">main state?</div></div></div></foreignObject><image x="161.5" y="274" width="57" height="15.75" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAOQAAAA/CAYAAADwrmRhAAAAAXNSR0IArs4c6QAADspJREFUeF7tnXeMVUUUxmeVCAaUCCgREiUQQCkqKCUakF6sFBFFpdhogooBKdJ7EQEpIhpFQIqKgtKxF1AgKP6hYA8IAlG6CqGY3yTzcne4Ze7uu/h290xCRHbu3JlvznfmtLmbdebMmTNKmiAgCGQEAllCyIzYB5mEIKAREEKKIAgCGYSAEDKDNkOmIggIIUUGBIEMQkAImUGbIVMRBISQIgOCQAYhIITMoM2QqQgCBZqQf/75p7rvvvvUmjVrtCR07dpVPffcc+rCCy8UyRAEYiFw+PBhLUcrV65U33zzjdq6dat+/sorr1TXXnutatiwoWrevLmqXLmyOu+88wLHFkIKIQOFY//+/er1119XHTt2VJdcckksAU2q86+//qree+899dBDD2WE4vznn3/UCy+8oEaNGqX++uuvyGXfe++9avjw4apixYq+fYWQQsizBOP48ePqrbfeUiNGjFDlypVTCxYsUCVLlowUtiQ7HDt2TL344ota8Nu1a5cRlgwK66mnnlLz5s2LtXROzVmzZqkWLVqorKysbM8KIYWQ2QTi33//Vf3791dTp07V/46Z9X8T8sCBA6pLly5q2bJlGeNaoCD69eunZs6cmQ0/TsDOnTtrM7VQoUKKEx0z9uWXX1a//fZbqi+knDt3rrr55puFkLHUWQHrjAn25JNPqtmzZ2cMITPR10dJ3X///dkINnHiRNW2bVtfHxEyguvbb7+dega/ktO1bNmyqX8r0CdkAeOa03KFkNEw7dmzR/vV69evT3WGWAQIbRPUO9revXt14NCc9PxsypQpqnfv3qnnhJDR+BeoHkLI6O1et26datasWaojPi0WhUvg65NPPlH33HOPgtS0u+66S7300kuqePHi+v+FkNH4F6geQsjw7T516pQaPHiwGjt2bKrj/Pnz9eno0g4dOqQefvhh9eabb+ru+JqLFy/W6RAhpAuCBayPEDJ8w48cOaJ69uyZiqySvoBc11xzjZOk2IS+/PLL1bvvvquuv/767ITcvn27at++vU5q0j777DN100036b/v27dPvfPOO9oh/fzzzxWTIkpUp04dHf3COS1cuHC2CZ0+fVp9+eWXatGiRTphyvi0unXrqltvvVXb4FdccYXT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"/></switch></g><path d="M 45 300.03 L 130.03 300.03 L 228.63 300.03" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 233.88 300.03 L 226.88 303.53 L 228.63 300.03 L 226.88 296.53 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 300px; margin-left: 190px;"><div data-drawio-colors="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 11px; font-family: Arial; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; background-color: rgb(255, 255, 255); white-space: nowrap;">= solved</div></div></div></foreignObject><image x="169.5" y="294" width="41" height="18.5" xlink:href="data:image/png;base64,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"/></switch></g><path d="M 45 220.03 L 90.03 220.03 L 128.63 220.03" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 133.88 220.03 L 126.88 223.53 L 128.63 220.03 L 126.88 216.53 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 220px; margin-left: 90px;"><div data-drawio-colors="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 11px; font-family: Arial; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; background-color: rgb(255, 255, 255); white-space: nowrap;">update</div></div></div></foreignObject><image x="73" y="211.25" width="34" height="21.25" xlink:href="data:image/png;base64,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"/></switch></g><path d="M 45 120.03 L 90.03 120.03 L 128.63 120.03" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 133.88 120.03 L 126.88 123.53 L 128.63 120.03 L 126.88 116.53 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 120px; margin-left: 90px;"><div data-drawio-colors="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 11px; font-family: Arial; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; background-color: rgb(255, 255, 255); white-space: nowrap;">state?</div></div></div></foreignObject><image x="75" y="114" width="30" height="15.75" xlink:href="data:image/png;base64,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"/></switch></g><path d="M 135 140.03 L 90.03 140.03 L 51.37 140.03" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 46.12 140.03 L 53.12 136.53 L 51.37 140.03 L 53.12 143.53 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 140px; margin-left: 90px;"><div data-drawio-colors="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 11px; font-family: Arial; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; background-color: rgb(255, 255, 255); white-space: nowrap;">= solved</div></div></div></foreignObject><image x="69.5" y="132.625" width="41" height="18.5" xlink:href="data:image/png;base64,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"/></switch></g><path d="M 10 30 L 260 30" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" stroke-dasharray="3 3" pointer-events="stroke"/><path d="M 10 100 L 260 100" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" stroke-dasharray="3 3" pointer-events="stroke"/><path d="M 10 159.83 L 260 159.83" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" stroke-dasharray="3 3" pointer-events="stroke"/><path d="M 10 260 L 260 260" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" stroke-dasharray="3 3" pointer-events="stroke"/><rect x="0" y="30" width="20" height="70" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 18px; height: 1px; padding-top: 65px; margin-left: 1px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Arial; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">1</div></div></div></foreignObject><image x="1" y="58.5" width="18" height="17" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEgAAABECAYAAAAiL3M8AAAAAXNSR0IArs4c6QAAAZBJREFUeF7t2q9KBFEcR/GzYBOTyaTVYjP4BGbBogaTXbCIQQUNFv8ksdgUTCaL0Scw+wQGbXZ1LnuFcdCZxV8ZuWfLwrIT9jNnvrMLO8BHq8BAn3YBgToKEUig2IhYkAVZUEzAgmJ+fd2gOeAGmAV2gYPYx/z70X0EGgdOgY38sQSqnd8xYAs4qr0mUMZINa8AF8CEQN9nIeEsASfAdGMxii8oXVbreXfq5Xw5FQ2UQHaA7Zb7TJFA6ZJaAM6A+QbOMzBV8gbN5O82y40xfgMOgVfgslSgSeAaWGxU8wRsVlXdA6vAlUBDgVTNeVXSMfCSUdYEGhZ0B+wBj9XzR62Y4oH2gVvgodqi9x/uXkUDjfKrUaAOJYEEGuVC+v09FmRBFhQTsKCYnxtkQRYUE7CgmJ8bZEEWFBOwoJifG2RBFhQTsKCYnxtkQRYUE/hPR/fxL3i98hOo43QIJFDsirUgC7KgmIAFxfzcIAuyoJiABcX83CALsqCYgAXF/NwgC7KgmIAFxfzcIAuyoJhAx9GfTnpYRWslJ4kAAAAASUVORK5CYII="/></switch></g><rect x="0" y="100" width="20" height="60" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 18px; height: 1px; padding-top: 130px; margin-left: 1px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Arial; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">2</div></div></div></foreignObject><image x="1" y="123.5" width="18" height="17" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEgAAABECAYAAAAiL3M8AAAAAXNSR0IArs4c6QAAA55JREFUeF7tmlvITUEUx3+f5JI8eJAkPEleSJHiQa4vHiSEhJQk11ASKXelXEOE5FaKKOWBUIoHSS4lyZMnSZRElNv+15yadt85Z+8z+8w+37Gmzss5a2bW/PZ/1qy95nRgrSaBDuNTm4ABqqMQA2SAwoKIKcgUZAoKI2AKCuNXZgzS3AOAGcBUYDgw2i3nM/ACeATcBJ4Bv8KW2ljvsgANBnYAc4C+GVx/AmwB7gN/MtgXZhIbkOabCJx0ism7kL2APt/ydmzUPjYgwTkPDE05rC11D3gO/AaGAFOqQNycqO5ArC0XE9Ag4CIwyYMjMFvd92lVdAMmO8WM9fp8BZYDVxpVRZ5+sQBpnrXAYc+5d8CSBNiDOg4L7PEkUM/07O4Ci4H3eRbbiG0sQAOBC+60qvgpFZwB/mZwfKRTzAjPdjZwPUPfIJNYgKYBdwIU0BPY71RYGWZfEq+2uZgVBKFW51iA1gMHPUcaWdxC4JI3htS3DvjeNDpJLhIDUC936qz0FqLYoy2Xp01ItuhDr8NtQNA+5Rkkr20MQD0AxQtlyaOSgNvfAbuc09l5qZPrGrAM+JJznFzmMQDlcqiKsfxUOrDL+/0EsBH4UcQE1cboKoA6OwVXAKeaCUdjdxVA6QD9GpibfF4ZIFDucw4Y58E4mpxem4Cf/zugPi7/8U9AqWc+8LLZcFp9iwmOShz6+C1PBh7MsFVjkDLnDe5F1V+kTi5trbYtd2R5or0dhO0p46tJUrgG+JBlkKJsWk1Bqi7ucSD8NZYCp9ViUCXDXpR6+qohKSH8WJQq8ozTKgoaBhwDpqecP51kyqogqrBWSisbkOYf7wpiek/zW/T6c2dPoExAmnuWK4P4NWqVVHcDR2IkgvVkWRag7q7ceih17aOtpJNK9eao1zvVQJUBSHBUQFM10L8TewPoBVQ16ixl2HoPv5DfYwMSHEFQfPHhPE5OqVXA00JWVeAgMQFprgXu0tCHo1r16qQ6+LbAdRU2VExAYwBVAf2AfMspR1dALdliAerniluq4VSattVSQG/nLdtiAUoXvKLejobQjwFI6jnrcp4QX9N92+ZWQ39CuJHxby55ALYNoPSlYR4ItWzbBpASwp1FUfHGaRtATWATb8gYQTreapowkwGqA9UAGaCwfWcKMgWZgsIImILC+FkMMgWZgsIImILC+FkMMgWZgsIImILC+FkMMgWZgsIImILC+FkMMgWZgsII1On9Dzk6hkVR/fC3AAAAAElFTkSuQmCC"/></switch></g><rect x="0" y="160" width="20" height="100" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 18px; height: 1px; padding-top: 210px; margin-left: 1px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Arial; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">3</div></div></div></foreignObject><image x="1" y="203.5" width="18" height="17" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEgAAABECAYAAAAiL3M8AAAAAXNSR0IArs4c6QAABE1JREFUeF7tml2oVUUUx3+mFCIFBUUgKglRPWRGhfjx0icEmmQSZaJkoGIK+qKWFmhaEUUaZIYWkaLlR1IQYWBZZBARWT1UCKU+GBTkQ4gUpc4fZsuwOZ49e889c/aNNXAe7r1r9p31O/9ZM2utPQQbXQkMMT7dCRigCoUYIAOUFkRMQaYgU1AaAVNQGr9+xiD97zHAg8AdwG3AFcBfwGHgC/e7D4GvgH/T3Gw+u1+ARgHrgDkRS/8aeBL4BDgTYT+gJv0ANBF4DbippifPAvqcqjkvyTw3oHHA2x3g/AwcAI47CBcDk4DJwKUl7zYBy3NCygnoSuB14P7A6WMuvqwGdgN/l2CMBlYB84PfKz7p53eSZFFjck5AjwFbS3DmAp91We8I4AVgUWCzD9CzTtbws7FpLkCXA2+U1LPUnVqvAGcrVn8NsBOY4O2konuBQ429rjExFyDFk4+CmKKj+2Hg14i1KiY9DywLbBf67RoxPc0kF6AFwOZgqS8DK93x/U/k8p8C1ga2TwPPRM5NMssFaKw/uW4BbvVBWVsuZgz1MJ4IjHUvei5mcqpNLkAp6+wUv6YDH6Q8NHZu2wFpfY8A2wKHFJxnA0djnUyxazOgS4BZwIs+Ryv81D1I14Wq0y+Fy/m5bQM0zAXzq93d6HZgiU9gQ0c3+stjtnSjLYDudunFx12+8j99cquT8PSASCPyIW0BpDiz/QJr/sVBWeGDcuy1INL9arO2ACrfczqt/Ad/tL/XIW+r9rShRRsA6aa8xmX5uit9B/wHKFG906UY13XwK2scagOgC323CtgK1us7BGvdwl/KUWlsM6AC3EjgVUCXw2L8BjzkSrWfN9w50dMGAyA5c4PP6MMqZN18LhpKaDhYAGmdyua1rYpx0N+yTzTyPHLSYAEkd8olkyPATOD7SF8bmQ0mQDrR3i3Vs6f0unBmgCp0lQOQOhMzgGuB8cBlvvD+U03NXw/sAm7083SSTXOfb2o+p5Z5DkDqZuxwndK7gpU9AOhGXGfcB7wfTPjSZ/vqjPRs5ADUqab8FrC4Rn9rOKBjXaXbYqiFpJOtp8lrDkBySFtsb+CcOhM6gbpl8IW51qgCvzL5sJHYRIW1lZYL0FXAFkDbpBjqbDwK/Nhl1Vqf0o03/YsOhakajVJTz3tjuQDJsXuAPSUVKDlVK1kvJpTf4FAwV4NQnVe99VEMAVWa0dP7Tyjf2rJrOEHJp2KGShvlnnvYm1cXQ6edsvkQjP6tAvI84NP/a8lVkNT001saZUhV3KW2x50SdXplqUdrQTm3WKjam30NaGoVFUDlVgXoDQ7QHxH2A2rSD0CFAxf5gpgue+EbZvr7t754tt/Hp98H1OsaD+snoBrL7J+pAapgb4AMUNr2NAWZgkxBaQRMQWn8LAaZgkxBaQRMQWn8LAaZgkxBaQRMQWn8LAaZgkxBaQRMQWn8LAaZgkxBaQRMQWn8zgGa25lFhoaPdwAAAABJRU5ErkJggg=="/></switch></g><rect x="0" y="260" width="20" height="60" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 18px; height: 1px; padding-top: 290px; margin-left: 1px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Arial; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">4</div></div></div></foreignObject><image x="1" y="283.5" width="18" height="17" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEgAAABECAYAAAAiL3M8AAAAAXNSR0IArs4c6QAAAkFJREFUeF7tmTFLHFEURo9EkBAiWBlIYRWClY1gIURs0likUSQYooUgiIUoSFLYKEIQtIiNiiAhCRYJhPyEFOkEsbQRLMVCf4AheuEODJPNzu5edll433SLM+qcOd9337ztQEdVAh3iU52AAJUYIkACFCsRGSSDZFCMgAyK8WvnDuoHjoABv8U3wNfY7dZ/dbsC6gZ2gLe5WxIgh2EPbRbYLzxvAXIgg8B3oE+A/q2EHmAPmKjQFskb9ABYAjb/U6XJAxr2KVWMVsYraUC9Hq1XTuMncA3MaIpBJ7AMfHAYF8A08AJYEyAYAT7lptY7YAt4L0DwBDgAxnLRmgMugdXUAVm0zJb1QrR++efkAb30BeFjB5JF61aA4CnwGRitEK2sl5M1qAvY8MllMGxqTQG/CwvEZAHZWsfsyaK1Amzfl/IfAYJnDmfIYfwAbGpdVXi9SM6gh/6etZCbWpWilWQH2R7Pa2C3hmglCci2Tw+BWqKVHKBHHq35XLTGgeOSHeIkOsiiZT1jUys7FoGPwF8BguI3E998atlWRtmRhEFmz5cyEg3+/BSYvC//swavr+myZn/tI0Alj0GASgDZa0U2vWpSOneS7U0/z30+Kay4b3xT7bzeX1zP+c2OWD3/S/HcJEpagCIEtA6K0VPEZJAMihGQQTF+6qAYv9Zc3c4LxdYQKPkrAiRAMRFlkAySQTECMijGTx0kg2RQjIAMivFTB8kgGRQjIINi/NRBMkgGxQjIoBg/dZAMkkExAjIoxu8OBIZ5RfCPsJQAAAAASUVORK5CYII="/></switch></g></g></svg>
\ No newline at end of file diff --git a/docs/img/sequence-puzzle-module-init.svg b/docs/img/sequence-puzzle-module-init.svg new file mode 100644 index 0000000..2e8db4f --- /dev/null +++ b/docs/img/sequence-puzzle-module-init.svg @@ -0,0 +1,3 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="217px" height="151px" viewBox="-0.5 -0.5 217 151"><defs/><g><rect x="20" y="0" width="40" height="20" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/><path d="M 40 20 L 40 150" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" stroke-dasharray="3 3" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 38px; height: 1px; padding-top: 10px; margin-left: 21px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Arial; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">Main</div></div></div></foreignObject><image x="21" y="3.5" width="38" height="17" xlink:href="data:image/png;base64,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"/></switch></g><rect x="35" y="50" width="10" height="100" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/><path d="M 139.5 70 L 120 70 L 51.37 70" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 46.12 70 L 53.12 66.5 L 51.37 70 L 53.12 73.5 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 70px; margin-left: 92px;"><div data-drawio-colors="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 11px; font-family: Arial; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; background-color: rgb(255, 255, 255); white-space: nowrap;">update</div></div></div></foreignObject><image x="75" y="64" width="34" height="18.5" xlink:href="data:image/png;base64,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"/></switch></g><rect x="130" y="0" width="20" height="20" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/><path d="M 140 20 L 140 150" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" stroke-dasharray="3 3" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 18px; height: 1px; padding-top: 10px; margin-left: 131px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Arial; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">A</div></div></div></foreignObject><image x="131" y="3.5" width="18" height="17" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEgAAABECAYAAAAiL3M8AAAAAXNSR0IArs4c6QAAA35JREFUeF7tmk3ITUEYx39vQpJENmxkYSHFjmKjUDa+SSgpiiKSUpQk5atQsqAo+Vz4tlGirBQlWUhWsmFhIcnCQsxT59U0Pfeec8+cmXkXz6l3896ZufP8zn/+859z7hB29SUwZHz6EzBANQoxQAYozkRMQaYgU1AcAVNQHL+R4EFTgWvAEq+UD8B69/c+rrz43iMB0BrgnlLKfuAc8De+zPYjlAY0FjgN7FFKeAZsAb62Ly++Z2lAs4E7wKyqFIEhS274Wgvcjy+z/QilAe0ALnpwjgOHPEhXgd3Ar/YlxvUsCWgScAVYXZXwAtgLnAKWVf8rbtYlAc0DHnpquQSIMe8Djnn3vahZlwI0yu1OR4DDHoidDpZAWgg8ASZUnxU161KApgE3gUWe/ywH3gBTgOveMpMmxcy6FKAw+9wFtrvl9QOQOckyO+Opq5hZlwA0rgqAsoMNX6HPhP4k2/+wwuK2pQF7lwCkZZ+w+InAZWBdabMuAUiWz1mvcPGbXW4H+xncXD8jyUdFzDo3oDD7SOHiPZKHwitUWhGzzg0o3MLfARuAjwqg8W5HuwBsLWnWOQFp2ec8cAD43cM7NwM3vM/ErFcBrwf02tbNcwKaDtwCFnizrcs3M4DbLjjOL2XWOQGF2eclsAn43Of2jgFOVrlouFlWs84FSPOTE9VR40+N/pc61T0N2tQpr/WSCjvmAhTuSLKlyyn+eYNKtEey2ZJ1LkBh9hlkmWjmns2scwDSsk8D4dQ2kUciR90yrVuitQP1a5AD0GLggff4ImrCXudBVNj6O1MD0pZH68kqHZObdWpAWo55685e31pQGu2UOBeYnDNZpwYUZp8Yc9VeEcWM1+gepQSkZZ9eJ/dGkwVWAI+CxknNOiWgOYA8KZzpFdTr5N4UkJaJ5G2InNm+NB1kkHapAGmPTfud3JvOWRtX+iYz61SAtOxTd3JvCklTZrJknQqQln1WAo+bUujTTvO2ZGadApBkHzHOgwlDnfaLkCRmnQKQln26nnz4Xk3uxSv3ZHIj8KkDlf4fIgWgHE8BeyX0zs26a0CaP8g5bJv7YcL3Lu8sEL47k+E7N+uuAXXMoPxwBqjmHhggAxS3TE1BpiBTUBwBU1AcP/MgU5ApKI6AKSiOn3mQKcgUFEfAFBTHzzzIFGQKiiNgCorjZx5kCjIFxREwBcXx+wf5lq5FzOjpHAAAAABJRU5ErkJggg=="/></switch></g><rect x="135" y="130" width="10" height="20" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/><path d="M 140.02 110 L 170 110 L 170 130 L 151.37 130" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 146.12 130 L 153.12 126.5 L 151.37 130 L 153.12 133.5 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 1px; height: 1px; padding-top: 120px; margin-left: 152px;"><div data-drawio-colors="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); " style="box-sizing: border-box; font-size: 0px; text-align: left;"><div style="display: inline-block; font-size: 11px; font-family: Arial; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; background-color: rgb(255, 255, 255); white-space: nowrap;">state := reset</div></div></div></foreignObject><image x="152" y="114" width="64" height="15.75" xlink:href="data:image/png;base64,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"/></switch></g><path d="M 45 90 L 90 90 L 133.13 90" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 138.38 90 L 131.38 93.5 L 133.13 90 L 131.38 86.5 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 90px; margin-left: 92px;"><div data-drawio-colors="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 11px; font-family: Arial; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; background-color: rgb(255, 255, 255); white-space: nowrap;">state := reset</div></div></div></foreignObject><image x="60" y="84" width="64" height="15.75" xlink:href="data:image/png;base64,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"/></switch></g><path d="M 0 50 L 200 50" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" stroke-dasharray="3 3" pointer-events="stroke"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-end; justify-content: unsafe flex-end; width: 1px; height: 1px; padding-top: 47px; margin-left: 198px;"><div data-drawio-colors="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); " style="box-sizing: border-box; font-size: 0px; text-align: right;"><div style="display: inline-block; font-size: 11px; font-family: Arial; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; background-color: rgb(255, 255, 255); white-space: nowrap;">power on</div></div></div></foreignObject><image x="153" y="34.5" width="45" height="15.75" xlink:href="data:image/png;base64,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"/></switch></g><path d="M 135 140 L 120 140 L 51.37 140" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 46.12 140 L 53.12 136.5 L 51.37 140 L 53.12 143.5 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 140px; margin-left: 90px;"><div data-drawio-colors="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 11px; font-family: Arial; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; background-color: rgb(255, 255, 255); white-space: nowrap;">update</div></div></div></foreignObject><image x="73" y="132.625" width="34" height="18.5" xlink:href="data:image/png;base64,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"/></switch></g></g></svg>
\ No newline at end of file diff --git a/docs/img/software-cable-sketch.png b/docs/img/software-cable-sketch.png Binary files differnew file mode 100644 index 0000000..36efbda --- /dev/null +++ b/docs/img/software-cable-sketch.png diff --git a/docs/img/software-codes-sketch.png b/docs/img/software-codes-sketch.png Binary files differnew file mode 100644 index 0000000..3d6f946 --- /dev/null +++ b/docs/img/software-codes-sketch.png diff --git a/docs/img/software-codes.png b/docs/img/software-codes.png Binary files differnew file mode 100644 index 0000000..af1c972 --- /dev/null +++ b/docs/img/software-codes.png diff --git a/docs/img/software-example-sketch.png b/docs/img/software-example-sketch.png Binary files differnew file mode 100644 index 0000000..7e4e6a9 --- /dev/null +++ b/docs/img/software-example-sketch.png diff --git a/docs/img/software-example.png b/docs/img/software-example.png Binary files differnew file mode 100644 index 0000000..025e6fe --- /dev/null +++ b/docs/img/software-example.png diff --git a/docs/img/software-io.png b/docs/img/software-io.png Binary files differnew file mode 100644 index 0000000..4915315 --- /dev/null +++ b/docs/img/software-io.png diff --git a/docs/img/software-pcb.jpg b/docs/img/software-pcb.jpg Binary files differnew file mode 100644 index 0000000..70e9aa1 --- /dev/null +++ b/docs/img/software-pcb.jpg diff --git a/docs/img/software-side.jpg b/docs/img/software-side.jpg Binary files differnew file mode 100644 index 0000000..c62da4e --- /dev/null +++ b/docs/img/software-side.jpg diff --git a/docs/img/system-bus.svg b/docs/img/system-bus.svg new file mode 100644 index 0000000..440227a --- /dev/null +++ b/docs/img/system-bus.svg @@ -0,0 +1,3 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="400px" height="241px" viewBox="-0.5 -0.5 400 241" style="background-color: rgb(255, 255, 255);"><defs/><rect fill="#ffffff" width="100%" height="100%" x="0" y="0"/><g><path d="M 78 120 L 398 120" fill="none" stroke="rgb(0, 0, 0)" stroke-width="4" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-end; width: 1px; height: 1px; padding-top: 120px; margin-left: 70px;"><div data-drawio-colors="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); " style="box-sizing: border-box; font-size: 0px; text-align: right;"><div style="display: inline-block; font-size: 12px; font-family: Arial; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; background-color: rgb(255, 255, 255); white-space: nowrap;">Puzzle bus<br />(I²C + power)</div></div></div></foreignObject><image x="0" y="106" width="70" height="32" xlink:href="data:image/png;base64,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+edPfV2jHkS22WabNZFMDMTCjesDikAfQADrY9NNN7X3b1PQ/nFp+NZBlGC4XBwVCG1g8sknN7feeqvdMs4rVRLMm2++abbeemvz3HPP2dfS+RNOOKGHJiLJkLqQEVrRIossktfl4O+SoV2lEIilXlDgoSOPPNIceuihjSeefPJJs9hiixVoQasqAtUjwBzB94LrgIJMDh8+3Ew33XSNlwUJRk7YzTff3PphUmJDqiAYOk48zE477WSdyxS0kUsvvTTorb755putGeUX1DX266WvpQjMxM7gt7n99tsbjy233HLmiiuusKTbrqIE0y6k9T1FEXjrrbes+4HNoJAWEySYhx56yKy99toNX0bMARvqTKsE8/vvv5urr77a7L333o1dILaLcSKFfC9yN4o+0Xe0l1AgYFEAaQctyhV8MTiBl1122aJNla7f2wRDICRkTcwSxQ9VYDF455137JihKuNbozBmaI/sQOJgH2OMMUp/P857dvkgekxX/HLOz0ZYw3zzzWd9Y6ygWYvg33//bU39Y489ttGXU045xcY85ZUffvjBygG7qK7gMuBf3iImn2Vr97rrrrMYZRVCNZ544gn7ThZat9OJX5E2MNnXWmst67vM64N7D66ExRdfvPFaNA7GlnlHSMe5555rmP/Egi266KJ2I4Z3TDLJJMGusjkCfvhTKXIB7kEwvIidI7ahKGgOOE+nn376vDGwv7dCMGwXH3744eacc85pvAuhoS8IUajI3SjqEPzDJKiifPjhh4Ygv7nnnttG+eLPAfzUAa2iD51KMEx8dtfOPPPMJse6/GYmEhORlW6UUUZJhsQJ/fHHH293+PIKE41wAhyPMaKBpHxHPW4A/HR5AZx+7IfrBxsgODrHHXfczK69/vrrdrPkvffes/XyYslYNFlQ2Zxw0eZZL8APQnyYb5rE6ocIhqBZzBy0/lDJ+045532FpAfBSCDzwJAdKkswL7/8svWxAIArDD4+l8kmmyyKL8zJzpErM800k2V8CKGvlE4kGASaf6x4qYVASf6lmNpMLLQNf7FJfQ8aLL6B0K6klO9UbUISE31JfVbOiawFEG0QkmQHt0jhW9HG+PasxU8SDOP3xhtvZOIMiW611VbR7khMfZdKD4KRJkFRbaAowaBi33vvvWaHHXZo7NiwmqBFwapZqvVvv/1m6/hCuOqqq1omrsI8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"/></switch></g><path d="M 118 86.37 L 118 100 L 118 111.63" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 118 81.12 L 121.5 88.12 L 118 86.37 L 114.5 88.12 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><path d="M 118 116.88 L 114.5 109.88 L 118 111.63 L 121.5 109.88 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><rect x="78" y="0" width="80" height="80" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 78px; height: 1px; padding-top: 40px; margin-left: 79px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Arial; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">Main controller</div></div></div></foreignObject><image x="79" y="26" width="78" height="32" xlink:href="data:image/png;base64,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"/></switch></g><path d="M 238 153.63 L 238 140 L 238 127.37" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 238 158.88 L 234.5 151.88 L 238 153.63 L 241.5 151.88 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><path d="M 238 122.12 L 241.5 129.12 L 238 127.37 L 234.5 129.12 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><rect x="198" y="160" width="80" height="80" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 78px; height: 1px; padding-top: 200px; margin-left: 199px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Arial; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">Puzzle module 3<br />(neotrellis)</div></div></div></foreignObject><image x="199" y="179" width="78" height="46" xlink:href="data:image/png;base64,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"/></switch></g><path d="M 358 153.63 L 358 150 L 358 127.37" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 358 158.88 L 354.5 151.88 L 358 153.63 L 361.5 151.88 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><path d="M 358 122.12 L 361.5 129.12 L 358 127.37 L 354.5 129.12 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><rect x="318" y="160" width="80" height="80" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 78px; height: 1px; padding-top: 200px; margin-left: 319px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Arial; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">Puzzle module 4<br style="border-color: var(--border-color);" />(safe)</div></div></div></foreignObject><image x="319" y="179" width="78" height="46" xlink:href="data:image/png;base64,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"/></switch></g><path d="M 238 86.37 L 238 100 L 238 111.63" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 238 81.12 L 241.5 88.12 L 238 86.37 L 234.5 88.12 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><path d="M 238 116.88 L 234.5 109.88 L 238 111.63 L 241.5 109.88 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><rect x="198" y="0" width="80" height="80" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 78px; height: 1px; padding-top: 40px; margin-left: 199px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Arial; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">Puzzle module 1<br />(software)</div></div></div></foreignObject><image x="199" y="19" width="78" height="46" xlink:href="data:image/png;base64,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"/></switch></g><path d="M 358 86.37 L 358 100 L 358 111.63" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 358 81.12 L 361.5 88.12 L 358 86.37 L 354.5 88.12 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><path d="M 358 116.88 L 354.5 109.88 L 358 111.63 L 361.5 109.88 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><rect x="318" y="0" width="80" height="80" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 78px; height: 1px; padding-top: 40px; margin-left: 319px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Arial; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">Puzzle module 2<br style="border-color: var(--border-color);" />(hardware)</div></div></div></foreignObject><image x="319" y="19" width="78" height="46" xlink:href="data:image/png;base64,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"/></switch></g><path d="M 118 160 L 118 127.37" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 118 122.12 L 121.5 129.12 L 118 127.37 L 114.5 129.12 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><rect x="78" y="160" width="80" height="80" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 78px; height: 1px; padding-top: 200px; margin-left: 79px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Arial; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">Power supply<br />(battery pack)</div></div></div></foreignObject><image x="79" y="186" width="78" height="32" xlink:href="data:image/png;base64,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"/></switch></g></g></svg>
\ No newline at end of file diff --git a/docs/img/system-top.svg b/docs/img/system-top.svg new file mode 100644 index 0000000..0a9e8c0 --- /dev/null +++ b/docs/img/system-top.svg @@ -0,0 +1,3 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="390px" height="231px" viewBox="-0.5 -0.5 390 231" style="background-color: rgb(255, 255, 255);"><defs/><rect fill="#ffffff" width="100%" height="100%" x="0" y="0"/><g><path d="M 188 110 L 228 110 L 228 30 L 169.37 30" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 164.12 30 L 171.12 26.5 L 169.37 30 L 171.12 33.5 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 1px; height: 1px; padding-top: 130px; margin-left: 214px;"><div data-drawio-colors="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); " style="box-sizing: border-box; font-size: 0px; text-align: left;"><div style="display: inline-block; font-size: 11px; font-family: Arial; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; background-color: rgb(255, 255, 255); white-space: nowrap;">Puzzle outputs</div></div></div></foreignObject><image x="214" y="124" width="72" height="15.75" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAASAAAAA/CAYAAABAdBV6AAAAAXNSR0IArs4c6QAAEOdJREFUeF7tnQesFUUXxwc1KEGxBbEQNCaCvWDDgmIlgg2ViILYe9eoYMHeQRDQ2EVQUbFRFCuCgmJXiBEhVgKCRozYCcqX33yZm3njltk7u2/ve/dM8hJ4b2d25j8z/znnzDlnW6xYsWKFkiIICAKCQAkItBACKgF1eaUgIAhoBISAZCEIAoJAaQgIAZUGvbxYEBAEhIBkDQgCgkBpCAgBlQa9vFgQEASEgGQNCAKCQGkICAGVBr28WBAQBBoQ0PXXX68GDRpUFSpdunRR6667rtp1111V9+7d1fbbb69atmxZVVv1XGnGjBlqzz33rEDw6KOPqr59+9YzJDL2ZoxAbgTkYtSpUydNZkceeaRaddVVmzGE+Q5NCChfPENa++abb9SkSZPUySefrFq1ahXSVJOp++OPP6rHH39c9e/fX6299tqF97swAjI9P//889WNN96oWrduXfhgmsMLhIDKn8Xff/9d3XfffeqGG25QvXv3VkOHDm32BPT333+rZ555Rl133XVqk002UY899pjWaIouiQTUr18/tfXWW3v14bvvvlMfffSRmjlz5n+ev+WWW9TFF1+sVlllFa+26vkhIaByZ//nn39WJ554oho/frzuyOmnn97sCeivv/5SAwYMUHfeeaceMyaUmiCgrPYHwso+/vhjNXDgQPXKK69UVtIGG2ygnnjiCbXXXnuVu7qawNuFgMqdpJ9++knb3F5++eW6IaA///xTXXjhheree+9t2gRkls6iRYvUKaecol544YXKajrvvPPUbbfdJvaglP0lBCQE1NgINDsCAsBnn31WG6BN2X333bVxa+ONN25sfJvU+4SAyp0ukYCasApmL52FCxdqUXbq1KmVX0+fPl3tscce5a6wGn+7EFC5EyQE1EwI6I8//lDcgD3wwAOVFYVh79BDDy13hdX424WAyp0gIaBmQkCuXsmywhB99NFHV1ZYiO75xRdf6LY+/fRT3R7Xh1dddVWD1Ysln5u80LLddtupJ598UuHbRCmqXdquloC4APj222/V888/r9544w2NC/+n4CTauXNnddhhh6muXbs22pXy8uXL1bvvvqttgUi/n3zyifr111/VGmusoR1V9957b30g7bDDDl43pNVi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"/></switch></g><path d="M 188 150 L 218 150 L 301.63 150" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 306.88 150 L 299.88 153.5 L 301.63 150 L 299.88 146.5 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><rect x="108" y="90" width="80" height="80" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 78px; height: 1px; padding-top: 130px; margin-left: 109px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Arial; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">Puzzle box</div></div></div></foreignObject><image x="109" y="123.5" width="78" height="17" xlink:href="data:image/png;base64,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"/></switch></g><path d="M 133 30 L 68 30 L 68 110 L 101.63 110" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 106.88 110 L 99.88 113.5 L 101.63 110 L 99.88 106.5 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-end; width: 1px; height: 1px; padding-top: 110px; margin-left: 64px;"><div data-drawio-colors="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); " style="box-sizing: border-box; font-size: 0px; text-align: right;"><div style="display: inline-block; font-size: 11px; font-family: Arial; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; background-color: rgb(255, 255, 255); white-space: nowrap;">Puzzle inputs</div></div></div></foreignObject><image x="-1" y="104" width="65" height="15.75" xlink:href="data:image/png;base64,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"/></switch></g><ellipse cx="148" cy="7.5" rx="7.5" ry="7.5" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/><path d="M 148 15 L 148 40 M 148 20 L 133 20 M 148 20 L 163 20 M 148 40 L 133 60 M 148 40 L 163 60" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 67px; margin-left: 148px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Arial; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: nowrap;">Player(s)</div></div></div></foreignObject><image x="124" y="67.5" width="48" height="17" xlink:href="data:image/png;base64,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"/></switch></g><path d="M 68 150 L 88 150 L 101.63 150" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" stroke-dasharray="3 3" pointer-events="stroke"/><path d="M 106.88 150 L 99.88 153.5 L 101.63 150 L 99.88 146.5 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe flex-end; width: 1px; height: 1px; padding-top: 150px; margin-left: 60px;"><div data-drawio-colors="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); " style="box-sizing: border-box; font-size: 0px; text-align: right;"><div style="display: inline-block; font-size: 11px; font-family: Arial; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; background-color: rgb(255, 255, 255); white-space: nowrap;">Charger</div></div></div></foreignObject><image x="20" y="144" width="40" height="15.75" xlink:href="data:image/png;base64,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"/></switch></g><path d="M 150 170 L 150 190 L 150 210 M 146 210 L 146 190 L 146 170 M 146 210" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="1.42" stroke-dasharray="3 3" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 217px; margin-left: 148px;"><div data-drawio-colors="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 11px; font-family: Arial; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; background-color: rgb(255, 255, 255); white-space: nowrap;">Wi-Fi</div></div></div></foreignObject><image x="135" y="217.5" width="26" height="15.75" xlink:href="data:image/png;base64,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"/></switch></g><rect x="308" y="90" width="80" height="80" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" stroke-dasharray="3 3" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 78px; height: 1px; padding-top: 130px; margin-left: 309px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Arial; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">Bomb</div></div></div></foreignObject><image x="309" y="123.5" width="78" height="17" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAATgAAABECAYAAAAV6ClkAAAAAXNSR0IArs4c6QAACsRJREFUeF7tnXWoNkUUxh8DAwsVGywUFdFPEQMVA7u7A1s/O8BERcUEFTsRExNbwcTuRvkQBfUfRUUFA1EU3UdmYRhnd2ffjfO+e5+B+8+9uztnnpn93XMmzs4EFSkgBaTAQBWYaaDtUrOkgBSQAhDgNAikgBQYrAIC3GC7Vg2TAlJAgNMYkAJSYLAKCHCD7Vo1TApIAQFOY0AKSIHBKiDADbZr1TApIAUEOI0BKSAFBquAAGfftSsAuBfAtBFM+RHAhwBmAHgSwGsAfhrhOboFmBPA5QAO98RYH8CrEmdyFRDg7PuuCeBC638BcC2ASwF8b9+0ibJAgJuo7kozVoBL06nLq9oEXG7nmxngjgLwbpeGD+zZAtzAOpTNEeDsO7ULwLFVhNyBLny1b+X4WyDAjX8f1bZQgKstWes3xACXMvfDvpsXwAIANnAe25qBdTcAOAHA761bPbwHCnDD61N5cGPQp6MCLjR9HgAXA5ju/YFzcjsBeG4M2jnuJghw495DI9gnD24E0Vq+pS3A0aylAdwJYD3PxgsBnJn9/N2y3UN7nAA3tB7VHNxY9GibgOM/rDMAnOe17AkA+2n7SGVfC3CVEk3eBfLg7PusTcCxNdsDeMRrFldS9wTwuX1Tx9oCAW6su2c04wS40XRr8662Acfw9BXPQG4E3gPApzWMnjWD5OoOlhsCWC3bW8c5PpY3st+/5yDKTbC/JT43BMhTAPYB8IO7f0EAu2RbW7YDsK5bPOFGZm5efiyz4WEA30Xq4hheCsDu2bWbZxue13K2sr3vA7gdwAsJCy1VgFsMwN7Z6vRWQR2vu03WbM/PiVrosp4UEOB6ErqkmrYBt1kGiKe9+kKQlLV4dgDbZjA4BUC4Ihu77ysAVwC4MQF0RYD7FcAhAM51UCuyj7A7EcBdAP5yFxG6p2aQPMYDcOx+gvhYB+ai5xcB7p1E+6gFT0JQC61a279X/1kgwNl3RJuAY39yWwhPMuSFLx0h8GdFU7ndhHN3R44gyUOuXr7kqQAheA9z0DousU6uCh8B4O7sxMbCAK4CsFvivfTo6DEWbX6OAW5L57Gl2kdT7gBwkk6SJPZKx5cJcB0LnPD4NgG3hHvBNnb1pm4TWQQA98ztELGXYd6zLpSkx8Q9egxbw0Iv6eCSUDgEyMsuhKRnlRdC6FFXF0PWTV2o7NfFkJv1HBTAmFthXnQgXxnANhGP8FYARxd4mzHAMTxmuJwXepFctPkEwGxOh00iWvC43MkJXm3C8NAlTRQQ4Jqo1869bQGOHthFAA71zLrJeVZl82R8sS9xL77fInplZ7mX+Z+gqdyOcg6A/YPf8x4eVo+dg40BJL+d0CIQnvfCT/6NIfO+LvTL5wD5+28yIHNOjIXe3OkAvgxsWQjA+YEevG9HAG9Fuq7MPv6jYAh9XQAtvj/Luf2H3G/ol+MzwF4JINSunVGjpyQpIMAlydTpRU0ANzcAvshcOaVXs4pnaepRLXptDKt8gFyQeSj8KQMjFyIYLvI6/96iF7sIIFV2EnIEsO/p5c2s8pQWBXCz8+byeziPx7A9LEX2+WFxEaxim6xHWdzpdKBNxYcLcPa93sVZ1JQ5MbZ8LgBXZ97PAZ4MXHXkpH3KiiAhR0+OHlReGKrS6wo9qiKAcOX0wYpuCBdOeHlRPeGjOCd5mffLojnJIvs4f8k5zXxho8jUcHqA13EujvXJizN6zwQ4I+G9atsGHMMyHtmi51FV1nBbMPJwryyEK3rWMi5MXNu7gIDjaqdfYgDh3B7DXNZbVmIa8XQG21oFj3BfYNH53Cb25bbTi6bHmBf+o+HvlKOvaiR29HcBriNhazy2bcCx6rcd5B4H8EeJLZwvu977O0NVpllKgWN+2yxu9fU07zkxLykGkNQV3sUdMDfy6uCet2cSdA73BdYBXF0PLOzLzwDsCuCjBDt1SQcKCHAdiFrzkV0ALjehbMvCHC708reFFM1PVTUp9JJie+9igOMcHoFTVbiiSo9wC3chPT5uCE7Jd9cEcFwtfqnKOO/vnIu7xh2Ny3/NUyTM2KxioIAAZyB6UGWTRQbOgfGlWjZbGdzahUPc1e+XW9xKajinNp8Lp+hh5IULDtymUbesCuCBDELLuxtjE+wxwMVC2VjdIeDqTOCPCrg6deQ2x7xZzk8y4YGKgQICnIHoLQIutJ6rhlxx5OF6v8RWNkNo8PqUPHQxxUJIpwIuNcy0ABznB3k0q27qd84NcktJXrjVxk9+YD/ippAFApx9Zzfx4GLWxzbtcivGXgC+8G7oEnAxWFad9SzrCQvA1Tni5tvORZPbBDj7F4sWCHD2/dA24NgiekYMGf39aeFcUJeAi02uTxXAhQs38uAM3zEBzlB8V3UXgIutOoYvWpeASw1RU0NiCw9OIar9u9HYAgGusYSNH9AF4GLwCrdHtLnIEO6ni+WgmzQPrq1FhtSV4sYDSQ/4vwICnP2osAIcD4vz7Cp3+udl1BU/5pu7x3tOLIvwpAGOewEZ6jP/XWqJ/dNIXUhJrUPX1VBAgKshVkeXdgG4lBCVzbHe6DvOISr1qet9MYvJ/dm+t5XcWBnFC+xomE3Nxwpw9v3eBeCYwofHhPxFhties9hRLS5G1NncGrM/9ajWuAOuLL1SOHJiufjq3G8/EgdogQBn36ltA25+dzrATwQ5wyWGZB4zv3Rx2D62JYV1TlqISpsZpnJPof+Ni6IRQ6+NqZumeRekJBKwH4EDtkCAs+/cNgFHj40H0JkNxC/MhsGvbcXOpcbSJTENOa8fJV0S87oxe0f4mcJJBBw1JLCZUv3jkqHCTCI8ouUnDOWJEObmi31Hwn7UTRELBDj7jm4KOIKDJxhiOeHYOnpvDDuLDnwXJbzkQf2zXdbdMGPHkg6ATDnuF3o6nNf7NiLrpAKOTWGmYR685+ZfP23SzO7bFfwH4n+LlmdlGaYzgaeKoQICnKH4ruouD9unJGukGW2kLK9KXDlpgGNKdXpt070h4qdUp7fMlOp+mqg8rOVqNLO0VOWQsx99A7dAgLPv4K4AF/sKVVlrmRmY20b4rYO6hd4eM5HwBENRmTTA0VvjGV7CKjzbW9TGuprX1VnX11RAgKspWAeXtw04em08C8mwKcyqW2U+04PvnM3VMbebn/686D56NMyUcV/Cp/ImEXD8Che/RpbyacKykL5Kd/29IwUEuI6ErfHYpoDjV6++zr5nyu938itQ3Jiakm68zETCiKEXN6lyK0f+4WfC8wP3YWl+e5Vhaeo3QCcVcPwwNd+TFV12EYal6zjxqD1DWQKeWigkrTHw+7hUgOtDZdUhBaSAiQICnInsqlQKSIE+FBDg+lBZdUgBKWCigABnIrsqlQJSoA8FBLg+VFYdUkAKmCggwJnIrkqlgBToQwEBrg+VVYcUkAImCghwJrKrUikgBfpQQIDrQ2XVIQWkgIkCApyJ7KpUCkiBPhQQ4PpQWXVIASlgooAAZyK7KpUCUqAPBQS4PlRWHVJACpgoIMCZyK5KpYAU6EMBAa4PlVWHFJACJgoIcCayq1IpIAX6UECA60Nl1SEFpICJAgKcieyqVApIgT4UEOD6UFl1SAEpYKKAAGciuyqVAlKgDwUEuD5UVh1SQAqYKCDAmciuSqWAFOhDAQGuD5VVhxSQAiYKCHAmsqtSKSAF+lDgX2W9smOFzX16AAAAAElFTkSuQmCC"/></switch></g></g></svg>
\ No newline at end of file diff --git a/docs/img/unknown-pcb.jpg b/docs/img/unknown-pcb.jpg Binary files differnew file mode 100644 index 0000000..0af620f --- /dev/null +++ b/docs/img/unknown-pcb.jpg diff --git a/docs/img/vault-disp-sketch.png b/docs/img/vault-disp-sketch.png Binary files differnew file mode 100644 index 0000000..95ac43a --- /dev/null +++ b/docs/img/vault-disp-sketch.png diff --git a/docs/img/vault-interface.png b/docs/img/vault-interface.png Binary files differnew file mode 100644 index 0000000..ac7ad03 --- /dev/null +++ b/docs/img/vault-interface.png diff --git a/docs/img/vault-io.png b/docs/img/vault-io.png Binary files differnew file mode 100644 index 0000000..b76da9f --- /dev/null +++ b/docs/img/vault-io.png diff --git a/docs/img/vault-keypad-full.png b/docs/img/vault-keypad-full.png Binary files differnew file mode 100644 index 0000000..41f9836 --- /dev/null +++ b/docs/img/vault-keypad-full.png diff --git a/docs/img/vault-keypad.png b/docs/img/vault-keypad.png Binary files differnew file mode 100644 index 0000000..43ed5fd --- /dev/null +++ b/docs/img/vault-keypad.png diff --git a/docs/img/vault-pcb.jpg b/docs/img/vault-pcb.jpg Binary files differnew file mode 100644 index 0000000..ebea627 --- /dev/null +++ b/docs/img/vault-pcb.jpg diff --git a/docs/img/vault-side.jpg b/docs/img/vault-side.jpg Binary files differnew file mode 100644 index 0000000..1922985 --- /dev/null +++ b/docs/img/vault-side.jpg diff --git a/docs/makefile b/docs/makefile new file mode 100644 index 0000000..f175830 --- /dev/null +++ b/docs/makefile @@ -0,0 +1,21 @@ +all: plan.pdf +all: reqs.pdf +all: research.pdf +all: design.pdf + +# include font.mk + +# PDFDEPS += $(ALL_FONTS) +PDFDEPS += ./theme.yml + +# uncomment to debug include errors +# ASCIIDOCTOR_ARGS += --trace + +ASCIIDOCTOR_ARGS += --require asciidoctor-bibtex +ASCIIDOCTOR_ARGS += --require asciidoctor-pdf +ASCIIDOCTOR_ARGS += --require asciidoctor-interdoc-reftext +ASCIIDOCTOR_ARGS += --require asciidoctor-lists +ASCIIDOCTOR_ARGS += --backend pdf +%.pdf: %.adoc $(PDFDEPS) + bundle exec asciidoctor $(ASCIIDOCTOR_ARGS) $< + diff --git a/docs/plan.adoc b/docs/plan.adoc new file mode 100644 index 0000000..e935c86 --- /dev/null +++ b/docs/plan.adoc @@ -0,0 +1,386 @@ +:document: Project Plan +include::share/meta.adoc[] + +== Introduction + +This document has been written by students following the computer science +curriculum at Avans University of Applied Sciences in Den Bosch. The purpose of +this document is to plan out the puzzle box project, in which realistic goals +will be established. Key points of this document include the way this project +is going to be developed, the expected outcome, and project management. +Throughout the semester project, this approach ensures process control and +provides a clear overview of activities and the work organization. + +== Background information + +This section gives the reader background information as to why the project is +necessary. + +=== Project + +During the introductory week, students participate in a competition task on +Monday afternoon. The goal is for teams to perform tasks related to electrical +engineering and computer science programs. The competitive element and +interaction with other groups are crucial. For the 19-20 introduction, the bomb +task was created, inspired by the game "Keep Talking and Nobody Explodes." A +description of the game can be found on the website cite:[Kee23]. + +Originally, the plan was to create a bomb that needs to be defused and a puzzle +box generating codes for defusing the bomb. A previous group successfully +developed a bomb requiring software and hardware creation by intro students, +followed by entering defusing codes. This system includes an RPI connecting to +the internet for bomb countdown time synchronization and remote control. +Additionally, a configuration program for PCs allows the bomb to be set to +countdown at a specific time. The bomb's hardware is ready, but a puzzle box +could still be created. + +This puzzle box would generate codes to be entered on the bomb for defusing. +The bomb's software can be expanded for collaboration with puzzle boxes or +other additional features. Several puzzles for the puzzle box were developed in +the 20-21 academic year and improved upon in 21-22. A design for the box's +appearance has been created, along with software and a web-based user interface +for accessing a mesh network set up by the boxes. + +== Project definition + +This section describes the different aspect of the project, including the +analysis of the project, the approach to completing the project, and the goal +of the project. + +=== Problem analysis + +Currently, the idea of defusing a bomb has been realized and is being used in +the introductory weeks at Avans. However, a puzzle box has yet to be realized. + +Several puzzles were already developed in the 20-21 academic year and improved +upon in the 21-22 academic year. A design for the box's appearance has been +created, along with the software and web-based user interface for accessing a +mesh network which is set up by the boxes. + +The puzzle box hardware and software need to transition from prototype status +to a final product, including the integration with the bombs. The hardware is +not complete for all puzzles, as these have been redesigned in the 22-23 +academic year. + +=== Project approach + +During this project, kanban is used, in which different tasks are described +that are actually in constant motion. The advantage of this is that it is +actually always clear who is working on which task and which tasks still need +to be done. This does require each project member to keep track of their tasks +on the kanban board, to ensure efficiency and discipline while the project is +ongoing. The tools to enforce this are shown in <<sec:version-management>>. + +=== Project goal + +The purpose and motivation of this project is to create a puzzle box that +interacts with the existing bomb, which can be used in the introductory week. + +The bomb would have to be defused using codes given by the puzzle box. The +puzzle box would consist of several puzzles for the student to solve. These +puzzles are related to the Smart Hardware and Smart Software study paths. + +The focus of this year's run of the puzzle box project (23-24) is to create a +new software framework from scratch, that allows future students working on +this project to easily integrate new puzzle modules, or port the existing +puzzles to different hardware. Previous iterations of this project were +realized with complicated libraries and/or frameworks, which requires extensive +research for students unfamiliar with them. + +=== Halfway goal + +Due to this project being divided over two periods a halfway goal has been +established. This goal must be reached in week seven of the project. The first +half of this project focuses on researching and designing the final product. As +a result, several documents are created. The documents delivered in this phase +of the project are the following: + +- Project Plan (this document) +- Requirements document +- Research document (1st version) +- Design document (top-level software design) + +=== Project outcome + +The outcome of the project is that the puzzle box software has been brought to +a product-level. Furthermore, a software framework has been implemented, which +uses only software and programming languages native to the curriculum. A +temporary cli-interface has been realized, allowing for management of the game +state. + +=== Project deliverables + +- Project Plan +- Requirements Specification +- Design Specification +- Site acceptance test +- Factory acceptance test +- Qualification Document +- Puzzle box games/interface +- Handover plan + +=== Product quality + +Multiple tests will be created to safeguard the quality of the project. Code +and document reviews are also used to safeguard quality. More about this can be +found in <<sec:control-quality>>. + +[[sec:phasing]] +== Project phases + +[[sec:phase-research]] +=== Research phase + +This project consists of several research topics which are stated below. + +Investigating the already existing code/software that has been written by +previous project members to determine if the code/software could be +reused/ported to another controller or software language. + +Another vital research topic to explore is the unit testing framework. By +investigating different unit testing frameworks, project teams can identify the +most suitable one for their specific needs, enabling them to maintain code +quality, detect bugs early, and facilitate smoother integration processes. That +means that for this project a new, robust, and future proof unit testing +framework needs to be chosen since there is none now. + +Lastly, researching the controller, there is already a controller picked for a +prototype version of the puzzle box for this project, but it is unclear which +controller it is and if it is still a good option to continue using since the +puzzle box itself uses a Raspberry Pi, but the puzzle box consists out of +several puzzle modules which each must have their own controller. The raspberry +Pi for the box itself should be fine but for now it is unclear what is used for +the modules and what is the best option to move forward. + +A design document will be set-up in where the decisions will be made based on +the conclusion of the research document for the following components: + +- Puzzle modules (four sides) +- Main controller +- Communiction (with the bomb) +- Power supply + +[[sec:phase-development]] +=== Development phase + +The development phase is used to develop a product, or a predetermined part of +the product based on the research done in the previous phase and agreements +made with the customer. + +This project and thus this phase will be executed using the well-known +KANBAN-method to not only bring more structure and an overview of the product +development but also to make sure that everything is according to the plan and +the customer is satisfied. This means that there will be regularly meetings +with the customer to verify that the requirements are met as expected by the +customer. + +The development will be done using Visual Studio Code in combination with +several add-ons, if necessary, together with GitHub (GIT) for version +management. GitHub will also be used to manage project related tasks so that +all the tasks and issues can be tracked. + +The software will be created according to the tasks planned in GitHub projects. +Each piece of software needs to be tested using a testing framework. + +The development will exist out of five main tasks which are: + +- Main controller +- Side 1 +- Side 2 +- Side 3 +- Side 4 + +The main controller's development will take up the most time thus will be +executed parallel to the development of the four sides. The development of the +sides will also mostly be parallel with just a small delay creating an overlap +between the sides. + +[[sec:phase-qualification]] +=== Qualification + +The last phase is the phase where everything needs to be tested and verified to +the agreed upon specifications. This will also be done using the KANBAN-method +as discussed in the previous chapter. + +Testing of the code will be done using a unit testing framework to test +individual components, later manual testing is needed to test the complete +system which will be documented in a FAT. The customer will also be able to +test and verify the results during this phase to make sure that everything was +executed according to the plan. + +Lastly, a document needs to be made with a recap of everything of this project, +from research, decisions that have been made to verify progress and a +conclusion with tips to continue this project so that the next project group +can continue this project. + +Also all the other documents will need to be finalized and double checked, +especially the design document since it will function as a 'blueprint' of the +project. + +== Project control + +=== Risk management + +What the possible risks are, and how they are managed, can be seen in the table +below. + +.Risk management calculations +[cols="2,1"] +|=== +| General risk calculation (Chance x Impact) | Outcome + +| HxH | High +| HxA | High +| HxL | Average +| AxH | High +| AxA | Average +| AxL | Low +| LxH | Average +| LxA | Low +| LxL | Low +|=== + +[[sec:control-quality]] +=== Quality control + +This project just as any other project need to meet a certain level of quality +and this quality needs to be controlled or better said verified/management. + +The level of quality must be defined within each task so that it is easier to +verify, this also why tasks should be created as SMART tasks. After that the +quality can be verified by someone else on the project and/or the customer +using the definition within the task. + +The quality of the project itself should be defined within a separate so called +qualification document. A qualification document for a technical project serves +as a crucial piece of information that outlines the necessary qualifications +and criteria for individuals or teams involved in the project. + +This document typically includes details such as the required technical skills, +educational background, work experience, certifications, and any other specific +requirements needed to successfully contribute to the project. By clearly +defining the qualifications needed, this document helps ensure that the right +individuals are selected for the project, leading to its successful completion. + +=== Project scope + +The aim of this project is to create a puzzle box with 4 different puzzles +representing the different directions in this study. Examining the existing +hardware designs is an important task to get a good idea of their status. The +existing hardware designs from previous groups will be used as a reference to +develop the software on. The software will enable interaction between the user +and the puzzle box for solving the different puzzles. + +So, the task in this project is to develop this software using the given +hardware designs. If certain parts of this hardware don’t work, this should be +described in the handover document so that the next hardware student can work +on it. + +It was decided to focus only on the puzzle box itself because this project +requires a lot of research to ground out the documents of the previous groups. +So, the loose bomb and web interface are left out of this project and can be +realised later. + +In addition, contact will be kept with the customer to properly incorporate the +requirements into the final product and both parties will not face any +surprises. + +== Parties & Roles + +This section defines the entities involved in this project and describes their +role in the project. + +=== Team members + +<<tab:members>> lists the executive party involved in this project. These +people are responsible for implementation, documentation, testing and +communication with the stakeholders. + +[[tab:members]] +.Team member table +[cols="3*"] +|=== +| Name | Role | Study path + +| Thomas in ‘t Anker | Developer | Software +| Loek Le Blansch | Developer & Project lead | Software +| Lars Faase | Developer | Software +| Elwin Hammer | Developer | Software +|=== + +=== Communication + +<<tab:stakeholders>> lists the stakeholders which receive regular updates +about the project. These people are informed about the current progress and +are involved in any meetings where requirements and/or specifications are +discussed. + +[[tab:stakeholders]] +.Project communication table +[cols="2,1,2,1"] +|=== +|Name|Role|Communication tool(s)|Frequency + +|Jasper van den Heuvel|Client|School email; Teams|Weekly +|Jonathan Overes|Client|School email; Teams|Weekly +|=== + +[[sec:version-management]] +=== Version management + +All source code developed during this project is kept under version control +using the Git cite:[gitscm] version control system and is available online at +GitHub cite:[gitrepo]. Each software component has a 3-digit version number +following semantic versioning cite:[semver] conventions (major, minor, patch). + +This repository also utilizes Git submodules to track the versions of the +utilized libraries and SDKs. Submodules refer to commits, and can automatically +be initialized and managed using Git, so are not further specified in this +document. + +All project documentation is realized using Microsoft Office products and is +therefore stored in a SharePoint folder cite:[sharepoint]. These documents use +a simple 2-digit (major, minor) version number system. The documents are +published at the discretion of the authors, with each new version incrementing +the minor version number. Major version number 0 is utilized for the document +draft versions, while 1 is utilized for documents after the project goal is +reached. A copy of all the documents is kept for each officially published +version. + +== Planning + +This project utilizes GitHub Projects cite:[githubprojects] to manage and +allocate tasks to team members. GitHub Projects supports multiple workflows, +but this project only follows the Kanban cite:[atlassiankanban] workflow. Since +the Kanban workflow does not require sprints, the project is divided into +milestones. A milestone is considered complete once all tasks assigned to it +are both marked as ‘complete’ and have been reviewed. + +At the request of the stakeholders, time spent working on the project is +tracked by each team member using Clockify cite:[clockify]. + +[[fig:planning-condensed]] +.Condensed Gantt planning +image::img/planning-condensed.svg[] + +<<fig:planning-condensed>> shows a Gantt-chart including the phases from +<<sec:phasing>>. The milestones are indicated with vertical dashed lines and +are marked with week numbers. + +The research phase (<<sec:phase-research>>) includes the planning and writing +of the initial draft versions of all the project documents. The documentation +is also continuously updated during the development phase, but this is not +shown in <<fig:planning-condensed>>. + +The development phase (<<sec:phase-development>>) consists of the continuous +development of the main (central) controller software and various accompanying +tests. During this phase, the software for each puzzle box side is developed in +parallel. Each side’s software development is staggered to avoid the +accumulation of tasks. + +The qualification phase (<<sec:phase-qualification>>) consists of validating +the results of the development phase, fixing issues when they are discovered, +and finalizing all project documentation. + +include::share/footer.adoc[] + diff --git a/docs/readme.md b/docs/readme.md new file mode 100644 index 0000000..99cbb24 --- /dev/null +++ b/docs/readme.md @@ -0,0 +1,30 @@ +# docs + +This folder contains the project documentation in [AsciiDoc][asciidoc] format. +To compile the documents, make sure you have [Ruby][rubydl] and the +dependencies installed by running the `bundle` command in this folder. A +makefile is provided for convenience. + +## notes for writers + +- "I<sup>2</sup>C" is written as `I^2^C` +- "C++" is written as `{cpp}` +- please give cross references, links, image files, figure ids, etc. meaningful + names + +## todo (low priority) + +- cross-references to glossary + +## for later reference + +### get citation keys from .docx file + +``` +$ unar file.docx +$ grep -o 'CITATION[^<]\+' file/word/document.xml | awk '!x[$2]++ { i++; print "[" i "] " $2 }' +``` + +[rubydl]: https://www.ruby-lang.org/en/documentation/installation/ +[asciidoc]: https://asciidoc.org/ + diff --git a/docs/reqs.adoc b/docs/reqs.adoc new file mode 100644 index 0000000..8ad24a8 --- /dev/null +++ b/docs/reqs.adoc @@ -0,0 +1,723 @@ +:document: Project Requirements +include::share/meta.adoc[] + +== Introduction + +In this document, the specifications are described prior to the investigation +of the Puzzle Box project. These specifications are partly derived from the +previously established requirements and are further supplemented and modified. +The priority of specifications is indicated using the MoSCoW method, see +<<tab:moscow>>. + +[[tab:moscow]] +.MoSCoW Method cite:[Wik22] +[cols="20h,~"] +|=== +| Priority | Description + +| [[must,M]]<<must,Must have>> +| Represents essential system requirements. Without these, the system will not +function. +| [[should,S]]<<should,Should have>> +| Denotes desirable system features. The system can work without these, but it +lacks necessary elements. +| [[could,C]]<<could,Could have>> +| Refers to additional functionalities that can be implemented if there is +extra time. +| [[wont,W]]<<wont,Won't have>> +| Specifies requirements that will not be implemented in the current version +but may be considered in a future release. +|=== + +This specification document covers hardware, software, and game-specific +details. The focus in this project year for the Puzzle Box is to thoroughly +document the system and create a software framework for future groups. + +== Context + +This chapter describes how the user will interact with the system. This is done +in the form of a user story. This user story covers hardware, software, and +game specifications. From this narrative, many specifications can be derived +for both functional and non-functional requirements +(<<sec:functional>> and <<sec:technical>>). + +The game administrator picks up the puzzle box and places it on a flat surface. +By using the key switch, the puzzle box is turned on, and the green indicator +LED lights up. Through the mesh network established by the external puzzle box +hub, the corresponding web panel can be accessed. The web panel provides +instructions for configuring the puzzle box, including linking it to any bomb. +The instructions issue a warning if any of the start conditions are not +properly set. If a criterion is incorrectly configured, it is highlighted for +resolution. Additionally, a warning is given if the battery capacity is +insufficient for one game duration, causing the indicator LED on the puzzle box +to turn red. In such cases, the battery should be charged using the USB-C +cable. While the puzzle box is charging, the indicator LED is blue. Once there +are no warnings and the puzzle box is adequately charged, the game can be +started in the web panel. + +The puzzle box begins with the NeoTrellis game. In this game, players must turn +off all LEDs on an 8x8 button LED matrix. When any button is pressed, the +directly adjacent LEDs toggle. If a lit LED is toggled, it turns off; if an +unlit LED is toggled, it turns on. Once all LEDs are turned off, the game is +solved, and the software puzzle begins. + +On the software puzzle, there are 6 banana plug connectors on both the left and +right sides. The ones on the left are labeled with various logical gates, while +the ones on the right are labeled from A to F. Participants in the bomb game +have 6 pieces of C-code written on paper, corresponding to the logical gates on +the puzzle box. The bomb participants must provide a description of the C-code +to the puzzle box participants, allowing them to correctly connect the +appropriate logical gate to the corresponding letter. Once the correct +combination of logical gates with the correct letter is made, the game is +solved. Subsequently, the automation puzzle is initiated. + +Since there is no concept available for the automation puzzle yet, the hardware +puzzle is started directly. + +The hardware puzzle is played in two distinct phases. In Phase 1, the objective +is to solve a combinatorial circuit such that its output becomes '1'. There are +8 inputs for this circuit, each controlled by an on/off switch. Once the +combinatorial circuit evaluates to '1', the LED at the output lights up, +indicating the completion of the first phase. In Phase 2, another LED blinks, +consistently repeating a pattern. This pattern represents a randomly generated +Morse code, corresponding to a number from 0 to 9999. Participants use a Morse +code table to decipher the correct number. Using four potentiometers, the +participants can set a number on a 7-segment display. When this number matches +the randomly generated one, the hardware puzzle is solved. Subsequently, the +vault puzzle is initiated. + +In the vault puzzle, a 7-segment display shows a random combination of a letter +and a digit. Participants have access to a list containing the correct button +combination for the corresponding letter and digit. The vault puzzle consists +of 5 levels, each displaying a unique button combination from the list. When +participants correctly press the button on the keypad, the level advances, and +a new value is shown. Pressing the wrong button restarts the game at level 1. +Once all 5 levels are completed, the vault door unlocks, allowing access to the +inside of the puzzle box. On the mainboard, there is a 7-segment display +showing a code. This code must be relayed to the participants of the bomb game. +Once the bomb team receives the code, the puzzle box is considered solved. + +[[sec:functional]] +== Functional Requirements + +The functional requirements describe the things which are important to the +client. This is mainly about the way the product is going to be used, what it +is going to look like, and how the product reacts to interaction. This chapter +describes all functional requirements of the puzzle box. + +=== The puzzle box + +.Puzzle box specifications +[cols="8h,5h,~"] +|=== +| ID | <<tab:moscow,Pri.>> | Specification + +| <<req:1>> | <<must>> | +[[req:1,R-001]] The dimensions of the puzzle box are 30×30×30cm ± 5% (Length × Width × Height). + +| <<req:2>> | <<must>> | +[[req:2,R-002]] The puzzle box extends a maximum of 5cm on the sides and the top. + +| <<req:3>> | <<must>> | +[[req:3,R-003]] The puzzle box is flat at the bottom. + +| <<req:4>> | <<must>> | +[[req:4,R-004]] The puzzle box has a key switch at the bottom of the NeoTrellis puzzle. + +| <<req:5>> | <<must>> | +[[req:5,R-005]] The puzzle box has an indicator LED at the bottom of the NeoTrellis puzzle. + +| <<req:6>> | <<must>> | +[[req:6,R-006]] The indicator LED turns green when the system is on and not charging. + +| <<req:7>> | <<must>> | +[[req:7,R-007]] The indicator LED turns blue when the battery is charging. + +| <<req:8>> | <<must>> | +[[req:8,R-008]] The indicator LED turns red when the battery does not have enough capacity for the duration of one game and is not charging. + +| <<req:9>> | <<must>> | +[[req:9,R-009]] The puzzle box has a USB-C port at the bottom of the NeoTrellis puzzle for battery charging. + +| <<req:10>> | <<must>> | +[[req:10,R-010]] The puzzle box has a distance sensor at the bottom to detect if it is lifted. + +| <<req:11>> | <<must>> | +[[req:11,R-011]] The puzzle box main board (PCB on the bottom plate) includes a speaker. + +| <<req:12>> | <<wont>> | +[[req:12,R-012]] When the puzzle box is lifted, the mainboard speaker emits an alarm sound for at least 10 seconds. It stops only when it has been on a table for another 10 seconds (detected by the distance sensor). + +| <<req:13>> | <<wont>> | +[[req:13,R-013]] When the game is completed, the puzzle box produces a victory sound. + +| <<req:14>> | <<wont>> | +[[req:14,R-014]] Pressing the "identify" button on the web panel causes the indicator LED to blink. + +| <<req:15>> | <<wont>> | +[[req:15,R-015]] Pressing the "identify" button on the web panel triggers a sound from the speaker. + +| <<req:16>> | <<wont>> | +// section 3.7 is inside the citation, and does not refer to section 3.7 in this document +[[req:16,R-016]] The game starts once the scheduler time is reached (refer to cite:[Bek23] section 3.7). +|=== + +=== The bomb + +.Bomb specifications +[cols="8h,5h,~"] +|=== +| ID | <<tab:moscow,Pri.>> | Specification + +| <<req:17>> | <<must>> | +[[req:17,R-017]] The bomb includes a 6-digit 7-segment display for showing the remaining playtime. + +| <<req:18>> | <<must>> | +[[req:18,R-018]] The bomb contains a keypad for entering the disarm code. + +| <<req:19>> | <<wont>> | +[[req:19,R-019]] The 6-digit 7-segment display turns off when no game is in progress. + +| <<req:20>> | <<wont>> | +[[req:20,R-020]] Once the disarm code is entered on the bomb keypad, the game is complete. + +| <<req:21>> | <<wont>> | +[[req:21,R-021]] When the game is finished, the bomb emits a victory sound. + +| <<req:22>> | <<wont>> | +[[req:22,R-022]] The timer on the bomb counts down from 60:00:00 to 00:00:00. + +| <<req:23>> | <<wont>> | +[[req:23,R-023]] Pressing the "identify" button on the web panel causes the indicator LED to blink. + +| <<req:24>> | <<wont>> | +[[req:24,R-024]] Pressing the "identify" button on the web panel triggers a sound from the speaker. + +|=== + +=== The game + +.General game specifications +[cols="8h,5h,~"] +|=== +| ID | <<tab:moscow,Pri.>> | Specification + +| <<req:25>> | <<wont>> | +[[req:25,R-025]] The game lasts for 1 hour. + +| <<req:26>> | <<wont>> | +[[req:26,R-026]] The game should be solvable within the given playtime, without the player having prior knowledge of the game or its mechanics. + +| <<req:27>> | <<must>> | +[[req:27,R-027]] The puzzles should be easy enough to solve without any prior knowledge of the game or its mechanics. + +| <<req:edge-manual-reset>> | <<must>> | +[[req:edge-manual-reset,R-167]] A puzzle module can manually be reset at the discretion of the game operator + +| <<req:edge-skip-puzzle>> | <<must>> | +[[req:edge-skip-puzzle,R-168]] A puzzle module can manually be set as solved at the discretion of the game operator + +| <<req:28>> | <<wont>> | +[[req:28,R-028]] The disarm code for the bomb consists of 4 digits. + +| <<req:29>> | <<wont>> | +[[req:29,R-029]] Once all games are solved, the mainboard PCB displays the disarm code on a red 7-segment 4-digit screen. + +| <<req:30>> | <<wont>> | +[[req:30,R-030]] The puzzle box records the playtime of each game. + +| <<req:31>> | <<wont>> | +[[req:31,R-031]] The puzzle box features 5 playable puzzles. + +| <<req:32>> | <<wont>> | +[[req:32,R-032]] Only one game is active at a time; the other games do not respond to buttons. + +| <<req:33>> | <<wont>> | +[[req:33,R-033]] The game always starts with the NeoTrellis puzzle. +|=== + +==== NeoTrellis puzzle + +.NeoTrellis puzzle requirements +[cols="8h,5h,~"] +|=== +| ID | <<tab:moscow,Pri.>> | Specification + +| <<req:34>> | <<must>> | +[[req:34,R-034]] There is an 8x8 LED matrix where each LED can display different colors. + +| <<req:35>> | <<wont>> | +[[req:35,R-035]] At the start of the puzzle, a pattern is displayed as shown in <<fig:neotrellis-start>>. + +| <<req:36>> | <<wont>> | +[[req:36,R-036]] When a button is pressed, the adjacent LEDs and the pressed LED toggle (If an LED is off, it turns on. If an LED is on, it turns off). + +| <<req:37>> | <<wont>> | +[[req:37,R-037]] All LEDs in the Neotrellis that are turned on are blue. + +| <<req:38>> | <<wont>> | +[[req:38,R-038]] The puzzle is considered solved when all LEDs are turned off, and then the software puzzle starts. +|=== + +==== Software puzzle + +.Software puzzle requirements +[cols="8h,5h,~"] +|=== +| ID | <<tab:moscow,Pri.>> | Specification + +| <<req:39>> | <<should>> | +[[req:39,R-039]] The software puzzle board has 6 banana plug connectors with different logic gates displayed next to them (Refer to <<fig:software-example-sketch>> for a sketch and <<fig:software-cable-sketch>> for a banana plug example). + +| <<req:40>> | <<should>> | +[[req:40,R-040]] The software puzzle board has 6 banana plug connectors labeled with the letters A through F (Refer to <<fig:software-example-sketch>> for a sketch). + +| <<req:41>> | <<should>> | +[[req:41,R-041]] At the start of the puzzle box game, the preparer must connect all cables in parallel (horizontally) to the connectors. + +| <<req:42>> | <<wont>> | +[[req:42,R-042]] There are C code blocks visible only to the players on the bomb side, corresponding to the letters A through F (Refer to <<fig:software-codes-sketch>> for the codes). + +| <<req:43>> | <<should>> | +[[req:43,R-043]] The combinations of logic gates to letters are always the same. + +| <<req:44>> | <<wont>> | +[[req:44,R-044]] The puzzle is considered solved when the cables from the logic gates match the code blocks (Refer to <<fig:software-example-sketch>> and <<fig:software-codes-sketch>> for the combinations). + +| <<req:45>> | <<wont>> | +[[req:45,R-045]] Once the puzzle is solved, the green indicator LED will light up (Refer to <<fig:software-example-sketch>> and <<fig:software-codes-sketch>>). + +| <<req:46>> | <<wont>> | +[[req:46,R-046]] After the puzzle is solved, the automation puzzle begins. +|=== + +==== Automation puzzle + +The specific details for this puzzle are not present in the previous +documentation. Due to time constraints, the section will be left empty. + +.Automation puzzle requirements +[cols="8h,5h,~"] +|=== +| ID | <<tab:moscow,Pri.>> | Specification + +| <<req:47>> | <<wont>> | +[[req:47,R-047]] After the puzzle is solved, the hardware puzzle begins. +|=== + +==== Hardware puzzle + +.Hardware puzzle requirements +[cols="8h,5h,~"] +|=== +| ID | <<tab:moscow,Pri.>> | Specification + +| <<req:48>> | <<should>> | +[[req:48,R-048]] There are eight switches on the hardware puzzle board. + +| <<req:49>> | <<should>> | +[[req:49,R-049]] The hardware puzzle board features a diagram of a combinatorial circuit with 8 inputs (linked to the switches) and 1 output (Refer to <<fig:hardware-example-sketch>> for a sketch). + +| <<req:50>> | <<should>> | +[[req:50,R-050]] The hardware puzzle board includes a red 7-segment 4-digit display (Refer to <<fig:hardware-example-sketch>> for a sketch). + +| <<req:51>> | <<should>> | +[[req:51,R-051]] There are 4 potentiometers on the hardware puzzle board (Refer to <<fig:hardware-example-sketch>> for a sketch). + +| <<req:52>> | <<should>> | +[[req:52,R-052]] A blue LED on the hardware puzzle board displays the morse code. + +| <<req:53>> | <<should>> | +[[req:53,R-053]] A green LED on the hardware puzzle board indicates whether the combinatorial circuit is solved. + +| <<req:54>> | <<wont>> | +[[req:54,R-054]] At the start of the puzzle, the potentiometers are inactive. + +| <<req:55>> | <<wont>> | +[[req:55,R-055]] The 7-segment display is off at the beginning of the puzzle. + +| <<req:56>> | <<wont>> | +[[req:56,R-056]] The LED for the combinatorial puzzle is off initially. + +| <<req:57>> | <<wont>> | +[[req:57,R-057]] The morse code LED is off at the puzzle's outset. + +| <<req:58>> | <<must>> | +[[req:58,R-058]] The preparer must set all switches to the down position at the start of the puzzle box game. + +| <<req:59>> | <<must>> | +[[req:59,R-059]] The preparer must turn all potentiometers to the left (value '0') at the beginning of the puzzle box game. + +| <<req:60>> | <<wont>> | +[[req:60,R-060]] The puzzle consists of two phases. + +| <<req:61>> | <<wont>> | +[[req:61,R-061]] The puzzle begins in phase 1. + +| <<req:62>> | <<wont>> | +[[req:62,R-062]] During the puzzle, the switches must be toggled to obtain a logical '1' at the output of the combinatorial circuit. + +| <<req:63>> | <<wont>> | +[[req:63,R-063]] When the output of the combinatorial circuit equals '1', the green indicator LED turns on (Refer to <<fig:hardware-example-sketch>> for a sketch). + +| <<req:64>> | <<wont>> | +[[req:64,R-064]] The puzzle proceeds to phase 2 when the output of the combinatorial circuit is a logical '1'. + +| <<req:65>> | <<wont>> | +[[req:65,R-065]] The switches no longer respond once the puzzle enters phase 2. + +| <<req:66>> | <<wont>> | +[[req:66,R-066]] The indicator LED from phase 1 remains green during phase 2. + +| <<req:67>> | <<wont>> | +[[req:67,R-067]] In phase 2, a morse code is displayed using an LED. This morse code represents 4 numbers from 0 to 9 and repeats every second. + +| <<req:68>> | <<wont>> | +[[req:68,R-068]] The morse code is randomly generated. + +| <<req:69>> | <<wont>> | +[[req:69,R-069]] Each potentiometer can be rotated to display a value from 0 to 9 on the corresponding 4-digit 7-segment display. The order of the potentiometers matches the order of the segments on the display (Refer to <<fig:hardware-example-sketch>> for a sketch). + +| <<req:70>> | <<wont>> | +[[req:70,R-070]] The puzzle is considered solved when the code displayed on the 7-segment 4-digit screen matches the 4 numbers from the morse code. + +| <<req:71>> | <<wont>> | +[[req:71,R-071]] Once the puzzle is solved, the value shown on the 7-segment 4-digit display cannot be changed. + +| <<req:72>> | <<wont>> | +[[req:72,R-072]] A 2-second victory sound is produced by the speaker upon solving the puzzle. + +| <<req:73>> | <<wont>> | +[[req:73,R-073]] During the victory sound, the 7-segment display blinks twice per second. + +| <<req:74>> | <<wont>> | +[[req:74,R-074]] After the victory sound, the puzzle has been solved and the vault puzzle begins. +|=== + +==== Vault puzzle + +.Vault puzzle requirements +[cols="8h,5h,~"] +|=== +| ID | <<tab:moscow,Pri.>> | Specification + +| <<req:75>> | <<should>> | +[[req:75,R-075]] The vault puzzle board features a red 7-segment 4-digit display. + +| <<req:76>> | <<should>> | +[[req:76,R-076]] On the vault puzzle board, there is a 4x4 grid of holes for ventilation and sound. + +| <<req:77>> | <<should>> | +[[req:77,R-077]] The vault puzzle board includes a vault door, and the inside of the vault is transparent, allowing you to see inside the puzzle box. + +| <<req:78>> | <<should>> | +[[req:78,R-078]] A sensor is integrated with the vault to detect when the vault is closed. + +| <<req:79>> | <<must>> | +[[req:79,R-079]] At the beginning of the puzzle box game, the preparer must close the vault. + +| <<req:80>> | <<wont>> | +[[req:80,R-080]] The puzzle starts at level 1. + +| <<req:81>> | <<wont>> | +[[req:81,R-081]] Initially, the 7-segment display shows a code consisting of a letter and a digit. This code represents a valid key combination for level 1 (Refer to <<fig:vault-keypad>> for all combinations). + +| <<req:82>> | <<wont>> | +[[req:82,R-082]] There are a total of 5 levels. After each level, a key combination is displayed, starting with a letter followed by a digit, which is valid for that level (Refer to <<fig:vault-keypad>>). + +| <<req:83>> | <<wont>> | +[[req:83,R-083]] Each level has unique key combinations for the button locations (Refer to <<fig:vault-keypad>>). + +| <<req:84>> | <<wont>> | +[[req:84,R-084]] Pressing the button corresponding to the letter-digit combinations advances the puzzle to the next level. + +| <<req:85>> | <<wont>> | +[[req:85,R-085]] If an incorrect button is pressed, the game resets to level 1. + +| <<req:86>> | <<wont>> | +[[req:86,R-086]] An error sound is produced by the speaker when an incorrect button is pressed. + +| <<req:87>> | <<wont>> | +[[req:87,R-087]] The 7-segment display blinks when an incorrect button is pressed. + +| <<req:88>> | <<wont>> | +[[req:88,R-088]] After completing 5 levels, the puzzle is solved, and the vault opens. +|=== + +=== Battery + +.Battery requirements +[cols="8h,5h,~"] +|=== +| ID | <<tab:moscow,Pri.>> | Specification + +| <<req:pwr-battery>> | <<must>> | +[[req:pwr-battery,R-089]] The puzzle box is powered by a rechargeable battery. + +| <<req:90>> | <<must>> | +[[req:90,R-090]] The battery lasts for a minimum of 4 hours. + +| <<req:91>> | <<could>> | +[[req:91,R-091]] The battery in the puzzle box can be replaced. +|=== + +=== Network Communication + +.Communication requirements +[cols="8h,5h,~"] +|=== +| ID | <<tab:moscow,Pri.>> | Specification + +| <<req:92>> | <<wont>> | +[[req:92,R-092]] The puzzle boxes, bombs, and the puzzle box hub must all be able to communicate with each other. + +| <<req:93>> | <<must>> | +[[req:93,R-093]] Communication between two devices in the network must have a range of at least 20 meters in an open field. +|=== + +=== Framework + +[cols="8h,5h,~"] +|=== +| ID | <<tab:moscow,Pri.>> | Specification + +| <<req:main-static>> | <<must>> | +[[req:main-static,R-130]] The main controller and its software do not need to be modified to implement a new puzzle module + +| <<req:131>> | <<could>> | +[[req:131,R-131]] Puzzle modules can be added and removed while the main controller is powered on + +| <<req:pm-swap>> | <<must>> | +[[req:pm-swap,R-132]] Puzzle modules can be added and removed while the main controller is powered off + +| <<req:main-interface>> | <<must>> | +[[req:main-interface,R-133]] The puzzle box provides a single external interface for accessing and controlling game state variables +|=== + +=== Puzzle box hub + +.Puzzle box hub general requirements +[cols="8h,5h,~"] +|=== +| ID | <<tab:moscow,Pri.>> | Specification + +| <<req:94>> | <<wont>> | +[[req:94,R-094]] The puzzle box hub hosts a website that can be accessed by a device connected to the network. +|=== + +[[sec:technical]] +== Technical Requirements + +The technical specifications describe the specifications that are important for +developers. For example, this could include specific requirements related to +current, voltage, or communication protocols. This chapter outlines all the +technical specifications of the puzzle box. + +=== Wireless communication + +.Wireless communication requirements +[cols="8h,5h,~"] +|=== +| ID | <<tab:moscow,Pri.>> | Specification + +| <<req:127>> | <<must>> | +[[req:127,R-127]] The wireless communication between the system controller, bomb, and puzzle box operates over a WiFi mesh or WiFi network. +|=== + +=== Framework + +.Development framework requirements +[cols="8h,5h,~"] +|=== +| ID | <<tab:moscow,Pri.>> | Specification + +| <<req:128>> | <<must>> | +[[req:128,R-128]] A framework has been created to assist future groups in the development of the puzzle box. + +| <<req:129>> | <<must>> | +[[req:129,R-129]] The framework runs on the main puzzle box controller. + +| <<req:134>> | <<must>> | +[[req:134,R-134]] Puzzle modules are detected by the main controller module. + +| <<req:135>> | <<must>> | +[[req:135,R-135]] Puzzle modules are initialized by the main controller module. + +| <<req:165>> | <<must>> | +[[req:165,R-165]] Puzzle modules repeatedly send 'update' messages to the main controller while their global state is 'uninitialized' +|=== + +=== Main controller + +.Main controller requirements +[cols="8h,5h,~"] +|=== +| ID | <<tab:moscow,Pri.>> | Specification + +| <<req:main-i2c-ctrl>> | <<must>> | +[[req:main-i2c-ctrl,R-136]] The main controller has at least 1 I2C peripheral. + +| <<req:main-802-11-ap>> | <<must>> | +[[req:main-802-11-ap,R-137]] The main controller can connect to a standard 802.11b/g/n access point. + +| <<req:main-tcp-socket>> | <<must>> | +[[req:main-tcp-socket,R-138]] The main controller can serve TCP socket connection(s). + +| <<req:main-devkit-supplier>> | <<must>> | +[[req:main-devkit-supplier,R-139]] The main controller is available as a development kit from Farnell. + +| <<req:140>> | <<should>> | +[[req:140,R-140]] The main controller can communicate over I²C with a speed of 400kb/s + +| <<req:main-pwr-efficient>> | <<should>> | +[[req:main-pwr-efficient,R-166]] The main controller is power efficient. +|=== + +=== Puzzle module controller + +[cols="8h,5h,~"] +|=== +| ID | <<tab:moscow,Pri.>> | Specification + +| <<req:pm-i2c-ctrl>> | <<must>> | +[[req:pm-i2c-ctrl,R-141]] The puzzle module controller has at least 1 I2C peripheral. + +| <<req:pm-gpio>> | <<should>> | +[[req:pm-gpio,R-142]] The puzzle module controller has enough I/O ports to control a puzzle. + +| <<req:pm-pwr-efficient>> | <<should>> | +[[req:pm-pwr-efficient,R-143]] The puzzle module is power efficient. + +| <<req:pm-clk-ctrl>> | <<must>> | +[[req:pm-clk-ctrl,R-144]] The puzzle module has a configurable clock speed. + +| <<req:pm-devkit-supplier>> | <<must>> | +[[req:pm-devkit-supplier,R-145]] The puzzle module controller is available as a development kit from Farnell. + +| <<req:146>> | <<should>> | +[[req:146,R-146]] The puzzle module can communicate over I²C with a speed of 400kb/s +|=== + +=== Vault puzzle + +.Vault puzzle requirements +[cols="8h,5h,~"] +|=== +| ID | <<tab:moscow,Pri.>> | Specification + +| <<req:147>> | <<must>> | +[[req:147,R-147]] The vault puzzle can communicate with the main controller using I²C + +| <<req:148>> | <<wont>> | +[[req:148,R-148]] The vault puzzle can produce a sound signal for the buzzer + +| <<req:149>> | <<must>> | +[[req:149,R-149]] The vault puzzle can lock & unlock a solenoid lock + +| <<req:150>> | <<must>> | +[[req:150,R-150]] The vault puzzle can translate and obtain a button press from the 3x4 keypad using 5 inputs + +| <<req:151>> | <<must>> | +[[req:151,R-151]] The vault puzzle can communicate with a 4x 7 SEG. Display using 2 lines (clock & data) + +| <<req:152>> | <<should>> | +[[req:152,R-152]] The vault puzzle can read a sensor's value to detect if the vault door is open or closed. +|=== + +=== Bomb + +.Bomb requirements +[cols="8h,5h,~"] +|=== +| ID | <<tab:moscow,Pri.>> | Specification + +| <<req:153>> | <<wont>> | +[[req:153,R-153]] The bomb can communicate with the hub using a TCP socket connection + +| <<req:154>> | <<must>> | +[[req:154,R-154]] The bomb can sync. time using the WiFi connection + +| <<req:155>> | <<wont>> | +[[req:155,R-155]] The bomb can retrieve, and store a given code in order to verify it later on input + +| <<req:156>> | <<should>> | +[[req:156,R-156]] The bomb can be paired to a puzzlebox using the hub's interface +|=== + +== Preconditions + +This section describes the aspects of the project which have been set as +preconditions and cannot be changed. + +.Preconditions +[cols="8h,~"] +|=== +| ID | Precondition + +| <<req:160>> | [[req:160,R-160]] The delivery of components cannot take longer than two weeks. +| <<req:161>> | [[req:161,R-161]] The price of a single puzzle box is not higher than €150. +| <<req:162>> | [[req:162,R-162]] The existing games are used in the puzzle box. +| <<req:163>> | [[req:163,R-163]] The puzzle box is not allowed to make a connection with the Avans network (Eduroam). +| <<req:164>> | [[req:164,R-164]] The bomb hardware cannot be changed. +|=== + +== Documentation + +This section lists requirements that apply to documentation produced during +this project. + +[cols="8h,5h,~"] +|=== +| ID | <<tab:moscow,Pri.>> | Specification + +| <<req:157>> | <<should>> | +[[req:157,R-157]] All documentation is written according to the style guide cite:[styleguide] + +| <<req:158>> | <<should>> | +[[req:158,R-158]] All documentation is manually checked for spelling and grammar mistakes before being published + +| <<req:159>> | <<must>> | +[[req:159,R-159]] All project documents are examined once by Jonathan Overes from Avans +|=== + +[appendix] +== Attachments + +[[fig:vault-disp-sketch]] +.7 Segment 4 digit screen (sketch) +image::img/vault-disp-sketch.png[] + +[[fig:neotrellis-hardware-sketch]] +.NeoTrellis example (sketch) +image::img/neotrellis-hardware-sketch.png[] + +[[fig:neotrellis-toggle]] +.Toggling LEDs after the user pressed on the button (purple dot) +image::img/neotrellis-toggle.png[width=45%] + +[[fig:neotrellis-start]] +.Starting pattern of the NeoTrellis puzzle +image::img/neotrellis-start.png[width=45%] + +[[fig:software-example-sketch]] +.Software puzzle example with logical ports (left) and letters A through F (right) +image::img/software-example-sketch.png[] + +[[fig:software-codes-sketch]] +.The different code fragments corresponding with the letter A through F +image::img/software-codes-sketch.png[height=35%] + +[[fig:software-cable-sketch]] +.Software puzzle cable example +image::img/software-cable-sketch.png[] + +[[fig:hardware-example-sketch]] +.Hardware puzzle on the puzzle box +image::img/hardware-example-sketch.png[] + +[[fig:vault-keypad]] +.Buttons combinations with level numbers in the top left +image::img/vault-keypad.png[width=45%] + +include::share/footer.adoc[] + diff --git a/docs/research.adoc b/docs/research.adoc new file mode 100644 index 0000000..a6ef255 --- /dev/null +++ b/docs/research.adoc @@ -0,0 +1,749 @@ +:document: Research +include::share/meta.adoc[] + +== Microcontrollers used in the current state. + +=== Research + +// TOOD: figures 1 through 4 waren geen cross-references meer in het originele +// document, en moeten nog opgelosd worden +The boxes consist of four sides in use (games) which can be seen in the +Attachments figures 1 through 4. One of the games (safe puzzle) seems to be +unfinished upon visual inspection which also includes a lose display. The games +that seem to be implement are the following: + +* Safe puzzle: <<fig:vault-side>> +* Neotrellis puzzle: <<fig:neotrellis-side>> +* Software puzzle: <<fig:software-side>> +* Hardware puzzle: <<fig:hardware-side>> + +The bus cable (<<fig:bus-connector>>) consists out of five connectors with ten +lines, the main controller (as already known) is a Raspberry Pi 3B+ with an 8GB +MicroSD card and a custom PCB 'head' see <<fig:main-pcb>>. There are 4 custom +PCB's with a microcontroller slot and a connector for the 10-line bus, two of +those are used for the sides and one is unused and also empty see +<<fig:unknown-pcb>>. Of all the custom PCB's only one seems to be professional +made from a factory see <<fig:hardware-pcb>>, the others seem to be made at +school in the lab. + +* Safe puzzle PCB: <<fig:vault-pcb>> +* Software puzzle PCB: <<fig:software-pcb>> + +There is also one development board from Adafruit see <<fig:neotrellis-pcb>> +but this one does not seem to be connected to any bus. The underside of the box +has a large light sensitive sensor which is also not connected see +<<fig:light-sensor>>. + +The more professional custom-made PCB has an ESP32-PICO-D4 as microcontroller +see <<fig:hardware-pcb>>. The other custom-made PCB's do not have any +microcontroller installed but seem to be made to be used by a ESP32-PICO-KIT +V4/V4.1. + +=== Summery + +There seems to be four games implemented where of only one may work because of +its integrated ESP32, the other three also may work if the missing ESP32's are +included but it is unclear if the 'unknown' PCB should be used in combination +with the Neotrellis panel and what need to be done with the safe side to get it +to work. + +=== Conclusion + +It could be quite possible that the 'unknown' PCB should be connected to the +Neotrellis panel based on the data lines properties. But besides that, only the +software may need to be updated in order to run on the ESP32's as soon as the +'missing' ESP32 dev kits are in stock. + +But everything could be made less complex, more cost effective and power +efficient by using other type of microcontrollers. The RPI could be downgraded +to a RPI Zero or an ESP32 dev kit. The microcontrollers used for the sides +could be replaced by a much smaller chip like the ATTiny or a Atmega32. + +This can only be done if the following requirements are met: + +* Dev. Board or daughterboard with spring or screw terminals +* A microcontroller with enough IO +* A microcontroller with all the required communication busses. +* It may not cost more than one day to rebuild the system. + +A follow up research should reveal which microcontroller and dev. Board / +daughterboard is best fitted for this project. + +=== NOTES + +The Dev kits are not available and newer types do not meet the current +footprint of the custom PCB's. So it is suggested that the next group will +design a pcb with another MCU on it in order to match the pin layout and make +use of a smaller more efficient chip. Or they can convert the prototype PCB's +to a production version with the ESP32 chip on it (if the chip it self it still +available at that time) or pick another MCU in that stage anyway. + +The hardware side uses a single DSP (HC166) to process the input of the +switches, the software side uses two shift registers (74HC59SD) to control the +LED's. + +Issues + +. Button row 4, col 1 for the safe side needs to be replaced (missing a pin) +. LED strips for the software and hardware sides only work for 50%. + +==== (Appendix Loek) + +The puzzle bus connector (see <<fig:bus-connector>>) appears to have 10 +conductors in total. The hardware schematics from 21-22 reveal the pinout of +this bus connector, which is shown in <<fig:puzzle-bus-connector>>. + +After searching through the other design documents from this year, no +references to the "HarwareInterrput" line or interrupts in general were found. +The puzzle source code folders also did not contain code which initialized this +line as an interrupt. It is assumed this line is unusable, as it is connected +but has no specified functionality. + +// this is super verbose but works +:fig-caption: {figure-caption} {counter:figure-number} +[[fig:puzzle-bus-connector,{fig-caption}]] +.Puzzle bus pinout +[caption="{fig-caption}. "] +==== +image::img/puzzle-bus-connector.svg[scale=150%] + +[.text-center] +Source: cite:[2122_design] + +(Connector key is next to pin 5) +==== + +== Controllers + +To mitigate power consumption issues discovered by the 21-22 group, new +controllers were chosen for this year's (23-24) run of the puzzle box project. +This section compares different microcontroller options for both the main +controller and controller used in puzzle modules. + +=== Main controller + +The following criteria were used to compare MCUs that are suitable candidates +as main controller unit: + +* Must have at least 1 I^2^C peripheral (<<reqs.adoc#req:main-i2c-ctrl>>). +* Must be able to connect to a standard 802.11b/g/n access point + (<<reqs.adoc#req:main-802-11-ap>>). +* Must be able to serve TCP socket connection(s) + (<<reqs.adoc#req:main-tcp-socket>>). +* Should be power efficient (<<reqs.adoc#req:main-pwr-efficient>>). +* Is available as a development kit from Farnell + (<<reqs.adoc#req:main-devkit-supplier>>). + +<<tab:main-mcu>> lists the considered MCU options matching the above criteria. +This list is a compilation of microcontroller offerings from the following +manufacturers: Atmel, Espressif, Raspberry Pi. + +Of these controllers, the Raspberry Pi RP2040 has the lowest clock speed and +highest memory. Its lower clock speed means that it will likely draw less power +than the other options. It also happens to be less expensive than all other +options. Due to these reasons, the RP2040 was chosen as main controller MCU. +The Raspberry Pi Pico W board is utilized during development. + +[[tab:main-mcu]] +.Main controller MCU candidates +[%autowidth] +|=== +| Model | I^2^C peripheral count | SRAM | Flash | Clock speed + +| WFI32E01PC | 1 | 256 KB | 1 MB | 200 MHz +| ESP8266 | 1 | 50 KB | 16 MB | 160 MHz +| RP2040 | 2 | 264 KB | 2 MB | 133 MHz{empty}footnote:[Adjusting the clock speed for the main controller is not necessary, even though the RP2040 supports clock speed configuration (see <<tab:pm-mcu>>)] +|=== + +=== Puzzle module controller + +The following criteria were used to compare MCUs that are suitable candidates +for controlling the puzzle modules: + +* Must have at least 1 I^2^C peripheral (<<reqs.adoc#req:pm-i2c-ctrl>>). +* Should has enough I/O ports to directly control moderately complex puzzles + (<<reqs.adoc#req:pm-gpio>>). +* Should be power efficient (<<reqs.adoc#req:pm-pwr-efficient>>). +* Is available as a development kit from Farnell + (<<reqs.adoc#req:pm-devkit-supplier>>). +* Has a configurable clock speed (<<reqs.adoc#req:pm-clk-ctrl>>). + +<<tab:pm-mcu>> lists the considered MCU options matching the above criteria. +This list is a compilation of microcontroller offerings from the following +manufacturers: Atmel, STMicroelectronics, Raspberry Pi. + +All the MCUs listed in <<tab:pm-mcu>> support some version of a low-power mode. +The RP2040 is again included and appears here because it supports clock speed +configuration and has a clock gate for each peripheral [2], which may make it a +feasible option with regards to power consumption. Choosing the RP2040 may also +simplify the development process as only a single MCU toolchain needs to be +maintained. + +The Microchip PIC16F15276 is the most power efficient on this list and is the +recommended MCU for puzzle modules. It supports both extreme underclocking and +has a low power mode. This chip is available as the 'MICROCHIP EV35F40A' +evaluation kit. + +Because this year's run of this project was carried out by a team consisting +only of software students, this choice remains as a recommendation. The puzzle +box hardware may still use the ESP32 development kits from the 21-22 group. + +[[tab:pm-mcu]] +.Puzzle module controller MCU candidates +[%autowidth] +|=== +| Model | I/O ports | I^2^C peripheral count | SRAM | Flash | Clock speed + +| PIC16F15276 | 40 | 1 | 2 KB | 28 KB | 32 kHz – 32 MHz +| STM8L152C6T6 | 41 | 1 | 2 KB | 32 KB | 38 kHz – 16 MHz +| RP2040 | 26 | 2 | 264 KB | 2 MB | 10 MHz – 133 MHz +|=== + +=== Conclusions + +The main MCU that is utilized for this year's (23-24) run of this project is +the Raspberry Pi RP2040 on the Raspberry Pi Pico W. The recommended MCU for new +puzzle modules is the Microchip PIC16F15276. The existing puzzle modules still +utilize the ESP32 development kits chosen by the 21-22 group. + +== Main Controller OS + +Because the hardware produced by the 21-22 group uses a Raspberry Pi 3B+ as +main controller, the usage of this specific board was turned into a +prerequisite for this project (??). The Raspberry Pi 3B+ uses the Broadcom +BCM2837 chipset, which supports the aarch64 instruction set cite:[rpicpu]. +Because the puzzle box should be able to run on battery power (??), the CPU +should be under as little load as possible to preserve power. Choosing the +right operating system is crucial to ensure maximum control over which +processes consume CPU resources. This section indexes the available operating +systems that support the aarch64 instruction set to support the decision for +main controller OS in the design document [??]. + +Each operating system is evaluated on the following criteria: + +* Number of 'base' software packages (pre-installed software) +* Size of base installation (base disk utilization) +* Time required to get set-up +* Software iteration time (amount of work required to complete a + compile-upload-run cycle) +* Whether it is covered by the standard curriculum at Avans University of + Applied Sciences + +All of these factors (except for curriculum coverage) should be low. This means +that operating systems that are minimalistic by default are preferred. + +=== Raspberry Pi OS Lite (Debian) + +The manufacturer of the Raspberry Pi boards publishes a modified version of the +Debian Linux distribution which is aimed at general-purpose users [??]. It +comes with an easy-to-use installer, and is the only OS officially supported by +the manufacturer of this board. All the required drivers come pre-installed, +which means this OS has very little setup time. + +Raspberry Pi OS comes in 3 different varieties [??], the 'Light' variant of +which is the most minimalistic. This variant comes with the least number of +pre-installed software packages and has a base image size of 2.6 GiB after +extracting the archive from the official download page [??]. + +This exact OS is not covered in the normal curriculum, but other derivative +distributions of Debian are, so this OS is be considered familiar. + +=== Void Linux + +=== Linux From Scratch + +=== Bare-metal Firmware + +=== Conclusions + +<<tab:main-os>> summarizes the considered operating systems based on the +criteria outlined at the start of this section. + +[[tab:main-os]] +.Main controller OS comparison +[%autowidth] +|=== +| | Packages | Size | Set-up time | Iteration time | Covered + +| Raspberry Pi OS Lite | 592 | 2.6 GiB | Medium | Short | Yes +| Void Linux | 126 | 334 MiB | Short | Short | No +| Linux from scratch | n/a | 25+ MiB | Long | Long | Yes +| Bare-metal firmware | n/a | n/a | Long | Long | No +|=== + +== Unit Testing Framework Research (Thomas) + +=== Research question + +Which unit testing frameworks are available and relevant to the project, +keeping in mind RTOS-specific frameworks, and what features do they have? + +=== General framework comparison + +In <<tab:test-framework>> is a general comparison shown of multiple different +frameworks. These are either a header-only testing framework, a testing +framework specifically designed for embedded systems, a general-purpose {cpp} +library, or a specialized {cpp} unit testing framework. The following +subsections will give more information about each framework and their features. + +[[tab:test-framework]] +.General testing framework comparison cite:[Ali24,Joh21] +[%autowidth] +|=== +| Framework | Language | Lightweight | Mocking Support | Portable + +| CppUTest | C/{cpp} | Yes | Yes (CppUMock) | Yes +| Catch | {cpp} | Yes | Limited | Yes +| Doctest | {cpp} | Yes | Limited | Yes +| Google Test | {cpp} | No | Yes (GMock) | Yes +| Boost.Test | C | Yes | Limited | Yes +|=== + +=== CppUTest + +A C/{cpp} based unit testing framework, designed specifically for testing C/{cpp} +applications on embedded systems. It can be used for testing general C/{cpp} code +and supports TDD-style tests (Test-Driven Development). This is due to it being +a header-only testing framework, and not requiring linking of external +libraries. + +It offers multiple different assertion macros for verifying expected behavior +and supports the mocking of functions and memory leak detection. It works on +most platforms, including Unix-based systems, Cygwin, and MacOS. It can be +integrated with build systems like Make or CMake. The framework is also +compatible with RTOS-based applications and Raspberry Pi, both require +configuring the development environment to allow CppUTest to work. It supports +up to the {cpp}17 standard, after which there is experimental support for the +{cpp}20 & {cpp}23 standards. cite:[Cpp24] + +=== Catch + +A {cpp} unit testing framework designed in a straightforward and expressive +manner. Just like CppUTest it is a header-only testing framework and doesn't +have any external dependencies, but instead of supporting TDD-style testing, it +supports BDD-style testing. Which is Behavior-Driven Development-style testing, +where test cases can be written in a natural language format (Given-When-Then +statements). + +It offers a simplified testing syntax, and assertions look like {cpp} Boolean +expressions. It allows the developer to organize tests into sections, providing +a local (in file) way to share setup and teardown code. It also allows +developers to tag tests and run tests selectively using their tags. The +framework is also compatible with RTOS-based applications and can be used on a +Raspberry Pi. It supports up to the {cpp}20 standard, after which there is +experimental support for the {cpp}23 standard. cite:[Cat24] + +=== Doctest + +A {cpp} based unit testing framework, designed to be minimalistic, easy to +integrate and expressive. It supports {cpp}11/14/17/20/23 and allows for writing +tests directly in production code, due to it being a single-header library. + +The tests written with this framework are automatically discovered and executed +without any manual registration. It has no separate compilation steps for the +tests as it is header-only and is thread-safe by default. It also allows for +customizable test output formats and is compatible with RTOS/Raspberry Pi. +cite:[Doc24] + +=== Google Test + +A {cpp} based testing framework, following the xUnit architecture, which is used +for structuring tests. It is a single-header library just like doctest; +however, it does require the developer to write tests in separate test files. +It has minimal external dependencies allowing it to easily integrate into +projects. + +It supports mocking functions and has a large variety of assertions for +verifying expected behavior, including death tests. It allows the developer to +run tests multiple times with different input values and the developer can set +up common test environments using fixtures. Furthermore, it allows for custom +assertions and test output. It is also thread-safe by default. It supports +testing for RTOS/Raspberry Pi, as well as {cpp}20 and lower. There is +experimental support for {cpp}23. cite:[goo24] + +=== Boost.Test + +A {cpp} based unit testing framework, designed for writing, and organizing unit +tests. It is compatible with {cpp}11/14/17 and can be integrated with {cpp} +projects running on RTOS platforms. However, even though you can use Boost.Test +on the Raspberry Pi, it does not have direct Raspberry Pi-specific features. + +It supports the creation of test suites, allowing the developer to group test +cases into logical suites. Furthermore, it provides a wide range of assertion +macros for checking test conditions and can generate test result reports in +various formats (e.g. XML, human-readable). It works on most platforms, +including Windows, Linux, macOS, and other Unix systems. cite:[Boo24,Git24] + +=== Conclusion + +After going through the researched unit tests a few things can be noted for +each framework. CppUTest has been designed for embedded system testing and has +features for memory leak detection and mocking. However, it is supported until +{cpp}17 while the other versions for {cpp} are all experimental. Catch allows for +easy test creation. Furthermore, it allows for test tagging meaning you are +able to run tests selectively using their tags and it is supported up to {cpp}20. +Doctest allows for writing tests directly in production code, meaning a second +test file is not necessary. It has an automatic test discovery function, as +well as being thread safe on default and allowing customizable test output +formats. Google Test uses xUnit test architecture and supports mocking +functions. It has a large variety of assertions including death assertions and +supports running tests multiple times with different input values. It allows +custom test assertions / test output and is thread-safe by default. It also has +support up to {cpp}20. Boost.Test allows for writing and organizing unit tests +and has support for {cpp}11/14/17. It supports the creation of test suites, +making test grouping possible. It has a large range of assertion macros and can +generate test result reports in multiple different formats. + +After going through the notable features of the different testing frameworks +Google Test was chosen as the testing framework for this project. As it has a +structured syntax, readability and a lot of features required for reliable +testing. Including mocking tests, a large amount of assertions, multiple test +with different input support, and lastly being supported in the newest +non-experimental version of {cpp}. + +== Original Puzzle Box Functionality Research (Thomas) + +=== Research question + +What gameplay functionality should the original puzzle box have had? + +=== Group 2019-2020 + +==== Hardware Puzzle + +The hardware puzzle was to be a puzzle consisting of two parts, a puzzle using +a 555-oscillator and a puzzle using a multi meter. The 555-oscillator puzzle +would be used to give students an idea how they can create a typical hardware +application. The multi meter puzzle would introduce students to the usage of +the multi meter, while giving the bomb group the values measured using the +multimeter which then correlates with 3 different potentiometers. + +==== Software Puzzle + +The software puzzle was to be a puzzle which introduces the student to an +Arduino. The puzzle box would contain an Arduino, a few switches, and a few +LEDs. The student would be able to program the Arduino by using a visual +drag-and-drop programming language. This program would have to get an input +value, which is given by the switches, and an output value shown on the LEDs. +The idea is to get both the input and output value correspond with each other. + +==== Automation Puzzle + +The automation puzzle would introduce the student to a factory structure, +consisting of multiple 'tubes' which contain a certain color. These colors +could be mixed by the students to get the corresponding colors shown in their +game manual. The tubes which contain these colors would have to follow a +specific route, and are to join with other tubes, creating new colors which +makes the puzzle a bit more complex. The valves to open and close the tubes are +grouped to add another difficulty level to the puzzle. See +<<fig:automation-example>> for an example of this puzzle. + +==== Safe Puzzle + +The safe puzzle is a puzzle created to test the communication skills of the +student. It shows a code on the puzzle box, which then needs to be given to +students with the game manual, who give the students at the puzzle box the +button they must click. This needs to be done 5 times before the safe opens and +the last code is given to defuse the bomb if a wrong button is clicked the safe +resets and they need to start over from the beginning. See +<<fig:vault-interface>> & <<fig:vault-keypad-full>>. + +=== Group 2020-2021 + +The automation and safe puzzle were not changed this year. + +==== Hardware Puzzle + +The hardware puzzle was revised this year, it would include a quiz which helps +the students with solving the puzzle and has a completely different interface +from the first one. The quiz questions can be found in the document +"Speluitleg_puzzlebox_39-06-2021", which can be found in this project's +directory. Once the students solve the quiz, they can push the button found in +the puzzle, and morse code will be given to the students. The code given using +morse code is one of the required codes to disarm the bomb. + +==== Software Puzzle + +The software puzzle was also revised this year, instead of a puzzle using a +visual drag-and-drop programming language it would instead contain two columns +which would need to relate to each other. One column shows digital ports, which +is part of 'Digitale Techniek' and the second column contains letters +corresponding with C code. This code can be found in the game manual and +requires the students to communicate between each other which letter which code +is. Once all cables are connected the LEDs above the puzzle will glow in +binary, this needs to be deciphered into decimals to get another code to defuse +the bomb. An example of this puzzle can be seen in <<fig:software-example>> & +<<fig:software-codes>>. + +==== Neotrellis Puzzle + +A new puzzle was added to the box, namely a neotrellis-type puzzle. This would +mainly be a puzzle requiring a lot of figuring out, as it does not correlate +with any of the three directions in the Technical Computer Science curriculum. +It would contain an 8x8 LED button system, where you can toggle the LEDs by +clicking on a button. You complete the puzzle by getting a matching pattern +with the one given in the game manual. See <<fig:neotrellis-toggle>>, +<<fig:neotrellis-example>> & <<fig:neotrellis-start>> for examples of this +puzzle. + +=== Group 2021-2022 + +The software, automation, safe, and neotrellis puzzles were not changed this +year. + +==== Hardware Puzzle + +The hardware puzzle was revised again this year, removing the quiz, and making +it a data flow puzzle using logic gates and circuitry. There wasn't any more +information about the way to solve the puzzle. See <<fig:hardware-side>> for an +example of this puzzle on the puzzle box. + +=== Group 2022-2023 + +No puzzles were changed this year. + +=== Conclusion + +The puzzles have gone through a lot of changes and designs, but in the end the +following puzzles will be used from project group 2019-2020: + +* Automation puzzle +* Safe puzzle + +The following puzzles will be used from project group 2020-2021: + +* Software puzzle +* Neotrellis puzzle + +And the following puzzle will be used from project group 2021-2022: + +* Hardware puzzle + +The way these puzzles are solved has been summarized in this research document, +but the most complete versions of how to solve these puzzles are given in the +group's respective design document. + +== Research of hardware designs of previous groups (21-22 and 22-23) + +This part of the research looks at the hardware designs of the previous groups +that did this project. These are compared with each other and finally the +points of interest are given that the software must meet in order to work with +this hardware. + +=== Design of 21-22 group + +This group has developed a puzzle box with a puzzle on all sides. Each puzzle +has to answer a question from the different directions in this study. So, think +software, hardware and an automation puzzle. The 21-22 group designed and +started the realisation of a physical puzzle box. The status of the puzzle box +is a carved wooden box containing one mainboard hat for the Raspberry PI 3B+ +(chosen for its availability), one puzzle based on the ESP32-PICO-D4 system on +chip (SOC) and three puzzle prototypes based on the ESP32-PICO-KIT (D4 +development kit). The puzzle boards are mounted on the sidewalls of the wooden +box and are game technically largely functional. Behind this chosen hardware is +not a thoughtful choice but was chosen mainly due to availability and because +these components have been used by students before. + +The four puzzles have game-playing software, but the puzzles have not yet been +play-tested. All puzzles run on the same state machine, the communication +module for I2C communication between the puzzles is integrated but not yet +fully implemented. So, communication is possible but not processed in the state +machine other than resetting the game and reading the state. The I2C module for +the mainboard has also been worked out in a {cpp} application for the Raspberry +PI 3B+. + +To communicate via a network between the puzzle box and the bomb, a hub is +used. Next to the connection between the devices in the local network, the hub +will also connect to the internet for time synchronization and external +configuration. The hub will also act as a webserver for the configuration of +the boxes and bombs and, as a network manager for the communication between the +devices. The hub makes also use of a Raspberry Pi 3B. The raspberry pi for the +main hub will be combined with a wireless USB dongle due to the need for +multiple wireless radios. The USB dongle used for this project has not been +defined, any dongle supporting the 802.11x standard will qualify. + +=== Design of 22-23 group + +What did the group from 22-23 develop as a hardware design? + +At the start of their project, the 22-23 group has been busy re-structuring the +puzzle box developed by 21-22. The basis of 21-22 was not well structured, +there were low requirements and specifications and little research available. +As a result, this group (21-22) did have time to realise their design. However, +the end result of this was a half-working puzzle box with no coherent hardware. +As a result, the 22-23 group chose not to implement hardware but first +structured the project properly with requirements and then went on to create a +thoughtful design. + +The new design consists of a mainboard connected to the puzzle box via a puzzle +bus (consisting of: 5V, 3.3V and I2C). The idea of the puzzle box is that it is +developed modular way so that puzzles can easily be removed and inserted. +Therefore, one standard interface (puzzle bus) is designed to which every +puzzle can be connected. Each puzzle therefore also needs its own +microcontroller to control the logic. So, the choice of microcontroller of both +the puzzles and the mainboard has not yet been made by this group. However, +this group did give a number of points that the microcontroller must meet in +order to work with the hardware design: + +* Operationeel op een voedingsspanning van 3.3V of 5V +* Ondersteuning van I2C +* Voldoende I/O voor aansturing puzzels +* Sleep mode (aanbevolen) + +The main architecture (<<fig:architecture-main>>) includes the USB-C adapters, +puzzle boxes, bombs, puzzle box hub and the computer. These components are +powered by batteries and communicate with each other via Wifi meshing (is not +yet working). Through the puzzle box hub, a computer can be used to configure +and start the system. So, the puzzle box itself consists of several sides on +which a puzzle can be played. With the outcomes of all these puzzles, the +entire box can be solved and opened. + +[[fig:architecture-main]] +.Main architecture +image::img/external-architecture-old.png[width=45%] + +=== What are the differences between the designs of the 21-22 and 22-23 groups? + +Overall, the designs of the two groups are not far apart. The topology is +similar to each other. What does differ is that the 21-22 group chose available +ESP32 modules for the separate puzzles, while the 22-23 group left the choice +of microcontrollers open. This is because this group consisted only of hardware +students and the choice of microcontrollers also affects the software to be +written. The other difference is that the 21-22 group only tells how they +realise the design without indicating which design choices they made for this +and what other options there were. The 22-23 group did do this and described it +in the design document. +// TODO Refer to design document + +=== What to consider when developing software + +The hardware group (22-23), in addition to the recommendations in the +requirements package, has provided enough information to work with as a +software group. +// TODO: Refereren naar eisenpakket 22/23 + +It was recommended by last year's group that software students pick up the +following steps: + +. Choose suitable microcontrollers +. Understand the operation of wifi mesh + set up the web page +. Create software design for puzzles and mainboard +. Integrate the software into the puzzle box + +With all these recommendations combined, the following points should be kept in +mind when developing the software: + +* Software should be written separately for each puzzle as a module. ++ +As described, each puzzle is a separate module so that these puzzles can be +adapted later when required. So, provide a good architecture in which puzzles +can be modified, added or removed without changing the whole structure of the +software. +* Make sure the software works with the given hardware designs of groups 21-22 + and 22-23. Elwin's research showed that the main board consists of a + Raspberry Pi. The puzzles are run on an ESP32, so the software for this + should consist of a language compatible with these devices, for example {cpp} + or Python. +* The individual modules communicate via the I2C communication protocol. So, + make sure it is clear that the Raspberry Pi is the master and the ESP32s + serve as slaves. The addresses of the separate ESP32s should be unique and + properly configured for this purpose. +* The software must be flexible to allow modules to be modified later +* If the puzzles need to be modified later, the software must be written in a + way that can be understood. Think of good documentation and comments + accompanying the code. In addition, use programming languages from the + standard curriculum of the program. So that other students can continue + working with them later. +* The 22-23 has not yet been able to calculate the power supply of the puzzles, + so this should be taken into account when implementing the systems. Think of + a certain function or power-saving mode that turns off certain + puzzles/modules when not in use. +* Provide test documents +* Provide well-documented software, think comments in the code and a handover + document. The intention is that after this project, the software will be + almost ready for use, groups should also be able to understand the software + at a later stage. Also, for students with lesser software knowledge. + +[appendix] +== Attachments + +[[fig:vault-side]] +.Safe side +image::img/vault-side.jpg[width=45%] + +[[fig:neotrellis-side]] +.Neotrellis side +image::img/neotrellis-side.jpg[width=45%] + +[[fig:software-side]] +.Software side +image::img/software-side.jpg[width=45%] + +[[fig:hardware-side]] +.Hardware side +image::img/hardware-side.jpg[width=45%] + +[[fig:software-pcb]] +.Software side PCB +image::img/software-pcb.jpg[width=45%] + +[[fig:vault-pcb]] +.Safe side PCB +image::img/vault-pcb.jpg[width=45%] + +[[fig:unknown-pcb]] +.Unknown PCB +image::img/unknown-pcb.jpg[width=45%] + +[[fig:hardware-pcb]] +.Hardware side PCB +image::img/hardware-pcb.jpg[width=45%] + +[[fig:bus-connector]] +.Bus cable +image::img/bus-connector.jpg[width=45%] + +[[fig:neotrellis-pcb]] +.Neotrellis side PCB +image::img/neotrellis-pcb.jpg[width=45%] + +[[fig:light-sensor]] +.Light sensor +image::img/light-sensor.jpg[width=45%] + +[[fig:main-pcb]] +.RPI PCB (Head) +image::img/main-pcb.jpg[width=45%] + +[[fig:automation-example]] +.Automation puzzle example +image::img/automation-example.png[width=35%] + +[[fig:software-example]] +.Software puzzle box example +image::img/software-example.png[width=45%] + +[[fig:software-codes]] +.Software puzzle game manual example +image::img/software-codes.png[height=30%] + +[[fig:neotrellis-toggle]] +.Neotrellis puzzle toggle example +image::img/neotrellis-toggle.png[width=45%] + +[[fig:neotrellis-example]] +.Neotrellis puzzle 8x8 example +image::img/neotrellis-example.png[] + +[[fig:neotrellis-start]] +.Neotrellis pattern example +image::img/neotrellis-start.png[width=45%] + +[[fig:vault-interface]] +.Safe puzzle schematic example +image::img/vault-interface.png[width=40%] + +[[fig:vault-keypad-full]] +.Safe puzzle combinations given in the manual +image::img/vault-keypad-full.png[width=45%] + +include::share/footer.adoc[] diff --git a/docs/share/footer.adoc b/docs/share/footer.adoc new file mode 100644 index 0000000..b3edec3 --- /dev/null +++ b/docs/share/footer.adoc @@ -0,0 +1,4 @@ +include::references.adoc[] + +include::glossary.adoc[] + diff --git a/docs/share/glossary.adoc b/docs/share/glossary.adoc new file mode 100644 index 0000000..871a8e9 --- /dev/null +++ b/docs/share/glossary.adoc @@ -0,0 +1,10 @@ +[appendix] +== Glossary + +[glossary] +RPI:: Raspberry Pi +Main board:: The main board is the PCB on the bottom of the puzzle box, this communicates with the puzzles and the bomb +Puzzle box hub:: The puzzle box hub communicates with the puzzle box and the bomb, as well as helps with configuring them +SID:: security identifiers +game operator:: person who organizes a puzzle box play session + diff --git a/docs/share/meta.adoc b/docs/share/meta.adoc new file mode 100644 index 0000000..2e15b79 --- /dev/null +++ b/docs/share/meta.adoc @@ -0,0 +1,43 @@ +// (these files are included from the parent directory) +:pdf-theme: ./theme.yml +// :pdf-fontsdir: ./res/font +:bibtex-file: ./share/refs.bib + +// document / project info +ifndef::document[] +:document: DOCUMENT TITLE +endif::[] +:project: Project Puzzlebox +:revnumber: 0.0 +:revdate: 2024-04-01 +:revremark: draft +:author_1: Thomas in ‘t Anker +:author_2: Loek Le Blansch +:author_3: Lars Faase +:author_4: Elwin Hammer + +// numbering / reference styles +:sectnums: +:toclevels: 4 +:pagenums: +:xrefstyle: short + +// (set and display title) += {document}: {project} +// start each document with a title page +:title-page: +// followed by a table of contents +:toc: + +[discrete] +== List of Figures +list-of::image[] + +[discrete] +== List of Tables +list-of::table[] + +<<< + +// also https://docs.asciidoctor.org/asciidoc/latest/attributes/document-attributes-ref + diff --git a/docs/share/references.adoc b/docs/share/references.adoc new file mode 100644 index 0000000..e7f5b61 --- /dev/null +++ b/docs/share/references.adoc @@ -0,0 +1,5 @@ +[appendix] +== References + +bibliography::[] + diff --git a/docs/share/refs.bib b/docs/share/refs.bib new file mode 100644 index 0000000..b6fe625 --- /dev/null +++ b/docs/share/refs.bib @@ -0,0 +1,194 @@ +% see https://tug.ctan.org/info/biblatex-cheatsheet/biblatex-cheatsheet.pdf + +@online{githubprojects, + title = {About Projects - GitHub Docs}, + url = {https://docs.github.com/en/issues/planning-and-tracking-with-projects/learning-about-projects/about-projects}, + msbib-accessed = {2024-02-15}, + year = {2024}, +} + +@online{clockify, + title = {Clockify - The most popular free time tracker for teams}, + url = {https://clockify.me/}, + msbib-accessed = {2024-02-15}, + year = {2024}, +} + +@online{gitscm, + title = {Git}, + url = {https://git-scm.com/}, + month = feb, + msbib-day = {15}, + year = {2024}, +} + +@online{Kee23, + title = {Keep talking and nobody explodes - defuse a bomb with your friends.}, + url = {https://keeptalkinggame.com/}, + month = oct, + msbib-day = {10}, + year = {2023}, +} + +@online{gitrepo, + author = {Blansch, Loek Le and Hammer, Elwin and Faase, Lars and in 't Anker, Thomas}, + title = {lonkaars/puzzelbox: Avans Hogeschool project Puzzelbox}, + url = {https://github.com/lonkaars/puzzelbox}, + month = feb, + msbib-day = {15}, + year = {2024}, +} + +@online{sharepoint, + author = {Blansch, Loek Le and Hammer, Elwin and Faase, Lars and in 't Anker, Thomas}, + title = {PROJ-PUZZLE}, + url = {https://avans-my.sharepoint.com/:f:/r/personal/tv_intanker_student_avans_nl/Documents/PROJ-PUZZLE?csf=1&web=1&e=wbKFig}, + month = feb, + msbib-day = {15}, + year = {2024}, +} + +@online{semver, + author = {Preston-Werner, Tom}, + title = {Semantic Versioning 2.0.0}, + url = {https://semver.org/}, + month = jun, + msbib-day = {6}, + year = {2023}, +} + +@online{atlassiankanban, + author = {Radigan, Dan}, + title = {Kanban - A brief introduction}, + url = {https://www.atlassian.com/agile/kanban}, + msbib-accessed = {2024-02-15}, + year = {2024}, +} + +@techreport{Bek23, + author = {Bekema, Frank and Gense, Jasper}, + title = {Programma van Eisen Puzzel box}, + year = {2023}, +} + +@techreport{styleguide, + author = {Blansch, Loek Le and Hammer, Elwin and Faase, Lars and in 't Anker, Thomas}, + title = {Style guide}, + location = {'s-Hertogenbosch}, + publisher = {Avans University of Applied Sciences}, + year = {2024}, +} + +@online{Wik22, + author = {Wikipedia-contributors}, + title = {MOSCOW-Methode}, + url = {https://nl.wikipedia.org/wiki/MoSCoW-methode}, + month = apr, + msbib-day = {5}, + year = {2022}, +} + +@online{rpicpu, + url = {https://www.raspberrypi.com/documentation/computers/processors.html}, +} + +@online{Ali24, + title = {A list of open-source C++ libraries}, + url = {https://en.cppreference.com/w/cpp/links/libs}, + msbib-accessed = {2024-02-25}, +} + +@online{Boo24, + title = {Boost.Test - 1.75.0}, + url = {https://www.boost.org/doc/libs/1_75_0/libs/test/doc/html/index.html}, + msbib-accessed = {2024-02-28}, +} + +@online{Git24, + title = {GitHub - boostorg/test: The reference C++ unit testing framework (TDD, xUnit, C++03/11/14/17).}, + url = {https://github.com/boostorg/test}, + msbib-accessed = {2024-02-28}, +} + +@online{Neo, + title = {Neotrellis}, + url = {https://learn.adafruit.com/adafruit-neotrellis/overview}, +} + +@techreport{rp2040ds, + title = {RP2040 Datasheet}, + publisher = {Raspberry Pi Ltd}, + year = {2024}, +} + +@online{Cat24, + author = {Catchorg}, + title = {Github - catchorg/Catch2: A modern, C++-native, test framework for unit-tests.}, + msbib-accessed = {2024-02-25}, +} + +@online{Cpp24, + author = {Cpputest}, + title = {Github - cpputest/cpputest: CppUTest unit testing and mocking framework for C/C++.}, + url = {https://github.com/cpputest/cpputest}, + msbib-accessed = {2024-02-25}, +} + +@online{Doc24, + author = {Doctest}, + title = {Github - doctest/doctest: The fastest feature-rich C++11/14/17/20/23 single-header testing framework.}, + url = {https://github.com/doctest/doctest}, + msbib-accessed = {2024-02-25}, +} + +@online{goo24, + author = {google}, + title = {GitHub - google/googletest: GoogleTest - Google Testing and Mocking Framework.}, + url = {https://github.com/google/googletest}, + msbib-accessed = {2024-02-28}, +} + +@online{Joh21, + author = {Johnston, P.}, + title = {Embedded systems testing resources}, + url = {https://embeddedartistry.com/blog/2018/10/18/embedded-systems-testing-resources/}, + month = jun, + msbib-day = {10}, + msbib-accessed = {2024-02-25}, + year = {2021}, +} + +@techreport{research, + author = {Blansch, Loek Le and Hammer, Elwin and Faase, Lars and in 't Anker, Thomas}, + title = {Research Document}, + location = {'s-Hertogenbosch}, + publisher = {Avans University of Applied Sciences}, + year = {2024}, +} + +@techreport{2021_design, + author = {Creemers, Merel and van Wiechen, Joost and Lengowski, Vincent and Maas, Justin}, + title = {Ontwerpdocument}, + language = {dutch}, + location = {'s-Hertogenbosch}, + publisher = {Avans University of Applied Sciences}, + year = {2021}, +} + +@techreport{2122_handover, + author = {van Gastel, Lucas and de Bruin, Julian and Rockx, Toon and van Kuijk, Alex and Baars, Jef}, + title = {Overdrachtsdocument}, + language = {dutch}, + location = {'s-Hertogenbosch}, + publisher = {Avans University of Applied Sciences}, + year = {2022}, +} + +@techreport{2122_design, + author = {van Gastel, Lucas and de Bruin, Julian and Rockx, Toon and van Kuijk, Alex and Baars, Jef}, + title = {Design document}, + language = {dutch}, + location = {'s-Hertogenbosch}, + publisher = {Avans University of Applied Sciences}, + year = {2022}, +} diff --git a/docs/theme.yml b/docs/theme.yml new file mode 100644 index 0000000..b26ad75 --- /dev/null +++ b/docs/theme.yml @@ -0,0 +1,100 @@ +# extends: default + +page: + size: a4 + margin: [1in, 1in, 1in, 1in] + numbering: + start-at: toc + +base: + hyphens: true + text-align: justify + font-size: 10.5 + +prose: + margin-bottom: 3mm + +# font: +# catalog: +# serif: +# bold: texgyreschola-bold.otf +# bold-italic: texgyreschola-bolditalic.otf +# italic: texgyreschola-italic.otf +# normal: texgyreschola-regular.otf +# sans-serif: +# bold: Inter-Bold.otf +# bold-italic: Inter-BoldItalic.otf +# italic: Inter-Italic.otf +# normal: Inter-Regular.otf +# monospace: +# bold: JetBrainsMono-Bold.ttf +# bold-italic: JetBrainsMono-BoldItalic.ttf +# italic: JetBrainsMono-Italic.ttf +# normal: JetBrainsMono-Regular.ttf + +title-page: + align: center + title: + margin-top: 1cm + font-size: 18 + font-style: bold + subtitle: + margin-bottom: 1cm + font-size: 16 + authors: + margin-bottom: 1cm + +heading: + align: left + margin-top: 15pt + margin-bottom: 5pt + font-style: bold + h2-font-size: $base-font-size * 1.7 + h3-font-size: $base-font-size * 1.4 + h4-font-size: $base-font-size * 1.2 + h5-font-size: $base-font-size + +toc: + indent: 5mm + line-height: 1.4 + +caption: + align: center + end: bottom + +image: + align: center + +list: + indent: 10mm + +description-list: + term-font-style: bold + +table: + align: center + border-color: transparent + cell-padding: [0.2pt, 5pt] + border-color: '#000000' + border-width: [ 0.5pt, 0pt, 0.5pt, 0pt ] + head: + font-style: bold + border-bottom-width: 1pt + cell: + border-width: 0pt + caption: + end: $caption-end + +footnotes: + font-size: round($base-font-size * 0.75) + +footer: + height: 1in + vertical-align: middle + recto: + center: + content: '{page-number}' + verso: + center: + content: '{page-number}' + diff --git a/main/CMakeLists.txt b/main/CMakeLists.txt index 59d1156..e24d9a5 100644 --- a/main/CMakeLists.txt +++ b/main/CMakeLists.txt @@ -20,4 +20,3 @@ pico_enable_stdio_usb(main 1) pico_add_extra_outputs(main) target_include_directories(main PRIVATE ${CMAKE_CURRENT_LIST_DIR}) target_link_libraries(main pico_cyw43_arch_lwip_threadsafe_background pico_stdlib) - diff --git a/puzzle/neo/arduino-neopuzzle/arduino-neopuzzle.ino b/puzzle/neo/arduino-neopuzzle/arduino-neopuzzle.ino new file mode 100644 index 0000000..b334677 --- /dev/null +++ b/puzzle/neo/arduino-neopuzzle/arduino-neopuzzle.ino @@ -0,0 +1,95 @@ +#include <Wire.h> +#include <Adafruit_NeoTrellis.h> + +#define MATRIX_SIZE 8 +#define LED_COLOR_ON 0xFFFFFF // Color of the LEDs in ON state +#define LED_COLOR_OFF 0x000000 // Color of the LEDs in OFF state + +Adafruit_NeoTrellis t_array[MATRIX_SIZE / 4][MATRIX_SIZE / 4] = { + {Adafruit_NeoTrellis(0x2E), Adafruit_NeoTrellis(0x2F)}, + {Adafruit_NeoTrellis(0x30), Adafruit_NeoTrellis(0x32)} +}; + +Adafruit_MultiTrellis trellis((Adafruit_NeoTrellis *)t_array, MATRIX_SIZE / 4, MATRIX_SIZE / 4); + +bool neoMatrix[MATRIX_SIZE][MATRIX_SIZE]; // To track state of each pixel + +enum NeoState { + NEO_UNINITIALIZED, + NEO_PLAYING, + NEO_SOLVED +}; + +NeoState neoState = NEO_UNINITIALIZED; + +void setup() { + Serial.begin(115200); + while (!Serial); // Wait for Serial to be ready + + if (!trellis.begin()) { + Serial.println("Failed to initialize NeoTrellis"); + while (1) delay(1); + } + + // Initialize the matrix with a checkerboard pattern + bool toggle = false; + for (int i = 0; i < MATRIX_SIZE; i++) { + for (int j = 0; j < MATRIX_SIZE; j++) { + neoMatrix[i][j] = toggle; + toggle = !toggle; + trellis.setPixelColor(i * MATRIX_SIZE + j, neoMatrix[i][j] ? LED_COLOR_ON : LED_COLOR_OFF); + } + toggle = !toggle; + } + trellis.show(); + neoState = NEO_PLAYING; + + // Register the callback for each key + for (int i = 0; i < MATRIX_SIZE * MATRIX_SIZE; i++) { + trellis.activateKey(i, SEESAW_KEYPAD_EDGE_RISING, true); + trellis.activateKey(i, SEESAW_KEYPAD_EDGE_FALLING, true); + trellis.registerCallback(i, buttonCallback); + } +} + +void loop() { + trellis.read(); // Process button events + delay(20); +} + +TrellisCallback buttonCallback(keyEvent evt) { + int x = evt.bit.NUM / MATRIX_SIZE; + int y = evt.bit.NUM % MATRIX_SIZE; + + if (evt.bit.EDGE == SEESAW_KEYPAD_EDGE_RISING) { + toggleAdjacentLEDs(x, y); + trellis.show(); + if (isNeoPuzzleSolved()) { + neoState = NEO_SOLVED; + Serial.println("The NeoTrellis puzzle is solved!"); + } + } + return 0; +} + +void toggleAdjacentLEDs(int x, int y) { + for (int dx = -1; dx <= 1; ++dx) { + for (int dy = -1; dy <= 1; ++dy) { + if (dx == 0 && dy == 0) continue; // Skip the center button itself + int nx = x + dx, ny = y + dy; + if (nx >= 0 && nx < MATRIX_SIZE && ny >= 0 && ny < MATRIX_SIZE) { + neoMatrix[nx][ny] = !neoMatrix[nx][ny]; + trellis.setPixelColor(nx * MATRIX_SIZE + ny, neoMatrix[nx][ny] ? LED_COLOR_ON : LED_COLOR_OFF); + } + } + } +} + +bool isNeoPuzzleSolved() { + for (int i = 0; i < MATRIX_SIZE; i++) { + for (int j = 0; j < MATRIX_SIZE; j++) { + if (neoMatrix[i][j]) return false; // If any LED is on, puzzle is not solved + } + } + return true; +} diff --git a/puzzle/neo/console-neopuzzle/neo.cpp b/puzzle/neo/console-neopuzzle/neo.cpp new file mode 100644 index 0000000..56d90f7 --- /dev/null +++ b/puzzle/neo/console-neopuzzle/neo.cpp @@ -0,0 +1,100 @@ +#include <iostream> +#include <array> + +#define MATRIX_SIZE 8 + +enum NeoState { + NEO_UNINITIALIZED, + NEO_PLAYING, + NEO_SOLVED +}; + +// Simulate the 8x8 LED matrix with a 2D array +std::array<std::array<bool, MATRIX_SIZE>, MATRIX_SIZE> neoMatrix; + +NeoState neoState = NEO_UNINITIALIZED; + +// Helper function to toggle LEDs if within bounds +void toggleIfValid(int x, int y) { + if (x >= 0 && x < MATRIX_SIZE && y >= 0 && y < MATRIX_SIZE) { + neoMatrix[x][y] = !neoMatrix[x][y]; + } +} + +void initializeNeoMatrix() { + // The initial pattern from the Appendix A example (assuming red is 'true'/on and white is 'false'/off) + std::array<std::array<bool, MATRIX_SIZE>, MATRIX_SIZE> initialPattern = {{ + {false, true, false, true, false, true, false, true}, + {true, false, true, false, true, false, true, false}, + {false, true, false, true, false, true, false, true}, + {true, false, true, false, true, false, true, false}, + {false, true, false, true, false, true, false, true}, + {true, false, true, false, true, false, true, false}, + {false, true, false, true, false, true, false, true}, + {true, false, true, false, true, false, true, false} + }}; + + for (int i = 0; i < MATRIX_SIZE; i++) { + for (int j = 0; j < MATRIX_SIZE; j++) { + neoMatrix[i][j] = initialPattern[i][j]; + } + } + + neoState = NEO_PLAYING; +} + + +void printNeoMatrix() { + // Print the matrix state to the console + for (int i = 0; i < MATRIX_SIZE; i++) { + for (int j = 0; j < MATRIX_SIZE; j++) { + std::cout << (neoMatrix[i][j] ? 1 : 0) << " "; + } + std::cout << std::endl; + } +} + +void toggleAdjacentLEDs(int x, int y) { + // Toggle the LED at (x, y) and adjacent LEDs + toggleIfValid(x, y); // Center + toggleIfValid(x - 1, y); // Up + toggleIfValid(x + 1, y); // Down + toggleIfValid(x, y - 1); // Left + toggleIfValid(x, y + 1); // Right +} + + +bool isNeoPuzzleSolved() { + for (int i = 0; i < MATRIX_SIZE; i++) { + for (int j = 0; j < MATRIX_SIZE; j++) { + if (neoMatrix[i][j]) return false; // If any LED is on, puzzle is not solved + } + } + return true; +} + +/// Integration needed +int main() { + initializeNeoMatrix(); + printNeoMatrix(); + + while (neoState != NEO_SOLVED) { + int x, y; + std::cout << "Enter the coordinates of the button pressed (x y): "; + std::cin >> x >> y; + + if (x >= 0 && x < MATRIX_SIZE && y >= 0 && y < MATRIX_SIZE) { + toggleAdjacentLEDs(x, y); + printNeoMatrix(); + + if (isNeoPuzzleSolved()) { + neoState = NEO_SOLVED; + std::cout << "The NeoTrellis puzzle is solved!\n"; + } + } else { + std::cout << "Invalid coordinates. Please enter values between 0 and " << MATRIX_SIZE - 1 << ".\n"; + } + } + + return 0; +} @@ -2,6 +2,44 @@ Avans University of Applied Sciences project puzzle box. +## tidyness + +Please keep this repository tidy by being aware of the following conventions! + +### folder structure + +|folder|contains| +|-|-| +|`/client`|Desktop PC application for controlling the puzzle box +|`/docs`|Project documentation in AsciiDoc(tor) format +|`/lib`|Libraries (tracked as [submodules](#submodules)) +|`/main`|Main controller (RPi pico) software +|`/proto`|Puzzle bus TCP protocol functions (used by main and client) +|`/puzzle/<name>`|Puzzle sources, each puzzle has its own subdirectory +|`/shared`|Auxiliary shared code +|`/test`|Unit test framework (currently unutilized) + +### code style + +An `.editorconfig` file is provided in this repository. Please install the +[EditorConfig](https://editorconfig.org/) plugin for your text editor of choice +to automatically use these. + +Currently, no linter/formatter is configured for maintaining consistent code +style. + +## submodules + +This repository tracks (most) dependencies via git submodules. + +If something is complaining about missing files + +``` +git submodule update --init --recursive --depth 1 +``` + +until your problems go away. + ## Tests ``` @@ -11,3 +49,10 @@ cmake .. make make test ``` + +## ESP +1. Install ESP-IDF extension in vscode +2. Install using 'express' option +3. Install ESP-IDF v5.2.1 (release version) +4. For windows: https://docs.espressif.com/projects/esp-idf/en/stable/esp32/get-started/windows-setup.html#get-started-windows-first-steps +5. For Linux: https://docs.espressif.com/projects/esp-idf/en/stable/esp32/get-started/linux-macos-setup.html#get-started-linux-macos-first-steps diff --git a/shared/FSM.cpp b/shared/FSM.cpp new file mode 100644 index 0000000..fad7fb3 --- /dev/null +++ b/shared/FSM.cpp @@ -0,0 +1,3 @@ +#include "FSM.h" + +#include "IBehaviouralState.hpp"
\ No newline at end of file diff --git a/shared/FSM.h b/shared/FSM.h new file mode 100644 index 0000000..792a44f --- /dev/null +++ b/shared/FSM.h @@ -0,0 +1,50 @@ +#ifndef _FSM_H_ +#define _FSM_H_ + +#include <map> +#include <memory> + +#include "IBehaviouralState.hpp" + +/// <summary> +/// +/// </summary> +/// <typeparam name="TState">IBehaviouralState is the only accepted +/// class.</typeparam> +template <class TState> class FSM { +public: + template <class... TPState> FSM(TPState &...args) { + int i = 0; + + ((void)_states.emplace(i++, args), ...); + } + + /// <summary> + /// Implement with FSM::act() + /// </summary> + void act(); + + /// <summary> + /// Used to check current state. + /// </summary> + /// <returns>Current state.</returns> + std::shared_ptr<TState> &get_state() { return _currentState; } + + /// <summary> + /// Used to get all states. + /// </summary> + /// <returns>Current states.</returns> + std::map<int, std::shared_ptr<TState>> get_states(); + + /// <summary> + /// Sets current state, calls appropiate functions. + /// </summary> + /// <param name="">State to transition into.</param> + void set_state(std::shared_ptr<TState>); + +private: + std::map<int, std::shared_ptr<TState>> _states; + std::shared_ptr<TState> _currentState; +}; + +#endif // _FSM_H_
\ No newline at end of file diff --git a/shared/FSM.hpp b/shared/FSM.hpp new file mode 100644 index 0000000..c86ed80 --- /dev/null +++ b/shared/FSM.hpp @@ -0,0 +1,68 @@ +#ifndef _FSM_HPP_ +#define _FSM_HPP_ + +#include "FSM.h" + +#include <iostream> + +/// <summary> +/// This is a generic update method, unknown classes are not supported. +/// </summary> +/// <typeparam name="TState">IBehaviouralState is the only accepted +/// class.</typeparam> +template <class TState> void FSM<TState>::act() { + // No implementation for unknown class. + std::cout << "No implementation for unknown class" << std::endl; +} +// +///// <summary> +///// Calls the IBehaviouralState act method. +///// </summary> +///// <typeparam name="TState">IBehaviouralState is the only accepted +/// class.</typeparam> +template <> inline void FSM<IBehaviouralState>::act() { _currentState->act(); } + +/// <summary> +/// This is a generic return of the type. +/// </summary> +/// <typeparam name="TState">Any class type works with this return.</typeparam> +/// <returns>The current IBehaviouralState map.</returns> +template <class TState> +std::map<int, std::shared_ptr<TState>> FSM<TState>::get_states() { + return _states; +} + +///// <summary> +///// State transitioning from current state to newState. +///// Calls Exit on the current state and Enter on the new state. +///// </summary> +///// <typeparam name="TState">IBehaviouralState is the only accepted +/// class.</typeparam> +///// <param name="newState">New state to transition into.</param> +template <> +inline void +FSM<IBehaviouralState>::set_state(std::shared_ptr<IBehaviouralState> newState) { + // We can guarantee all statemachines are based on IBehaviouralState + if (_currentState != nullptr) + _currentState->exit(); + + _currentState = nullptr; + _currentState = newState; + _currentState->enter(); +} + +/// <summary> +/// State transitioning from current state to newState. +/// Calls Exit on the current state and Enter on the new state. +/// </summary> +/// <typeparam name="TState">IBehaviouralState is the only accepted +/// class.</typeparam> <param name="newState">New state to transition +/// into.</param> +template <class TState> +void FSM<TState>::set_state(std::shared_ptr<TState> newState) { + // We can guarantee all statemachines are based on IBehaviouralState + // No implementation for an unknown state change class. + std::cout << "No implementation for unknown state change class" << std::endl; +} + +#endif // _FSM_HPP_
\ No newline at end of file diff --git a/shared/IBehaviouralState.hpp b/shared/IBehaviouralState.hpp new file mode 100644 index 0000000..c41fef3 --- /dev/null +++ b/shared/IBehaviouralState.hpp @@ -0,0 +1,25 @@ +#ifndef _FSM_IBEHAVIOURALSTATE_HPP_ +#define _FSM_IBEHAVIOURALSTATE_HPP_ + +/// <summary> +/// Sub class used to define methods implemented by behavioural specific states. +/// </summary> +class IBehaviouralState { +public: + /// <summary> + /// Enters the current state. Used for setup. + /// </summary> + virtual void enter() = 0; + + /// <summary> + /// Updates the current state, used for physics, etc. + /// </summary> + virtual void act() = 0; + + /// <summary> + /// Exits the state, used for cleanup. + /// </summary> + virtual void exit() = 0; +}; + +#endif // _FSM_IBEHAVIOURALSTATE_HPP_
\ No newline at end of file diff --git a/test/.gitignore b/test/.gitignore new file mode 100644 index 0000000..c795b05 --- /dev/null +++ b/test/.gitignore @@ -0,0 +1 @@ +build
\ No newline at end of file diff --git a/test/lib/googletest b/test/lib/googletest -Subproject b1a777f31913f8a047f43b2a5f823e736e7f508 +Subproject 5197b1a8e6a1ef9f214f4aa537b0be17cbf9194 |