gitextract_3glbe_4j/ ├── .editorconfig ├── .github/ │ └── workflows/ │ ├── pages.yml │ └── python-tests.yml ├── .gitignore ├── .gitmodules ├── .pre-commit-config.yaml ├── .pylintrc ├── CONTRIBUTION.md ├── ChangeLog ├── MANIFEST.in ├── MULTIINSTANCE.md ├── README.md ├── config.custom.js ├── docs/ │ ├── Makefile │ ├── prusalink_states.txt │ └── wizard.txt ├── image_builder/ │ ├── __init__.py │ └── image_builder.py ├── prusa/ │ └── link/ │ ├── __init__.py │ ├── __main__.py │ ├── camera_governor.py │ ├── cameras/ │ │ ├── __init__.py │ │ ├── encoders.py │ │ ├── picamera_driver.py │ │ ├── v4l2.py │ │ └── v4l2_driver.py │ ├── conditions.py │ ├── config.py │ ├── const.py │ ├── daemon.py │ ├── data/ │ │ ├── image_builder/ │ │ │ ├── boot-message.service │ │ │ ├── first-boot.sh │ │ │ ├── manager-start-script.sh │ │ │ └── prusalink-start-script.sh │ │ └── prusalink.ini │ ├── interesting_logger.py │ ├── multi_instance/ │ │ ├── __init__.py │ │ ├── __main__.py │ │ ├── config_component.py │ │ ├── const.py │ │ ├── controller.py │ │ ├── ipc_queue_adapter.py │ │ ├── runner_component.py │ │ └── web.py │ ├── printer_adapter/ │ │ ├── __init__.py │ │ ├── auto_telemetry.py │ │ ├── command.py │ │ ├── command_handlers.py │ │ ├── command_queue.py │ │ ├── file_printer.py │ │ ├── filesystem/ │ │ │ ├── __init__.py │ │ │ ├── sd_card.py │ │ │ ├── storage.py │ │ │ └── storage_controller.py │ │ ├── ip_updater.py │ │ ├── job.py │ │ ├── keepalive.py │ │ ├── lcd_printer.py │ │ ├── mmu_observer.py │ │ ├── model.py │ │ ├── print_stat_doubler.py │ │ ├── print_stats.py │ │ ├── printer_polling.py │ │ ├── prusa_link.py │ │ ├── py.typed │ │ ├── special_commands.py │ │ ├── state_manager.py │ │ ├── structures/ │ │ │ ├── __init__.py │ │ │ ├── carousel.py │ │ │ ├── heap.py │ │ │ ├── item_updater.py │ │ │ ├── mc_singleton.py │ │ │ ├── model_classes.py │ │ │ ├── module_data_classes.py │ │ │ └── regular_expressions.py │ │ ├── telemetry_passer.py │ │ └── updatable.py │ ├── sdk_augmentation/ │ │ ├── __init__.py │ │ ├── command_handler.py │ │ ├── file.py │ │ └── printer.py │ ├── serial/ │ │ ├── __init__.py │ │ ├── helpers.py │ │ ├── instruction.py │ │ ├── is_planner_fed.py │ │ ├── serial.py │ │ ├── serial_adapter.py │ │ ├── serial_parser.py │ │ └── serial_queue.py │ ├── service_discovery.py │ ├── static/ │ │ ├── css/ │ │ │ ├── bootstrap.connect.css │ │ │ └── bootstrap.prusa-link.css │ │ ├── index.html │ │ ├── main.9b8dc0068f6e6508dfd4.js │ │ └── main.b3e029296dd89863b3f2.css │ ├── templates/ │ │ ├── _footer.html │ │ ├── _header.html │ │ ├── _wizard.html │ │ ├── error-gone.html │ │ ├── error-internal-server-error.html │ │ ├── error.html │ │ ├── index.html │ │ ├── link_info.html │ │ ├── multi-instance.html │ │ ├── wizard.html │ │ ├── wizard_credentials.html │ │ ├── wizard_finish.html │ │ ├── wizard_printer.html │ │ ├── wizard_restore.html │ │ └── wizard_serial.html │ ├── util.py │ └── web/ │ ├── __init__.py │ ├── cameras.py │ ├── connection.py │ ├── controls.py │ ├── errors.py │ ├── files.py │ ├── files_legacy.py │ ├── lib/ │ │ ├── __init__.py │ │ ├── auth.py │ │ ├── classes.py │ │ ├── core.py │ │ ├── files.py │ │ ├── view.py │ │ └── wizard.py │ ├── link_info.py │ ├── main.py │ ├── settings.py │ └── wizard.py ├── prusalink-boot ├── public/ │ └── prusalink.json ├── requirements-multi.txt ├── requirements-pi.txt ├── requirements.txt ├── ruff.toml ├── setup.py └── tests/ ├── __init__.py ├── test_carousel.py ├── test_ipc_queue.py ├── test_item_updater.py ├── test_serial_parser.py └── util.py