skip to content
Sandesh Bhandari

learning rust lang

/ 120 min read

Table of Contents

1. Introduction

I have been trying to learn Rust for a while now because I kept running into it. Many of the GitHub projects and repositories that interested me were written in Rust, especially those focused on building scalable and reliable systems, inference runtimes, low-level control, and hardware or GPU integrations. Eventually, I realized it made more sense to start learning it early rather than keep putting it off.

Over the next few weeks, I spent my time building small projects in Rust, applying what I learned and reinforcing the language’s core concepts. Having already worked with Python and JavaScript, and with enough C++ to understand manual memory management, I quickly noticed how differently each language approaches memory.

Python abstracts memory management almost entirely, while JavaScript gives developers a great deal of flexibility with very few constraints. C++, on the other hand, provides complete manual control but also places the responsibility for correctness entirely on the programmer. Rust sits in its own category. It delivers performance comparable to C++ while preventing entire classes of memory bugs through compile-time ownership, borrowing, and lifetime checks. Instead of relying on a garbage collector or trusting the programmer to manage memory correctly, the compiler enforces memory safety before the code can even run.

The learning curve was definitely steeper than I expected, and at times it felt frustrating. But over time, I began to appreciate the language’s design philosophy. Rather than fighting the compiler, I found myself thinking more carefully about ownership, data flow, and correctness before writing code. That shift in mindset ultimately made me a better programmer.

One thing I especially came to appreciate was the Rust community’s emphasis on consistency. The ecosystem encourages common patterns, strong tooling, and shared coding standards, making it easier to read, understand, and contribute to other people’s code. As I built more projects, I found myself enjoying Rust more and more, not just because of its performance, but because of the way it encourages writing reliable, maintainable software from the beginning.

2. Setup

I set up Rust using rustup for toolchain management. I used VS Code as my editor, with the rust-analyzer extension for autocomplete, inline error messages, and type hints. The project structure was one Cargo project per concept, so it could be well managed and accessible and connected to GitHub so I could save my progress.

eyJ2ZXJzaW9uIjoiMSIsImVuY29kaW5nIjoiYnN0cmluZyIsImNvbXByZXNzZWQiOnRydWUsImVuY29kZWQiOiJ4nO2d3Y7bxlx1MDAxNYDv/Vx1MDAxNFx1MDAwYiWXLT0zZ37O8Z3tOKnbOkGzbdO0KFx1MDAwNFqitIy1okBRtreGgT6EL/t0eZLOyLtcInd3ZHNGNFwigfRcdTAwMWFcdTAwMGIsf0ec83G++dW7XHUwMDA3Z2ej6mqVjVx1MDAxZZ2NsreTdJFPy/TN6Hdu++usXFznxdLuXHUwMDEy27/XxaacbI+8qKrV+tHDh/VcdTAwMTnJpLj8eFa2yC6zZbW2x/3L/n129m772+7Jp+7caVq+ejnfXHUwMDFlu916c/cym1Tpcr7I6l1v3a0pYYaYkoaMXHUwMDExRuNu75XdyylcdTAwMTFaMEFAjIBcdTAwMTlmdrvf5NPqwlx1MDAxZWJcdTAwMTBcdTAwMTNlryCUICU5k7sjLrJ8flHZQ+zJiZRcXEgwhFrYO+2O+ZiiR2dst2VdlcWr7GmxKEqX7KpMl+tVWtqPXFwn/GU6eTUvi81yujvuK565n/qYWb5YnFdX26vbR2tcdTAwMWbj6M49frr+XHUwMDA04s72fWfZXHUwMDFizi+W2do9er7bWqzSSV5tXHUwMDFmXHUwMDE2qz+FS93q+XSbS/+u01Sml9lzl03LzWKx25wvp5nLi1HKbt1tOb2+201cdTAwMTbX2Vx011ve12nPMndhro1EXHKA9aeq48ygurv1+2K5jTlOXHUwMDAywCBh/cny9Tc22KrtZWfpYp3Vz9+l7VkjXHUwMDEw64+4WU3Tj6dwY5RUQmtQVF90kS9f3f38i2Lyqr7Lg8bnulx1MDAxM9uTy+n9wK6yt9XtmNYqYVxmtbSBXHKCI1e3Ylx1MDAxYTBcdTAwMDHgaHcxzoHBvYjmUiQoXHJqQlx1MDAwM0xqxPsh7cBoXHUwMDFmxF9Npfv5ZFx1MDAwMHtcdTAwMDP9JINY+IP41tE30WqzSSlcdTAwMTQkPdFcbnxfsGqbJ4pJozqOVcVBaVxiiNU6XHUwMDE4XVx1MDAxMG5zMcvOys26+v0v9m2+zK5cdTAwMWU2MrNYVuf5f7a06Vtbv00v84V7+urWXHUwMDA1XHUwMDFmL/K5e1x1MDAxMKNFNmtcdTAwMDSFfVx1MDAxOFVuXHUwMDBiht3uqljVeyf2emm+zMr7WVSU+Txfpou/tkhsuqmKXHUwMDFms/XH5FblJms+lexcdTAwMGY7XHUwMDBlXHUwMDEy8Vx0XsuiqNpcdTAwMDCrblx1MDAxM2rqXHUwMDEw3DHJZMKlLUhs/pCWKD3FTCCTs/QlY6onTMr2TFx1MDAxYSaEXHUwMDAwo3Uz4K6RvLetLj7A6lx1MDAwMerG67QjJIlcdTAwMWaI5KnQ+CVBnPJJXHUwMDA0h824q1x1MDAwYkeZSDSGcck1s3lTXHUwMDA3+VA4tlx1MDAwMFG3XHUwMDA3UVx1MDAxYlxywtpcdTAwMGJrxtpN2bhcdTAwMTdEI8G6dtOxO1x1MDAwMlHal4JoXHUwMDA2XyiIv374369cdTAwMWb+a/+fMT5+nZZ5+nKRrY9cdTAwMTnJz6a4Izgv28BpTfazdCqeoLNeo4WwtbWGQcXCSZPpZJb1XHUwMDA0TtNcdTAwMWVOQjKcWzJcdTAwMDLhXHUwMDE0RjIlOi8lrVx1MDAwYquD4Ly0SCTl+ohhvJfCjuBrZahcdTAwMDI/XzRcIkuM4sRcZrhcdTAwMWG4wMPhy9DQjHpcdTAwMDJcdTAwMWZcdTAwMDZUXHUwMDFipbJVXHUwMDAwIOFz1P30SSaYreJ13cKhpJaCXHUwMDBlge9pWs6LpCouXHUwMDE3R8yfL5HdICii5Fx1MDAxNDxyqmSi0GqKJPs+REWH11x1MDAxMnslp4/bI4hISmtcdTAwMTUmp9qeYitcdTAwMGWy83ZcdTAwMWLJXHUwMDA168pNxXi2WU4qm+xTcVN/ijtiM85NPXAqWzxcIlx1MDAxN/VTXHUwMDFhlLRcdTAwMDWST1x1MDAwMkpFXHUwMDAwXHUwMDBlXHUwMDA0gnxM3utcdTAwMGW4YVKi4sioXHUwMDAxcjdMciFAXHUwMDFkVCr2VklFnJJ6mDMmIbJwmsOp65WLPm1PnWBIXHUwMDE2ISV9XHUwMDFkbnup46iZVLYwPD7sei6jXHUwMDEwJaPaL6NEZIRcdTAwMDLXXHUwMDFlN3QjXHUwMDA2MvgsoOQjqYnQeFx1MDAxOdxro8JcdTAwMDBjKFXnjTFgc102g+9cdTAwMDBcdTAwMWKFcfHGXHUwMDEysb7IVydio/5cdTAwMTR3XHUwMDA0Z5yNeuhcdTAwMWNsNIbJb1x1MDAwM5jkjFx1MDAxM5PNXHUwMDEyrk25yGxdTnMm66g+lnKxtzpcbnE66oFu0NE47L5cdTAwMGLBXHUwMDBlQG6HLYVgZ1DYlyFnx0ddz21URtkoeWxcdTAwMTRw2zTKyHA92Ggwgs9cdTAwMDNcdTAwMTBcdTAwMTTc2LhcdTAwMTeBfYNcZpVEN9S2a1x1MDAxZFXGiK50VI5tTmwm1ak0jfrS21x1MDAxMZmtVJRT/fbbh+agojFA/jGku1x1MDAxMLir6HmB3Fsmgq1QKq3h+Fpoemuisp2JNoYu7mNuMNE46v5cdTAwMTRAnTGaMUaNyni77lxikGRcdTAwMDZcdTAwMTM9Nlx1MDAxM1UxJiqEx0SFSjRaJ0FEjjB00lx1MDAwN1wi+FwiXHUwMDAwQWRaSy0xbJxcZlx1MDAxMUnQyLrupteMa3HQWO6G2alxttxcXJ6Kh95PbUdUtrNQrKNuXHUwMDFmloOFxsD4fYiFamJuUlqQhXKUII2hI+wo7K2GqnZcdTAwMWEq6yH4+6BcdTAwMWI0NFx1MDAwZbtcdTAwMWaCXHUwMDFhRCXYiFx1MDAwZmtcdTAwMTDlQlxuYWzFsYb1WLDruYfqKFx1MDAwZlVcdTAwMWVcdTAwMGYlliCQNopcdTAwMTiAaMxcXFx1MDAxYjS0XHUwMDA1gn9cdNFQ++7TUlx1MDAxYV9X4P7ueXuClqQ7XHUwMDFmLFxuqOggXHUwMDAyXHUwMDFiXqfHWVlcdTAwMTbl+FwiXU7tleYnoqOfSHZHlLbrqL/TUuPDdPDSXHUwMDE4On9sT6dcdTAwMDIwXHUwMDEy0LtgxP5mXHUwMDFhcrXEZlx1MDAxN8exXHUwMDE0j721Ut3KSlx1MDAwMepcdTAwMTfuPuRcdTAwMDYrjYPuvD10hKSZIO8k+73QXHTLqX1lNmY6XHUwMDFjXHUwMDBidD13Ulx1MDAxM+Wk6HFSzVx1MDAxMlxyXFxcdTAwMTNqZt20i2UueiWlf2tPIHKwVUPkYZ306NbAXHUwMDAy0aClq056N/ymIyk140mxWGQnNYdpX5o7XHUwMDAytJ2Owp1cdTAwMTZcdTAwMWJcdTAwMGahg47GcPn39lxcXG7lxqIxXG7rNbRYXG5cdTAwMDQz6Oj13t9eR007XHUwMDFkbaxcdTAwMTe4XHUwMDBmuUFH46D7KaCFXHUwMDA2pLRZXHUwMDEx2FdcdTAwMGaARipcdTAwMWN89Nh8XHUwMDE0Y3xcdTAwMTS4x0dcdTAwMTV3y65Z51x1MDAxMUZcdTAwMDGxYbWnMFx1MDAwNH9cdTAwMGVAkLhbtFx1MDAwMFx1MDAwMpd7UmRcZndzzDpcdTAwMTdSoVx1MDAxYlx1MDAwYmdcdTAwMWUmpDjOq6xMq6I8XHUwMDE1XHUwMDFk9ae4IzqjJjH58Fx1MDAxY2Q0XHUwMDA2yn9cdTAwMDbIKGlbL4OwgaNcdTAwMGVHyWyBWmdgd+WiPqiS2FtcdTAwMWLFqDlMPuZcdTAwMDZcdTAwMWKNoy5tT922691gYI+9W/uCaeBfolx1MDAwZXhcdTAwMTh1PbdRirJR6Vt71NqoXHUwMDE1XHUwMDFlbiv6inMzyGhcdTAwMTCBk/ZcdTAwMDS6QTOoXHUwMDE0+tfl3oegXHUwMDAyXHK2PvhcdTAwMDVmMNmKZleNozSuLsosnZ6KifrS21x1MDAxMZdRM5h8YFx1MDAwZVx1MDAxZVx1MDAxYcPjNKBE1ChRyLA1ZrRCRq7D4uhcbsTeaihFTWDyITdoaFx1MDAxY3RZSCHIrU1KXGJcXNlJXHUwMDFhQK7MXHUwMDE3XHUwMDE5XHUwMDFhM3joISv9sihcdTAwMTH1fVx1MDAxYoVgiVtcdTAwMGVcdTAwMWS0MkLoYVx1MDAxMfxAXGLnXHUwMDAxXHUwMDEwXCIxYlx1MDAxY4JEVDC1nV9cdTAwMDadL4JvnbixrnOUiX64NjvOxun6ajk5blx1MDAwZv1EaruiMmpcbpNcdTAwMGbLQUNjYLxoXHUwMDBmo9FcdTAwMTKUXHUwMDA075iZ/aPWhNGCXHUwMDE0XHJcdTAwMWF6vfe311DOomYw+ZhcdTAwMWI8NI66PKBcdTAwMTNcdTAwMDKYXHUwMDAyiSysOdRJKDk9OTrs+q2h+bn45upcdJuV6sVcdTAwMGZ/frb67vE/fsZcdTAwMTdtaFSQcIXuXHUwMDBiXHKRjNFK3vFUSjTTSrlBworx5ryZnbbyRIFcIlJcdTAwMTLBXHIuhcPXgFx1MDAxMjPKZF+09Zf2zCpGoIRotJ01mGX3tjbGl6I9SXc/vpRcdTAwMWJcdTAwMDZcdTAwMDdR+/VcdTAwMTHD+nU8o/b39rGN0tXqvLJcdTAwMGZtdPN1q6PXefbmieebZmfbf6NcdTAwMDfXhLtYztzzf/f+wfv/XHUwMDAzjP+wviJ9tree rust-journey/rust-journey/├── 01_variables/main.rsCargo.toml├── 02_functions/main.rsCargo.toml├── 03_ownership/main.rsCargo.toml├── 04_structs/main.rsCargo.toml├── 05_enums/main.rsCargo.toml├── 06_error_handling/main.rsCargo.toml├── 07_collections/main.rsCargo.toml├── 08_iterators/main.rsCargo.toml├── 09_threads/main.rsCargo.toml└── 10_async/main.rsCargo.toml$

Figure: One folder per concept. Each has its own Cargo.toml and main.rs.

Cargo is the Rust build and package manager. Running cargo new creates a project and cargo run compiles and executes it. Dependencies, tests, and builds all go through this one tool, which keeps things simple. One thing though, add **/target/ to your .gitignore before your first push. That folder can get huge, hundreds of megabytes, and once it’s tracked you’ll have to go back and untrack it manually so it would be way easier to just ignore it from the start.

I used the rust-analyzer extension to get inline error messages, type hints, and faster feedback*. It underlines errors as you type and explains them inline, which makes the feedback loop much faster than the usual write-compile-debug cycle.*

3. Concepts Covered

3.1 Variables and Mutability

In Rust, every variable is immutable by default. Once you set a value, it stays that value. To allow a variable to change, you mark it explicitly with mut. This is the opposite of Python, where any variable can be reassigned at any time without declaration.

let name = "Sandesh"; // immutable - cannot be changed
let mut age = 20; // mutable - can be changed
age = 21; // fine because of mut
// name = "someone"; // compile error - name is immutable

What this is used for

Immutability by default prevents accidental changes to data. In a large codebase, knowing a variable cannot change unless it is explicitly marked mut makes the code easier to reason about. When you see mut, it signals intent: this variable is supposed to change. Without it, you can be confident it will not.

3.2 Functions

Functions in Rust use the fn keyword. Unlike Python’s def, you have to declare the type of every argument and the return type. The return type comes after an arrow. There is no return keyword. The last expression without a semicolon is returned automatically.

