diff --git a/README.md b/README.md index a8b319a3909ed7123fd4180841f0c2a6465d8399..fe988b17c384224673767008b98d3637f131689a 100644 --- a/README.md +++ b/README.md @@ -4,22 +4,17 @@ The `quant` repository contains a prototypical software stack that allows to emulate a key exchange within a Quantum Key Distribution Network (QKDN). -Currently `quant` contains the following three main parts: `goKMS`, `quantumlayer`, `akms-simulator` +Currently `quant` contains the following main parts: [goKMS](#goKMS), [quantumlayer](#quantumlayer), [akms-simulator](#akms-simulator), [etsi14module](#etsi14module) ## goKMS A Key Management System (KMS) for QKDN written in go. -The KMS receives an amount or random numbers (called bulk keys) from the -quantumlayers, whereas the actual amount will vary over time. Processes them -and provides a key store for each registered peer. So called forwarding routes -can be set through gnmi, either via `assign-forwarding` or -`key-routing-sessions` (see [temp.yang](goKMS/models/danet/temp.yang)). +`goKMS` can pull or receive QKD key material from different sources depending on the configured operating mode. This material gets processed into keys and it provides a key store for each registered KMS peer. So called forwarding routes can be set through gnmi, either via `assign-forwarding` or `key-routing-sessions` (see [temp.yang](goKMS/models/danet/temp.yang)). If a route is configured the `goKMS` that has no `prev-hop` provided within its route configuration, will initiate the process to exchange a so-called -`platform-key`. After this both, start and end `goKMS` should have a -platform-key for a KSA key exchange available. +`platform-key` using keys derived from QKD key material to encrypt and decrypt the `platform-key` hop-by-hop during the exchange process. Afterwards, the start and end `goKMS` have a `platform-key` available to perform a KSA key exchange. **Note well:** _This is currently not intended to be used in production environments, neither in networks that can be reached by everybody, nor in other uncontrolled settings._ @@ -30,7 +25,8 @@ A goKMS can be configured through a configuration file, as seen below: ```yaml Id: "0ff33c82-7fe1-482b-a0ca-67565806ee4b" # ID of the kms Name: kms01 # name of the kms -InterComAddr: 172.100.20.10:50910 # Address of the endpoint for inter communication +InterComAddr: 0.0.0.0:50910 # IP and port to bind the local gRPC server for inter KMS communication to +QuantumAddr: 0.0.0.0:50911 # IP and port to bind the local gRPC server for QKD modules to reach the KMS to (optional, only used for specific emulated or experimental QKD modules) AkmsURL: "http://172.100.20.22:4444/api/v1/keys/push_ksa_key" # address of the rest endpoint of a connected AKMS (used for sending KSA key to the AKMS). AkmsCkmsServerPort: "9696" # Port of connected AKMS GnmiTLS: # Settings for TLS for gNMI endpoint. Can be overwritten with cli parameters. @@ -57,17 +53,56 @@ Peers: # Peers to other goKMS # peer to goKMS02 - PeerId: "5e41c291-6121-4335-84f6-41e04b8bdaa2" # id of the peer PeerInterComAddr: 172.100.20.11:50910 # inter com endpoint of the peer + Type: danet # type of communication method between KMS (currently only danet supported) QuantumModule: # Quantum module used for this peer Type: emulated # Type of the quantum module e.g. emulated or etsi Address: 172.100.20.14 # Address of the quantum module + Hostname: quantumlayer_1 # Optional addressing of the quantum module as hostname # peer to goKMS03 - PeerId: "f80db2c0-2480-46b9-b7d1-b63f954e8227" PeerInterComAddr: 172.100.20.12:50910 + Type: danet QuantumModule: Type: emulated Address: 172.100.20.18 ``` + +Other configuration options: + +```yaml +ETSI14Server: # Configuration for ETSI014 server, should not be used together with AKMS configurations + Address: "0.0.0.0:1414" # IP and port to bind the local ETSI014 HTTP server to, provides the endpoints defined in ETSI014 + RemoteCKMSID: "5e41c291-6121-4335-84f6-41e04b8bdaa2" # UUID of the target CKMS when doing a (ETSI014) GetKey + +QkdnManagerServer: # Server on KMS side for monitoring purposes, currently only supports few example endpoints + Address: "0.0.0.0:8090" # IP and port to bind the local management monitoring HTTP server to + +Peers: + # peer to goKMS02 + - PeerId: "5e41c291-6121-4335-84f6-41e04b8bdaa2" + PeerInterComAddr: 172.100.20.11:50910 + Type: danet # type of communication method between KMS (currently only danet supported) + QuantumModule: + Type: etsi # Type of the quantum module e.g. emulated or etsi + Address: http://172.100.20.14:1414 # Address of the quantum module + Mastermode: true # (Type: etsi specific) Sets the QuantumModule in MasterMode. Keys are requested via GetKey and synced with peer KMS. + LocalSAEID: "localSAEID" # the related ID of the local SAE + TargetSAEID: "targetSAEID" # the related ID of the target SAE + # peer to goKMS03 + - PeerId: "f80db2c0-2480-46b9-b7d1-b63f954e8227" + PeerInterComAddr: 172.100.20.12:50910 + Type: danet + QuantumModule: + Type: etsi + Address: http://172.100.20.14:1414 + Mastermode: false # (Type: etsi specific) Sets QuantumModule to request keys via GetKeyWithId, setting false explicitly is optional + LocalSAEID: "localSAEID" # the related ID of the local SAE + TargetSAEID: "targetSAEID" # the related ID of the target SAE +``` + +There are many example configuration files available in this repository under [config](config). Note, for some configuration options, there are different operating modes or ways to configure the behaviour. Not all of them can work together, possible working configurations can be found within the provided example configurations. + You can also provide some configuration via command line arguments. Only settings relevant for running goKMS with remote configuration via gNMI are available here. This includes gNMI TLS settings and log level. Furthermore a path to a configuration file can be provided. Keep in mind that cli arguments will be prioritized, so you can overwrite your gNMI settings in the config file with your cli arguments. Available are the following flags: @@ -88,7 +123,7 @@ Usage of goKMS: -kms_config string path to the config file -log string - logrus lof level (debug, info, warn, error, fatal, panic) (default "info") + logrus log level (debug, info, warn, error, fatal, panic) (default "info") ``` ### Interfaces @@ -96,17 +131,16 @@ Usage of goKMS: #### Inter-KMS Communication This interface is required for the communication between the peering KMS in -order to coordinate their actions for key selection and key forwardwing path -configuration. The definition can be found in: +order to coordinate their actions for key selection and key forwardwing after a path has been established. The definition can be found in: [api/kmsintercom/kmsintercom/kmsintercom.proto](goKMS/internal/api/kmsintercom/kmsintercom/kmsintercom.proto) +**Note:** _In the future, `goKMS` might support additional, different protocols for the key exchange._ + #### Interface to quantum modules -This interface is solely a go API within the proto-kms and is accessible here -[quantumlayer/quantumlayer.go](quantumlayer/quantumlayer.go) as the interface -definitions. +`goKMS` provides the possibility to use different kinds of interfaces to communicate with quantum modules. Which one to use, can be defined via the configuration files in the quantum module section under the peer configuration ([see](#configuration-of-a-gokms)). -The `goKMS` currently has two interfaces to communicate with a quantum module. +Currently there are two interfaces available: - First there is our own interface implementation which can be found under: [danet/quipsec](https://code.fbi.h-da.de/danet/quipsec) This is the @@ -119,7 +153,7 @@ The `goKMS` currently has two interfaces to communicate with a quantum module. #### gNMI -To manage the goKMS we provide an gNMI endpoint. +To manage the goKMS we provide a gNMI endpoint. By using the [gnmi-target](https://code.fbi.h-da.de/danet/gnmi-target) package it is possible to manage (GET/SET/subscribe) configuration data of the KMS. @@ -127,6 +161,34 @@ Currently we use the [temp.yang](goKMS/models/danet/temp.yang) file for this and it is implemented yet. +#### Interfaces to trigger key exchange + +Depending on the chosen configuration of the KMS, there are different possibilities of triggering a key exchange. + +*Via AKMS:* + +It is possible to simulate a request send by an AKMS (see [akms-simulator](#akms-simulator)). The request should look like something this, where receiving_CKMS_ID is the ID of the KMS that should be reached. Check `config/configure-and-run-docker-playground.sh` for other examples: + +```bash +curl -X POST -H "Content-Type: application/json" -d '{ + "receiving_CKMS_ID": "968fd594-b0e7-41f0-ba4b-de259047a933", + "request_ID": "request_ID-1234", + "key_properties": { + "number": 1, + "key_length": 256, + "timeout": 20, + "TTL": 24 + } +}' 'http://172.100.20.10:9696/api/v1/keys/ksa_key_req' +``` + +After a successful key exchange both AKMS simulators will log the ID and the key value. + +*Via ETSI014:* + +The key exchange can also be triggered by sending a `GetKey` request as defined in ETSI014. After a successful key exchange, the key can then be fetched on the other end using the `GetKeyWithIDs` call. + + ### Debug setup For goKMS there is a debug setup available for VS Code. @@ -138,7 +200,7 @@ If you are finished stop the debugger and run `make debug-kms-down` to stop the ## Quantumlayer -An implementation of an emulated quantum module. It has two possible operation modes: +An implementation of an emulated quantum module. This QKD module pushes an amount of random numbers (called bulk keys) to the connected KMS, whereas the actual amount will vary over time and depending on the operation mode. It has two possible operation modes: ### (Pseudo) Random Numbers The generation of random numbers is done via the golang's [math/rand](https://pkg.go.dev/math/rand) pseudo random number generator(PRNG). @@ -183,6 +245,10 @@ Usage of quantumlayer: A simple simulation of an AKMS endpoint. This provides a REST endpoint to receive KSA keys from a `goKMS`. The following functionalities are not implemented, the explanation is just there as a means of describing the KMS type. The 'A' stands for access and one of the main purposes of this type of KMS is providing a security barrier protecting the core network of a provider from malicious activity of an end user. Its further purpose is to interact with AAA instances of providers for contractual matters. +## etsi14module + +A simple implementation of a QKD module providing the REST endpoint as defined in ETSI014. Depending on the desired configuration of the whole QKD network, it can be used as provider of pseudo QKD key material. There is no complex logic behind the endpoint, it just provides randomly genrated keys using the random number generator of Go on a `GetKey` call. This keys get stored in memory to be able to provide them afterwards on `GetKeyWithIDs` calls. + ## Usage See the makefile for options. @@ -192,7 +258,9 @@ To use private repos rename `build_env.env.example` to `build_env.env` and add v A docker-compose file provides a minimal test setup to play around with `quant`. -<img src="./figures/quant-docker-setup.png" alt= "Minimal docker test setup" width="80%"> +<p align="center"> + <img src="./figures/quant-docker-setup.png" alt= "Minimal docker test setup" width="80%"> +</p> This minimal setup contains four `goKMS`, with `goKMS01` and `goKMS04` as endpoints. Both of those are then connected to a `akms-simulator`. `Quantumlayers` are diff --git a/figures/quant-docker-setup.excalidraw b/figures/quant-docker-setup.excalidraw new file mode 100644 index 0000000000000000000000000000000000000000..3a21d9eb9a138567436708792a319b099cb5d175 --- /dev/null +++ b/figures/quant-docker-setup.excalidraw @@ -0,0 +1,2700 @@ +{ + "type": "excalidraw", + "version": 2, + "source": "https://excalidraw.com", + "elements": [ + { + "type": "rectangle", + "version": 1730, + "versionNonce": 74116803, + "index": "a0", + "isDeleted": false, + "id": "s4N77iiwbT4SVM734rjTk", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": -197.61823907107828, + "y": 246.18410773328966, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 185.99999999999997, + "height": 86.99999999999999, + "seed": 1312995747, + "groupIds": [ + "21c2kT_f5aEu8hXj8oA0l" + ], + "frameId": null, + "roundness": { + "type": 3 + }, + "boundElements": [ + { + "id": "IxdcpQTvF03sy-qH0YKvd", + "type": "arrow" + }, + { + "id": "dEymzZIT-wk3FHDiVRHjl", + "type": "arrow" + }, + { + "id": "UobaNoy_L8GPmCbt2nKno", + "type": "arrow" + }, + { + "id": "h1om2FwQmtpPRZDxBNzy6", + "type": "arrow" + }, + { + "id": "JGXGypPuizTcYKXAV7297", + "type": "arrow" + }, + { + "id": "z5ftoseeeh06OdlRe3MTM", + "type": "arrow" + } + ], + "updated": 1719561740220, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 1707, + "versionNonce": 844052621, + "index": "a1", + "isDeleted": false, + "id": "oYPKjBAbmq6yqxJENqLjQ", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": -190.52379055762322, + "y": 268.1841077332897, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 168.76666259765625, + "height": 46.99999999999989, + "seed": 899779907, + "groupIds": [ + "21c2kT_f5aEu8hXj8oA0l" + ], + "frameId": null, + "roundness": null, + "boundElements": [ + { + "id": "z5ftoseeeh06OdlRe3MTM", + "type": "arrow" + } + ], + "updated": 1719561761813, + "link": null, + "locked": false, + "fontSize": 37.599999999999916, + "fontFamily": 1, + "text": "goKMS 01", + "textAlign": "center", + "verticalAlign": "top", + "containerId": null, + "originalText": "goKMS 01", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "type": "rectangle", + "version": 1372, + "versionNonce": 524688995, + "index": "a2", + "isDeleted": false, + "id": "P0ef-MfypcJGzy9EfryuC", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 117.00000015110857, + "y": 317.2262532000233, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 185.99999999999997, + "height": 86.99999999999999, + "seed": 1562701027, + "groupIds": [ + "pJQUutkpkn4I0QVC_wPCc" + ], + "frameId": null, + "roundness": { + "type": 3 + }, + "boundElements": [ + { + "id": "4yq2MbDIRQrd8o9l-jZHs", + "type": "arrow" + }, + { + "id": "dEymzZIT-wk3FHDiVRHjl", + "type": "arrow" + }, + { + "id": "vfVZ1JkDJpbDcOWyHfgjf", + "type": "arrow" + } + ], + "updated": 1719561740220, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 1352, + "versionNonce": 1204298435, + "index": "a3", + "isDeleted": false, + "id": "kn-53jqzM9skOWAim03wU", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 116.41111431397769, + "y": 339.2262532000233, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 184.13333129882812, + "height": 46.99999999999989, + "seed": 1750816899, + "groupIds": [ + "pJQUutkpkn4I0QVC_wPCc" + ], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1719561761813, + "link": null, + "locked": false, + "fontSize": 37.599999999999916, + "fontFamily": 1, + "text": "goKMS 03", + "textAlign": "center", + "verticalAlign": "top", + "containerId": null, + "originalText": "goKMS 03", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "type": "rectangle", + "version": 1440, + "versionNonce": 39475715, + "index": "a4", + "isDeleted": false, + "id": "qfcle6jH6vCQ_AD7PwCnv", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 431.6182394399649, + "y": 246.4039180183631, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 185.99999999999997, + "height": 86.99999999999999, + "seed": 84103203, + "groupIds": [ + "OYZb5PgM_orFkV31ZTX0K" + ], + "frameId": null, + "roundness": { + "type": 3 + }, + "boundElements": [ + { + "id": "5Mmfg3ZHe2HQLRp1b84CA", + "type": "arrow" + }, + { + "id": "T6SYI0z18GHOsTmTKGJXF", + "type": "arrow" + }, + { + "id": "UwhULnizn_VMKCnvWhThO", + "type": "arrow" + }, + { + "id": "ovPbQ9_BHgeMgF-J4eSin", + "type": "arrow" + }, + { + "id": "XFJ5oVkqeKQS1B_nOXT4H", + "type": "arrow" + } + ], + "updated": 1719561740220, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 1421, + "versionNonce": 307404525, + "index": "a5", + "isDeleted": false, + "id": "_wzYBHeo9Z7m9XiMU0z0c", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 431.79601620049027, + "y": 268.40391801836313, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 182.60000610351562, + "height": 46.99999999999989, + "seed": 621499331, + "groupIds": [ + "OYZb5PgM_orFkV31ZTX0K" + ], + "frameId": null, + "roundness": null, + "boundElements": [ + { + "id": "4yq2MbDIRQrd8o9l-jZHs", + "type": "arrow" + } + ], + "updated": 1719561761813, + "link": null, + "locked": false, + "fontSize": 37.599999999999916, + "fontFamily": 1, + "text": "goKMS 04", + "textAlign": "center", + "verticalAlign": "top", + "containerId": null, + "originalText": "goKMS 04", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "type": "arrow", + "version": 4757, + "versionNonce": 1520837027, + "index": "a6", + "isDeleted": false, + "id": "IxdcpQTvF03sy-qH0YKvd", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": -215.61823907107805, + "y": 296.51565800268577, + "strokeColor": "#465362", + "backgroundColor": "transparent", + "width": 88.49938631402017, + "height": 2.122755324014861, + "seed": 2022826851, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 2 + }, + "boundElements": [], + "updated": 1719561740220, + "link": null, + "locked": false, + "startBinding": { + "elementId": "s4N77iiwbT4SVM734rjTk", + "focus": -0.20829961010700918, + "gap": 17.999999999999773 + }, + "endBinding": { + "elementId": "6KhQM6HaDJSf30Qvlo6cr", + "focus": 0.10898008848627774, + "gap": 13.169660352677226 + }, + "lastCommittedPoint": null, + "startArrowhead": "arrow", + "endArrowhead": "arrow", + "points": [ + [ + 0, + 0 + ], + [ + -88.49938631402017, + -2.122755324014861 + ] + ] + }, + { + "type": "rectangle", + "version": 2891, + "versionNonce": 595623437, + "index": "a7", + "isDeleted": false, + "id": "6KhQM6HaDJSf30Qvlo6cr", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": -589.4757478934295, + "y": 233.34441782218275, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 272.188462155654, + "height": 103.00000000000001, + "seed": 669351683, + "groupIds": [ + "Tud92k1LJL_AJRYHxM6lg" + ], + "frameId": null, + "roundness": { + "type": 3 + }, + "boundElements": [ + { + "id": "IxdcpQTvF03sy-qH0YKvd", + "type": "arrow" + } + ], + "updated": 1719561740220, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 2662, + "versionNonce": 1759302243, + "index": "a8", + "isDeleted": false, + "id": "r60SjLs69i8i_qpU7jDgm", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": -584.9291182465892, + "y": 263.33755833331725, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 264.26666259765625, + "height": 46.99999999999989, + "seed": 1300539043, + "groupIds": [ + "Tud92k1LJL_AJRYHxM6lg" + ], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1719561761813, + "link": null, + "locked": false, + "fontSize": 37.599999999999916, + "fontFamily": 1, + "text": "AKMS-Receiver", + "textAlign": "center", + "verticalAlign": "top", + "containerId": null, + "originalText": "AKMS-Receiver", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "type": "arrow", + "version": 962, + "versionNonce": 675230829, + "index": "a9", + "isDeleted": false, + "id": "4yq2MbDIRQrd8o9l-jZHs", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 321.00000015110857, + "y": 332.4937037632103, + "strokeColor": "#d1495b", + "backgroundColor": "transparent", + "width": 95.86823928885633, + "height": 24.517041978514726, + "seed": 807262787, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 2 + }, + "boundElements": [], + "updated": 1719561740220, + "link": null, + "locked": false, + "startBinding": { + "elementId": "P0ef-MfypcJGzy9EfryuC", + "focus": -0.004270240104191013, + "gap": 18 + }, + "endBinding": { + "elementId": "_wzYBHeo9Z7m9XiMU0z0c", + "focus": 0.2367962529775874, + "gap": 14.927776760525376 + }, + "lastCommittedPoint": null, + "startArrowhead": "arrow", + "endArrowhead": "arrow", + "points": [ + [ + 0, + 0 + ], + [ + 95.86823928885633, + -24.517041978514726 + ] + ] + }, + { + "type": "arrow", + "version": 1240, + "versionNonce": 1708020963, + "index": "aA", + "isDeleted": false, + "id": "dEymzZIT-wk3FHDiVRHjl", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 2.381760928921608, + "y": 307.29330091346344, + "strokeColor": "#d1495b", + "backgroundColor": "transparent", + "width": 101.61823922218696, + "height": 23.237685258549504, + "seed": 1016044003, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 2 + }, + "boundElements": [], + "updated": 1719561740220, + "link": null, + "locked": false, + "startBinding": { + "elementId": "s4N77iiwbT4SVM734rjTk", + "focus": -0.10344827586206898, + "gap": 14 + }, + "endBinding": { + "elementId": "P0ef-MfypcJGzy9EfryuC", + "focus": 0.09195402298850576, + "gap": 13 + }, + "lastCommittedPoint": null, + "startArrowhead": "arrow", + "endArrowhead": "arrow", + "points": [ + [ + 0, + 0 + ], + [ + 101.61823922218696, + 23.237685258549504 + ] + ] + }, + { + "type": "rectangle", + "version": 522, + "versionNonce": 1687690957, + "index": "aB", + "isDeleted": false, + "id": "6sEh2M2Z9YDTm6EdSYa2T", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": -116.5113041155247, + "y": 471.4336940222373, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 90, + "height": 82, + "seed": 1072194947, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3 + }, + "boundElements": [ + { + "type": "text", + "id": "l8POiD8iSAXo3kMEoLfsz" + }, + { + "id": "UobaNoy_L8GPmCbt2nKno", + "type": "arrow" + } + ], + "updated": 1719561740220, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 417, + "versionNonce": 1037711693, + "index": "aC", + "isDeleted": false, + "id": "l8POiD8iSAXo3kMEoLfsz", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": -94.98630449699442, + "y": 489.9336940222373, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 46.95000076293945, + "height": 45, + "seed": 1634123043, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1719561761813, + "link": null, + "locked": false, + "fontSize": 36, + "fontFamily": 1, + "text": "QL", + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "6sEh2M2Z9YDTm6EdSYa2T", + "originalText": "QL", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "type": "rectangle", + "version": 525, + "versionNonce": 1327807789, + "index": "aD", + "isDeleted": false, + "id": "-reS4XuplLJiRHcM5aejN", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 114.97739510666213, + "y": 471.5632340889073, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 90, + "height": 82, + "seed": 1551442115, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3 + }, + "boundElements": [ + { + "type": "text", + "id": "SHgLlIcGqn8k3Hv8Cg9w2" + } + ], + "updated": 1719561740220, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 419, + "versionNonce": 1325043203, + "index": "aE", + "isDeleted": false, + "id": "SHgLlIcGqn8k3Hv8Cg9w2", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 136.5023947251924, + "y": 490.0632340889073, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 46.95000076293945, + "height": 45, + "seed": 2059276387, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1719561761813, + "link": null, + "locked": false, + "fontSize": 36, + "fontFamily": 1, + "text": "QL", + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "-reS4XuplLJiRHcM5aejN", + "originalText": "QL", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "type": "rectangle", + "version": 523, + "versionNonce": 1330548621, + "index": "aF", + "isDeleted": false, + "id": "RUXdftMD4L6oE5f5x1mJJ", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 214.02057512888575, + "y": 471.56323408890705, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 90, + "height": 82, + "seed": 1308888067, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3 + }, + "boundElements": [ + { + "type": "text", + "id": "zwD-n00ANe3_FWVcMmY-L" + } + ], + "updated": 1719561740220, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 417, + "versionNonce": 507479981, + "index": "aG", + "isDeleted": false, + "id": "zwD-n00ANe3_FWVcMmY-L", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 235.54557474741603, + "y": 490.06323408890705, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 46.95000076293945, + "height": 45, + "seed": 709464995, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1719561761813, + "link": null, + "locked": false, + "fontSize": 36, + "fontFamily": 1, + "text": "QL", + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "RUXdftMD4L6oE5f5x1mJJ", + "originalText": "QL", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "type": "rectangle", + "version": 671, + "versionNonce": 592385517, + "index": "aH", + "isDeleted": false, + "id": "fVTlWiYk_bF-Yz1M-6bKp", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 429.59563439551846, + "y": 467.60641411113033, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 90, + "height": 82, + "seed": 1606231875, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3 + }, + "boundElements": [ + { + "type": "text", + "id": "BirytrUZFOXYqGKYyjuhS" + }, + { + "id": "5Mmfg3ZHe2HQLRp1b84CA", + "type": "arrow" + } + ], + "updated": 1719561740220, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 564, + "versionNonce": 220190115, + "index": "aI", + "isDeleted": false, + "id": "BirytrUZFOXYqGKYyjuhS", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 451.12063401404873, + "y": 486.10641411113033, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 46.95000076293945, + "height": 45, + "seed": 884819683, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1719561761813, + "link": null, + "locked": false, + "fontSize": 36, + "fontFamily": 1, + "text": "QL", + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "fVTlWiYk_bF-Yz1M-6bKp", + "originalText": "QL", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "type": "arrow", + "version": 1330, + "versionNonce": 103796813, + "index": "aJ", + "isDeleted": false, + "id": "FdduQz2MABuTNVrQhUJ4M", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 321.02057512888575, + "y": 510.5704367025827, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 94.5750592666327, + "height": 0.6519568508202838, + "seed": 534278787, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 2 + }, + "boundElements": [], + "updated": 1719561740220, + "link": null, + "locked": false, + "startBinding": null, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": "arrow", + "endArrowhead": "arrow", + "points": [ + [ + 0, + 0 + ], + [ + 94.5750592666327, + 0.6519568508202838 + ] + ] + }, + { + "type": "arrow", + "version": 1104, + "versionNonce": 296609539, + "index": "aK", + "isDeleted": false, + "id": "y2kSKpneLB64anKXJdCqI", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": -12.511304115524581, + "y": 509.0488829427446, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 112.4886992221866, + "height": 0.1575162762638911, + "seed": 1103964707, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 2 + }, + "boundElements": [], + "updated": 1719561740220, + "link": null, + "locked": false, + "startBinding": null, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": "arrow", + "endArrowhead": "arrow", + "points": [ + [ + 0, + 0 + ], + [ + 112.4886992221866, + -0.1575162762638911 + ] + ] + }, + { + "type": "arrow", + "version": 1470, + "versionNonce": 365575853, + "index": "aL", + "isDeleted": false, + "id": "UobaNoy_L8GPmCbt2nKno", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": -73.95417665550269, + "y": 456.43369402223743, + "strokeColor": "#f9dc5c", + "backgroundColor": "transparent", + "width": 0.45886929641869756, + "height": 107.24958628894774, + "seed": 529132995, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 2 + }, + "boundElements": [], + "updated": 1719561740220, + "link": null, + "locked": false, + "startBinding": { + "elementId": "6sEh2M2Z9YDTm6EdSYa2T", + "focus": -0.059376546264225644, + "gap": 15 + }, + "endBinding": { + "elementId": "s4N77iiwbT4SVM734rjTk", + "focus": -0.3367186555434652, + "gap": 16 + }, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": "arrow", + "points": [ + [ + 0, + 0 + ], + [ + 0.45886929641869756, + -107.24958628894774 + ] + ] + }, + { + "type": "arrow", + "version": 903, + "versionNonce": 838864547, + "index": "aM", + "isDeleted": false, + "id": "TOSmxp_I7ZUoIL_tsrw0r", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 165.58223787339955, + "y": 461.59070547595627, + "strokeColor": "#f9dc5c", + "backgroundColor": "transparent", + "width": 0.14588425034526153, + "height": 40.78409988888393, + "seed": 472726883, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 2 + }, + "boundElements": [], + "updated": 1719561740220, + "link": null, + "locked": false, + "startBinding": null, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": "arrow", + "points": [ + [ + 0, + 0 + ], + [ + -0.14588425034526153, + -40.78409988888393 + ] + ] + }, + { + "type": "arrow", + "version": 898, + "versionNonce": 2026365197, + "index": "aN", + "isDeleted": false, + "id": "pasmEKHj6AFJZRHQ-URle", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 262.0686492212684, + "y": 459.59070547595604, + "strokeColor": "#f9dc5c", + "backgroundColor": "transparent", + "width": 0.5922373026960486, + "height": 38.7840998888837, + "seed": 856004867, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 2 + }, + "boundElements": [], + "updated": 1719561740220, + "link": null, + "locked": false, + "startBinding": null, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": "arrow", + "points": [ + [ + 0, + 0 + ], + [ + -0.5922373026960486, + -38.7840998888837 + ] + ] + }, + { + "type": "arrow", + "version": 1313, + "versionNonce": 1089225283, + "index": "aO", + "isDeleted": false, + "id": "5Mmfg3ZHe2HQLRp1b84CA", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 475.43619436047527, + "y": 453.56323408890717, + "strokeColor": "#f9dc5c", + "backgroundColor": "transparent", + "width": 0.15092163838380657, + "height": 107.65931607054404, + "seed": 1905361059, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 2 + }, + "boundElements": [], + "updated": 1719561740220, + "link": null, + "locked": false, + "startBinding": { + "elementId": "fVTlWiYk_bF-Yz1M-6bKp", + "focus": 0.016958068855392923, + "gap": 14.043180022223169 + }, + "endBinding": { + "elementId": "qfcle6jH6vCQ_AD7PwCnv", + "focus": 0.5260273426274229, + "gap": 12.5 + }, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": "arrow", + "points": [ + [ + 0, + 0 + ], + [ + 0.15092163838380657, + -107.65931607054404 + ] + ] + }, + { + "type": "arrow", + "version": 3781, + "versionNonce": 1151481709, + "index": "aP", + "isDeleted": false, + "id": "T6SYI0z18GHOsTmTKGJXF", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 722.6271876945093, + "y": 282.6538220547227, + "strokeColor": "#465362", + "backgroundColor": "transparent", + "width": 89.79813748060178, + "height": 4.062377680490044, + "seed": 830436419, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 2 + }, + "boundElements": [], + "updated": 1719561740220, + "link": null, + "locked": false, + "startBinding": { + "elementId": "URvCHTFBS8vMuDgbJEc8q", + "focus": 0.10108854072523002, + "gap": 14.660098043265975 + }, + "endBinding": { + "elementId": "qfcle6jH6vCQ_AD7PwCnv", + "focus": 0.03579395383044088, + "gap": 15.21081077394274 + }, + "lastCommittedPoint": null, + "startArrowhead": "arrow", + "endArrowhead": "arrow", + "points": [ + [ + 0, + 0 + ], + [ + -89.79813748060178, + 4.062377680490044 + ] + ] + }, + { + "type": "rectangle", + "version": 2802, + "versionNonce": 2001797603, + "index": "aQ", + "isDeleted": false, + "id": "URvCHTFBS8vMuDgbJEc8q", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 737.2872857377756, + "y": 230.18410695886993, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 272.188462155654, + "height": 103.00000000000001, + "seed": 313390051, + "groupIds": [ + "t3v0lS2Zp-WtU4-Z9EWe6" + ], + "frameId": null, + "roundness": { + "type": 3 + }, + "boundElements": [ + { + "id": "T6SYI0z18GHOsTmTKGJXF", + "type": "arrow" + } + ], + "updated": 1719561740220, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 2586, + "versionNonce": 900467213, + "index": "aR", + "isDeleted": false, + "id": "ONkr-6xIg0MN24sptjur0", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 741.8339153846159, + "y": 260.17724747000443, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 264.26666259765625, + "height": 46.99999999999989, + "seed": 892043139, + "groupIds": [ + "t3v0lS2Zp-WtU4-Z9EWe6" + ], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1719561761813, + "link": null, + "locked": false, + "fontSize": 37.599999999999916, + "fontFamily": 1, + "text": "AKMS-Receiver", + "textAlign": "center", + "verticalAlign": "top", + "containerId": null, + "originalText": "AKMS-Receiver", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "type": "rectangle", + "version": 1486, + "versionNonce": 1849478531, + "index": "aS", + "isDeleted": false, + "id": "6MJ65P99o8Wam3elP8t5w", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 114.94208636682936, + "y": 196.22321907005332, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 185.99999999999997, + "height": 86.99999999999999, + "seed": 859215651, + "groupIds": [ + "aeeNPYTU3eWfAp2uI4RZ_" + ], + "frameId": null, + "roundness": { + "type": 3 + }, + "boundElements": [ + { + "id": "5ejXtj4AXYjxDxN6HwE2b", + "type": "arrow" + }, + { + "id": "L-iFLBt1vVnhVck35YCta", + "type": "arrow" + }, + { + "id": "ovPbQ9_BHgeMgF-J4eSin", + "type": "arrow" + }, + { + "id": "JGXGypPuizTcYKXAV7297", + "type": "arrow" + }, + { + "id": "esbL8-fft16tbVuraaPp_", + "type": "arrow" + } + ], + "updated": 1719561740220, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 1470, + "versionNonce": 1383803203, + "index": "aT", + "isDeleted": false, + "id": "uWZXONDl8lu6U38EMy5hf", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 113.76986465323364, + "y": 218.22321907005332, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 185.3000030517578, + "height": 46.99999999999989, + "seed": 1530772163, + "groupIds": [ + "aeeNPYTU3eWfAp2uI4RZ_" + ], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1719561761813, + "link": null, + "locked": false, + "fontSize": 37.599999999999916, + "fontFamily": 1, + "text": "goKMS 02", + "textAlign": "center", + "verticalAlign": "top", + "containerId": null, + "originalText": "goKMS 02", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "type": "rectangle", + "version": 613, + "versionNonce": 418260259, + "index": "aU", + "isDeleted": false, + "id": "Ob-Ez6z6ur8GbXeSEAS0W", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": -116.51130402203171, + "y": 46.23250983657246, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 90, + "height": 82, + "seed": 702507619, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3 + }, + "boundElements": [ + { + "type": "text", + "id": "oyNP24gwQDto4ITl4w6mP" + }, + { + "id": "NYjIuEY4VLFd5L-PjFREF", + "type": "arrow" + }, + { + "id": "h1om2FwQmtpPRZDxBNzy6", + "type": "arrow" + } + ], + "updated": 1719561740220, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 508, + "versionNonce": 85540973, + "index": "aV", + "isDeleted": false, + "id": "oyNP24gwQDto4ITl4w6mP", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": -94.98630440350144, + "y": 64.73250983657246, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 46.95000076293945, + "height": 45, + "seed": 65676803, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1719561761813, + "link": null, + "locked": false, + "fontSize": 36, + "fontFamily": 1, + "text": "QL", + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "Ob-Ez6z6ur8GbXeSEAS0W", + "originalText": "QL", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "type": "rectangle", + "version": 615, + "versionNonce": 2127792323, + "index": "aW", + "isDeleted": false, + "id": "kUcL3bRA2T_Fmw524TYBa", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 114.977395200155, + "y": 46.36204990324242, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 90, + "height": 82, + "seed": 811363747, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3 + }, + "boundElements": [ + { + "type": "text", + "id": "N9QQAN-RVrSRfgVe4US80" + }, + { + "id": "NYjIuEY4VLFd5L-PjFREF", + "type": "arrow" + }, + { + "id": "5ejXtj4AXYjxDxN6HwE2b", + "type": "arrow" + } + ], + "updated": 1719561740220, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 510, + "versionNonce": 1684736227, + "index": "aX", + "isDeleted": false, + "id": "N9QQAN-RVrSRfgVe4US80", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 136.50239481868527, + "y": 64.86204990324242, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 46.95000076293945, + "height": 45, + "seed": 308592963, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1719561761813, + "link": null, + "locked": false, + "fontSize": 36, + "fontFamily": 1, + "text": "QL", + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "kUcL3bRA2T_Fmw524TYBa", + "originalText": "QL", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "type": "rectangle", + "version": 613, + "versionNonce": 898332771, + "index": "aY", + "isDeleted": false, + "id": "gbM8af73K-1lvEZXeJ5Ht", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 214.02057522237862, + "y": 46.36204990324197, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 90, + "height": 82, + "seed": 593600739, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3 + }, + "boundElements": [ + { + "type": "text", + "id": "MTbrGTq0EK4kYsjGa3iKb" + }, + { + "id": "3MKJymrJct44QDSbH0mre", + "type": "arrow" + }, + { + "id": "L-iFLBt1vVnhVck35YCta", + "type": "arrow" + } + ], + "updated": 1719561740220, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 508, + "versionNonce": 844147405, + "index": "aZ", + "isDeleted": false, + "id": "MTbrGTq0EK4kYsjGa3iKb", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 235.5455748409089, + "y": 64.86204990324197, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 46.95000076293945, + "height": 45, + "seed": 752979075, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1719561761813, + "link": null, + "locked": false, + "fontSize": 36, + "fontFamily": 1, + "text": "QL", + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "gbM8af73K-1lvEZXeJ5Ht", + "originalText": "QL", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "type": "rectangle", + "version": 762, + "versionNonce": 451179523, + "index": "aa", + "isDeleted": false, + "id": "IKS9MF59xt8aAsccPL2WO", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 429.59563448901133, + "y": 42.40522992546536, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 90, + "height": 82, + "seed": 1117979683, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3 + }, + "boundElements": [ + { + "type": "text", + "id": "-BDwBukse544UV6HgWddb" + }, + { + "id": "3MKJymrJct44QDSbH0mre", + "type": "arrow" + }, + { + "id": "UwhULnizn_VMKCnvWhThO", + "type": "arrow" + } + ], + "updated": 1719561740220, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 655, + "versionNonce": 1484649603, + "index": "ab", + "isDeleted": false, + "id": "-BDwBukse544UV6HgWddb", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 451.1206341075416, + "y": 60.90522992546536, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 46.95000076293945, + "height": 45, + "seed": 2090108867, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1719561761813, + "link": null, + "locked": false, + "fontSize": 36, + "fontFamily": 1, + "text": "QL", + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "IKS9MF59xt8aAsccPL2WO", + "originalText": "QL", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "type": "arrow", + "version": 1589, + "versionNonce": 1323105187, + "index": "ac", + "isDeleted": false, + "id": "3MKJymrJct44QDSbH0mre", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 321.0205752223786, + "y": 85.36925251691784, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 94.5750592666327, + "height": 0.6519568508202838, + "seed": 1892980579, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 2 + }, + "boundElements": [], + "updated": 1719561740220, + "link": null, + "locked": false, + "startBinding": { + "elementId": "gbM8af73K-1lvEZXeJ5Ht", + "focus": -0.058585924461141296, + "gap": 17 + }, + "endBinding": { + "elementId": "IKS9MF59xt8aAsccPL2WO", + "focus": -0.07317073170732025, + "gap": 14 + }, + "lastCommittedPoint": null, + "startArrowhead": "arrow", + "endArrowhead": "arrow", + "points": [ + [ + 0, + 0 + ], + [ + 94.5750592666327, + 0.6519568508202838 + ] + ] + }, + { + "type": "arrow", + "version": 1363, + "versionNonce": 1446790157, + "index": "ad", + "isDeleted": false, + "id": "NYjIuEY4VLFd5L-PjFREF", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": -12.511304022031709, + "y": 83.84769875707954, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 112.4886992221866, + "height": 0.1575162762638911, + "seed": 1840362243, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 2 + }, + "boundElements": [], + "updated": 1719561740220, + "link": null, + "locked": false, + "startBinding": { + "elementId": "Ob-Ez6z6ur8GbXeSEAS0W", + "focus": -0.08041772914646365, + "gap": 14 + }, + "endBinding": { + "elementId": "kUcL3bRA2T_Fmw524TYBa", + "focus": 0.09146636554283534, + "gap": 15 + }, + "lastCommittedPoint": null, + "startArrowhead": "arrow", + "endArrowhead": "arrow", + "points": [ + [ + 0, + 0 + ], + [ + 112.4886992221866, + -0.1575162762638911 + ] + ] + }, + { + "type": "arrow", + "version": 1448, + "versionNonce": 1839435587, + "index": "ae", + "isDeleted": false, + "id": "h1om2FwQmtpPRZDxBNzy6", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": -70.68858943830935, + "y": 237.8696877466492, + "strokeColor": "#f9dc5c", + "backgroundColor": "transparent", + "width": 1.943201763462639, + "height": 101.81217728894774, + "seed": 1940544163, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 2 + }, + "boundElements": [], + "updated": 1719561740220, + "link": null, + "locked": false, + "startBinding": { + "elementId": "s4N77iiwbT4SVM734rjTk", + "focus": 0.3720967813162688, + "gap": 8.314419986640473 + }, + "endBinding": { + "elementId": "Ob-Ez6z6ur8GbXeSEAS0W", + "focus": 0.044828628622887494, + "gap": 7.825000621128993 + }, + "lastCommittedPoint": null, + "startArrowhead": "arrow", + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + -1.943201763462639, + -101.81217728894774 + ] + ] + }, + { + "type": "arrow", + "version": 1640, + "versionNonce": 1536309869, + "index": "af", + "isDeleted": false, + "id": "5ejXtj4AXYjxDxN6HwE2b", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 162.55718371647265, + "y": 183.2719998176403, + "strokeColor": "#f9dc5c", + "backgroundColor": "transparent", + "width": 1.0730972829323946, + "height": 41.8625758222139, + "seed": 1869418051, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 2 + }, + "boundElements": [], + "updated": 1719561740220, + "link": null, + "locked": false, + "startBinding": { + "elementId": "6MJ65P99o8Wam3elP8t5w", + "focus": -0.46681372019132045, + "gap": 12.951219252413011 + }, + "endBinding": { + "elementId": "kUcL3bRA2T_Fmw524TYBa", + "focus": -0.0026329763166942797, + "gap": 13.047374092183986 + }, + "lastCommittedPoint": null, + "startArrowhead": "arrow", + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + -1.0730972829323946, + -41.8625758222139 + ] + ] + }, + { + "type": "arrow", + "version": 1684, + "versionNonce": 160870115, + "index": "ag", + "isDeleted": false, + "id": "L-iFLBt1vVnhVck35YCta", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 259.70082537852716, + "y": 180.23690637056822, + "strokeColor": "#f9dc5c", + "backgroundColor": "transparent", + "width": 1.0716388065834508, + "height": 41.8625758222139, + "seed": 869813731, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 2 + }, + "boundElements": [], + "updated": 1719561740220, + "link": null, + "locked": false, + "startBinding": { + "elementId": "6MJ65P99o8Wam3elP8t5w", + "focus": 0.5661610804929157, + "gap": 15.986312699485097 + }, + "endBinding": { + "elementId": "gbM8af73K-1lvEZXeJ5Ht", + "focus": 0.036857041751496754, + "gap": 10.012280645112355 + }, + "lastCommittedPoint": null, + "startArrowhead": "arrow", + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + -1.0716388065834508, + -41.8625758222139 + ] + ] + }, + { + "type": "arrow", + "version": 1380, + "versionNonce": 60449997, + "index": "ah", + "isDeleted": false, + "id": "UwhULnizn_VMKCnvWhThO", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 478.3477018255361, + "y": 234.59597139166155, + "strokeColor": "#f9dc5c", + "backgroundColor": "transparent", + "width": 0.7936633294307285, + "height": 94.22972741845842, + "seed": 872061315, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 2 + }, + "boundElements": [], + "updated": 1719561740220, + "link": null, + "locked": false, + "startBinding": { + "elementId": "qfcle6jH6vCQ_AD7PwCnv", + "focus": -0.4905908969209157, + "gap": 11.80794662670155 + }, + "endBinding": { + "elementId": "IKS9MF59xt8aAsccPL2WO", + "focus": -0.05466145743761769, + "gap": 15.961014047737763 + }, + "lastCommittedPoint": null, + "startArrowhead": "arrow", + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + -0.7936633294307285, + -94.22972741845842 + ] + ] + }, + { + "type": "arrow", + "version": 1370, + "versionNonce": 1699011203, + "index": "ai", + "isDeleted": false, + "id": "ovPbQ9_BHgeMgF-J4eSin", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 312.8282590423961, + "y": 244.574519535868, + "strokeColor": "#d1495b", + "backgroundColor": "transparent", + "width": 103.34785822218669, + "height": 17.184650533807257, + "seed": 2098360611, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 2 + }, + "boundElements": [], + "updated": 1719561740220, + "link": null, + "locked": false, + "startBinding": { + "elementId": "6MJ65P99o8Wam3elP8t5w", + "focus": -0.21476928102782844, + "gap": 11.88617267556674 + }, + "endBinding": { + "elementId": "qfcle6jH6vCQ_AD7PwCnv", + "focus": 0.17151181609661686, + "gap": 15.44212217538211 + }, + "lastCommittedPoint": null, + "startArrowhead": "arrow", + "endArrowhead": "arrow", + "points": [ + [ + 0, + 0 + ], + [ + 103.34785822218669, + 17.184650533807257 + ] + ] + }, + { + "type": "arrow", + "version": 1412, + "versionNonce": 569262893, + "index": "aj", + "isDeleted": false, + "id": "JGXGypPuizTcYKXAV7297", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": -0.3396466891105092, + "y": 263.2076410369359, + "strokeColor": "#d1495b", + "backgroundColor": "transparent", + "width": 103.73862639237223, + "height": 19.86615267732998, + "seed": 1888376003, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 2 + }, + "boundElements": [], + "updated": 1719561740220, + "link": null, + "locked": false, + "startBinding": { + "elementId": "s4N77iiwbT4SVM734rjTk", + "focus": -0.10904405861238382, + "gap": 11.278592381967883 + }, + "endBinding": { + "elementId": "6MJ65P99o8Wam3elP8t5w", + "focus": 0.26752613568680034, + "gap": 11.543106663567642 + }, + "lastCommittedPoint": null, + "startArrowhead": "arrow", + "endArrowhead": "arrow", + "points": [ + [ + 0, + 0 + ], + [ + 103.73862639237223, + -19.86615267732998 + ] + ] + }, + { + "type": "rectangle", + "version": 3133, + "versionNonce": 1835831843, + "index": "ak", + "isDeleted": false, + "id": "QWq1Pw9JdzBlC-TNxnKiC", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 48.04945793343052, + "y": -137.56323377470326, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 320.1747431779227, + "height": 103.00000000000001, + "seed": 1041024099, + "groupIds": [ + "g0D1PMJUK_dxmWJfuYwEi" + ], + "frameId": null, + "roundness": { + "type": 3 + }, + "boundElements": [ + { + "id": "z5ftoseeeh06OdlRe3MTM", + "type": "arrow" + }, + { + "id": "XFJ5oVkqeKQS1B_nOXT4H", + "type": "arrow" + }, + { + "id": "vfVZ1JkDJpbDcOWyHfgjf", + "type": "arrow" + }, + { + "id": "esbL8-fft16tbVuraaPp_", + "type": "arrow" + } + ], + "updated": 1719561740220, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 2877, + "versionNonce": 1844169005, + "index": "al", + "isDeleted": false, + "id": "H4UX2M7sul3o8wXgZ-Zxf", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 86.97255939023319, + "y": -107.57009326356902, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 243.5, + "height": 46.99999999999989, + "seed": 492584963, + "groupIds": [ + "g0D1PMJUK_dxmWJfuYwEi" + ], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1719561761813, + "link": null, + "locked": false, + "fontSize": 37.599999999999916, + "fontFamily": 1, + "text": "Control-Plane", + "textAlign": "center", + "verticalAlign": "top", + "containerId": null, + "originalText": "Control-Plane", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "type": "arrow", + "version": 618, + "versionNonce": 1929139651, + "index": "am", + "isDeleted": false, + "id": "z5ftoseeeh06OdlRe3MTM", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "dashed", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 31.83940576666498, + "y": -93.72579893829729, + "strokeColor": "#30638e", + "backgroundColor": "transparent", + "width": 206.4835503377035, + "height": 321.4191979416811, + "seed": 1216038819, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1719561740220, + "link": null, + "locked": false, + "startBinding": { + "elementId": "QWq1Pw9JdzBlC-TNxnKiC", + "focus": 0.1541416493033883, + "gap": 16.210052166765536 + }, + "endBinding": { + "elementId": "s4N77iiwbT4SVM734rjTk", + "focus": -0.753589051338035, + "gap": 18.49070872990592 + }, + "lastCommittedPoint": null, + "startArrowhead": "arrow", + "endArrowhead": "arrow", + "points": [ + [ + 0, + 0 + ], + [ + -205.8474276339408, + 0.37434231146983166 + ], + [ + -206.4835503377035, + 321.4191979416811 + ] + ] + }, + { + "type": "arrow", + "version": 857, + "versionNonce": 166665197, + "index": "an", + "isDeleted": false, + "id": "XFJ5oVkqeKQS1B_nOXT4H", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "dashed", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 380.7831232003376, + "y": -93.03151009740637, + "strokeColor": "#30638e", + "backgroundColor": "transparent", + "width": 206.21137240602457, + "height": 324.58607326316945, + "seed": 899177283, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1719561740220, + "link": null, + "locked": false, + "startBinding": { + "elementId": "QWq1Pw9JdzBlC-TNxnKiC", + "focus": -0.1238982214214035, + "gap": 12.558922088984446 + }, + "endBinding": { + "elementId": "qfcle6jH6vCQ_AD7PwCnv", + "focus": 0.6717380507008938, + "gap": 15.475607170838202 + }, + "lastCommittedPoint": null, + "startArrowhead": "arrow", + "endArrowhead": "arrow", + "points": [ + [ + 0, + 0 + ], + [ + 205.17088022241478, + -0.626252318238187 + ], + [ + 206.21137240602457, + 323.95982094493127 + ] + ] + }, + { + "type": "arrow", + "version": 473, + "versionNonce": 621978979, + "index": "ao", + "isDeleted": false, + "id": "vfVZ1JkDJpbDcOWyHfgjf", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "dashed", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 356.0029105458376, + "y": -18.607845071201012, + "strokeColor": "#30638e", + "backgroundColor": "transparent", + "width": 39.64084084448314, + "height": 382.520550919159, + "seed": 286391011, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1719561740220, + "link": null, + "locked": false, + "startBinding": { + "elementId": "QWq1Pw9JdzBlC-TNxnKiC", + "focus": -0.9218323380142452, + "gap": 15.955388703502251 + }, + "endBinding": { + "elementId": "P0ef-MfypcJGzy9EfryuC", + "focus": 0.07325178500999409, + "gap": 14.33514754916041 + }, + "lastCommittedPoint": null, + "startArrowhead": "arrow", + "endArrowhead": "arrow", + "points": [ + [ + 0, + 0 + ], + [ + 0.9730779989145049, + 382.520550919159 + ], + [ + -38.66776284556863, + 382.520550919159 + ] + ] + }, + { + "type": "arrow", + "version": 473, + "versionNonce": 1725896269, + "index": "ap", + "isDeleted": false, + "id": "esbL8-fft16tbVuraaPp_", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "dashed", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 57.627687208152, + "y": -18.256532330193096, + "strokeColor": "#30638e", + "backgroundColor": "transparent", + "width": 44.98682375479916, + "height": 242.7246899711812, + "seed": 2004264579, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1719561740220, + "link": null, + "locked": false, + "startBinding": { + "elementId": "QWq1Pw9JdzBlC-TNxnKiC", + "focus": 0.940067060573113, + "gap": 16.306701444510168 + }, + "endBinding": { + "elementId": "6MJ65P99o8Wam3elP8t5w", + "focus": 0.1778948507163589, + "gap": 12.361182244546853 + }, + "lastCommittedPoint": null, + "startArrowhead": "arrow", + "endArrowhead": "arrow", + "points": [ + [ + 0, + 0 + ], + [ + -0.033606840668653604, + 239.9508215151833 + ], + [ + 44.95321691413051, + 242.7246899711812 + ] + ] + }, + { + "type": "diamond", + "version": 939, + "versionNonce": 1258160387, + "index": "aq", + "isDeleted": false, + "id": "GPKekHIAtIW1ziKy27PHG", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 874.8007486284537, + "y": -135.06323408890728, + "strokeColor": "#465362", + "backgroundColor": "#465362", + "width": 31.000000000000004, + "height": 26, + "seed": 1870978595, + "groupIds": [ + "eiHMPU3KtVUNHukieosEW" + ], + "frameId": null, + "roundness": { + "type": 2 + }, + "boundElements": [], + "updated": 1719561740220, + "link": null, + "locked": false + }, + { + "type": "diamond", + "version": 975, + "versionNonce": 1822475437, + "index": "ar", + "isDeleted": false, + "id": "EoSufOOTSKaKOm4gn-TK1", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 868.3007486284537, + "y": -22.063234088907308, + "strokeColor": "#30638e", + "backgroundColor": "#30638e", + "width": 31.000000000000004, + "height": 26, + "seed": 606806467, + "groupIds": [ + "eiHMPU3KtVUNHukieosEW" + ], + "frameId": null, + "roundness": { + "type": 2 + }, + "boundElements": [], + "updated": 1719561740220, + "link": null, + "locked": false + }, + { + "type": "diamond", + "version": 985, + "versionNonce": 1044179107, + "index": "as", + "isDeleted": false, + "id": "G6lmqFaRftIOQKFf5jXCH", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 871.3007486284537, + "y": 40.93676591109269, + "strokeColor": "#1e1e1e", + "backgroundColor": "#1e1e1e", + "width": 31.000000000000004, + "height": 26, + "seed": 1585967459, + "groupIds": [ + "eiHMPU3KtVUNHukieosEW" + ], + "frameId": null, + "roundness": { + "type": 2 + }, + "boundElements": [], + "updated": 1719561740220, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 788, + "versionNonce": 242379811, + "index": "at", + "isDeleted": false, + "id": "peaA3OI1EUktIUtyqckjv", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 926.4090822161002, + "y": -27.063234088907308, + "strokeColor": "#1e1e1e", + "backgroundColor": "#1e1e1e", + "width": 68.78333282470703, + "height": 35, + "seed": 1072286979, + "groupIds": [ + "eiHMPU3KtVUNHukieosEW" + ], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1719561761813, + "link": null, + "locked": false, + "fontSize": 28, + "fontFamily": 1, + "text": "gNMI", + "textAlign": "center", + "verticalAlign": "top", + "containerId": null, + "originalText": "gNMI", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "type": "text", + "version": 901, + "versionNonce": 424942477, + "index": "au", + "isDeleted": false, + "id": "IF9xnY8lpfGNUBr8283et", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 918.1257493913931, + "y": 25.436765911092692, + "strokeColor": "#1e1e1e", + "backgroundColor": "#1e1e1e", + "width": 91.3499984741211, + "height": 70, + "seed": 1003435171, + "groupIds": [ + "eiHMPU3KtVUNHukieosEW" + ], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1719561761813, + "link": null, + "locked": false, + "fontSize": 28, + "fontFamily": 1, + "text": "UDP \nSocket", + "textAlign": "center", + "verticalAlign": "top", + "containerId": null, + "originalText": "UDP \nSocket", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "type": "text", + "version": 926, + "versionNonce": 1781985219, + "index": "av", + "isDeleted": false, + "id": "zjNPAQES0PUgW3V21an-2", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 928.0257471025748, + "y": -83.56323408890731, + "strokeColor": "#1e1e1e", + "backgroundColor": "#1e1e1e", + "width": 69.55000305175781, + "height": 35, + "seed": 1374070851, + "groupIds": [ + "eiHMPU3KtVUNHukieosEW" + ], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1719561761813, + "link": null, + "locked": false, + "fontSize": 28, + "fontFamily": 1, + "text": "gRPC", + "textAlign": "center", + "verticalAlign": "top", + "containerId": null, + "originalText": "gRPC", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "type": "text", + "version": 969, + "versionNonce": 750985709, + "index": "aw", + "isDeleted": false, + "id": "UFD-KOI2JMgoC9-djauZN", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 928.1090829790396, + "y": -137.56323408890728, + "strokeColor": "#1e1e1e", + "backgroundColor": "#1e1e1e", + "width": 77.38333129882812, + "height": 35, + "seed": 135178211, + "groupIds": [ + "eiHMPU3KtVUNHukieosEW" + ], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1719561761813, + "link": null, + "locked": false, + "fontSize": 28, + "fontFamily": 1, + "text": "REST", + "textAlign": "center", + "verticalAlign": "top", + "containerId": null, + "originalText": "REST", + "autoResize": true, + "lineHeight": 1.25 + }, + { + "type": "diamond", + "version": 1042, + "versionNonce": 125765581, + "index": "ax", + "isDeleted": false, + "id": "9GlymTY5obb7wuN4OiRt2", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 879.8888900488241, + "y": -79.66834427758604, + "strokeColor": "#f9dc5c", + "backgroundColor": "#f9dc5c", + "width": 31.000000000000004, + "height": 26, + "seed": 609596291, + "groupIds": [ + "eiHMPU3KtVUNHukieosEW" + ], + "frameId": null, + "roundness": { + "type": 2 + }, + "boundElements": [], + "updated": 1719561740220, + "link": null, + "locked": false + }, + { + "type": "diamond", + "version": 963, + "versionNonce": 2041571203, + "index": "ay", + "isDeleted": false, + "id": "IXxEZ29syK7qZQ4vF2W_3", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 868.4348805604691, + "y": -80.09676707191116, + "strokeColor": "#d1495b", + "backgroundColor": "#d1495b", + "width": 31.000000000000004, + "height": 26, + "seed": 653937443, + "groupIds": [ + "eiHMPU3KtVUNHukieosEW" + ], + "frameId": null, + "roundness": { + "type": 2 + }, + "boundElements": [], + "updated": 1719561740220, + "link": null, + "locked": false + } + ], + "appState": { + "gridSize": null, + "viewBackgroundColor": "#ffffff" + }, + "files": {} +} \ No newline at end of file diff --git a/figures/quant-docker-setup.png b/figures/quant-docker-setup.png index a1a563219d6f27eae9cbeb2d5b6597ed36aadb28..66148a484136b8a9e9c8a0c174949da6c1c8647a 100644 Binary files a/figures/quant-docker-setup.png and b/figures/quant-docker-setup.png differ