{"acronym":"sps23","aspect_ratio":"16:9","updated_at":"2026-04-13T16:30:04.990+02:00","title":"Swiss Python Summit 2023","schedule_url":"","slug":"conferences/sps/2023","event_last_released_at":"2023-10-05T00:00:00.000+02:00","link":"https://www.python-summit.ch/","description":"","webgen_location":"conferences/sps/2023","logo_url":"https://static.media.ccc.de/media/conferences/sps23/logo.png","images_url":"https://static.media.ccc.de/media/conferences/sps23","recordings_url":"https://cdn.media.ccc.de/events/sps23","url":"https://api.media.ccc.de/public/conferences/sps23","events":[{"guid":"687a4b0c-99ae-41ee-b3c6-d5815aa0669e","title":"Proving Python code correct with Nagini","subtitle":null,"slug":"sps23-56128-proving-python-code-correct","link":"https://www.python-summit.ch/","description":"With the introduction of PEP 484 type annotations, Python has made a big step towards making programs safer by statically ruling out type errors. But what if we go five steps further and prove that our programs don't crash for any reason at all and, moreover, do what we want them to do? In this talk, I will give an informal overview about formal verification, what it is and what it can (and can't) do. I'll show how to use the automated verifier Nagini to express what a program is supposed to do and prove that it does.\n\nWith the introduction of PEP 484 type annotations, Python has made a big step towards making programs safer by statically ruling out type errors. But what if we go five steps further and prove that our programs don't crash for any reason at all and, moreover, do what we want them to do? In this talk, I will give an informal overview about formal verification, what it is and what it can (and can't) do. I'll show how to use the automated verifier Nagini to express what a program is supposed to do and prove that it does.","original_language":"eng","persons":["Marco Eilers"],"tags":["import","56128","2023","Main"],"view_count":58,"promoted":false,"date":"2023-09-21T11:15:00.000+02:00","release_date":"2023-10-05T00:00:00.000+02:00","updated_at":"2026-03-05T16:45:09.332+01:00","length":2184,"duration":2184,"thumb_url":"https://static.media.ccc.de/media/conferences/sps23/56128-687a4b0c-99ae-41ee-b3c6-d5815aa0669e.jpg","poster_url":"https://static.media.ccc.de/media/conferences/sps23/56128-687a4b0c-99ae-41ee-b3c6-d5815aa0669e_preview.jpg","timeline_url":"https://static.media.ccc.de/media/conferences/sps23/56128-687a4b0c-99ae-41ee-b3c6-d5815aa0669e.timeline.jpg","thumbnails_url":"https://static.media.ccc.de/media/conferences/sps23/56128-687a4b0c-99ae-41ee-b3c6-d5815aa0669e.thumbnails.vtt","frontend_link":"https://media.ccc.de/v/sps23-56128-proving-python-code-correct","url":"https://api.media.ccc.de/public/events/687a4b0c-99ae-41ee-b3c6-d5815aa0669e","conference_title":"Swiss Python Summit 2023","conference_url":"https://api.media.ccc.de/public/conferences/sps23","related":[]},{"guid":"b9a8436a-3b98-4201-9daf-18ae9f53f871","title":"Closing","subtitle":null,"slug":"sps23-56137-closing","link":"https://www.python-summit.ch/","description":"Closing\n\n","original_language":"eng","persons":["Stefan Keller"],"tags":["import","56137","2023","Main"],"view_count":20,"promoted":false,"date":"2023-09-21T18:50:00.000+02:00","release_date":"2023-10-05T00:00:00.000+02:00","updated_at":"2024-09-07T16:15:02.131+02:00","length":322,"duration":322,"thumb_url":"https://static.media.ccc.de/media/conferences/sps23/56137-b9a8436a-3b98-4201-9daf-18ae9f53f871.jpg","poster_url":"https://static.media.ccc.de/media/conferences/sps23/56137-b9a8436a-3b98-4201-9daf-18ae9f53f871_preview.jpg","timeline_url":"https://static.media.ccc.de/media/conferences/sps23/56137-b9a8436a-3b98-4201-9daf-18ae9f53f871.timeline.jpg","thumbnails_url":"https://static.media.ccc.de/media/conferences/sps23/56137-b9a8436a-3b98-4201-9daf-18ae9f53f871.thumbnails.vtt","frontend_link":"https://media.ccc.de/v/sps23-56137-closing","url":"https://api.media.ccc.de/public/events/b9a8436a-3b98-4201-9daf-18ae9f53f871","conference_title":"Swiss Python Summit 2023","conference_url":"https://api.media.ccc.de/public/conferences/sps23","related":[]},{"guid":"d433f989-d4d2-4de6-b969-613aa12c57ae","title":"A walk with CPython","subtitle":null,"slug":"sps23-56131-a-walk-with-cpython","link":"https://www.python-summit.ch/","description":"Did you know that Python has a compiler even though it’s an interpreted language? In this talk, we will embark on a step-by-step exploration of a simple program, unraveling the inner workings of CPython — the default reference implementation of Python. We’ll begin with the compiler, which performs the task of converting Python code into OPCODES. Next, we’ll explore the famous interpreter. We’ll uncover how it works with the generated OPCODES, executing the program line by line and talk about an example of optimisations it does along the way. We’ll explore how Python manages variables, function calls, and exceptions. Additionally, we’ll touch upon object creation and destruction. The primary aim of this talk is to provide a concise yet comprehensive overview of the components involved in executing a simple program within CPython. Through precise references to the CPython code base, attendees will be equipped to explore further on their own.\n\nDid you know that Python has a compiler even though it’s an interpreted language? In this talk, we will embark on a step-by-step exploration of a simple program, unraveling the inner workings of CPython — the default reference implementation of Python. We’ll begin with the compiler, which performs the task of converting Python code into OPCODES. Next, we’ll explore the famous interpreter. We’ll uncover how it works with the generated OPCODES, executing the program line by line and talk about an example of optimisations it does along the way. We’ll explore how Python manages variables, function calls, and exceptions. Additionally, we’ll touch upon object creation and destruction. The primary aim of this talk is to provide a concise yet comprehensive overview of the components involved in executing a simple program within CPython. Through precise references to the CPython code base, attendees will be equipped to explore further on their own.","original_language":"eng","persons":["Sadhana Srinivasan"],"tags":["import","56131","2023","Main"],"view_count":70,"promoted":false,"date":"2023-09-21T13:35:00.000+02:00","release_date":"2023-10-05T00:00:00.000+02:00","updated_at":"2025-10-17T18:30:05.989+02:00","length":1885,"duration":1885,"thumb_url":"https://static.media.ccc.de/media/conferences/sps23/56131-d433f989-d4d2-4de6-b969-613aa12c57ae.jpg","poster_url":"https://static.media.ccc.de/media/conferences/sps23/56131-d433f989-d4d2-4de6-b969-613aa12c57ae_preview.jpg","timeline_url":"https://static.media.ccc.de/media/conferences/sps23/56131-d433f989-d4d2-4de6-b969-613aa12c57ae.timeline.jpg","thumbnails_url":"https://static.media.ccc.de/media/conferences/sps23/56131-d433f989-d4d2-4de6-b969-613aa12c57ae.thumbnails.vtt","frontend_link":"https://media.ccc.de/v/sps23-56131-a-walk-with-cpython","url":"https://api.media.ccc.de/public/events/d433f989-d4d2-4de6-b969-613aa12c57ae","conference_title":"Swiss Python Summit 2023","conference_url":"https://api.media.ccc.de/public/conferences/sps23","related":[]},{"guid":"c470c6a7-fbf1-4f96-9e50-da72940cc9ef","title":"Voice Control in Action: A Python-Based Approach for Operating a Quadrupedal Robot","subtitle":null,"slug":"sps23-56132-voice-control-in-action-a-py","link":"https://www.python-summit.ch/","description":"In an era where autonomous robots, such as Boston Dynamics' quadrupedal robot, Spot, are capable of navigating complex environments, it is crucial to ensure the safety of an operator. Traditional control mechanisms, such as a remote control, may not be feasible or safe in harsh or hazardous conditions. Addressing this, we present a novel Python-based voice control module for Spot. Our module enables hands-free operation of the robot, allowing it to execute verbally issued commands. To enhance the interaction between an operator and a robot, we've integrated an additional text-to-speech synthesizer, establishing a two-way communication channel. Our solution leverages state-of-the-art Python libraries for speech-to-text translation and lightweight command extraction, which significantly extends the possibilities of interaction. As a result, Spot can perform basic tasks such as standing up or navigating to specific coordinates using only voice commands. This novel approach, promotes safety and efficiency in operating autonomous robots, opening up new possibilities for their use in challenging environments.\n\nIn an era where autonomous robots, such as Boston Dynamics' quadrupedal robot, Spot, are capable of navigating complex environments, it is crucial to ensure the safety of an operator. Traditional control mechanisms, such as a remote control, may not be feasible or safe in harsh or hazardous conditions. Addressing this, we present a novel Python-based voice control module for Spot. Our module enables hands-free operation of the robot, allowing it to execute verbally issued commands. To enhance the interaction between an operator and a robot, we've integrated an additional text-to-speech synthesizer, establishing a two-way communication channel. Our solution leverages state-of-the-art Python libraries for speech-to-text translation and lightweight command extraction, which significantly extends the possibilities of interaction. As a result, Spot can perform basic tasks such as standing up or navigating to specific coordinates using only voice commands. This novel approach, promotes safety and efficiency in operating autonomous robots, opening up new possibilities for their use in challenging environments.","original_language":"eng","persons":["Robin Ehrensperger"],"tags":["import","56132","2023","Main"],"view_count":83,"promoted":false,"date":"2023-09-21T16:00:00.000+02:00","release_date":"2023-10-05T00:00:00.000+02:00","updated_at":"2026-02-22T18:15:07.001+01:00","length":1855,"duration":1855,"thumb_url":"https://static.media.ccc.de/media/conferences/sps23/56132-c470c6a7-fbf1-4f96-9e50-da72940cc9ef.jpg","poster_url":"https://static.media.ccc.de/media/conferences/sps23/56132-c470c6a7-fbf1-4f96-9e50-da72940cc9ef_preview.jpg","timeline_url":"https://static.media.ccc.de/media/conferences/sps23/56132-c470c6a7-fbf1-4f96-9e50-da72940cc9ef.timeline.jpg","thumbnails_url":"https://static.media.ccc.de/media/conferences/sps23/56132-c470c6a7-fbf1-4f96-9e50-da72940cc9ef.thumbnails.vtt","frontend_link":"https://media.ccc.de/v/sps23-56132-voice-control-in-action-a-py","url":"https://api.media.ccc.de/public/events/c470c6a7-fbf1-4f96-9e50-da72940cc9ef","conference_title":"Swiss Python Summit 2023","conference_url":"https://api.media.ccc.de/public/conferences/sps23","related":[]},{"guid":"5ddd4458-db49-40b7-841b-b70656095ec6","title":"Lightning Talks","subtitle":null,"slug":"sps23-56135-lightning-talks","link":"https://www.python-summit.ch/","description":"We are happy to introduce Lightning Talks to this year's conference!\n\n","original_language":"eng","persons":["Orga"],"tags":["import","56135","2023","Main"],"view_count":93,"promoted":false,"date":"2023-09-21T18:20:00.000+02:00","release_date":"2023-10-05T00:00:00.000+02:00","updated_at":"2025-11-10T21:30:09.712+01:00","length":1886,"duration":1886,"thumb_url":"https://static.media.ccc.de/media/conferences/sps23/56135-5ddd4458-db49-40b7-841b-b70656095ec6.jpg","poster_url":"https://static.media.ccc.de/media/conferences/sps23/56135-5ddd4458-db49-40b7-841b-b70656095ec6_preview.jpg","timeline_url":"https://static.media.ccc.de/media/conferences/sps23/56135-5ddd4458-db49-40b7-841b-b70656095ec6.timeline.jpg","thumbnails_url":"https://static.media.ccc.de/media/conferences/sps23/56135-5ddd4458-db49-40b7-841b-b70656095ec6.thumbnails.vtt","frontend_link":"https://media.ccc.de/v/sps23-56135-lightning-talks","url":"https://api.media.ccc.de/public/events/5ddd4458-db49-40b7-841b-b70656095ec6","conference_title":"Swiss Python Summit 2023","conference_url":"https://api.media.ccc.de/public/conferences/sps23","related":[]},{"guid":"2868b941-2565-42b7-95ac-93f5861b6dfc","title":"Kivy: Cross-platform App development for Pythonistas","subtitle":null,"slug":"sps23-56130-kivy-cross-platform-app-deve","link":"https://www.python-summit.ch/","description":"“Kivy makes Pythonistas happier”. Why? Cause with Kivy you’ll drop any non-pythonic way to develop mobile and desktop apps, or it’ll help you to start a new career in app development, with Python. We will talk about GUI apps development with Kivy while keeping a focus on all the tools in the Kivy ecosystem which are making it possible to create, build and distribute fully-featured apps on all the supported platforms (Android, iOS, Linux, macOS, and Windows). This talk will go through some common pitfalls of running machine learning in production settings. We will start with the requirements and work through the data acquisition and model-building phase. We explore beyond the current MLOps hype and try to understand what it takes to run a successful project that is ready to ripe like a fine wine rather than old milk.\n\n“Kivy makes Pythonistas happier”. Why? Cause with Kivy you’ll drop any non-pythonic way to develop mobile and desktop apps, or it’ll help you to start a new career in app development, with Python. We will talk about GUI apps development with Kivy while keeping a focus on all the tools in the Kivy ecosystem which are making it possible to create, build and distribute fully-featured apps on all the supported platforms (Android, iOS, Linux, macOS, and Windows). This talk will go through some common pitfalls of running machine learning in production settings. We will start with the requirements and work through the data acquisition and model-building phase. We explore beyond the current MLOps hype and try to understand what it takes to run a successful project that is ready to ripe like a fine wine rather than old milk.","original_language":"eng","persons":["Mirko Galimberti"],"tags":["import","56130","2023","Main"],"view_count":107,"promoted":false,"date":"2023-09-21T13:00:00.000+02:00","release_date":"2023-10-05T00:00:00.000+02:00","updated_at":"2025-12-24T11:45:06.895+01:00","length":1472,"duration":1472,"thumb_url":"https://static.media.ccc.de/media/conferences/sps23/56130-2868b941-2565-42b7-95ac-93f5861b6dfc.jpg","poster_url":"https://static.media.ccc.de/media/conferences/sps23/56130-2868b941-2565-42b7-95ac-93f5861b6dfc_preview.jpg","timeline_url":"https://static.media.ccc.de/media/conferences/sps23/56130-2868b941-2565-42b7-95ac-93f5861b6dfc.timeline.jpg","thumbnails_url":"https://static.media.ccc.de/media/conferences/sps23/56130-2868b941-2565-42b7-95ac-93f5861b6dfc.thumbnails.vtt","frontend_link":"https://media.ccc.de/v/sps23-56130-kivy-cross-platform-app-deve","url":"https://api.media.ccc.de/public/events/2868b941-2565-42b7-95ac-93f5861b6dfc","conference_title":"Swiss Python Summit 2023","conference_url":"https://api.media.ccc.de/public/conferences/sps23","related":[]},{"guid":"a07eb56d-9a56-4cf1-9ec9-edbf211274d4","title":"Did you know Matplotlib could do that?","subtitle":null,"slug":"sps23-56129-did-you-know-matplotlib-coul","link":"https://www.python-summit.ch/","description":"In this talk, I am going to expand on my NormConf Lightning Talk “How to stop crying when using Matplotlib”. Matplotlib is my tool of choice for custom data visualizations and I have been teaching it for the last 2 years in a dedicated course at HSLU. It is an extremely popular data visualization library among the Python data science community and often the only one that can produce fully customized, complex visualizations. However, due to its long history, API changes and lack of good educational resources, many people struggle to harness all its capabilities, ending up frustrated, dissatisfied and with an ugly chart as an output. I'm going to explain why Matplotlib works the way it works and how to work with it instead of against it. I will also show some tips and tricks for writing sustainable code and and share a few recipes for making beautiful, complex data visualizations.\n\nIn this talk, I am going to expand on my NormConf Lightning Talk “How to stop crying when using Matplotlib”. Matplotlib is my tool of choice for custom data visualizations and I have been teaching it for the last 2 years in a dedicated course at HSLU. It is an extremely popular data visualization library among the Python data science community and often the only one that can produce fully customized, complex visualizations. However, due to its long history, API changes and lack of good educational resources, many people struggle to harness all its capabilities, ending up frustrated, dissatisfied and with an ugly chart as an output. I'm going to explain why Matplotlib works the way it works and how to work with it instead of against it. I will also show some tips and tricks for writing sustainable code and and share a few recipes for making beautiful, complex data visualizations.","original_language":"eng","persons":["Teresa Kubacka"],"tags":["import","56129","2023","Main"],"view_count":256,"promoted":false,"date":"2023-09-21T11:50:00.000+02:00","release_date":"2023-10-05T00:00:00.000+02:00","updated_at":"2026-03-21T02:30:04.477+01:00","length":1760,"duration":1760,"thumb_url":"https://static.media.ccc.de/media/conferences/sps23/56129-a07eb56d-9a56-4cf1-9ec9-edbf211274d4.jpg","poster_url":"https://static.media.ccc.de/media/conferences/sps23/56129-a07eb56d-9a56-4cf1-9ec9-edbf211274d4_preview.jpg","timeline_url":"https://static.media.ccc.de/media/conferences/sps23/56129-a07eb56d-9a56-4cf1-9ec9-edbf211274d4.timeline.jpg","thumbnails_url":"https://static.media.ccc.de/media/conferences/sps23/56129-a07eb56d-9a56-4cf1-9ec9-edbf211274d4.thumbnails.vtt","frontend_link":"https://media.ccc.de/v/sps23-56129-did-you-know-matplotlib-coul","url":"https://api.media.ccc.de/public/events/a07eb56d-9a56-4cf1-9ec9-edbf211274d4","conference_title":"Swiss Python Summit 2023","conference_url":"https://api.media.ccc.de/public/conferences/sps23","related":[]},{"guid":"c2a48559-b25a-4e88-82a5-4146e7a324cb","title":"Welcome","subtitle":null,"slug":"sps23-56136-welcome","link":"https://www.python-summit.ch/","description":"Welcome\n\n","original_language":"eng","persons":["Stefan Keller"],"tags":["import","56136","2023","Main"],"view_count":31,"promoted":false,"date":"2023-09-21T11:00:00.000+02:00","release_date":"2023-10-05T00:00:00.000+02:00","updated_at":"2026-04-13T16:30:04.987+02:00","length":239,"duration":239,"thumb_url":"https://static.media.ccc.de/media/conferences/sps23/56136-c2a48559-b25a-4e88-82a5-4146e7a324cb.jpg","poster_url":"https://static.media.ccc.de/media/conferences/sps23/56136-c2a48559-b25a-4e88-82a5-4146e7a324cb_preview.jpg","timeline_url":"https://static.media.ccc.de/media/conferences/sps23/56136-c2a48559-b25a-4e88-82a5-4146e7a324cb.timeline.jpg","thumbnails_url":"https://static.media.ccc.de/media/conferences/sps23/56136-c2a48559-b25a-4e88-82a5-4146e7a324cb.thumbnails.vtt","frontend_link":"https://media.ccc.de/v/sps23-56136-welcome","url":"https://api.media.ccc.de/public/events/c2a48559-b25a-4e88-82a5-4146e7a324cb","conference_title":"Swiss Python Summit 2023","conference_url":"https://api.media.ccc.de/public/conferences/sps23","related":[]},{"guid":"a2f140ce-acee-4061-aa85-d7fda0fa08e8","title":"Asynchronous Multiprocess Large Model Training on PyTorch for Synthetic Cities Generation","subtitle":null,"slug":"sps23-56134-asynchronous-multiprocess-la","link":"https://www.python-summit.ch/","description":"With the increasing popularity of large machine learning models capable of solving complicated tasks in the sphere of natural language processing, computer vision, etc., the need for distributed computation has rocketed significantly. We would like to provide the 'surgery' of parallelization methods from one of the most popular deep learning frameworks - PyTorch. Particularly, we would like to demonstrate two main approaches: data parallelization (when the single module is trained asynchronically in streams) and model parallelization (both horizontal – with several models trained simultaneously, and vertical – when the model parameters are split into groups). Moreover, we will guide through the cases of different resources availability, i.e. what could be done when having only CPUs, a single GPU, or multiple GPUs. Our showing is to be done on an example of urban planning problem solution, where we are creating synthetic cities with deep convolutional generative adversarial neural networks. These models have complicated architecture and billions of parameters when generating images starting from mid-resolution like 256x256, which makes them perfect instances for distributed computation demonstration.\n\nWith the increasing popularity of large machine learning models capable of solving complicated tasks in the sphere of natural language processing, computer vision, etc., the need for distributed computation has rocketed significantly. We would like to provide the 'surgery' of parallelization methods from one of the most popular deep learning frameworks - PyTorch. Particularly, we would like to demonstrate two main approaches: data parallelization (when the single module is trained asynchronically in streams) and model parallelization (both horizontal – with several models trained simultaneously, and vertical – when the model parameters are split into groups). Moreover, we will guide through the cases of different resources availability, i.e. what could be done when having only CPUs, a single GPU, or multiple GPUs. Our showing is to be done on an example of urban planning problem solution, where we are creating synthetic cities with deep convolutional generative adversarial neural networks. These models have complicated architecture and billions of parameters when generating images starting from mid-resolution like 256x256, which makes them perfect instances for distributed computation demonstration.","original_language":"eng","persons":["Furio Valerio Sordini","Pavel Sulimov"],"tags":["import","56134","2023","Main"],"view_count":46,"promoted":false,"date":"2023-09-21T17:45:00.000+02:00","release_date":"2023-10-05T00:00:00.000+02:00","updated_at":"2026-02-24T16:30:08.464+01:00","length":1843,"duration":1843,"thumb_url":"https://static.media.ccc.de/media/conferences/sps23/56134-a2f140ce-acee-4061-aa85-d7fda0fa08e8.jpg","poster_url":"https://static.media.ccc.de/media/conferences/sps23/56134-a2f140ce-acee-4061-aa85-d7fda0fa08e8_preview.jpg","timeline_url":"https://static.media.ccc.de/media/conferences/sps23/56134-a2f140ce-acee-4061-aa85-d7fda0fa08e8.timeline.jpg","thumbnails_url":"https://static.media.ccc.de/media/conferences/sps23/56134-a2f140ce-acee-4061-aa85-d7fda0fa08e8.thumbnails.vtt","frontend_link":"https://media.ccc.de/v/sps23-56134-asynchronous-multiprocess-la","url":"https://api.media.ccc.de/public/events/a2f140ce-acee-4061-aa85-d7fda0fa08e8","conference_title":"Swiss Python Summit 2023","conference_url":"https://api.media.ccc.de/public/conferences/sps23","related":[]},{"guid":"38e9cc28-2cea-45a0-9a43-ce84841d9c38","title":"A Short History of Python Web Frameworks","subtitle":null,"slug":"sps23-56133-a-short-history-of-python-we","link":"https://www.python-summit.ch/","description":"Python is currently a powerhouse when it comes to web development. But, how did it all start? We explore Python's humble web development beginnings, from CGI to WSGI and the eventual rise of large frameworks like Django, and smaller ones like Flask and FastAPI.\n\nPython is currently a powerhouse when it comes to web development. But, how did it all start? We explore Python's humble web development beginnings, from CGI to WSGI and the eventual rise of large frameworks like Django, and smaller ones like Flask and FastAPI.","original_language":"eng","persons":["Quazi Nafiul Islam"],"tags":["import","56133","2023","Main"],"view_count":194,"promoted":false,"date":"2023-09-21T16:35:00.000+02:00","release_date":"2023-10-05T00:00:00.000+02:00","updated_at":"2026-03-06T11:45:08.054+01:00","length":1801,"duration":1801,"thumb_url":"https://static.media.ccc.de/media/conferences/sps23/56133-38e9cc28-2cea-45a0-9a43-ce84841d9c38.jpg","poster_url":"https://static.media.ccc.de/media/conferences/sps23/56133-38e9cc28-2cea-45a0-9a43-ce84841d9c38_preview.jpg","timeline_url":"https://static.media.ccc.de/media/conferences/sps23/56133-38e9cc28-2cea-45a0-9a43-ce84841d9c38.timeline.jpg","thumbnails_url":"https://static.media.ccc.de/media/conferences/sps23/56133-38e9cc28-2cea-45a0-9a43-ce84841d9c38.thumbnails.vtt","frontend_link":"https://media.ccc.de/v/sps23-56133-a-short-history-of-python-we","url":"https://api.media.ccc.de/public/events/38e9cc28-2cea-45a0-9a43-ce84841d9c38","conference_title":"Swiss Python Summit 2023","conference_url":"https://api.media.ccc.de/public/conferences/sps23","related":[]}]}