eyJ2ZXJzaW9uIjoiMSIsImVuY29kaW5nIjoiYnN0cmluZyIsImNvbXByZXNzZWQiOnRydWUsImVuY29kZWQiOiJ4nO1dW3NcdTAwMWJHdn73r5iVqlJUXCKP+3T36YudbFx1MDAxNU1Ja+3asiPJ2WwutTUkhlx1MDAxMlYgwFx1MDAwNUBd1uWqfck+p7a2KnnIr/MvyWlIXCJcdTAwMDaDXHUwMDFloFx1MDAxYmhcdTAwMWEtXHUwMDAxtC2LuJCNme/r853T5/LDJ0Vxa/rmsr71eXGrfn1WXHL6vXH16tZd9/jLejzpj4b0XHUwMDE0n30/XHUwMDE5XY3PZq98Pp1eTj7/7LP5O8qz0cXbd9WD+qJcdTAwMWVOJ/S6f6fvi+KH2Z/0TL/n3nv6bPa62SPvf/O4PptWw2eDev7Ua3r8U1YqLoVcdTAwMTEgLVPKSqGun39Dz4uSXHUwMDFibjQqNFpYI6+ffNXvTZ/TXHUwMDBigDP3I7hFaUFcdK7M9Uue1/1nz6f0XHUwMDFhY02pwNLv4dxYJfH6JW9X9HnBrlx1MDAxZplMx6NcdTAwMTf1yWgwXHUwMDFhu2VPx9VwclmN6ePOXHUwMDE3flqdvXg2XHUwMDFlXVxye9evu1xyXHUwMDE1LZTNX3PeXHUwMDFmXGaeTN/MfjpdVrqEt1q/47fvPlx1MDAwMW893vUu+oXPnlx1MDAwZuvJZGG9o8vqrD91l1xu2PxRt7rLh73ZXHUwMDFk+s/5msbVRf3Q3aLh1WBw/XB/2KvdvbhVsYXfNuy9+23vb+/8dop3j/w4X3tdu1x1MDAxZlxmXHUwMDEylTGavq6faWDMLD36aDSc4VxyjKFbx5SZX43+5Fx1MDAxZVx1MDAwMW06+7Hn1WBSz6+/W9v9XHUwMDA2XGLnXHUwMDFm8eqyV719XHUwMDBiaI2EJrBCWbh+ftBcdTAwMWa+aH/+wejsxfy3fNL4XFxtXFyPxr16XHUwMDFjjG1gXHUwMDBiUG58e1xyXjDMXHUwMDAzV23CXHUwMDAxelveu2eP2UpwekF8s1x1MDAwMOU3XHUwMDAzUJ5cdTAwMDCglmlpXGb48NmFTk5Lt8xaXHUwMDBladEptLaoeFx1MDAxYXRO+9MmXHUwMDAy34NzWr+eLuJSqEVgcr5cdTAwMDRMaXhpXHUwMDE4KqWEQk4k0sswXHUwMDE1otRcdTAwMTE76e3anLM6O6DCzVx1MDAwMFX4gbrw6veItFxcXGK0XHUwMDE2vZA0nZhEepdcdTAwMDYtXHUwMDEzQ9LQetBEQHKOOIc0+vCPrybT4sHV8GxKy51cdTAwMTQ//flvxfGwmo4u3jRu6mg4fdL/0+yD6IVHXHUwMDFmVFx1MDAxN/2Bu1x1MDAwYrjwg49cdTAwMDf9Z+6C3Fx1MDAxYdTnXHJw0EWZ9kmhXFw/PVx1MDAxZF3Onz2jn1f1h/V4+VaNxv1n/WE1eFx1MDAxYbHo6mo6elxcT94ue/Gz02Wqv3rPXGYoOa5cIurVINiGiMatmF2UZVx1MDAwNURcdTAwMWKah5w3IHHaluaDlDgynJhCaiWZXHUwMDE2XinTSUsmOVx1MDAwN81NzqbibNSrI0R6w0C4u9CQ2HMhg2pcdTAwMTmEmoej8DavkcnV5uE260FccvJcdTAwMDPXMLi1hkFcdTAwMTLSlnHEXHUwMDE4YII2pGCcpclcdTAwMTiY58NcdTAwMTBcdTAwMDEj5Vx1MDAwMlx1MDAxZe2ysOayVMyKhj5pylx1MDAxNlx1MDAxNVx1MDAwMUtU9uSe2lx1MDAxM9WiwjdHcqY1XHUwMDFh6/fzOjFcYlx1MDAxYVx1MDAxMSzDXUNwSbM0gdfUJmbh0Vx1MDAxZGmT5uJcdTAwMTY0yHR81S1BVtKMgFx1MDAxMMI0s1x1MDAxOI3xME3qknOu6PJvz7V7J/dOjo/3hGs6nGuSK6WhuZtcdTAwMDVwTVnFmeFi59v9XHUwMDEy16peL2OyLawuXHLbZniFXHUwMDEwvlx1MDAwMV+U+1x1MDAxZcKZUkrLwSSwbT1z1js1e8I3XHUwMDEzzjeQXHUwMDA2ybhcdFx1MDAxNk04q0n7Z0e4o4zpdpSabFVcdTAwMTDP1ktIkCWXiUQkSciTXHUwMDA39/eEaDaCaEojXHUwMDE35DJHqUhcIpowyu7ekVm2bFx1MDAxOVx1MDAxM61KTbQzgm6gVVOLXHUwMDAxXHUwMDA0XHUwMDBm21TJNFx1MDAxM5BARO6VUTuO4Vx1MDAxYXd7XHUwMDE5t1FcXNNCXGJELfPz2D7PmGufp+ZaX/Awpum1+lGo0qpcdTAwMTTqUd4/sV/uy3nOl1x1MDAxMZFcdTAwMTFcdTAwMTDCXGLy11wi1aOkt3A1XHUwMDBm3OdCNMJexlRbWF0qw3ZxXHUwMDExpFwiyVx1MDAwYjvYtVx1MDAxYqHbSTjdUCqFzIJoYmttIJLeRfTQmFx1MDAxZt3uZky2u6mpdlx1MDAxYUQzsZZmgCVcbmut4EbRLmpgflx1MDAwYlx1MDAwZT5bXHUwMDAw3+5F6EhO3Fx1MDAxMUZ6fbYlXHUwMDEyXlx1MDAxM85l31x0i40kqET5XdLd8m1cYneaMeFO09s2ctp4XHUwMDEw63Bt7P9g3DZcItv9XGKykXFcdTAwMDNcdTAwMTL1xjaxtda6WVx0mGUkct+ctjCm6bXhkYPTtlx00Vx1MDAxZYRcdTAwMTNNoWD0paN4hlK6dDmRX3Bk73y2XHUwMDE5XoPYJmAt21x1MDAwZUdsm/HtV1x1MDAxMUFcdTAwMTJcdTAwMDaGXHUwMDFipuJSmDgy8tsk5mfY7mRMtzupyVaNx6NXQVxcXHUwMDEza4/ZXHUwMDA0K1x1MDAwNUKS9JG9StX6KkZEolLWeKpvVotIXHUwMDBimnOEnSeyLpHt019mzLbm4tLQbVxcT4PIplx1MDAxN8s6XHUwMDBlMjJcdTAwMTHVXHUwMDFlxlx1MDAwNEc4Wo5cIjJcdTAwMWGpJVx1MDAxOFx1MDAwYqDyO9HeOyF5Oq7O6qCzNlx0a/l2XHUwMDEwkpsx7tdcdTAwMTHhf1x1MDAwM4JQXHUwMDFld9hGXGY1XG7J3cuObz9kzLZcdTAwMWZSc62qX196ymk9VFuvI1x1MDAwZulaXHUwMDFicu034Vxck4icQ7NcbjYkg0Qrhlqy/GzbXmVrXVx1MDAwZa4mQVTDteFcdTAwMTGwJaDkaZTkXtm1r8O5ZpVUikfWeFx010tDXHUwMDAyz8+u/UPGXFz7h9RcXDtccrZr6122w8n2u0c3pNw3XHUwMDExzpvghHRAr33rPtmWXG64NKjmtyDRybawvJF3eTjZXHUwMDBlcNyCTlx1MDAwMKRdqyZcdTAwMGaO22Zse1x1MDAxNMM2a0GKjrZcdTAwMTddbFOcXHTJhckvb+vHjMn2Y2qyuVx1MDAxNMlcdTAwMDW0drNccuVaXHUwMDFiR1xcKzkwQZ48WTmtPSaOzym7nnLq2FrEPaHct1x1MDAxMZQzSjp1qHyn3KKTc9JcdTAwMTFcdTAwMDSaqeWJOs04eaub+Ivl3GefXHUwMDE1w1ExqS/6s7ym4qe//LXoX1xcXHUwMDBl+nR5i3E9vVx1MDAxYXeUdbOFR3fEyqjVR/SeWUFcXGckX9TT3/v6LHQ0/2hVykHDP5xcdTAwMWYrLFx1MDAxM7ZcdTAwMTFcdTAwMWNdT9hcdTAwMDdcdTAwMGa0Pcnu5O6G+n98XHUwMDE3TljBJUPOILLRh+KAjLbTXdvIVUB8QVx1MDAxOPx9eFx1MDAxZqQ2XG7lclx1MDAwZlx1MDAxYY/VgFxiq1x1MDAxMdxcdTAwMDapXHLWXHUwMDBmXHUwMDEyhI8jUqMsU4L+iTo9NtxqJXdcdTAwMWWHWIvA8G6OWlx1MDAxZFx1MDAxMJhcdTAwMTKBT1widItcdTAwMDZcdTAwMGLWxpXjXHUwMDAzXHRKjdbsPvC8XHUwMDE2hFx1MDAxZVx1MDAxZL35Ntg4Kpmr51x1MDAwM1xi/SB8XHUwMDFhXHUwMDBlQqOMXHUwMDA10/Q8QzJEOZNcIvOeW9V47NWDrSwvd8FaddygeIlLXHUwMDAw9HUj1OFcdTAwMDDcLzH4fcQuyFBcdTAwMDGZ4bhtXHUwMDEwtbSorcknR/ly1G/2XHUwMDBld1/zv1x1MDAxNXNgzL65/vt/3l3/aqHnL/+k9bZbg2oyPVx1MDAxOV1cXPSn9Dm+c2tYus7Tajz9ku5Nf/is/VxcPex1PDN717HjyvO6WrrT9L7mc21S1YPT0asgllx1MDAwZU5cdTAwMDcxXpuAkrluNIyTeJOGzXetWcdfhqVcdTAwMTZSklOvrHF3conF0pQgmDDSkv5cdTAwMDOpff1cdTAwMWR5TJ/qXHUwMDAwWt/mXHUwMDE1q8BsQmloPb5DSv+Ln9IxPaqVXCKua/DamkbweknxXGLrNlximfgkgkDAVVSgZlx1MDAwNY79sVx1MDAwN985dKmU5Vx1MDAwMqTrfobYylx1MDAwMOHMlkYjfVpgXFxb1SjkvVbjorT0ZaSWwIHZRlx1MDAxNelcXJ6buFx1MDAxZdZ52qZcdTAwMWKKLP423DZxV1x1MDAxMUr3yGualqKN81x1MDAxNGMmtVx1MDAxNpynXHUwMDA3rLaNOPNcdTAwMDaRxVx1MDAxN7W/WXUjXHUwMDE0s8PI4cLqwiP6q5pSkycyvIhcYsiYfNzhdtvIXHUwMDBmUlxi/muEXHUwMDEwRMZcdTAwMTSgictccjGGgyHG7fzkbC1cYiMmbFxidkBhSlx1MDAxNP4uXHUwMDAyhYpJaayKLOFcdTAwMTKSXGaxwKwnabyFYXhUJmAvlD75fEChXHUwMDFmhf9cdTAwMTaVs8Ncckpmo1CoXHUwMDE1SvJpst5cdTAwMGJdWGZ4XHUwMDExXHUwMDE0llx1MDAwMbbYIOVm4jJ5dme+IVxiVuFcdTAwMTBUgjwuXHUwMDE5t1xykl8uafdcdTAwMTS731x1MDAwNq9cdTAwMWY+hGU2XHLL+FjaZSlcdTAwMTaJytly4Fx1MDAwNT1ualSgJYCntzmDim1cdTAwMTS8zyjQcurnaEygxTLLuIls+2CZU+BcdTAwMWF3zt1cdTAwMTW4nHpRuVx1MDAxY2axi9KFN9KLXHUwMDFiRaOGXHUwMDFj6o5cdTAwMTb/sVx1MDAxMZQ8rchcckVQzlwiXCIoXHUwMDAyXHJncWPpwFx1MDAxOEDLmd35OftcdTAwMWNp71wiXHUwMDE0i1x1MDAwMyayXHUwMDBioCwuL1lcdTAwMDTlMlwigJKT79quXGL4ICVbL5xsoCS3ptnaICT1XHUwMDE4jWao9c5P0tZhMDx+XCIgnyjeR4HBOlx1MDAwMoNWXHTgXHUwMDEy4tpxS4GaN0fSZYrB8OBJyD5cYsYnilx1MDAwZiD0g/A8XHUwMDAyhNK6wcvNXFzRsHG4KLTJP35yuYxCT/iE81ZW1Y2ET/KsurshXGI+i4AgME3bII+UvrM6dIlq507Y9cOHXHUwMDAwyqZcdTAwMDFcdTAwMTRcdTAwMGZNu4xcdTAwMDWuXHUwMDBmoIDvoD8qglx1MDAxMkDV2+SqXHUwMDE5/qGnqjzfPoLCNDNSaFx1MDAxZSVjLCjNXHUwMDE42p2Td1x1MDAwNTCnPlj6Ztusj6BcdTAwMDDXJXP91LhcdTAwMDar3bBEj6aOjKPkaU5uKI7SXHUwMDBmNydaKXDNfeK6kzNcdTAwMDKxe1taPCqSV6KRsr1BXHUwMDFjxVx1MDAwMa9X0E2kKzSlRWdcdTAwMWNT6V5qsvjKOFwivlwiXHUwMDFhXHUwMDA1jbv2bdvt8j5ITfeHcFx1MDAxMkolOLNGRHYt1y5XXHUwMDE5s/YqZiBcZlx1MDAwZrC0e8RcdTAwMWRAuCVcYl/ERNQtXG5cdTAwMWJVruF0XGZoyFx1MDAxZYDh0ZWQXdB4XFzbm1xirnxcdTAwMTRcdTAwMDBcdTAwMWOEXHUwMDAzXHUwMDEwXGaQpuCAcdugstZlVmVdPOmCK55d0Fx1MDAxM1xcXHUwMDExreFcdTAwMDY3XHUwMDEzXFzJs1x1MDAxZu1cckHwXCJiXHUwMDBmJFx1MDAxYmxcdTAwMTDiOvZJNMzojJrRXHUwMDFlXCIrm0ZWXCKOglhAZIX7LEVMZCWApy6yUkO1XHRHM4qsXGb9XHUwMDFjjYisXHUwMDE41FxumWJxTdulllx1MDAxMqTafWfbXHUwMDE1wJz6YOlcdTAwMWLUsT6yYnhptMsotkq6MFSCXHUwMDA0lTxNyVxyXHUwMDA1VkYxPlx1MDAxZFd0idEnqDtcdTAwMDMr5Fx1MDAwNVqFXG5RpsWjXCKg20ZDolxyXCIrb1x1MDAxYuxcdTAwMTQz/M0vWG5BXHUwMDE17yqTxVNOYzqwZOTK6l5tqlx1MDAwZt2TuIzgXHUwMDFlU1JJqaKcWS2IsNrCznXcOlxmhotcdTAwMTRk+cT0PlxuXGb+McKbZVx1MDAwMqXpqvHsXHUwMDAyodJMuKrknPXIXGaEXHUwMDExPVhcdTAwMDI2QvszNWH5KEA4jlx1MDAwMCFcdTAwMTdcdTAwMDBcdTAwMDZ4XFy5XHUwMDBmXHUwMDE45vKm9O5HXHUwMDE5rUChXHUwMDBiqXjGIXtCKrI1mfVmQiptaOWhg29cYoKTcFxiXHUwMDFhY1xyKIhcdTAwMGIsI7NcXGeVqH2IqWxcdTAwMWFT8ZC0y1K4VtFuYoaWdLfsclx1MDAwZlx1MDAwYk/1j6/3rS6l5FqgZVxuhZUxrXBcdTAwMDNYfJtVUMNGRiSjgMvUz+CIgIu0mjGjvFX1sjtYXG7CIFx1MDAxOJvYwVx1MDAxNUYxjGphsVx1MDAwMrVTXHUwMDFmZn1TdlohQF8xXHUwMDEwIdpcdTAwMWEtmPRP/4iNtuRpZW4o2nJcdTAwMTUhdFC5XHJD2bi8Kk5vI6OQj5m5XHUwMDFlRTDq5dxQZXF5aeIrvf5Lz1x1MDAxY7lcdTAwMGVTwVx1MDAxN1x1MDAxZFvuS4JcdTAwMDdvXHUwMDBmrlx1MDAxYvAqeI1MfuhexctcYrJZi8AwNl+F01x1MDAwZa1J1+VcdTAwMWNgXHUwMDE5X1xyajh9tjFcdTAwMGUxXHUwMDE0hyrmXHUwMDE4qFxyMK8q6ZEqkVx1MDAxZrgqebW1Klx1MDAwMUO6ZLGNbVAulXFcdTAwMTPtSTTmjM3T8P2xVSTElVxcxqXe+nTy3j17vFx1MDAxNpZ0WT90sfx6e1gqw1x1MDAxNCd9XHUwMDEy1/ZcdTAwMDJQatHcZzNE5ZScvKBcdTAwMDGwbbncwF9cdTAwMDOTpVx1MDAxNW5cdTAwMWUwSiBcdTAwMWErX1x1MDAwZkJdXHUwMDFlXHUwMDE0c1x1MDAwN1DfhFx1MDAxYnHOpGTkXHUwMDFj+1x1MDAxNfNSXHUwMDAyzPVOiVx1MDAwNEkjm5tHXCJcdTAwMDdOg5RcdTAwMTCBySXN/PCb775+ePLwafH4/tPvXHUwMDFmP/LLZ7nw6I7kc+dKI6aWrJLSM1x1MDAxNVOFcJJDK8ailmMstFx1MDAwYpWGNiGraC9cdTAwMDKtPG4sd1x1MDAwYoog5V5ccvn6Uzgp3ZhQ1lFdatpcdTAwMGbOpzNzbZCnZiRaKzlu5cV+XU2mhVx1MDAxYu5In9h9XG4vI/XCoztiZOdKUzIyKKok2i1mPIxEXVx1MDAwMidnqqPHzIGN3Ww8ZSycjpq8LoFGxqWDkjFTVmRcdTAwMThUetWfPlx1MDAxZl1NM6bh0lxu04SWZuw7XHUwMDBiYZ80bcfJ0+q9dFx1MDAxMyq8yXNRY/f2qTn2KYNcYitoUCCIyHYzXHUwMDAw9K/duau0xLovvHzLY6TeXHUwMDE3mzBtXHUwMDFk0XohRGunJvmIJlx1MDAwNFGNM1x1MDAwNHBcdTAwMTO1JDvYuljS8XDSXHUwMDAxQ6Zdo1dfhGI5i3U+uMyNvOBcIvl5nmFCxpznLfGuP3k3XHUwMDE0su5cdTAwMTVcdTAwMGXcXHUwMDE31YwzgzfFT3/+WzFcdTAwMWNlbFx1MDAwNsOXnlKe1iG8Nbiet1x1MDAxMkuJhCZcdTAwMDNexrIyxkqisif39sZKinDCKnD9cDFuwFx1MDAxNsxK90VcdTAwMDaHMEt8XTF/Nlx1MDAwZlauXHUwMDFjMbuVxTxcdTAwMGZhnm2fNXmYXHUwMDA3lpdkKK1cdTAwMTKz81xmbX3pMVx1MDAwN4u5goAywmJyLYRcdTAwMTXMeI+aOiOotDOCgeRcdTAwMTVcdTAwMWVsVjqyXHJcdTAwMDFf1G9ejca9YkhcdTAwMWav7mVMxK6FJjWG4WfA7bM26+ElSN9h203k2buJYKz+uWg4X29aXHUwMDFhYjhcclGQn8Bl5NBnLlx1MDAxNWdcdTAwMGLncVx1MDAxOVx1MDAxZa29XHUwMDA1YtDhWmvSKW84wtfulFUlaqOkRjcnW4MvXHUwMDFmzZZcdTAwMTFcdTAwMTkye9VV6bTZXHUwMDAwflx1MDAxZChd/E9y7o1cdTAwMWM2toKl0KFcdTAwMDRcdTAwMDDVSFwiSVx1MDAxNcnXTG5V/Xc+LCZ/vKK7ePT686Iv+J3i01+6/1x1MDAxNz9cdTAwMTTF6+Lv6b/iR7/FUFx1MDAwYo/uyGLELT/CjqxnL1x1MDAwZmEvsrZcclmmL4AuXf9RXHUwMDAxSljLeCOjflP67tPZ+CnTMcFcdTAwMTCLwnDtXHUwMDFm4t5pVcgh49yy1Fx1MDAwMyVJ27HmcMtccvg7XHUwMDAzecZcdTAwMDRtrS8pXHUwMDAzRVx1MDAxMFx1MDAwMy1Rh75cdTAwMTh3wzN5K1dFMFFcIml2KVx1MDAwNe3QRtnldCphZGk0IUDR/bJofHWVcexUx9ZcIu5cdTAwMGI7TTg73U1y/Vx1MDAwYqTP8VqeTTKPfSjJwehGcUIqerpz+23o+dNf/rtcdTAwMTiOikl90T+jezu8W0yf9yfFy2pwVVx1MDAxN/SX6fO6WFx1MDAxNVx1MDAxZsmCw5t8iDRE7/VfesxsWMquXHUwMDEwntTIQ+p4XHUwMDE0d22EZTVak4OqTFxcn1x1MDAxNpBIllx1MDAxNdTOXHUwMDBm1deYXHUwMDFivnnueLPz6c+cO1x1MDAwZbVgu23ObLZcdTAwMDfhsVx1MDAxZoRcdTAwMTFJuqSsJUhcdTAwMTM3YsJcYsFQNFNcdTAwMTczROZp+PbYimZcdPRm6Xp2x9TD7UXF6J9dgjLF1vjl1qjUiJYrXHUwMDEzN3JCWSClmndcdTAwMDX/LHM8yD1uq3H0RFjRllx1MDAxMrWyVoHkjHFPR4nIzPH9ys85ibDhpLyFVUx4j1x1MDAxZbu7hiurlGBgXHUwMDEzh7eEUaZ5vzfQ30/uf/Pw5Nuvv31UPH18/J1fY2eROd610IRHXHUwMDFmfKPEcdHIXHUwMDBiuHaJWWnp3pBVZYc81WhC3ouINnPa9Fx1MDAxNiZshmlqrminzDBcdTAwMTXguJfz8ePC6tIlqPKg9PBmpXNcdTAwMTfvXHUwMDBlXHSqm/DtfoRcdTAwMDFELZhcdTAwMDVgcWeOSKKMgeE7P3NcXFwi3L7lqPKgZHCu1nNcclx1MDAwNJacXHUwMDE5w0FYXHSMW98wpYOdW8G7XHUwMDA3McEjRlx1MDAxZbo1y1x1MDAxYdM92U08xixzc1xuXHUwMDEyV0gpxo1cdTAwMTJbXHUwMDEx76e//PVdTLRjVE1cdTAwMTZcdTAwMTbPu8qUkjMoZVxcmFx1MDAwMDqyclVhVFxc6uk+tTY+Zb+KyXxTyFx1MDAwNVdxhVGAzDBhXHUwMDA0y8/+XHUwMDFk3cmYfc3FpbOAQdnekq/38jiyknZXXHUwMDE0YLSQtCNcdTAwMWVyTiOZ91VcdTAwMDTzNElPSVx1MDAwNtB39Nlwyds5p8C1RJG6SoNcZqAweqvEhKOrYX9afFa8XHUwMDFj9Xt3iv5wMq2rXjE6z5mPa5ec0jRcdTAwMDblhmvWjtp7eMpLSVx1MDAxOEhRk7FfhvFhjGFkSLYxcoBcZqCQgFx1MDAwYsO3cjGMfcEzZuLC6tKZRs9cdTAwMTGuh3JcIsA0XG4opeaaXHUwMDExLLRrqpzAOdyvoMyvozJcdTAwMGJcdTAwMDRI7XdcdTAwMGVFN/mksa7eOH3SXHUwMDFlZ8puZVx1MDAxYp3bdTa6uOxcdTAwMGbqolx1MDAxZY9H419kzMVVi01pXHUwMDBmNy/MXHUwMDEwxpdg8bNcdTAwMTVmcLbpeXZOhVx1MDAxOb+JICRTLu081kuUILTSXHUwMDE5NGVdj8RNKjNEI/NpXuguStfpjVn3XHUwMDA3SPRcdTAwMWReXHUwMDFmKjO6Ufl1XGYqrUIu/elcdTAwMTQrQoioNFwiQvJcdTAwMTBcIqBmW7U9W1vb8MVcdTAwMDdem/HFXHJcdTAwMTVn8FxyizP8XGYuO07cXCJ5u1/y7ptcYt4qwbVxs0yirFx0iTulQZmdJ0It8fYttjMmZnuBXHRjj2E1XHUwMDE5XG5aXHUwMDAxf1x1MDAxZvGULH1cdTAwMTGNXHUwMDAz7VbQ7lFcdTAwMDTtXHUwMDEwjGRWxzVjXCJcdTAwMTmDRvLdj9VcXGKdK1K4rlAoLqpcdTAwMTf15G2ZQlVMpvTL3CqKxnlXcXSnKH76v//JmKfbf6QkzO71X3pYXHUwMDFklvsuXHUwMDFiqVx1MDAwNodcIozNSP1tXGapheGLSeshpJ6dvOc9m86ZXHUwMDE3sXlccoZcdTAwMTShODz07/eC8Ds/XGKjOqVcdTAwMGLN6d+44Z2guLKzSvecwXlcdTAwMWG+QbZiV+QpLlx1MDAwM1NtW4Zx7+TeyfHxOlxcfvhccvxP2T9vj0t3SGM551E5f1x1MDAxYbQkUKqsYenqMIJcdTAwMDR5q1x1MDAwZUPK5SNcdTAwMGaQUIJU1syGxFi9fVx1MDAxOUZcdTAwMDBIP1wiaf44JpJFeLTgnynRnVx1MDAwYqCV1Jyb1O3CXTmIbOxIXHUwMDFiaPP7x4+//l3+3fv9y0x4xiHCKjDYYmC5ebo4P4DkpbVCXHUwMDFio6RcdTAwMTJcdTAwMWN8VVGH3JxVfHxcdTAwMTJz+C9cdTAwMDCRMW/9aMNVXFxcbi1zjahV+tCyULwx3WNcdTAwMDNC/m50VZxVQ3Ij6d5cdTAwMTVXk9q1yFx1MDAxZvTp8mZ8XHUwMDEwXHUwMDE5suiUZFxym1x1MDAxNalcdTAwMTa7+vvIemibujFLn8b4vswgV0rH+b5WKFx1MDAwYlxm80td3d+2qVwiqIiD7nWAmbTl7MxZSWM56kNcckck/76PsZLkSVkr0Wclu2uH0c2ERiVcdTAwMTLXXHUwMDBlk5G0yLdSrdNcdTAwMTFcdTAwMTmY/rSoq/HgTXE+XHUwMDFlXVx1MDAxNFVxfjU8m+Y98iZw3elcblx1MDAxY8XmqTtS+eZq/sw9VYsno5f9+mfj6k1l8PxLXHUwMDA0V6Wki2xBRMU80KJhJGN2ns26XHUwMDFlj1x1MDAxMZHiXHUwMDFjXHUwMDEx+aFD8bdcdTAwMTFQJC9WSdnRc6JcdTAwMGKK2lx1MDAxYTRcdTAwMWOyzyVcdTAwMTOb5ZLJhoi99lwipCi5tVx1MDAwNoiGWotGJvohlSxcdTAwMDST/1x1MDAxYY5JdFx1MDAxZT9Yb9tcdTAwMDVYrtCZd4xcdTAwMDKmXSfCxKAk6WqZilx1MDAwMOWSlHGpWNV5/fte/+VRNUvGulucLiVl9c+L0+Kf/qlgxVx1MDAwZlx1MDAxOZ+Kb/FZ0qWYidBcdTAwMTQz0XJSfMTmZUdoIJLP+1x1MDAxNVx1MDAxYfhd1LG4m1x1MDAxY85YVGiAz2paXHUwMDA1ZFjWmn3L0JuLXHJcdTAwMDS3/W3JOlx1MDAwZvFcYlx1MDAxNiUqiVJJTVx1MDAxYrdt1JJcdTAwMWNMalxiXHUwMDA1/y3G41x1MDAwMK1cZtlHr03tbu1LTDFcXDb7MqeyqVqarVr7Mpe+XFyQa/1cdTAwMTlZmqxcdTAwMTOxO1ea1Fx1MDAxZcpcdTAwMTBaarWellx1MDAxY3lcdMo1RudMc9HIXHUwMDBiPjTcXHUwMDBlYWVcdTAwMTXBSlCWIbHS23elm5WCK9T0ztSz4i2jm791XHUwMDFh6PtjoXdcdTAwMTGw7I1lwJqTtdP2sDQsg1x1MDAwZZlv+tEhkzOGmadcdTAwMTHMNEIhVzyynTa5oGhcZsjcQ3Ry81ROhFAgXHUwMDFl2mn7QHjmXHUwMDA3YUTGnDLacqX84/G6oEkvl4rj7lshrELmafj22FxuXHUwMDFiN81WujzOXHUwMDAwd8JFjD+CPM7e1qh0M99cdTAwMTD9SXMripJdZa4gXHUwMDA3MGdYujzOIHndyuNE7jnLYFii0UajUIpcdTAwMDOz2ydy7pfTW8dcdTAwMThxTkBcdTAwMTAs7kjcjYqzSqSfZqPcqd824vr7R1x1MDAwZp/mn8bpXWW60265UVx1MDAxMidyz2QpIUqjuGYgnb/r1dKH7JRcdTAwMTVUPI+gomRcdTAwMTKVXHUwMDEx3lx1MDAxM+/u7Fx1MDAxNMGtXHUwMDA1XHUwMDA2JnlcdTAwMGZcdTAwMTl0O8M2XFx8eO5mMr31XHUwMDEzXHUwMDBih0M3iWlyWZ/1z/t1r/gw+o9u8iFcdTAwMTIyOSjDU7G2UfV0mzl0J92Uw89cIjisXHUwMDAxjFxc6CBcdTAwMTM0x4fI5vbXXSu8JVxu719zUlx1MDAxOZTZqWTL4/cxTorS1T1cdTAwMTh7XHUwMDE4QVx1MDAxMU+65zGk46Ri0d99rZt0RkhFK925W7VMOtfk824x6L+oZ40+i/6wOMmaiGtcdTAwMTac0Fx1MDAxZW6ex4m401x1MDAxNmxcdTAwMWZH1lxcP5yVQktcdTAwMTBcdTAwMDZcIi0hoDVugNiuSblcdTAwMWWHmyTNIS53keHSlLREw7Ql7W+NPDRgi8PkXHUwMDFmoo4shJVoI10s0GQrUKr04Vx1MDAwZfLBtypcdTAwMDA4XHUwMDFmXHUwMDE2z8Z1PT1cdTAwMWHSVfq8+Du6XHUwMDFid1xcbtnluD+cXHUwMDBlhr84yvhMMWLt6dRdYFKcxLbxWCauNqVcdTAwMTZoQbmmkVx1MDAxNsX22a4n9y1BbV94+1winLfKoJvba3yZOd205Vx1MDAxMsnm3kCUklx1MDAxNtOYtbNcdTAwMDFt/+PWV/VgMLpb/PDjL/7jVsZcdTAwMWPtWmhKQoYly+lWiMNHSFEqqS1t8a7thf/Y4GBIu1x0OYjJyiGHXHUwMDBijH8ybCcjXHUwMDE1MmJcdTAwMTAz6e0o47CVy3W3cEbozlx1MDAxN1knyflcdTAwMTaZkohB53fNPMcuXCKCJJpZZVx1MDAxMvQk3a+8uItwXHUwMDA2XHUwMDFhjlJK2uU8XHUwMDA07D5L1ppryKAl0Fx1MDAxMlx1MDAwMV2CWf/ibYLZdXKZa1x1MDAxN5gxXHUwMDFmXHUwMDAz1pyquyEuUzMwXHUwMDE1yXqSPlx1MDAwZTlxUaxcdTAwMWOGs1JxXHUwMDA0UEzGpcQhZ0JcdTAwMTEtd1x1MDAxZYpcXFx1MDAwMcJJ/9np6PWmMCRcdTAwMDNcdTAwMWRcbsNGc6hE3Vxyf9bI202BcJQgJ05YXHUwMDE1m1x1MDAxM1x1MDAwN7MxkzyDwXmrsTmlLbjevKS62Vx1MDAwMWk+tGrb3Dh57549Xtt782PocXi5NTrJTXcl1ioymVhZ2jCY2PnJaVx1MDAwMDo3yI5TvkRiY2dF1i5cdTAwMDZcdTAwMDFuqppHY5tSx5wsXHUwMDA24PQjXHUwMDEy2X9cZjfnbuIhKOMtyuyOO1x1MDAxOSmNUFx1MDAxMpP3i1FcdTAwMDZcdTAwMWEhsFxyVPaD71x1MDAxZp08ffjto+LJw189On76/eP7T/z6XHUwMDFhXHUwMDE3XHUwMDFl3ZG+XrnaNGeKXHUwMDEzXGJKlWtcdTAwMWTjKFxctlx1MDAxNqQxStRoyMJay8Hr+3Io0Ta/XHUwMDEyJ1p/RCRcdTAwMWRHxKKs5oooXHUwMDA3cYc6ZG/oLTo9SW3T50p0puNnqVl4NKNjnMRcdTAwMGXwXHUwMDA0gtLguGmJOlx1MDAxZk25KJWrq1VcXDIukoxFNKaqzN5cdTAwMWPbTMKZyVx1MDAwMbhcdTAwMDWOMoqZSlx0Qztpema6+vmtepTMXHUwMDEzQV9Wg6vaT8osMnI6V5rKbFx1MDAwNvY/XFxPSEs2UaFcdTAwMDXdXHUwMDExLz5kpq7g4jTGSipGXHUwMDE3mvuHz3VxUZOWsUaJXHUwMDFjXHUwMDAzxn8t1oaJs+Bi50rT2Ea+kYI1y44l+d8l0t3WSjNjTZdpPCjYXCKIm1fh3KRrLsi180bmVlxiWMbd2L9cdTAwMWKwk0zDVn1HSFx1MDAxMla9Xkfrq7ylbMi6XHUwMDEz8TZI04pWN1x1MDAxMlx1MDAxZnFnx63MXHUwMDE4xVx1MDAwNZNcdTAwMWRW9CBpV1D1ZcRcdTAwMDFcdTAwMGZaZlhzulxcXHUwMDAwVcnqctftN3GHIGKq2jJcdTAwMTHpvVmqhkV/OK2f1eOMXHLpqsUm0rU8TNfaXHUwMDAwUjJRalx1MDAwNKkkWdKDsI1k5KtcYmGrhLawUGJcdTAwMTNUVc+FsVxud9+edbWy7TSYWTCye6lpbGTYNJqWttWePlx1MDAxN9yoUlx0MFxmJbjwrKdh10Havl/TWna+jmCn4aitVHFcdTAwMDZTklx1MDAwMKU3qeQ1zfRzXHUwMDFiQcLNpC3dw0l9NHmfsU7q8NtL17f+XHUwMDFmiVx1MDAwML/MW91cdTAwMDYuPVx1MDAxMXnDptO0Jpz72Fx1MDAwYkaUKI1xTVx1MDAxMYU2zU7DXHUwMDA3hVx1MDAxYsTYN1x1MDAxMUFbxlEx9NZtdVx1MDAxMpaDQU23KflcdTAwMWMp7c64tyHsRfWmXHUwMDE4jVx1MDAwYve/4Wi6stNeXHUwMDE2JnXNelx1MDAxM+ncsPk1ylx1MDAwNHBcdTAwMTM56Vxcy7VcdTAwMTZpdO5e5Vwi/Cmcl4JcdTAwMTlUgsVcdTAwMTU5W61B6eabslK5T0ZcdTAwMTf10fCOXHUwMDAzPK0451x1MDAwM5XVy01jMMPa9rTVLi430Fx1MDAxMihLqYmNZDN5x0i3g9p9t6Z1XHUwMDFjXHUwMDA1XHUwMDE2zlEwUiHJXHUwMDE09JG003hcbis4sORDXHUwMDE5yHhcbmCiXHTFjYYyvKyP6Fx1MDAwN1dcctFIUL9cdTAwMWFM//Hozt3i/ng8XHUwMDFhZ656Iz9CXCIyh6nftoX1sFmJklx1MDAxOWWlfDvaqIvOXHUwMDA39dvJYFxiZzBdaORcbniU+jXSXG7rKttSXHUwMDEz2DCxnbvqZOR51Vx1MDAxZmRsWZeXmEjjXHUwMDA2dvJp+59cdTAwMWVcdTAwMDaCglIhN1YwpWRHN584mbtXk8WBh1x1MDAxM1BwN1x1MDAwYpN7+1EuRXivXHSIXHUwMDAwXGYhvftJzN7ugGWmXHUwMDFiv31xdHRnJlx1MDAxYsnWXHUwMDFj1dknK3SvN4lt7Fx1MDAwZifudZtXa+jG+cvqVj7pi4nOoVx1MDAwNrVcdFx1MDAxZjMq11x1MDAwMOHnY0S5XHUwMDA2oEZXTFx1MDAxNJdO5OI5gumsXHUwMDBi3VxinWGtfVx1MDAxNsdmXHUwMDE5toxJgyWiXHUwMDAy5F2hkUjVtlexXHUwMDExkOFGXHUwMDAz0LhupdbEnVx1MDAwMSqthfORd149tGQ2flO/Kd5tk59nbC38y0yj3+jnXHUwMDA2teqBllx1MDAwYuUjXCKR0IU7mLDKXHUwMDEyXHUwMDFmVYKk773qxlxiXHUwMDE4wUVjUHIjrDebzbRcdTAwMWa8jlS6XHUwMDA0OFx1MDAxMKnbXHUwMDE4o2VcXJqtsr5cdTAwMWZfTaZcdTAwMDVhfFhNr8b1pKBcdTAwMWJaTOrB+ae90dmVW0J/+Kz46c9/K/7gXjiuq1x1MDAxZT2QMWm3/DxcdTAwMTFzftbQO6jxj5KiZMK1X9NcdTAwMDZ1Y1x1MDAwNO9brlx1MDAxM6+J1CBIpzPbXHUwMDE4OHtcdTAwMWRcblWiRFx1MDAwM65DjFx1MDAwNC7l4YBcIo74KoL4pFx0uUR/XHUwMDFhq+0u9+Caa5U8OVx1MDAwZV1TdNw2+nk+XHUwMDFhXHUwMDFkNc/Jn3aEOrMg9pr1plx1MDAxOdBFvFxy6lx1MDAxM2SELpVraa9cXM5NY07xO1x1MDAxYl0y+lx1MDAxMqTarLSNWVDzZHRdolwi3ktDd9I0S+pcdTAwMGUmO4i5OoK5TINcIo0kvWeLy4l111x1MDAwN1x1MDAxN1q6PDqbOOxCN1x1MDAxY/V2NntaXHUwMDBmXHUwMDA2k+LN6CpjunrWmM62elx1MDAxYVx1MDAwNq13YflyXHUwMDFhq1x1MDAwNlFqRkyUzoKi9vTUO9BwXHUwMDE1XHJNXHUwMDA0XHJcdTAwMDXXqMiIepWzaj84b+qFYJnUqftcclx1MDAxMK+dJt+Khs/7k+KsXHUwMDFhzlx1MDAwMvzFs3F1Vp/T29+URfFoVEyuxpfj/qSevP3W/eDicuRSu8dF/fqsnpmwSZkzhdN+vnT0n0yrcchcdTAwMGVcdTAwMDBuSIE03FpNQltCO7nAmlJcdTAwMTjOwFpS2HKOy3lmXim4XHUwMDAy3dHvIG5I14NcdTAwMDfanuzLcHiwMSl5tDXQXVx1MDAxMr6NXHUwMDAxlk5KrpU1KDZcdTAwMWKMkHpfXHUwMDAwbvV2yT//+19eVjfyy3Z5XHUwMDA20lxcXZpg1jdn4unl04vnf/z+jbisXl18q//0laeZ2jJBrcWSK2NcZqI1tM+3dLTgpeZKXHUwMDEwQY021vw8OrpmXHUwMDAyXHUwMDA07Fx1MDAwYk+PI1xmuJuHa1xcwbSHp1J1XHUwMDBlq7ZSK/KXXHUwMDFhPfLSXHUwMDFjX5JHbuxWlZyfXHUwMDE2Tyq6XHUwMDE0k+fFl8/pL9W4n7E1XrXYeNNKf84u7a3q8vLJlC7srfdcdTAwMDdkt17261dfelx1MDAwZVx1MDAwN89nX7c+ebdcdTAwMGI4wNezc7VcdTAwMWY/+fH/XHUwMDAxj3dBhiJ9Rust Functions — Anatomyfnadd(a:i32,b:i32)->i32{a+b}// no semicolon → implicit returnkeynametyped parametersreturn typebodyIMPLICIT RETURNLast expressionwithout;is returned automatically — noreturnkeyword neededfn square(x: i32) -> i32 { x * x }x * x← no semicolon, this value is the returnSEMICOLON TRAPAdd;→ returns()(unit / void) instead ofi32→ compile error!fn square(x: i32) -> i32 { x * x; }x * x;← semicolon makes this a statement → returns () ✗EARLY RETURNYou can still use explicitreturnto exit early from a functionfn safe_div(a: i32, b: i32) -> i32 { if b == 0 {return0; } a / b }← explicit early returnUNIT RETURNIf no return type is specified → returns()(unit, like void in C)fn greet(name: &str) { println!("Hello, {}!", name); }← implicitly returns ()FUNCTION SIGNATURESfn greet(name: &str)no return value→ returns ()fn add(a: i32, b: i32) -> i32returns an integer→ returns i32fn parse(s: &str) -> Option<i32>may or may not return→ Some(n) or Nonefn save(data: &str) -> Result<(), Error>may fail→ Ok(()) or Err(e)Key insight:Rust signatures are self-documenting — just readingfn foo() -> Option<T>tells youthis can fail gracefully. No surprises. No null pointer exceptions.- Sandesh Bhandari

