{"componentChunkName":"component---gatsby-theme-spaceout-src-templates-article-template-tsx","path":"/mcp-servers","result":{"pageContext":{"article":{"id":"20cd380e-b562-54ab-977b-7227a1fa957d","slug":"/mcp-servers","secret":false,"title":"MCP Servers","author":"Luke Celitan","date":"December 19th, 2025","dateForSEO":"2025-12-19T00:00:00.000Z","timeToRead":6,"excerpt":"Uncover everything about MCP servers—from USB-C analogies for AI to advanced protocol, practical code, and real-world enterprise workflows. Beginner-friendly, expert-depth, packed with examples and best practices.","subscription":true,"body":"var _excluded = [\"components\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n/* @jsxRuntime classic */\n/* @jsx mdx */\n\nvar _frontmatter = {\n  \"title\": \"MCP Servers\",\n  \"excerpt\": \"Uncover everything about MCP servers—from USB-C analogies for AI to advanced protocol, practical code, and real-world enterprise workflows. Beginner-friendly, expert-depth, packed with examples and best practices.\",\n  \"date\": \"2025-12-19T00:00:00.000Z\",\n  \"hero\": \"mcp-cover.png\",\n  \"author\": \"Luke Celitan\",\n  \"category\": \"Post\",\n  \"tech\": [\"AI\", \"TS\"]\n};\nvar layoutProps = {\n  _frontmatter: _frontmatter\n};\nvar MDXLayout = \"wrapper\";\nreturn function MDXContent(_ref) {\n  var components = _ref.components,\n    props = _objectWithoutProperties(_ref, _excluded);\n  return mdx(MDXLayout, _extends({}, layoutProps, props, {\n    components: components,\n    mdxType: \"MDXLayout\"\n  }), mdx(\"h2\", {\n    \"id\": \"the-architects-manifesto-on-model-context-protocol-from-usb-c-simplicity-to-enterprise-survival\"\n  }, \"The Architect\\u2019s Manifesto on Model Context Protocol: From USB-C Simplicity to Enterprise Survival\"), mdx(\"p\", null, \"The software that we design and implement has to be reliable, maintainable and\\nscalable. If a software is not designed with these qualities in mind, it can\\nturn into a mess. This article discusses the importance of practicing clean code\\nand architecture in the emerging world of AI agents, specifically focusing on\\nthe Model Context Protocol (MCP), to avoid the pitfalls of not applying them.\"), mdx(\"h3\", {\n    \"id\": \"the-paradigm-shift-from-chatbots-to-agentic-integration\"\n  }, \"The Paradigm Shift: From Chatbots to Agentic Integration\"), mdx(\"p\", null, \"The software industry is currently hitting a massive inflection point. For\\nyears, we\\u2019ve been obsessed with the models themselves\\u2014parameter counts,\\nreasoning benchmarks, and context windows. But integration remained a \\u201Cmessy\\naffair\\u201D of bespoke API connectors and fragile scripts. We faced a classic N\\xD7M\\nproblem: every AI assistant needed a unique connector for every data source.\"), mdx(\"p\", null, \"The \", mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"Model Context Protocol (MCP)\"), \", open-sourced by Anthropic and adopted by\\ngiants like OpenAI and Microsoft, is the \\u201CUSB-C moment\\u201D for AI. It collapses\\nthat complexity into a universal standard. But as any senior architect knows,\\nwith great connectivity comes great risk. This isn\\u2019t just about making \\u201Cchatbots\\ntalk\\u201D; it\\u2019s about making \\u201Cagents act.\\u201D\"), mdx(\"p\", null, \"When in need of good architecture patterns look out for existing platforms and\\nsolutions. Open source projects that survived the harsh reality of software\\nengineering will be a great source for anyone who is looking for good patterns.\\nWith time and experience a software engineer will be able to tell apart the\\nanti-patterns and patterns one should follow in this new agentic landscape.\"), mdx(\"h4\", {\n    \"id\": \"mcp-architecture\"\n  }, \"MCP Architecture\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-mermaid\"\n  }, \"graph L\\nB[Prompt argument entry] --> C[Client invokes MCP tool: searchFlights]\\nC --> D[Server queries external APIs]\\nD --> E[Tools response: suggested flights]\\nE --> F[Client invokes calendar check]\\nF --> G[Server returns availability]\\nG --> H[Booking tools, notifications]\\n\")), mdx(\"h2\", {\n    \"id\": \"what-does-a-clean-mcp-architecture-look-like\"\n  }, \"What does a Clean MCP Architecture look like?\"), mdx(\"p\", null, \"When it comes to MCP, there are three core primitives you must understand.\\nMisunderstanding the boundaries between these is the fastest way to turn your\\nproject into an unmaintainable tangle.\"), mdx(\"p\", null, \"To secure and architect for MCP, one must first understand its internal\\nmechanics. It is not a REST API. It is not a simple webhook. It is a stateful,\\nbidirectional session protocol built on top of JSON-RPC 2.0. This choice of\\nfoundation is critical: unlike stateless HTTP requests, an MCP session assumes a\\npersistent context where capabilities are negotiated, and state is maintained.\"), mdx(\"p\", null, \"The protocol abstracts all interactions into three distinct primitives.\\nUnderstanding the boundaries between these is essential for enforcing the Single\\nResponsibility Principle in server design.Resources are the passive read layer\\nof the protocol. They represent data that exists in the system\\u2014files, database\\nrows, log streams, or API responses.\"), mdx(\"h3\", {\n    \"id\": \"1-resources-the-read-layer\"\n  }, \"1. Resources (The Read Layer)\"), mdx(\"p\", null, \"These are passive data sources\\u2014files, logs, or database rows. They are addressed\\nvia standard URIs (e.g., \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"file:///logs/app.log\"), \" or \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"postgres://db/users/123\"), \").\\nUnlike tools, they are generally \\u201Csafe\\u201D but require careful handling of\\npermissions.\"), mdx(\"p\", null, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"Advanced Concepts:\")), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"Complex Resource Templates & Dynamic Discovery:\"), \" Support parameter\\ncompletion for dynamic URIs.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"Resource Change Subscriptions:\"), \" Instead of having the LLM poll for changes\\n(wasting tokens and increasing latency), let the server push updates to the\\nmodel via JSON-RPC. It keeps the \\u201Cview\\u201D synchronized efficiently.\")), mdx(\"h3\", {\n    \"id\": \"2-tools-the-action-layer\"\n  }, \"2. Tools (The Action Layer)\"), mdx(\"p\", null, \"These are executable functions. Unlike resources, tools have \", mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"side effects\"), \".\\nThey change the state of the world. This is where you must implement\\n\", mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"Human-in-the-Loop (HITL)\"), \" approvals. Never let an agent delete a production\\ndatabase row without a UI confirmation.\"), mdx(\"p\", null, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"TypeScript Server Definition Example:\")), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-typescript\"\n  }, \"import { createServer, Tool } from '@modelcontextprotocol/server';\\n\\nconst searchFlights: Tool = {\\n  name: 'searchFlights',\\n  description: 'Search for flights',\\n  inputSchema: {\\n    type: 'object',\\n    properties: {\\n      origin: { type: 'string' },\\n      destination: { type: 'string' },\\n      date: { type: 'string' },\\n    },\\n    required: ['origin', 'destination', 'date'],\\n  },\\n  execute: async ({ origin, destination, date }) => {\\n    // Call airline APIs, return the results\\n    return [{ type: 'text', text: 'Flight: NYC to Barcelona, June 15' }];\\n  },\\n};\\n\\nconst mcpServer = createServer({ tools: [searchFlights] });\\nmcpServer.listen();\\n\")), mdx(\"p\", null, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"Idiomatic Python Example:\")), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-python\"\n  }, \"from mcp_sdk.server import MCPServer, Tool\\n\\ndef search_flights_handler(origin, destination, date):\\n    # Connect to airline APIs, process the response\\n    return [{ 'type': 'text', 'text': f'Flight: {origin} to {destination}, {date}' }]\\n\\nserver = MCPServer(tools=[Tool('searchFlights', search_flights_handler)])\\nserver.run()\\n\")), mdx(\"h3\", {\n    \"id\": \"3-prompts-the-workflow-layer\"\n  }, \"3. Prompts (The Workflow Layer)\"), mdx(\"p\", null, \"Prompts are pre-defined templates that encapsulate \\u201Cexpert knowledge.\\u201D Instead\\nof forcing the user to type a perfect prompt, the server exposes a \\u201CDebug Error\\u201D\\nprompt that automatically packages the relevant logs and tools for the LLM.\"), mdx(\"h2\", {\n    \"id\": \"mcp-architecture-essentials\"\n  }, \"MCP Architecture Essentials\"), mdx(\"h3\", {\n    \"id\": \"security-first-the-lethal-trifecta\"\n  }, \"Security First: The \\u201CLethal Trifecta\\u201D\"), mdx(\"p\", null, \"The best present any software architect can do for himself is to start the\\ndesign from security first perspective. We are witnessing the emergence of the\\n\", mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"\\u201CLethal Trifecta\\u201D\"), \":\"), mdx(\"ol\", null, mdx(\"li\", {\n    parentName: \"ol\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"Autonomous Tool Use\"), \" (Execution)\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"Private Data Access\"), \" (Sensitive Info)\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"Probabilistic Decision Making\"), \" (The LLM)\")), mdx(\"p\", null, \"When these three combine, traditional firewalls fail. You are handing a\\nnon-deterministic engine direct access to your enterprise nervous system. Even\\nif your code is squeaky clean but you did not plan for Indirect Prompt\\nInjection, you may end up losing reputation or feel wrath of your client when\\ntheir agent executes a malicious instruction buried in a support ticket.\"), mdx(\"h3\", {\n    \"id\": \"security-boundaries--enforcement\"\n  }, \"Security Boundaries & Enforcement\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"p\", {\n    parentName: \"li\"\n  }, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"Roots:\"), \" Clients specify folders/files for server focus. The server \", mdx(\"em\", {\n    parentName: \"p\"\n  }, \"should\"), \"\\nrespect roots, and the OS/sandbox enforces them.\"), mdx(\"ul\", {\n    parentName: \"li\"\n  }, mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"p\", {\n    parentName: \"li\"\n  }, \"Example Root:\"), mdx(\"pre\", {\n    parentName: \"li\"\n  }, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-json\"\n  }, \"{\\n  \\\"uri\\\": \\\"file:///Users/agent/travel\\\",\\n  \\\"name\\\": \\\"Travel Planning Workspace\\\"\\n}\\n\")))))), mdx(\"h3\", {\n    \"id\": \"the-transport-layer-reality\"\n  }, \"The Transport Layer Reality\"), mdx(\"p\", null, \"Do not be fooled by the simplicity of local development.\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"Stdio (Standard Input/Output):\"), \" Great for local debugging, but a massive\\nblind spot. It creates a \\u201CConfused Deputy\\u201D where the server inherits the full\\npermissions of the local user.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"SSE (Server-Sent Events):\"), \" The mandatory standard for production. It allows\\nyou to run the MCP server as an isolated microservice (e.g., on Kubernetes),\\ndecoupled from the client, enabling proper network segmentation and logging.\")), mdx(\"h3\", {\n    \"id\": \"real-time-notification-patterns\"\n  }, \"Real-Time Notification Patterns\"), mdx(\"p\", null, \"Servers send notifications (list changes, resource updates) via JSON-RPC.\\nClients refresh tool/resource registries and notify models.\"), mdx(\"p\", null, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"Error Handling Example:\")), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-json\"\n  }, \"{\\n  \\\"jsonrpc\\\": \\\"2.0\\\",\\n  \\\"id\\\": 99,\\n  \\\"error\\\": {\\n    \\\"code\\\": -32602,\\n    \\\"message\\\": \\\"Invalid params\\\",\\n    \\\"data\\\": { \\\"missing\\\": \\\"destination\\\" }\\n  }\\n}\\n\")), mdx(\"h2\", {\n    \"id\": \"defense-in-depth-the-zero-trust-architecture\"\n  }, \"Defense in Depth: The Zero Trust Architecture\"), mdx(\"p\", null, \"To deploy MCP in an enterprise environment, we must abandon the assumption that\\n\\u201Clocal is safe\\u201D or \\u201Cinternal is trusted.\\u201D We require a Zero Trust architecture\\nspecifically designed for agentic workflows.\"), mdx(\"h3\", {\n    \"id\": \"the-gateway-pattern\"\n  }, \"The Gateway Pattern\"), mdx(\"p\", null, \"No Client (agent) should ever connect directly to a backend MCP Service. All\\ntraffic must be mediated by a Gateway that enforces essential controls:\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"Centralized Authentication:\"), \" The Gateway terminates OAuth 2.1 flows and\\nverifies identity. It ensures that the requesting user or agent is authorized\\nto speak to the downstream service.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"Protocol Inspection:\"), \" Serving as a Layer 7 firewall for JSON-RPC, the\\nGateway logs every method call, argument, and response \\u2014 providing a full\\naudit trail of \\u201Cwhat the agent did.\\u201D\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"Policy Enforcement:\"), \" Implements granular, role-based rules. Example:\\n\\u201CMarketing Agents can read customer data but cannot delete it.\\u201D These policies\\nlive in the Gateway, decoupling security from individual servers.\")), mdx(\"h3\", {\n    \"id\": \"identity-and-authentication-oauth-21--rfc-8707\"\n  }, \"Identity and Authentication: OAuth 2.1 + RFC 8707\"), mdx(\"p\", null, \"A simple API key is insufficient for MCP. Robust implementations must adopt\\nOAuth 2.1 with \", mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"RFC 8707 (Resource Indicators)\"), \" to prevent Token Replay\\nattacks within a service mesh.\"), mdx(\"p\", null, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"The Authentication Flow:\")), mdx(\"ol\", null, mdx(\"li\", {\n    parentName: \"ol\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"Discovery:\"), \" Client connects to the server\\u2019s public endpoint; receives a\\n\", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"401 Unauthorized\"), \" with authorization metadata.\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"Authorization:\"), \" User grants consent via the Authorization Server (e.g.,\\nOkta, Auth0).\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"Token Issuance:\"), \" Auth server issues a JWT with an \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"aud\"), \" (audience) claim\\nmatching the MCP server\\u2019s ID.\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"Access:\"), \" Client presents the token in the \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"Authorization: Bearer\"), \" header.\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"Validation:\"), \" The MCP server validates signature and audience \\u2014 rejecting\\ntokens issued for other servers.\")), mdx(\"p\", null, \"Tokens are scoped per resource. A credential valid for the Weather Server cannot\\naccess the Bank Server.\"), mdx(\"h3\", {\n    \"id\": \"human-in-the-loop-hitl-and-consent\"\n  }, \"Human-in-the-Loop (HITL) and Consent\"), mdx(\"p\", null, \"Security cannot be fully automated. When agents initiate sensitive actions\\n(payments, deletions, public posts), the protocol requires human confirmation.\"), mdx(\"p\", null, \"The Client must pause execution and request consent:\"), mdx(\"blockquote\", null, mdx(\"p\", {\n    parentName: \"blockquote\"\n  }, \"\\u201CThe agent wants to execute delete_database(id=prod-db). Do you approve?\\u201D\")), mdx(\"p\", null, \"This design transforms the agent from \", mdx(\"em\", {\n    parentName: \"p\"\n  }, \"autonomous\"), \" to \", mdx(\"em\", {\n    parentName: \"p\"\n  }, \"co-pilot\"), \" for high-risk\\noperations. Annotating tools as sensitive is the server\\u2019s duty; enforcing\\nconfirmation is the client\\u2019s. Backend RBAC remains the final safeguard if a\\nmalicious client bypasses HITL controls.\"), mdx(\"h3\", {\n    \"id\": \"network-isolation-and-binding\"\n  }, \"Network Isolation and Binding\"), mdx(\"p\", null, \"For local servers: \", mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"bind only to loopback interfaces\"), \" (\", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"127.0.0.1\"), \" or \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"::1\"), \").\\nNever use \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"0.0.0.0\"), \".\"), mdx(\"p\", null, \"For remote deployments: host MCP servers within a private subnet accessible only\\nvia the Gateway. Use \", mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"mutual TLS (mTLS)\"), \" between Gateway and servers to block\\nunauthorized lateral movement within clusters.\"), mdx(\"h2\", {\n    \"id\": \"enterprise-architecture-patterns-and-implementation\"\n  }, \"Enterprise Architecture: Patterns and Implementation\"), mdx(\"h3\", {\n    \"id\": \"the-monolith-anti-pattern\"\n  }, \"The Monolith Anti-Pattern\"), mdx(\"p\", null, \"A common early mistake: building a \\u201CCompany Unified Server\\u201D connecting Slack,\\nSQL, Jira, and more \\u2014 a single Python or Node.js process performing all roles.\"), mdx(\"p\", null, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"The Risks:\")), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"Security:\"), \" A vulnerability in one module exposes all credentials.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"Dependency Hell:\"), \" Conflicting SDKs balloon container complexity.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"Scalability:\"), \" Cannot scale wiki search independently from database queries.\")), mdx(\"h3\", {\n    \"id\": \"domain-driven-mesh\"\n  }, \"Domain-Driven Mesh\"), mdx(\"p\", null, \"The recommended pattern: deploy domain-focused, single-purpose MCP servers.\"), mdx(\"table\", null, mdx(\"thead\", {\n    parentName: \"table\"\n  }, mdx(\"tr\", {\n    parentName: \"thead\"\n  }, mdx(\"th\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Domain\"), mdx(\"th\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Server Name\"), mdx(\"th\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Responsibility\"), mdx(\"th\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Example Tools\"))), mdx(\"tbody\", {\n    parentName: \"table\"\n  }, mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Data\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, mdx(\"inlineCode\", {\n    parentName: \"td\"\n  }, \"mcp-server-sales-db\")), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Read-only access to sales data\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, mdx(\"inlineCode\", {\n    parentName: \"td\"\n  }, \"query_sales_by_region\"), \", \", mdx(\"inlineCode\", {\n    parentName: \"td\"\n  }, \"get_customer_ltv\"))), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Knowledge\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, mdx(\"inlineCode\", {\n    parentName: \"td\"\n  }, \"mcp-server-confluence\")), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Semantic search of internal docs\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, mdx(\"inlineCode\", {\n    parentName: \"td\"\n  }, \"search_wiki\"), \", \", mdx(\"inlineCode\", {\n    parentName: \"td\"\n  }, \"get_page_content\"))), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"DevOps\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, mdx(\"inlineCode\", {\n    parentName: \"td\"\n  }, \"mcp-server-k8s-ops\")), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Cluster maintenance\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, mdx(\"inlineCode\", {\n    parentName: \"td\"\n  }, \"list_pods\"), \", \", mdx(\"inlineCode\", {\n    parentName: \"td\"\n  }, \"restart_deployment\"), \", \", mdx(\"inlineCode\", {\n    parentName: \"td\"\n  }, \"get_logs\"))), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Identity\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, mdx(\"inlineCode\", {\n    parentName: \"td\"\n  }, \"mcp-server-directory\")), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"User lookup and org chart\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, mdx(\"inlineCode\", {\n    parentName: \"td\"\n  }, \"find_user_email\"), \", \", mdx(\"inlineCode\", {\n    parentName: \"td\"\n  }, \"get_manager\"))))), mdx(\"p\", null, \"The Gateway aggregates these services, while the LLM orchestrates logic across\\nthem. Access is tightly scoped \\u2014 e.g., HR agents can query directory data but\\nnot deployment logs.\"), mdx(\"h3\", {\n    \"id\": \"clean-architecture-for-server-code\"\n  }, \"Clean Architecture for Server Code\"), mdx(\"p\", null, \"MCP servers are production-grade applications, not scripts.\", mdx(\"br\", {\n    parentName: \"p\"\n  }), \"\\n\", \"A Python implementation might follow:\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-bash\"\n  }, \"project_root/\\n\\u251C\\u2500\\u2500 src/\\n\\u2502   \\u251C\\u2500\\u2500 infrastructure/   # Frameworks & Drivers\\n\\u2502   \\u251C\\u2500\\u2500 domain/           # Enterprise Logic (models, exceptions)\\n\\u2502   \\u251C\\u2500\\u2500 services/         # Use Cases (e.g., weather_service.py)\\n\\u2502   \\u251C\\u2500\\u2500 mcp_layer/        # MCP controller: tools, resources, server\\n\\u2502   \\u2514\\u2500\\u2500 main.py           # Bootstrap\\n\\u251C\\u2500\\u2500 tests/\\n\\u2502   \\u251C\\u2500\\u2500 unit/\\n\\u2502   \\u251C\\u2500\\u2500 integration/\\n\\u2502   \\u2514\\u2500\\u2500 contract/\\n\\u2514\\u2500\\u2500 Dockerfile\\n\")), mdx(\"p\", null, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"Key Practices:\")), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"Separation of Concerns:\"), \" Business logic decoupled from MCP libraries.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"Dependency Injection:\"), \" Enables testable tool layers.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"Multi-Level Validation:\"), \" JSON schema + domain rule validation (e.g., \\u201CCity\\nname cannot contain numbers\\u201D).\")), mdx(\"h3\", {\n    \"id\": \"platform-specific-integrations\"\n  }, \"Platform-Specific Integrations\"), mdx(\"p\", null, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"AWS Bedrock:\"), mdx(\"br\", {\n    parentName: \"p\"\n  }), \"\\n\", \"Use Bedrock\\u2019s \", mdx(\"em\", {\n    parentName: \"p\"\n  }, \"AgentCore\"), \" runtime. Configure Auth0 for dynamic client\\nregistration; ensure JWT audience parameter alignment. Deploy via the\\n\", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"agentcore launch\"), \" workflow (ECR + runtime registration).\"), mdx(\"p\", null, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"Google ADK:\"), mdx(\"br\", {\n    parentName: \"p\"\n  }), \"\\n\", \"Define \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"LlmAgent\"), \" and \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"McpToolset\"), \" in Python. When bridging Node.js tools via\\n\", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"StdioServerParameters\"), \", use \", mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"absolute paths\"), \" for stability within ADK\\ncontexts.\"), mdx(\"h2\", {\n    \"id\": \"the-context-economy-optimizing-token-usage\"\n  }, \"The Context Economy: Optimizing Token Usage\"), mdx(\"p\", null, \"Context is currency in MCP design. Bloated prompts waste tokens and degrade\\nperformance.\"), mdx(\"h3\", {\n    \"id\": \"the-bloat-problem\"\n  }, \"The Bloat Problem\"), mdx(\"p\", null, \"Wrapping broad APIs (like AWS CLI) floods context with needless schemas.\", mdx(\"br\", {\n    parentName: \"p\"\n  }), \"\\n\", mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"Cost:\"), \" Increased token usage.\", mdx(\"br\", {\n    parentName: \"p\"\n  }), \"\\n\", mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"Performance:\"), \" Reasoning degradation (\\u201CThe Paradox of Choice\\u201D).\"), mdx(\"h3\", {\n    \"id\": \"progressive-disclosure\"\n  }, \"Progressive Disclosure\"), mdx(\"p\", null, \"Expose a single tool like \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"list_available_tools(category)\"), \" to reveal\\ndomain-specific tools dynamically.\", mdx(\"br\", {\n    parentName: \"p\"\n  }), \"\\n\", \"This minimizes irrelevant context and optimizes focus.\"), mdx(\"h3\", {\n    \"id\": \"code-mode-execute-dont-transmit\"\n  }, \"Code Mode: Execute, Don\\u2019t Transmit\"), mdx(\"p\", null, \"Instead of returning bulky data via tool calls, enable safe code execution:\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-bash\"\n  }, \"LLM writes: \\u201CFilter rows where column A > 10.\\u201D\\nServer executes locally and returns \\\"42\\\" instead of 10MB of CSV.\\n\")), mdx(\"p\", null, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"Benefit:\"), \" Dramatic token reduction.\", mdx(\"br\", {\n    parentName: \"p\"\n  }), \"\\n\", mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"Risk:\"), \" Must use hardened sandboxes (e.g., gVisor, Firecracker).\"), mdx(\"h3\", {\n    \"id\": \"the-art-of-tool-descriptions\"\n  }, \"The Art of Tool Descriptions\"), mdx(\"p\", null, \"Tool descriptions are prompts in disguise. Write prescriptive guidance (e.g.,\\n\\u201CUse before refunding to verify customer eligibility.\\u201D)\", mdx(\"br\", {\n    parentName: \"p\"\n  }), \"\\n\", \"Avoid implementation details and audit descriptions for prompt injection risks.\"), mdx(\"h2\", {\n    \"id\": \"operational-excellence\"\n  }, \"Operational Excellence\"), mdx(\"h3\", {\n    \"id\": \"configuration-management\"\n  }, \"Configuration Management\"), mdx(\"p\", null, \"Prevent drift via schema-validation frameworks (Pydantic, Zod).\", mdx(\"br\", {\n    parentName: \"p\"\n  }), \"\\n\", \"Crash fast on missing or malformed configs. Inject secrets at runtime through\\nVaults, not Docker images.\"), mdx(\"h3\", {\n    \"id\": \"logging-and-tracing\"\n  }, \"Logging and Tracing\"), mdx(\"p\", null, \"Each request must carry a \", mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"trace_id\"), \" propagated through all logs.\", mdx(\"br\", {\n    parentName: \"p\"\n  }), \"\\n\", \"Use fully structured JSON and redact sensitive data:\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-json\"\n  }, \"{\\n  \\\"event\\\": \\\"tool_execution_start\\\",\\n  \\\"tool_name\\\": \\\"query_db\\\",\\n  \\\"trace_id\\\": \\\"a1b2-c3d4\\\",\\n  \\\"user_id\\\": \\\"user_123\\\"\\n}\\n\")), mdx(\"h3\", {\n    \"id\": \"chaos-engineering-for-agents\"\n  }, \"Chaos Engineering for Agents\"), mdx(\"p\", null, \"Test resilience under failure:\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Latency injection (tool stalls).\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Malformed responses.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Context flooding (>5MB).\")), mdx(\"h3\", {\n    \"id\": \"deployment-checklist\"\n  }, \"Deployment Checklist\"), mdx(\"table\", null, mdx(\"thead\", {\n    parentName: \"table\"\n  }, mdx(\"tr\", {\n    parentName: \"thead\"\n  }, mdx(\"th\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Category\"), mdx(\"th\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Requirement\"))), mdx(\"tbody\", {\n    parentName: \"table\"\n  }, mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Transport\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Use SSE (HTTP) only; no Stdio tunnels.\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Network\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Bind localhost for dev; restrict ingress in containers.\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Identity/Auth\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"OAuth 2.1 with audience validation.\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Security\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Least privilege IAM; enforce input validation.\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Operations\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Enable per-user/tool rate limits.\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Compliance\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"HITL required for destructive tools.\")))), mdx(\"h2\", {\n    \"id\": \"conclusion-the-future-of-agentic-identity\"\n  }, \"Conclusion: The Future of Agentic Identity\"), mdx(\"p\", null, \"The Model Context Protocol is more than a technical standard \\u2014 it\\u2019s the\\ninfrastructure for a new digital workforce.\", mdx(\"br\", {\n    parentName: \"p\"\n  }), \"\\n\", \"Today, agents act under \", mdx(\"em\", {\n    parentName: \"p\"\n  }, \"User Identity\"), \". Tomorrow, they will hold \", mdx(\"em\", {\n    parentName: \"p\"\n  }, \"Service\\nIdentity\"), \": distinct permissions, audit trails, and governance via an \", mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"Agent\\nControl Plane\"), \".\"), mdx(\"blockquote\", null, mdx(\"p\", {\n    parentName: \"blockquote\"\n  }, \"Until then, the lesson remains: Build with Zero Trust.\", mdx(\"br\", {\n    parentName: \"p\"\n  }), \"\\n\", \"Validate every input.\", mdx(\"br\", {\n    parentName: \"p\"\n  }), \"\\n\", \"Assume every agent is compromised.\", mdx(\"br\", {\n    parentName: \"p\"\n  }), \"\\n\", \"Never trust a tool description blindly. MCP is high-voltage infrastructure \\u2014\\npowerful enough to energize your enterprise, but dangerous enough to burn it\\ndown without insulation.\")));\n}\n;\nMDXContent.isMDXComponent = true;","tech":["AI","TS"],"category":"Post","appDescription":null,"hero":{"full":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAACXBIWXMAAAsSAAALEgHS3X78AAAE20lEQVQ4yz1U7VPSWRT+/RNbn2qmZlxdE/MlzUQhfFcSUIFsUTFfQAQCBUF5MZBMRYQKNcV8SVATlczUzZna2XZrZ7YPzbazs//Os+fepj6c+d177jnnPvc5z/kJ7bfbMWA0wul0YnhoCN16Perr61FdXQ2NWoMh8nV2dsJiNmNnexvj/nFE56J49eoIy0vLMPQbUFZWBkmlBDdu3ICg1Wh4sEathlKphL6rC3V1dWhoaEBtbS0aGxvR29ODnrs9mHzwgAr6eczx8TE+fvgIRbMCWVlZEIlEKCwshCAuL+cLcbkYVTIZGOK21lYoFQp+QXd3NyU1wzE8jJmZGXjGPLBaLDg5PsH+/j6Kiopw+dIlZGdn49y5HyCoCVllRQWuX7+OOkKkoiK2ezasJFbQSCj7ensxZLfD6XAiFoshMjuL+JMn2N3dxdmbM3g8Hpw/fw6XqOjFixchlBNCDT27ob4B6jY16um5jL9gIIgOnQ6DJhNH2NXZhfl4HHGyg/0D7Ozs4P3795xLhvLChQu4cuXKV4Q5OTlQqVQYdY+ira0NtTU1kEgkkBEFLeRXKVXQU7Nmw2FMT01hcWEB796+w8nJCba3tvFs5Rk1sxsFBQUQWJJYLIZcLqcnNuLatWtgqG9Kb/LnmwfN6O/rw4hzBInlZSQ3N7H09Cli0SiWlpawML+AMF20troGna4DQnFxMeeO3TwbnsUtKlxGfMpuyrhcZqanMRGcwONHjylmmqOLzs2RXPrh8/ng8/pQQxTZiedWaqZQQQ1hiFg3pym5qakJUokUUqkUrS0tMBqMcI24kMlksLi4SEhW4ff5eeO8Hi+MpOEuktHY6Bg6Oghhbm4u111VVRVKS0tRXFTMNdV++zYPZAlm0mkikcDZ2RlOT0+5ZpnA99J7pGELpyUSiUDeJIfQ29NLRYqg1Wq5gxXLy8vjNDC5BO4HuDF5fPn7C3U/wGOjxGEoFOL8sulyDDvQSxITRt1uGptKnszIZaJmB2y8GD9MHsFgkBdlHWXkz8fn8fnzZy5wBsg0YKIpmsTW1hYERniQgqOROepiAl6aBLNpkIv2d9LZXjqNw5eHWF9bw9TkQ3z66xM3ds547O/rRx8VHaSibpcbglwhRyQ2h8zRS2wkn9OXkjc3kD7Yw+tfTrD8LIG9zD7++PMDTs/e4O1vv+Kf//5FcjuFIacD48H7sNis8Afu034YQqhEj0i5AS+0E1hXjGGp3oF93RTSdx5gQ+nFusqLnfYQ0rqHyOjD2GjxIdE0gpVbbsRrbFilnGXaMz/zCbtXh/G6dgIZmR/75WM4qPTiRYkT6TI30qUupHKsSGabsfmjGc+zBpHKtmDrJyu37dx7/JytUzlf/UKqwI4j5SReqx5iT+rFsXoGR820b51CpmYcqat2JEX3sEVfZql823dL5lm/r7+dCav5FqznWbAhsmCzwMbX3/Yb+VY8L7Rhp5SedNWKdbJk8RD3bRbRBSUOvl6nGqsiM18LNoMZT8IxhDwBdGl10CrVMHUbEAnNYNzlhaJWjsCoH/HwI74ftbtg1PfBbrRy02s7UFMhg6REDM0tGj2L1QIH/f7v0l+5oakRSvq7aEi4LtLnnZ/vQJQvQr/RgJeHh4jGohgwDaBZ0QwVjSWLr66pRqVUwnOY73/3oJEB/hhQogAAAABJRU5ErkJggg==","aspectRatio":1,"src":"/static/2b5897d3dd0bc9b258bd2274fa0ade58/a1946/mcp-cover.png","srcSet":"/static/2b5897d3dd0bc9b258bd2274fa0ade58/5b37e/mcp-cover.png 236w,\n/static/2b5897d3dd0bc9b258bd2274fa0ade58/49058/mcp-cover.png 472w,\n/static/2b5897d3dd0bc9b258bd2274fa0ade58/a1946/mcp-cover.png 944w,\n/static/2b5897d3dd0bc9b258bd2274fa0ade58/6050d/mcp-cover.png 1200w","srcWebp":"/static/2b5897d3dd0bc9b258bd2274fa0ade58/99fbb/mcp-cover.webp","srcSetWebp":"/static/2b5897d3dd0bc9b258bd2274fa0ade58/77392/mcp-cover.webp 236w,\n/static/2b5897d3dd0bc9b258bd2274fa0ade58/1f177/mcp-cover.webp 472w,\n/static/2b5897d3dd0bc9b258bd2274fa0ade58/99fbb/mcp-cover.webp 944w,\n/static/2b5897d3dd0bc9b258bd2274fa0ade58/9000d/mcp-cover.webp 1200w","sizes":"(max-width: 944px) 100vw, 944px","tracedSVG":"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='400'%20height='400'%20viewBox='0%200%20400%20400'%20preserveAspectRatio='none'%3e%3cpath%20d='M0%205c0%204%200%205%202%204l1-2C2%205%203%206%207%208s5%204%201%202-6-1-4%202h2l3%202%203%202H8l1%201-4-2-4-3c-2%200-1%203%200%203v11L0%2041c0%2014%200%2014%203%2017%202%202%202%204-2%204l-1%204c0%202%200%203%201%202v2L0%2087v15h10l2%201-1%201c-1-1-1%200-1%201H4c-3%200-4%200-4%203%200%202%201%203%202%202%201%200%203%203%201%204v2l-1%201c-2%200-3%2021-1%2023v2l-1%2035v34l4%201c5%202%206%204%205%2010%200%205%201%206%2010%207%207%200%205%202-3%202-3%200-4%200-3%201l-1%201c-2-1-3%201-1%203s4%201%203%200c0-2%201-2%203-1l2%203v1l1%202c0%202%200%202-1%201h-8c-2-1-3-1-3-5l1-7c1-3-2-5-6-4s-4%208-1%2010c2%202%202%206-1%205-2-1-1%206%201%208s2%205-1%204c-1-1-2%202%200%204v25a595%20595%200%20000%2080c-1%202-2%2026%200%2026l1%203-1%202-1%202c0%202%200%202%202%202l-1%201c-1%201%200%202%206%202%207%200%208%200%2010-2l3-2v2h2c2-1%203-2%202-3s1-5%202-5v3l-1%202c1%201%202%201%204-1l3-1-1%202-2%202c0%202%204%203%2016%203h11l2-5%201-7c-1-2%200-2%204-1%201%201%201%201-1%202-1%200-2%201-2%203a264%20264%200%2001-1%206h1c-1%202%200%202%204%202%203%200%204%200%204-2s3-2%204%200c0%202%208%203%208%201h1c1%201%202%201%202-1l2-2c2%201%204%200%203-1v-1l5%203c4%202%204%202%207%201%205-1%206-1%203%201-3%201-3%201%205%201s9%200%2010-2%201-2%201%200%201%202%207%202l7-1h1a627%20627%200%200067%200c-6%200-6%200-8-3l-3-4%202-7c2-9%202-8%200-12-2-3-3-4-7-5l-4-3h-1l-2-2-1-2a109%20109%200%200132%201c2%200%204%200%203%201-1%200-1%201%201%202v3l-1-1-1-1c-1%200-2%201-2%203s0%202%201%201l2-1c1%201%200%203-1%202-2%200-1%202%200%203%202%201%2011%202%2014%200%203-1%203-1%203%201l1%202%201-1h1c1%200%204-2%203-3l1-1c2%201%202%204%200%203v3h-1c-2%200-2%200-1%201l3%202h1l-1%201v8c-1%202-1%202%202%202%202%201%203%200%203-1l2-2v3c-1%201%200%202%202%202%202%202%203%203%202%204a379%20379%200%200076%201l11%201%2010-1h1l11%201c8%200%2010%200%209-1v-1c1%201%202%200%201-1%200-2%201-1%203%201%201%202%2018%203%2021%201h1l4%201%204-1c-1-1-1-1%200%200%201%200%202-1%202-4%200-2%200-3-1-2-1%202-4%201-3-2l2-1%201-2V259l-2%201c-2%200-2%200%200-1%203-2%202-5-1-4l-3-1%202-1h2c1-1%201-1-1-3s-3-2-4-1c-2%202-2%200%200-2l1-2%201-1%201-2c0-3%200-3-3-2l-3%202v1l-1-1-2-1h-5l-2-1c-2%200-2%204-1%204l1%201-2%201-3-1%201-1v-1c-1-1-1-1%201-3s2-3%200-4v-3c-2%201-2%201-2-1%201-1-6-4-9-4l-2%205c-1%204-1%204-6%204l-4-2-1-1c-3-1%201-4%204-3l3-1%201-1c3%200%205-3%203-4v-1c3%201%202%200%200-2-4-5-4-14%200-11l1-2h1c1%202%202%202%203%201l-1-3c-2-2-4-7-3-9s-2-4-6-5c-6-2-10-6-10-10%201-3%202-4%203-2v1l-1%203%202%202c2%200%202%200%202-2-1-2%200-2%203-2s3%200%202-1c-1-2%200-3%202-1h1l-2-2c-8-3-8-3-2-3%205%200%206%200%207-3%203-5%203-5%203-1-1%204-1%204%201%203l2-3v-1l1-6%201-5%201%202c0%202%200%202%202%200v-8l-1-3-2-1h-2l-3-1c-2%200-4-3-2-3l1-3%203-7%201%201h1l1-2%201%201c0%201%201%202%202%201v-1l-1-2%202%201h2c2-2%202-4%200-5v-1c0-2-3-3-4-2l-1%201-2%201c-1%201-1%201%201%201h2c-1%201-1%201%200%200l2%201h-1l-2%201c0%202-1%202-2%200-2-2-2-2-3-1s-1%201-1-1c-1-2-3-3-3-1l-2%201c-1-1-2%200-3%201l-3%202%201-2%202-1-2-2c-3-2-4-2-7%201l-4%201c-3%201-5%205-3%206v1c-2%200-2%200-1%201l1%202c1%209%202%2011%206%2011%203%200%203%201%201%203-2%201-7-3-7-8-1-5-3-6-4-3l-2%202-1%202-3%204c-1%201-1%201-1-1v-4c-1%200-2%209-1%2010l-1%201c-1-1-1-1-1%202l3%203%201%203-1-1-3-1-3-2c-2-3-2-3-3%201v1l2%201v2h-4l-1%201-2%201-1%201c0-1%200-2-1-1l-1-1%202-1h1c1-2%200-2-1-2-3%200-5%202-4%204h-1c-1-1-1%200-1%202s0%202-1-1c-2-5-4-7-7-6-2%200-3%203-1%205v4c0%202%201%202%206%206l-1%202-2%202-1%203c0%202%200%202%202%201l2-1%202-1h1l1%202%203-4%201-2%202-2%201-1%201%201c0%201%201%202%202%201%202%200%203%202%201%202v3c2%204%202%2010%200%2013l-3%201-1%201c1%201-1%205-2%205l-1-1-1-1-2%201-1%201v-1l-1-2-1%201c0%201-1%202-3%202s-3%200-4%203l-2%203v1c1%200%201%201-1%202-1%201-2%202-1%203%200%202%200%203-2%204l-2%203h4c1-1%201-1%201%201l-1%202-1%205v5l-3%2015%201%201h-1c-2%200-2%200-2%202l-2%206v3l1%202c-1%201%200%204%201%204l1-1%201-1v2l1%201h1l-1%201v1c1%201%202%202%201%203s-1%201-2-1l-1-1-1%201c-1-1-2%200-2%201l1%201v2h-1c-1-1-1-1-1%201l-1%201h-2l-1%204c-1%202-2%202-11%202-10%200-10%200-9-2%201-3%200-4-1-2-2%203-3%202-2%200%200-2%201-3%202-2l1-1c1-1%200-1-2-1l-3%201-1%201-1-1-1-1c-2%200-4%205-3%206%204%202-5%202-81%202l-85-1c-7-6-16-7-18-2h-2l-3%201c-3%202-3%202-4%200l-4-1c-2%201-2%201-1%202l-14%201c-12%200-15%200-14-1%202-2%202-5%200-6-2-2-2-2-1-4v-3l-1-2h-1c-1%201-1%201-3-1s-7-3-5-1l-1%201-1-3c0-2-1-2-3-2-1%200-2%200-1-1%201-3-4-7-6-7-2%201-3%200-3-2%200-3%201-3%203-2l3-1v-3l-2-1h2v-1l1-2%201%201c0%202%2020%200%2027-1%208-3%208-3%203-7-4-3-4-4%200-2%206%203%2011%200%2011-5l1-4c1-1%200-2-3-5-4-3-5-6-3-6l1%201%202%203%202%201h1c1-1%201-1%201%201l2%202%201%201%202%201%201-2h2l1%203%202%202%204%201%206%201%206%202c1%201%205%202%205%200l2-1%202-1c2-2%203-3%203%200h6l9-2-17%205-5%201v2l-1%201v-1l-2-1-4-1c-2%200-2%200-3%202%200%202-2%203-2%200-2-3-3%200-2%204%201%203%201%203%202%201l2-1v1c-1%202-1%206%201%206v6c0%201-2%200-4-3-4-3-6-3-6%200l-5%201-1%202h-7l-1-1-1-2c-1%200-1%204%201%205l3%201c2-1%204%201%204%203-1%202%200%204%203%204l3%202c0%202%202%203%203%201l3-1c2%200%203%200%202%203%200%203%202%202%204-1%202-5%201-7-4-8l-3%201v3c-2%202-5%200-6-4l-1-1h-1v-2h4l3%202h4l2-1h1c2%203%204%202%203-1%200-2%200-3%202-4h2l-1%201v2h1l3-4%201%202s1%202%203%202l2%203c-1%201%203%203%206%202l1%201c-1%202%201%203%204%203v-1l-1-2%203%202h2c0-2%203-1%204%202%201%202%203%203%203%201l2-2c3-1%204-10%201-11v-2c3%200%202-6%200-8l-3-3-1-1c-2%201-4-1-4-3l-2-3c-1-2-1-2%201-3%201-2%204-3%204-1l-1%201v1h2l2-1-1%202c-1%201-1%201%201%201l3-3c1-2%201-2%202-1%202%202%203%203%202%201l1-2%201%201c1%202%206%201%208-1l2-1v4h4l-1-1-1-1v-7l1%202v2c2%200%202%201%202%207%200%203%201%204%203%204l2%202%201%201%201-2%201-4c1-1%202%200%201%201-1%203%202%203%205%201l3-3%201-1-1-2-1-2c1-3-1-7-2-5h-2c-1-1-1-1%201-4%202-4%203-8%202-10s0-7%201-8l2-2%201-4%206-2c4-2%205-2%204%200l-1%201c-2%200-3%205-2%208%201%202-1%207-2%205-1%200-2%205-1%207%200%202%201%202%206%202l3%201h3l1-3c-1-1%200-2%201-4l1-4%202-2%203-2c0-2%205-4%207-3v2l1%202c2%200%202%201%201%203l-1%204c1%202%201%203-1%206-2%202-2%202-3%201%200-2-2-1-1%201h-1l-5-1c-4%200-4%200-3%202%201%201%201%201-1%201s-2%202-1%206l1%201c0-2%200-2%202%200s2%202%201%203l2%201h5c1%201%202%203%201%204-1%202%206%201%209-1%203-4%203-9%200-8-2%200-2%200-1-1l-1-2v-4h-1l-1%201-1-1%202-2v-1l3-7%202%201c1%202%202%201%202-4%202-12%202-20%201-20l-1-1-1-1c-2%200-3-1-1-3s-1-5-5-5c-8-2-22-2-24-1-1%201-4%201-4-1%200-1-3-2-11-2-15-1-21-2-21-3l13%201h21l1-1c1%201%202-2%202-6s-2-6-4-4l-7%201c-7%200-7-3%200-3l4-2%201-1c3%200%202-2%200-3-2-2-2-2-1-3v-2h-4l1-1-1-1-3-2c-1-1-7%201-8%202l-7%203%2013-8%207%201%207%201%203%201%203%202c3%201%204%201%205-1s4%200%203%202l6%203c7%201%207%201%206-1h1c2%202%203%202%202%200h1c1%201%202%201%204-1v-2c-2%200-1-2%200-2%203%201%204-2%203-8-1-13-1-18%201-16l1%202v4l1%203%201%201-1%201-1%201%201%201%202%201%203%201c2%201%202%201%202-1%200-1%200-2-1-1l-1-1%203-1c2%200%202%200%202-2l-1-3h-2c0-1-1-1-1%201-1%202-1%202-1%200%200-1-1-2-2-1-3%200-2-1%201-3%203-3%204-4%202-4l-2-1%202-2c2%200%203-4%201-9s-2-7-1-6l1%202%202%203c1%201%202%202%201%204%200%202%200%202%201%201h2l-1%203c-2%201-3%206-1%206l1%202h1l2-1-2%203c-2%202-2%208%201%208h2c1%200%204-9%203-11l-2-3v-3l-2-7v-4l-1-4-1-1c0-2-5-2-7%200l-3%201%201-3c2%200%202-1%201-1l-1-1c0-2-1-5-4-8l-1-3%204%203%203%204v-6l1-7v-8l1-2c-1-1-7%200-8%201-2%202-5%203-5%202l2-2c2-1%202-1-1-1-5%200-7%201-6%202l-1%201v1h-3l-1-1h-3l-1%201h-2c0-2-1-2-2-2-2%201-6-1-6-2%200-3%204-4%207-2h4c2-3%203-2%202%201%200%204%200%204%204%201%201-1%203-2%204-1v-1h2c2%200%202%200%201-1v-2c-2%200-2%200-1-1l4-1c3%200%208-2%209-6l1-2c2%200-3-5-5-5s-2-1-2-2l-2-2c-1-1-2-2-1-3%201-2%205%200%205%202l2%204c2%201%202%201%202-3l-2-5-1-4c1-1%201-1%202%201l1-10V12l-5-2c-5-2-6-2-7%200-1%201-1%201-2-1l-4-3c-2-1-3-2-2-3%200-2-2-3-5-3-2%201-2%201%200%202l3%202h-3l-3-3c0-2-15-1-15%201v2l3%206-3-2c-2-3-5-4-5-2l2%202c3%202%202%203-1%201l-3-2-4-1h-4l-1-1V3c0-3%200-3-7-3l-8%201h-1c-1-2-55-1-55%201l-1%201-1-1c1-1%200-2-1-2v1l-1%201-1-1a109%20109%200%2000-35%201l1-1c1-1-1-1-5-1-7%200-7%201-3%204s4%205%200%205v2c2%200%202%201%201%201s-1%201%201%202v2l-1%201h4v1h-2v4c2%202%203%204%201%204-1%201-5-8-5-11s-1-2-4%204l-5%206c-2%200-1%202%201%204s6%203%206%201l3%201%202%202h-6c-5-1-5-1-4%201%200%202%200%202-1%201l-2-4-2-1v-3c-1%201-3%200-5-1-3-1-3-1-3%201%200%203%202%204%205%204%204%200%204%201%203%204%200%205-1%205-1%201l-1-3-1%201h-2c-2-1-5%200-11%202-2%201-4%202-5%201l1-3%201%201%205-1c7-2%207-2%204-7l-3-4-1-1v-2c1-1%202%200%203%201h2l4%204%204%202-5-12c-2-2-2-2%200-4%201-2%201-2%202%200l4%202%203%201h-3c-3%200-4%200-1%204%201%201%202%202%203%201l2%201h1l1-3%201-3c1%200%201-1-1-1l-3-1h3c3%200%203%200%202-2-1-1-1-1%201-1%202%201%203%200%200-2l-1-5c0-2-1-2-3-2-3%200-6%203-5%205l-2%202-1-1c0-3-5-5-15-6H0v5m200-3l2%203%2015%205%201-5c0-5-2-7-5-4h-2l-6-1c-6%200-6%200-5%202m52-1l-1%203c-2%201-2%203%200%202%202%200%201%201-1%205-2%203-4%204-2%200%201-2%200-4-1-4l-5%2012%201%201-1%203c-2%205-2%209%200%2012l2%203-1-3%201-2c1%201%203-4%202-7l1-2%202-1%201-2%201-1-1-1c-1%201-4-1-3-1%202-2%206-2%206%200l1%201h3l2%201-2%202-2-1-3%202c-2%204-2%204-1%206%202%202%202%207-1%208v6c-1%202-1%203-1%201s-2-4-4-3l1%203%201%203%201%203%202%205%204%206c3%202%203%202%201%204v2l1%202%202%207V62c2-1%202-8%200-9v-2c1%200%200-2-3-4-3-4-4-7-1-3h2l2-1v3l2%204c3%202%203%203%205%201h3l-2%202c-2%200-2%200%200%202%201%201%202%202%203%201%202%200%202%200%201%201s-1%202%201%204c2%203%201%204-2%200-2-2-2-2-4-1v2l2%201h-5c-2%200-2%201-1%202v1l-1%204c0%204%200%205%202%204l-1%202c-2%202-1%204%202%203l2%201h2l1-2%201-1%201-1%203-4c2-2%202-3%201-4v-3c0-2%202-3%202-1l1%201V54l1-3%202-8%201-3%201-2-1-2-1-1h1c2%200%201-3-1-7-1-2-2-3-3-2l-1-1%201-1%201-1-1-1c-2%201-3-1-2-2%202-3%200-5-2-4-3%201-4%200-2-1%203-1%201-4-2-4-2%200-2%200-1%203%200%203%200%203-2-1l-3-4c-2%200-2-6-1-7V1c-1-2-3-1-6%201-2%202-3%201-1-1%201-1%201-1-1-1s-3%200-2%201m77%206a311%20311%200%2000-3%208c0-7-1-5-2%203l-2-1-1-3v2a115%20115%200%20010%2011l2-1%202-3c1-4%201-5%201-2%200%202%200%202%202%201h1l-1%202-2%203-1%201-1%203-1%205c-1%202-3%2010-3%2016v11c1%201%201%201%202-1%200-2%201-2%205%202%205%204%205%205%206%2011v6c-1%201%203%2010%205%2012%202%200%202%201%202%203l2-2%201-2-1%203c0%202%200%203%201%202%202%200%202%200%201%201l2%203%203%205c2%204%203%204%204-3l1-5-1%206v7h7l6%201c3%201%204%200%205-2l4-3c2%200%203%202%201%207-1%204%201%207%205%207%207%202%208%202%207%204l1%204c3%202%202%205-1%207s-4%206-1%206v5c-1%203-1%203-3%201h-1l1%202%201%203v3c-2%201-2%202-2%204%201%201%200%202-2%203l-2%202-2%202c-3%203-3%205%200%205h2l2%201c2%200%202%200%200-2v-2c2%201%204%200%206-1l3-2%201%203%202%204c1%201%201%201-1%202-2%200-2%200%200%201h-1l-3%201c1%201%200%201-2%201-3%200-7%202-5%202l-2%201h-3c0-2-2-1-2%201h2c-1%202%201%205%203%204v1l1%202%202-1%201-2v1l2%201c1-1%202-1%202%201v11l-5-3c-8-3-9-4-8-5%202-1-1-8-3-9-2%200-4%203-5%207v2c2%200%202%200%201%205v6l3%206c2%202%208%208%2012%2010%202%201%205%200%205-2l2%201c1%201%202%202%203%201l5-2c2%200%203-1%203-6%200-4%200-4-2-2l-2%205c-1%203-2%204-5%201-2-2-2-5%201-6l2-2v-4c1-3%201-3%201-1v5c0%202%200%202%202-1l3-4v-70a4447%204447%200%20010-102V0h-10l-11%201h-1l-4-1-3%201-2%201-2-1-2-1c-2%200-3%201-3%202l-2%202V2c1-2%201-2-9-2l-10%201h-1l-5-1h-5l-1%207M53%207c1%202%200%202-6%203-2%201-2%201%201%201s7%203%207%206l2%201c1-1%203%200%205%201h2l2%202c1%202%201%202%203%201%201-2%200-4-2-4-1%201-2%200-2-1-1-2%200-4%202-4l1-1c0-1%2020-1%2024%201v-1c-1-1-4-2-12-2-9%200-11%200-12-2-2-2-2-2-4-1h-9l-1-1-1%201m166%209l-1%2017c0%2014%201%2015%203%2015l1%201c0%202%204%205%204%203v1c0%202%202%202%203-1%202-3%201-6%200-3-2%202-2%202-2%200-1-2%201-4%203-3l1%205c0%204%200%204%202%202%201-1%202-2%203-1v-1c-2-1-1-2%201-2%201%201%202%200%203-3l2-5-1-1c-1%201-1%201-1-1%201-2-2-8-3-6v2c1%200%201%201-1%202v2l1%202c-1%202-3%203-4%202h-1c0%201-1%202-2%201v-5c1-11%201-14-2-17l-3-2v2l-1%203-1-4c0-2%200-4-2-5l-2-2v2m-90%2045l-1%201-4%203-4%203-1%208c0%205%200%205-2%204-1-1-1-1-1%201l2%203c1%203%202%202%201-1%200-2%200-2%201%200l4%202c3%201%203%201%202%203l1%202h4l8%203c4%200%204%200%204-2l-3-1c-3%200-4-1-2-2h-1l-1-5c1-8%201-12-1-12l-2-5c-1-4-4-8-4-5m99%204l-2%203c-3%203-3%203-2%200%201-4-2-4-4%200-1%203-1%204%201%203%202%200%202%200%200%204l-1%206-1%202v2c1%202%205%200%203-1-1-1-1-2%201-2l3-6%203-6c2-5%202-6%200-6s-2%200-1%201m4%202v4l-2%202%202%202v3l1%202%202-1h1c1%201%202%201%205-2%204-4%204-5%200-8s-5-2-5%201c0%202%200%202-1%200l-1-2-1-1v-2l-1%202M75%2089l-1%203-1%201-1%201-1%202h1l2%206c-1%202-1%202-4%201l-3%201c1%202%200%202-2%202-3%200-3%200-1-1s2-1%200-1c-4%201-6-1-6-4l-1%201-1%201c0-2%200-2-2%200l-1%202-4-3-4-5-1-1-3-1h-2l2%202c2%202%202%202%200%201-3-1-2%200%205%205l7%206%202%202c2-1%202%2010-1%2021s-3%2011-5%2010v-2c2-1%202-2-1-4-3-3-3-3-3%202%200%206%200%207-3%207-2%200-2%200%200%202l4%202%202%202h1c3-4%2028%201%2026%205%200%202-5%202-8%201l-5-2-3-2c0-2-2-1-2%201l-5%204-2%203%202%201%201%204h-1l-3-1c-2%200-2%201%201%202l4%203c0%201%205%204%208%204%202%200%202%203%201%205l-1%201%202-1c2-2%206-3%209-1h2l-2-2c-4-1-6-3-4-5s4-8%203-10l2-2c2%200%203-1%202-2-1-3%201-1%203%203%202%203%202%204%203%203l1-1%202-1-2-1h-2c0-2%208%200%2011%202%201%201%202%202%203%201l2-1c2%200%201-1-2-3l-4-4-3-1h-6c-2%201-6-2-6-3%201-1-1-4-2-7-3-5-4-8-2-8v-2c-2-2-2-2-2%201v7l1%202c3%203%201%204-6%202l-8-2-4-2%201-2v-1l1-3%202-11%202-10%203%202%202%201%202-1c1-1%203-1%209%202v-1c-3-3-1-5%204-5%203%200%204%200%203-1s-1-1%202-1c7%202%2014%202%2013%201l-4-1c-5%200-17-2-16-3h-1l-2-1c0-2%201-2%204-2h5l-4-1c-3%200-4%200-4-3l1-2%201-1c-1-1%200-2%201-2l1-1c0-2-2-2-2-1-1%201-1%200-1-3v-4l-1%203m174%205c-3%204-4%209-2%208l2%201-1%201-2%201h-1c-1-3-4-1-4%201%201%204%203%206%205%205h3c0%203%204%201%204-2l1-3v-6c0-1%200-2-2-2v-5c-1-1-3%200-3%201m63%2033l-2%204c0%203%201%206%202%205l1%201%201%203%201-2v-3l1%202%201%205v5c-1%203-1%203-1%201%200-3-5-7-6-6l2%204%208%2012-2-1-2-1%201%204c0%202%203%201%204-1l1-1v1l1%201%201-1%201-2v-5l-2-3v4l-1%203-2-11c0-6-1-10-2-11l-3-5c0-4-1-4-3-2m-37%207c-6%204-7%208-2%207%202-1%202-1%201%201-3%202-3%205%200%203l-2%204-2%203%203%205c1%204%203%206%204%205l1%201-1%201v1c1%201%2013-1%2013-2h8l-2%201c-2%200-2%201-2%203v3l-1-3c-1-2-2-3-4-2l-7%201c-4%201-4%201-3%203%200%203%201%204%202%202h1c1%201%201%202-1%202s-3%200-4-3l-1-3-8%202-7%202%201%201-2%201-4%202c-2%202-2%203%202%204%202%201%207-3%205-4s-1-2%202-1c2%200%202%201%201%202l-1%203v3c0%202-1%203-3%203l-2%202v1c-1-2-2-1-2%201l-2%204-2%201h-1l-1%202v16c0%205%201%207%203%209l3%203%205-3%205-2%204-2%202-1%203-1c2-2%202-2-1-3h2c4%200%205%200%2010-4l6-4h2l2-1-2-2-1-1h-1l-3%201v-1l2-3%201-1%203-1-1-1h-2l-1-1c1-1%200-1-1-1l-5-3c-3-3-5-3-7-3s-2-4%201-6%204-3%204%200l1%201c1%200%202%201%202%203l3%202%203-1-1-1v-3h1l1%201v-3h2l-1-2c-2-2-1-6%201-5l2%201c2-1%202-5%201-5v-7c0-3%200-3-3-3l-4-2h1c4%202%205%201%205-6l-1-5-2%201%201-2c1%200%202-12%200-12l-1%202c0%201%200%202-1%201-1-2-2-1-2%202%200%202%200%202-1%200%200-3-2-2-2%201%200%202%200%202-1%200-1-3-1-3-1-1s0%202-1%200v-2l-5%203-5%202v-1l3-7c0-1-3%200-5%202m-54%207c-2%203-3%206-1%206l-1%203-3%205%202%205c1%200%203-5%202-6l1-2h2c1-1%202%200%202%201l1%201%205-7c-1-1-5%201-5%203v-5c0-7-1-8-5-4m83%202v2l1%202-2-1a870%20870%200%20010%2015c2%200%202-1%201-1-2-2-1-3%201-3l3%202%204%201c3%200%203%200%201-2v-3c3%200%202-3-3-8-5-7-4-6-6-4m-55%206c-7%201-8%202-8%207%200%203%200%204-1%203-1-2-1-2-4%203l-2%203v-2c4-7%205-14%203-14s-5%203-4%205l-2%202-3%201-3%202c-3%201-3%201-3%205%201%204%201%205%203%205l2-1h2c2%200%202%200%201-2%200-2%200-2%203%200%204%203%209%203%209%200%200-2%201-2%203-2%201%200%202-3%201-8%200-5%200-5%201-4h2l2-1-1%202v1l1%205c-1%203%200%204%201%204l1%201-1%201-1%203v2l3-2c0-2%201-11%203-14l1-3-2-2h-7m-63%203l-2%201h-1l-5%201-4-1%201%202c2%201%202%202%201%202-2%200%201%204%203%205h3c1-1%202-1%204%201h-1c-3%200-2%201%201%203s4%204%200%202h-2l-2%201-1-2c1-1%200-2-2-3l-3-1-1-2c-2-1-2-1-2%202%200%205%201%209%203%209h3l9%201h6c-2-2-2-2%200-1%202%200%202%200%201-2-3-3-2-4%200-1%202%201%203%202%205%201%203%200%203-1%200-3-2-1-3-1-3-8-1-6-9-11-11-7m147%2015v2l5%201%201%201-3%201h-1c-2-2-3-1-2%201l1%202h1l1%201%201%201h4l6%202c3%201%203%201%202-1-1-1-1-1%201-1%202%201%204-1%204-3l-2-1c-1%201-3%200-4-1l-3-2c-3%201-3%200-2-2%202-1%202-1%200-1s-3%200-2%201c0%202-3%201-6%200l-2-1m-123%2030l-2%202c-2%200-3%205-5%2018a51551%2051551%200%20000%2017l2%204c0%202%202%202%203%201h2c1%200%201%201-1%202v1l3%202c2%207%206%203%205-5v-5h-1l-9-1%202-2%206-11%201-2v-3c-2-1-3%200-3%202s0%202-1-1l-2-3-1-1%201-1c3%200%204-4%202-6v-2c1-1%201-4-1-6h-1m165%2025l2%203c2%202%202%202%201%203-2%202-2%202-1%203%202%202%205%202%206%200h2c2%201%204-1%204-4%201-3-5-4-6-2v-1l-2-1-3-1c-2-3-3-2-3%200m-152%2016h-3l-1%202-1%205c-1%203-1%203%201%203l1%202c-1%202%203%205%204%204l-1-2v-2c3-2%205-1%203%201-2%201-2%201%200%201l3-2v-2l-1-5-1-4-2-1h-2m-173%205c0%202%200%202-2%201l-9%203-1%201-2-1-1-1-1%201-1%202-1-1-1-1h-5c-4%200-4%202%200%203l1%201c-2%201-2%201%200%204%201%203%203%204%204%202h2c0%201%205-1%205-3s3-5%204-4l1-1%202-1%201%201-1%201-2%201-2%201c-2%201-2%201%200%202%202%202%203%202%203-1l1-1%201%201%202%201c2%200%204-4%203-6v-6c-1-1-1-1-1%201m340%2020l-2%202-2%201c0%202-3%204-5%203h-1v2l-1-2h-1c-3%202-2%203%200%203l-1%201c-3%202-4%201-4-2%201-3%201-3-2-3-2%200-2%200-1-1l2-1%201-2-2-2-1%201-1%201-2%201v2l2%205%203%204v3c1%201%200%201-1%201l-2-1-1-1v3l-2%202-1%203h12c7%200%2012%200%2011-1-2-1-4-3-4-5s0-2%201-1l2%201-1-2-1-2v-1l-1%201h-2c-1-2%200-2%203-6%203-3%204-4%205-3l1%202v-2h1l2-1-1-1-1-2-1-2-1%202m-78%201l1%201v3l-2%201-1%202v2l1%202-3-1c-2-1-2-1-2%201v2l-1%201%202%201c2-1%203%200%201%202v1l-2%203v1c2%200%204-1%204-3s0-2%201-1h8c1%200%204-2%204-4l-2-3c-2-3-3-4%200-4h1c0-2-4-5-6-5l-2-1c0-2-2-3-2-1m20%203v1c1%200%202%201%201%202l1%202c2-2%203%200%201%205l-4%204-1%201c0%204%200%204%206%204%204%200%206-1%206-2l3-1c2%200%202%200%201%201a1750%201750%200%20017%200l-4-2c-2%200-2%200-1-1%202%200%201-2-1-4s-2-2-1-3v-1h-1l-1-3c-1-1-1-1%201-1s2%200%201-1l-1-1-1-1-1%202h-1c-1-1-2%200-3%202l-2%201-1-3-2-2c0-1-2-1-2%201M24%20322c0%206%200%208%202%208l1-5v-5l2%203c2%205%203%205%205%200l2-4v5c0%205%200%206%202%206l1-8c0-7%200-8-2-8l-4%205-1%205-2-4-2-5-2-1c-2%200-2%201-2%208m34-7c-2%201-1%2015%201%2015l1-3c0-3%200-3%202-3%205%200%208-5%204-8-2-2-7-3-8-1m-37%2047l-2%201c-2%200-4%204-4%205l2-1c2-2%202-2%205-1l4%202-2-2c-3-2-2-3%203-3%203%200%204%200%203%201v1l1%201c0%201%201%202%203%201%203%200%203%200%202%202l-5%201h-6l-2%201%201%201-2%201c-2%200-4%201-4%203h1l2-1c2%200%202%200%201%201-2%200-1%202%201%202v-1h6c8%200%208%200%205%203h-5c-2-2-5-2-5%200l1%201c1-1%204%201%203%203%200%202%206-2%208-4%202-3%203-2%204%202l1%202c0-2%202-3%202%200l-2%202c-3%201-5%204-3%204l1-1h1l2-2h3l2%201-1-2c-1%200-1-1%201-2%201-1%201-1-1-1-1%201-2%201-2-1l-2-2h-1l2-2c2%200%206%203%205%204l3%201c2%200%203%200%202-1l-2-2v-2c-1%201-3%200-4-1l-3-1%202-2%201-1c-3%200-2-6%201-7%203%200%2010-3%208-3l-3-1c-2-2-30-2-32%200m45-1c-2%201-3%202-2%205l-1%202-6%202-3%201-2%201h4l3-1-1%205%201%202h1l2-3v-1c-2%201-2%200-2-2s4-3%205-1c0%201%201%202%202%201v-1c-2-1-2-3%200-3v-1c-2%200-3-1%200-3%201-1%201-1%201%201%200%203%206%202%2012%200%203-2%204-2%205-1h6l-1-3c0-1-7%200-11%202l-6%202c-4%200-4%200-4-2%201-2-1-3-3-2m54%200v1c3%200%202%202%200%204l-2%201h2c2-1%202%200%202%204l-1%204v5c0%203%200%203-2%202v1c0%203%200%203-2%203l-5%201c-1%200-2%200-2-2h-1c-1%202-1%202-11%202-12%200-9%201%204%201l12%201h1l3-1c3-1%202%202-2%203l-1%201c2%200%203%200%204%202l1%203v-3c0-1%200-2%202-1l1-1%202-2c2%200%202%200%201-1v-1c6-1%2012%200%2011%201h2c1%200%201%201-1%202l-2%203%204-2%202-3%203%202%202%201-1-2-1-1c0-2%201-2%205-1h6l-5-1c-5-2-5-2-5-6%200-2%200-3-1-2l-1%201v-1l-1-1c-2%200-2-1-1-3v-5l2-4c4-4%202-5-9-6l-9%201%201%201h3l-3%201c-2%200-2%200-1%201v2c-3%202-3%203-3-1l1-3h1c0-2-4-3-5-1m17%205l-2%202v2l2%201-1%203-2%202c1-1%202%200%202%201s-1%202-2%201l-1-1h-4l1-1%201-1c-1-1-2%200-4%202l-2%204v1c-2%202-1%204%201%204l5-1c2%200%206-1%208-3l1-9v-9l-3%202'%20fill='%23fafafa'%20fill-rule='evenodd'/%3e%3c/svg%3e"},"regular":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAACXBIWXMAAAsSAAALEgHS3X78AAAE20lEQVQ4yz1U7VPSWRT+/RNbn2qmZlxdE/MlzUQhfFcSUIFsUTFfQAQCBUF5MZBMRYQKNcV8SVATlczUzZna2XZrZ7YPzbazs//Os+fepj6c+d177jnnPvc5z/kJ7bfbMWA0wul0YnhoCN16Perr61FdXQ2NWoMh8nV2dsJiNmNnexvj/nFE56J49eoIy0vLMPQbUFZWBkmlBDdu3ICg1Wh4sEathlKphL6rC3V1dWhoaEBtbS0aGxvR29ODnrs9mHzwgAr6eczx8TE+fvgIRbMCWVlZEIlEKCwshCAuL+cLcbkYVTIZGOK21lYoFQp+QXd3NyU1wzE8jJmZGXjGPLBaLDg5PsH+/j6Kiopw+dIlZGdn49y5HyCoCVllRQWuX7+OOkKkoiK2ezasJFbQSCj7ensxZLfD6XAiFoshMjuL+JMn2N3dxdmbM3g8Hpw/fw6XqOjFixchlBNCDT27ob4B6jY16um5jL9gIIgOnQ6DJhNH2NXZhfl4HHGyg/0D7Ozs4P3795xLhvLChQu4cuXKV4Q5OTlQqVQYdY+ira0NtTU1kEgkkBEFLeRXKVXQU7Nmw2FMT01hcWEB796+w8nJCba3tvFs5Rk1sxsFBQUQWJJYLIZcLqcnNuLatWtgqG9Kb/LnmwfN6O/rw4hzBInlZSQ3N7H09Cli0SiWlpawML+AMF20troGna4DQnFxMeeO3TwbnsUtKlxGfMpuyrhcZqanMRGcwONHjylmmqOLzs2RXPrh8/ng8/pQQxTZiedWaqZQQQ1hiFg3pym5qakJUokUUqkUrS0tMBqMcI24kMlksLi4SEhW4ff5eeO8Hi+MpOEuktHY6Bg6Oghhbm4u111VVRVKS0tRXFTMNdV++zYPZAlm0mkikcDZ2RlOT0+5ZpnA99J7pGELpyUSiUDeJIfQ29NLRYqg1Wq5gxXLy8vjNDC5BO4HuDF5fPn7C3U/wGOjxGEoFOL8sulyDDvQSxITRt1uGptKnszIZaJmB2y8GD9MHsFgkBdlHWXkz8fn8fnzZy5wBsg0YKIpmsTW1hYERniQgqOROepiAl6aBLNpkIv2d9LZXjqNw5eHWF9bw9TkQ3z66xM3ds547O/rRx8VHaSibpcbglwhRyQ2h8zRS2wkn9OXkjc3kD7Yw+tfTrD8LIG9zD7++PMDTs/e4O1vv+Kf//5FcjuFIacD48H7sNis8Afu034YQqhEj0i5AS+0E1hXjGGp3oF93RTSdx5gQ+nFusqLnfYQ0rqHyOjD2GjxIdE0gpVbbsRrbFilnGXaMz/zCbtXh/G6dgIZmR/75WM4qPTiRYkT6TI30qUupHKsSGabsfmjGc+zBpHKtmDrJyu37dx7/JytUzlf/UKqwI4j5SReqx5iT+rFsXoGR820b51CpmYcqat2JEX3sEVfZql823dL5lm/r7+dCav5FqznWbAhsmCzwMbX3/Yb+VY8L7Rhp5SedNWKdbJk8RD3bRbRBSUOvl6nGqsiM18LNoMZT8IxhDwBdGl10CrVMHUbEAnNYNzlhaJWjsCoH/HwI74ftbtg1PfBbrRy02s7UFMhg6REDM0tGj2L1QIH/f7v0l+5oakRSvq7aEi4LtLnnZ/vQJQvQr/RgJeHh4jGohgwDaBZ0QwVjSWLr66pRqVUwnOY73/3oJEB/hhQogAAAABJRU5ErkJggg==","aspectRatio":1,"src":"/static/2b5897d3dd0bc9b258bd2274fa0ade58/3ddd4/mcp-cover.png","srcSet":"/static/2b5897d3dd0bc9b258bd2274fa0ade58/078a8/mcp-cover.png 163w,\n/static/2b5897d3dd0bc9b258bd2274fa0ade58/e56da/mcp-cover.png 327w,\n/static/2b5897d3dd0bc9b258bd2274fa0ade58/3ddd4/mcp-cover.png 653w,\n/static/2b5897d3dd0bc9b258bd2274fa0ade58/c5cc7/mcp-cover.png 980w,\n/static/2b5897d3dd0bc9b258bd2274fa0ade58/6050d/mcp-cover.png 1200w","srcWebp":"/static/2b5897d3dd0bc9b258bd2274fa0ade58/0acdf/mcp-cover.webp","srcSetWebp":"/static/2b5897d3dd0bc9b258bd2274fa0ade58/ac59e/mcp-cover.webp 163w,\n/static/2b5897d3dd0bc9b258bd2274fa0ade58/7660b/mcp-cover.webp 327w,\n/static/2b5897d3dd0bc9b258bd2274fa0ade58/0acdf/mcp-cover.webp 653w,\n/static/2b5897d3dd0bc9b258bd2274fa0ade58/75470/mcp-cover.webp 980w,\n/static/2b5897d3dd0bc9b258bd2274fa0ade58/9000d/mcp-cover.webp 1200w","sizes":"(max-width: 653px) 100vw, 653px","tracedSVG":"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='400'%20height='400'%20viewBox='0%200%20400%20400'%20preserveAspectRatio='none'%3e%3cpath%20d='M0%205c0%204%200%205%202%204l1-2C2%205%203%206%207%208s5%204%201%202-6-1-4%202h2l3%202%203%202H8l1%201-4-2-4-3c-2%200-1%203%200%203v11L0%2041c0%2014%200%2014%203%2017%202%202%202%204-2%204l-1%204c0%202%200%203%201%202v2L0%2087v15h10l2%201-1%201c-1-1-1%200-1%201H4c-3%200-4%200-4%203%200%202%201%203%202%202%201%200%203%203%201%204v2l-1%201c-2%200-3%2021-1%2023v2l-1%2035v34l4%201c5%202%206%204%205%2010%200%205%201%206%2010%207%207%200%205%202-3%202-3%200-4%200-3%201l-1%201c-2-1-3%201-1%203s4%201%203%200c0-2%201-2%203-1l2%203v1l1%202c0%202%200%202-1%201h-8c-2-1-3-1-3-5l1-7c1-3-2-5-6-4s-4%208-1%2010c2%202%202%206-1%205-2-1-1%206%201%208s2%205-1%204c-1-1-2%202%200%204v25a595%20595%200%20000%2080c-1%202-2%2026%200%2026l1%203-1%202-1%202c0%202%200%202%202%202l-1%201c-1%201%200%202%206%202%207%200%208%200%2010-2l3-2v2h2c2-1%203-2%202-3s1-5%202-5v3l-1%202c1%201%202%201%204-1l3-1-1%202-2%202c0%202%204%203%2016%203h11l2-5%201-7c-1-2%200-2%204-1%201%201%201%201-1%202-1%200-2%201-2%203a264%20264%200%2001-1%206h1c-1%202%200%202%204%202%203%200%204%200%204-2s3-2%204%200c0%202%208%203%208%201h1c1%201%202%201%202-1l2-2c2%201%204%200%203-1v-1l5%203c4%202%204%202%207%201%205-1%206-1%203%201-3%201-3%201%205%201s9%200%2010-2%201-2%201%200%201%202%207%202l7-1h1a627%20627%200%200067%200c-6%200-6%200-8-3l-3-4%202-7c2-9%202-8%200-12-2-3-3-4-7-5l-4-3h-1l-2-2-1-2a109%20109%200%200132%201c2%200%204%200%203%201-1%200-1%201%201%202v3l-1-1-1-1c-1%200-2%201-2%203s0%202%201%201l2-1c1%201%200%203-1%202-2%200-1%202%200%203%202%201%2011%202%2014%200%203-1%203-1%203%201l1%202%201-1h1c1%200%204-2%203-3l1-1c2%201%202%204%200%203v3h-1c-2%200-2%200-1%201l3%202h1l-1%201v8c-1%202-1%202%202%202%202%201%203%200%203-1l2-2v3c-1%201%200%202%202%202%202%202%203%203%202%204a379%20379%200%200076%201l11%201%2010-1h1l11%201c8%200%2010%200%209-1v-1c1%201%202%200%201-1%200-2%201-1%203%201%201%202%2018%203%2021%201h1l4%201%204-1c-1-1-1-1%200%200%201%200%202-1%202-4%200-2%200-3-1-2-1%202-4%201-3-2l2-1%201-2V259l-2%201c-2%200-2%200%200-1%203-2%202-5-1-4l-3-1%202-1h2c1-1%201-1-1-3s-3-2-4-1c-2%202-2%200%200-2l1-2%201-1%201-2c0-3%200-3-3-2l-3%202v1l-1-1-2-1h-5l-2-1c-2%200-2%204-1%204l1%201-2%201-3-1%201-1v-1c-1-1-1-1%201-3s2-3%200-4v-3c-2%201-2%201-2-1%201-1-6-4-9-4l-2%205c-1%204-1%204-6%204l-4-2-1-1c-3-1%201-4%204-3l3-1%201-1c3%200%205-3%203-4v-1c3%201%202%200%200-2-4-5-4-14%200-11l1-2h1c1%202%202%202%203%201l-1-3c-2-2-4-7-3-9s-2-4-6-5c-6-2-10-6-10-10%201-3%202-4%203-2v1l-1%203%202%202c2%200%202%200%202-2-1-2%200-2%203-2s3%200%202-1c-1-2%200-3%202-1h1l-2-2c-8-3-8-3-2-3%205%200%206%200%207-3%203-5%203-5%203-1-1%204-1%204%201%203l2-3v-1l1-6%201-5%201%202c0%202%200%202%202%200v-8l-1-3-2-1h-2l-3-1c-2%200-4-3-2-3l1-3%203-7%201%201h1l1-2%201%201c0%201%201%202%202%201v-1l-1-2%202%201h2c2-2%202-4%200-5v-1c0-2-3-3-4-2l-1%201-2%201c-1%201-1%201%201%201h2c-1%201-1%201%200%200l2%201h-1l-2%201c0%202-1%202-2%200-2-2-2-2-3-1s-1%201-1-1c-1-2-3-3-3-1l-2%201c-1-1-2%200-3%201l-3%202%201-2%202-1-2-2c-3-2-4-2-7%201l-4%201c-3%201-5%205-3%206v1c-2%200-2%200-1%201l1%202c1%209%202%2011%206%2011%203%200%203%201%201%203-2%201-7-3-7-8-1-5-3-6-4-3l-2%202-1%202-3%204c-1%201-1%201-1-1v-4c-1%200-2%209-1%2010l-1%201c-1-1-1-1-1%202l3%203%201%203-1-1-3-1-3-2c-2-3-2-3-3%201v1l2%201v2h-4l-1%201-2%201-1%201c0-1%200-2-1-1l-1-1%202-1h1c1-2%200-2-1-2-3%200-5%202-4%204h-1c-1-1-1%200-1%202s0%202-1-1c-2-5-4-7-7-6-2%200-3%203-1%205v4c0%202%201%202%206%206l-1%202-2%202-1%203c0%202%200%202%202%201l2-1%202-1h1l1%202%203-4%201-2%202-2%201-1%201%201c0%201%201%202%202%201%202%200%203%202%201%202v3c2%204%202%2010%200%2013l-3%201-1%201c1%201-1%205-2%205l-1-1-1-1-2%201-1%201v-1l-1-2-1%201c0%201-1%202-3%202s-3%200-4%203l-2%203v1c1%200%201%201-1%202-1%201-2%202-1%203%200%202%200%203-2%204l-2%203h4c1-1%201-1%201%201l-1%202-1%205v5l-3%2015%201%201h-1c-2%200-2%200-2%202l-2%206v3l1%202c-1%201%200%204%201%204l1-1%201-1v2l1%201h1l-1%201v1c1%201%202%202%201%203s-1%201-2-1l-1-1-1%201c-1-1-2%200-2%201l1%201v2h-1c-1-1-1-1-1%201l-1%201h-2l-1%204c-1%202-2%202-11%202-10%200-10%200-9-2%201-3%200-4-1-2-2%203-3%202-2%200%200-2%201-3%202-2l1-1c1-1%200-1-2-1l-3%201-1%201-1-1-1-1c-2%200-4%205-3%206%204%202-5%202-81%202l-85-1c-7-6-16-7-18-2h-2l-3%201c-3%202-3%202-4%200l-4-1c-2%201-2%201-1%202l-14%201c-12%200-15%200-14-1%202-2%202-5%200-6-2-2-2-2-1-4v-3l-1-2h-1c-1%201-1%201-3-1s-7-3-5-1l-1%201-1-3c0-2-1-2-3-2-1%200-2%200-1-1%201-3-4-7-6-7-2%201-3%200-3-2%200-3%201-3%203-2l3-1v-3l-2-1h2v-1l1-2%201%201c0%202%2020%200%2027-1%208-3%208-3%203-7-4-3-4-4%200-2%206%203%2011%200%2011-5l1-4c1-1%200-2-3-5-4-3-5-6-3-6l1%201%202%203%202%201h1c1-1%201-1%201%201l2%202%201%201%202%201%201-2h2l1%203%202%202%204%201%206%201%206%202c1%201%205%202%205%200l2-1%202-1c2-2%203-3%203%200h6l9-2-17%205-5%201v2l-1%201v-1l-2-1-4-1c-2%200-2%200-3%202%200%202-2%203-2%200-2-3-3%200-2%204%201%203%201%203%202%201l2-1v1c-1%202-1%206%201%206v6c0%201-2%200-4-3-4-3-6-3-6%200l-5%201-1%202h-7l-1-1-1-2c-1%200-1%204%201%205l3%201c2-1%204%201%204%203-1%202%200%204%203%204l3%202c0%202%202%203%203%201l3-1c2%200%203%200%202%203%200%203%202%202%204-1%202-5%201-7-4-8l-3%201v3c-2%202-5%200-6-4l-1-1h-1v-2h4l3%202h4l2-1h1c2%203%204%202%203-1%200-2%200-3%202-4h2l-1%201v2h1l3-4%201%202s1%202%203%202l2%203c-1%201%203%203%206%202l1%201c-1%202%201%203%204%203v-1l-1-2%203%202h2c0-2%203-1%204%202%201%202%203%203%203%201l2-2c3-1%204-10%201-11v-2c3%200%202-6%200-8l-3-3-1-1c-2%201-4-1-4-3l-2-3c-1-2-1-2%201-3%201-2%204-3%204-1l-1%201v1h2l2-1-1%202c-1%201-1%201%201%201l3-3c1-2%201-2%202-1%202%202%203%203%202%201l1-2%201%201c1%202%206%201%208-1l2-1v4h4l-1-1-1-1v-7l1%202v2c2%200%202%201%202%207%200%203%201%204%203%204l2%202%201%201%201-2%201-4c1-1%202%200%201%201-1%203%202%203%205%201l3-3%201-1-1-2-1-2c1-3-1-7-2-5h-2c-1-1-1-1%201-4%202-4%203-8%202-10s0-7%201-8l2-2%201-4%206-2c4-2%205-2%204%200l-1%201c-2%200-3%205-2%208%201%202-1%207-2%205-1%200-2%205-1%207%200%202%201%202%206%202l3%201h3l1-3c-1-1%200-2%201-4l1-4%202-2%203-2c0-2%205-4%207-3v2l1%202c2%200%202%201%201%203l-1%204c1%202%201%203-1%206-2%202-2%202-3%201%200-2-2-1-1%201h-1l-5-1c-4%200-4%200-3%202%201%201%201%201-1%201s-2%202-1%206l1%201c0-2%200-2%202%200s2%202%201%203l2%201h5c1%201%202%203%201%204-1%202%206%201%209-1%203-4%203-9%200-8-2%200-2%200-1-1l-1-2v-4h-1l-1%201-1-1%202-2v-1l3-7%202%201c1%202%202%201%202-4%202-12%202-20%201-20l-1-1-1-1c-2%200-3-1-1-3s-1-5-5-5c-8-2-22-2-24-1-1%201-4%201-4-1%200-1-3-2-11-2-15-1-21-2-21-3l13%201h21l1-1c1%201%202-2%202-6s-2-6-4-4l-7%201c-7%200-7-3%200-3l4-2%201-1c3%200%202-2%200-3-2-2-2-2-1-3v-2h-4l1-1-1-1-3-2c-1-1-7%201-8%202l-7%203%2013-8%207%201%207%201%203%201%203%202c3%201%204%201%205-1s4%200%203%202l6%203c7%201%207%201%206-1h1c2%202%203%202%202%200h1c1%201%202%201%204-1v-2c-2%200-1-2%200-2%203%201%204-2%203-8-1-13-1-18%201-16l1%202v4l1%203%201%201-1%201-1%201%201%201%202%201%203%201c2%201%202%201%202-1%200-1%200-2-1-1l-1-1%203-1c2%200%202%200%202-2l-1-3h-2c0-1-1-1-1%201-1%202-1%202-1%200%200-1-1-2-2-1-3%200-2-1%201-3%203-3%204-4%202-4l-2-1%202-2c2%200%203-4%201-9s-2-7-1-6l1%202%202%203c1%201%202%202%201%204%200%202%200%202%201%201h2l-1%203c-2%201-3%206-1%206l1%202h1l2-1-2%203c-2%202-2%208%201%208h2c1%200%204-9%203-11l-2-3v-3l-2-7v-4l-1-4-1-1c0-2-5-2-7%200l-3%201%201-3c2%200%202-1%201-1l-1-1c0-2-1-5-4-8l-1-3%204%203%203%204v-6l1-7v-8l1-2c-1-1-7%200-8%201-2%202-5%203-5%202l2-2c2-1%202-1-1-1-5%200-7%201-6%202l-1%201v1h-3l-1-1h-3l-1%201h-2c0-2-1-2-2-2-2%201-6-1-6-2%200-3%204-4%207-2h4c2-3%203-2%202%201%200%204%200%204%204%201%201-1%203-2%204-1v-1h2c2%200%202%200%201-1v-2c-2%200-2%200-1-1l4-1c3%200%208-2%209-6l1-2c2%200-3-5-5-5s-2-1-2-2l-2-2c-1-1-2-2-1-3%201-2%205%200%205%202l2%204c2%201%202%201%202-3l-2-5-1-4c1-1%201-1%202%201l1-10V12l-5-2c-5-2-6-2-7%200-1%201-1%201-2-1l-4-3c-2-1-3-2-2-3%200-2-2-3-5-3-2%201-2%201%200%202l3%202h-3l-3-3c0-2-15-1-15%201v2l3%206-3-2c-2-3-5-4-5-2l2%202c3%202%202%203-1%201l-3-2-4-1h-4l-1-1V3c0-3%200-3-7-3l-8%201h-1c-1-2-55-1-55%201l-1%201-1-1c1-1%200-2-1-2v1l-1%201-1-1a109%20109%200%2000-35%201l1-1c1-1-1-1-5-1-7%200-7%201-3%204s4%205%200%205v2c2%200%202%201%201%201s-1%201%201%202v2l-1%201h4v1h-2v4c2%202%203%204%201%204-1%201-5-8-5-11s-1-2-4%204l-5%206c-2%200-1%202%201%204s6%203%206%201l3%201%202%202h-6c-5-1-5-1-4%201%200%202%200%202-1%201l-2-4-2-1v-3c-1%201-3%200-5-1-3-1-3-1-3%201%200%203%202%204%205%204%204%200%204%201%203%204%200%205-1%205-1%201l-1-3-1%201h-2c-2-1-5%200-11%202-2%201-4%202-5%201l1-3%201%201%205-1c7-2%207-2%204-7l-3-4-1-1v-2c1-1%202%200%203%201h2l4%204%204%202-5-12c-2-2-2-2%200-4%201-2%201-2%202%200l4%202%203%201h-3c-3%200-4%200-1%204%201%201%202%202%203%201l2%201h1l1-3%201-3c1%200%201-1-1-1l-3-1h3c3%200%203%200%202-2-1-1-1-1%201-1%202%201%203%200%200-2l-1-5c0-2-1-2-3-2-3%200-6%203-5%205l-2%202-1-1c0-3-5-5-15-6H0v5m200-3l2%203%2015%205%201-5c0-5-2-7-5-4h-2l-6-1c-6%200-6%200-5%202m52-1l-1%203c-2%201-2%203%200%202%202%200%201%201-1%205-2%203-4%204-2%200%201-2%200-4-1-4l-5%2012%201%201-1%203c-2%205-2%209%200%2012l2%203-1-3%201-2c1%201%203-4%202-7l1-2%202-1%201-2%201-1-1-1c-1%201-4-1-3-1%202-2%206-2%206%200l1%201h3l2%201-2%202-2-1-3%202c-2%204-2%204-1%206%202%202%202%207-1%208v6c-1%202-1%203-1%201s-2-4-4-3l1%203%201%203%201%203%202%205%204%206c3%202%203%202%201%204v2l1%202%202%207V62c2-1%202-8%200-9v-2c1%200%200-2-3-4-3-4-4-7-1-3h2l2-1v3l2%204c3%202%203%203%205%201h3l-2%202c-2%200-2%200%200%202%201%201%202%202%203%201%202%200%202%200%201%201s-1%202%201%204c2%203%201%204-2%200-2-2-2-2-4-1v2l2%201h-5c-2%200-2%201-1%202v1l-1%204c0%204%200%205%202%204l-1%202c-2%202-1%204%202%203l2%201h2l1-2%201-1%201-1%203-4c2-2%202-3%201-4v-3c0-2%202-3%202-1l1%201V54l1-3%202-8%201-3%201-2-1-2-1-1h1c2%200%201-3-1-7-1-2-2-3-3-2l-1-1%201-1%201-1-1-1c-2%201-3-1-2-2%202-3%200-5-2-4-3%201-4%200-2-1%203-1%201-4-2-4-2%200-2%200-1%203%200%203%200%203-2-1l-3-4c-2%200-2-6-1-7V1c-1-2-3-1-6%201-2%202-3%201-1-1%201-1%201-1-1-1s-3%200-2%201m77%206a311%20311%200%2000-3%208c0-7-1-5-2%203l-2-1-1-3v2a115%20115%200%20010%2011l2-1%202-3c1-4%201-5%201-2%200%202%200%202%202%201h1l-1%202-2%203-1%201-1%203-1%205c-1%202-3%2010-3%2016v11c1%201%201%201%202-1%200-2%201-2%205%202%205%204%205%205%206%2011v6c-1%201%203%2010%205%2012%202%200%202%201%202%203l2-2%201-2-1%203c0%202%200%203%201%202%202%200%202%200%201%201l2%203%203%205c2%204%203%204%204-3l1-5-1%206v7h7l6%201c3%201%204%200%205-2l4-3c2%200%203%202%201%207-1%204%201%207%205%207%207%202%208%202%207%204l1%204c3%202%202%205-1%207s-4%206-1%206v5c-1%203-1%203-3%201h-1l1%202%201%203v3c-2%201-2%202-2%204%201%201%200%202-2%203l-2%202-2%202c-3%203-3%205%200%205h2l2%201c2%200%202%200%200-2v-2c2%201%204%200%206-1l3-2%201%203%202%204c1%201%201%201-1%202-2%200-2%200%200%201h-1l-3%201c1%201%200%201-2%201-3%200-7%202-5%202l-2%201h-3c0-2-2-1-2%201h2c-1%202%201%205%203%204v1l1%202%202-1%201-2v1l2%201c1-1%202-1%202%201v11l-5-3c-8-3-9-4-8-5%202-1-1-8-3-9-2%200-4%203-5%207v2c2%200%202%200%201%205v6l3%206c2%202%208%208%2012%2010%202%201%205%200%205-2l2%201c1%201%202%202%203%201l5-2c2%200%203-1%203-6%200-4%200-4-2-2l-2%205c-1%203-2%204-5%201-2-2-2-5%201-6l2-2v-4c1-3%201-3%201-1v5c0%202%200%202%202-1l3-4v-70a4447%204447%200%20010-102V0h-10l-11%201h-1l-4-1-3%201-2%201-2-1-2-1c-2%200-3%201-3%202l-2%202V2c1-2%201-2-9-2l-10%201h-1l-5-1h-5l-1%207M53%207c1%202%200%202-6%203-2%201-2%201%201%201s7%203%207%206l2%201c1-1%203%200%205%201h2l2%202c1%202%201%202%203%201%201-2%200-4-2-4-1%201-2%200-2-1-1-2%200-4%202-4l1-1c0-1%2020-1%2024%201v-1c-1-1-4-2-12-2-9%200-11%200-12-2-2-2-2-2-4-1h-9l-1-1-1%201m166%209l-1%2017c0%2014%201%2015%203%2015l1%201c0%202%204%205%204%203v1c0%202%202%202%203-1%202-3%201-6%200-3-2%202-2%202-2%200-1-2%201-4%203-3l1%205c0%204%200%204%202%202%201-1%202-2%203-1v-1c-2-1-1-2%201-2%201%201%202%200%203-3l2-5-1-1c-1%201-1%201-1-1%201-2-2-8-3-6v2c1%200%201%201-1%202v2l1%202c-1%202-3%203-4%202h-1c0%201-1%202-2%201v-5c1-11%201-14-2-17l-3-2v2l-1%203-1-4c0-2%200-4-2-5l-2-2v2m-90%2045l-1%201-4%203-4%203-1%208c0%205%200%205-2%204-1-1-1-1-1%201l2%203c1%203%202%202%201-1%200-2%200-2%201%200l4%202c3%201%203%201%202%203l1%202h4l8%203c4%200%204%200%204-2l-3-1c-3%200-4-1-2-2h-1l-1-5c1-8%201-12-1-12l-2-5c-1-4-4-8-4-5m99%204l-2%203c-3%203-3%203-2%200%201-4-2-4-4%200-1%203-1%204%201%203%202%200%202%200%200%204l-1%206-1%202v2c1%202%205%200%203-1-1-1-1-2%201-2l3-6%203-6c2-5%202-6%200-6s-2%200-1%201m4%202v4l-2%202%202%202v3l1%202%202-1h1c1%201%202%201%205-2%204-4%204-5%200-8s-5-2-5%201c0%202%200%202-1%200l-1-2-1-1v-2l-1%202M75%2089l-1%203-1%201-1%201-1%202h1l2%206c-1%202-1%202-4%201l-3%201c1%202%200%202-2%202-3%200-3%200-1-1s2-1%200-1c-4%201-6-1-6-4l-1%201-1%201c0-2%200-2-2%200l-1%202-4-3-4-5-1-1-3-1h-2l2%202c2%202%202%202%200%201-3-1-2%200%205%205l7%206%202%202c2-1%202%2010-1%2021s-3%2011-5%2010v-2c2-1%202-2-1-4-3-3-3-3-3%202%200%206%200%207-3%207-2%200-2%200%200%202l4%202%202%202h1c3-4%2028%201%2026%205%200%202-5%202-8%201l-5-2-3-2c0-2-2-1-2%201l-5%204-2%203%202%201%201%204h-1l-3-1c-2%200-2%201%201%202l4%203c0%201%205%204%208%204%202%200%202%203%201%205l-1%201%202-1c2-2%206-3%209-1h2l-2-2c-4-1-6-3-4-5s4-8%203-10l2-2c2%200%203-1%202-2-1-3%201-1%203%203%202%203%202%204%203%203l1-1%202-1-2-1h-2c0-2%208%200%2011%202%201%201%202%202%203%201l2-1c2%200%201-1-2-3l-4-4-3-1h-6c-2%201-6-2-6-3%201-1-1-4-2-7-3-5-4-8-2-8v-2c-2-2-2-2-2%201v7l1%202c3%203%201%204-6%202l-8-2-4-2%201-2v-1l1-3%202-11%202-10%203%202%202%201%202-1c1-1%203-1%209%202v-1c-3-3-1-5%204-5%203%200%204%200%203-1s-1-1%202-1c7%202%2014%202%2013%201l-4-1c-5%200-17-2-16-3h-1l-2-1c0-2%201-2%204-2h5l-4-1c-3%200-4%200-4-3l1-2%201-1c-1-1%200-2%201-2l1-1c0-2-2-2-2-1-1%201-1%200-1-3v-4l-1%203m174%205c-3%204-4%209-2%208l2%201-1%201-2%201h-1c-1-3-4-1-4%201%201%204%203%206%205%205h3c0%203%204%201%204-2l1-3v-6c0-1%200-2-2-2v-5c-1-1-3%200-3%201m63%2033l-2%204c0%203%201%206%202%205l1%201%201%203%201-2v-3l1%202%201%205v5c-1%203-1%203-1%201%200-3-5-7-6-6l2%204%208%2012-2-1-2-1%201%204c0%202%203%201%204-1l1-1v1l1%201%201-1%201-2v-5l-2-3v4l-1%203-2-11c0-6-1-10-2-11l-3-5c0-4-1-4-3-2m-37%207c-6%204-7%208-2%207%202-1%202-1%201%201-3%202-3%205%200%203l-2%204-2%203%203%205c1%204%203%206%204%205l1%201-1%201v1c1%201%2013-1%2013-2h8l-2%201c-2%200-2%201-2%203v3l-1-3c-1-2-2-3-4-2l-7%201c-4%201-4%201-3%203%200%203%201%204%202%202h1c1%201%201%202-1%202s-3%200-4-3l-1-3-8%202-7%202%201%201-2%201-4%202c-2%202-2%203%202%204%202%201%207-3%205-4s-1-2%202-1c2%200%202%201%201%202l-1%203v3c0%202-1%203-3%203l-2%202v1c-1-2-2-1-2%201l-2%204-2%201h-1l-1%202v16c0%205%201%207%203%209l3%203%205-3%205-2%204-2%202-1%203-1c2-2%202-2-1-3h2c4%200%205%200%2010-4l6-4h2l2-1-2-2-1-1h-1l-3%201v-1l2-3%201-1%203-1-1-1h-2l-1-1c1-1%200-1-1-1l-5-3c-3-3-5-3-7-3s-2-4%201-6%204-3%204%200l1%201c1%200%202%201%202%203l3%202%203-1-1-1v-3h1l1%201v-3h2l-1-2c-2-2-1-6%201-5l2%201c2-1%202-5%201-5v-7c0-3%200-3-3-3l-4-2h1c4%202%205%201%205-6l-1-5-2%201%201-2c1%200%202-12%200-12l-1%202c0%201%200%202-1%201-1-2-2-1-2%202%200%202%200%202-1%200%200-3-2-2-2%201%200%202%200%202-1%200-1-3-1-3-1-1s0%202-1%200v-2l-5%203-5%202v-1l3-7c0-1-3%200-5%202m-54%207c-2%203-3%206-1%206l-1%203-3%205%202%205c1%200%203-5%202-6l1-2h2c1-1%202%200%202%201l1%201%205-7c-1-1-5%201-5%203v-5c0-7-1-8-5-4m83%202v2l1%202-2-1a870%20870%200%20010%2015c2%200%202-1%201-1-2-2-1-3%201-3l3%202%204%201c3%200%203%200%201-2v-3c3%200%202-3-3-8-5-7-4-6-6-4m-55%206c-7%201-8%202-8%207%200%203%200%204-1%203-1-2-1-2-4%203l-2%203v-2c4-7%205-14%203-14s-5%203-4%205l-2%202-3%201-3%202c-3%201-3%201-3%205%201%204%201%205%203%205l2-1h2c2%200%202%200%201-2%200-2%200-2%203%200%204%203%209%203%209%200%200-2%201-2%203-2%201%200%202-3%201-8%200-5%200-5%201-4h2l2-1-1%202v1l1%205c-1%203%200%204%201%204l1%201-1%201-1%203v2l3-2c0-2%201-11%203-14l1-3-2-2h-7m-63%203l-2%201h-1l-5%201-4-1%201%202c2%201%202%202%201%202-2%200%201%204%203%205h3c1-1%202-1%204%201h-1c-3%200-2%201%201%203s4%204%200%202h-2l-2%201-1-2c1-1%200-2-2-3l-3-1-1-2c-2-1-2-1-2%202%200%205%201%209%203%209h3l9%201h6c-2-2-2-2%200-1%202%200%202%200%201-2-3-3-2-4%200-1%202%201%203%202%205%201%203%200%203-1%200-3-2-1-3-1-3-8-1-6-9-11-11-7m147%2015v2l5%201%201%201-3%201h-1c-2-2-3-1-2%201l1%202h1l1%201%201%201h4l6%202c3%201%203%201%202-1-1-1-1-1%201-1%202%201%204-1%204-3l-2-1c-1%201-3%200-4-1l-3-2c-3%201-3%200-2-2%202-1%202-1%200-1s-3%200-2%201c0%202-3%201-6%200l-2-1m-123%2030l-2%202c-2%200-3%205-5%2018a51551%2051551%200%20000%2017l2%204c0%202%202%202%203%201h2c1%200%201%201-1%202v1l3%202c2%207%206%203%205-5v-5h-1l-9-1%202-2%206-11%201-2v-3c-2-1-3%200-3%202s0%202-1-1l-2-3-1-1%201-1c3%200%204-4%202-6v-2c1-1%201-4-1-6h-1m165%2025l2%203c2%202%202%202%201%203-2%202-2%202-1%203%202%202%205%202%206%200h2c2%201%204-1%204-4%201-3-5-4-6-2v-1l-2-1-3-1c-2-3-3-2-3%200m-152%2016h-3l-1%202-1%205c-1%203-1%203%201%203l1%202c-1%202%203%205%204%204l-1-2v-2c3-2%205-1%203%201-2%201-2%201%200%201l3-2v-2l-1-5-1-4-2-1h-2m-173%205c0%202%200%202-2%201l-9%203-1%201-2-1-1-1-1%201-1%202-1-1-1-1h-5c-4%200-4%202%200%203l1%201c-2%201-2%201%200%204%201%203%203%204%204%202h2c0%201%205-1%205-3s3-5%204-4l1-1%202-1%201%201-1%201-2%201-2%201c-2%201-2%201%200%202%202%202%203%202%203-1l1-1%201%201%202%201c2%200%204-4%203-6v-6c-1-1-1-1-1%201m340%2020l-2%202-2%201c0%202-3%204-5%203h-1v2l-1-2h-1c-3%202-2%203%200%203l-1%201c-3%202-4%201-4-2%201-3%201-3-2-3-2%200-2%200-1-1l2-1%201-2-2-2-1%201-1%201-2%201v2l2%205%203%204v3c1%201%200%201-1%201l-2-1-1-1v3l-2%202-1%203h12c7%200%2012%200%2011-1-2-1-4-3-4-5s0-2%201-1l2%201-1-2-1-2v-1l-1%201h-2c-1-2%200-2%203-6%203-3%204-4%205-3l1%202v-2h1l2-1-1-1-1-2-1-2-1%202m-78%201l1%201v3l-2%201-1%202v2l1%202-3-1c-2-1-2-1-2%201v2l-1%201%202%201c2-1%203%200%201%202v1l-2%203v1c2%200%204-1%204-3s0-2%201-1h8c1%200%204-2%204-4l-2-3c-2-3-3-4%200-4h1c0-2-4-5-6-5l-2-1c0-2-2-3-2-1m20%203v1c1%200%202%201%201%202l1%202c2-2%203%200%201%205l-4%204-1%201c0%204%200%204%206%204%204%200%206-1%206-2l3-1c2%200%202%200%201%201a1750%201750%200%20017%200l-4-2c-2%200-2%200-1-1%202%200%201-2-1-4s-2-2-1-3v-1h-1l-1-3c-1-1-1-1%201-1s2%200%201-1l-1-1-1-1-1%202h-1c-1-1-2%200-3%202l-2%201-1-3-2-2c0-1-2-1-2%201M24%20322c0%206%200%208%202%208l1-5v-5l2%203c2%205%203%205%205%200l2-4v5c0%205%200%206%202%206l1-8c0-7%200-8-2-8l-4%205-1%205-2-4-2-5-2-1c-2%200-2%201-2%208m34-7c-2%201-1%2015%201%2015l1-3c0-3%200-3%202-3%205%200%208-5%204-8-2-2-7-3-8-1m-37%2047l-2%201c-2%200-4%204-4%205l2-1c2-2%202-2%205-1l4%202-2-2c-3-2-2-3%203-3%203%200%204%200%203%201v1l1%201c0%201%201%202%203%201%203%200%203%200%202%202l-5%201h-6l-2%201%201%201-2%201c-2%200-4%201-4%203h1l2-1c2%200%202%200%201%201-2%200-1%202%201%202v-1h6c8%200%208%200%205%203h-5c-2-2-5-2-5%200l1%201c1-1%204%201%203%203%200%202%206-2%208-4%202-3%203-2%204%202l1%202c0-2%202-3%202%200l-2%202c-3%201-5%204-3%204l1-1h1l2-2h3l2%201-1-2c-1%200-1-1%201-2%201-1%201-1-1-1-1%201-2%201-2-1l-2-2h-1l2-2c2%200%206%203%205%204l3%201c2%200%203%200%202-1l-2-2v-2c-1%201-3%200-4-1l-3-1%202-2%201-1c-3%200-2-6%201-7%203%200%2010-3%208-3l-3-1c-2-2-30-2-32%200m45-1c-2%201-3%202-2%205l-1%202-6%202-3%201-2%201h4l3-1-1%205%201%202h1l2-3v-1c-2%201-2%200-2-2s4-3%205-1c0%201%201%202%202%201v-1c-2-1-2-3%200-3v-1c-2%200-3-1%200-3%201-1%201-1%201%201%200%203%206%202%2012%200%203-2%204-2%205-1h6l-1-3c0-1-7%200-11%202l-6%202c-4%200-4%200-4-2%201-2-1-3-3-2m54%200v1c3%200%202%202%200%204l-2%201h2c2-1%202%200%202%204l-1%204v5c0%203%200%203-2%202v1c0%203%200%203-2%203l-5%201c-1%200-2%200-2-2h-1c-1%202-1%202-11%202-12%200-9%201%204%201l12%201h1l3-1c3-1%202%202-2%203l-1%201c2%200%203%200%204%202l1%203v-3c0-1%200-2%202-1l1-1%202-2c2%200%202%200%201-1v-1c6-1%2012%200%2011%201h2c1%200%201%201-1%202l-2%203%204-2%202-3%203%202%202%201-1-2-1-1c0-2%201-2%205-1h6l-5-1c-5-2-5-2-5-6%200-2%200-3-1-2l-1%201v-1l-1-1c-2%200-2-1-1-3v-5l2-4c4-4%202-5-9-6l-9%201%201%201h3l-3%201c-2%200-2%200-1%201v2c-3%202-3%203-3-1l1-3h1c0-2-4-3-5-1m17%205l-2%202v2l2%201-1%203-2%202c1-1%202%200%202%201s-1%202-2%201l-1-1h-4l1-1%201-1c-1-1-2%200-4%202l-2%204v1c-2%202-1%204%201%204l5-1c2%200%206-1%208-3l1-9v-9l-3%202'%20fill='%23fafafa'%20fill-rule='evenodd'/%3e%3c/svg%3e"},"narrow":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAACXBIWXMAAAsSAAALEgHS3X78AAAE20lEQVQ4yz1U7VPSWRT+/RNbn2qmZlxdE/MlzUQhfFcSUIFsUTFfQAQCBUF5MZBMRYQKNcV8SVATlczUzZna2XZrZ7YPzbazs//Os+fepj6c+d177jnnPvc5z/kJ7bfbMWA0wul0YnhoCN16Perr61FdXQ2NWoMh8nV2dsJiNmNnexvj/nFE56J49eoIy0vLMPQbUFZWBkmlBDdu3ICg1Wh4sEathlKphL6rC3V1dWhoaEBtbS0aGxvR29ODnrs9mHzwgAr6eczx8TE+fvgIRbMCWVlZEIlEKCwshCAuL+cLcbkYVTIZGOK21lYoFQp+QXd3NyU1wzE8jJmZGXjGPLBaLDg5PsH+/j6Kiopw+dIlZGdn49y5HyCoCVllRQWuX7+OOkKkoiK2ezasJFbQSCj7ensxZLfD6XAiFoshMjuL+JMn2N3dxdmbM3g8Hpw/fw6XqOjFixchlBNCDT27ob4B6jY16um5jL9gIIgOnQ6DJhNH2NXZhfl4HHGyg/0D7Ozs4P3795xLhvLChQu4cuXKV4Q5OTlQqVQYdY+ira0NtTU1kEgkkBEFLeRXKVXQU7Nmw2FMT01hcWEB796+w8nJCba3tvFs5Rk1sxsFBQUQWJJYLIZcLqcnNuLatWtgqG9Kb/LnmwfN6O/rw4hzBInlZSQ3N7H09Cli0SiWlpawML+AMF20troGna4DQnFxMeeO3TwbnsUtKlxGfMpuyrhcZqanMRGcwONHjylmmqOLzs2RXPrh8/ng8/pQQxTZiedWaqZQQQ1hiFg3pym5qakJUokUUqkUrS0tMBqMcI24kMlksLi4SEhW4ff5eeO8Hi+MpOEuktHY6Bg6Oghhbm4u111VVRVKS0tRXFTMNdV++zYPZAlm0mkikcDZ2RlOT0+5ZpnA99J7pGELpyUSiUDeJIfQ29NLRYqg1Wq5gxXLy8vjNDC5BO4HuDF5fPn7C3U/wGOjxGEoFOL8sulyDDvQSxITRt1uGptKnszIZaJmB2y8GD9MHsFgkBdlHWXkz8fn8fnzZy5wBsg0YKIpmsTW1hYERniQgqOROepiAl6aBLNpkIv2d9LZXjqNw5eHWF9bw9TkQ3z66xM3ds547O/rRx8VHaSibpcbglwhRyQ2h8zRS2wkn9OXkjc3kD7Yw+tfTrD8LIG9zD7++PMDTs/e4O1vv+Kf//5FcjuFIacD48H7sNis8Afu034YQqhEj0i5AS+0E1hXjGGp3oF93RTSdx5gQ+nFusqLnfYQ0rqHyOjD2GjxIdE0gpVbbsRrbFilnGXaMz/zCbtXh/G6dgIZmR/75WM4qPTiRYkT6TI30qUupHKsSGabsfmjGc+zBpHKtmDrJyu37dx7/JytUzlf/UKqwI4j5SReqx5iT+rFsXoGR820b51CpmYcqat2JEX3sEVfZql823dL5lm/r7+dCav5FqznWbAhsmCzwMbX3/Yb+VY8L7Rhp5SedNWKdbJk8RD3bRbRBSUOvl6nGqsiM18LNoMZT8IxhDwBdGl10CrVMHUbEAnNYNzlhaJWjsCoH/HwI74ftbtg1PfBbrRy02s7UFMhg6REDM0tGj2L1QIH/f7v0l+5oakRSvq7aEi4LtLnnZ/vQJQvQr/RgJeHh4jGohgwDaBZ0QwVjSWLr66pRqVUwnOY73/3oJEB/hhQogAAAABJRU5ErkJggg==","aspectRatio":1,"src":"/static/2b5897d3dd0bc9b258bd2274fa0ade58/502b1/mcp-cover.png","srcSet":"/static/2b5897d3dd0bc9b258bd2274fa0ade58/f2e6d/mcp-cover.png 114w,\n/static/2b5897d3dd0bc9b258bd2274fa0ade58/4ddba/mcp-cover.png 229w,\n/static/2b5897d3dd0bc9b258bd2274fa0ade58/502b1/mcp-cover.png 457w,\n/static/2b5897d3dd0bc9b258bd2274fa0ade58/7ddc2/mcp-cover.png 686w,\n/static/2b5897d3dd0bc9b258bd2274fa0ade58/435bf/mcp-cover.png 914w,\n/static/2b5897d3dd0bc9b258bd2274fa0ade58/6050d/mcp-cover.png 1200w","srcWebp":"/static/2b5897d3dd0bc9b258bd2274fa0ade58/15384/mcp-cover.webp","srcSetWebp":"/static/2b5897d3dd0bc9b258bd2274fa0ade58/31fce/mcp-cover.webp 114w,\n/static/2b5897d3dd0bc9b258bd2274fa0ade58/e3e25/mcp-cover.webp 229w,\n/static/2b5897d3dd0bc9b258bd2274fa0ade58/15384/mcp-cover.webp 457w,\n/static/2b5897d3dd0bc9b258bd2274fa0ade58/0258d/mcp-cover.webp 686w,\n/static/2b5897d3dd0bc9b258bd2274fa0ade58/64ea2/mcp-cover.webp 914w,\n/static/2b5897d3dd0bc9b258bd2274fa0ade58/9000d/mcp-cover.webp 1200w","sizes":"(max-width: 457px) 100vw, 457px","tracedSVG":"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='400'%20height='400'%20viewBox='0%200%20400%20400'%20preserveAspectRatio='none'%3e%3cpath%20d='M0%205c0%204%200%205%202%204l1-2C2%205%203%206%207%208s5%204%201%202-6-1-4%202h2l3%202%203%202H8l1%201-4-2-4-3c-2%200-1%203%200%203v11L0%2041c0%2014%200%2014%203%2017%202%202%202%204-2%204l-1%204c0%202%200%203%201%202v2L0%2087v15h10l2%201-1%201c-1-1-1%200-1%201H4c-3%200-4%200-4%203%200%202%201%203%202%202%201%200%203%203%201%204v2l-1%201c-2%200-3%2021-1%2023v2l-1%2035v34l4%201c5%202%206%204%205%2010%200%205%201%206%2010%207%207%200%205%202-3%202-3%200-4%200-3%201l-1%201c-2-1-3%201-1%203s4%201%203%200c0-2%201-2%203-1l2%203v1l1%202c0%202%200%202-1%201h-8c-2-1-3-1-3-5l1-7c1-3-2-5-6-4s-4%208-1%2010c2%202%202%206-1%205-2-1-1%206%201%208s2%205-1%204c-1-1-2%202%200%204v25a595%20595%200%20000%2080c-1%202-2%2026%200%2026l1%203-1%202-1%202c0%202%200%202%202%202l-1%201c-1%201%200%202%206%202%207%200%208%200%2010-2l3-2v2h2c2-1%203-2%202-3s1-5%202-5v3l-1%202c1%201%202%201%204-1l3-1-1%202-2%202c0%202%204%203%2016%203h11l2-5%201-7c-1-2%200-2%204-1%201%201%201%201-1%202-1%200-2%201-2%203a264%20264%200%2001-1%206h1c-1%202%200%202%204%202%203%200%204%200%204-2s3-2%204%200c0%202%208%203%208%201h1c1%201%202%201%202-1l2-2c2%201%204%200%203-1v-1l5%203c4%202%204%202%207%201%205-1%206-1%203%201-3%201-3%201%205%201s9%200%2010-2%201-2%201%200%201%202%207%202l7-1h1a627%20627%200%200067%200c-6%200-6%200-8-3l-3-4%202-7c2-9%202-8%200-12-2-3-3-4-7-5l-4-3h-1l-2-2-1-2a109%20109%200%200132%201c2%200%204%200%203%201-1%200-1%201%201%202v3l-1-1-1-1c-1%200-2%201-2%203s0%202%201%201l2-1c1%201%200%203-1%202-2%200-1%202%200%203%202%201%2011%202%2014%200%203-1%203-1%203%201l1%202%201-1h1c1%200%204-2%203-3l1-1c2%201%202%204%200%203v3h-1c-2%200-2%200-1%201l3%202h1l-1%201v8c-1%202-1%202%202%202%202%201%203%200%203-1l2-2v3c-1%201%200%202%202%202%202%202%203%203%202%204a379%20379%200%200076%201l11%201%2010-1h1l11%201c8%200%2010%200%209-1v-1c1%201%202%200%201-1%200-2%201-1%203%201%201%202%2018%203%2021%201h1l4%201%204-1c-1-1-1-1%200%200%201%200%202-1%202-4%200-2%200-3-1-2-1%202-4%201-3-2l2-1%201-2V259l-2%201c-2%200-2%200%200-1%203-2%202-5-1-4l-3-1%202-1h2c1-1%201-1-1-3s-3-2-4-1c-2%202-2%200%200-2l1-2%201-1%201-2c0-3%200-3-3-2l-3%202v1l-1-1-2-1h-5l-2-1c-2%200-2%204-1%204l1%201-2%201-3-1%201-1v-1c-1-1-1-1%201-3s2-3%200-4v-3c-2%201-2%201-2-1%201-1-6-4-9-4l-2%205c-1%204-1%204-6%204l-4-2-1-1c-3-1%201-4%204-3l3-1%201-1c3%200%205-3%203-4v-1c3%201%202%200%200-2-4-5-4-14%200-11l1-2h1c1%202%202%202%203%201l-1-3c-2-2-4-7-3-9s-2-4-6-5c-6-2-10-6-10-10%201-3%202-4%203-2v1l-1%203%202%202c2%200%202%200%202-2-1-2%200-2%203-2s3%200%202-1c-1-2%200-3%202-1h1l-2-2c-8-3-8-3-2-3%205%200%206%200%207-3%203-5%203-5%203-1-1%204-1%204%201%203l2-3v-1l1-6%201-5%201%202c0%202%200%202%202%200v-8l-1-3-2-1h-2l-3-1c-2%200-4-3-2-3l1-3%203-7%201%201h1l1-2%201%201c0%201%201%202%202%201v-1l-1-2%202%201h2c2-2%202-4%200-5v-1c0-2-3-3-4-2l-1%201-2%201c-1%201-1%201%201%201h2c-1%201-1%201%200%200l2%201h-1l-2%201c0%202-1%202-2%200-2-2-2-2-3-1s-1%201-1-1c-1-2-3-3-3-1l-2%201c-1-1-2%200-3%201l-3%202%201-2%202-1-2-2c-3-2-4-2-7%201l-4%201c-3%201-5%205-3%206v1c-2%200-2%200-1%201l1%202c1%209%202%2011%206%2011%203%200%203%201%201%203-2%201-7-3-7-8-1-5-3-6-4-3l-2%202-1%202-3%204c-1%201-1%201-1-1v-4c-1%200-2%209-1%2010l-1%201c-1-1-1-1-1%202l3%203%201%203-1-1-3-1-3-2c-2-3-2-3-3%201v1l2%201v2h-4l-1%201-2%201-1%201c0-1%200-2-1-1l-1-1%202-1h1c1-2%200-2-1-2-3%200-5%202-4%204h-1c-1-1-1%200-1%202s0%202-1-1c-2-5-4-7-7-6-2%200-3%203-1%205v4c0%202%201%202%206%206l-1%202-2%202-1%203c0%202%200%202%202%201l2-1%202-1h1l1%202%203-4%201-2%202-2%201-1%201%201c0%201%201%202%202%201%202%200%203%202%201%202v3c2%204%202%2010%200%2013l-3%201-1%201c1%201-1%205-2%205l-1-1-1-1-2%201-1%201v-1l-1-2-1%201c0%201-1%202-3%202s-3%200-4%203l-2%203v1c1%200%201%201-1%202-1%201-2%202-1%203%200%202%200%203-2%204l-2%203h4c1-1%201-1%201%201l-1%202-1%205v5l-3%2015%201%201h-1c-2%200-2%200-2%202l-2%206v3l1%202c-1%201%200%204%201%204l1-1%201-1v2l1%201h1l-1%201v1c1%201%202%202%201%203s-1%201-2-1l-1-1-1%201c-1-1-2%200-2%201l1%201v2h-1c-1-1-1-1-1%201l-1%201h-2l-1%204c-1%202-2%202-11%202-10%200-10%200-9-2%201-3%200-4-1-2-2%203-3%202-2%200%200-2%201-3%202-2l1-1c1-1%200-1-2-1l-3%201-1%201-1-1-1-1c-2%200-4%205-3%206%204%202-5%202-81%202l-85-1c-7-6-16-7-18-2h-2l-3%201c-3%202-3%202-4%200l-4-1c-2%201-2%201-1%202l-14%201c-12%200-15%200-14-1%202-2%202-5%200-6-2-2-2-2-1-4v-3l-1-2h-1c-1%201-1%201-3-1s-7-3-5-1l-1%201-1-3c0-2-1-2-3-2-1%200-2%200-1-1%201-3-4-7-6-7-2%201-3%200-3-2%200-3%201-3%203-2l3-1v-3l-2-1h2v-1l1-2%201%201c0%202%2020%200%2027-1%208-3%208-3%203-7-4-3-4-4%200-2%206%203%2011%200%2011-5l1-4c1-1%200-2-3-5-4-3-5-6-3-6l1%201%202%203%202%201h1c1-1%201-1%201%201l2%202%201%201%202%201%201-2h2l1%203%202%202%204%201%206%201%206%202c1%201%205%202%205%200l2-1%202-1c2-2%203-3%203%200h6l9-2-17%205-5%201v2l-1%201v-1l-2-1-4-1c-2%200-2%200-3%202%200%202-2%203-2%200-2-3-3%200-2%204%201%203%201%203%202%201l2-1v1c-1%202-1%206%201%206v6c0%201-2%200-4-3-4-3-6-3-6%200l-5%201-1%202h-7l-1-1-1-2c-1%200-1%204%201%205l3%201c2-1%204%201%204%203-1%202%200%204%203%204l3%202c0%202%202%203%203%201l3-1c2%200%203%200%202%203%200%203%202%202%204-1%202-5%201-7-4-8l-3%201v3c-2%202-5%200-6-4l-1-1h-1v-2h4l3%202h4l2-1h1c2%203%204%202%203-1%200-2%200-3%202-4h2l-1%201v2h1l3-4%201%202s1%202%203%202l2%203c-1%201%203%203%206%202l1%201c-1%202%201%203%204%203v-1l-1-2%203%202h2c0-2%203-1%204%202%201%202%203%203%203%201l2-2c3-1%204-10%201-11v-2c3%200%202-6%200-8l-3-3-1-1c-2%201-4-1-4-3l-2-3c-1-2-1-2%201-3%201-2%204-3%204-1l-1%201v1h2l2-1-1%202c-1%201-1%201%201%201l3-3c1-2%201-2%202-1%202%202%203%203%202%201l1-2%201%201c1%202%206%201%208-1l2-1v4h4l-1-1-1-1v-7l1%202v2c2%200%202%201%202%207%200%203%201%204%203%204l2%202%201%201%201-2%201-4c1-1%202%200%201%201-1%203%202%203%205%201l3-3%201-1-1-2-1-2c1-3-1-7-2-5h-2c-1-1-1-1%201-4%202-4%203-8%202-10s0-7%201-8l2-2%201-4%206-2c4-2%205-2%204%200l-1%201c-2%200-3%205-2%208%201%202-1%207-2%205-1%200-2%205-1%207%200%202%201%202%206%202l3%201h3l1-3c-1-1%200-2%201-4l1-4%202-2%203-2c0-2%205-4%207-3v2l1%202c2%200%202%201%201%203l-1%204c1%202%201%203-1%206-2%202-2%202-3%201%200-2-2-1-1%201h-1l-5-1c-4%200-4%200-3%202%201%201%201%201-1%201s-2%202-1%206l1%201c0-2%200-2%202%200s2%202%201%203l2%201h5c1%201%202%203%201%204-1%202%206%201%209-1%203-4%203-9%200-8-2%200-2%200-1-1l-1-2v-4h-1l-1%201-1-1%202-2v-1l3-7%202%201c1%202%202%201%202-4%202-12%202-20%201-20l-1-1-1-1c-2%200-3-1-1-3s-1-5-5-5c-8-2-22-2-24-1-1%201-4%201-4-1%200-1-3-2-11-2-15-1-21-2-21-3l13%201h21l1-1c1%201%202-2%202-6s-2-6-4-4l-7%201c-7%200-7-3%200-3l4-2%201-1c3%200%202-2%200-3-2-2-2-2-1-3v-2h-4l1-1-1-1-3-2c-1-1-7%201-8%202l-7%203%2013-8%207%201%207%201%203%201%203%202c3%201%204%201%205-1s4%200%203%202l6%203c7%201%207%201%206-1h1c2%202%203%202%202%200h1c1%201%202%201%204-1v-2c-2%200-1-2%200-2%203%201%204-2%203-8-1-13-1-18%201-16l1%202v4l1%203%201%201-1%201-1%201%201%201%202%201%203%201c2%201%202%201%202-1%200-1%200-2-1-1l-1-1%203-1c2%200%202%200%202-2l-1-3h-2c0-1-1-1-1%201-1%202-1%202-1%200%200-1-1-2-2-1-3%200-2-1%201-3%203-3%204-4%202-4l-2-1%202-2c2%200%203-4%201-9s-2-7-1-6l1%202%202%203c1%201%202%202%201%204%200%202%200%202%201%201h2l-1%203c-2%201-3%206-1%206l1%202h1l2-1-2%203c-2%202-2%208%201%208h2c1%200%204-9%203-11l-2-3v-3l-2-7v-4l-1-4-1-1c0-2-5-2-7%200l-3%201%201-3c2%200%202-1%201-1l-1-1c0-2-1-5-4-8l-1-3%204%203%203%204v-6l1-7v-8l1-2c-1-1-7%200-8%201-2%202-5%203-5%202l2-2c2-1%202-1-1-1-5%200-7%201-6%202l-1%201v1h-3l-1-1h-3l-1%201h-2c0-2-1-2-2-2-2%201-6-1-6-2%200-3%204-4%207-2h4c2-3%203-2%202%201%200%204%200%204%204%201%201-1%203-2%204-1v-1h2c2%200%202%200%201-1v-2c-2%200-2%200-1-1l4-1c3%200%208-2%209-6l1-2c2%200-3-5-5-5s-2-1-2-2l-2-2c-1-1-2-2-1-3%201-2%205%200%205%202l2%204c2%201%202%201%202-3l-2-5-1-4c1-1%201-1%202%201l1-10V12l-5-2c-5-2-6-2-7%200-1%201-1%201-2-1l-4-3c-2-1-3-2-2-3%200-2-2-3-5-3-2%201-2%201%200%202l3%202h-3l-3-3c0-2-15-1-15%201v2l3%206-3-2c-2-3-5-4-5-2l2%202c3%202%202%203-1%201l-3-2-4-1h-4l-1-1V3c0-3%200-3-7-3l-8%201h-1c-1-2-55-1-55%201l-1%201-1-1c1-1%200-2-1-2v1l-1%201-1-1a109%20109%200%2000-35%201l1-1c1-1-1-1-5-1-7%200-7%201-3%204s4%205%200%205v2c2%200%202%201%201%201s-1%201%201%202v2l-1%201h4v1h-2v4c2%202%203%204%201%204-1%201-5-8-5-11s-1-2-4%204l-5%206c-2%200-1%202%201%204s6%203%206%201l3%201%202%202h-6c-5-1-5-1-4%201%200%202%200%202-1%201l-2-4-2-1v-3c-1%201-3%200-5-1-3-1-3-1-3%201%200%203%202%204%205%204%204%200%204%201%203%204%200%205-1%205-1%201l-1-3-1%201h-2c-2-1-5%200-11%202-2%201-4%202-5%201l1-3%201%201%205-1c7-2%207-2%204-7l-3-4-1-1v-2c1-1%202%200%203%201h2l4%204%204%202-5-12c-2-2-2-2%200-4%201-2%201-2%202%200l4%202%203%201h-3c-3%200-4%200-1%204%201%201%202%202%203%201l2%201h1l1-3%201-3c1%200%201-1-1-1l-3-1h3c3%200%203%200%202-2-1-1-1-1%201-1%202%201%203%200%200-2l-1-5c0-2-1-2-3-2-3%200-6%203-5%205l-2%202-1-1c0-3-5-5-15-6H0v5m200-3l2%203%2015%205%201-5c0-5-2-7-5-4h-2l-6-1c-6%200-6%200-5%202m52-1l-1%203c-2%201-2%203%200%202%202%200%201%201-1%205-2%203-4%204-2%200%201-2%200-4-1-4l-5%2012%201%201-1%203c-2%205-2%209%200%2012l2%203-1-3%201-2c1%201%203-4%202-7l1-2%202-1%201-2%201-1-1-1c-1%201-4-1-3-1%202-2%206-2%206%200l1%201h3l2%201-2%202-2-1-3%202c-2%204-2%204-1%206%202%202%202%207-1%208v6c-1%202-1%203-1%201s-2-4-4-3l1%203%201%203%201%203%202%205%204%206c3%202%203%202%201%204v2l1%202%202%207V62c2-1%202-8%200-9v-2c1%200%200-2-3-4-3-4-4-7-1-3h2l2-1v3l2%204c3%202%203%203%205%201h3l-2%202c-2%200-2%200%200%202%201%201%202%202%203%201%202%200%202%200%201%201s-1%202%201%204c2%203%201%204-2%200-2-2-2-2-4-1v2l2%201h-5c-2%200-2%201-1%202v1l-1%204c0%204%200%205%202%204l-1%202c-2%202-1%204%202%203l2%201h2l1-2%201-1%201-1%203-4c2-2%202-3%201-4v-3c0-2%202-3%202-1l1%201V54l1-3%202-8%201-3%201-2-1-2-1-1h1c2%200%201-3-1-7-1-2-2-3-3-2l-1-1%201-1%201-1-1-1c-2%201-3-1-2-2%202-3%200-5-2-4-3%201-4%200-2-1%203-1%201-4-2-4-2%200-2%200-1%203%200%203%200%203-2-1l-3-4c-2%200-2-6-1-7V1c-1-2-3-1-6%201-2%202-3%201-1-1%201-1%201-1-1-1s-3%200-2%201m77%206a311%20311%200%2000-3%208c0-7-1-5-2%203l-2-1-1-3v2a115%20115%200%20010%2011l2-1%202-3c1-4%201-5%201-2%200%202%200%202%202%201h1l-1%202-2%203-1%201-1%203-1%205c-1%202-3%2010-3%2016v11c1%201%201%201%202-1%200-2%201-2%205%202%205%204%205%205%206%2011v6c-1%201%203%2010%205%2012%202%200%202%201%202%203l2-2%201-2-1%203c0%202%200%203%201%202%202%200%202%200%201%201l2%203%203%205c2%204%203%204%204-3l1-5-1%206v7h7l6%201c3%201%204%200%205-2l4-3c2%200%203%202%201%207-1%204%201%207%205%207%207%202%208%202%207%204l1%204c3%202%202%205-1%207s-4%206-1%206v5c-1%203-1%203-3%201h-1l1%202%201%203v3c-2%201-2%202-2%204%201%201%200%202-2%203l-2%202-2%202c-3%203-3%205%200%205h2l2%201c2%200%202%200%200-2v-2c2%201%204%200%206-1l3-2%201%203%202%204c1%201%201%201-1%202-2%200-2%200%200%201h-1l-3%201c1%201%200%201-2%201-3%200-7%202-5%202l-2%201h-3c0-2-2-1-2%201h2c-1%202%201%205%203%204v1l1%202%202-1%201-2v1l2%201c1-1%202-1%202%201v11l-5-3c-8-3-9-4-8-5%202-1-1-8-3-9-2%200-4%203-5%207v2c2%200%202%200%201%205v6l3%206c2%202%208%208%2012%2010%202%201%205%200%205-2l2%201c1%201%202%202%203%201l5-2c2%200%203-1%203-6%200-4%200-4-2-2l-2%205c-1%203-2%204-5%201-2-2-2-5%201-6l2-2v-4c1-3%201-3%201-1v5c0%202%200%202%202-1l3-4v-70a4447%204447%200%20010-102V0h-10l-11%201h-1l-4-1-3%201-2%201-2-1-2-1c-2%200-3%201-3%202l-2%202V2c1-2%201-2-9-2l-10%201h-1l-5-1h-5l-1%207M53%207c1%202%200%202-6%203-2%201-2%201%201%201s7%203%207%206l2%201c1-1%203%200%205%201h2l2%202c1%202%201%202%203%201%201-2%200-4-2-4-1%201-2%200-2-1-1-2%200-4%202-4l1-1c0-1%2020-1%2024%201v-1c-1-1-4-2-12-2-9%200-11%200-12-2-2-2-2-2-4-1h-9l-1-1-1%201m166%209l-1%2017c0%2014%201%2015%203%2015l1%201c0%202%204%205%204%203v1c0%202%202%202%203-1%202-3%201-6%200-3-2%202-2%202-2%200-1-2%201-4%203-3l1%205c0%204%200%204%202%202%201-1%202-2%203-1v-1c-2-1-1-2%201-2%201%201%202%200%203-3l2-5-1-1c-1%201-1%201-1-1%201-2-2-8-3-6v2c1%200%201%201-1%202v2l1%202c-1%202-3%203-4%202h-1c0%201-1%202-2%201v-5c1-11%201-14-2-17l-3-2v2l-1%203-1-4c0-2%200-4-2-5l-2-2v2m-90%2045l-1%201-4%203-4%203-1%208c0%205%200%205-2%204-1-1-1-1-1%201l2%203c1%203%202%202%201-1%200-2%200-2%201%200l4%202c3%201%203%201%202%203l1%202h4l8%203c4%200%204%200%204-2l-3-1c-3%200-4-1-2-2h-1l-1-5c1-8%201-12-1-12l-2-5c-1-4-4-8-4-5m99%204l-2%203c-3%203-3%203-2%200%201-4-2-4-4%200-1%203-1%204%201%203%202%200%202%200%200%204l-1%206-1%202v2c1%202%205%200%203-1-1-1-1-2%201-2l3-6%203-6c2-5%202-6%200-6s-2%200-1%201m4%202v4l-2%202%202%202v3l1%202%202-1h1c1%201%202%201%205-2%204-4%204-5%200-8s-5-2-5%201c0%202%200%202-1%200l-1-2-1-1v-2l-1%202M75%2089l-1%203-1%201-1%201-1%202h1l2%206c-1%202-1%202-4%201l-3%201c1%202%200%202-2%202-3%200-3%200-1-1s2-1%200-1c-4%201-6-1-6-4l-1%201-1%201c0-2%200-2-2%200l-1%202-4-3-4-5-1-1-3-1h-2l2%202c2%202%202%202%200%201-3-1-2%200%205%205l7%206%202%202c2-1%202%2010-1%2021s-3%2011-5%2010v-2c2-1%202-2-1-4-3-3-3-3-3%202%200%206%200%207-3%207-2%200-2%200%200%202l4%202%202%202h1c3-4%2028%201%2026%205%200%202-5%202-8%201l-5-2-3-2c0-2-2-1-2%201l-5%204-2%203%202%201%201%204h-1l-3-1c-2%200-2%201%201%202l4%203c0%201%205%204%208%204%202%200%202%203%201%205l-1%201%202-1c2-2%206-3%209-1h2l-2-2c-4-1-6-3-4-5s4-8%203-10l2-2c2%200%203-1%202-2-1-3%201-1%203%203%202%203%202%204%203%203l1-1%202-1-2-1h-2c0-2%208%200%2011%202%201%201%202%202%203%201l2-1c2%200%201-1-2-3l-4-4-3-1h-6c-2%201-6-2-6-3%201-1-1-4-2-7-3-5-4-8-2-8v-2c-2-2-2-2-2%201v7l1%202c3%203%201%204-6%202l-8-2-4-2%201-2v-1l1-3%202-11%202-10%203%202%202%201%202-1c1-1%203-1%209%202v-1c-3-3-1-5%204-5%203%200%204%200%203-1s-1-1%202-1c7%202%2014%202%2013%201l-4-1c-5%200-17-2-16-3h-1l-2-1c0-2%201-2%204-2h5l-4-1c-3%200-4%200-4-3l1-2%201-1c-1-1%200-2%201-2l1-1c0-2-2-2-2-1-1%201-1%200-1-3v-4l-1%203m174%205c-3%204-4%209-2%208l2%201-1%201-2%201h-1c-1-3-4-1-4%201%201%204%203%206%205%205h3c0%203%204%201%204-2l1-3v-6c0-1%200-2-2-2v-5c-1-1-3%200-3%201m63%2033l-2%204c0%203%201%206%202%205l1%201%201%203%201-2v-3l1%202%201%205v5c-1%203-1%203-1%201%200-3-5-7-6-6l2%204%208%2012-2-1-2-1%201%204c0%202%203%201%204-1l1-1v1l1%201%201-1%201-2v-5l-2-3v4l-1%203-2-11c0-6-1-10-2-11l-3-5c0-4-1-4-3-2m-37%207c-6%204-7%208-2%207%202-1%202-1%201%201-3%202-3%205%200%203l-2%204-2%203%203%205c1%204%203%206%204%205l1%201-1%201v1c1%201%2013-1%2013-2h8l-2%201c-2%200-2%201-2%203v3l-1-3c-1-2-2-3-4-2l-7%201c-4%201-4%201-3%203%200%203%201%204%202%202h1c1%201%201%202-1%202s-3%200-4-3l-1-3-8%202-7%202%201%201-2%201-4%202c-2%202-2%203%202%204%202%201%207-3%205-4s-1-2%202-1c2%200%202%201%201%202l-1%203v3c0%202-1%203-3%203l-2%202v1c-1-2-2-1-2%201l-2%204-2%201h-1l-1%202v16c0%205%201%207%203%209l3%203%205-3%205-2%204-2%202-1%203-1c2-2%202-2-1-3h2c4%200%205%200%2010-4l6-4h2l2-1-2-2-1-1h-1l-3%201v-1l2-3%201-1%203-1-1-1h-2l-1-1c1-1%200-1-1-1l-5-3c-3-3-5-3-7-3s-2-4%201-6%204-3%204%200l1%201c1%200%202%201%202%203l3%202%203-1-1-1v-3h1l1%201v-3h2l-1-2c-2-2-1-6%201-5l2%201c2-1%202-5%201-5v-7c0-3%200-3-3-3l-4-2h1c4%202%205%201%205-6l-1-5-2%201%201-2c1%200%202-12%200-12l-1%202c0%201%200%202-1%201-1-2-2-1-2%202%200%202%200%202-1%200%200-3-2-2-2%201%200%202%200%202-1%200-1-3-1-3-1-1s0%202-1%200v-2l-5%203-5%202v-1l3-7c0-1-3%200-5%202m-54%207c-2%203-3%206-1%206l-1%203-3%205%202%205c1%200%203-5%202-6l1-2h2c1-1%202%200%202%201l1%201%205-7c-1-1-5%201-5%203v-5c0-7-1-8-5-4m83%202v2l1%202-2-1a870%20870%200%20010%2015c2%200%202-1%201-1-2-2-1-3%201-3l3%202%204%201c3%200%203%200%201-2v-3c3%200%202-3-3-8-5-7-4-6-6-4m-55%206c-7%201-8%202-8%207%200%203%200%204-1%203-1-2-1-2-4%203l-2%203v-2c4-7%205-14%203-14s-5%203-4%205l-2%202-3%201-3%202c-3%201-3%201-3%205%201%204%201%205%203%205l2-1h2c2%200%202%200%201-2%200-2%200-2%203%200%204%203%209%203%209%200%200-2%201-2%203-2%201%200%202-3%201-8%200-5%200-5%201-4h2l2-1-1%202v1l1%205c-1%203%200%204%201%204l1%201-1%201-1%203v2l3-2c0-2%201-11%203-14l1-3-2-2h-7m-63%203l-2%201h-1l-5%201-4-1%201%202c2%201%202%202%201%202-2%200%201%204%203%205h3c1-1%202-1%204%201h-1c-3%200-2%201%201%203s4%204%200%202h-2l-2%201-1-2c1-1%200-2-2-3l-3-1-1-2c-2-1-2-1-2%202%200%205%201%209%203%209h3l9%201h6c-2-2-2-2%200-1%202%200%202%200%201-2-3-3-2-4%200-1%202%201%203%202%205%201%203%200%203-1%200-3-2-1-3-1-3-8-1-6-9-11-11-7m147%2015v2l5%201%201%201-3%201h-1c-2-2-3-1-2%201l1%202h1l1%201%201%201h4l6%202c3%201%203%201%202-1-1-1-1-1%201-1%202%201%204-1%204-3l-2-1c-1%201-3%200-4-1l-3-2c-3%201-3%200-2-2%202-1%202-1%200-1s-3%200-2%201c0%202-3%201-6%200l-2-1m-123%2030l-2%202c-2%200-3%205-5%2018a51551%2051551%200%20000%2017l2%204c0%202%202%202%203%201h2c1%200%201%201-1%202v1l3%202c2%207%206%203%205-5v-5h-1l-9-1%202-2%206-11%201-2v-3c-2-1-3%200-3%202s0%202-1-1l-2-3-1-1%201-1c3%200%204-4%202-6v-2c1-1%201-4-1-6h-1m165%2025l2%203c2%202%202%202%201%203-2%202-2%202-1%203%202%202%205%202%206%200h2c2%201%204-1%204-4%201-3-5-4-6-2v-1l-2-1-3-1c-2-3-3-2-3%200m-152%2016h-3l-1%202-1%205c-1%203-1%203%201%203l1%202c-1%202%203%205%204%204l-1-2v-2c3-2%205-1%203%201-2%201-2%201%200%201l3-2v-2l-1-5-1-4-2-1h-2m-173%205c0%202%200%202-2%201l-9%203-1%201-2-1-1-1-1%201-1%202-1-1-1-1h-5c-4%200-4%202%200%203l1%201c-2%201-2%201%200%204%201%203%203%204%204%202h2c0%201%205-1%205-3s3-5%204-4l1-1%202-1%201%201-1%201-2%201-2%201c-2%201-2%201%200%202%202%202%203%202%203-1l1-1%201%201%202%201c2%200%204-4%203-6v-6c-1-1-1-1-1%201m340%2020l-2%202-2%201c0%202-3%204-5%203h-1v2l-1-2h-1c-3%202-2%203%200%203l-1%201c-3%202-4%201-4-2%201-3%201-3-2-3-2%200-2%200-1-1l2-1%201-2-2-2-1%201-1%201-2%201v2l2%205%203%204v3c1%201%200%201-1%201l-2-1-1-1v3l-2%202-1%203h12c7%200%2012%200%2011-1-2-1-4-3-4-5s0-2%201-1l2%201-1-2-1-2v-1l-1%201h-2c-1-2%200-2%203-6%203-3%204-4%205-3l1%202v-2h1l2-1-1-1-1-2-1-2-1%202m-78%201l1%201v3l-2%201-1%202v2l1%202-3-1c-2-1-2-1-2%201v2l-1%201%202%201c2-1%203%200%201%202v1l-2%203v1c2%200%204-1%204-3s0-2%201-1h8c1%200%204-2%204-4l-2-3c-2-3-3-4%200-4h1c0-2-4-5-6-5l-2-1c0-2-2-3-2-1m20%203v1c1%200%202%201%201%202l1%202c2-2%203%200%201%205l-4%204-1%201c0%204%200%204%206%204%204%200%206-1%206-2l3-1c2%200%202%200%201%201a1750%201750%200%20017%200l-4-2c-2%200-2%200-1-1%202%200%201-2-1-4s-2-2-1-3v-1h-1l-1-3c-1-1-1-1%201-1s2%200%201-1l-1-1-1-1-1%202h-1c-1-1-2%200-3%202l-2%201-1-3-2-2c0-1-2-1-2%201M24%20322c0%206%200%208%202%208l1-5v-5l2%203c2%205%203%205%205%200l2-4v5c0%205%200%206%202%206l1-8c0-7%200-8-2-8l-4%205-1%205-2-4-2-5-2-1c-2%200-2%201-2%208m34-7c-2%201-1%2015%201%2015l1-3c0-3%200-3%202-3%205%200%208-5%204-8-2-2-7-3-8-1m-37%2047l-2%201c-2%200-4%204-4%205l2-1c2-2%202-2%205-1l4%202-2-2c-3-2-2-3%203-3%203%200%204%200%203%201v1l1%201c0%201%201%202%203%201%203%200%203%200%202%202l-5%201h-6l-2%201%201%201-2%201c-2%200-4%201-4%203h1l2-1c2%200%202%200%201%201-2%200-1%202%201%202v-1h6c8%200%208%200%205%203h-5c-2-2-5-2-5%200l1%201c1-1%204%201%203%203%200%202%206-2%208-4%202-3%203-2%204%202l1%202c0-2%202-3%202%200l-2%202c-3%201-5%204-3%204l1-1h1l2-2h3l2%201-1-2c-1%200-1-1%201-2%201-1%201-1-1-1-1%201-2%201-2-1l-2-2h-1l2-2c2%200%206%203%205%204l3%201c2%200%203%200%202-1l-2-2v-2c-1%201-3%200-4-1l-3-1%202-2%201-1c-3%200-2-6%201-7%203%200%2010-3%208-3l-3-1c-2-2-30-2-32%200m45-1c-2%201-3%202-2%205l-1%202-6%202-3%201-2%201h4l3-1-1%205%201%202h1l2-3v-1c-2%201-2%200-2-2s4-3%205-1c0%201%201%202%202%201v-1c-2-1-2-3%200-3v-1c-2%200-3-1%200-3%201-1%201-1%201%201%200%203%206%202%2012%200%203-2%204-2%205-1h6l-1-3c0-1-7%200-11%202l-6%202c-4%200-4%200-4-2%201-2-1-3-3-2m54%200v1c3%200%202%202%200%204l-2%201h2c2-1%202%200%202%204l-1%204v5c0%203%200%203-2%202v1c0%203%200%203-2%203l-5%201c-1%200-2%200-2-2h-1c-1%202-1%202-11%202-12%200-9%201%204%201l12%201h1l3-1c3-1%202%202-2%203l-1%201c2%200%203%200%204%202l1%203v-3c0-1%200-2%202-1l1-1%202-2c2%200%202%200%201-1v-1c6-1%2012%200%2011%201h2c1%200%201%201-1%202l-2%203%204-2%202-3%203%202%202%201-1-2-1-1c0-2%201-2%205-1h6l-5-1c-5-2-5-2-5-6%200-2%200-3-1-2l-1%201v-1l-1-1c-2%200-2-1-1-3v-5l2-4c4-4%202-5-9-6l-9%201%201%201h3l-3%201c-2%200-2%200-1%201v2c-3%202-3%203-3-1l1-3h1c0-2-4-3-5-1m17%205l-2%202v2l2%201-1%203-2%202c1-1%202%200%202%201s-1%202-2%201l-1-1h-4l1-1%201-1c-1-1-2%200-4%202l-2%204v1c-2%202-1%204%201%204l5-1c2%200%206-1%208-3l1-9v-9l-3%202'%20fill='%23fafafa'%20fill-rule='evenodd'/%3e%3c/svg%3e"},"seo":{"src":"/static/2b5897d3dd0bc9b258bd2274fa0ade58/6050d/mcp-cover.png"}}},"authors":[{"authorsPage":true,"bio":"Hello everybody 👋 !  My name is Luke and I am the creator and owner of the spaceout.pl. Personally, I am a big geek with huge love for Star Wars, Marvel and DC comic books, Funk and 80s music. I take most of my design inspiration from offline experiences like going to art museums, galleries and working with other creative people on various projects. I also work with various Activist and NGO groups as a pro-bono designer and developer.\n","id":"f69d27c7-7f9a-5fbd-b05d-1a324fd10c0a","name":"Luke Celitan","featured":true,"social":[{"url":"https://www.facebook.com/spaceout/"},{"url":"https://twitter.com/spaceout.pl"},{"url":"https://www.instagram.com/spaceout.pl/"},{"url":"https://huggingface.co/MassivDash"},{"url":"https://bsky.app/profile/lukecelitan.bsky.social"}],"slug":"/authors/luke-celitan","avatar":{"small":{"base64":"data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAUABQDASIAAhEBAxEB/8QAGQABAAIDAAAAAAAAAAAAAAAAAAIFAQME/8QAFAEBAAAAAAAAAAAAAAAAAAAAAP/aAAwDAQACEAMQAAABvOTVgtERIAH/xAAaEAEBAQEAAwAAAAAAAAAAAAACAQMEABAS/9oACAEBAAEFAmoDjs0/Oq1a9kUzN+j7/8QAFBEBAAAAAAAAAAAAAAAAAAAAIP/aAAgBAwEBPwEf/8QAFBEBAAAAAAAAAAAAAAAAAAAAIP/aAAgBAgEBPwEf/8QAHhAAAgEDBQAAAAAAAAAAAAAAAQIAAxESECAxMlH/2gAIAQEABj8CLHgTGqmBPXSlTANsrmKyXLK0B92f/8QAHhABAAECBwAAAAAAAAAAAAAAAREAIRAgMUFhcdH/2gAIAQEAAT8hUmKFDbjke4JaIOG01Fthsd0YugnJ/9oADAMBAAIAAwAAABDzzzz/xAAUEQEAAAAAAAAAAAAAAAAAAAAg/9oACAEDAQE/EB//xAAUEQEAAAAAAAAAAAAAAAAAAAAg/9oACAECAQE/EB//xAAfEAEBAAEDBQEAAAAAAAAAAAABETEAQWEQICFxgZH/2gAIAQEAAT8QhmFXf0c6oSU1s8jwz0W5QpAeFf1+Gp7aimCmBvvoV0CRyUvZ/9k=","aspectRatio":1,"src":"/static/4f53b0980dc97328dd1294bbc374fd0e/fa1ea/spaceghost.jpg","srcSet":"/static/4f53b0980dc97328dd1294bbc374fd0e/afb2b/spaceghost.jpg 13w,\n/static/4f53b0980dc97328dd1294bbc374fd0e/7c20e/spaceghost.jpg 25w,\n/static/4f53b0980dc97328dd1294bbc374fd0e/fa1ea/spaceghost.jpg 50w,\n/static/4f53b0980dc97328dd1294bbc374fd0e/03612/spaceghost.jpg 75w,\n/static/4f53b0980dc97328dd1294bbc374fd0e/61cdf/spaceghost.jpg 100w,\n/static/4f53b0980dc97328dd1294bbc374fd0e/442ab/spaceghost.jpg 305w","srcWebp":"/static/4f53b0980dc97328dd1294bbc374fd0e/e7b2c/spaceghost.webp","srcSetWebp":"/static/4f53b0980dc97328dd1294bbc374fd0e/58718/spaceghost.webp 13w,\n/static/4f53b0980dc97328dd1294bbc374fd0e/74aad/spaceghost.webp 25w,\n/static/4f53b0980dc97328dd1294bbc374fd0e/e7b2c/spaceghost.webp 50w,\n/static/4f53b0980dc97328dd1294bbc374fd0e/ed320/spaceghost.webp 75w,\n/static/4f53b0980dc97328dd1294bbc374fd0e/66016/spaceghost.webp 100w,\n/static/4f53b0980dc97328dd1294bbc374fd0e/85828/spaceghost.webp 305w","sizes":"(max-width: 50px) 100vw, 50px","tracedSVG":"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='400'%20height='400'%20viewBox='0%200%20400%20400'%20preserveAspectRatio='none'%3e%3cpath%20d='M189%2065A519%20519%200%200065%20299c-5%2020-5%2018%203%2015%208-4%2039-10%2057-12%2011-1%2010%200%2010-11%200-29%206-103%2010-121%204-21%2016-36%2033-43%206-2%208-2%2020-2%2018%200%2024%202%2036%2013%2020%2021%2025%2046%2029%20138l2%2026h10a267%20267%200%200168%2014l-6-26A607%20607%200%2000218%2071c-10-10-15-15-18-15-2%200-6%203-11%209m47%20129c-14%208-26%2015-26%2017%200%203%2018%205%2024%202%205-3%209-10%209-18%200-5%200-5-7-1m-82%201l1%205c1%2011%209%2018%2020%2017%207-1%2013-3%2013-5s-32-19-34-17'%20fill='%23fafafa'%20fill-rule='evenodd'/%3e%3c/svg%3e"},"medium":{"base64":"data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAUABQDASIAAhEBAxEB/8QAGQABAAIDAAAAAAAAAAAAAAAAAAIFAQME/8QAFAEBAAAAAAAAAAAAAAAAAAAAAP/aAAwDAQACEAMQAAABvOTVgtERIAH/xAAaEAEBAQEAAwAAAAAAAAAAAAACAQMEABAS/9oACAEBAAEFAmoDjs0/Oq1a9kUzN+j7/8QAFBEBAAAAAAAAAAAAAAAAAAAAIP/aAAgBAwEBPwEf/8QAFBEBAAAAAAAAAAAAAAAAAAAAIP/aAAgBAgEBPwEf/8QAHhAAAgEDBQAAAAAAAAAAAAAAAQIAAxESECAxMlH/2gAIAQEABj8CLHgTGqmBPXSlTANsrmKyXLK0B92f/8QAHhABAAECBwAAAAAAAAAAAAAAAREAIRAgMUFhcdH/2gAIAQEAAT8hUmKFDbjke4JaIOG01Fthsd0YugnJ/9oADAMBAAIAAwAAABDzzzz/xAAUEQEAAAAAAAAAAAAAAAAAAAAg/9oACAEDAQE/EB//xAAUEQEAAAAAAAAAAAAAAAAAAAAg/9oACAECAQE/EB//xAAfEAEBAAEDBQEAAAAAAAAAAAABETEAQWEQICFxgZH/2gAIAQEAAT8QhmFXf0c6oSU1s8jwz0W5QpAeFf1+Gp7aimCmBvvoV0CRyUvZ/9k=","aspectRatio":1,"src":"/static/4f53b0980dc97328dd1294bbc374fd0e/61cdf/spaceghost.jpg","srcSet":"/static/4f53b0980dc97328dd1294bbc374fd0e/7c20e/spaceghost.jpg 25w,\n/static/4f53b0980dc97328dd1294bbc374fd0e/fa1ea/spaceghost.jpg 50w,\n/static/4f53b0980dc97328dd1294bbc374fd0e/61cdf/spaceghost.jpg 100w,\n/static/4f53b0980dc97328dd1294bbc374fd0e/59538/spaceghost.jpg 150w,\n/static/4f53b0980dc97328dd1294bbc374fd0e/fd013/spaceghost.jpg 200w,\n/static/4f53b0980dc97328dd1294bbc374fd0e/442ab/spaceghost.jpg 305w","srcWebp":"/static/4f53b0980dc97328dd1294bbc374fd0e/66016/spaceghost.webp","srcSetWebp":"/static/4f53b0980dc97328dd1294bbc374fd0e/74aad/spaceghost.webp 25w,\n/static/4f53b0980dc97328dd1294bbc374fd0e/e7b2c/spaceghost.webp 50w,\n/static/4f53b0980dc97328dd1294bbc374fd0e/66016/spaceghost.webp 100w,\n/static/4f53b0980dc97328dd1294bbc374fd0e/d9b14/spaceghost.webp 150w,\n/static/4f53b0980dc97328dd1294bbc374fd0e/6b183/spaceghost.webp 200w,\n/static/4f53b0980dc97328dd1294bbc374fd0e/85828/spaceghost.webp 305w","sizes":"(max-width: 100px) 100vw, 100px","tracedSVG":"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='400'%20height='400'%20viewBox='0%200%20400%20400'%20preserveAspectRatio='none'%3e%3cpath%20d='M189%2065A519%20519%200%200065%20299c-5%2020-5%2018%203%2015%208-4%2039-10%2057-12%2011-1%2010%200%2010-11%200-29%206-103%2010-121%204-21%2016-36%2033-43%206-2%208-2%2020-2%2018%200%2024%202%2036%2013%2020%2021%2025%2046%2029%20138l2%2026h10a267%20267%200%200168%2014l-6-26A607%20607%200%2000218%2071c-10-10-15-15-18-15-2%200-6%203-11%209m47%20129c-14%208-26%2015-26%2017%200%203%2018%205%2024%202%205-3%209-10%209-18%200-5%200-5-7-1m-82%201l1%205c1%2011%209%2018%2020%2017%207-1%2013-3%2013-5s-32-19-34-17'%20fill='%23fafafa'%20fill-rule='evenodd'/%3e%3c/svg%3e"},"large":{"base64":"data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAUABQDASIAAhEBAxEB/8QAGQABAAIDAAAAAAAAAAAAAAAAAAIFAQME/8QAFAEBAAAAAAAAAAAAAAAAAAAAAP/aAAwDAQACEAMQAAABvOTVgtERIAH/xAAaEAEBAQEAAwAAAAAAAAAAAAACAQMEABAS/9oACAEBAAEFAmoDjs0/Oq1a9kUzN+j7/8QAFBEBAAAAAAAAAAAAAAAAAAAAIP/aAAgBAwEBPwEf/8QAFBEBAAAAAAAAAAAAAAAAAAAAIP/aAAgBAgEBPwEf/8QAHhAAAgEDBQAAAAAAAAAAAAAAAQIAAxESECAxMlH/2gAIAQEABj8CLHgTGqmBPXSlTANsrmKyXLK0B92f/8QAHhABAAECBwAAAAAAAAAAAAAAAREAIRAgMUFhcdH/2gAIAQEAAT8hUmKFDbjke4JaIOG01Fthsd0YugnJ/9oADAMBAAIAAwAAABDzzzz/xAAUEQEAAAAAAAAAAAAAAAAAAAAg/9oACAEDAQE/EB//xAAUEQEAAAAAAAAAAAAAAAAAAAAg/9oACAECAQE/EB//xAAfEAEBAAEDBQEAAAAAAAAAAAABETEAQWEQICFxgZH/2gAIAQEAAT8QhmFXf0c6oSU1s8jwz0W5QpAeFf1+Gp7aimCmBvvoV0CRyUvZ/9k=","aspectRatio":1,"src":"/static/4f53b0980dc97328dd1294bbc374fd0e/442ab/spaceghost.jpg","srcSet":"/static/4f53b0980dc97328dd1294bbc374fd0e/a2637/spaceghost.jpg 82w,\n/static/4f53b0980dc97328dd1294bbc374fd0e/15203/spaceghost.jpg 164w,\n/static/4f53b0980dc97328dd1294bbc374fd0e/442ab/spaceghost.jpg 305w","srcWebp":"/static/4f53b0980dc97328dd1294bbc374fd0e/85828/spaceghost.webp","srcSetWebp":"/static/4f53b0980dc97328dd1294bbc374fd0e/2d087/spaceghost.webp 82w,\n/static/4f53b0980dc97328dd1294bbc374fd0e/29d87/spaceghost.webp 164w,\n/static/4f53b0980dc97328dd1294bbc374fd0e/85828/spaceghost.webp 305w","sizes":"(max-width: 305px) 100vw, 305px","tracedSVG":"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='400'%20height='400'%20viewBox='0%200%20400%20400'%20preserveAspectRatio='none'%3e%3cpath%20d='M189%2065A519%20519%200%200065%20299c-5%2020-5%2018%203%2015%208-4%2039-10%2057-12%2011-1%2010%200%2010-11%200-29%206-103%2010-121%204-21%2016-36%2033-43%206-2%208-2%2020-2%2018%200%2024%202%2036%2013%2020%2021%2025%2046%2029%20138l2%2026h10a267%20267%200%200168%2014l-6-26A607%20607%200%2000218%2071c-10-10-15-15-18-15-2%200-6%203-11%209m47%20129c-14%208-26%2015-26%2017%200%203%2018%205%2024%202%205-3%209-10%209-18%200-5%200-5-7-1m-82%201l1%205c1%2011%209%2018%2020%2017%207-1%2013-3%2013-5s-32-19-34-17'%20fill='%23fafafa'%20fill-rule='evenodd'/%3e%3c/svg%3e"}}}],"basePath":"/","tech":["AI","TS"],"category":"Post","slug":"/mcp-servers","id":"20cd380e-b562-54ab-977b-7227a1fa957d","title":"MCP Servers","appDescription":null,"mailchimp":false,"next":[{"id":"205d0f58-c767-5ce1-8525-cfc99a7ee765","slug":"/vector-databases-from-layman-to-professional","secret":false,"title":"Vector Databases From Layman to Professional","author":"Luke Celitan","date":"November 26th, 2025","dateForSEO":"2025-11-26T00:00:00.000Z","timeToRead":7,"excerpt":"Vector Databases and the Modern Data Stack: From Layman to Professional (With Netflix Case Study and Lakehouse Integration) 1. Introduction…","subscription":true,"body":"var _excluded = [\"components\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n/* @jsxRuntime classic */\n/* @jsx mdx */\n\nvar _frontmatter = {\n  \"title\": \"Vector Databases From Layman to Professional\",\n  \"excerpt\": null,\n  \"date\": \"2025-11-26T00:00:00.000Z\",\n  \"hero\": \"vectrordb-cover.png\",\n  \"author\": \"Luke Celitan\",\n  \"category\": \"Post\",\n  \"tech\": [\"Rust\", \"VectorDatabase\"]\n};\nvar layoutProps = {\n  _frontmatter: _frontmatter\n};\nvar MDXLayout = \"wrapper\";\nreturn function MDXContent(_ref) {\n  var components = _ref.components,\n    props = _objectWithoutProperties(_ref, _excluded);\n  return mdx(MDXLayout, _extends({}, layoutProps, props, {\n    components: components,\n    mdxType: \"MDXLayout\"\n  }), mdx(\"h1\", {\n    \"id\": \"vector-databases-and-the-modern-data-stack-from-layman-to-professional\"\n  }, \"Vector Databases and the Modern Data Stack: From Layman to Professional\"), mdx(\"p\", null, mdx(\"em\", {\n    parentName: \"p\"\n  }, \"(With Netflix Case Study and Lakehouse Integration)\")), mdx(\"h2\", {\n    \"id\": \"1-introduction-to-vector-databases\"\n  }, \"1. Introduction to Vector Databases\"), mdx(\"h3\", {\n    \"id\": \"why-we-need-advanced-search-in-the-ai-era\"\n  }, \"Why We Need Advanced Search in the AI Era\"), mdx(\"p\", null, \"Every day, organizations generate huge volumes of \", mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"unstructured data\"), \"\\u2014text, images, audio, video, chat logs, and sensor readings. Traditional relational or keyword-based search systems fail to grasp intent and semantics.  \"), mdx(\"blockquote\", null, mdx(\"p\", {\n    parentName: \"blockquote\"\n  }, \"When someone searches \\u201Csports cars,\\u201D the expectation is logical\\u2014results should include Ferraris and Porsches, not just any text containing the words \\u201Csports\\u201D or \\u201Ccars.\\u201D\")), mdx(\"p\", null, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"Vector databases\"), \" make such semantics-aware retrieval possible. They convert data into high-dimensional numeric vectors (embeddings), enabling systems that truly \\u201Cunderstand\\u201D context. These embeddings power \", mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"semantic search\"), \", \", mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"recommendation systems\"), \", and \", mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"retrieval-augmented generation (RAG)\"), \" for large language models (LLMs).\"), mdx(\"h3\", {\n    \"id\": \"from-relational-to-vector-databases\"\n  }, \"From Relational to Vector Databases\"), mdx(\"p\", null, \"Relational databases handle structured, predictable data well but struggle with multimedia and context-rich content.\", mdx(\"br\", {\n    parentName: \"p\"\n  }), \"\\n\", \"When AI systems began encoding non-text data (images, audio) into continuous vector spaces, traditional indexing methods (\", mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"like *B-trees\"), \") reached their natural limits.  \"), mdx(\"p\", null, \"*\", mdx(\"em\", {\n    parentName: \"p\"\n  }, \"B\\u2011trees are a way for databases to keep information in order so that searches, inserts, and deletes happen quickly \\u2014 kind of like a super\\u2011efficient alphabetized filing cabinet.\\nThey\\u2019re designed for structured, exact\\u2011match data (like numbers, names, or IDs), not for fuzzy, high\\u2011dimensional relationships like AI embeddings. B\\u2011trees are great when you need to find an exact number or value (e.g., \\u201Cuser ID 105\\u201D).\\nBut AI embeddings live in thousands of numerical dimensions, where we care about closeness (semantic similarity), not exact matches. A B\\u2011tree can\\u2019t easily navigate that kind of continuous, high\\u2011dimensional space \\u2014 which is why vector indexes (like HNSW or IVF) replaced them for semantic search.\")), mdx(\"p\", null, \"Enter \", mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"vector databases\"), \"\\u2014storage engines built for \", mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"similarity search\"), \" across embedding spaces.\"), mdx(\"p\", null, \"Embedding models transform multimodal data into vectors positioned such that \", mdx(\"em\", {\n    parentName: \"p\"\n  }, \"semantic similarity\"), \" equals \", mdx(\"em\", {\n    parentName: \"p\"\n  }, \"geometric closeness\"), \". This simple but powerful idea revolutionized how we retrieve and connect information.\"), mdx(\"h2\", {\n    \"id\": \"2-understanding-embeddings\"\n  }, \"2. Understanding Embeddings\"), mdx(WordEmbeddingCanvas, {\n    mdxType: \"WordEmbeddingCanvas\"\n  }), mdx(\"h3\", {\n    \"id\": \"whats-a-vector-embedding\"\n  }, \"What\\u2019s a Vector Embedding?\"), mdx(\"p\", null, \"Embeddings are numerical arrays that capture the conceptual meaning of data.\"), mdx(\"table\", null, mdx(\"thead\", {\n    parentName: \"table\"\n  }, mdx(\"tr\", {\n    parentName: \"thead\"\n  }, mdx(\"th\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Example\"), mdx(\"th\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Numeric Vector (simplified)\"))), mdx(\"tbody\", {\n    parentName: \"table\"\n  }, mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"\\u201Cman\\u201D\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"[-0.30, 0.85, 0.45]\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"\\u201Cwoman\\u201D\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"[0.30, 0.48, 0.29]\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"\\u201Cking\\u201D\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"[0.20, 0.72, 0.35]\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"\\u201Cqueen\\u201D\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"[0.89, 0.41, 0.20]\")))), mdx(\"p\", null, \"Because both words are semantically similar, their vectors are close together in multidimensional space.\"), mdx(\"h3\", {\n    \"id\": \"how-embedding-models-work\"\n  }, \"How Embedding Models Work\"), mdx(\"p\", null, \"Embedding models encode text, image, or audio into consistent vector spaces.\", mdx(\"br\", {\n    parentName: \"p\"\n  }), \"\\n\", \"These are central to AI assistants, search engines, and contextual retrieval pipelines.\"), mdx(\"p\", null, \"Core process:\"), mdx(\"ol\", null, mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Data is chunked and converted into embeddings.\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Stored with metadata in a vector database.\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"User queries are embedded and compared using similarity search.\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Relevant vectors are retrieved and used as enriched input for LLMs.\")), mdx(\"table\", null, mdx(\"thead\", {\n    parentName: \"table\"\n  }, mdx(\"tr\", {\n    parentName: \"thead\"\n  }, mdx(\"th\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Category\"), mdx(\"th\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Common Implementations\"))), mdx(\"tbody\", {\n    parentName: \"table\"\n  }, mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Embedding Models\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"OpenAI, SentenceTransformers, Cohere\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Frameworks\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"LangChain, LlamaIndex\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Vector DBs\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Milvus, Pinecone, Weaviate\")))), mdx(\"h3\", {\n    \"id\": \"similarity-metrics\"\n  }, \"Similarity Metrics\"), mdx(\"p\", null, \"To measure semantic closeness, vector databases rely on mathematical distance metrics.\"), mdx(\"table\", null, mdx(\"thead\", {\n    parentName: \"table\"\n  }, mdx(\"tr\", {\n    parentName: \"thead\"\n  }, mdx(\"th\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Metric\"), mdx(\"th\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Description\"), mdx(\"th\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Common Use\"))), mdx(\"tbody\", {\n    parentName: \"table\"\n  }, mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Cosine Similarity\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Measures angle between vectors\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Text data\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Euclidean Distance\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Straight-line distance\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Dense vectors\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Manhattan Distance\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Sum of absolute differences\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Sparse or high-dimensional data\")))), mdx(\"p\", null, \"Example of Rust language implementation of cosine similarity*\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-rust\"\n  }, \"fn cosine_similarity(a: &Vec<f32>, b: &Vec<f32>) -> f32 {\\n    let dot: f32 = a.iter().zip(b.iter()).map(|(x, y)| x * y).sum();\\n    let norm_a = (a.iter().map(|x| x.powi(2)).sum::<f32>()).sqrt();\\n    let norm_b = (b.iter().map(|x| x.powi(2)).sum::<f32>()).sqrt();\\n    dot / (norm_a * norm_b)\\n}\\n\")), mdx(\"h2\", {\n    \"id\": \"3-architecture--operation\"\n  }, \"3. Architecture & Operation\"), mdx(\"h3\", {\n    \"id\": \"typical-vector-database-architecture\"\n  }, \"Typical Vector Database Architecture\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\"\n  }, \"+---------------------------------------------+\\n| Client/API                                  |\\n|---------------------------------------------|\\n| Service Layer   \\u2192 Auth, routing, logging     |\\n| Query Layer     \\u2192 Parsing, optimization      |\\n| Index Layer     \\u2192 ANN, graph-based search    |\\n| Storage Layer   \\u2192 Metadata + embeddings      |\\n+---------------------------------------------+\\n\")), mdx(\"p\", null, \"Each layer plays a role\\u2014clients send queries, the service layer handles auth and routing, the query layer optimizes search execution, and the index layer retrieves relevant vectors efficiently.\"), mdx(\"h3\", {\n    \"id\": \"32-query-workflow\"\n  }, \"3.2 Query Workflow\"), mdx(\"ol\", null, mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"User sends an input (text or image).  \"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Embedding model converts it into a numeric vector.  \"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"The index retrieves top-K similar vectors.  \"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Matching documents are returned or summarized through an AI model.\")), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\"\n  }, \"struct VectorDB {\\n    vectors: Vec<(Vec<f32>, String)>,\\n}\\n\\nimpl VectorDB {\\n    fn search(&self, query: &Vec<f32>, top_k: usize) -> Vec<String> {\\n        let mut ranked: Vec<(f32, &String)> = self.vectors\\n            .iter()\\n            .map(|(vec, name)| (cosine_similarity(query, vec), name))\\n            .collect();\\n        ranked.sort_by(|a, b| b.0.partial_cmp(&a.0).unwrap());\\n        ranked.into_iter().take(top_k).map(|(_, n)| n.clone()).collect()\\n    }\\n}\\n\")), mdx(\"h3\", {\n    \"id\": \"33-gpu-acceleration\"\n  }, \"3.3 GPU Acceleration\"), mdx(\"p\", null, \"NVIDIA\\u2019s \", mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"CAGRA\"), \" algorithm, integrated via the \", mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"RAPIDS cuVS\"), \" library, accelerates vector search using thousands of GPU cores.\", mdx(\"br\", {\n    parentName: \"p\"\n  }), \"\\n\", \"Index building that once took days can now complete in hours while sustaining real-time inference throughput.\"), mdx(\"h2\", {\n    \"id\": \"4-benefits-of-vector-databases\"\n  }, \"4. Benefits of Vector Databases\"), mdx(\"table\", null, mdx(\"thead\", {\n    parentName: \"table\"\n  }, mdx(\"tr\", {\n    parentName: \"thead\"\n  }, mdx(\"th\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Advantage\"), mdx(\"th\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Description\"))), mdx(\"tbody\", {\n    parentName: \"table\"\n  }, mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Semantic Search\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Understands meaning, not just keywords\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Scalability\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Handles billions of embeddings efficiently\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"GPU Acceleration\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Enables low-latency, high-QPS workloads\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Hybrid Search\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Combines dense vector and keyword search\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Fault Tolerance\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Replication and partitioning ensure resilience\")))), mdx(\"h2\", {\n    \"id\": \"5-popular-use-cases\"\n  }, \"5. Popular Use Cases\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"Natural Language Processing:\"), \" Contextual document retrieval, legal search  \"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"Computer Vision:\"), \" Image similarity, content moderation  \"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"Recommendation Systems:\"), \" \\u201CUsers who liked this also liked\\u2026\\u201D logic  \"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"Scientific Research:\"), \" Genomic sequence comparison  \"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"Chatbots:\"), \" Retrieval-augmented, grounded responses  \")), mdx(\"h2\", {\n    \"id\": \"6-indexing--search-algorithms\"\n  }, \"6. Indexing & Search Algorithms\"), mdx(\"h3\", {\n    \"id\": \"graph-based-indexing\"\n  }, \"Graph-Based Indexing\"), mdx(\"p\", null, \"Graph-based methods like \", mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"HNSW\"), \" (Hierarchical Navigable Small World) and \", mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"CAGRA\"), \" (GPU-parallelized) efficiently locate nearest neighbors through layered traversal graphs.\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\"\n  }, \"Query \\u2192 Node 1 \\u2192 Node 2/3 ... \\u2192 Closest Neighbors\\n\")), mdx(\"h3\", {\n    \"id\": \"quantization-and-compression\"\n  }, \"Quantization and Compression\"), mdx(\"p\", null, \"Quantization and compression are techniques that shrink the size of stored embeddings while keeping them usable for similarity search. The core idea is to replace full\\u2011precision floating\\u2011point numbers with smaller, discrete representations \\u2014 a bit like rounding \\u2014 but done in a far smarter, statistically aware way.  \"), mdx(\"p\", null, \"Instead of simple decimal rounding (e.g., \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"0.12345 \\u2192 0.12\"), \"), vector databases use learned mappings or codebooks so the reduced\\u2011precision vectors preserve their original semantic relationships. This greatly reduces \", mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"memory footprint\"), \", \", mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"disk usage\"), \", and \", mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"search latency\"), \", often with negligible loss in accuracy.\"), mdx(\"table\", null, mdx(\"thead\", {\n    parentName: \"table\"\n  }, mdx(\"tr\", {\n    parentName: \"thead\"\n  }, mdx(\"th\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Method\"), mdx(\"th\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Description\"), mdx(\"th\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Benefit\"))), mdx(\"tbody\", {\n    parentName: \"table\"\n  }, mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, mdx(\"strong\", {\n    parentName: \"td\"\n  }, \"Product Quantization (PQ)\")), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Splits each vector into smaller subspaces (chunks) and replaces each chunk with the index of its nearest centroid from a trained \", mdx(\"em\", {\n    parentName: \"td\"\n  }, \"codebook\"), \". Only these compact codes are stored, allowing rapid lookup via centroid tables.\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Dramatically cuts storage needs and speeds up approximate nearest\\u2011neighbor searches on massive datasets.\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, mdx(\"strong\", {\n    parentName: \"td\"\n  }, \"Scalar Quantization (SQ)\")), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Compresses each numeric element of a vector into an integer (often 8\\u2011bit), using scaling and mapping rules to assign the closest available discrete value. Keeps the relationships between vectors close to their original form while storing far less data.\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Reduces memory by up to 75% per vector with minimal impact on similarity accuracy.\")))), mdx(\"p\", null, \"By applying PQ or SQ, systems effectively perform \", mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"precision\\u2011reduction with meaning preservation\"), \", making billion\\u2011scale vector collections practical for real\\u2011time AI workloads.\"), mdx(\"h3\", {\n    \"id\": \"clustering-and-organization\"\n  }, \"Clustering and Organization\"), mdx(\"p\", null, \"Clustering groups similar vectors to accelerate search speed using methods like \", mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"K-means\"), \", \", mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"DBSCAN\"), \", and \", mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"HDBSCAN\"), \".\", mdx(\"br\", {\n    parentName: \"p\"\n  }), \"\\n\", \"Clusters act as semantic \\u201Cneighborhoods\\u201D for efficient query routing.\"), mdx(\"h2\", {\n    \"id\": \"7-advanced-features\"\n  }, \"7. Advanced Features\"), mdx(\"table\", null, mdx(\"thead\", {\n    parentName: \"table\"\n  }, mdx(\"tr\", {\n    parentName: \"thead\"\n  }, mdx(\"th\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Capability\"), mdx(\"th\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Function\"))), mdx(\"tbody\", {\n    parentName: \"table\"\n  }, mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Filter queries\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Combine vector similarity with metadata filters\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Hybrid search\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Merge semantic (dense) and keyword (sparse) results\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Multimodal search\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Cross-domain matching\\u2014text \\u2194 image\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Query expansion\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Include synonyms and related terms automatically\")))), mdx(\"h2\", {\n    \"id\": \"8-scaling--optimization\"\n  }, \"8. Scaling & Optimization\"), mdx(\"h3\", {\n    \"id\": \"gpu-acceleration\"\n  }, \"GPU Acceleration\"), mdx(\"p\", null, \"Using \", mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"RAPIDS cuVS\"), \" and CUDA-enabled infrastructure lowers query latency dramatically. Parallel tensor-core computations power dense retrieval at scale.\"), mdx(\"h3\", {\n    \"id\": \"scaling-strategies\"\n  }, \"Scaling Strategies\"), mdx(\"table\", null, mdx(\"thead\", {\n    parentName: \"table\"\n  }, mdx(\"tr\", {\n    parentName: \"thead\"\n  }, mdx(\"th\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Strategy\"), mdx(\"th\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Description\"))), mdx(\"tbody\", {\n    parentName: \"table\"\n  }, mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Vertical Scaling\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Add more powerful GPUs/CPUs\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Horizontal Scaling\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Distribute data and load across nodes\")))), mdx(\"h3\", {\n    \"id\": \"efficiency-tactics\"\n  }, \"Efficiency Tactics\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Use quantization and compression  \"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Cache frequent queries  \"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Employ disk-based indexing to control memory cost  \")), mdx(\"h2\", {\n    \"id\": \"9-netflix-and-beyond-real-world-impact\"\n  }, \"9. Netflix and Beyond: Real-World Impact\"), mdx(\"p\", null, \"As AI applications become more sophisticated, the demands on \", mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"vector databases\"), \" are rising fast. Modern systems must balance \", mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"performance, accuracy, scalability, and cost-effectiveness\"), \" while integrating seamlessly with the broader AI ecosystem. For enterprises deploying AI at production scale, understanding and leveraging vector database technology is not just technical\\u2014it\\u2019s strategic.  \"), mdx(\"h3\", {\n    \"id\": \"netflix-studio-search-a-federated-vector-powered-architecture\"\n  }, \"Netflix Studio Search: A Federated Vector-Powered Architecture\"), mdx(\"p\", null, \"Over the past few years, \", mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"Netflix Content Engineering\"), \" transitioned many of its services toward a \", mdx(\"em\", {\n    parentName: \"p\"\n  }, \"federated GraphQL platform\"), \". This approach allows separate domain teams to independently build and operate their own \", mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"Domain Graph Services (DGS)\"), \" while connecting their data under a single unified schema.  \"), mdx(\"p\", null, \"Imagine three main entities in this federated graph:  \"), mdx(\"table\", null, mdx(\"thead\", {\n    parentName: \"table\"\n  }, mdx(\"tr\", {\n    parentName: \"thead\"\n  }, mdx(\"th\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Entity\"), mdx(\"th\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Description\"))), mdx(\"tbody\", {\n    parentName: \"table\"\n  }, mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, mdx(\"strong\", {\n    parentName: \"td\"\n  }, \"Movie\")), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Represents titles (shows, films, shorts, etc.)\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, mdx(\"strong\", {\n    parentName: \"td\"\n  }, \"Production\")), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Tracks the studio processes behind each film\\u2014vendors, shooting locations, logistics\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, mdx(\"strong\", {\n    parentName: \"td\"\n  }, \"Talent\")), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Represents the people\\u2014actors, directors, crew\\u2014associated with productions\")))), mdx(\"p\", null, \"A developer might run a query such as: \\u201CFind all movies currently in production where \", mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"Ryan Reynolds\"), \" is acting.\\u201D Each piece of that data lives in separate DGSs and must be fetched, filtered, and correlatively linked across service boundaries.  \"), mdx(\"p\", null, \"To make large-scale, cross-domain searching feasible, Netflix built \", mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"Studio Search\"), \", a platform capable of indexing and semantically searching portions of the federated graph. Originally built on \", mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"Elasticsearch\"), \", Studio Search combines metadata events, domain schemas, and federated GraphQL definitions to construct an intelligent subgraph index that supports contextual queries.  \"), mdx(\"h3\", {\n    \"id\": \"the-role-of-vector-databases-in-studio-search\"\n  }, \"The Role of Vector Databases in Studio Search\"), mdx(\"p\", null, \"While the early prototypes of Studio Search relied heavily on text-based search (via Elasticsearch analyzers), newer iterations explore the \", mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"integration of vector representations\"), \" for semantic indexing. By embedding entities like titles, talent names, or production descriptions as numerical vectors, Netflix can improve lookup accuracy and enable fuzzy, \", mdx(\"em\", {\n    parentName: \"p\"\n  }, \"meaning-based retrieval\"), \".  \"), mdx(\"p\", null, \"This step moves Studio Search closer to the architectures seen in modern \", mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"vector databases (Milvus, LanceDB, Weaviate)\"), \" \\u2014 turning the graph itself into a \", mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"semantic knowledge space\"), \". Rather than matching literal keywords, the system compares meaning, context, and relatedness between entities across domains.  \"), mdx(\"p\", null, \"Embedding pipelines at Netflix employ \", mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"Change Data Capture (CDC)\"), \" streams and GraphQL event triggers to update the index. Each time an entity changes (e.g., a production update, talent addition), an event triggers a data re-fetch, and the embedding vectors for affected documents are recalculated and replaced in near real-time.  \"), mdx(\"h3\", {\n    \"id\": \"architecture-overview\"\n  }, \"Architecture Overview\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\"\n  }, \"Studio Apps \\u2192 Data Mesh (Kafka Streams) \\u2192 GraphQL Processor \\u2192 Federated Gateway \\u2192 Vector/Elasticsearch Sink \\u2192 Search Index  \\n\")), mdx(\"p\", null, \"Netflix combines stream processing (\", mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"Apache Flink\"), \") with its federated GraphQL queries to continuously enrich subgraph data and feed it into the indexing layer. As adoption increased, the team automated index provisioning using configuration-driven pipelines defined through simple YAML schemas \\u2014 dramatically simplifying scaling.  \"), mdx(\"h3\", {\n    \"id\": \"reverse-lookups-and-relationship-awareness\"\n  }, \"Reverse Lookups and Relationship Awareness\"), mdx(\"p\", null, \"When related entities such as Production or Talent change, \", mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"reverse lookups\"), \" ensure freshness by querying for all affected Movies and triggering updates on those vectors. This mirrors techniques used in \", mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"vector search graphs\"), \", where connections between vectors are dynamically recalculated to reflect real-world data evolution.  \"), mdx(\"p\", null, \"By leveraging their existing \", mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"Data Mesh\"), \", Netflix implemented systems capable of precise, high-throughput updates that maintain semantic consistency among millions of indexed entities.  \"), mdx(\"h3\", {\n    \"id\": \"querying-with-studio-search-dsl\"\n  }, \"Querying with Studio Search DSL\"), mdx(\"p\", null, \"Netflix engineered its own custom \", mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"search DSL\"), \", similar to SQL, that abstracts the complexity of constructing Elasticsearch (or vector database) queries. Complex filters such as:  \"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\"\n  }, \"(genre == 'comedy') AND (country ANY ['FR', 'SP'])\\n\")), mdx(\"p\", null, \"translate directly into optimized search expressions. This DSL is extendable enough to support hybrid search scenarios\\u2014combining classical filtering logic with semantic similarity queries based on embedded vectors.  \"), mdx(\"h3\", {\n    \"id\": \"security-hydration-and-federation\"\n  }, \"Security, Hydration, and Federation\"), mdx(\"p\", null, \"To keep data secure, Studio Search applies \", mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"\\u201Clate-binding\\u201D security\"), \", evaluating policies at query time and embedding user access rules directly into search filters. Results are \", mdx(\"em\", {\n    parentName: \"p\"\n  }, \"hydrated\"), \" using federation\\u2014retrieving related data from other DGS endpoints dynamically, similar to how vector databases enrich query results using stored metadata.  \"), mdx(\"h3\", {\n    \"id\": \"from-text-search-to-semantic-search\"\n  }, \"From Text Search to Semantic Search\"), mdx(\"p\", null, \"While Elasticsearch remains useful for structured and text queries, Netflix\\u2019s move toward \", mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"vector representations\"), \" bridges the gap between keyword and semantic search. Embeddings allow \", mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"contextual discovery\"), \" across the federated content universe, making queries such as \\u201Cfind upbeat comedies featuring actors similar to Ryan Reynolds\\u201D computationally feasible.  \"), mdx(\"p\", null, \"In this configuration, \", mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"vector databases\"), \" serve as the backbone behind semantic enrichment, powering multimodal retrieval across text, metadata, and audiovisual embeddings.  \"), mdx(\"h3\", {\n    \"id\": \"broader-implications\"\n  }, \"Broader Implications\"), mdx(\"p\", null, \"Netflix\\u2019s evolution mirrors a broader industry trend: integrating \", mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"vector indexing\"), \" within analytic and search frameworks.\", mdx(\"br\", {\n    parentName: \"p\"\n  }), \"\\n\", \"Companies across domains now increasingly use hybrid setups \\u2014 \", mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"Iceberg for analytical data\"), \", \", mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"LanceDB or Milvus for vectors\"), \", unified via shared APIs and query layers. Netflix\\u2019s federated model embodies this hybrid direction, merging \", mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"GraphQL, search pipelines, and vector spaces\"), \" into one cohesive architecture.  \"), mdx(\"p\", null, \"As AI-driven content operations expand, systems like Studio Search demonstrate how \", mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"vector databases\"), \" can directly support complex, federated ecosystems \\u2014 connecting billions of entities, maintaining freshness, enforcing domain policies, and enabling true contextual discovery across distributed data graphs.  \"), mdx(\"blockquote\", null, mdx(\"p\", {\n    parentName: \"blockquote\"\n  }, \"Netflix\\u2019s Studio Search isn\\u2019t just an indexing solution; it\\u2019s a living, vector-aware data mesh that proves semantic intelligence can scale to enterprise levels\\u2014bridging federation, search, and machine reasoning in one unified pipeline.\")), mdx(\"h2\", {\n    \"id\": \"10-vector-dbs-meet-the-lakehouse-iceberg-and-lance-integration\"\n  }, \"10. Vector DBs Meet the Lakehouse: Iceberg and Lance Integration\"), mdx(\"p\", null, \"As vector databases merge with modern analytics stacks, the \", mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"lakehouse\"), \" model\\u2014blending data lake flexibility with warehouse efficiency\\u2014plays a vital role.\"), mdx(\"p\", null, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"Apache Iceberg\"), \" revolutionized structured data management with schema evolution and ACID transactions, while \", mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"Lance\"), \" represents the next leap forward for AI, offering vector indexing and multimodal data support natively.\"), mdx(\"table\", null, mdx(\"thead\", {\n    parentName: \"table\"\n  }, mdx(\"tr\", {\n    parentName: \"thead\"\n  }, mdx(\"th\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Layer\"), mdx(\"th\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Iceberg Role\"), mdx(\"th\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Lance Role\"))), mdx(\"tbody\", {\n    parentName: \"table\"\n  }, mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"File Format\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Uses Parquet, ORC, Avro\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Lance\\u2019s own high-performance columnar format\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Table Format\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Three-level metadata (table \\u2192 manifest list \\u2192 manifest)\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Single-level manifests and fragments\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Catalog Spec\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"REST catalog spec\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Lance Namespace (Arrow Flight gRPC coming)\")))), mdx(\"p\", null, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"Lance advantages for AI/ML\")), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"Fast random access\"), \" for dense vector lookups (10k+ QPS under 50\\u202Fms)  \"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"Native multimodal support:\"), \" blobs and embeddings stored together  \"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"Zero-cost schema evolution:\"), \" add columns without full rewrites  \")), mdx(\"p\", null, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"Iceberg strengths\")), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"Mature ecosystem integration\"), \" with Spark, Flink, Trino  \"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"Optimized for OLAP workloads\"), \" via partition pruning  \"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"Centralized observability\"), \" and lineage tracking through catalogs  \")), mdx(\"h3\", {\n    \"id\": \"unified-data-strategy\"\n  }, \"Unified Data Strategy\"), mdx(\"p\", null, \"Enterprises like \", mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"Netflix\"), \" now combine both formats:  \"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"Iceberg\"), \" for BI and analytics  \"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"Lance (and LanceDB)\"), \" for AI, ML, and multimodal workloads\", mdx(\"br\", {\n    parentName: \"li\"\n  }), \"Together, they bridge structured analytics and semantic intelligence.\")), mdx(\"h2\", {\n    \"id\": \"11-choosing-and-evaluating-a-vector-database\"\n  }, \"11. Choosing and Evaluating a Vector Database\"), mdx(\"table\", null, mdx(\"thead\", {\n    parentName: \"table\"\n  }, mdx(\"tr\", {\n    parentName: \"thead\"\n  }, mdx(\"th\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Criterion\"), mdx(\"th\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Consideration\"))), mdx(\"tbody\", {\n    parentName: \"table\"\n  }, mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Performance\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Recall, QPS under load\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Security\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"IAM, encryption, isolation\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Data Type Support\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Text, embeddings, images, audio\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Cost\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"GPU, RAM, and disk trade-offs\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Ecosystem\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Integration with AI frameworks like Ray or LangChain\")))), mdx(\"p\", null, \"Popular vendors: \", mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"Milvus/Zilliz Cloud\"), \", \", mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"Pinecone\"), \", \", mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"Weaviate\"), \", \", mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"Elasticsearch (hybrid mode)\"), \".\"), mdx(\"h2\", {\n    \"id\": \"12-looking-ahead\"\n  }, \"12. Looking Ahead\"), mdx(\"p\", null, \"Upcoming shifts shaping the vector database space:\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"LLM grounding\"), \" using domain-specific embeddings  \"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"Cross-cloud deployments\"), \" for resilient AI search  \"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"Declarative infrastructure\"), \" for automatic provisioning  \"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"Native multimodal capabilities\"), \" as a default standard  \")), mdx(\"h2\", {\n    \"id\": \"13-conclusion\"\n  }, \"13. Conclusion\"), mdx(\"p\", null, \"Vector databases represent a definitive shift\\u2014from keyword to \", mdx(\"em\", {\n    parentName: \"p\"\n  }, \"meaning\"), \"-oriented retrieval.\", mdx(\"br\", {\n    parentName: \"p\"\n  }), \"\\n\", \"When combined with lakehouse technologies like Iceberg and Lance, they unify \", mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"analytics, AI, and multimodal data\"), \" in one architecture.  \"), mdx(\"p\", null, \"From Netflix\\u2019s creative indexing to NVIDIA\\u2019s GPU-accelerated systems, vector databases are rapidly becoming the connective tissue of modern AI data infrastructure\\u2014powering the next generation of \", mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"context-aware, intelligent computing\"), \".\"));\n}\n;\nMDXContent.isMDXComponent = true;","tech":["Rust","VectorDatabase"],"category":"Post","appDescription":null,"hero":{"full":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAACXBIWXMAAAsSAAALEgHS3X78AAAEj0lEQVQ4y1VUW0xcVRS9M/fO484M83CGh0w7lOExPDo8E55psS20qZWHwFCSltL5KAOkpcgAgpREIUYLQ6GiUZSYWEONSSEQq7GxnwbGEivVah+2MZhU6nf9X+6zR2j82Dnn7rPOOnvvtfeVJEmCMIvFAqfTie1vrVa7s9cpOmg0GvbpdDro9XpeFUXmVfjNZnPsTnFxMZKTk5Geloaxt8YQDAaRkZGxQyaADoeDCRVFgclkgsFgQGJiArzeVNrrYbfb2S8wkohKVVUkxMfjyOHDaD/Vjp5zPWhqbILRYKSLifygiESYqhr58p49e9Da2gq/38+PGo3GGOF2JElJSajaX0WkRzA39zGePfsHfX1hJiwoKECa14uUFA+ys7JQVFQEkZnI5nT7aWSRT6dTYlmJ6Gw2G0eRn5ePrs4ujI6O4u7dX/HkyV8oKSmB253MxG63GxXl5cjJzmbSQHMzXj56FGVlZVwWJhQFtlqtfKG7uxuLi4t8MDExiadP/0YgEEBcnAWe3bs5TYFTKPWcnBzk5eVR1ClwuZxcVyaUZRk+nw8tLS1YW4siGo3i6tWrWF5exsLCAiYnJ1FfV8f1rampQVFhEeNFlCLihISE54IIwl3uXdwGItX19XXc+PYGka1g/pN5XL/+NTY27uDc2bOoqa5G6/Hj6Ax1su3NzeXobDYrq79DKNLQaCR+/eZ3N7G0tERRRdDW1oaVlRUWp6Ghget8vuc8Ji5OoLurmwlFhC6X63+9KYncheylpSWIRCKIEFmoI4SM9HRc+ewKtra2UEcpi9crKyqJ8CL6w/1ITU1lQXyZmXwmomRCE6lssZjh8XgopVbuw1eOHeOa1dbWcmt0hkKoPnQIbuoE4Q+eDqKclN2/bx9HGA6HMT4+/lxls9nELzXU13NqotChMx0kQCGD2k6epLMGrmFZaRkOU3nGx8aQ5cuEjTqknFrp4IEDNHpURzGPRqOBD0XjKqR6HM117/kezExPM7CyogLhvj4SrhMOGjNrXBxecNih0nRYKJjt4RA8kqShcTLboFrsKK+sQma2H7JORWaWH4NDoxgZHcO1pa8wM/shZL3KFzWyASbCC5zYSxJNCfFoFNpPNSp4L6DD5SYtrvV48GnQgalXZcydMOGjE2Z80fUiohPlmG+3kV+L6SbCBvT4PJSEmWYF040ypho0uESrMOn+sIQ/Ih78+UE+HkW8ePROIjYv+7D5fj42Z/14fMmH+xdj/oeEZbsg4d4QrSP/2YXne+l2Px2+68XD2RLcm8zC/Ut+tgczBXgwnYffyf947iU8uFyI3wj3y9spEHd+GojZj2EJG7RuDMZM+r5Xi9U+GdEBFeuvq/hhyIq1ARPWwnpE+w1Y69fTt4rooAm3hq34+c143B5ScWtAx3ZnxIzV1zRY7ZXYpHgb/SztRtiMErxuJ9wuM30bsCveQnsLXHE6OC0yEggnMKda6vDN8pc429GOeJsRVWWFSHKYYDfJZPTH3l91ALl783akj6mog0E1Q29QSUkD/V0MkBU9KSnz2fAbF3Am1BXDahW27bv/Aiw3swgbR44+AAAAAElFTkSuQmCC","aspectRatio":1,"src":"/static/a9512cd26a37e7e29a9581aa9bf2553f/a1946/vectrordb-cover.png","srcSet":"/static/a9512cd26a37e7e29a9581aa9bf2553f/5b37e/vectrordb-cover.png 236w,\n/static/a9512cd26a37e7e29a9581aa9bf2553f/49058/vectrordb-cover.png 472w,\n/static/a9512cd26a37e7e29a9581aa9bf2553f/a1946/vectrordb-cover.png 944w,\n/static/a9512cd26a37e7e29a9581aa9bf2553f/6050d/vectrordb-cover.png 1200w","srcWebp":"/static/a9512cd26a37e7e29a9581aa9bf2553f/99fbb/vectrordb-cover.webp","srcSetWebp":"/static/a9512cd26a37e7e29a9581aa9bf2553f/77392/vectrordb-cover.webp 236w,\n/static/a9512cd26a37e7e29a9581aa9bf2553f/1f177/vectrordb-cover.webp 472w,\n/static/a9512cd26a37e7e29a9581aa9bf2553f/99fbb/vectrordb-cover.webp 944w,\n/static/a9512cd26a37e7e29a9581aa9bf2553f/9000d/vectrordb-cover.webp 1200w","sizes":"(max-width: 944px) 100vw, 944px","tracedSVG":"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='400'%20height='400'%20viewBox='0%200%20400%20400'%20preserveAspectRatio='none'%3e%3cpath%20d='M0%2076v77l2-1c4%200%208%203%208%207l-1%203-1%201c2%201-2%204-5%204H0v119h37c37%200%2037%200%2034-2s-4-4-4-7c1-3%200-3-15-3H38l16-1%2015-1c0-2%205-3%207-2h1c2-2%209-1%2010%201%202%204%200%2010-3%2012l-3%203h51l46-1c-10-2-24-7-30-12-21-13-38-37-31-44l2-1h2c1-2%202-2%202-1%201%201%201%200%201-1%200-3%200-3%201-2%202%202%203%201%202-1v-1h4l4%201h1l-1-2-1-1h3l1-2%201-2%201%203v2l3%205a40%2040%200%20007%2011l8%208%205%205%201%201%204%201c-1%201%203%203%206%203%201-1%202%200%202%201h3l1%201%202%201h1l1-2a103%20103%200%200018-3l3-1-3-3c-4-5-4-6%201-2l4%204%205-3%209-8a302%20302%200%20018-10c0-4%204-7%205-4%201%201%201%200%201-1-1-3%204-4%205-1l-1%201-1%201%202%202v3h4l1%201h1l1%201%201-1h1c2%201-2%205-15%2019l-32%2032-2%203h17v-7l1-7v14h63l6-5%205-5v10h87l1-4%201-3-1%203v4h21V0H0v76m54-54a114%20114%200%20011%2013l1-1%201%201%201%201%202%202h2v-2l1-1%201%201%202%202%203%203h2l1%201h2c1%201%204%202%208%201%202%200%202%200%201%201v1c1-1%202%200%203%201l1%202v-2l1-1h5v1c-1%200-2%201-1%202l1%201%201-1c0-2%201-2%203-1%201%201%201%202-1%202-1%201-2%201-1%202h3v2l-1%202h1l2-1h2c2%202%201%203-2%202l-2%201v1c-2%200-2%201-1%202h3c0%202-2%203-4%202-2%200-1%202%200%202%201%201%201%201%200%200l-1%201-1%201%201%203h1v-2l1%201%202%201c2%201%202%201%201%202h-3c0%202%201%204%202%203v2l1%201h1l-1%201-2-1h-1v2c2%201%202%202-1%201v1c2%201%202%202%201%204v2l-22%2023-22%2022v10l-1%209-1%201%201%201%201%2019%201%2027v8h3l3-1h2c1%201%202%202%203%201l2%201%201%201%201-1%202-1%202%201%202%201c1-1%201-1%200%200l2%201h2v-1h1l1-1h1l4%201c4-1%204-1%201%204-1%203-3%204-5%204l-3%202-1%202c-5%200-6%200-5%202l-1%202c-1-1-2%200-3%202l-3%202c-1-1-3%202-2%202l-4%201v1l-1%201c-3-2-5%201-5%206v7c-1%204%200%205%206%205%205%200%206%200%206-2%200-3%204-10%208-17%2011-14%2030-24%2050-24h5l-6-3-7-5c-4-5-1-18%206-30%203-5%208-6%207-2h1v1c-1%202-1%202%201%202%201-1%202-1%202%201l2%201%201%201v1c1-1%201-1%200%200l2%204%203%201h1v10l-3%2012v6h47v-77h-7c-6%201-7%200-7-1A124%20124%200%200057%2018h-4l1%204m263%2024a295%20295%200%200018%2017v-2l2%202%202%201c1%200-5-7-14-15l-16-16%2012%2013%2013%2014c0%201-8-6-17-16l-17-16%2017%2018m-22%200l11%2013%2010%2011-10-9c-5-6-10-10-10-9l9%209%207%209-7-6-7-6%206%206%204%206c-3-1-2%200%201%203l3%201h2v2c-1%200%201%203%205%206%205%205%207%206%202%201l-1-3-2-4c-6-6-5-6%201%200l6%205c1%200-1-3-4-5l-4-5c0-1%204%202%208%207l9%208a287%20287%200%2000-39-40m18%2012l12%2012-12-10-11-11%2017%2018a260%20260%200%200013%2011l-6-7%209%208%208%208-6-8c-5-4-8-8-7-8l10%209%209%209-7-9-8-9%202%201h1l-3-4-2-3%201-2c-1%200-2%200-3%202l-2%202-5-6c-4-3-6-6-5-6l-1-2-2-1h-2l6%208%208%208c0%201-6-4-12-11l-12-11%2010%2012m-13%209c3%204%203%205-1%202l-2-1v2a584%20584%200%2000-21%201h20l9%209%209%209-7-9-8-9%2014%2014%2014%2013-12-13-12-14%2014%2013a390%20390%200%2000-17-17M107%2091c-7%202-13%2011-12%2018%204%2021%2035%2018%2033-3-1-11-11-18-21-15m129%2036l1%203%201-1h1l1-1h1l5%201c3%200%206%203%207%207l2%204-4%205c-5%205-8%205-13%201l-4-6c0-2-1-3-2-3v-1l-1-1-1%201-3%203c-2%203-2%203%200%203l2-1-2%202c-1%202-2%203-3%202l-1%201%201%201%202%202%202%202h-6l2%201v1l-1%203%202-1h1v2l2-4c0-2%202-3%204-3v1l-1%202-1%201v1c1%201%201%201-1%201l-2%203h1c1-1%201-1%201%201l1%202%201-2v-1c3%201%202%203-5%209l-6%208%204-2c2-2%203-1%201%202-1%201%200%202%201%203l1%203c1%204%201%205%203%205s2%200%201%201l-1%202h1c1-1%201-1%201%201v2l1%202%201-1h1v2l2%201h4l1%201v1l1-1c0-1%201-2%203-2%201%200%202%200%201%201l1%201c1-1%201%200%201%201l-1%201h-2l1%201%201%204v3l1-1%201-1v1l3%201h3l11%201c12%200%2013-1%2013-11l2-5%201-2c1-12%201-12%204-12%205-1%205-2%201-2l-4%201h-1v-4l-1-2v-2l-2-9c-2-7-2-8-16-22l-14-14h-7c-6%200-7%201-7%202m73%2051h-3v37l1-18%201-11c0%205%200%207%201%206h1l1%202v2c1%201%201%200%201-3%200-4-1-5-2-5l-1-2%201-4%201-3c1%200%202%204%202%2011l1%2011v-12c-1-12-1-12-5-11m6%2023v24l1-19%201-19v38l1-18v-18l1%2020%201%2021v-43l1%2021%201%2021v-43l1%2019%201%2020v-23l1-23c0-1-1-2-5-2h-5v24m37%202c-7%205-9%2012-7%2020%205%2010%2019%2012%2026%203%2011-13-5-32-19-23m-164%207v1c-2%201-2%2010-2%2022%200%204%205%204%2012%201%209-5%2015-14%2015-22v-3h-13l-12%201m89%205l-6%204c-2%202-3%206-1%206l2%206%202%202%201%202%201%201c1%201%203%202%203%204%202%203%2011%202%2014-2%2010-11-3-27-16-23M0%20378v19h4c2-1%203%200%203%201h1l1-1h1c2-2%2010-3%209-1l3%201%204%201%202%201h5l122%201h120l-20-20-19-20h-76l-79%201c-2%200-3%201-3%202%200%202%200%202-1%200l-1-3v6l-1-3-1-3v6l-1-3-1-3v3c0%202%200%202-1%200l-1-1c0%201-1%202-2%201-2%200-2%200%200-1%201-1%201-1-1-1l-2%201h-6l-1%201c-1-2-3-2-31-3H0v18m292%202v20h108v-40h-66l-1%203c0%203-5%206-8%206-4%200-10-3-10-6s-2-3-13-3h-10v20'%20fill='%23fafafa'%20fill-rule='evenodd'/%3e%3c/svg%3e"},"regular":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAACXBIWXMAAAsSAAALEgHS3X78AAAEj0lEQVQ4y1VUW0xcVRS9M/fO484M83CGh0w7lOExPDo8E55psS20qZWHwFCSltL5KAOkpcgAgpREIUYLQ6GiUZSYWEONSSEQq7GxnwbGEivVah+2MZhU6nf9X+6zR2j82Dnn7rPOOnvvtfeVJEmCMIvFAqfTie1vrVa7s9cpOmg0GvbpdDro9XpeFUXmVfjNZnPsTnFxMZKTk5Geloaxt8YQDAaRkZGxQyaADoeDCRVFgclkgsFgQGJiArzeVNrrYbfb2S8wkohKVVUkxMfjyOHDaD/Vjp5zPWhqbILRYKSLifygiESYqhr58p49e9Da2gq/38+PGo3GGOF2JElJSajaX0WkRzA39zGePfsHfX1hJiwoKECa14uUFA+ys7JQVFQEkZnI5nT7aWSRT6dTYlmJ6Gw2G0eRn5ePrs4ujI6O4u7dX/HkyV8oKSmB253MxG63GxXl5cjJzmbSQHMzXj56FGVlZVwWJhQFtlqtfKG7uxuLi4t8MDExiadP/0YgEEBcnAWe3bs5TYFTKPWcnBzk5eVR1ClwuZxcVyaUZRk+nw8tLS1YW4siGo3i6tWrWF5exsLCAiYnJ1FfV8f1rampQVFhEeNFlCLihISE54IIwl3uXdwGItX19XXc+PYGka1g/pN5XL/+NTY27uDc2bOoqa5G6/Hj6Ax1su3NzeXobDYrq79DKNLQaCR+/eZ3N7G0tERRRdDW1oaVlRUWp6Ghget8vuc8Ji5OoLurmwlFhC6X63+9KYncheylpSWIRCKIEFmoI4SM9HRc+ewKtra2UEcpi9crKyqJ8CL6w/1ITU1lQXyZmXwmomRCE6lssZjh8XgopVbuw1eOHeOa1dbWcmt0hkKoPnQIbuoE4Q+eDqKclN2/bx9HGA6HMT4+/lxls9nELzXU13NqotChMx0kQCGD2k6epLMGrmFZaRkOU3nGx8aQ5cuEjTqknFrp4IEDNHpURzGPRqOBD0XjKqR6HM117/kezExPM7CyogLhvj4SrhMOGjNrXBxecNih0nRYKJjt4RA8kqShcTLboFrsKK+sQma2H7JORWaWH4NDoxgZHcO1pa8wM/shZL3KFzWyASbCC5zYSxJNCfFoFNpPNSp4L6DD5SYtrvV48GnQgalXZcydMOGjE2Z80fUiohPlmG+3kV+L6SbCBvT4PJSEmWYF040ypho0uESrMOn+sIQ/Ih78+UE+HkW8ePROIjYv+7D5fj42Z/14fMmH+xdj/oeEZbsg4d4QrSP/2YXne+l2Px2+68XD2RLcm8zC/Ut+tgczBXgwnYffyf947iU8uFyI3wj3y9spEHd+GojZj2EJG7RuDMZM+r5Xi9U+GdEBFeuvq/hhyIq1ARPWwnpE+w1Y69fTt4rooAm3hq34+c143B5ScWtAx3ZnxIzV1zRY7ZXYpHgb/SztRtiMErxuJ9wuM30bsCveQnsLXHE6OC0yEggnMKda6vDN8pc429GOeJsRVWWFSHKYYDfJZPTH3l91ALl783akj6mog0E1Q29QSUkD/V0MkBU9KSnz2fAbF3Am1BXDahW27bv/Aiw3swgbR44+AAAAAElFTkSuQmCC","aspectRatio":1,"src":"/static/a9512cd26a37e7e29a9581aa9bf2553f/3ddd4/vectrordb-cover.png","srcSet":"/static/a9512cd26a37e7e29a9581aa9bf2553f/078a8/vectrordb-cover.png 163w,\n/static/a9512cd26a37e7e29a9581aa9bf2553f/e56da/vectrordb-cover.png 327w,\n/static/a9512cd26a37e7e29a9581aa9bf2553f/3ddd4/vectrordb-cover.png 653w,\n/static/a9512cd26a37e7e29a9581aa9bf2553f/c5cc7/vectrordb-cover.png 980w,\n/static/a9512cd26a37e7e29a9581aa9bf2553f/6050d/vectrordb-cover.png 1200w","srcWebp":"/static/a9512cd26a37e7e29a9581aa9bf2553f/0acdf/vectrordb-cover.webp","srcSetWebp":"/static/a9512cd26a37e7e29a9581aa9bf2553f/ac59e/vectrordb-cover.webp 163w,\n/static/a9512cd26a37e7e29a9581aa9bf2553f/7660b/vectrordb-cover.webp 327w,\n/static/a9512cd26a37e7e29a9581aa9bf2553f/0acdf/vectrordb-cover.webp 653w,\n/static/a9512cd26a37e7e29a9581aa9bf2553f/75470/vectrordb-cover.webp 980w,\n/static/a9512cd26a37e7e29a9581aa9bf2553f/9000d/vectrordb-cover.webp 1200w","sizes":"(max-width: 653px) 100vw, 653px","tracedSVG":"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='400'%20height='400'%20viewBox='0%200%20400%20400'%20preserveAspectRatio='none'%3e%3cpath%20d='M0%2076v77l2-1c4%200%208%203%208%207l-1%203-1%201c2%201-2%204-5%204H0v119h37c37%200%2037%200%2034-2s-4-4-4-7c1-3%200-3-15-3H38l16-1%2015-1c0-2%205-3%207-2h1c2-2%209-1%2010%201%202%204%200%2010-3%2012l-3%203h51l46-1c-10-2-24-7-30-12-21-13-38-37-31-44l2-1h2c1-2%202-2%202-1%201%201%201%200%201-1%200-3%200-3%201-2%202%202%203%201%202-1v-1h4l4%201h1l-1-2-1-1h3l1-2%201-2%201%203v2l3%205a40%2040%200%20007%2011l8%208%205%205%201%201%204%201c-1%201%203%203%206%203%201-1%202%200%202%201h3l1%201%202%201h1l1-2a103%20103%200%200018-3l3-1-3-3c-4-5-4-6%201-2l4%204%205-3%209-8a302%20302%200%20018-10c0-4%204-7%205-4%201%201%201%200%201-1-1-3%204-4%205-1l-1%201-1%201%202%202v3h4l1%201h1l1%201%201-1h1c2%201-2%205-15%2019l-32%2032-2%203h17v-7l1-7v14h63l6-5%205-5v10h87l1-4%201-3-1%203v4h21V0H0v76m54-54a114%20114%200%20011%2013l1-1%201%201%201%201%202%202h2v-2l1-1%201%201%202%202%203%203h2l1%201h2c1%201%204%202%208%201%202%200%202%200%201%201v1c1-1%202%200%203%201l1%202v-2l1-1h5v1c-1%200-2%201-1%202l1%201%201-1c0-2%201-2%203-1%201%201%201%202-1%202-1%201-2%201-1%202h3v2l-1%202h1l2-1h2c2%202%201%203-2%202l-2%201v1c-2%200-2%201-1%202h3c0%202-2%203-4%202-2%200-1%202%200%202%201%201%201%201%200%200l-1%201-1%201%201%203h1v-2l1%201%202%201c2%201%202%201%201%202h-3c0%202%201%204%202%203v2l1%201h1l-1%201-2-1h-1v2c2%201%202%202-1%201v1c2%201%202%202%201%204v2l-22%2023-22%2022v10l-1%209-1%201%201%201%201%2019%201%2027v8h3l3-1h2c1%201%202%202%203%201l2%201%201%201%201-1%202-1%202%201%202%201c1-1%201-1%200%200l2%201h2v-1h1l1-1h1l4%201c4-1%204-1%201%204-1%203-3%204-5%204l-3%202-1%202c-5%200-6%200-5%202l-1%202c-1-1-2%200-3%202l-3%202c-1-1-3%202-2%202l-4%201v1l-1%201c-3-2-5%201-5%206v7c-1%204%200%205%206%205%205%200%206%200%206-2%200-3%204-10%208-17%2011-14%2030-24%2050-24h5l-6-3-7-5c-4-5-1-18%206-30%203-5%208-6%207-2h1v1c-1%202-1%202%201%202%201-1%202-1%202%201l2%201%201%201v1c1-1%201-1%200%200l2%204%203%201h1v10l-3%2012v6h47v-77h-7c-6%201-7%200-7-1A124%20124%200%200057%2018h-4l1%204m263%2024a295%20295%200%200018%2017v-2l2%202%202%201c1%200-5-7-14-15l-16-16%2012%2013%2013%2014c0%201-8-6-17-16l-17-16%2017%2018m-22%200l11%2013%2010%2011-10-9c-5-6-10-10-10-9l9%209%207%209-7-6-7-6%206%206%204%206c-3-1-2%200%201%203l3%201h2v2c-1%200%201%203%205%206%205%205%207%206%202%201l-1-3-2-4c-6-6-5-6%201%200l6%205c1%200-1-3-4-5l-4-5c0-1%204%202%208%207l9%208a287%20287%200%2000-39-40m18%2012l12%2012-12-10-11-11%2017%2018a260%20260%200%200013%2011l-6-7%209%208%208%208-6-8c-5-4-8-8-7-8l10%209%209%209-7-9-8-9%202%201h1l-3-4-2-3%201-2c-1%200-2%200-3%202l-2%202-5-6c-4-3-6-6-5-6l-1-2-2-1h-2l6%208%208%208c0%201-6-4-12-11l-12-11%2010%2012m-13%209c3%204%203%205-1%202l-2-1v2a584%20584%200%2000-21%201h20l9%209%209%209-7-9-8-9%2014%2014%2014%2013-12-13-12-14%2014%2013a390%20390%200%2000-17-17M107%2091c-7%202-13%2011-12%2018%204%2021%2035%2018%2033-3-1-11-11-18-21-15m129%2036l1%203%201-1h1l1-1h1l5%201c3%200%206%203%207%207l2%204-4%205c-5%205-8%205-13%201l-4-6c0-2-1-3-2-3v-1l-1-1-1%201-3%203c-2%203-2%203%200%203l2-1-2%202c-1%202-2%203-3%202l-1%201%201%201%202%202%202%202h-6l2%201v1l-1%203%202-1h1v2l2-4c0-2%202-3%204-3v1l-1%202-1%201v1c1%201%201%201-1%201l-2%203h1c1-1%201-1%201%201l1%202%201-2v-1c3%201%202%203-5%209l-6%208%204-2c2-2%203-1%201%202-1%201%200%202%201%203l1%203c1%204%201%205%203%205s2%200%201%201l-1%202h1c1-1%201-1%201%201v2l1%202%201-1h1v2l2%201h4l1%201v1l1-1c0-1%201-2%203-2%201%200%202%200%201%201l1%201c1-1%201%200%201%201l-1%201h-2l1%201%201%204v3l1-1%201-1v1l3%201h3l11%201c12%200%2013-1%2013-11l2-5%201-2c1-12%201-12%204-12%205-1%205-2%201-2l-4%201h-1v-4l-1-2v-2l-2-9c-2-7-2-8-16-22l-14-14h-7c-6%200-7%201-7%202m73%2051h-3v37l1-18%201-11c0%205%200%207%201%206h1l1%202v2c1%201%201%200%201-3%200-4-1-5-2-5l-1-2%201-4%201-3c1%200%202%204%202%2011l1%2011v-12c-1-12-1-12-5-11m6%2023v24l1-19%201-19v38l1-18v-18l1%2020%201%2021v-43l1%2021%201%2021v-43l1%2019%201%2020v-23l1-23c0-1-1-2-5-2h-5v24m37%202c-7%205-9%2012-7%2020%205%2010%2019%2012%2026%203%2011-13-5-32-19-23m-164%207v1c-2%201-2%2010-2%2022%200%204%205%204%2012%201%209-5%2015-14%2015-22v-3h-13l-12%201m89%205l-6%204c-2%202-3%206-1%206l2%206%202%202%201%202%201%201c1%201%203%202%203%204%202%203%2011%202%2014-2%2010-11-3-27-16-23M0%20378v19h4c2-1%203%200%203%201h1l1-1h1c2-2%2010-3%209-1l3%201%204%201%202%201h5l122%201h120l-20-20-19-20h-76l-79%201c-2%200-3%201-3%202%200%202%200%202-1%200l-1-3v6l-1-3-1-3v6l-1-3-1-3v3c0%202%200%202-1%200l-1-1c0%201-1%202-2%201-2%200-2%200%200-1%201-1%201-1-1-1l-2%201h-6l-1%201c-1-2-3-2-31-3H0v18m292%202v20h108v-40h-66l-1%203c0%203-5%206-8%206-4%200-10-3-10-6s-2-3-13-3h-10v20'%20fill='%23fafafa'%20fill-rule='evenodd'/%3e%3c/svg%3e"},"narrow":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAACXBIWXMAAAsSAAALEgHS3X78AAAEj0lEQVQ4y1VUW0xcVRS9M/fO484M83CGh0w7lOExPDo8E55psS20qZWHwFCSltL5KAOkpcgAgpREIUYLQ6GiUZSYWEONSSEQq7GxnwbGEivVah+2MZhU6nf9X+6zR2j82Dnn7rPOOnvvtfeVJEmCMIvFAqfTie1vrVa7s9cpOmg0GvbpdDro9XpeFUXmVfjNZnPsTnFxMZKTk5Geloaxt8YQDAaRkZGxQyaADoeDCRVFgclkgsFgQGJiArzeVNrrYbfb2S8wkohKVVUkxMfjyOHDaD/Vjp5zPWhqbILRYKSLifygiESYqhr58p49e9Da2gq/38+PGo3GGOF2JElJSajaX0WkRzA39zGePfsHfX1hJiwoKECa14uUFA+ys7JQVFQEkZnI5nT7aWSRT6dTYlmJ6Gw2G0eRn5ePrs4ujI6O4u7dX/HkyV8oKSmB253MxG63GxXl5cjJzmbSQHMzXj56FGVlZVwWJhQFtlqtfKG7uxuLi4t8MDExiadP/0YgEEBcnAWe3bs5TYFTKPWcnBzk5eVR1ClwuZxcVyaUZRk+nw8tLS1YW4siGo3i6tWrWF5exsLCAiYnJ1FfV8f1rampQVFhEeNFlCLihISE54IIwl3uXdwGItX19XXc+PYGka1g/pN5XL/+NTY27uDc2bOoqa5G6/Hj6Ax1su3NzeXobDYrq79DKNLQaCR+/eZ3N7G0tERRRdDW1oaVlRUWp6Ghget8vuc8Ji5OoLurmwlFhC6X63+9KYncheylpSWIRCKIEFmoI4SM9HRc+ewKtra2UEcpi9crKyqJ8CL6w/1ITU1lQXyZmXwmomRCE6lssZjh8XgopVbuw1eOHeOa1dbWcmt0hkKoPnQIbuoE4Q+eDqKclN2/bx9HGA6HMT4+/lxls9nELzXU13NqotChMx0kQCGD2k6epLMGrmFZaRkOU3nGx8aQ5cuEjTqknFrp4IEDNHpURzGPRqOBD0XjKqR6HM117/kezExPM7CyogLhvj4SrhMOGjNrXBxecNih0nRYKJjt4RA8kqShcTLboFrsKK+sQma2H7JORWaWH4NDoxgZHcO1pa8wM/shZL3KFzWyASbCC5zYSxJNCfFoFNpPNSp4L6DD5SYtrvV48GnQgalXZcydMOGjE2Z80fUiohPlmG+3kV+L6SbCBvT4PJSEmWYF040ypho0uESrMOn+sIQ/Ih78+UE+HkW8ePROIjYv+7D5fj42Z/14fMmH+xdj/oeEZbsg4d4QrSP/2YXne+l2Px2+68XD2RLcm8zC/Ut+tgczBXgwnYffyf947iU8uFyI3wj3y9spEHd+GojZj2EJG7RuDMZM+r5Xi9U+GdEBFeuvq/hhyIq1ARPWwnpE+w1Y69fTt4rooAm3hq34+c143B5ScWtAx3ZnxIzV1zRY7ZXYpHgb/SztRtiMErxuJ9wuM30bsCveQnsLXHE6OC0yEggnMKda6vDN8pc429GOeJsRVWWFSHKYYDfJZPTH3l91ALl783akj6mog0E1Q29QSUkD/V0MkBU9KSnz2fAbF3Am1BXDahW27bv/Aiw3swgbR44+AAAAAElFTkSuQmCC","aspectRatio":1,"src":"/static/a9512cd26a37e7e29a9581aa9bf2553f/502b1/vectrordb-cover.png","srcSet":"/static/a9512cd26a37e7e29a9581aa9bf2553f/f2e6d/vectrordb-cover.png 114w,\n/static/a9512cd26a37e7e29a9581aa9bf2553f/4ddba/vectrordb-cover.png 229w,\n/static/a9512cd26a37e7e29a9581aa9bf2553f/502b1/vectrordb-cover.png 457w,\n/static/a9512cd26a37e7e29a9581aa9bf2553f/7ddc2/vectrordb-cover.png 686w,\n/static/a9512cd26a37e7e29a9581aa9bf2553f/435bf/vectrordb-cover.png 914w,\n/static/a9512cd26a37e7e29a9581aa9bf2553f/6050d/vectrordb-cover.png 1200w","srcWebp":"/static/a9512cd26a37e7e29a9581aa9bf2553f/15384/vectrordb-cover.webp","srcSetWebp":"/static/a9512cd26a37e7e29a9581aa9bf2553f/31fce/vectrordb-cover.webp 114w,\n/static/a9512cd26a37e7e29a9581aa9bf2553f/e3e25/vectrordb-cover.webp 229w,\n/static/a9512cd26a37e7e29a9581aa9bf2553f/15384/vectrordb-cover.webp 457w,\n/static/a9512cd26a37e7e29a9581aa9bf2553f/0258d/vectrordb-cover.webp 686w,\n/static/a9512cd26a37e7e29a9581aa9bf2553f/64ea2/vectrordb-cover.webp 914w,\n/static/a9512cd26a37e7e29a9581aa9bf2553f/9000d/vectrordb-cover.webp 1200w","sizes":"(max-width: 457px) 100vw, 457px","tracedSVG":"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='400'%20height='400'%20viewBox='0%200%20400%20400'%20preserveAspectRatio='none'%3e%3cpath%20d='M0%2076v77l2-1c4%200%208%203%208%207l-1%203-1%201c2%201-2%204-5%204H0v119h37c37%200%2037%200%2034-2s-4-4-4-7c1-3%200-3-15-3H38l16-1%2015-1c0-2%205-3%207-2h1c2-2%209-1%2010%201%202%204%200%2010-3%2012l-3%203h51l46-1c-10-2-24-7-30-12-21-13-38-37-31-44l2-1h2c1-2%202-2%202-1%201%201%201%200%201-1%200-3%200-3%201-2%202%202%203%201%202-1v-1h4l4%201h1l-1-2-1-1h3l1-2%201-2%201%203v2l3%205a40%2040%200%20007%2011l8%208%205%205%201%201%204%201c-1%201%203%203%206%203%201-1%202%200%202%201h3l1%201%202%201h1l1-2a103%20103%200%200018-3l3-1-3-3c-4-5-4-6%201-2l4%204%205-3%209-8a302%20302%200%20018-10c0-4%204-7%205-4%201%201%201%200%201-1-1-3%204-4%205-1l-1%201-1%201%202%202v3h4l1%201h1l1%201%201-1h1c2%201-2%205-15%2019l-32%2032-2%203h17v-7l1-7v14h63l6-5%205-5v10h87l1-4%201-3-1%203v4h21V0H0v76m54-54a114%20114%200%20011%2013l1-1%201%201%201%201%202%202h2v-2l1-1%201%201%202%202%203%203h2l1%201h2c1%201%204%202%208%201%202%200%202%200%201%201v1c1-1%202%200%203%201l1%202v-2l1-1h5v1c-1%200-2%201-1%202l1%201%201-1c0-2%201-2%203-1%201%201%201%202-1%202-1%201-2%201-1%202h3v2l-1%202h1l2-1h2c2%202%201%203-2%202l-2%201v1c-2%200-2%201-1%202h3c0%202-2%203-4%202-2%200-1%202%200%202%201%201%201%201%200%200l-1%201-1%201%201%203h1v-2l1%201%202%201c2%201%202%201%201%202h-3c0%202%201%204%202%203v2l1%201h1l-1%201-2-1h-1v2c2%201%202%202-1%201v1c2%201%202%202%201%204v2l-22%2023-22%2022v10l-1%209-1%201%201%201%201%2019%201%2027v8h3l3-1h2c1%201%202%202%203%201l2%201%201%201%201-1%202-1%202%201%202%201c1-1%201-1%200%200l2%201h2v-1h1l1-1h1l4%201c4-1%204-1%201%204-1%203-3%204-5%204l-3%202-1%202c-5%200-6%200-5%202l-1%202c-1-1-2%200-3%202l-3%202c-1-1-3%202-2%202l-4%201v1l-1%201c-3-2-5%201-5%206v7c-1%204%200%205%206%205%205%200%206%200%206-2%200-3%204-10%208-17%2011-14%2030-24%2050-24h5l-6-3-7-5c-4-5-1-18%206-30%203-5%208-6%207-2h1v1c-1%202-1%202%201%202%201-1%202-1%202%201l2%201%201%201v1c1-1%201-1%200%200l2%204%203%201h1v10l-3%2012v6h47v-77h-7c-6%201-7%200-7-1A124%20124%200%200057%2018h-4l1%204m263%2024a295%20295%200%200018%2017v-2l2%202%202%201c1%200-5-7-14-15l-16-16%2012%2013%2013%2014c0%201-8-6-17-16l-17-16%2017%2018m-22%200l11%2013%2010%2011-10-9c-5-6-10-10-10-9l9%209%207%209-7-6-7-6%206%206%204%206c-3-1-2%200%201%203l3%201h2v2c-1%200%201%203%205%206%205%205%207%206%202%201l-1-3-2-4c-6-6-5-6%201%200l6%205c1%200-1-3-4-5l-4-5c0-1%204%202%208%207l9%208a287%20287%200%2000-39-40m18%2012l12%2012-12-10-11-11%2017%2018a260%20260%200%200013%2011l-6-7%209%208%208%208-6-8c-5-4-8-8-7-8l10%209%209%209-7-9-8-9%202%201h1l-3-4-2-3%201-2c-1%200-2%200-3%202l-2%202-5-6c-4-3-6-6-5-6l-1-2-2-1h-2l6%208%208%208c0%201-6-4-12-11l-12-11%2010%2012m-13%209c3%204%203%205-1%202l-2-1v2a584%20584%200%2000-21%201h20l9%209%209%209-7-9-8-9%2014%2014%2014%2013-12-13-12-14%2014%2013a390%20390%200%2000-17-17M107%2091c-7%202-13%2011-12%2018%204%2021%2035%2018%2033-3-1-11-11-18-21-15m129%2036l1%203%201-1h1l1-1h1l5%201c3%200%206%203%207%207l2%204-4%205c-5%205-8%205-13%201l-4-6c0-2-1-3-2-3v-1l-1-1-1%201-3%203c-2%203-2%203%200%203l2-1-2%202c-1%202-2%203-3%202l-1%201%201%201%202%202%202%202h-6l2%201v1l-1%203%202-1h1v2l2-4c0-2%202-3%204-3v1l-1%202-1%201v1c1%201%201%201-1%201l-2%203h1c1-1%201-1%201%201l1%202%201-2v-1c3%201%202%203-5%209l-6%208%204-2c2-2%203-1%201%202-1%201%200%202%201%203l1%203c1%204%201%205%203%205s2%200%201%201l-1%202h1c1-1%201-1%201%201v2l1%202%201-1h1v2l2%201h4l1%201v1l1-1c0-1%201-2%203-2%201%200%202%200%201%201l1%201c1-1%201%200%201%201l-1%201h-2l1%201%201%204v3l1-1%201-1v1l3%201h3l11%201c12%200%2013-1%2013-11l2-5%201-2c1-12%201-12%204-12%205-1%205-2%201-2l-4%201h-1v-4l-1-2v-2l-2-9c-2-7-2-8-16-22l-14-14h-7c-6%200-7%201-7%202m73%2051h-3v37l1-18%201-11c0%205%200%207%201%206h1l1%202v2c1%201%201%200%201-3%200-4-1-5-2-5l-1-2%201-4%201-3c1%200%202%204%202%2011l1%2011v-12c-1-12-1-12-5-11m6%2023v24l1-19%201-19v38l1-18v-18l1%2020%201%2021v-43l1%2021%201%2021v-43l1%2019%201%2020v-23l1-23c0-1-1-2-5-2h-5v24m37%202c-7%205-9%2012-7%2020%205%2010%2019%2012%2026%203%2011-13-5-32-19-23m-164%207v1c-2%201-2%2010-2%2022%200%204%205%204%2012%201%209-5%2015-14%2015-22v-3h-13l-12%201m89%205l-6%204c-2%202-3%206-1%206l2%206%202%202%201%202%201%201c1%201%203%202%203%204%202%203%2011%202%2014-2%2010-11-3-27-16-23M0%20378v19h4c2-1%203%200%203%201h1l1-1h1c2-2%2010-3%209-1l3%201%204%201%202%201h5l122%201h120l-20-20-19-20h-76l-79%201c-2%200-3%201-3%202%200%202%200%202-1%200l-1-3v6l-1-3-1-3v6l-1-3-1-3v3c0%202%200%202-1%200l-1-1c0%201-1%202-2%201-2%200-2%200%200-1%201-1%201-1-1-1l-2%201h-6l-1%201c-1-2-3-2-31-3H0v18m292%202v20h108v-40h-66l-1%203c0%203-5%206-8%206-4%200-10-3-10-6s-2-3-13-3h-10v20'%20fill='%23fafafa'%20fill-rule='evenodd'/%3e%3c/svg%3e"},"seo":{"src":"/static/a9512cd26a37e7e29a9581aa9bf2553f/6050d/vectrordb-cover.png"}}},{"id":"24fb05c0-c58b-5d21-8b04-352d30a4de99","slug":"/docker-vs-podman-2025-field-guide-with-community-insights","secret":false,"title":"Docker vs Podman, 2025 field guide with community insights","author":"Luke Celitan","date":"November 23rd, 2025","dateForSEO":"2025-11-23T00:00:00.000Z","timeToRead":7,"excerpt":"Docker, known for portability, competes with daemon-less Podman, which emphasizes security and simplicity, in the evolving containerization field","subscription":true,"body":"var _excluded = [\"components\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n/* @jsxRuntime classic */\n/* @jsx mdx */\n\nvar _frontmatter = {\n  \"title\": \"Docker vs Podman, 2025 field guide with community insights\",\n  \"excerpt\": \"Docker, known for portability, competes with daemon-less Podman, which emphasizes security and simplicity, in the evolving containerization field\",\n  \"date\": \"2025-11-23T00:00:00.000Z\",\n  \"hero\": \"dockervspodman-cov.png\",\n  \"author\": \"Luke Celitan\",\n  \"category\": \"Post\",\n  \"tech\": [\"Linux\", \"Docker\", \"Redhat\", \"Ubuntu\", \"Podman\", \"DevOps\"]\n};\nvar layoutProps = {\n  _frontmatter: _frontmatter\n};\nvar MDXLayout = \"wrapper\";\nreturn function MDXContent(_ref) {\n  var components = _ref.components,\n    props = _objectWithoutProperties(_ref, _excluded);\n  return mdx(MDXLayout, _extends({}, layoutProps, props, {\n    components: components,\n    mdxType: \"MDXLayout\"\n  }), mdx(\"h1\", {\n    \"id\": \"should-i-finally-move-from-docker-to-podman\"\n  }, \"Should I Finally Move from Docker to Podman?\"), mdx(\"h2\", {\n    \"id\": \"a-2025-field-guide-with-community-insights\"\n  }, \"A 2025 Field Guide with Community Insights\"), mdx(\"p\", null, \"Containers are table stakes now, but your choice of engine impacts security,\\noperability, and developer velocity. Docker remains the de facto standard;\\nPodman has matured rapidly with a daemonless, rootless-by-default model that\\naligns closely with Linux. If you\\u2019ve been asking \\u201CShould I finally move from\\nDocker to Podman?\\u201D\\u2014this guide lays out the trade-offs, community sentiment, and\\na practical migration path.\"), mdx(\"table\", null, mdx(\"thead\", {\n    parentName: \"table\"\n  }, mdx(\"tr\", {\n    parentName: \"thead\"\n  }, mdx(\"th\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Switch Now if:\"), mdx(\"th\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Stay on Docker if:\"), mdx(\"th\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Hybrid Approach:\"))), mdx(\"tbody\", {\n    parentName: \"table\"\n  }, mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"- You run Linux servers where security-by-default matters (rootless containers, SELinux, auditing).\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"- Your team relies heavily on Docker Compose or Swarm and needs the least friction.\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Use Podman on hardened Linux servers; keep Docker on developer laptops.\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"- You\\u2019re in RHEL/Fedora ecosystems (Podman is the default and deeply integrated).\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"- You\\u2019re macOS/Windows-first and benefit from Docker Desktop\\u2019s polished experience and extensions.\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Migrate one stack at a time, starting with services that benefit from rootless/systemd.\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"- You prefer systemd-native lifecycle management and want clean firewall behavior.\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"- Your GPU-heavy workloads already \\u201Cjust work\\u201D on Docker and migration risk is high.\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  })))), mdx(\"h2\", {\n    \"id\": \"docker-and-podman-in-2025\"\n  }, \"Docker and Podman in 2025\"), mdx(\"h3\", {\n    \"id\": \"overview\"\n  }, \"Overview\"), mdx(\"p\", null, \"Docker and Podman are two leading containerization platforms, each with its own\\narchitecture and features. Docker, with its client+daemon architecture, is known\\nfor its mature CLI, robust ecosystem, and efficient builds using BuildKit. It\\nalso offers orchestration tools like Docker Compose and Swarm, and a rich\\nextension marketplace via Docker Desktop. Podman, on the other hand, is a\\ndaemonless engine that is rootless by default, supports Kubernetes-style pods,\\nand pairs with Buildah for builds and Skopeo for image management. Podman\\nDesktop is open-source and improving, and it generates Kubernetes YAML and\\nsystemd units out of the box.\"), mdx(\"h3\", {\n    \"id\": \"interoperability\"\n  }, \"Interoperability\"), mdx(\"p\", null, \"Both Docker and Podman produce OCI images, allowing you to run the same images\\nacross both platforms. You can pull images from Docker Hub and private\\nregistries without any issues.\"), mdx(\"h3\", {\n    \"id\": \"recent-developments\"\n  }, \"Recent Developments\"), mdx(\"p\", null, \"Podman has seen significant advancements with the stabilization of quadlets in\\nversion 5+, which includes systemd unit generation and management.\\nNetavark/aardvark has improved rootless networking and DNS, and auto-update\\nlabels have been added, along with an improved Desktop experience. Debian 13\\nships Podman 5.4.x, and RHEL/Fedora default to Podman.\"), mdx(\"h3\", {\n    \"id\": \"architecture-and-security\"\n  }, \"Architecture and Security\"), mdx(\"p\", null, \"The core difference between Docker and Podman lies in their architecture.\"), mdx(\"p\", null, \"Docker: Uses a privileged daemon (dockerd) with a local REST API. Access to the\\ndocker group effectively grants root privileges, which can lead to security\\nrisks. Podman: Is daemonless, with commands forking and executing directly.\\nContainers are per-user by default (rootless), and lifecycle management is tied\\ninto systemd, reducing the attack surface and improving auditability.\"), mdx(\"h3\", {\n    \"id\": \"rootless-mode-and-implications\"\n  }, \"Rootless Mode and Implications\"), mdx(\"p\", null, \"Podman: Defaults to rootless mode, where user namespaces map \\u201Croot-in-container\\u201D\\nto a non-root host user, limiting the blast radius. SELinux and other LSMs apply\\ncleanly. Docker: Offers a rootless mode, but it\\u2019s more complex to configure and\\nhas caveats, such as AppArmor profiles and certain network modes.\"), mdx(\"h3\", {\n    \"id\": \"selinux-and-apparmor\"\n  }, \"SELinux and AppArmor\"), mdx(\"p\", null, \"Podman: Integrates with SELinux. Use :Z on bind mounts to apply correct labels\\nfor container separation, and SELinux categories help isolate containers from\\neach other. Docker: Defaults to AppArmor on compatible distributions, which is\\nsuitable for many cases but doesn\\u2019t mesh as seamlessly with rootless and SELinux\\nenforcement.\"), mdx(\"h3\", {\n    \"id\": \"lifecycle-management\"\n  }, \"Lifecycle Management\"), mdx(\"p\", null, \"Docker: Uses \\u201Crestart: always\\u201D (and friends) in Compose, which is simple and\\neffective. Podman: Leans on systemd (quadlets). You can express restart\\nbehavior, dependencies, and order with native unit directives, offering more\\nflexibility and auditability.\"), mdx(\"h3\", {\n    \"id\": \"firewall-behavior\"\n  }, \"Firewall Behavior\"), mdx(\"p\", null, \"Docker: Modifies iptables/nftables in ways that can surprise users, potentially\\nbypassing UFW rules, which is a common complaint in self-hosting circles.\\nPodman: Respects existing firewall rules by default, allowing users to decide\\nwhat gets exposed externally.\"), mdx(\"blockquote\", null, mdx(\"p\", {\n    parentName: \"blockquote\"\n  }, \"Key takeaway: Podman\\u2019s daemonless, rootless-by-default model with SELinux and\\nsystemd gives you a tighter, Linux-native security posture. Docker\\u2019s\\narchitecture remains convenient but expands the attack surface unless\\ncarefully hardened.\")), mdx(\"h2\", {\n    \"id\": \"developer-experience-and-tooling\"\n  }, \"Developer Experience and Tooling\"), mdx(\"table\", null, mdx(\"thead\", {\n    parentName: \"table\"\n  }, mdx(\"tr\", {\n    parentName: \"thead\"\n  }, mdx(\"th\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Feature\"), mdx(\"th\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Docker\"), mdx(\"th\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Podman\"))), mdx(\"tbody\", {\n    parentName: \"table\"\n  }, mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"CLI compatibility\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Most commands are direct translations: docker run \\u2192 podman run; docker build \\u2192 podman build; docker ps \\u2192 podman ps.\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Podman prefers \\u201CContainerfile\\u201D for builds but will fall back to \\u201CDockerfile.\\u201D You don\\u2019t need to rename.\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Image builds\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Docker uses BuildKit\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Podman uses Buildah. Both output OCI images; interoperability isn\\u2019t an issue.\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Desktop experience and licensing\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Docker Desktop is polished and includes security scanning, dev environments, and a strong extension ecosystem. Licensing may apply for larger orgs.\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Podman Desktop is open-source, improving quickly, and suitable for managing images and containers. You can bring external scanners via extensions.\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Compose and equivalents\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Docker Compose is mature and ubiquitous.\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"podman-compose exists but is community-driven and not fully feature-complete for complex stacks. For production-like lifecycle management, quadlets (systemd) are recommended.\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Ecosystem highlights\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Many Docker-first tools work via the Podman socket for compatibility.\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Several users report Portainer works with Podman. For auto-updates, Podman supports an \\u201Cauto-update\\u201D label instead of Watchtower. Cockpit (on Fedora Server and friends) includes a Podman management UI. Komodo is another GUI option that supports both.\")))), mdx(\"h2\", {\n    \"id\": \"orchestration-and-pods\"\n  }, \"Orchestration and Pods\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Docker includes Swarm for built-in, simple cluster orchestration. Many teams\\nstill rely on it.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Podman has no Swarm equivalent. For HA and multi-node deployments, use\\nKubernetes or Nomad.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Podman pods mirror Kubernetes pods: multiple containers share namespaces,\\nideal for sidecars (e.g., log processing) and closely coupled services.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"You can generate Kubernetes manifests directly from Podman with\\n\", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"podman generate kube\"), \", creating a bridge from dev to K8s without\\nhand-authoring YAML.\")), mdx(\"h2\", {\n    \"id\": \"networking-and-devices\"\n  }, \"Networking and Devices\"), mdx(\"p\", null, \"Rootless networking:\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Podman\\u2019s netavark and aardvark-dns handle rootless networks cleanly; each\\nuser\\u2019s containers are isolated.\")), mdx(\"p\", null, \"Binding privileged ports in rootless mode:\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"You can redirect privileged ports (80/443) to high ports and keep containers\\nrootless.\")), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-bash\"\n  }, \"# Redirect 80 to 8080 and 443 to 8443 using firewalld\\nsudo firewall-cmd --permanent --add-forward-port=port=80:proto=tcp:toport=8080\\nsudo firewall-cmd --permanent --add-forward-port=port=443:proto=tcp:toport=8443\\nsudo firewall-cmd --reload\\n\")), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Alternatively, lower the unprivileged port threshold (system-wide), but this\\nchanges host behavior.\")), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-bash\"\n  }, \"# Allow binding to low ports without root (system-wide)\\n# Note: this affects all processes \\u2013 assess risk before applying\\nsudo sysctl -w net.ipv4.ip_unprivileged_port_start=0\\n\")), mdx(\"p\", null, \"Macvlan and host networking:\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Rootless mode has caveats with macvlan/host networking. Test your specific\\ntopology; you might prefer rootful containers for advanced network setups.\")), mdx(\"p\", null, \"GPU access (NVIDIA CDI):\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"CDI simplifies GPU pass-through for containers. Generate CDI config at boot.\")), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-bash\"\n  }, \"# Generate NVIDIA CDI YAML on boot (root crontab)\\n@reboot nvidia-ctk cdi generate --output=/etc/cdi/nvidia.yaml\\n\")), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Reference devices in your quadlet/container config and set capabilities.\")), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-ini\"\n  }, \"# ~/.config/containers/systemd/jellyfin.container\\n[Unit]\\nDescription=Jellyfin with GPU\\n\\n[Container]\\nImage=jellyfin/jellyfin:latest\\nContainerName=jellyfin\\nPublishPort=8096:8096\\nAddDevice=nvidia.com/gpu=all\\nEnvironment=NVIDIA_VISIBLE_DEVICES=all\\nEnvironment=NVIDIA_DRIVER_CAPABILITIES=all\\nVolume=/srv/media:/media:Z\\n\\n[Service]\\nRestart=always\\n\\n[Install]\\nWantedBy=default.target\\n\")), mdx(\"p\", null, \"Storage and permissions:\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Rootless pods/containers use user namespaces; host file ownership might appear\\nas high UID/GIDs. The PUID/PGID pattern helps align application permissions.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"With SELinux enforcing, remember :Z on bind mounts to label volumes correctly\\nfor container isolation.\")), mdx(\"h2\", {\n    \"id\": \"performance-and-resource-usage\"\n  }, \"Performance and Resource Usage\"), mdx(\"p\", null, \"Runtime performance is broadly equivalent because both engines rely on OCI\\nruntimes (e.g., runc). You may see slightly faster container setup/teardown in\\nCI with Podman\\u2019s daemonless model; long-running services won\\u2019t show major\\ndifferences. Docker\\u2019s daemon can be a bottleneck in rare cases; Podman spreads\\nwork across processes.\"), mdx(\"h2\", {\n    \"id\": \"platform-support-and-distribution-defaults\"\n  }, \"Platform Support and Distribution Defaults\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Linux: RHEL/Fedora default to Podman. Debian 13 includes Podman 5.4.x. Ubuntu\\noffers Podman via official packages and PPAs.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"macOS/Windows: Both Docker Desktop and Podman use a managed VM under the hood.\\nDocker\\u2019s cross-platform dev experience is still more mature.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Licensing: Docker Desktop may require paid plans in larger orgs. Podman\\nDesktop is Apache-2.0\\u2014fully open-source.\")), mdx(\"h2\", {\n    \"id\": \"community-pulse-what-reddit-says-rselfhosted\"\n  }, \"Community Pulse: What Reddit Says (r/selfhosted)\"), mdx(\"p\", null, \"A recent r/selfhosted poll showed the majority still on Docker, with a\\nsignificant minority using Podman. Themes from the discussion:\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Pro-Podman: Rootless mode \\u201Cjust works,\\u201D systemd quadlets made lifecycle\\nreliable, and firewall behavior was sane. Several users said Podman helped\\nthem understand containers and systemd more deeply.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Friction points: podman-compose issues for complex stacks led some back to\\nDocker; GPU access in rootless mode required extra setup; highly nuanced\\nCompose features weren\\u2019t always smooth; online docs skew Docker-first.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Balanced views: Many run Podman on RHEL/Fedora and Docker on Debian/Ubuntu.\\nReports confirm Portainer works with Podman, and Podman\\u2019s auto-update label\\nsubstitutes for Watchtower. Some households run both engines on the same\\nmachine.\")), mdx(\"blockquote\", null, mdx(\"p\", {\n    parentName: \"blockquote\"\n  }, \"Community sentiment: Podman excels for secure, systemd-managed Linux services.\\nDocker still wins on ubiquitous documentation, Compose maturity, and\\nmacOS/Windows workflows.\")), mdx(\"h2\", {\n    \"id\": \"migration-guide-from-docker-to-podman\"\n  }, \"Migration Guide: From Docker to Podman\"), mdx(\"p\", null, \"Preparation checklist:\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Inventory Compose stacks, volumes, networks, and plugins.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Identify privileged port bindings, macvlan/host networking, GPU needs.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Note SELinux/AppArmor status on your hosts.\")), mdx(\"p\", null, \"Installation paths:\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Linux: Install Podman from your distro repository. On Debian/Ubuntu, ensure\\nyou\\u2019re on a recent Podman (v5+ if possible). On Fedora/RHEL, Podman is\\nstandard.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"macOS/Windows: Use \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"podman machine\"), \" or Podman Desktop to provision the VM.\")), mdx(\"p\", null, \"Running both side-by-side:\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"You can install \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"podman-docker\"), \" to make \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"docker\"), \" invoke Podman. Avoid aliasing\\n\", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"docker=podman\"), \" globally until you\\u2019ve tested compatibility.\")), mdx(\"p\", null, \"Compose strategies:\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"podman-compose works for many basic stacks. For production-like lifecycle\\nmanagement, prefer quadlets.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Convert Compose to quadlets gradually\\u2014start with non-critical services.\")), mdx(\"p\", null, \"Example: Compose \\u2192 quadlets for a web + Postgres stack\"), mdx(\"p\", null, \"Original Compose (simplified):\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-yaml\"\n  }, \"services:\\n  db:\\n    image: postgres:16\\n    environment:\\n      POSTGRES_PASSWORD: example\\n    volumes:\\n      - /srv/db:/var/lib/postgresql/data\\n  web:\\n    image: caddy:latest\\n    ports:\\n      - '80:80'\\n    volumes:\\n      - /srv/site:/srv/site\\n    depends_on:\\n      - db\\n\")), mdx(\"p\", null, \"Podman quadlets:\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-ini\"\n  }, \"# ~/.config/containers/systemd/db.container\\n[Unit]\\nDescription=Postgres (rootless)\\n\\n[Container]\\nImage=postgres:16\\nContainerName=db\\nEnvironment=POSTGRES_PASSWORD=example\\nVolume=/srv/db:/var/lib/postgresql/data:Z\\nPublishPort=5432:5432\\n\\n[Service]\\nRestart=always\\n\\n[Install]\\nWantedBy=default.target\\n\")), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-ini\"\n  }, \"# ~/.config/containers/systemd/web.container\\n[Unit]\\nDescription=Caddy web\\nWants=db.service\\nAfter=db.service\\n\\n[Container]\\nImage=caddy:latest\\nContainerName=web\\nPublishPort=8080:80\\n# bind to 8080 and forward 80 via firewalld to keep rootless\\nVolume=/srv/site:/srv/site:Z\\n\\n[Service]\\nRestart=always\\n\\n[Install]\\nWantedBy=default.target\\n\")), mdx(\"p\", null, \"Enable user services and keep them alive across logouts:\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-bash\"\n  }, \"systemctl --user enable --now db.container web.container\\n# Allow user services to run after logout\\nloginctl enable-linger \\\"$USER\\\"\\n\")), mdx(\"p\", null, \"Expose 80/443 safely in rootless mode:\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-bash\"\n  }, \"sudo firewall-cmd --permanent --add-forward-port=port=80:proto=tcp:toport=8080\\nsudo firewall-cmd --permanent --add-forward-port=port=443:proto=tcp:toport=8443\\nsudo firewall-cmd --reload\\n\")), mdx(\"p\", null, \"Systemd generation:\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-bash\"\n  }, \"# Generate a systemd unit from an existing container and install it\\npodman run --name myapp -d myimage:latest\\npodman generate systemd --new --name myapp > ~/.config/systemd/user/myapp.service\\nsystemctl --user enable --now myapp.service\\n\")), mdx(\"p\", null, \"Auto-updates:\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-ini\"\n  }, \"# Add auto-update to a quadlet\\n[Container]\\nImage=myorg/myapp:stable\\nContainerName=myapp\\nAutoUpdate=registry\\n\")), mdx(\"p\", null, \"Scheduling updates:\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Use a systemd timer or a weekly cron to run \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"podman auto-update\"), \".\")), mdx(\"p\", null, \"Kubernetes manifests:\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-bash\"\n  }, \"# Generate K8s YAML from a pod or container config\\npodman generate kube mypod > mypod.yaml\\n# Later, apply with kubectl\\nkubectl apply -f mypod.yaml\\n\")), mdx(\"p\", null, \"Troubleshooting playbook:\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Permissions: Use :Z on volumes under SELinux; confirm UID/GID mapping matches\\napp expectations (PUID/PGID).\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Ports <1024: Prefer firewalld redirects; only adjust sysctl if you accept\\nsystem-wide implications.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"GPU: Ensure CDI YAML is generated at boot and devices are referenced in your\\nunit.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Networking: Rootless macvlan/host networking may be limited\\u2014validate or switch\\nspecific containers to rootful.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Compose gaps: If podman-compose falls short, convert critical services to\\nquadlets and retain Compose for simpler ones.\")), mdx(\"h2\", {\n    \"id\": \"case-studies\"\n  }, \"Case Studies\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Hardened homelab reverse proxy + DB: Moving Caddy and Postgres to quadlets\\nwith rootless ports via firewalld simplified auditing and removed Docker\\u2019s\\nfirewall surprises. AutoUpdate keeps images fresh.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Multi-user shared server: Each user runs their own rootless containers managed\\nvia systemd user services. Isolation and accountability improved\\u2014process\\nownership maps to the correct user.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"CI pipeline: Podman+Buildah reduced build startup overhead in ephemeral jobs,\\nremoving the daemon as a potential failure point.\")), mdx(\"h2\", {\n    \"id\": \"alternatives-and-related-tools\"\n  }, \"Alternatives and Related Tools\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"nerdctl + containerd: Docker-like CLI that talks to containerd. Good if you\\nalready standardized on containerd.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"CRI-O: Kubernetes-focused runtime (used by OpenShift). Pair with Podman for\\nlocal dev; use CRI-O in clusters.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"VMs/LXC: For strong isolation and traditional service management, consider VMs\\nor LXC/LXD where containers\\u2019 shared kernel isn\\u2019t a fit.\")), mdx(\"h2\", {\n    \"id\": \"recommendations-by-persona\"\n  }, \"Recommendations by Persona\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Security-conscious enterprise ops (Linux): Prefer Podman for rootless,\\nSELinux, and systemd integration. Generate K8s manifests as a pathway to\\nclusters.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Self-hosters relying on Portainer/Compose/Watchtower flows: Docker remains the\\nsmoothest. If you switch, plan to replace Watchtower with Podman\\u2019s auto-update\\nand move key services to quadlets.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"macOS/Windows developers: Docker Desktop still provides the easiest\\ncross-platform experience. Use Podman on servers where it adds value.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Teams on Docker Swarm: Swarm has no direct equivalent in Podman. Either stay\\non Docker or plan a move to Kubernetes/Nomad.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"GPU-heavy workloads (media, ML): If Docker already works reliably, test Podman\\ncarefully. CDI helps, but you\\u2019ll need to validate device pass-through and\\npermissions.\")), mdx(\"h2\", {\n    \"id\": \"faq\"\n  }, \"FAQ\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"p\", {\n    parentName: \"li\"\n  }, \"Can Podman run Docker images? Yes. OCI-compliant images work across Docker,\\nPodman, and Kubernetes.\")), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"p\", {\n    parentName: \"li\"\n  }, \"Do I need to rename Dockerfile to Containerfile? No. Podman reads\\nContainerfile first and falls back to Dockerfile.\")), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"p\", {\n    parentName: \"li\"\n  }, \"Does Portainer work with Podman? Many users report success. Alternatively, try\\nCockpit\\u2019s Podman UI or Komodo.\")), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"p\", {\n    parentName: \"li\"\n  }, \"How do I handle updates without Watchtower? Use Podman\\u2019s AutoUpdate=registry\\nlabel and schedule \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"podman auto-update\"), \" via systemd timers.\")), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"p\", {\n    parentName: \"li\"\n  }, \"Does Podman work with nftables/UFW differently than Docker? Podman respects\\nexisting firewall rules by default, avoiding Docker\\u2019s common iptables\\nsurprises.\")), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"p\", {\n    parentName: \"li\"\n  }, \"Is Podman replacing Docker? Not universally. Podman is a drop-in alternative\\nthat\\u2019s compelling on Linux servers; Docker still dominates desktop dev\\nworkflows and Compose-based setups.\"))), mdx(\"h2\", {\n    \"id\": \"checklist-and-resources\"\n  }, \"Checklist and Resources\"), mdx(\"p\", null, \"Pre-migration checklist:\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Confirm distro versions (Podman v5+ preferred) and SELinux/AppArmor status.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Identify services needing privileged ports, macvlan, or GPUs.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Plan quadlet conversion for services that benefit from systemd management.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Test rootless mode with volumes labeled :Z and validate permissions.\")), mdx(\"p\", null, \"Command mapping cheat sheet:\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"docker build \\u2192 podman build\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"docker run \\u2192 podman run\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"docker ps \\u2192 podman ps\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"docker logs \\u2192 podman logs\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"docker stop \\u2192 podman stop\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"docker pull/push \\u2192 podman pull/push\")), mdx(\"p\", null, \"Documentation pointers:\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Podman systemd/quadlets: search \\u201CPodman quadlet\\u201D in official docs.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Podman generate kube/systemd: \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"podman generate kube|systemd\"), \" usage guides.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Debian 13 Podman details: Debian repositories and release notes for Podman\\n5.4.x.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"NVIDIA CDI: \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"nvidia-ctk cdi generate\"), \" docs.\")), mdx(\"h2\", {\n    \"id\": \"closing-thoughts\"\n  }, \"Closing Thoughts\"), mdx(\"p\", null, \"If you value Linux-native security and lifecycle management, Podman is ready.\\nRootless by default, tight SELinux integration, clean firewall behavior, and\\nsystemd-backed operations make it a strong fit for servers. If your organization\\nlives inside Docker Compose, Swarm, and macOS/Windows developer workflows,\\nDocker remains the path of least resistance.\"), mdx(\"p\", null, \"Personally, I advocate a pragmatic hybrid: adopt Podman where it brings clear\\nsecurity and operability value (Linux servers), keep Docker where it accelerates\\ndeveloper productivity (laptops, mixed OS teams), and migrate incrementally with\\nquadlets. That way, you gain Podman\\u2019s strengths without disrupting what Docker\\nalready does well.\"));\n}\n;\nMDXContent.isMDXComponent = true;","tech":["Linux","Docker","Redhat","Ubuntu","Podman","DevOps"],"category":"Post","appDescription":null,"hero":{"full":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAACXBIWXMAAAsSAAALEgHS3X78AAADxklEQVQ4y51UW1OTVxT9/gNCLpBAvgQScr+SRJJAUckNkiAgBQwgY2FGVAalLYhoytTOtLXWjtPHKGN9KZ1Oq4LOtFP+2uraB740z31YnMM531577b3XiWY2m2E2mWBqg5zJarFYFHp6elqw2Wzo6+tDf78LHo8b0WgUxUIBkxMTWF9bg2ZhsBFoEBmkxrndbkd3d3eLUNd1uFwGYQTjV65g+upVbN65A02COzs70dHRoVaLxdxS1W21wkq0k/X29sLh6FOEfr8P8XgcpVIJazdv4vmzZ9ACfj8WFhbwyeioymyQi0IhspFIFNrtvapU+cbpdLLkfkhsOp1GuVzC/a0tvD48hKbrDtSvX8cWD+7fu4f5+XlkhjNwu91KqVGik4pcqm8eeH1ehEJBJBJx5HJZ1GpVPNjdxctmE5ooEvmVyQpub2zgmydP0Gg0sHpjFQU2OxKJwHGuSsgCgQDCkTBisRgymQwK+TxWV1bw/Xff4oenT6FJaV1dXarEUCjE5k5jZ2cHm5ubqFZrmLt2DYuLiygWi0imkiwxhdGREfatiHq9jo1bt/Dl59v46fmP+GJ7+2wo7TYZGBhg5iwDyhhhYCqVQqVSwfr6usINqvmMA2g8eoSfX7zA4/197IqAu3exsrx8prDdJtIz6V+QanO5EWSzWdXTy5cusS2TmJ2ZxdzcHBbY6yUq/JT7CXpwbGxM7anwP3WGVWQIQirwc5I+n09NVXodDAaRY5Lk0JCyjdzLWiwWcJvlt0oWZQIrreJm2Qapw+FQRAPnZ10cotgokUggxlciQ5IE+fy4qkKzWi3KvDJFp1NXXvN6vcp/cU4yPz6uFA5ywqJGiI3kHiYcotJRejgWiyIcDkOTMoXIyBZm7wokCUiZVLZcX0KJE05xwpIgzSENUV2UdhIMDnpUsjgJg4zXbFQU4kV6eBipixdxmWTV2hTizGxm+VEGZ2TavIvxLJFM8iwOH43dTyInVbr4pj0UIND2yHrAzAfRGL6OJ4g4GpT+Fc/2/AE85BAOqP4xle/zW8FDlr7H4AcCrwGvgvYbiU45/r9mZnC6tIRjKjzhC/lI753ySf5De/xNO3yYKOOI5L+S8EjAfWttg/aGak5Idky8n5rCMV/KO5IdT5+t72s1vC2X8a5axR98Zn/yl+Ut/fg7Jyrfn8zO4ohP8BeqfSOETf55xXJeCmTPfh6yRIHsXzGhca5g3PH8kG0RSGyTbWjKUHQaWqcPnefQFUzQ6U/9/H9n+72p7a5t7ySPQLvAH4YLPGytxv5/oIP4F93nn3gbyfUJAAAAAElFTkSuQmCC","aspectRatio":1,"src":"/static/f3fc4032bcf7eb791ba092b7ec1ff9ed/a1946/dockervspodman-cov.png","srcSet":"/static/f3fc4032bcf7eb791ba092b7ec1ff9ed/5b37e/dockervspodman-cov.png 236w,\n/static/f3fc4032bcf7eb791ba092b7ec1ff9ed/49058/dockervspodman-cov.png 472w,\n/static/f3fc4032bcf7eb791ba092b7ec1ff9ed/a1946/dockervspodman-cov.png 944w,\n/static/f3fc4032bcf7eb791ba092b7ec1ff9ed/6050d/dockervspodman-cov.png 1200w","srcWebp":"/static/f3fc4032bcf7eb791ba092b7ec1ff9ed/99fbb/dockervspodman-cov.webp","srcSetWebp":"/static/f3fc4032bcf7eb791ba092b7ec1ff9ed/77392/dockervspodman-cov.webp 236w,\n/static/f3fc4032bcf7eb791ba092b7ec1ff9ed/1f177/dockervspodman-cov.webp 472w,\n/static/f3fc4032bcf7eb791ba092b7ec1ff9ed/99fbb/dockervspodman-cov.webp 944w,\n/static/f3fc4032bcf7eb791ba092b7ec1ff9ed/9000d/dockervspodman-cov.webp 1200w","sizes":"(max-width: 944px) 100vw, 944px","tracedSVG":"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='400'%20height='400'%20viewBox='0%200%20400%20400'%20preserveAspectRatio='none'%3e%3cpath%20d='M0%20200v200h401V200a2322%202322%200%2000-1-132%20280%20280%200%2001-2%2073l1-1c1-1%201%200%201%204s0%205-2%205h-3l-2%201c-2%200-11%202-10%203v2l-2-2-1-3%201%203c0%204%200%204-2%204h-5l1%202v1h-3v-2l-1%201c-2%201-2%201-1-1%200-2%200-3-2-3l-1-3h-2v2h-1c-1%200-5%204-4%206l-1%201c-1%200-1%201%201%202v2l-3-3c0-2%200-2-1-1-1%202-2%202-5%201-3%200-3%200-2%201%202%201%200%202-4%201l-1%202h-5l-4%201h-1c0%202-3%203-3%201h-3v1l-5-1c-2%200-2%200-1%202%200%202%200%202-1%201-2-2-12-2-12-1l-1%201-2%201h-1l-5-3c-2%200-2%200-1%201%201%202%201%202-1%202l-2-1%201-1%201-1c-1-2-4-2-6%200h-1c0-2-3-2-4%200h-1l-1-1-2%201-3-1c-2-2-3-3-4-2-2%200-3%200-3-2-1-1-1-1-2%201s-1%202-1%200%200-2-2-1h-4c1-1-2-3-4-3-1%201-2%200-2-1%200-2-2-1-2%201l-2%202v-1c1-2%200-2-5-2l-7-1h-6l-2-1c0-1%200-2-1-1h-4l-3-1%202%202c7%203%208%203%208%205h-1c-1-2-10-3-10-1v-1c0-2-1-3-2-3-1-1-5%201-5%202l1%201h1l1%201h1c0%202%200%202-4%200l-4-1-1%201v-1h-1l-1-1c1-1%200-2-1-2v-1c1-1-1-3-4-2l-2-2-2-2v3l-1-2-2-2-5-2c-1-2-2-2-2-1h-1c0-1-1-2-3-1l-3-1%201-1%201-1h-1c-2%200-5-2-3-3%202%200%201-3-1-3h-1c1%201%202%202%200%203h-1l-2-2-2-1%201-1v-2l-3-1v-2l4%203%202%201c-1-3%202-3%204-1%202%203%203%202%201-1l-4-2c-1%200-2%200-1-1l-1-1h-1l-2-1c-1%200-4-1-5-3-2-2-4-3-5-2l-3-2h-1l1%202%201%201v4c-1%200-1%201%201%203%201%202%202%203%203%202s2-2%201-3l2-1%202%201-1%202c-1%202%200%203%201%205%203%202%203%205%200%204l-3-2-5-4c-2-1-3-1-2-2v-1h-1l-1%201c-2%200-3-2-1-2h-1l-1-1-1-2c-3-1%200-2%203-1s4%200%202-2c-1-1-2-2-1-3l-1-1c-2%200-10-5-10-7l-3-1-5-1h-1l-2-2-2-1-3-2c-1-1-3-2-4-1-1%200-2%200-2-2l-1-1-2-1c-1-2-8-4-13-5-3%200-8-1-10-3l-3-1h-6l7%204a185%20185%200%200134%2014l1%201c-1%201-1%201%200%200l3%201v2c-1%200-1%201%201%202%202%202%203%202%201%200-2-3%200-2%203%201%204%203%204%205%201%202-4-2-4-2%200%204%202%205%203%2011%201%2012l-1-4-2-6h-1v9l-1-4c-1-4-2-4-2-2s0%202-1%201h-2l1%202%201%201v4l1%203h-2c-1%202-4-4-4-7l1%202c2%203%202%201%201-4-2-3-2-3-2-1s0%202-1-1a3483%203483%200%2001-1%2012l-3-4c0%202%200%202-1%200-2-2-2-1%200%203%201%203%201%203%202%202h1c-1%201%200%203%202%206%203%205%202%204-4-2l-4-3c0%201-1%201-2-1-4-4-3-1%201%203l3%205-10-9c-4-5-9-9-9-8l-2-1-2-1-1%201h-1l-3-2-3-2h-2l-2-1-5-5c-5-5-7-6-6-3l-3-2-4-2v-1l-1-1-2-1h-2l2%203%202%202-3-2h-3v-3h-2c-1%201-2%201-3-1-3-3-5-3-3%200v1l-10-11-1-1v5h-3v-2h-2v-1l-4-5c0-2%200-2%202-1h1v-2l1-2%201-1h-1c-2%201-2-3-1-5h3c-1%201%201%205%202%204v-2c2%201%202%200%202-2l2-4c2-2%201-3-1-3-1%201-3%200-4-1-3-2-8%201-8%206l1-1c3-5%207-6%207-1%200%202-2%202-3%201l-3%203c-3%203-3%203-3%201s0-2-1-1v3c1%202-2%201-3-1v-2c3-3%204-6%203-6l-2%202-1%202v-1l-1-1-1%202-1%202h-2l2%201v2l1%203h3l2%202%201%202%201%203c1%202%202%204%200%202h-3l1-1v-1h-4l-3-1-1-3%201-3h-1c-1%202-1%202-3-2l-2-6v-1a410%20410%200%2000-7-10c-1-4%201-6%2010-6h17l6%203%205%201%206%203%207%203c2%202%2010%205%2016%206l6%202%2011%204c14%203%2016%204%2020%206l7%201%206%202%202%201%201%201%205%204a147%20147%200%200118%2010%20467%20467%200%200133%2015l5%201h5v2h2c0%201%206%203%207%202l1%202%203%201%203%201c1%202%2012%205%2013%204h1c2%202%205%203%209%203l2%202%201-1c2-3%203-3%202%200v2l7%202%201-2v-2l1%202%203%201%203-1h1l4%201%204%201c2%200%202%200%200-3-2-2-3-3-4-2-2%200-2-1-2-2l1-2%203%201h2l1-1c-1%202%201%203%201%201h2c1%202%201%203-1%202l-1%202c1%202%203%203%203%201s4-2%206%200c2%201%202%201%205-1h-1l-2-1%203-2c2%200%202-1%201-2l1-2%201-2%201-1h3l-1-1-1-1c1-1%202%200%204%201h2v-3c0-3%203-1%202%201%200%202%200%202%201%201l2-2a575%20575%200%20005-2c2%201%203%200%203-3-1-2%200-3%201%200l2%201h1l-1%201h1l1%202%202%201h3c1-2%200-2-2-2s-2%200-1-1l1-2%202-2h2l-1%201-2%202h1l2-1%203-1c1-1%201-1%201%201-1%201-1%202%201%201%204%200%204%200%202-1l-2-2c0-3%203-3%204-1h1l2-3c1-2%201-2%201%200-1%201%200%202%201%202v-5h4l-1-2-2-1h2l1-1h2c1%200%202%201%201%202l1%201c1-1%201-3-1-5-1-2%200-3%202-1h3c1-2%202-2%202-1h1v-3h2l2-2%202-1-1-3c-3-4-4-6-1-4h3v-1l-1-2h1l1%201v-2l-3-2v-1c1-2%202-2%203%200%202%201%202%201%202-1v-2l1-2h-3v-7l3-1-1%202-1%201h2l4-2c2%200%202%200%201-2l-2-2-2-2h-2l-1%201v-3c-1-2%202-4%205-3%203%200%203%200%202-1l-1-2v-1l-1%201-1%201c-2%200-3-2-1-2l-1-1-2-3h1l1-1%201-3v-3c1-1%201-1-1-1h-1v-1c-3%200%200-2%203-2l2-2a1152%201152%200%2000-1-6c-1%201-2%202-3%201l-1%201h-4l-1-3%202%201h3l1-4c0-4%200-4%203-4l2%201c-2%202-1%203%201%202%201-1%201-1%201%201h7l2%201c2%200%201-2-1-2l-2-2h1c2%202%204%201%204-1-1-2-1-3%201-3s2%201%201%203c-2%202-2%205%200%205l3%201%202%201c1-1-3-4-4-3l-1-1%201-1%201-3c0-2%200-2%202-1h2c0-2-2-5-4-5-3%202-1-1%203-2l3-3%202-1c2%201%202-2%200-2h-2l-2%201c-1-1-1-2%201-3l2-2h-2c-2%202-2%202-3%200l-1-3%201-5c0-2%200-2-1-1l-3%202%201-2c2-2%202-2%201-3h-3c1%201%200%202-1%202-1%201-1%200-1-1%201-1%201-2-1-2s-3%201-3%203c-1%201-1%201-1-1s0-2-19-2l-20%201h-1l-68-1a1015%201015%200%2000-68%201L98%200H0v200m397-37l1%202%201%201h-1c-2-1-4%201-2%203l-1%201-2%202-1-1-2-2v3c2%203-1%206-4%205v2h-3c0-2%200-2-1-1v3l-1%201v2l-1%201c-2%200-7%205-7%207%201%201%201%201-1%201h-1c0%203%200%205-1%203h-1c1%202%200%202-1%202s-2%200-1%201h2c3-1%202%202-2%204h-3v-1c-2%200-3%202-1%202%201%201%200%204-2%204l-2%201h5l1%201v-3c0-2%203-4%206-3%202%200%205-1%203-2v-1h2c1%200%202-1%201-2h-2l2-2%204-1%204%202%202%201%202-2%202-1h-1l-1-1-1-1c-1%201-2%200-2-1h4l3%201c-1-1%201-4%202-4l2%201h1l1-2%201-6-1-6v-1l1-8c0-4%200-6-1-5h-2m-202%206c3%200%203%200%202%201s-1%201%201%201h3l-3%201c-2%201-2%201%201%201h3l-4%201c-4%201-4%203%201%202h8l18%201c18%201%2037%205%2038%209l7%204%208%206%206%203%206%204%203%202%202%201v2l-1%202c0%202%202%201%202-1h1l2%202%204%203%203%203h2l2%201-9-9a70%2070%200%2001-10-9c-2%200-12-7-20-12-12-8-23-12-35-13a24492%2024492%200%2001-32-2c2-1-5-5-8-5h-3l2%201m-32%2061c2%203%203%205%201%203h-6l2%202c2%200%202%200%201%201h-4c-1%200-2%200-1%201l1%203%201%202h1v1c-1%200-1%203%201%204v2c-2%201-2%201-1%202v1l-1%201h1l1%201v2l1-2v-1l1-1c0-1%200-2%201-1l1%201%201%201h1l2-4c1-1%202-2%201-3-1-2-1-2%201-2%201%201%203%200%204-1%203-1%203-1%203%201s0%202-1%201-1-1-2%201c-1%203%200%204%202%202l2-1-1%201v1l3-2%202-1%202-1c3-1%203-1%201-3v-2c1%200-10-6-13-6l-2-2-4-1-1-1v-1l-3-1%201%202m-50%2026l1%202v6l2%203h8l1-1-1-1-1-1%201-2%201%202%201%201%201-3c0-3-1-3-3-3h-2l2-1c2-1%202-1%200-1-1%200-2%200-1-1l-1-1-1%201h-1l-1%201v2l-1-1-3-2h-2m52%2048c0%202%200%202-2%202-3-2-6%202-6%206%200%205%203%207%208%206h3v-9l-1-8c-1%200-2%201-2%203m-144-1v15h4c5%200%209-2%209-5%201-8-2-11-8-11l-5%201m112-1c-1%202%200%2016%202%2016l1-3c-1-3%200-3%202-3%203%200%205-2%205-5l-1-4c-1-1-8-2-9-1m-93%204c-6%202-5%2011%201%2012%201%201%203%200%204-1%204-4%204-6%201-10-3-2-3-2-6-1m36%200l-3%203c-2%206%203%2011%209%209%203-1%203-3-1-2l-5-1c-1-2-1-2%203-2s5%200%205-2c0-4-4-6-8-5m71%200c-3%202-4%209-2%2011%205%203%2010%201%2010-5%200-5-4-8-8-6m27%200c-3%200-3%200-3%206%200%205%200%206%202%206l1-5c0-3%200-4%202-5%202%200%203%202%203%206l1%204%201-3c0-5%201-7%203-7s2%201%202%205%200%205%202%205l1-5c0-6-3-9-6-7h-4l-2-1-3%201m20%200c-3%201-2%203%201%202l3%201c1%201%200%201-1%201-3%200-6%202-6%205%200%202%204%204%207%203%204%200%204%200%204-5l-2-6c-2-2-3-2-6-1'%20fill='%23fafafa'%20fill-rule='evenodd'/%3e%3c/svg%3e"},"regular":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAACXBIWXMAAAsSAAALEgHS3X78AAADxklEQVQ4y51UW1OTVxT9/gNCLpBAvgQScr+SRJJAUckNkiAgBQwgY2FGVAalLYhoytTOtLXWjtPHKGN9KZ1Oq4LOtFP+2uraB740z31YnMM531577b3XiWY2m2E2mWBqg5zJarFYFHp6elqw2Wzo6+tDf78LHo8b0WgUxUIBkxMTWF9bg2ZhsBFoEBmkxrndbkd3d3eLUNd1uFwGYQTjV65g+upVbN65A02COzs70dHRoVaLxdxS1W21wkq0k/X29sLh6FOEfr8P8XgcpVIJazdv4vmzZ9ACfj8WFhbwyeioymyQi0IhspFIFNrtvapU+cbpdLLkfkhsOp1GuVzC/a0tvD48hKbrDtSvX8cWD+7fu4f5+XlkhjNwu91KqVGik4pcqm8eeH1ehEJBJBJx5HJZ1GpVPNjdxctmE5ooEvmVyQpub2zgmydP0Gg0sHpjFQU2OxKJwHGuSsgCgQDCkTBisRgymQwK+TxWV1bw/Xff4oenT6FJaV1dXarEUCjE5k5jZ2cHm5ubqFZrmLt2DYuLiygWi0imkiwxhdGREfatiHq9jo1bt/Dl59v46fmP+GJ7+2wo7TYZGBhg5iwDyhhhYCqVQqVSwfr6usINqvmMA2g8eoSfX7zA4/197IqAu3exsrx8prDdJtIz6V+QanO5EWSzWdXTy5cusS2TmJ2ZxdzcHBbY6yUq/JT7CXpwbGxM7anwP3WGVWQIQirwc5I+n09NVXodDAaRY5Lk0JCyjdzLWiwWcJvlt0oWZQIrreJm2Qapw+FQRAPnZ10cotgokUggxlciQ5IE+fy4qkKzWi3KvDJFp1NXXvN6vcp/cU4yPz6uFA5ywqJGiI3kHiYcotJRejgWiyIcDkOTMoXIyBZm7wokCUiZVLZcX0KJE05xwpIgzSENUV2UdhIMDnpUsjgJg4zXbFQU4kV6eBipixdxmWTV2hTizGxm+VEGZ2TavIvxLJFM8iwOH43dTyInVbr4pj0UIND2yHrAzAfRGL6OJ4g4GpT+Fc/2/AE85BAOqP4xle/zW8FDlr7H4AcCrwGvgvYbiU45/r9mZnC6tIRjKjzhC/lI753ySf5De/xNO3yYKOOI5L+S8EjAfWttg/aGak5Idky8n5rCMV/KO5IdT5+t72s1vC2X8a5axR98Zn/yl+Ut/fg7Jyrfn8zO4ohP8BeqfSOETf55xXJeCmTPfh6yRIHsXzGhca5g3PH8kG0RSGyTbWjKUHQaWqcPnefQFUzQ6U/9/H9n+72p7a5t7ySPQLvAH4YLPGytxv5/oIP4F93nn3gbyfUJAAAAAElFTkSuQmCC","aspectRatio":1,"src":"/static/f3fc4032bcf7eb791ba092b7ec1ff9ed/3ddd4/dockervspodman-cov.png","srcSet":"/static/f3fc4032bcf7eb791ba092b7ec1ff9ed/078a8/dockervspodman-cov.png 163w,\n/static/f3fc4032bcf7eb791ba092b7ec1ff9ed/e56da/dockervspodman-cov.png 327w,\n/static/f3fc4032bcf7eb791ba092b7ec1ff9ed/3ddd4/dockervspodman-cov.png 653w,\n/static/f3fc4032bcf7eb791ba092b7ec1ff9ed/c5cc7/dockervspodman-cov.png 980w,\n/static/f3fc4032bcf7eb791ba092b7ec1ff9ed/6050d/dockervspodman-cov.png 1200w","srcWebp":"/static/f3fc4032bcf7eb791ba092b7ec1ff9ed/0acdf/dockervspodman-cov.webp","srcSetWebp":"/static/f3fc4032bcf7eb791ba092b7ec1ff9ed/ac59e/dockervspodman-cov.webp 163w,\n/static/f3fc4032bcf7eb791ba092b7ec1ff9ed/7660b/dockervspodman-cov.webp 327w,\n/static/f3fc4032bcf7eb791ba092b7ec1ff9ed/0acdf/dockervspodman-cov.webp 653w,\n/static/f3fc4032bcf7eb791ba092b7ec1ff9ed/75470/dockervspodman-cov.webp 980w,\n/static/f3fc4032bcf7eb791ba092b7ec1ff9ed/9000d/dockervspodman-cov.webp 1200w","sizes":"(max-width: 653px) 100vw, 653px","tracedSVG":"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='400'%20height='400'%20viewBox='0%200%20400%20400'%20preserveAspectRatio='none'%3e%3cpath%20d='M0%20200v200h401V200a2322%202322%200%2000-1-132%20280%20280%200%2001-2%2073l1-1c1-1%201%200%201%204s0%205-2%205h-3l-2%201c-2%200-11%202-10%203v2l-2-2-1-3%201%203c0%204%200%204-2%204h-5l1%202v1h-3v-2l-1%201c-2%201-2%201-1-1%200-2%200-3-2-3l-1-3h-2v2h-1c-1%200-5%204-4%206l-1%201c-1%200-1%201%201%202v2l-3-3c0-2%200-2-1-1-1%202-2%202-5%201-3%200-3%200-2%201%202%201%200%202-4%201l-1%202h-5l-4%201h-1c0%202-3%203-3%201h-3v1l-5-1c-2%200-2%200-1%202%200%202%200%202-1%201-2-2-12-2-12-1l-1%201-2%201h-1l-5-3c-2%200-2%200-1%201%201%202%201%202-1%202l-2-1%201-1%201-1c-1-2-4-2-6%200h-1c0-2-3-2-4%200h-1l-1-1-2%201-3-1c-2-2-3-3-4-2-2%200-3%200-3-2-1-1-1-1-2%201s-1%202-1%200%200-2-2-1h-4c1-1-2-3-4-3-1%201-2%200-2-1%200-2-2-1-2%201l-2%202v-1c1-2%200-2-5-2l-7-1h-6l-2-1c0-1%200-2-1-1h-4l-3-1%202%202c7%203%208%203%208%205h-1c-1-2-10-3-10-1v-1c0-2-1-3-2-3-1-1-5%201-5%202l1%201h1l1%201h1c0%202%200%202-4%200l-4-1-1%201v-1h-1l-1-1c1-1%200-2-1-2v-1c1-1-1-3-4-2l-2-2-2-2v3l-1-2-2-2-5-2c-1-2-2-2-2-1h-1c0-1-1-2-3-1l-3-1%201-1%201-1h-1c-2%200-5-2-3-3%202%200%201-3-1-3h-1c1%201%202%202%200%203h-1l-2-2-2-1%201-1v-2l-3-1v-2l4%203%202%201c-1-3%202-3%204-1%202%203%203%202%201-1l-4-2c-1%200-2%200-1-1l-1-1h-1l-2-1c-1%200-4-1-5-3-2-2-4-3-5-2l-3-2h-1l1%202%201%201v4c-1%200-1%201%201%203%201%202%202%203%203%202s2-2%201-3l2-1%202%201-1%202c-1%202%200%203%201%205%203%202%203%205%200%204l-3-2-5-4c-2-1-3-1-2-2v-1h-1l-1%201c-2%200-3-2-1-2h-1l-1-1-1-2c-3-1%200-2%203-1s4%200%202-2c-1-1-2-2-1-3l-1-1c-2%200-10-5-10-7l-3-1-5-1h-1l-2-2-2-1-3-2c-1-1-3-2-4-1-1%200-2%200-2-2l-1-1-2-1c-1-2-8-4-13-5-3%200-8-1-10-3l-3-1h-6l7%204a185%20185%200%200134%2014l1%201c-1%201-1%201%200%200l3%201v2c-1%200-1%201%201%202%202%202%203%202%201%200-2-3%200-2%203%201%204%203%204%205%201%202-4-2-4-2%200%204%202%205%203%2011%201%2012l-1-4-2-6h-1v9l-1-4c-1-4-2-4-2-2s0%202-1%201h-2l1%202%201%201v4l1%203h-2c-1%202-4-4-4-7l1%202c2%203%202%201%201-4-2-3-2-3-2-1s0%202-1-1a3483%203483%200%2001-1%2012l-3-4c0%202%200%202-1%200-2-2-2-1%200%203%201%203%201%203%202%202h1c-1%201%200%203%202%206%203%205%202%204-4-2l-4-3c0%201-1%201-2-1-4-4-3-1%201%203l3%205-10-9c-4-5-9-9-9-8l-2-1-2-1-1%201h-1l-3-2-3-2h-2l-2-1-5-5c-5-5-7-6-6-3l-3-2-4-2v-1l-1-1-2-1h-2l2%203%202%202-3-2h-3v-3h-2c-1%201-2%201-3-1-3-3-5-3-3%200v1l-10-11-1-1v5h-3v-2h-2v-1l-4-5c0-2%200-2%202-1h1v-2l1-2%201-1h-1c-2%201-2-3-1-5h3c-1%201%201%205%202%204v-2c2%201%202%200%202-2l2-4c2-2%201-3-1-3-1%201-3%200-4-1-3-2-8%201-8%206l1-1c3-5%207-6%207-1%200%202-2%202-3%201l-3%203c-3%203-3%203-3%201s0-2-1-1v3c1%202-2%201-3-1v-2c3-3%204-6%203-6l-2%202-1%202v-1l-1-1-1%202-1%202h-2l2%201v2l1%203h3l2%202%201%202%201%203c1%202%202%204%200%202h-3l1-1v-1h-4l-3-1-1-3%201-3h-1c-1%202-1%202-3-2l-2-6v-1a410%20410%200%2000-7-10c-1-4%201-6%2010-6h17l6%203%205%201%206%203%207%203c2%202%2010%205%2016%206l6%202%2011%204c14%203%2016%204%2020%206l7%201%206%202%202%201%201%201%205%204a147%20147%200%200118%2010%20467%20467%200%200133%2015l5%201h5v2h2c0%201%206%203%207%202l1%202%203%201%203%201c1%202%2012%205%2013%204h1c2%202%205%203%209%203l2%202%201-1c2-3%203-3%202%200v2l7%202%201-2v-2l1%202%203%201%203-1h1l4%201%204%201c2%200%202%200%200-3-2-2-3-3-4-2-2%200-2-1-2-2l1-2%203%201h2l1-1c-1%202%201%203%201%201h2c1%202%201%203-1%202l-1%202c1%202%203%203%203%201s4-2%206%200c2%201%202%201%205-1h-1l-2-1%203-2c2%200%202-1%201-2l1-2%201-2%201-1h3l-1-1-1-1c1-1%202%200%204%201h2v-3c0-3%203-1%202%201%200%202%200%202%201%201l2-2a575%20575%200%20005-2c2%201%203%200%203-3-1-2%200-3%201%200l2%201h1l-1%201h1l1%202%202%201h3c1-2%200-2-2-2s-2%200-1-1l1-2%202-2h2l-1%201-2%202h1l2-1%203-1c1-1%201-1%201%201-1%201-1%202%201%201%204%200%204%200%202-1l-2-2c0-3%203-3%204-1h1l2-3c1-2%201-2%201%200-1%201%200%202%201%202v-5h4l-1-2-2-1h2l1-1h2c1%200%202%201%201%202l1%201c1-1%201-3-1-5-1-2%200-3%202-1h3c1-2%202-2%202-1h1v-3h2l2-2%202-1-1-3c-3-4-4-6-1-4h3v-1l-1-2h1l1%201v-2l-3-2v-1c1-2%202-2%203%200%202%201%202%201%202-1v-2l1-2h-3v-7l3-1-1%202-1%201h2l4-2c2%200%202%200%201-2l-2-2-2-2h-2l-1%201v-3c-1-2%202-4%205-3%203%200%203%200%202-1l-1-2v-1l-1%201-1%201c-2%200-3-2-1-2l-1-1-2-3h1l1-1%201-3v-3c1-1%201-1-1-1h-1v-1c-3%200%200-2%203-2l2-2a1152%201152%200%2000-1-6c-1%201-2%202-3%201l-1%201h-4l-1-3%202%201h3l1-4c0-4%200-4%203-4l2%201c-2%202-1%203%201%202%201-1%201-1%201%201h7l2%201c2%200%201-2-1-2l-2-2h1c2%202%204%201%204-1-1-2-1-3%201-3s2%201%201%203c-2%202-2%205%200%205l3%201%202%201c1-1-3-4-4-3l-1-1%201-1%201-3c0-2%200-2%202-1h2c0-2-2-5-4-5-3%202-1-1%203-2l3-3%202-1c2%201%202-2%200-2h-2l-2%201c-1-1-1-2%201-3l2-2h-2c-2%202-2%202-3%200l-1-3%201-5c0-2%200-2-1-1l-3%202%201-2c2-2%202-2%201-3h-3c1%201%200%202-1%202-1%201-1%200-1-1%201-1%201-2-1-2s-3%201-3%203c-1%201-1%201-1-1s0-2-19-2l-20%201h-1l-68-1a1015%201015%200%2000-68%201L98%200H0v200m397-37l1%202%201%201h-1c-2-1-4%201-2%203l-1%201-2%202-1-1-2-2v3c2%203-1%206-4%205v2h-3c0-2%200-2-1-1v3l-1%201v2l-1%201c-2%200-7%205-7%207%201%201%201%201-1%201h-1c0%203%200%205-1%203h-1c1%202%200%202-1%202s-2%200-1%201h2c3-1%202%202-2%204h-3v-1c-2%200-3%202-1%202%201%201%200%204-2%204l-2%201h5l1%201v-3c0-2%203-4%206-3%202%200%205-1%203-2v-1h2c1%200%202-1%201-2h-2l2-2%204-1%204%202%202%201%202-2%202-1h-1l-1-1-1-1c-1%201-2%200-2-1h4l3%201c-1-1%201-4%202-4l2%201h1l1-2%201-6-1-6v-1l1-8c0-4%200-6-1-5h-2m-202%206c3%200%203%200%202%201s-1%201%201%201h3l-3%201c-2%201-2%201%201%201h3l-4%201c-4%201-4%203%201%202h8l18%201c18%201%2037%205%2038%209l7%204%208%206%206%203%206%204%203%202%202%201v2l-1%202c0%202%202%201%202-1h1l2%202%204%203%203%203h2l2%201-9-9a70%2070%200%2001-10-9c-2%200-12-7-20-12-12-8-23-12-35-13a24492%2024492%200%2001-32-2c2-1-5-5-8-5h-3l2%201m-32%2061c2%203%203%205%201%203h-6l2%202c2%200%202%200%201%201h-4c-1%200-2%200-1%201l1%203%201%202h1v1c-1%200-1%203%201%204v2c-2%201-2%201-1%202v1l-1%201h1l1%201v2l1-2v-1l1-1c0-1%200-2%201-1l1%201%201%201h1l2-4c1-1%202-2%201-3-1-2-1-2%201-2%201%201%203%200%204-1%203-1%203-1%203%201s0%202-1%201-1-1-2%201c-1%203%200%204%202%202l2-1-1%201v1l3-2%202-1%202-1c3-1%203-1%201-3v-2c1%200-10-6-13-6l-2-2-4-1-1-1v-1l-3-1%201%202m-50%2026l1%202v6l2%203h8l1-1-1-1-1-1%201-2%201%202%201%201%201-3c0-3-1-3-3-3h-2l2-1c2-1%202-1%200-1-1%200-2%200-1-1l-1-1-1%201h-1l-1%201v2l-1-1-3-2h-2m52%2048c0%202%200%202-2%202-3-2-6%202-6%206%200%205%203%207%208%206h3v-9l-1-8c-1%200-2%201-2%203m-144-1v15h4c5%200%209-2%209-5%201-8-2-11-8-11l-5%201m112-1c-1%202%200%2016%202%2016l1-3c-1-3%200-3%202-3%203%200%205-2%205-5l-1-4c-1-1-8-2-9-1m-93%204c-6%202-5%2011%201%2012%201%201%203%200%204-1%204-4%204-6%201-10-3-2-3-2-6-1m36%200l-3%203c-2%206%203%2011%209%209%203-1%203-3-1-2l-5-1c-1-2-1-2%203-2s5%200%205-2c0-4-4-6-8-5m71%200c-3%202-4%209-2%2011%205%203%2010%201%2010-5%200-5-4-8-8-6m27%200c-3%200-3%200-3%206%200%205%200%206%202%206l1-5c0-3%200-4%202-5%202%200%203%202%203%206l1%204%201-3c0-5%201-7%203-7s2%201%202%205%200%205%202%205l1-5c0-6-3-9-6-7h-4l-2-1-3%201m20%200c-3%201-2%203%201%202l3%201c1%201%200%201-1%201-3%200-6%202-6%205%200%202%204%204%207%203%204%200%204%200%204-5l-2-6c-2-2-3-2-6-1'%20fill='%23fafafa'%20fill-rule='evenodd'/%3e%3c/svg%3e"},"narrow":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAACXBIWXMAAAsSAAALEgHS3X78AAADxklEQVQ4y51UW1OTVxT9/gNCLpBAvgQScr+SRJJAUckNkiAgBQwgY2FGVAalLYhoytTOtLXWjtPHKGN9KZ1Oq4LOtFP+2uraB740z31YnMM531577b3XiWY2m2E2mWBqg5zJarFYFHp6elqw2Wzo6+tDf78LHo8b0WgUxUIBkxMTWF9bg2ZhsBFoEBmkxrndbkd3d3eLUNd1uFwGYQTjV65g+upVbN65A02COzs70dHRoVaLxdxS1W21wkq0k/X29sLh6FOEfr8P8XgcpVIJazdv4vmzZ9ACfj8WFhbwyeioymyQi0IhspFIFNrtvapU+cbpdLLkfkhsOp1GuVzC/a0tvD48hKbrDtSvX8cWD+7fu4f5+XlkhjNwu91KqVGik4pcqm8eeH1ehEJBJBJx5HJZ1GpVPNjdxctmE5ooEvmVyQpub2zgmydP0Gg0sHpjFQU2OxKJwHGuSsgCgQDCkTBisRgymQwK+TxWV1bw/Xff4oenT6FJaV1dXarEUCjE5k5jZ2cHm5ubqFZrmLt2DYuLiygWi0imkiwxhdGREfatiHq9jo1bt/Dl59v46fmP+GJ7+2wo7TYZGBhg5iwDyhhhYCqVQqVSwfr6usINqvmMA2g8eoSfX7zA4/197IqAu3exsrx8prDdJtIz6V+QanO5EWSzWdXTy5cusS2TmJ2ZxdzcHBbY6yUq/JT7CXpwbGxM7anwP3WGVWQIQirwc5I+n09NVXodDAaRY5Lk0JCyjdzLWiwWcJvlt0oWZQIrreJm2Qapw+FQRAPnZ10cotgokUggxlciQ5IE+fy4qkKzWi3KvDJFp1NXXvN6vcp/cU4yPz6uFA5ywqJGiI3kHiYcotJRejgWiyIcDkOTMoXIyBZm7wokCUiZVLZcX0KJE05xwpIgzSENUV2UdhIMDnpUsjgJg4zXbFQU4kV6eBipixdxmWTV2hTizGxm+VEGZ2TavIvxLJFM8iwOH43dTyInVbr4pj0UIND2yHrAzAfRGL6OJ4g4GpT+Fc/2/AE85BAOqP4xle/zW8FDlr7H4AcCrwGvgvYbiU45/r9mZnC6tIRjKjzhC/lI753ySf5De/xNO3yYKOOI5L+S8EjAfWttg/aGak5Idky8n5rCMV/KO5IdT5+t72s1vC2X8a5axR98Zn/yl+Ut/fg7Jyrfn8zO4ohP8BeqfSOETf55xXJeCmTPfh6yRIHsXzGhca5g3PH8kG0RSGyTbWjKUHQaWqcPnefQFUzQ6U/9/H9n+72p7a5t7ySPQLvAH4YLPGytxv5/oIP4F93nn3gbyfUJAAAAAElFTkSuQmCC","aspectRatio":1,"src":"/static/f3fc4032bcf7eb791ba092b7ec1ff9ed/502b1/dockervspodman-cov.png","srcSet":"/static/f3fc4032bcf7eb791ba092b7ec1ff9ed/f2e6d/dockervspodman-cov.png 114w,\n/static/f3fc4032bcf7eb791ba092b7ec1ff9ed/4ddba/dockervspodman-cov.png 229w,\n/static/f3fc4032bcf7eb791ba092b7ec1ff9ed/502b1/dockervspodman-cov.png 457w,\n/static/f3fc4032bcf7eb791ba092b7ec1ff9ed/7ddc2/dockervspodman-cov.png 686w,\n/static/f3fc4032bcf7eb791ba092b7ec1ff9ed/435bf/dockervspodman-cov.png 914w,\n/static/f3fc4032bcf7eb791ba092b7ec1ff9ed/6050d/dockervspodman-cov.png 1200w","srcWebp":"/static/f3fc4032bcf7eb791ba092b7ec1ff9ed/15384/dockervspodman-cov.webp","srcSetWebp":"/static/f3fc4032bcf7eb791ba092b7ec1ff9ed/31fce/dockervspodman-cov.webp 114w,\n/static/f3fc4032bcf7eb791ba092b7ec1ff9ed/e3e25/dockervspodman-cov.webp 229w,\n/static/f3fc4032bcf7eb791ba092b7ec1ff9ed/15384/dockervspodman-cov.webp 457w,\n/static/f3fc4032bcf7eb791ba092b7ec1ff9ed/0258d/dockervspodman-cov.webp 686w,\n/static/f3fc4032bcf7eb791ba092b7ec1ff9ed/64ea2/dockervspodman-cov.webp 914w,\n/static/f3fc4032bcf7eb791ba092b7ec1ff9ed/9000d/dockervspodman-cov.webp 1200w","sizes":"(max-width: 457px) 100vw, 457px","tracedSVG":"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='400'%20height='400'%20viewBox='0%200%20400%20400'%20preserveAspectRatio='none'%3e%3cpath%20d='M0%20200v200h401V200a2322%202322%200%2000-1-132%20280%20280%200%2001-2%2073l1-1c1-1%201%200%201%204s0%205-2%205h-3l-2%201c-2%200-11%202-10%203v2l-2-2-1-3%201%203c0%204%200%204-2%204h-5l1%202v1h-3v-2l-1%201c-2%201-2%201-1-1%200-2%200-3-2-3l-1-3h-2v2h-1c-1%200-5%204-4%206l-1%201c-1%200-1%201%201%202v2l-3-3c0-2%200-2-1-1-1%202-2%202-5%201-3%200-3%200-2%201%202%201%200%202-4%201l-1%202h-5l-4%201h-1c0%202-3%203-3%201h-3v1l-5-1c-2%200-2%200-1%202%200%202%200%202-1%201-2-2-12-2-12-1l-1%201-2%201h-1l-5-3c-2%200-2%200-1%201%201%202%201%202-1%202l-2-1%201-1%201-1c-1-2-4-2-6%200h-1c0-2-3-2-4%200h-1l-1-1-2%201-3-1c-2-2-3-3-4-2-2%200-3%200-3-2-1-1-1-1-2%201s-1%202-1%200%200-2-2-1h-4c1-1-2-3-4-3-1%201-2%200-2-1%200-2-2-1-2%201l-2%202v-1c1-2%200-2-5-2l-7-1h-6l-2-1c0-1%200-2-1-1h-4l-3-1%202%202c7%203%208%203%208%205h-1c-1-2-10-3-10-1v-1c0-2-1-3-2-3-1-1-5%201-5%202l1%201h1l1%201h1c0%202%200%202-4%200l-4-1-1%201v-1h-1l-1-1c1-1%200-2-1-2v-1c1-1-1-3-4-2l-2-2-2-2v3l-1-2-2-2-5-2c-1-2-2-2-2-1h-1c0-1-1-2-3-1l-3-1%201-1%201-1h-1c-2%200-5-2-3-3%202%200%201-3-1-3h-1c1%201%202%202%200%203h-1l-2-2-2-1%201-1v-2l-3-1v-2l4%203%202%201c-1-3%202-3%204-1%202%203%203%202%201-1l-4-2c-1%200-2%200-1-1l-1-1h-1l-2-1c-1%200-4-1-5-3-2-2-4-3-5-2l-3-2h-1l1%202%201%201v4c-1%200-1%201%201%203%201%202%202%203%203%202s2-2%201-3l2-1%202%201-1%202c-1%202%200%203%201%205%203%202%203%205%200%204l-3-2-5-4c-2-1-3-1-2-2v-1h-1l-1%201c-2%200-3-2-1-2h-1l-1-1-1-2c-3-1%200-2%203-1s4%200%202-2c-1-1-2-2-1-3l-1-1c-2%200-10-5-10-7l-3-1-5-1h-1l-2-2-2-1-3-2c-1-1-3-2-4-1-1%200-2%200-2-2l-1-1-2-1c-1-2-8-4-13-5-3%200-8-1-10-3l-3-1h-6l7%204a185%20185%200%200134%2014l1%201c-1%201-1%201%200%200l3%201v2c-1%200-1%201%201%202%202%202%203%202%201%200-2-3%200-2%203%201%204%203%204%205%201%202-4-2-4-2%200%204%202%205%203%2011%201%2012l-1-4-2-6h-1v9l-1-4c-1-4-2-4-2-2s0%202-1%201h-2l1%202%201%201v4l1%203h-2c-1%202-4-4-4-7l1%202c2%203%202%201%201-4-2-3-2-3-2-1s0%202-1-1a3483%203483%200%2001-1%2012l-3-4c0%202%200%202-1%200-2-2-2-1%200%203%201%203%201%203%202%202h1c-1%201%200%203%202%206%203%205%202%204-4-2l-4-3c0%201-1%201-2-1-4-4-3-1%201%203l3%205-10-9c-4-5-9-9-9-8l-2-1-2-1-1%201h-1l-3-2-3-2h-2l-2-1-5-5c-5-5-7-6-6-3l-3-2-4-2v-1l-1-1-2-1h-2l2%203%202%202-3-2h-3v-3h-2c-1%201-2%201-3-1-3-3-5-3-3%200v1l-10-11-1-1v5h-3v-2h-2v-1l-4-5c0-2%200-2%202-1h1v-2l1-2%201-1h-1c-2%201-2-3-1-5h3c-1%201%201%205%202%204v-2c2%201%202%200%202-2l2-4c2-2%201-3-1-3-1%201-3%200-4-1-3-2-8%201-8%206l1-1c3-5%207-6%207-1%200%202-2%202-3%201l-3%203c-3%203-3%203-3%201s0-2-1-1v3c1%202-2%201-3-1v-2c3-3%204-6%203-6l-2%202-1%202v-1l-1-1-1%202-1%202h-2l2%201v2l1%203h3l2%202%201%202%201%203c1%202%202%204%200%202h-3l1-1v-1h-4l-3-1-1-3%201-3h-1c-1%202-1%202-3-2l-2-6v-1a410%20410%200%2000-7-10c-1-4%201-6%2010-6h17l6%203%205%201%206%203%207%203c2%202%2010%205%2016%206l6%202%2011%204c14%203%2016%204%2020%206l7%201%206%202%202%201%201%201%205%204a147%20147%200%200118%2010%20467%20467%200%200133%2015l5%201h5v2h2c0%201%206%203%207%202l1%202%203%201%203%201c1%202%2012%205%2013%204h1c2%202%205%203%209%203l2%202%201-1c2-3%203-3%202%200v2l7%202%201-2v-2l1%202%203%201%203-1h1l4%201%204%201c2%200%202%200%200-3-2-2-3-3-4-2-2%200-2-1-2-2l1-2%203%201h2l1-1c-1%202%201%203%201%201h2c1%202%201%203-1%202l-1%202c1%202%203%203%203%201s4-2%206%200c2%201%202%201%205-1h-1l-2-1%203-2c2%200%202-1%201-2l1-2%201-2%201-1h3l-1-1-1-1c1-1%202%200%204%201h2v-3c0-3%203-1%202%201%200%202%200%202%201%201l2-2a575%20575%200%20005-2c2%201%203%200%203-3-1-2%200-3%201%200l2%201h1l-1%201h1l1%202%202%201h3c1-2%200-2-2-2s-2%200-1-1l1-2%202-2h2l-1%201-2%202h1l2-1%203-1c1-1%201-1%201%201-1%201-1%202%201%201%204%200%204%200%202-1l-2-2c0-3%203-3%204-1h1l2-3c1-2%201-2%201%200-1%201%200%202%201%202v-5h4l-1-2-2-1h2l1-1h2c1%200%202%201%201%202l1%201c1-1%201-3-1-5-1-2%200-3%202-1h3c1-2%202-2%202-1h1v-3h2l2-2%202-1-1-3c-3-4-4-6-1-4h3v-1l-1-2h1l1%201v-2l-3-2v-1c1-2%202-2%203%200%202%201%202%201%202-1v-2l1-2h-3v-7l3-1-1%202-1%201h2l4-2c2%200%202%200%201-2l-2-2-2-2h-2l-1%201v-3c-1-2%202-4%205-3%203%200%203%200%202-1l-1-2v-1l-1%201-1%201c-2%200-3-2-1-2l-1-1-2-3h1l1-1%201-3v-3c1-1%201-1-1-1h-1v-1c-3%200%200-2%203-2l2-2a1152%201152%200%2000-1-6c-1%201-2%202-3%201l-1%201h-4l-1-3%202%201h3l1-4c0-4%200-4%203-4l2%201c-2%202-1%203%201%202%201-1%201-1%201%201h7l2%201c2%200%201-2-1-2l-2-2h1c2%202%204%201%204-1-1-2-1-3%201-3s2%201%201%203c-2%202-2%205%200%205l3%201%202%201c1-1-3-4-4-3l-1-1%201-1%201-3c0-2%200-2%202-1h2c0-2-2-5-4-5-3%202-1-1%203-2l3-3%202-1c2%201%202-2%200-2h-2l-2%201c-1-1-1-2%201-3l2-2h-2c-2%202-2%202-3%200l-1-3%201-5c0-2%200-2-1-1l-3%202%201-2c2-2%202-2%201-3h-3c1%201%200%202-1%202-1%201-1%200-1-1%201-1%201-2-1-2s-3%201-3%203c-1%201-1%201-1-1s0-2-19-2l-20%201h-1l-68-1a1015%201015%200%2000-68%201L98%200H0v200m397-37l1%202%201%201h-1c-2-1-4%201-2%203l-1%201-2%202-1-1-2-2v3c2%203-1%206-4%205v2h-3c0-2%200-2-1-1v3l-1%201v2l-1%201c-2%200-7%205-7%207%201%201%201%201-1%201h-1c0%203%200%205-1%203h-1c1%202%200%202-1%202s-2%200-1%201h2c3-1%202%202-2%204h-3v-1c-2%200-3%202-1%202%201%201%200%204-2%204l-2%201h5l1%201v-3c0-2%203-4%206-3%202%200%205-1%203-2v-1h2c1%200%202-1%201-2h-2l2-2%204-1%204%202%202%201%202-2%202-1h-1l-1-1-1-1c-1%201-2%200-2-1h4l3%201c-1-1%201-4%202-4l2%201h1l1-2%201-6-1-6v-1l1-8c0-4%200-6-1-5h-2m-202%206c3%200%203%200%202%201s-1%201%201%201h3l-3%201c-2%201-2%201%201%201h3l-4%201c-4%201-4%203%201%202h8l18%201c18%201%2037%205%2038%209l7%204%208%206%206%203%206%204%203%202%202%201v2l-1%202c0%202%202%201%202-1h1l2%202%204%203%203%203h2l2%201-9-9a70%2070%200%2001-10-9c-2%200-12-7-20-12-12-8-23-12-35-13a24492%2024492%200%2001-32-2c2-1-5-5-8-5h-3l2%201m-32%2061c2%203%203%205%201%203h-6l2%202c2%200%202%200%201%201h-4c-1%200-2%200-1%201l1%203%201%202h1v1c-1%200-1%203%201%204v2c-2%201-2%201-1%202v1l-1%201h1l1%201v2l1-2v-1l1-1c0-1%200-2%201-1l1%201%201%201h1l2-4c1-1%202-2%201-3-1-2-1-2%201-2%201%201%203%200%204-1%203-1%203-1%203%201s0%202-1%201-1-1-2%201c-1%203%200%204%202%202l2-1-1%201v1l3-2%202-1%202-1c3-1%203-1%201-3v-2c1%200-10-6-13-6l-2-2-4-1-1-1v-1l-3-1%201%202m-50%2026l1%202v6l2%203h8l1-1-1-1-1-1%201-2%201%202%201%201%201-3c0-3-1-3-3-3h-2l2-1c2-1%202-1%200-1-1%200-2%200-1-1l-1-1-1%201h-1l-1%201v2l-1-1-3-2h-2m52%2048c0%202%200%202-2%202-3-2-6%202-6%206%200%205%203%207%208%206h3v-9l-1-8c-1%200-2%201-2%203m-144-1v15h4c5%200%209-2%209-5%201-8-2-11-8-11l-5%201m112-1c-1%202%200%2016%202%2016l1-3c-1-3%200-3%202-3%203%200%205-2%205-5l-1-4c-1-1-8-2-9-1m-93%204c-6%202-5%2011%201%2012%201%201%203%200%204-1%204-4%204-6%201-10-3-2-3-2-6-1m36%200l-3%203c-2%206%203%2011%209%209%203-1%203-3-1-2l-5-1c-1-2-1-2%203-2s5%200%205-2c0-4-4-6-8-5m71%200c-3%202-4%209-2%2011%205%203%2010%201%2010-5%200-5-4-8-8-6m27%200c-3%200-3%200-3%206%200%205%200%206%202%206l1-5c0-3%200-4%202-5%202%200%203%202%203%206l1%204%201-3c0-5%201-7%203-7s2%201%202%205%200%205%202%205l1-5c0-6-3-9-6-7h-4l-2-1-3%201m20%200c-3%201-2%203%201%202l3%201c1%201%200%201-1%201-3%200-6%202-6%205%200%202%204%204%207%203%204%200%204%200%204-5l-2-6c-2-2-3-2-6-1'%20fill='%23fafafa'%20fill-rule='evenodd'/%3e%3c/svg%3e"},"seo":{"src":"/static/f3fc4032bcf7eb791ba092b7ec1ff9ed/6050d/dockervspodman-cov.png"}}}]}},"staticQueryHashes":["1609575157","2068910035","2361467917","2361467917","3838421970","500183989","5650841"]}