Figure: Function signatures in Rust include explicit parameter types and return type.

fn greet(name: &str) {
println!("Hello, {}!", name);
}
fn add(a: i32, b: i32) -> i32 {
a + b // no semicolon: this value is returned
// a + b; with a semicolon returns nothing
}

That semicolon rule took the most getting used to. Adding one changes a return expression into a void statement. The compiler error is clear: “mismatched types: expected i32, found ()”. Declaring types up front also makes functions self-documenting. You can read a signature and know exactly what it expects and gives back, without reading through the implementation.

3.3 Ownership and Borrowing

Ownership is what makes Rust fundamentally different from every other mainstream language. Every value has exactly one owner at any time. When you assign a value to another variable, ownership moves to the new one and the original is no longer valid.

let name = String::from("Sandesh");
let name2 = name; // ownership moves to name2
println!("{}", name2); // works
// println!("{}", name); // compile error - name was moved
// To keep both, use clone:
let name3 = name2.clone();
// Or borrow - lend without moving:
fn print_name(n: &String) { println!("{}", n); }
print_name(&name2); // lend temporarily
println!("{}", name2); // original still alive

This eliminates use-after-free and double-free errors, which are common in C and C++ and cause crashes and security vulnerabilities. In Rust these cannot happen because the compiler enforces ownership rules at build time. You get memory safety without a garbage collector, which is why Rust is used in operating systems, game engines, and embedded systems.

3.4 Structs

Structs group related data together under a single name. They are similar to classes in Python but without inheritance. Rust does not support class-based inheritance. Methods are added separately through impl blocks.

struct Person {
name: String,
age: u32,
email: String,
}
let mut person = Person {
name: String::from("Sandesh"),
age: 20,
email: String::from("sandesh@example.com"),
};
person.age = 22; // works because person is mut

Structs are the primary way to model data in Rust. A network packet, a database record, a user account, a game entity: all of these get represented as structs.

3.5 Enums

An enum defines a type that can only be one of a fixed set of variants. In Python you might use strings to represent states, but nothing prevents an invalid value. In Rust the options are defined at the type level and the compiler enforces them.

enum Direction { Up, Down, Left, Right }
let dir = Direction::Down;
match dir {
Direction::Up => println!("Going up"),
Direction::Down => println!("Going down"),
Direction::Left => println!("Going left"),
Direction::Right => println!("Going right"),
}

The match statement forces you to handle every variant. If you add a new one later, the compiler gives you an error until you handle it. This is the feature, not a bug.

3.6 Error Handling

Rust has no exceptions and no try/except. Every function that can fail returns a Result type, either Ok with a value or Err with an error. For values that might not exist, Rust uses Option. The compiler warns you if you ignore either.

fn divide(a: f64, b: f64) -> Result<f64, String> {
if b == 0.0 { Err("cannot divide by zero".into()) }
else { Ok(a / b) }
}
match divide(10.0, 0.0) {
Ok(result) => println!("Result: {}", result),
Err(e) => println!("Error: {}", e),
}

Failure is part of the function signature, not a hidden possibility. Anyone reading the code knows immediately whether a function can fail and must decide what to do about it.

3.7 Collections

The two main collection types in Rust are Vec and HashMap. Vec is a growable list, equivalent to a Python list. HashMap is a key-value store, equivalent to a Python dictionary. HashMap does not preserve insertion order because it is optimized for fast lookup, not ordering.

let mut numbers = Vec::new();
numbers.push(1); numbers.push(2); numbers.push(3);
println!("First: {}", numbers[0]);
use std::collections::HashMap;
let mut scores = HashMap::new();
scores.insert("Sandesh", 95);
scores.insert("Alice", 87);
println!("{}", scores["Sandesh"]);

3.8 Iterators

Rust iterators let you transform and filter collections by chaining operations. Call iter() on a collection, chain map and filter, then call collect() to get the result back as a Vec. Iterators are lazy, meaning no work happens until collect() is called.

let numbers = vec![1, 2, 3, 4, 5];
let doubled: Vec<i32> = numbers.iter()
.map(|x| x * 2).collect();
let evens: Vec<&i32> = numbers.iter()
.filter(|x| *x % 2 == 0).collect();
let result: Vec<i32> = numbers.iter()
.filter(|x| *x % 2 == 0)
.map(|x| x * 2).collect(); // [4, 8]

Lazy evaluation means you can chain many operations without creating intermediate collections in memory, which matters for performance with large datasets.

3.9 Threads

Threads let you run multiple pieces of code at the same time. The output order between threads is not predictable, and that is expected, not a bug.

eyJ2ZXJzaW9uIjoiMSIsImVuY29kaW5nIjoiYnN0cmluZyIsImNvbXByZXNzZWQiOnRydWUsImVuY29kZWQiOiJ4nO1dXXNcdTAwMWLHlX33r5ilXHUwMDFmYlfJ47793XLiKpqibCW2pEh0XHUwMDFjZ53aXHUwMDFhXHUwMDAyQ3FiXHUwMDEwYFx1MDAwNkPRiuOqfUmet1L7kN/nX7K3QVx1MDAxMlx1MDAxOFxmesBuTHM5NCBVXHUwMDFjcfDBXHUwMDA25p4+9/P0j+8lyV717jzfe5zs5T9cZrJRMSyzy71H9vrbvJxcdTAwMTaTMT5EZz9PJ1x1MDAxN+Vg9szTqjqfPv7448Ur0sHk7OpV+Sg/y8fVXHUwMDE0n/ef+HOS/Dj7Lz5SXGbta4/fzJ43u3Lzm8t8UGXjN6N88dBcdTAwMGZ4naWKciNcdTAwMTlcdTAwMTBqjFx1MDAxNFTo+cPv8OGPSMoo0YJLRbhcdTAwMDRgZPH4ZTGsTvE5XHUwMDAwRqZGXGLKXHUwMDE0XHUwMDA1XCKFnD/jNC/enFb4XHUwMDE0bURqXHUwMDE0k1x1MDAxY7hcdTAwMTGSXHUwMDAwzJ9ytaTHXHSZX5lW5eT7/GAympR23VWZjafnWYmfd7Hy42zw/ZtycjFcdTAwMWXOn/c+ZFRTsnjOSTFcdTAwMWG9rt7N3lx1MDAxZL9X/Fx1MDAwZfdcdTAwMWG/45vrXHUwMDBmQFx1MDAxYtfbXoW/8M3pOJ9Ol9Y7Oc9cdTAwMDZFZb8sIIurdnXnz4azW/TnxZrK7Cx/Zu/R+GI0ml8uxsPc3oy9jCz9tvHw+rfd3N/F/WTXV35arD3P7Vx1MDAxYlPAe8U5V4vbsDAyXHUwMDA2K1efT8Yzg2NaU7z7fPGEYvpcdTAwMDRccq2avetJNprmi6/fLu2wZoSLT3hxPsyuXlx1MDAwMkpcdM5cdTAwMDRQXHUwMDBlYvG9jIrx982PP5pcZr5f/Jb3alx1MDAxZqtp15NymJfetlxyZMmWaz8uTFdcdTAwMTOHtSrtb5/v8ydPzD5Za5tOXHUwMDFivlv7pHdjn7SzfWqujFa41zjMk7ZcdTAwMTmnXCJcdTAwMTItmkpcdTAwMWTXODmhXG6IimOcVVHVXHLwxjar/IeqseWyZbukq3bJXHJLXHUwMDA1XHUwMDEwhFx1MDAwZsF/ck7VqpUy3LpFgJ3m+oTkvbNTuFx1MDAxYjtlbjtdeva1QeKXy1x07n4uezRtXHUwMDA2XHRcXFNFhFwikVxyXHUwMDEyKFx1MDAxM7Ut+HaDXFzYm7Uz/OivLqZVcnRa5tlwmvz83/+bXHUwMDFjlVx1MDAxN3nyMiuz0ShcdTAwMWZcdTAwMTXTs9qdnYyr18Xf7OepXHUwMDE5mL36NDsrRvZWiKX331x1MDAxZlx1MDAxNW/s97I3yk9qXHUwMDE2gt9NVaCXMn+4mpwvXHUwMDFlXHUwMDFk4PtlxTgvV+/XpCzeXHUwMDE042x0XHUwMDE0vvbsopq8yqdXq1/+JvBLy7+4QVx0pFSsXHUwMDAz7cXI31Wiy76RWNj7XHJuXHUwMDA1XzxlXHUwMDAx1Dtwdpqk8yCdXHUwMDFk7lx1MDAwZlJcdTAwMTBMXHUwMDFh9EGlXHUwMDEzpm0olVx1MDAxYTdQJVwiuzRRWWNgl3peXHUwMDA1eOyULlmh5Fx1MDAwZa/G5YPXrt1OXHUwMDE2NEfmWU9cdTAwMTbvkyHkwDexQdjAXHUwMDA278ihXHUwMDExnVx1MDAxZFx1MDAxYdBglMD/rZjhOtPUlHNh6vtFXHUwMDBmbVx1MDAxMzIvf2Z5W6w5JXODpDTlXHUwMDFh0KHRUlLBXHUwMDFjmyQ+I8SZXHUwMDE56sHwWG+JMyP990mhJCNU1lxcylrwt3Lxxlx1MDAxOI2hhuLeSiNcdTAwMWKjUmBcYlxyMEa3N3OaTZ1OXHUwMDBi6KWr9+m0LC0xkm8ygGNcdTAwMWb4XHUwMDAxWzBAXHUwMDBi/qRIJe42UqB5gFx1MDAwMt1cdTAwMWR/T58qcyC3XHUwMDA0f8pcdTAwMWZ/lFx1MDAxMGGYpi43hTWvzYNcdEqM0orXbmRcdTAwMTT8SWGIZKxufKH4e/5cIvn82Zc9Rl9zgUvYqzB82Fx1MDAxMHpcdTAwMDNcdTAwMWbo0YYv5qI+o1NDXHUwMDA0RnWCXHUwMDE49Fx1MDAxMlx1MDAxNlx1MDAxMeWO+jygp4Ogp5lG6uN1K7s1kpecU26Tn7G5T0tcIk3d+kKx99GnSXVcdTAwMWRcdTAwMGKXXHUwMDE346RcdTAwMTj3XHUwMDE4hmvWXHUwMDFhjVxyhz6QxJt5KySFSlx1MDAxNTNSXG6b90GHeXHrN8WkXHUwMDFh5jrbltya8cekJlpy1Vx1MDAxMlx1MDAxYUHz4pxcdTAwMGZtXHUwMDE1XHSQvlwi8yFi0nAt6uZcdTAwMTeKScsoyfl1QqrHeGxZZzQseiW66+nRXHUwMDE2LDKtUqpcdTAwMDRhs/utdvRcdTAwMThcdTAwMDbF/ZBcZppGXHUwMDAwXHUwMDEwJl30yFvzXHUwMDE0hkmitYTYeVxuZVx1MDAxOK+96Vx1MDAwNlCcjJOzi1FVnI/y5ODl18lgUubTZFrYi9k4n1xcTFx1MDAxMXf9RWjY8mNcdTAwMDGXbpLRMTyVXHUwMDA0XHUwMDAzXHUwMDE0ZoBodJdcdTAwMTZcdTAwMTHFXHKMqZQpzMzLZlx1MDAxMdBedjBcdTAwMGWB8Wf+MGZAuVBMu1x1MDAxMjx0XHUwMDA12vNso5DaXHUwMDE4XHUwMDFlu7hvc3pKQN1cdTAwMTRDUfziXHUwMDEy0TI9Lc6T6btplZ8l52X+dvab+1x1MDAwYl2PNUfDq1dcboiR5TjUiFx1MDAxNHd7Q1xmU1xuhKnd9rlcdTAwMGbMZWpcdTAwMWQs+yhGTUR294G3KiV0XHUwMDEw4Fx1MDAwM1x1MDAwYipcdTAwMTgh7n6cVt5cdTAwMDVmXHUwMDFislxmhdhcdTAwMTVmjXt0N+LFN8ySMlx1MDAxYuR9xqhrkdFA6ZVcdTAwMWPidNn7RVx1MDAxNlx1MDAwNU6kwY1YXGKJN2FcdTAwMDWU3HbJ2cJcdTAwMTDlXHUwMDA079GCZnck6lx1MDAwMcknXHUwMDAxqVwiQaCtYsdE8+JcdTAwMWOSQtiKXHUwMDFkjZ0qwuiHXHUwMDE46JQqyir0XHUwMDFmz85cdTAwMGL0JaviLJ/1Tlx1MDAxNCdJMb88fYQ//Gp6naT5aJqd5Eny87//0WNcdTAwMDRH+EyxXHUwMDAwP60yR9eho1x1MDAxNFPvdGzLPslUSjQ/SVx1MDAxN48t8Fx1MDAxZNbQNdC31Oh/Oeg+XGaIdFxyo+j3MFx1MDAxMdRiKDUotuRY31NBflx1MDAwNdxtMK3xyz3CtFx1MDAxZHBcdTAwMWJXX4bFW7Jcbje/dlx1MDAxOKCuXHUwMDA2dVc/zOJ18dqymm0zXHUwMDBmssf3aUhSiUpBQTmTSu2+LVx1MDAxMVx1MDAxMv1Q2uvel8kw37wpXHUwMDBimK9cdTAwMTWCXHSwQ7+2rFxmNMk3scFcdTAwMWW1ZX3evS2LXG6JJOvshGm3TEmMUoayfrdcZlx1MDAwZfNZs3nImE9jXHUwMDE0gju6XHUwMDA2pWNcdTAwMTSCRp6EeJ9cZjGw3WiH7JF1ftHdOolQQjFcdTAwMTnWz1xu+DJAP4XGLozdiXlukGmu+89zu2Q8ZVxcMiNcdTAwMThcdTAwMThghjj8ZtBhs1x1MDAxMP2c2bkj1/lZXGKfo20pXHUwMDE1XHUwMDE4XHUwMDE426YnzTlRsc1SgzRBs2MrvvPRXHUwMDE3h8nBiyeHTlx1MDAwN1x1MDAxYcTS1XtyoFeXXHUwMDE4K2xcdTAwMWSCV55quWFcdTAwMDLUquvCgKZGcUZcdTAwMTTGSFo6q7QkXbzPLjO1XHUwMDA0wN9cdTAwMDZcdTAwMDDQJn1cclx1MDAwMXd9p7WDkFx1MDAxMU143emMlJiyI2idYteLaZ5Mq+Hjx1dJmk/cOOzF8FH7Ulx1MDAwM/C4XHUwMDE2jnRcdTAwMDM4UrLKiHhPUuBcdTAwMDB2oFpcdTAwMWFFndHtXHUwMDBlj614/F1IU6FkyG5uQmwttyomXHUwMDA0JfUyeCw8cso6JYpcdTAwMTdGXpzlj1x1MDAxZj+5KLNcblx1MDAxN/4wcNm25Fj4ZJvgs1bCm3us6I1KTaTkxJ3lXHLDppDm4Mm2XHUwMDE0Vr/0xyZcdTAwMTeMMlGP1b1cInz0KqmgXHUwMDEwu9+3e55cdTAwMTfX0GNcdTAwMTgurc4/z7tcdTAwMWVwXt1ccup2xGFwmFx1MDAxMmBKKiFcdTAwMTVcdTAwMThn6XRHiK2g+yrAQVWEguDK6aDKVnVcdTAwMTGM3ylnjMRnRCVop1x1MDAwNqTTbDxcdTAwMWPlyW+uy4iPXHUwMDFm4y29XHUwMDFjf/D3vyc/9lx1MDAxOI1eq47Fi9xcdTAwMDelcjlcdTAwMDNOxWqGkYpUXG5qNJdgYMeNwTB9XHUwMDFlUlx1MDAwM9VcdTAwMThFUkNcXDBtXHIjXHUwMDE1V0TEb1x1MDAxM5SSaGp43fhCUXoyKXuMxqXVReJG7sWNpiEl40JcdTAwMWRNXHUwMDA12KlP1Vx1MDAxZG5bxYovQuDGqZJcdTAwMDCr8lprfVHA8FJBXHUwMDBmZI1W8Fa0jpv1XHUwMDAycEX7hFlcdTAwMDfEebX1QVO9qYXobO9mXGbI8cNcdTAwMDPz2baUKl76Q05cYs2RrFZ73tchTlx1MDAxMyM1XHUwMDE3pH+AgzRcdTAwMTU9XHUwMDA23PLyYlx1MDAwMc5rolx1MDAxM5SHZ6lVqlx1MDAwNCF4J1xmRoBcXO4yokG4+31IXHUwMDAwaCfZW7rreGuNUGttXHUwMDE1QmO3s2NcdTAwMDBoTK0hd1x1MDAwM+T9mJyXxbhcdTAwMWGN/+ODXHUwMDFlXHUwMDAz0LnKaFx1MDAwMZ5frZ7cXHUwMDBlROAm1YJrzoBcdTAwMTmJ/794yqZAPDg0oLZcdTAwMDWIr1x1MDAwMoCI7qM0JFBqXHUwMDA0KGdKqNilXHQp8c5Dp0TMd3vXuYxkgL+3Sn786bu9XHUwMDFlXHUwMDAzcv1yYzHkiVx1MDAwZjBcdTAwMDXc7pJyRlPNiDJCXHUwMDBiO/BFulx1MDAwM3OrXHUwMDE48nVAzVx1MDAxMIity3Jn6kU1L85L+FJcdTAwMGImIXaG1CquXHUwMDE51in38igpPvxkkWhcdTAwMWPl+flcdTAwMDc3VbjHj0/Kydl/IVx1MDAwMkfFtM/8ucmHiEavjj5NVyrndlx1MDAxNOP2nUrKXGJH/OKWK/nC2jdF8VaNbVx1MDAxZYWkdDBMXHUwMDE0XHUwMDAwxMWvsHJx7udcdTAwMDKnXHUwMDAwXCL+2CZu2aRcdTAwMTO/Qo/RXHR3XHUwMDAwulMv0NUydu2gYykx0spLoUeL8aVrVnpHna2g+zqAOin6JkI7m/bbNUqAXG4jXHUwMDE0J1widlpHq6U53VxyQPchks5PyU9cdTAwMWb2ucHGscZYIFx1MDAxND5cdTAwMThsdtSoVblcdTAwMDJcbilcdTAwMTjQhlx1MDAwYlx1MDAwNruqYVx1MDAxOPz+XHUwMDEwwHlMaSYoXHRsqWFMIz2Z+59KWIHf9pVccoVfS00jk+OC3K5suFx1MDAxOd6+XHTAXHUwMDFigkZxxcOG1NBcdTAwMTORRtRTa32B2zZWXHKFX9VcdTAwMTA8XHUwMDEwt6tcdTAwMWFuhrg/XHUwMDA2IE6AsjlcdTAwMTFcdTAwMWVWNkS/X1x1MDAxMX7/XHUwMDAzyyuI28ayofArXHUwMDFiitvdSsZlqo1No+DNoEKxXVI0XGJ431x1MDAwNlx1MDAwME9cdTAwMGJDkLWcriVvP2fJXHUwMDBlfWrFTezRJlxcXHUwMDBmMZ1ksHZ1w6Hwqlx1MDAxYlJ9O1x1MDAxMoGa1IrgXHUwMDBiLsFcItF1QsGubNhcbsQ/hcR4UnOQZlV6bm9N3VDa7lxuqWJP+Ep7XHUwMDFjXHUwMDA16XTe2Xd7Z1xihVx1MDAwN1M0bF9sLHb0K1x1MDAxOVx1MDAxMnxcdTAwMWauOYb7imgwi1x1MDAxYt/unaqUXHUwMDE5aVxiXHUwMDAxXHUwMDA2wtBcYmmYreLKzFx1MDAxZqKccJglNFx1MDAxZFxi1SuO68JJNUB4bM10JEpcbjJ6/TBNU5t17DFUvVZcdTAwMWSLSKVcdTAwMGZmuUZcdTAwMDBSoJKgzypEcyzKyJRcdTAwMWEws1umqXCIvjLOU4V7uEEsS612iZ0wXHUwMDA0XHUwMDFmXHUwMDA3kCxBbqNcdTAwMTheuCCsWntcdTAwMDBAXG5cdTAwMDApdfxBfsrxhndcdTAwMDHx1cBR+pdJMf7gw/RifFlm51x1MDAxZvS6rHHriqOB1ytcdTAwMDPEmk06xqGzoXjKZnLMxOpDMt59jlHuW7nZLUHoIFx1MDAwNKFKSkq1U5ZcdTAwMTnaXHUwMDExKnDnNUzFb9NcdTAwMTGadJO6+fjj5DIrquRkUiazacB8eE1fSTVJTopxMT3tMVxcw5ZcdTAwMWZcdTAwMDe7w+KtQ1wix0/ij3lL/O2EJlvgOvSHq1x1MDAxMFrY82GCXG6TmnFKXGbcv6TrXHUwMDFhXHUwMDEzfFv8bZRcdTAwMWTnjlOob1x1MDAxNUtjXHUwMDBlsTTKMEpD3jBcdTAwMDBcZncp7nLxrGxUXHUwMDAwg2yVVlrub5JaUdxcdTAwMDPcuv5rzrbCyJtRTlX0Xlx1MDAxNUOE6HTW4+FcdTAwMWZcdTAwMGZcdTAwMGa+Pnr24nly9Oyrwy+fPW9RTetcdTAwMDVdrFtsJP20XHUwMDFiaIZcdTAwMWNcdTAwMTHfQKhyIJQ6KGJ3RHxcdTAwMGJcdTAwMWVP/PGoXHUwMDE0aCMluPKarVx1MDAxNCE4MYxcYn3vlb01dmhThqNjP4ZYjjGYcXUz6lRxe75cdTAwMWWhxlxu4bhqXpBcblP/XHUwMDEzolx1MDAwMrtVOYE3/vZcdHbqQlxuXCJcXFx1MDAwNlxurYNzyFx1MDAxNlx1MDAxMlxm07ErYEhcdTAwMTjMdFx1MDAxM/ezhummiF5cdTAwMWMgsby8OFx1MDAxMcOZf7xcdTAwMDCN819Y7eTJXHUwMDA1XHUwMDE5ODSXeUDA8D7PXHUwMDEwbsP1TFx1MDAwMFx1MDAxOSPyoVx1MDAwN1x1MDAwYqdupFx1MDAwNWguU6M14atcdPR1/GDsII9R/eZcdTAwMDeofLhcdTAwMDFEwzlxJKCA0NT2uVx1MDAxM6J0jEZbc/Dk4OnhlnBBXHUwMDExwlx1MDAwNcYwXHUwMDEwgUeU4N1hSmrdQ72Qelmzz4MmLeuMUns9c+i7tsVcdKKRTNpxw+zqhsj7S2duXHUwMDAwwTWT2t1cdTAwMTXRXG5ILlx1MDAxOFx1MDAwM8NrN7OH7EC92IGZZuiwY4eoNvq9PztQ2yeHdFx1MDAxZHZ0XHRXyFx1MDAwZZrQe892riVcdTAwMDf6QMiBxiZcdTAwMDeHuHBcdTAwMGI5iEa/3I5cdTAwMWOurm5cYrxRd3LgUnFKpVNqo51cdTAwMWOI0KZcdTAwMDc6w2uN0otcdTAwMWJks/S144a4JnpcdTAwMTZcdTAwMTI5XGJ7yrpcYotcdTAwMWOUkkpcbq7u/VirtdzAXHUwMDFlXGI3sNjc4Fx1MDAxMNht4Vx1MDAwNt2YV99xw9XVXHKBN+7MXHKCaiqYXG6LXHUwMDFi7Fx1MDAxOV5G1bVcdTAwMDd6yFxy3ItcdTAwMWJ0Y8zGzVxyOpVAtea23KA5697dv1X0MFx0oFx1MDAwN1x1MDAxMERcdTAwMDJxXHUwMDBllLaLglx1MDAxMVx1MDAwMMLq7Vx1MDAwNJGa+6mStZV0ZFx1MDAwN/5A2IFHZodiXFzl5SjP3uaeRUCql0N57jjsUVKe4l1HNOL2pUhtXHUwMDFlfOM+XHUwMDExrbNMb0vd79xcdTAwMWaSXG7RoKk0ToZo7eZcdTAwMDdllaGZiH6mnjGC6U5cdTAwMTM3P//zf5KFUVx1MDAwZWdcdTAwMDezTy6q84sqmZTDvEzGkyo5L/NhgS7M8ShPjt8lQ0TBmz7Phsf4UJH6Tq66XHUwMDFlN6v481x1MDAxYfbr+kVylt9EN2WpkLwr+Fx1MDAwN1x1MDAwM/+vXHUwMDAxPYtagZ1cdTAwMWJ3cXF7vZ9cdTAwMTJqaVPEZmOujeK00+FhV4bZ44p/c4Fxav7V5jV/Lle94e7hmT5cdTAwMTaDk/XyRe/TXGZcdTAwMWV+eFa6wVx1MDAxNpK6M8Cskl+Y3lx1MDAwMzBcZlUkQiYyXHUwMDA0Y8ZnlWfVny9X/bmGXHUwMDE1i1x1MDAwNElT4IpjSGpcYlx1MDAxMGPUqoFcdTAwMDbGZ1x1MDAwM34sTtZnXHUwMDEwfjmcMFxyiM+4XHUwMDE1VcJgy+lccrZHaJIoye/gRElAK5dcIsBcIltI4SHU/ltXXHUwMDFhiSY2L//vaOLq6ob4qzrTXHUwMDA0esZGg3aOa7brcHGO5ELvX1x1MDAxNWitUfpV/5VKOeeSXHUwMDFiSTBChNpo8DVppJJpZZhiTFx1MDAxOELYqrlcdTAwMTJcZjJcdTAwMTTYwUViOCjdXUpnqzjkXCKAQ8T1tKCrXHUwMDFjKVonT65kiaWU0TlEIDN1mjxZ3pn73Fwi0LrSSFx1MDAxY7J5l8COQ66uboi/tzFCXHKtNSVhXHLGXHUwMDE4MVxu9L3rXHUwMDEyXHUwMDFiPWRcdTAwMTHPPoGGyKEr1qDEpFYh3crIMEK5c0Jxx1x1MDAxM612elx1MDAxOcBcdTAwMTPEUKaWXHUwMDFjlFpcdTAwMDKqXXJNgpRMqsj5J6RcdEV5JyGZ5c23z91cdTAwMDKtK41EXHUwMDEzmzdcZuxo4urqhvD7oXvDXHUwMDAwQ9eNXHUwMDA1TrJLY1x1MDAwN/b6PcleeTZcZjTk3t1cdCmdXG5mJY5cdTAwMTXjoE2EfrKtXCKJd1x1MDAwMdVJqmanuTudlpVweFGdxHhcdTAwMTlj39jVSYFcdTAwMDEkdDvOb3nr7XPTQOtKI5FEcZbbp6+CMivLyeUyKtFcck2XY37BViuJhi28hjlcdTAwMTBcdTAwMTdPe6g9XHUwMDAyd8RcdTAwMTV/XHUwMDBicNWkMEZcdTAwMDA4Jf/aO4yZXHUwMDE2oEQtl3zfXZ3nk+L67eeEuPhXsjCM2Vx1MDAwZvN///mR89k1a2s8/73G6/ZG2bQ6mJydXHUwMDE1XHUwMDE1fpCXdlx1MDAxMStfdJWV1Wd4c4rxm+Zj+XjY8sjsVftcdTAwMTYup7awuPq6+mNNXFzlo+PJpVx1MDAxZnVaqPrV+9GHWi7oiFpz9lxcR1xmUt5+VMqDx+vdsOYxIf6AXHUwMDE1XHUwMDA2mYorXHUwMDE5XHUwMDE061OiiVx1MDAxMbQ+gnzfgJ2zJlqgmyrl0tX7osql5fm31a1tsylcdTAwMDbfk1XIeVb2XHUwMDA1XW2qczTRQUBcdTAwMTTlrezSROVDVHY5Jlx1MDAxMECP1i1cdTAwMDT3iZrtmTUgRoEx/c6soVx1MDAxMfq3lzTrhjsj7GqENMBcYpFpuVx1MDAxNtxcdTAwMWQqtfpoklApe+Cj3WKE/sXrZuFhZ4RdjZD5XHUwMDFioVwi6O/zwElE0ERxqmSvZ1x1MDAxMa1cdTAwMTH6V7+aac2dXHUwMDExdjVCXHUwMDFlsFx1MDAxM1wir1p5+rCmOkFcdLG65X1cdTAwMWV6skbon1tcdTAwMDfCm7HYzlxuu1mhXGKxQqRVxiBQQ4eiXHUwMDA1XG7eczMkvtmARsVV8NWkXHUwMDFkVanVqybCSsA7XHUwMDEyXHUwMDAyVlx1MDAwZnA359NmkDLAIJkwwIy73romTKFcdTAwMTRfJ3p4eio5q3W21nNcdTAwMDJi6eo95Vx1MDAwNJZWXHUwMDE3KSVcdTAwMDC+UzeNXCLWXHUwMDBld7Fxp0Jwp/ns4PBA3NleRdFHvVx1MDAxY+g17uBcdTAwMGVwRz1xJ1TD7d/hLjLudFx1MDAwMO6optQw6lZAb8NcdTAwMWRcIlx1MDAxNYNcdTAwMDDSw9OLaa9hR+9cdTAwMDB2zFx1MDAxM3aaNOKcXHUwMDFk7Fwiw874w05cbiWY4e558jbUXHUwMDE5JYxcdTAwMDZz/1xyRCuoY71GXHUwMDFku1x1MDAwM9Rx71Ivb9ScdrCLXGa7fX/YUTtxQXRcdTAwMTjswGpOS3X/yYZcdTAwMTXY8V7DjseH3bB461/jaFxi3lx0R9Ps7qynMKh9XHUwMDE24FgqXHUwMDBlQpFQqFx0rVx1MDAxOWG9LveWk0s4frOxXHUwMDE5Kl8zlCH6XHUwMDFkTfty2SBcdTAwMTlCXHUwMDBlfFx1MDAxM1x1MDAxYoRcdTAwMWXZ4IHbXHUwMDA2g6RANTpSRoZNilpcdTAwMDVcdTAwMDK5fPZAXHUwMDBmbfM4oFx1MDAxMaHhmGjHie61r2ixPYbYpcfBY2iXjNCN9sY+2eWTznZJgVxiIYBcdTAwMDSefqQpeiiM9HmCXHUwMDE5zdJvhLlcdTAwMTGi1thjbpJMpszqW6BTht+XMo5cdTAwMTllUGmIu6yGuc625HC8Y3Loz+FcdTAwMDbjXHUwMDExopRzRnnVSG9cZpJRsMcmk9iNXG5cdTAwMDa0qlxytG3gLz9/kTzZP9pPXu1cdTAwMWZcdTAwMWO+dnvOfOnqPXnOLeuMJE1WQuaDRUpcdTAwMWHlXHUwMDExs1x1MDAxYbhcbis5IIjtTVGSMebSnFx0VCDcJiGyY/I0IGVElFZcdTAwMTKcojOi/axjrkHZmmZkr0VKe/BYJ8GAXHUwMDE3l1xihulpcZ6UXHUwMDE3o3yanOXZOJmMR++SXHUwMDE3z1x1MDAwZm+OXHJcdTAwMWXgNfzz0aeJXHUwMDFir71cdTAwMThcdTAwMDLa+JNEQ/SxXHUwMDBmouVcbr2uXCKaQaqllMZQcKaidlx1MDAwN8+ug/PnIfExXHUwMDE4qUVd2svH2TN2mpL2sPAyueyzMujS6uLkokpcdTAwMTh4gU7dXHUwMDBlOtxOU61cdPrxXGY0l2JHo4G4+1wiIFx1MDAwNUy01twwcFx1MDAxNTxXyXVcdTAwMTH9Uy654DqyV4t7LatrPW+APHzDLMmqJEvshM0nyfQ0K4vxm6TM/3pRlEhH+Vx1MDAwZuejXHUwMDAyv+1cdTAwMWXjc4PPXHUwMDEwjTuHPjBcdTAwMDbSXHUwMDEw5Ha6wzJF6uRWXos5yTNs3J1cdTAwMWZcdTAwMWWYz7aGO5/5Y5hcdTAwMGJpp/BcdTAwMDJTy8RIK17RO+bcL1x1MDAwN78++rTH4GwuMIpcIn5cdI6h9tujUFx0q93ZXHUwMDFhdIq+XHUwMDE0IVx1MDAwMqgxqiZst9PB94Leb/2hx5Ti0riPSlx1MDAxMSuu7DwlxFx1MDAxNVjx6tjgM8pQ1kn59NlJ8m5ygVb8LqkmM9rJk1x1MDAxOVx1MDAxOV2Mp9lJjiHcz//8VzKYnJ1cdTAwMTejvEQ+OrmY5tM0eWKfU2ZcdTAwMDOkJvuS4ux8Mp1cdTAwMTZWU1x1MDAxZd/msiyqPO0xov9fPnUkglx1MDAxZVx1MDAxNm/9R4pcdTAwMWHFNilWd4tdzTdsc/hdQEyLTlx1MDAxMUimwmZ8qcRtW/WAmdex1eSSbl7zldLXXGaj13whZ4RuNFFcdTAwMTSrtqa7m+CX3Uu+VFx1MDAwYi1cdTAwMTlcdGtz1UZcdTAwMWLQ/Vx1MDAxZTMqj1x1MDAwMySrl0NcdTAwMTipXHUwMDFj5TXVteL79KkyXHUwMDA3t8jIsYzg34de8f2qu1mCslx0gPrh0z6hjDJWOFizntvlJiVf6WqPXHUwMDExKjXcznlIQSUzNVXDTUu+XHUwMDFlRvpcdTAwMGLy75+HpMdcdTAwMTQz0qrguixyZfdcXOiNMvxLTeyzXHK4IcZ0O+nq5bdHX7x4nrydJq++fn3U46pv20JjJbqoX9lcdTAwMTdcdTAwMWFcdTAwMDG3Wm1cdTAwMGLSgqRMXHUwMDEwQbkxRONtclDGLl+9XHUwMDA2kC9cdTAwMDJ8aivTaM+gcs3pr3awzVx1MDAwMYl3hVHGXCI71VJcbtPxrJGX76rTyTj5/NmX9ii2t/Z3zpJIXHTe2mw0ykfF9Cw5mZTJwcuvP5otXHJcdTAwMDPRYf7JVUF1Ms5vXG6qJVx1MDAwNquLnHGPo+07/8TRdlxirzIyXHUwMDA1SFx1MDAwNVxiXHUwMDAwNC+zpE832y+MSe3hc1xu41x1MDAxYmpcdTAwMTh3nTKBdI6PcK5w89CU7spdgdvHy4BcdTAwMTYu9Fx1MDAxNVx0cUfktWOnV0TuiKRM3MHBlVx1MDAxMr3WTufXvbqYVslpNk3Gk1x1MDAxOaJ+/ue/elxm/bWrjVx1MDAwNluvQnR9tNp+XHUwMDEx9TNccufdXHUwMDFmTKc2SJagqSDc2VxcXHUwMDE5XG7N7equ/H1cdTAwMDCzXHUwMDFiqVxil8x5tiRt7ehi9oBcdTAwMWabzohcck1lldG6QFx1MDAxM7nsmqmmlqosxyF/TYuzi1GVjfPJxXT0rsdYXHJbfjTwepWf62BtXHUwMDA1L0GvnIuZ46eJ2TnlgdB9XHUwMDE1UFx1MDAwNSOUXHUwMDBiUp/ErfWQtFx1MDAxZt5kh0fsOTHRy2Do59fOjNqke2ucTHPrjla59ULR/yzzltnCXmD1lvXGKz35XHUwMDBiiTVy/sox57srPYUh8nVcdTAwMDCZXHUwMDEyO3AoeViCX1x1MDAwMu6Tot5j0MNE6uSSbV56UsLXXGZ344ZOXHUwMDFiPHLbYECS31x1MDAxMFx1MDAwNVLq4CPFXHUwMDE0/jG9Pr64PPavzDdqT0o48vy8a+3JXHUwMDFjPDl4eniLWWbwXHUwMDBimDb8urNZipnUXHUwMDFkhJ1hpCSjVlx1MDAwM7TXXHUwMDFi5rHfSXeNypNyXHUwMDE16Vx1MDAwNUmJ1lx1MDAwNpRcdTAwMDEuuCTdh1xyPUz0XHUwMDE35FP/IYTBkYu1kU5p7vaT7mw/N1xiXHUwMDFh/VRtboCpbpWn11/svzp8krw+2j86dPvSvag7uZdcdTAwMTkrvmVeVSdo6JErudqaQFWqNJ2VQtzd1bvodlxyXHUwMDEyv1x0qFx1MDAwMVx1MDAwM5NcdTAwMDJcdTAwMWSWQH1cdTAwMDSlNFx1MDAxN1T2cDbp62mfy0NLq4s0m8Q8KzlNXG50NFx1MDAwNFGTXHUwMDFhrlxmkdxw9NCko/liN9ewXHUwMDA2eH9cZqBAXHUwMDBljHLhXHUwMDA2XHUwMDFla16rycJcdTAwMDFjLPqAr1wi+K5dYGfnXHUwMDA2vrrAn3599Gnf51x1MDAxYlx1MDAxY+uMM+bAPIszjfDIgUSmaUql4dRWXHKElFx1MDAwYoPdUaBcdTAwMTdcdTAwMTK/XHJAoqaCcSHdM0atdVNObUOfptF9UUFMTeN4k7PBJsl1Z/9Vt//ZRZXZvv2rwbtBOZlOb4pcdTAwMWY9RupGn1wimifrV6mRtyOZ8lRcdTAwMTCGlFx1MDAxYeFM3CdcdTAwMThP7u9vXHUwMDBihP/kXHUwMDBmYYxcdTAwMTUgdEZQgNBAdFx1MDAwZl1Y5KhcdTAwMWXjcml1kXjTazxQXHUwMDE5k1r9d3RQpZRcXDWS35Km0lx1MDAxOCHQXHUwMDEyiFp8U1x1MDAwYlx1MDAxY/JUScVBayOUXHUwMDAxXHUwMDE1od1huyg1XHUwMDBioFRFrdK4cI5cdTAwMGWadlx1MDAwMVx1MDAxYilAXHUwMDBirWpN37GKpkbWnOZccjD5mytcdTAwMTZcdTAwMWEmk1x1MDAxYv2XRz3G6NrVRuPIXHUwMDEzXHUwMDFm1Fx1MDAxYVx1MDAwZm+Xq5RcdTAwMTIpODVuTeRcdTAwMWRNroHlcVx1MDAwMCzxXHUwMDBilqBcdTAwMDN1aJAnOSXol977XGLKXG4qZ5FcXI9x2FhfJLZ0XHUwMDE0iF1cIlx1MDAxNmyFIFeAZ1x1MDAwNVx1MDAxNm1XP+XS6Loo6I5cdTAwMTK9sDfwx57kTFx1MDAxMXBDXHUwMDBm2lx1MDAxOVx1MDAxMVx1MDAxODqpSsafpue0LpK9XHUwMDExI9on9Fx1MDAxOHzNXHUwMDA1RuO9042qXHUwMDFjXHUwMDBlyV2mIOVEXHUwMDExQZmSTFx1MDAxM1x1MDAxN/7CqG+7Ko7DXHUwMDAw6lx1MDAxM4pcdTAwMDJ1V8ChVctCXHUwMDExY18noqNPSMU6MVx1MDAxZq4hXHUwMDE54G+s8jL5TYIx2ePH4/zyg1x1MDAxOeFcXP2TfPjhJz1GZ+hcdTAwMDdcYkDvWvBcdTAwMTY+4Fx1MDAxNY2DPFxc4EXQpkRLgzeUK0Wd5Fx1MDAxOVx1MDAwNl65b+PXbVx1MDAwMW9cdTAwMWVcdTAwMDBexVxi7qduJZr2XGatnVrUXHUwMDA24keTXFyybuLEXHUwMDFmf5xcZkZXw165tf3ZRFieXHJOrzOaj2bUlVx1MDAxY+d4Pb9cdTAwMTJb6TGUO32aOLhcdTAwMWVPqnzzxsl6XHUwMDEyf33jZG14P5JcdTAwMWV+XHUwMDA2XHUwMDE5PPjm3Vx1MDAxMzeWw/TwNVAlnepcYu1t9owqpZmIXHJxKaSp14M69ahZ23Sc1OAoXGaalFwiXHUwMDAzcIV/KedcdTAwMTSWjZTRVFx0jCAwgpdcdTAwMWPkaopzXHUwMDE2zYHhSlNiNHVJJ+wkfdeZ8Vx1MDAxYn9KwpBM2UOpXVxybKsx3ryBzVx1MDAxMMmkii3QjUSH4X6n/Obv8ndJMZ5aM3ncY6pxLzNSZGeB6lx1MDAxMNhxxHZcdTAwMDJShKPUxnCjSOOwRc1YKlx1MDAxMZ9cdTAwMTQ9XHUwMDA1SrirJqhVSlx1MDAxMabSbl1cXEGEvEuuXHUwMDA3+pYm/V9cdTAwMTBQT/2BKqkkuJW68y7tk5cgrFxct+BcdTAwMTC5J19cdTAwMTAuZDdcdTAwMTnD76ykX1HdSPZNXHUwMDFm4Vx1MDAwZr+6qYV/ZGvm3+31XHUwMDE4wmHLj1xibcf8wiq0OSe281RcdTAwMGKbnmZiOYdTV2Gah4Gcp0jKlq61JiB3zaqBWC78sTyjT3AraIFobVx1MDAxYlx1MDAwN42+JVxiXHUwMDFhPVx1MDAxMETSVd30vGch01xcezNcdTAwMWZjhGRcdTAwMDU3LVxuqndW/uP6sZlcYsijXHUwMDA0zdheLC/GPZdBifS5XCKi3zHc6WrNS1x1MDAwNUdcdTAwMWLDbVx1MDAxYVx0QDcqKLgppFx1MDAwMighYPCfVDnUiYVIpUDPUDOlXHUwMDE4uPtnXHUwMDAzdoLtkib+S0hGiCgr8Sicyv5rXHUwMDFhXGZcdTAwMDC3ddxGYu9cdTAwMDRkRu1ddoLnk+TMpkes4i6iYzwsKlxc+DRcdTAwMTlcdTAwMTbTwVx1MDAwND9GPkTHNzkvJ0OLXHUwMDE0lp2lyUxwZJBVg9Pc8md+llhZg+s0y7vJRTmTXHUwMDE2Smz5f9qiUCyXrt7XXHUwMDExWP9vXHUwMDFmPeJ+Mq2y0itWQOJJicJ4nlx1MDAxMUtcdTAwMTeNI0I0NXbqjMxO1FLgUkTUKYZcdTAwMWGgWs7o2Wkhtm8o3/tvKFxmv15NuHNcdTAwMWVt5eJcIkiwhzgyXHUwMDExO57nwKTmnbaTn//9XHUwMDBmJ+Jrmc97RPzS6uKMwXz7h69cdTAwMGXJXHUwMDBi8/Sbb/cvv8yefjlcdTAwMWV+c3DoXHUwMDA1UEJEyjjVoO2wK9OLOYhcdTAwMWLSl5pcdTAwMTjOqNFoJY5ontq8XHUwMDFkpdooXHUwMDAzksQ4kiAnXGZcdTAwMThsXHUwMDBiTEf+MNU2OcoocVx1MDAwZTKT9lx1MDAxNiabV6VLRbpIeWIr8tJcdKhcdTAwMWYlrzP8KqanyWen+I+sLNxM3Vx1MDAwYrd+3WLDuVx1MDAxNf87+2r3svPz11x1MDAxNX6xezclg723RX75maNcXHIy+7P33vUuYFxyPp9VXHUwMDFhfnrvp/9cdTAwMDNdTHB8In0=Rust Threads — True ParallelismRust hasNO GIL-> threads run intrue parallelon multiple CPU cores simultaneouslyOwnership system preventsdata racesat compile time — if it compiles, it's thread-safe ★THE CODEuse std::thread;use std::time::Duration;lethandle = thread::spawn(|| {fori in1..5{ println!("thread: count {}", i); thread::sleep(Duration::from_millis(1)); } });fori in1..5{ println!("main: count {}", i); thread::sleep(...); }handle.join().unwrap();// wait for spawned thread to finishEXECUTION TIMELINEmainmain: count 1main: count 2main: count 3main: count 4← interleaved — output order not predictable by designthreadthread: count 1thread: count 2thread: count 3thread: count 4time0ms1ms2ms3ms4msNO DATA RACESOwnership rules mean only ONE thread can -> owndata at a time; sharing requires explicitArc<T>If you try to share data unsafely → compiler refuses. Data races are impossible to write.PYTHON vs RUSTPython GIL prevents true parallelism for CPU-bound code; only one thread runs at a timeRust has no GIL →all threads run truly simultaneouslyon separate CPU coresSHARED STATEUseArc<Mutex<T>>to safely share mutable data across threadsArc= shared ownership,Mutex= locklet counter = Arc::new(Mutex::new(0));// clone the Arc for each thread, lock before writeKey insight:"If it compiles, it's thread-safe" the compiler enforces safety at compile time, not at runtimeNo more race conditions discovered in prod at 3am. Rust catches them all before your code ships.- Sandesh Bhandari

Figure: Rust threads run in true parallel. Ownership prevents data races at compile time.

use std::thread;
use std::time::Duration;
let handle = thread::spawn(|| {
for i in 1..5 {
println!("thread: count {}", i);
thread::sleep(Duration::from_millis(1));
}
});
for i in 1..5 {
println!("main: count {}", i);
thread::sleep(Duration::from_millis(1));
}
handle.join().unwrap();

In Python, the Global Interpreter Lock prevents multiple threads from running Python code in parallel on CPU-intensive tasks. Rust has no such restriction. The ownership system guarantees that two threads cannot accidentally modify the same data at the same time.

3.10 Async and Await

Async is about waiting efficiently, not running in parallel. Threads run things simultaneously on different CPU cores. Async runs tasks on the same thread but switches between them while they wait for I/O.

use tokio::time::{sleep, Duration};
#[tokio::main]
async fn main() {
// Both tasks start at the same time
let t1 = tokio::spawn(async {
sleep(Duration::from_millis(100)).await;
println!("Task 1 done"); // prints second
});
let t2 = tokio::spawn(async {
sleep(Duration::from_millis(50)).await;
println!("Task 2 done"); // prints first
});
t1.await.unwrap();
t2.await.unwrap();
}

Rust needs a runtime to execute async code. The most widely used one is Tokio. Async is the standard approach for high-performance network services in Rust: web servers, database drivers, message queue consumers, and gRPC services all use it because most of their time is spent waiting on I/O rather than doing CPU work.

4. Rust vs Python: Key Differences

Coming from Python, these were the concepts that required the most adjustment.

eyJ2ZXJzaW9uIjoiMSIsImVuY29kaW5nIjoiYnN0cmluZyIsImNvbXByZXNzZWQiOnRydWUsImVuY29kZWQiOiJ4nO1d3XJcdTAwMWLHlb73U0zJXHUwMDE3m63I4+5zuk93p5JUyVx1MDAxMi0xlimZlO0oW3sxXHUwMDA0hiRWIMBcdTAwMDVAyUzKVbnZN8jFPl+eZE9DXHUwMDE2MVx1MDAwMHrAaUwrXHUwMDFhL4dly1x1MDAxNv54MPN9ff7P+dtnWfZgcXNVPvhd9qD8aVCMR8NZ8e7BQ//423I2XHUwMDFmTSf8XHUwMDE0LP8+n17PXHUwMDA2y1deLFx1MDAxNlfz33355epcdTAwMWT5YHr5/l3luLwsJ4s5v+4/+O9Z9rfln/zMaOjfe3q+fN3ykVx1MDAwZr95Vlx1MDAwZVx1MDAxNsXkfFxcrp76iVx1MDAxZlx1MDAxN7lcdTAwMDIn+Vx1MDAxZqOctUZcdTAwMDDePn3DT38hcpKAXHUwMDAyQWhrXGZKQbfPv1x1MDAxYlxyXHUwMDE3XHUwMDE3/Fx1MDAxYVx0QuRSgVx1MDAxNSQlWins7UsuytH5xYJfY53NldRCkJKO+Of2Je9lYkFuXHUwMDFmmS9m0zfl4+l4OvOCfy5cdTAwMDZWO7dcdTAwMTL7tFx1MDAxOLw5n02vJ8PVa2RcdTAwMDFcdTAwMTbE6jVno/H4ZHGz/GS+qHxcdTAwMDFcdTAwMWZsfP6Pv0hcdTAwMGZcdTAwMWKP172Lf+H5xaScz9dknV5cdTAwMTWD0cJfKSlWj3rprlx1MDAwZYfL+/OfK5lmxWV56G/Q5Ho8vn14NFx1MDAxOZb+TjwoxNpvm1xmf/ltXHUwMDFmbu7qZuIvj/y8kr0s/Vx1MDAwN1uNjoxWK1FWXHUwMDAwU1x1MDAxMjZcdTAwMWY9mk6WYJNKgCBccuBWUs2fMMpcdTAwMTbLTz0rxvNydfm9aFx1MDAwN1x1MDAxNVx1MDAwNK6+4fXVsHj/XHUwMDE2aVhcbtSWP1x1MDAxM+Tt8+PR5M3m11x1MDAxZk9cdTAwMDdvVr/ls8rX2lx1MDAwNPV0NixnjYEtxVx1MDAxYZArf73FrbRcIoBUYyOwqZ48cY/ETmwuZsVkflXM+HL9q/BcdFx1MDAxZlx1MDAwN5/QXHUwMDFhnyAlXHUwMDEwSIJcdTAwMTBA6+FpXHUwMDEwnURcdTAwMDCbXHUwMDE0ntI56azUaeC5XHUwMDE4LapcdTAwMTD8gM5F+dNiXHUwMDFkmOBEblxyIflcdTAwMDNTWJTrOHW5scJJhVx1MDAxMlx1MDAwNVx1MDAxZsvabOGWOZ5cdTAwMDPwWWxcdDS/RG2DXHUwMDE4MTc6XHUwMDAyxqU9XHUwMDEzZedgLD9cdTAwMGWMMVxm47VXfzhPXHUwMDA1n1+klFxuwFVTLV4tWkd8d2RSvFwi33hrK1xu+m68ruDoYchf/uXN4mI6ybK38yw7vp4vsuyff/9Hln1T3mRPRmdnJd/eQTmv3ODpZHEy+qv/VmDWXHUwMDFl/bq4XHUwMDFjjf1cdTAwMWTRa7/k0Xh07q/Og3F5Vlx1MDAwMVxuX6HFiFxymdunXHUwMDE306vVs1x1MDAwM/68YjQpZ9u3bTpcdTAwMWKdjybF+NWeX6C4XkyPy/n7r7B+Tfjylc8+MEbmoHex+3rcWPOAXZ1Ty1x1MDAwYrTC/lx1MDAwN1xuM3FcdTAwMDOkbU7YIFx1MDAxOUN20aZ++lXaRSqCsMpoNLpyXHUwMDA3muhcdTAwMTdhXHUwMDA1W7ai0/rlYjZ919z4WUcghYxcdTAwMWZcbumNXGK7vDFcdTAwMDbFXHUwMDEwXG45+JVjUDfHoHSA7Os4XHUwMDE1XHUwMDA1QnDOoVx1MDAwMaG6jMGBbGThwDr67Db6kHIgdKzUjGKvU8A2XHUwMDE2wVx1MDAxZsm/elP8I9kw1Fx1MDAxY46OzzY2XHUwMDFizJa54iWptWFI8dvAXHUwMDE5TFxuR9SKtWPldN7DhHn84ujxwctXQVx1MDAxYkV2wkbZkjCRXHUwMDExcjGARvSreFx1MDAwNDX8I83+gVBcZlx1MDAwYitDpkjPvVx1MDAxZNwzXHUwMDExqsCgNlxiJk5cdTAwMTVIPrOVQVVR259IXHUwMDE3bPtcdTAwMGavXz17cdRh7m1cbrhGvcXsel/mYVx1MDAxM+bpjaBTjeZj6lx0/ldcboegevbFsc9GsE9Z4TRjPsS+etUnJUjDXHUwMDFjXHUwMDE0K0An0n2aXHUwMDE0ttJ9x9+fdFnxrYuXTOupJtyzXHUwMDE1XHUwMDAzp4Z7IEzOhHNKIVojqadeXHUwMDFj9VxcXHUwMDA09bQzXHUwMDA22bhcYkXOdlDPWm3J6dTMQ8cuhqrCL5Z531x1MDAxY7zOXHUwMDBlj05cdTAwMGWfPusyXHUwMDAxg1Km4uFw9HbfXHUwMDAwhFx1MDAwYmRccsNcdTAwMDGI5tzraFxm7CPlXlx1MDAxZUVwz1wisdHpbFSShb0yY5WoJFx0u1x1MDAxN394O1xmxFx1MDAxZuqisGJDXHUwMDFmbEdhcVx1MDAxYn+2kplKh0Ao2dn6tSPwq+ZcYmRFq4GcXHUwMDEzIVx1MDAwNGJcdTAwMWRcdTAwMDLZ7tJcdTAwMWGlosRZaCTFZ02M3bVcdTAwMTOCXHUwMDAxXHUwMDFmvFx1MDAwNoJaQFx1MDAwZsGUXHUwMDEwfFx1MDAxY3FcYlx1MDAxMp+CjKVg6q5cdTAwMWWCqIRcdTAwMDGHKrFcdTAwMDGSXHUwMDE4glx1MDAwMWe0XHUwMDA2gpbsXVx1MDAxMFxmhF4/XHUwMDEyXHUwMDA0XHUwMDE1lvhrh+CT5lx1MDAxMPQ1XHUwMDBiQtN22c0uNWxcdTAwMWO/jVB98tDPXHUwMDBlXHUwMDAwzuRpMTxcdTAwMGZcdTAwMTQ71KriNVxmVlx1MDAxZOtbazBUilx1MDAwM4krcT5cdTAwMTdDXHUwMDE0+1WJye4g8KB1XHUwMDE1js9NaclcbjpcbplcdTAwMTKsc8pp221oNkxRudxcdTAwMDKyW0jWXG5LWuh1iErchijpXFyAXHUwMDA0VitGabZSXHUwMDAy7ou0cXU3Zlja4r6EXHUwMDBmvm5+dFx1MDAxYWI1bDSFlLd1dVxiRSml1U6kLrshXHUwMDA1plx1MDAxMovfI3rww6Pjw0dfPT84XHTHXHUwMDBl9Nqjnyh2XHUwMDEwkDFR5IBJuVfiKsRCkCZcdTAwMDe+IYh8hFlWlFx0MsdDO1x1MDAxOJ7ae8LCp1x1MDAxMTY0aINK1eiJXYrCLFx1MDAwM3mpq4mVMo5axc+/vV5cdTAwMTSn4zI7vcmG5VlxPV6EXHTZiWDeLmHTMVx1MDAxM4t9MlshXHUwMDFizofXpVx1MDAwNo1Evl1A24CC7Km5g5rPXCKoKVx1MDAwNeskpkWwqkNvPriipjDaqIqNkoiZXHUwMDAyqjXdezDz8PJyXHUwMDBi7lx1MDAwZjtMzjvkTcjP0734XHSB1LOhnC1/icYwTSXKXnXG8fMwJlx1MDAwMlxuWlx1MDAxMtVEQGvzXyAkv83p9Kln4Sy6Klx1MDAwNmNcdDq9WmSjyWKaZVxm/Fx1MDAwZVx1MDAxM7NGzoSEXHUwMDFjNCEk3/vcoNHsZ1x1MDAxYo2iktF8T0/KnVD8rFx1MDAxNuxIhrJjJldKKGWN9n53JWXa56qbcPVPMWYuWL7GXHUwMDEwNHPlXHUwMDBlZWpcdTAwMDFcdTAwMWRaxOR2LlvP2KpM64s/Zl3n6baIySg6msy3KVpcdTAwMTcgN1x1MDAxYj5nJVx1MDAxMnRr2NpcdTAwMDD7cPW+u6k3sMVa4DHcwipcdTAwMGJR7EO7XHUwMDBlXHUwMDA1J79pXHUwMDFknPStcYZ0UHHWupxkWdNcdTAwMWFru1xcPM+qo1khk13PXHUwMDFhykpU5Fx1MDAxNpFcdTAwMWFzUFY7iSSAT1x1MDAwYrNcctDYWGRpXHUwMDA3Vt1cdTAwMTf18DzClLOOlNPBXHUwMDEyXtxcblDeWnKoLCqDqevn0SoyrSqZJtOsXHUwMDE4XGZGQ/5lxdifwMXCf5mgpuhEYPIugVPpjYjiko3yJqlcdTAwMDPeVrC+aUWBhHnV4v9BXvXbmNpCrYzFartesyY/56zTXHUwMDE1S7qDOlx1MDAwMopqlC9cdTAwMTKFjdv8zMdo85OlvyX/Klx1MDAxOIba/Cq19Hui8Kg5XG7JoPBDT0IpqnpcdTAwMTBqZKdPWOw2XGLbpfdNXHUwMDAwhn16vylcdTAwMDRftLagQViD2lx1MDAxMcWdj1I5h0pUvOAuQrNZelx1MDAxZjchXHUwMDE5iLBonaOS6Fx1MDAwNEhLJHSfzo9cdTAwMDPqy5hshUZ2WfR24b+/V/WQJGctSevSJ/Q1USsj+tXrl1x1MDAwN9nJ65NXXHUwMDA333bYclx1MDAwZUqZylxchj2T+lx1MDAwMS6CXHUwMDExuULjjG9VXHUwMDA2gj4xXHUwMDExR8XvYupil+WtXHUwMDE4bFx1MDAwZcCtXHUwMDA3P1BRXHRCYyk5XHUwMDEzldLViNtcdTAwMWVMfHIzYXJccrLfXGYuSv/CrFhks+vJYnRZ/nuHw5/NxE7H1Yb9qyZcdTAwMTfg01x1MDAxMlYhXGKzMZrKQK6sIWfAStK4XZyD/H6jlDP8UrbEQoNcdTAwMDB7XHUwMDFl7+DxcUSFnFx1MDAxZv6lKehcdTAwMDO7+vp2Yu5LJJk6LGXAWWOq4Izl8YlcdTAwMGbrrPNhML28XHUwMDFhjcus61xcbi56Mj63SnGEWmP7XHUwMDE0x1x1MDAwN5nuXCLpSZikMSlcdTAwMGVfXHUwMDE4YEVk6MBcdKYtfPqZXHUwMDEwu/XMfilcdTAwMGVcdTAwMTOoJjMyXHUwMDE3TmnrXHUwMDA30UjjtuHZJzh2oPRVc1VCfmKasdtVKf5cdTAwMWLVJjh8hzex72xSZ7+RzUzbSpWcXp/Ps0HB13ixeVx1MDAxNnfYWWskdbJcXEfzLsaNKDNg017uPtdRw83vI5KPXHUwMDA2wPmR2TGqwpeQIYpOj5KbYasgM4Rqpvogc1NcdTAwMDT+0NqGkcjGiHBcdTAwMTgsQN7RXHUwMDFhQEKDY1x1MDAwZrLT0NwryFxmgTmvXHUwMDEyRY5eQu2sUyBVXHUwMDFmZI5cdTAwMDPqj82PSi1IXHUwMDBiacPttltu8irtoVx1MDAxNVvWyqSuuOWPrE7g2KdZ5eDbXHUwMDE3x687bLFsXG6YyjjB/Vwiy0FcdTAwMDI6lbNJSWBcdTAwMTVcYlx0KWZcdTAwMWTeq4jUnyNMXHUwMDE1ZVxilTZB/pnNXHUwMDA3K26tZpNcdTAwMWZVajeCjNKiVcX702J2WpyXbImPx2yUlMMwXHUwMDE1O1x1MDAxMYLaIWs6Vu41XHUwMDAzMcRKXHUwMDA0yFx1MDAwMVx1MDAxNVx1MDAxOFx1MDAwYoJcclVcZjj3PSt3sPJ1c1YyXHKUXHUwMDEyXHUwMDEwXHUwMDFjg1wi6+PEfjWFsqJSUZMqTiycjFlcYrPFylx1MDAxN++YXHUwMDEw84vRVfbb7HQ6m03fjSbnXHUwMDBms8k0e/q4w1x1MDAwNG0mdjKutolcdTAwMGZXwdLHh6PJ+ZfWvtVyqUt46UitZ+V8+tw67LhjtVd4XHUwMDE4dGBcdTAwMGWAMLlcdTAwMDYlXHUwMDExJTlGZ1x1MDAwMsfqXsWHi+YqxFx1MDAxYe3HpOiQYSdr48NERjMkIbVcdTAwMDZRJHW78PDyzM2uiut5OV+ewOOyeFx1MDAxM95501xyP+sugZNcdTAwMDWFm89cdTAwMTXbXGJcbmOgR6VcdTAwMGZcbkdcdTAwMTHytDkhpXZAXHUwMDE2wjU89ZPFjFx1MDAxNJJkt+vfVYv6d5RNM1x1MDAxM339e1xyXGJcdTAwMDfNQag0aVwiXHUwMDFkh0Fp/d46rV23QdgqNYHQpyZaQHDY2nxm29lKdmpElFx1MDAwMU3CXHUwMDE4Q9WRY11EZuPpduxpe/ddklbaru/0RcTcV/Cxi+839lZbzW/xqlxc7nyRnzHVuel9zqJcdILL5oeoL0Mna4JcdTAwMGIqdO3gXHUwMDAx54R2ViffzURamso8tT1M66Pvnz/Pfnj0/PtOT7pcdTAwMGJKmcqIVlx1MDAwM2g0UWsze4G4XHUwMDFkJ1Uyl9Yqfyz1W5pcIll4XHUwMDE2YU9cdTAwMGKtjVx1MDAwZU+brFx1MDAwZrg4yee6/fT1eNsknE5q6pw6XHUwMDExXHRdXHUwMDE3L81+Js+6RnOygNZDSyHWgdS5b4Yz6Id2o8DAkPY+PbGDeudcdTAwMTFJQ+3Qz/xcdTAwMGZ6XHUwMDExOybvXGLjs7qYOrhEhqxrRb6H2aCYZMXVVVnMsmJy8+6inHWZjXfIm04r7jdnMsRPqSBHa/mwNGBcZojQ8JNeNe7g50VMqEkjIIVcdTAwMTdcdTAwMTjW51x1MDAwZpVxQvmURGJ+XHUwMDFhSVx1MDAwNlpNgH1x5YeH/P7VXHUwMDFmO8zJgIxcdHnYSE+SXFzfnlx1MDAxM+ShtbnWIMhYMICmnydcdTAwMTnJw1FcdTAwMDRcdTAwMGalU4r99WDPyI5cdTAwMTF1XHUwMDFh/Yhcbkw+hshIpamVq/gwu7yeL7LTMrsoJsNxp6trdsiajJhtMvZcYn3GPtufh//VOuTIzrw0uNad1ailiznEXHUwMDA2Z7c3aqj9kvZcdTAwMTjoXHUwMDBmXHUwMDA2VDmSVWxjO/7aWlx1MDAwNSDaZ+13IPVNVJJQ83VcdTAwMTbhqab1sUUySFqp1FxuXHUwMDAzwFxiaFWO6V+bXHJmxfyinGd/yEaXV9P5fHQ67nJPV1x1MDAwM5mTJe9cdTAwMDMsbZg3dVx1MDAwMduuT97H8HLcnJdOWk2quq24Ud+MZDvbyW73zehWeVMlQi5GnzdtXGLBy9ZGXGYrXHUwMDBiUK4mXHUwMDE2V4tMo/x01Oq83i5cInOvji4lXHUwMDAyYz2VylxyslYlofnHhlx1MDAwNu+avM+N1qB0XHUwMDEyYcCgXHUwMDAx51x1MDAxY4pg6Km+ocshSCtcdTAwMWSkz476XHUwMDA2lzZcdTAwMTbMwfHxi+Ps2aOjJ89cdTAwMGaPnobNXHUwMDE2tfboJzJb6lx1MDAwNE1lq+g9c6QhQlqXK9K+kUT23V2RbJxGlHvxkaeljVxcXHUwMDE56fyERahcdTAwMWE7XUmSXHUwMDFl/DQol2HWefabXHUwMDBlR57CYiZKmuqGSVPUXHL0XCLqXHUwMDFj/VBm6YQyujI6rM/JNKHiVXMqgiPht1x1MDAxZITsNFm7XHUwMDFjU1rlK7qcSN5oadk7aaVcdTAwMTdcdTAwMTezmy/LJdA7zMSQkFx09WGjpUKK1rMyIVwi6lxcgrNcdTAwMTZsr1x1MDAwZWM5+N8xJUNKOSUhPDSpjoNO+X3g1EF12OXxenXz89oovv2qXHUwMDExgopcdTAwMGZM7k1Po1x1MDAxZLvBhDrB0Mt7pflmXHUwMDExmo9AXHUwMDE5a7YnRntJapfqSSOlRKLUXHUwMDEzPoxcdTAwMTTVXHUwMDFkinuwjqF8PV78/tXDgy6XI1x1MDAwNKVMp/pcdTAwMWFcdTAwMTYkwN2qXHUwMDBmXGJzzapP+NVIqGxfj1x1MDAxMMfEeVx1MDAwNFx1MDAxM1lcdTAwMDFa9uwgXHUwMDE4LKylopV+npnTqev2tLHV271XOVx1MDAwMt/CRTY9y+ZMl2Jx3fGqvVx1MDAxZNImo2abklx1MDAwNFWBY1+SXHUwMDEwTcVFmIpcdTAwMTHRfEJr2E2Mm1wiIJU17F12fJGe3q9cIkFVXFzfW0gql3uvWJNcdTAwMDLS1YFBfUFCXHUwMDEznF5HuExKKm2wxmXaXHUwMDAxSTRoybjkK5GX9GijM8rZbDrzM1sn/7YsXHUwMDBl46N4OqsrZOtEPcKdXHUwMDEyJ6tG0PtWI6jQ+qi+XHUwMDFhIYaUb2NIaVx1MDAxNLFcdTAwMWJcdTAwMTOs766PYzB/nOlAWH9cdTAwMTdcdTAwMDSpxShcdTAwMDFlmpbEuH6UQFx1MDAxOITvmoPQ996JyI2/0oFghd3xulx1MDAwM2pXXHUwMDExXHUwMDEzKszqK2KaXCLwp1x1MDAwNFx1MDAxNTFIJCOnb7Oloq2rXHUwMDFh3l1cdTAwMDTmflx1MDAwNTEutOfW5eTQWnLg51x1MDAxY4tA5q9cdTAwMWZcdTAwMTewXHUwMDAzpjdcdTAwMTFcdTAwMDclXGIpUVx1MDAwN8dcdTAwMDXI2lx1MDAxMat+hYaV1Vx1MDAxZOGpXG5irKpcdTAwMDBkny16z45cdTAwMGZcdTAwMWU96fKogC1cdFNcdTAwMTnI1HTGscuBrNJK8EX3I4w3XHSZa8tPStLstdP2JFx1MDAwZlx1MDAxZlx1MDAxM7VK+cFPhlx1MDAxZHvqV3LFsfOvMbY0XHUwMDAy+6nhmKitt2SYmvwm/Vx1MDAxMVx1MDAxMvNcdTAwMDSmVcn989HliD8yO73Jnlx1MDAxZT7Pzqaz7PHL77N309mbMGc7XHUwMDExXHUwMDFjbSR1Olx1MDAxZe+ZSrSBli0jc1x1MDAxNE5cdTAwMGKp/ET64LaAnqz1ZD1cdTAwMTVcIoatvplYUbhcdTAwMTBfbj54q0yFXHUwMDE0qNElz2BYrI7m20eZzq5Ln1x1MDAxNijG43L8MJt+XHUwMDE4ONxhpt4tckKaNkozbtJUi+1hbihMLlx1MDAxZLIpZo1GhH48SCRLZXOWKvaBa7fM1G6rlSA8sWXyXHRZ2lxusq1q3cpcdOujQTnPXHUwMDE2XHUwMDE3s7JcdTAwMThm8+KsXFzcdJijd1x0nIyhrbKNdjtSXHUwMDEyzDbqPttcdTAwMThiJIRcdTAwMTlcdTAwMTmTblSgwFG4XHUwMDFloJanzi9cdTAwMTNWqlx1MDAxMr/qZKxENTLxtvKNlW3Zq/BcdTAwMWTkKLVcdTAwMTHsJ1x1MDAxMLIpsVxy0T7fuFx1MDAwYqlcdTAwMThh4Vx0TWxOu3Bgub5QWrI7xq5yat2hzFq5zFx1MDAxZbqDP7DIZoU/jP/Q4ZhJWMx0lpxqZMk5K3Ik5diZksKZjeoxJ3NhjHOK2O9WcjtuXCKty1x1MDAwNYLVkpRC/k97on79tXGP6b5cdTAwMTBVRVx1MDAxMFX5hkqrgpVcdTAwMDFUX9eJXHUwMDEyiKg6ViBcclMtSWFbXHUwMDA1Tj4sb13m2ztM1Vx1MDAxYTmTVVx1MDAwMVBji24jXHUwMDAxq1x1MDAwMzvK+yqAOFx1MDAwNurmXGYkXHUwMDBifl1h3EZyQ1x1MDAwMFx1MDAxNsWnn4C6XHUwMDBigqZVXHUwMDA2VptcdTAwMDBcZvtcZmxjXGJSXHUwMDE4gjHD3LWv969ZYLYrpi5cZnXdsTB7JWF1IHIsXHUwMDA15Fx1MDAxNlEvV126Plx0XHUwMDFij1RcdTAwMTNjrlx1MDAxMHu77CZcdTAwMDTbUOpcdTAwMDdcdTAwMTNcdTAwMDBcdLJ+4n5ic4WI/6dV8fujk9dHNcvzOmGmbMiXyjwx++2ZXHJcdTAwMTFcdTAwMTC0y1x1MDAxZFnSQFo67DdaxvLPNudcdTAwMWbwXHLQXHUwMDA2g1U525xcXHlcdTAwMGJowUhIPzPagVCt/PpifjNcdTAwMTmMpln2m/mI+VXMssvpsFx1MDAxY3e5J/NukdORdL9cdTAwMDRrUE2CyX0pXHUwMDA1+P5oq5NMdr9PvZqnwkWoSWBcdTAwMDOM70p4ZG39Qmhj+YesTD47WoAzrWZHL0H/ZfGuXHUwMDE4dXlQQVDKhGxs1q7ZxGh1lFx1MDAwYqudJmG9zqx0XHUwMDA19kqzXHUwMDExXHUwMDFiXHUwMDFmNWejRitcdTAwMTBqhmnt2NfmrNFW2vRkXHUwMDE0ul3v9LvR4lwiezV9w0podj1ZjC673K+5S9hk1GyTQNVmu86hb9dszsSv2lx1MDAwNzosXHUwMDFhY1x1MDAxNcRtrVOCtZpcdTAwMTLU8TjHXv2a2lx1MDAwNspZnc7Fcp6wb0Bcbtlvffp0XHUwMDE3Tlx1MDAxZsfYb8b5UVPBvc96K6e6mnFDXHUwMDAwKvmwXHJlJVKrnMxiefz+IbuaTYfXXHUwMDAzP1Mtm/PROCxmXe7YbCR1snyNaaxANvI1pFx1MDAwMvZdn6+J4uaTiFx1MDAxMIhcdTAwMTBGgVx072Svt+aInNKsMDo9Rdq26Nsk1a+Ablx1MDAwYsODXGJcdTAwMTXBXHUwMDFhgthfj5uCtpzHpNFht2HYKnFIul9cdTAwMDLdXHUwMDA2hF8nSFx1MDAxY/rB5Fx1MDAxNFx1MDAwZVx1MDAxM9fb08osXHUwMDE3k3TanrZ75VxyqbKvaXU2ilxck5/g6byrLyoj+Pu8YSOgPo04LYVw2ungfP36hSxIoPxcdTAwMWGv9FlDZV2r8SeHR89cdTAwMGWOXHUwMDBmXz06enzQYVx1MDAwMzooZSqD2e6XQVxmUVx1MDAxMdDmXHUwMDAwIFx1MDAxMbWwmozsm79cIqn4rDlcdTAwMTVccnNAW1x1MDAwMcFo6FZcdTAwMDDmtvdcdTAwMGJYs2rUyVx1MDAxYqmdXHUwMDAy0cq3fTwu5vMvTot5OcxGk4tyNmJcdTAwMWJl0OWI6J1cdTAwMTKnoyg2oehm+jBEUfSjXHUwMDBllEU2elx1MDAxNZDfQdxTNI6ih1x1MDAxMdrSofRTPMNcdTAwMWJcdTAwMDd2XHUwMDA0RFx0lZXJ+zOJ7bd22cOjaVx1MDAxNehcdTAwMGaz63mZ8a1cdTAwMWQt5vz4fFFcdTAwMTZd3oBcdTAwMTkjfDLmtklokFx1MDAwZVx1MDAxNOn0XHSNXHUwMDBmMt3J1D+1d8DIeZ8nuKZg1/BcdTAwMWMjtFx1MDAxM1x1MDAxZPe/9spnXHUwMDEwXHUwMDA1NmJqnVx1MDAwYqWtXHUwMDAzXHKKrOo3YsZcdTAwMDL1m6hwXHUwMDE1oqxcdTAwMTlajLVcdTAwMTlcciNcZlx1MDAxYueCUntgyupqlcuebSbT+WiZXHUwMDE1mLLUd9t+nXDJmomdLKlhXHUwMDFiK5GNaLKBUMSkT2rE0PN5TFLDKkNsaEXNopToyFx1MDAxOHCyy8MoJ9NFeXq+bzDZVM6mXG5cdTAwMGVcdTAwMDPRZKlcItJcdTAwMWGfQ6nFXHUwMDFkiuJzUchSwq9cdTAwMWSF37a2ZvyISmXDqqM2YCBR+6ZcZutSq1x1MDAwZa2Vhpjg3S5sjovTctzEoEGdO7/jSzs/XHRDa9pAKeVcdTAwMTLBXHUwMDBmeVx1MDAxNppcdLlt7EjQOVx1MDAxOVx1MDAxMMh/XHUwMDE4gVYlKN+4X+W3RzHGjveCjd7ei+LvZG33uzJcdTAwMTb4rZS84M8qKUxcdTAwMDRit4ydb1x1MDAwZV5nh0cnh0+fveqwbVx1MDAxM5QykSnznqnXXHUwMDAxrtbpkVxyeyaUlMRQUvIjmDObRP3X58ZTXHUwMDEw8EVcdTAwMDRcdTAwMDE1SU+lyM5FXCK2ME31VnXQnGmUf9xEXHUwMDFmbUdkXGJMbpz0jZpGXG5WLlx1MDAwMSyK5mC8Z9HUlzG2tVx1MDAxNmhAXHUwMDA267+xXHUwMDBljCR9mjB1x1x1MDAxNKmlXHUwMDAx0UZcdTAwMTe8vFlcXLDzOJpnZ+Pyp9HpuMx+yy+dL7LFNHvHrmSZ/fPv/8jOZ2WxWFx1MDAwZYCcXHUwMDBmZqOrxfxhtlx1MDAxY04yXHUwMDFmjMplXHUwMDE482o2XUw9gudhlUJrj35cIpXyMb9smoV6k4brnDdcdTAwMGWEwHhzdv9yXHUwMDBifFSw3VwiwFag11x1MDAxZlxid1x1MDAxZlxi30VcdTAwMWNcYlaTpnBbff1cdTAwMTJZi857XHUwMDFmlDq7YoxcdTAwMDLdKrtyfM18YIr48XRcdTAwMTV6zK4nm+S4mS/KSybH4+eH/IrpmP/3x/L00XxeXp6OaybxdeJcdTAwMWNI/1x1MDAxNVPZpc06NJXKlfPzXHUwMDEz/fJi66Pda8dcdTAwMDG7K7lcdTAwMDZribRb2yi8qp+zOYJcdTAwMDEl+b1sNdhQIK4/XHUwMDFj6lx1MDAwZYfjXHUwMDE4a4H8ZFNHQdO1PvnqSFwiXG7rko/dXHUwMDA0XHUwMDBilVx0XFx7XHUwMDFjXHUwMDBmJ3x1soFcdTAwMTfzavGww1x1MDAxY6+RM1x1MDAxOVFcdTAwMWI1b0rSOVx1MDAxOEsgtZRcboxYz2NZaXNfwIt+bVx1MDAxYbjQ6E0gfoVcdTAwMDNErVx1MDAxY/pp1i2Zer9SWifNmcpcdTAwMTdZKVx1MDAwMSZYVOjqXHUwMDA35Eo+iFx1MDAxNbuEqUuZNFx1MDAxZu6iXHUwMDE1U1nSm2w4Ojsr/a3Mri5G4+l8enVx87tcdTAwMGXTtonQyTjcbFW8wNyw1+eAz86N3ble01xutrlcdTAwMTClXHUwMDA1NrxcdTAwMDJrXHUwMDEx+Vx1MDAwNFBcYpJcdTAwMTWx0NZRKC3dq9paXHUwMDAyv4ogMPjAjKJgJ4/E+tRcdTAwMDJor6UlJlx1MDAwZtRcdTAwMWEjK1x1MDAxYX5/55y9yflint1Mr7uscHdcdJuMscMmjNUkc1LgfCDMXHUwMDFhtTqZP1BW8lx1MDAwZljHnMTQXHUwMDA0XCJ0OVpknYtKXHUwMDE4bYN76GMoe7/q+L9vTllfl8iWXHUwMDExXHUwMDA0XWdbW8ivNFx1MDAxMVL1tE1cdTAwMTRNU8rpVjPpl47l4KJcdTAwMWO8WTIgXHUwMDFiT8dcdTAwMWRm7E5pU1F2vihmTUgrJdqcLCCAXyBMldrf9zlRk5NGp7RzylXbXHUwMDAwVk4t+7Qkjd8lXHUwMDExIKzJ+1x0w3WU/SFGy1xuK31mOqRl6yu/2PJcdTAwMDFmdPLNTIo/XHUwMDE4Wy17+ef//k+Qolx1MDAxNc39XHQpuiZdolx1MDAxMLNnZKNmXHUwMDFi77LmbPb6/Df/qStDXCLep6FEbqTk6y9cdTAwMTT/XHUwMDA3Vnp2lVx1MDAxMmVKWlx0bWPP98tp/THGabVCeFMzWNpfO1x1MDAxOVxm2Nc1azmBRGx0UG2kT8jGbijMj8DGi1x1MDAxN8NjKVx1MDAwZlx1MDAwZZ+8XHUwMDFkXFx+h38pbt5+5/7ciJxCLPdcdTAwMTFatIb1JeCGmatULtm+MoakNk5cdTAwMDfImTpcYlxcXG7k33hfWPrn5ixd5nmQcMug9basqC9g0NKgn+qW2sxlM4laXHUwMDE1XHUwMDEwfZGdXHUwMDE0fCXmXHUwMDE32VdcdTAwMTfLXHQqo1x1MDAwZZN2l7DxRi7/uby0XHUwMDBmiqurk1x1MDAwNV/YXHUwMDA3XHUwMDFmilx1MDAxZlx1MDAxZrxcdTAwMWSV775cbtTrnC1/XHUwMDFlfPbLXHUwMDEx4PFeLmsmf/7s5/9cdTAwMDPvUMhcdTAwMDUifQ==Python vs Rust — Key DifferencesCONCEPTPYTHONRUSTKEY INSIGHTVARIABLESMutable by defaultImmutable by default,opt into mut-> mutno accidental mutationTYPE SYSTEMDynamic (checked at runtime)Static (checked at compile time)bugs caught at compile timeMEMORYGarbage collectedOwnership + borrowing, no GCno GC pauses, no leaksNULL VALUESNone, can appear anywhereOption<T>, must be handlednull crashes = impossibleERROR HANDLINGExceptions (try/except)Result<T,E>, part of signatureerrors can't be ignoredTHREADSLimited by GIL for CPU workTrue parallel, ownershipenforces thread safetydata races =compile errorASYNCasyncio (similar model)async/awaitwith Tokio runtimetokio = production standardINHERITANCEClass-based inheritanceNo inheritance, use traits insteadcomposition over inheritanceKEY INSIGHTPython is flexible + fast to write — great for scripts, data science, prototypesRust is safe + fast to run — great for systems, CLI tools, WebAssemblySame concept,very different philosophy:Python trusts you,Rust checks you lol- Sandesh Bhandari

Figure: Key differences between Python and Rust.

5. Development Process and Mistakes

5.1 Git Setup and the target Folder Problem

The first issue was that Rust’s build folder, called target, got committed to GitHub on the first push. The target folder contains all compiled output and can be hundreds of megabytes. It should never be tracked.

# .gitignore - ignore target/ at any depth
**/target/
# Remove already-committed files:
git rm -r --cached 01_variables/target
git add .
git commit -m "chore: remove tracked build files"

6. Takeaways

The compiler changed how I think about code. Coming from JavaScript where you find out something is wrong when it throws at runtime in the browser, or Python where it crashes mid-execution, having a compiler stop you before anything runs and then explain itself precisely is a different experience. And yes we have AI now, Copilot predicts half of what we are about to type, but that is different, that is autocomplete. The compiler actually understands what your code means and tells you why it is wrong. The errors are not vague and they tell you what broke, which line, why the rule exists, and sometimes exactly what to change.

The ownership model was the hardest shift and the most lasting one. A value belongs to exactly one thing at a time and moving it transfers that ownership completely, the original is just gone. It can feel like hassle at first, but that constraint is intentional and helpful. Rust makes memory ownership visible in a way nothing else.

If you are starting out the official Rust book is genuinely the best place to begin, it is free, well written, and takes you through everything properly. You can find it at doc.rust-lang.org/book.

Source code: github.com/sandesh-8622/my-rust-progress

Keyboard shortcuts

Navigation

Go to About g then a
Go to Blog g then b
Go to Photography g then p
Go to Work g then w
Scroll to top g then g

Actions

Search /
Keyboard shortcuts Ctrl /

Post Lists

Navigate posts j k
Open selected post Enter

Articles

Jump to nth heading 1 9
Next heading ]
Previous heading [
Previous / Next item
Go back to list Esc
Esc to close