234 lines
26 KiB
Plaintext
234 lines
26 KiB
Plaintext
{
|
||
"cells": [
|
||
{
|
||
"cell_type": "code",
|
||
"id": "initial_id",
|
||
"metadata": {
|
||
"collapsed": true,
|
||
"ExecuteTime": {
|
||
"end_time": "2025-09-14T01:29:58.461138Z",
|
||
"start_time": "2025-09-14T01:29:57.277998Z"
|
||
}
|
||
},
|
||
"source": [
|
||
"import os\n",
|
||
"\n",
|
||
"os.environ['DASHSCOPE_API_KEY'] = 'sk-e2a05bbcfac84e53b73f98acef15a009'\n",
|
||
"\n",
|
||
"# Step 0: Define tools and model\n",
|
||
"\n",
|
||
"from langchain_core.tools import tool\n",
|
||
"from langchain_community.chat_models.tongyi import ChatTongyi\n",
|
||
"\n",
|
||
"llm = ChatTongyi(\n",
|
||
" model=\"qwen-max\", # 此处以qwen-max为例,您可按需更换模型名称。模型列表:https://help.aliyun.com/zh/model-studio/getting-started/models\n",
|
||
" streaming=True,\n",
|
||
" # other params...\n",
|
||
")"
|
||
],
|
||
"outputs": [],
|
||
"execution_count": 1
|
||
},
|
||
{
|
||
"metadata": {
|
||
"ExecuteTime": {
|
||
"end_time": "2025-09-14T01:31:26.890560Z",
|
||
"start_time": "2025-09-14T01:31:26.576161Z"
|
||
}
|
||
},
|
||
"cell_type": "code",
|
||
"source": [
|
||
"from pydantic import BaseModel, Field\n",
|
||
"from typing_extensions import TypedDict\n",
|
||
"from langgraph.graph import StateGraph, START, END\n",
|
||
"from IPython.display import Image, display\n",
|
||
"from typing_extensions import Literal\n",
|
||
"from langchain_core.messages import HumanMessage, SystemMessage\n",
|
||
"\n",
|
||
"# Schema for structured output to use as routing logic\n",
|
||
"class Route(BaseModel):\n",
|
||
" step: Literal[\"poem\", \"story\", \"joke\"] = Field(\n",
|
||
" None, description=\"The next step in the routing process\"\n",
|
||
" )\n",
|
||
"\n",
|
||
"\n",
|
||
"# Augment the LLM with schema for structured output\n",
|
||
"router = llm.with_structured_output(Route)\n",
|
||
"\n",
|
||
"\n",
|
||
"# State\n",
|
||
"class State(TypedDict):\n",
|
||
" input: str\n",
|
||
" decision: str\n",
|
||
" output: str\n",
|
||
"\n",
|
||
"\n",
|
||
"# Nodes\n",
|
||
"def llm_call_1(state: State):\n",
|
||
" \"\"\"Write a story\"\"\"\n",
|
||
"\n",
|
||
" result = llm.invoke(state[\"input\"])\n",
|
||
" return {\"output\": result.content}\n",
|
||
"\n",
|
||
"\n",
|
||
"def llm_call_2(state: State):\n",
|
||
" \"\"\"Write a joke\"\"\"\n",
|
||
"\n",
|
||
" result = llm.invoke(state[\"input\"])\n",
|
||
" return {\"output\": result.content}\n",
|
||
"\n",
|
||
"\n",
|
||
"def llm_call_3(state: State):\n",
|
||
" \"\"\"Write a poem\"\"\"\n",
|
||
"\n",
|
||
" result = llm.invoke(state[\"input\"])\n",
|
||
" return {\"output\": result.content}\n",
|
||
"\n",
|
||
"\n",
|
||
"def llm_call_router(state: State):\n",
|
||
" \"\"\"Route the input to the appropriate node\"\"\"\n",
|
||
"\n",
|
||
" # Run the augmented LLM with structured output to serve as routing logic\n",
|
||
" decision = router.invoke(\n",
|
||
" [\n",
|
||
" SystemMessage(\n",
|
||
" content=\"Route the input to story, joke, or poem based on the user's request.\"\n",
|
||
" ),\n",
|
||
" HumanMessage(content=state[\"input\"]),\n",
|
||
" ]\n",
|
||
" )\n",
|
||
"\n",
|
||
" return {\"decision\": decision.step}\n",
|
||
"\n",
|
||
"\n",
|
||
"# Conditional edge function to route to the appropriate node\n",
|
||
"def route_decision(state: State):\n",
|
||
" # Return the node name you want to visit next\n",
|
||
" if state[\"decision\"] == \"story\":\n",
|
||
" return \"llm_call_1\"\n",
|
||
" elif state[\"decision\"] == \"joke\":\n",
|
||
" return \"llm_call_2\"\n",
|
||
" elif state[\"decision\"] == \"poem\":\n",
|
||
" return \"llm_call_3\"\n",
|
||
"\n",
|
||
"\n",
|
||
"# Build workflow\n",
|
||
"router_builder = StateGraph(State)\n",
|
||
"\n",
|
||
"# Add nodes\n",
|
||
"router_builder.add_node(\"llm_call_1\", llm_call_1)\n",
|
||
"router_builder.add_node(\"llm_call_2\", llm_call_2)\n",
|
||
"router_builder.add_node(\"llm_call_3\", llm_call_3)\n",
|
||
"router_builder.add_node(\"llm_call_router\", llm_call_router)\n",
|
||
"\n",
|
||
"# Add edges to connect nodes\n",
|
||
"router_builder.add_edge(START, \"llm_call_router\")\n",
|
||
"router_builder.add_conditional_edges(\n",
|
||
" \"llm_call_router\",\n",
|
||
" route_decision,\n",
|
||
" { # Name returned by route_decision : Name of next node to visit\n",
|
||
" \"llm_call_1\": \"llm_call_1\",\n",
|
||
" \"llm_call_2\": \"llm_call_2\",\n",
|
||
" \"llm_call_3\": \"llm_call_3\",\n",
|
||
" },\n",
|
||
")\n",
|
||
"router_builder.add_edge(\"llm_call_1\", END)\n",
|
||
"router_builder.add_edge(\"llm_call_2\", END)\n",
|
||
"router_builder.add_edge(\"llm_call_3\", END)\n",
|
||
"\n",
|
||
"# Compile workflow\n",
|
||
"router_workflow = router_builder.compile()"
|
||
],
|
||
"id": "3cde4ac7b799ee9c",
|
||
"outputs": [],
|
||
"execution_count": 2
|
||
},
|
||
{
|
||
"metadata": {
|
||
"ExecuteTime": {
|
||
"end_time": "2025-09-14T01:31:29.539579Z",
|
||
"start_time": "2025-09-14T01:31:28.619753Z"
|
||
}
|
||
},
|
||
"cell_type": "code",
|
||
"source": [
|
||
"\n",
|
||
"# Show the workflow\n",
|
||
"display(Image(router_workflow.get_graph().draw_mermaid_png()))"
|
||
],
|
||
"id": "695f80a7d393be4e",
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAaMAAAFNCAIAAAAiuZdRAAAQAElEQVR4nOydB3wUxdvHZ+8ud+mNkEASIAQIJXSpUqRKE6kiTZCidKVKl6qgVJUmwp8qvTcBQeBFQAi91xBCKqTXy+X29n3uNhxHcgl3Ibdseb7ifXZna3ZmfvvM88zOKBiGIQiCIKJGQRAEQcQOKh2CIOIHlQ5BEPGDSocgiPhBpUMQRPyg0iEIIn5Q6RAzXDoWHxOWmZlG01qSrWEoGSEM/EcoijA6YlilYBnQMfoNcoWM0TE6nX5PilD6BT0EFmQy/X7sJjgB/M8YEtkUOJtMLtPRupwUimK7PcGxsAwp7P0YjjVcGm6AIcarGG9YodSfy95B5uGjqtLQpUQZR4IgJlDYnw4xcnBNVMzTTE0mo1ASO5XMTimTyQmtofSSZCgmRqVj5UafaPgnU+iXGfq1JOmlKGdnUDeGTXnjDMZfOcPQFLtM4HCd4VZeHc7y+rSGHV6vvkJmR2idjtbo1OmMjtYf7u5l92Fnz8AqLgRBUOkQlp2/hL8I1zg4y0tXcmjxubdMJiNC5ub/Jdw6l5oUl23vKGs3oKRvoANBpA0qndS5czH57K6XDq6KdgN8vP3FpggH/4h8di/Ty0/Rc1wAQSQMKp2kObA6MvJRZuPOxao18iDiZe33j7OzyNCfyhNEqqDSSZdrp+MvH0/86kdJ1P8j/4uMfKL+6odyBJEkqHQSZe+K5y8js77+QUJmzrFN0U9vZQz9GcVOigjb8YwUjtO7Yl4810hK5oA2X5QMCHZYMz2UINIDlU6K3D6fNnhWAJEebfv7ymVk7/IIgkgMVDrJsXb6E79yDnKlnEiSAbMCIx+rM9M0BJESqHTS4n5IcmYG02WEH5Ew3qWVO5dGEkRKoNJJi3MH433Lqoi06TGmdEoCnZ2dTRDJgEonLTJTdR0GlSSSx9FZfuiPWIJIBlQ6CfH3nzF29kTlwOmwDk+ePPnkk0+I9UyaNGn//v3ENpSu7BAXga46CYFKJyGiQ9XuxZWEW+7evUsKRaEPtIS6rdyy1DqCSAZUOgmRmUF7l7KV0qWmpi5YsKBTp05NmjQZMmTIvn37IHHVqlWzZs2KiYmpU6fOn3/+CSnbt28fOXJks2bN2rRpM3ny5IiInA4f27Ztg5TTp0/Xq1dv4cKFsH9UVNScOXNgT2ID3Io7yBXkwfVkgkgDVDoJodMyJUrbE9sAinbz5k0Qr127dlWtWnXevHmwOnTo0H79+pUoUeLy5ct9+vS5fv06qGGNGjVAy2D/hISEadOmsYcrlcr09HQ4dvbs2T169Dh37hwkTp8+HbSP2Aa5nHrxFBuwUgFH4pQQDEM8Stgq8Hr16lUQtQYNGsDyqFGjWrVq5e7unmufatWq7dixo3Tp0gqFvuBB9HPMmDHJyclubm4URanV6v79+9etWxc2ZWVlERsjl8vSkmmCSANUOgnB6AfDtFWH4Zo1a27evDkpKal27doNGzasXLly3n3kcjk0VxctWnT79m2w4NhEsOxA6djl4OBgwhkUtmgkBOa1hKAYJiVeTWzDzJkze/fufeHChbFjx7Zu3XrlypVarTbXPmfOnIGtVapU+eOPP0JCQpYtW5ZrB2jDEq7I1tIqZ4og0gBtOgkhk5OYZ+qg2q7EBri6ug4cOHDAgAE3btw4derU2rVrXVxc+vbta7rP3r17wfQbMWIEuwpBDPL+0GYR71JS70QtHVDpJITSURbzzCb+L/C1HT16FAKv9vb2NQ08ePDg/v37eXcrWfJ1v+V//vmHvCey1TQ05qvUdyeINMDWq4Qo7q9KjLFJtBEiDKtXr544cSIYdPHx8YcPHwaZA72DTRB/iIuLgxDqs2fPgoKC/vvvP4jDQsOW7XQCREdH5z2hSqXy9vY27kyKmnOHXlJY9qUE5raEaNateHaWTQZedXJyWrBgwYsXLwYNGtSmTZuNGzeOHj26a9eusKlx48YgeePHjz927Njw4cM//PBDcNVByCImJmbWrFngs/vmm2/AHsx7TmgLgy9v3LhxmZmZpKh5fCPdwwcbNBICxxyWFisnPC5V0fGTwb5E2qwY97jrKN8SATgtrFRAm05aVG/q9uxuBpE2e5dHyBUUypykQANeWjTqWPzW2eS/N0e37mt+RJO5c+eeOHHC7Cbwl7E9fvMyc+ZMG322BRRw5gJuafv27T4+PmY3RT5Wd/jKmyBSAluvkiP8YdqBlTEjl5ifREKtVuc3cFsBsuLg4JDfpnengM4oBdwSuA7Nzs+96YenOob0n1aWIFIClU6KQPMt8UX2wFmSq+0hf8eHHEscvhAnfpUc6KeTIl1G+CvsqD/nhxEpkZyQeekoypxEQZtOuhxcExkXlTXg+0AiAR5dTzm+6cWIRShzEgWVTtJs+jEsK1M3eI7IxW7Xr89jw7JGLEaZky6odFLn6Iaox9czSgaquo0qRUTHlVMJF48kKOxkX/8oCdMVyQ9UOoTQNL1hdnhmGu1V0u6Dtp7lq7oQ4fPX+uiwu+k6HanawOWj7j4EkTaodEgOYffT/m93XGqClqKIylHm4qFwcJYr7RU0/UYJga1QZCjDcEc5ZYfSD31n3ApBLpMjGP1mww7sgUZkFKNjqDfOA/vITFZfndi4D3tlWJbLGFpHySiiY3L2kctJtobOStelxGsz0mmGJgolKV/DuVXvEgRBUOmQvNz6N/HJrfSUhGxtFkPTRKsxo3SmC29u1esaaFje0xr3h18odaBNDKPfmWKMOmk4nOQpkvp99HsZFVUmJzqavBJQfRmWKyhQSbkdsXeS+5ZVNeuOAoe8ASodwjWnT58+ePDgokWLCIJwBX4NhnBNAR82IIiNwAKHcA0qHcI9WOAQrkGlQ7gHCxzCNdnZ2XZ2dgRBOASVDuEatOkQ7sECh3ANKh3CPVjgEK5BpUO4BwscwjXop0O4B5UO4Rq06RDuwZE4Ea5BpUO4B5UO4RpUOoR7sMAhXINKh3APFjiEazAigXAPKh3CNWjTIdyDBQ7hGlQ6hHuwwCFcg0qHcA8WOIRr0E+HcA8qHcI1aNMh3IMFDuEaVDqEe7DAIVyDSodwDxY4hGtQ6RDuwQKHcA1GJBDuQaVDuAZtOoR7sMAhXOPp6SmXywmCcAgqHcI1ycnJGo2GIAiHoNIhXANNV2jAEgThEFQ6hGtQ6RDuQaVDuAaVDuEeVDqEa1DpEO5BpUO4BpUO4R5UOoRrUOkQ7kGlQ7gGlQ7hHlQ6hGtQ6RDuQaVDuAaVDuEeVDqEa1DpEO5BpUO4BpUO4R5UOoRrUOkQ7kGlQ7gGlQ7hHlQ6hGtQ6RDukREE4RZUOoR70KZDuAaVDuEeimEYgiC2p0OHDjExMVDeKIpiU3Q6nb+//8GDBwmC2BhsvSIc0bNnT7DmZDIZ9QpIbNmyJUEQ24NKh3BE3759wYIzTSldunSPHj0IgtgeVDqEI8CI++KLL1QqlTGlbt26vr6+BEFsDyodwh2dO3c2mnXe3t69e/cmCMIJqHQIp/Tr18/R0REWatWqFRgYSBCEEzD2Kkiu/BOXEEVna83nnVxOaNo0AXajCj6h8RCKQIF4Y2fKkJQXhYzS6sxsyG9/QEYROCIkJCQjM6NmjZpubm6m6W+cxHAbZk8lk0HQ1sxF4abz3o5MTnR03kRKRzO5Hkve077azfT+GXtn0qSzN85XKzhQ6QTG42vJJ7e9hDxT2Mk0avN5J1NQOq2VGmQ8JM9OFNRvc4qmkMu0tM6qq1AywhiOMO1ror+6jNLlljr9acyWTzM7G3QKds6bLldQtDafRMqgdfmfNu+xkAJyqs0mniXsek0oQxDhgEonJJ7eSzuyNqZ+u2IV63gQ5P2xbeFjH3/7T4f4E0QgoNIJhpcv0nb8FNPv+/IE4QG7fwl1dJH3GIOWnTDAiIRgOL72pUcJ/HqPL7T8wv9lRDZBBAIqnWBIS9b5VXAkCD9w91TKFeTGvwkEEQJoIwgGrYZR2CkJwhsYHZWegEMVCANUOsHA6C1wHUF4g45mGB12NxEGqHQIgogfVDoEQcQPKh2CIOIHlQ5BCgul75BKECGASicYKOMPwhP0385ijggDVDrBwBh/EASxElQ6BEHEDyodghQWCt0JggGVDkEKCYU6JxxQ6QSDYTw3rFo8giEMek6FAiqdYDAMr4X1ik9g7FU44FgmoiU09HHzlnVu3boOyzNnTRw/YTh5f3Tu2mrjpjWwsHvPtlYf1ycIwi2odIho2btvx7yfZhAEwdYrImIePLhLEMQA2nSCoUgcQk+fPoEm7Z07N78d8xUs9Ordcf+BXeHhYf0HdG/Zut6IUQPuW6AONE1v276xXYfG8G/c+GFsA5k9+S+//gSnatPuwyFD+8KZSWHp1KXl7t1b2ZtMSU2BlHPnznw9pA+cuUfP9lOmjYmNjWH3nDx1NPwzHnjs2CE4JCMjY/TYr48dP3T8+GFYffjoPmyCv/q7iSM/7dT8i/5dV6xckp6ezh4CDepun7X599xpeAKHj+wjloM+OuGASicYiiQYYWdnB7/Lli/s3+/rf06EBFet8cea35b+Mn/idzOP/XVepVT9+tvPbz3J6j9+279/5+xZC6dN+aF4cZ+Jk0eBVkL68hWLQkIufPvNxPnzfm3fvjOo3n8Xz5FCAfd56Mje8uUrLvh5uaOD4+UrF7+fOeHjjzvs2HZkxvT5sbHRS3+dX/AZli5eXblyVTjk1MnLQRUqRUQ+H//dcHWWetlv6+bMWhga+mjM2K+1Wv04mkqlMiMj/cCBXZMnzW5QvzGxHIwPCQdsvUqRli3b1q5VFxaaNW118uTRTz/tXqVyVVht2rTlipWLc01RmIvklOQdOzeP/nZS3ToNYLV+/UYgE/EJcaVLB0yfPg+WS5bwhfRaNescPXrgUsj5BvUbEeuBG3B1dRs1Yjy7+r91K5s2adG9W29YdnNzHz5sLARYwPysVLGKhSc8ceIvO4UdaBwcDqvjx03v1acj2HHNPmoF11Kr1T179mefiTV3iWadYEClEwyGCVCLxgYvVSqAXXBydobfwLI584052DtkZ2drNBqVSpXfsWFPn8BvpUrB7KpCoZg9a0HONobZs2fbxUvnnj9/xiaULOlHCkvFoNcqBibYR01b5tp0//4dy5Xuzp0bcM+szAElSpT09fW/eesaKB2bUqliMLEW7E4nHFDpBIN+UvsiGl1dJpMVsFowaWmp8Guvss+VrtPpJk35FnTyq8Eja9as4+LsMurbQeQdgEblqyumZWVlqUyu6OionzkI7EdiMXDbYAOCz840MTEhPu/lrIBCi04woNIJBp6M2uTkpDcD86oMeP3ByFq4YMUHteuxKSAuxb28yTtjb6/XOLU605iSbrh6MU+vvDvTOtrsSTyLeVWrVnPAl0NNE91c3cm7oH/5oFEnDFDpBANPRm2CKAG0WG/cvFrZ4NoDpx6EPpt/1NrdwxNWjdIWFhYK/8oGlCPvDFyuYlBliJwaU9jlwHIV4Fdpp0xKs4BRTQAAEABJREFUTjRuMjacc1EusMLxvw/XqF7baMDC7fn7lybvCH4jIRAw9opYh7Ozc+tW7SH2+tfRA9euX/5t2YIrVy6C6gWUCQRJ2r5jU0pqCoRiIR1CFjGx0aQo6NL5c4ge7N69FU4OF4WwCUQPKpSvCJvg0mBLhoY+hmUI0cJuxqP8/Erdu3f76rWQxMSE7t37QPt62YpFEHwANfx99a8DB38e+vQxQaQBKh1iNd9+MxE8cYsW/zB23NBbt67PnrkAAq8+PiWmTpl7996tTp1bTJk2ZvCgERDSBaHpP6A7eWc+/rjDoIHDt+/cBCf/6eeZ1avV+n76PHZT5049WrZo+/XQPuCD++uv/X17DyQGSxN+O3boCnHVCd+NeBL6yNXFde2a7RByGTKsb78vu12/cWXC+OlBFSoRRBpQbJlA+M+ysY8/aOlZtbEnQfjBxlmPazb1aNS5GEF4D/rpBAOO2sQ7cMYc4YBKJxi4HLWp46fN8ts0ceLMxo2akXcD2rxTTD7hysXmTfuMHd94DY7aJBxQ6RAzrF69Jb9NHu5F0HyuVq1mAZcQhswR/EZCSKDSIWZgv+gS+iVsDn4jIRxQ6QSDwU2HJgSvwJkkBAMqnWAwuOnQhOATFIM2nVBApUOQwoIyJxxQ6RAEET+odAiCiB9UOsGg931j7y1eQWGMSDCg0gkGvVMIe+TzCgZjRIIBlQ5BEPGDSocgiPhBpRMMchXFyHCULR6hUBK5HbZehQHWHMGgkDNJsRkE4Q3abFKynIogQgCVTjCULGsf9URNEH5w+cRLuR0hDgkEEQKodHyHnWr++fPnc1Z3U2eqD64JJQgPuHshObgZGTNmzKpVq2A1MTGRIDwGxxzmKTqdTiaTDR06ND4+fufOnWlpac6GuVk3/RiqUTP+lR1LBjjL3nxRQUbKqNfdHhh97zszvb2YV0MNUezEijnLuT9typViuqqfeJaiGHOb2YvmPZvJRU02UWwvjdw3KacYOm/PQTM7vvEn5NqVejXUCDwTHZMzwJLJXenvk8n//IadXydR7JXkTHKcOvxeRnyUpv/3pZ3d9BMnvnz5snjx4pBHW7ZsmTNnTtWqVQnCP1DpeMehQ4d27dq1ZMkSDw+PkJCQunVzTyx/4PeI6GdqnZbQ2cSGMPkPvkbl+8mnXg4oa85mLl0mo3Q6xqKLUjnS/sbGvOc0q5LUG53hcq2ahZJRcgXj7K7oOMTLzdM519bw8PDMzMyKFSvOnTvX0dFxyJAhTk5OBOEHqHS8IDY2dt++fQ0aNKhRowaYBtUMEJFy5syZ/fv3L168mIgUaMkeOXKkYcOGgYGBK1asqGuAIO8V9NO9T27dunXlyhVY2LNnD0VRFSroJzDt3bu3iGWOGOZvLVGiBBEvYIz36dMHZA6WS5cuvXbtWpqmMzIyzp8/T5D3BNp074EnT56UK1dun4Hx48ejZ0cKaDSacePGJSUlbdq0CYw+UEOCcAgqHaeEhYX179+/X79+gwYNUqvV9vb2RHpANDkrK8vTU4rTOYLeKZXK+/fvQxmYMGHCZ599RhBOQKWzOdBy+f7770NDQ7du3RoXFwfqxkZRJQs46W7cuAHPhEgYKBWgd8HBwRs2bICnMWrUqLJlyxLEZqCfzlaA3x1aKxCM02q1TZo02bhxIyR6eXlJXOYAlUrl4+NDpI1cLgeZgwWw8Tt16gQhKVhet24dODSgwBCkqEGbrihJS0s7duxYzZo1wQ23dOlSWGjWrBlBEMsAK2/nzp1dunQB1+3hw4fr168Pr0aCFAWodEVAVFRUampqxYoVZ8+eDYFFaIm4uLgQJB/gfQBmi7u7QCZ1fU+sWbMGVA9a+jKZDJwevr7CnzTyvYJKV3jYzvFQFqFQzpkzByw4glgAeKaSk5O/+eYbgrwNnU6XnZ3dvXv3ypUr//zzz5KNYr076KcrDBBC7dq16+7du2G5cePGBw8eRJmzHAcHB3hDEMQCwKADtyYUsCFDhhBD/yQI1548eZIgVoI2naVAgwtcb8+fP//ll18iIiIgdlamTBmCINwCQXx40bZo0QLk7+nTp3369ClWrBhB3gbadG8hJCQEWqbE0AvMz89vxowZsOzv748yV2iSkpLArUmQQhEYGAgyBwvNmzd3c3O7dOkSLB85cuT69esEyR9UOvNAAyEmJoYYOn+x32ZBqerVq5c0+7sWLf/73/8OHDhAkHfD2dm5f//+7dq1I4bvz3777bdr164RwyeGBMkDjq7+moyMjISEBLDXwFkOft969epB4ty5cwlSpLi6umLgtWhpaABiF8Twbobo/9GjR5VKpQyH438F+un0Aufo6AjlY+HChfBixNgCInTAOQCvaoqimjZtCnHbsWPHEskjackHz+7AgQPXr18Py7Vr1z579izKHAeA4cwOpIzYCBcXFzs7O4VCcerUKSjYkHL79u3vvvtOyr48ydl0EELduHFjVFTUtGnTHjx4oFara9SoQRAOmT59OjS12rdvTxAOAdfzy5cve/bs+e+//yYmJrZt2xbUkEgGqdh0jx49Wrt2LSzExcVlZmaCKxeWK1asiDLHPeCng/AOQbilZcuWIHPEEL29cuXKtm3bYPnq1asQCicSQOQ2HZjrAQEB4P8eNGgQ+CxYgUMQhOXw4cOLFy/+5ZdfqlatKu5R88SpdOAJ8vT0HDNmTEpKytKlS/ErVF4BZrWzszN+1cQfoJqAoT18+HDwn65atcrBwYGIDrEpHbyj5s2bt2zZMogtQAQKNY6HjBo1qlevXh9++CFBeAYELqBt6+jo2Lt37w4dOvTp04eIBTH46SIiIiCutHLlSliGturff//NhlBR5vgJNJEwa/gJtGFB5mBhxowZNE0Tw5e2ULMiIyOJwBGqTQfZcPDgwejo6GHDhoF7Fbyq4HAlCIIUKVlZWezEFxMmTLhz5w7IhUCnPRGY0kHY9Pjx4506dXr8+PHWrVu7detWpUoVggiKFy9eQOxVpVIRRFA8evRo7ty5LVq0gMgeO2QZEQ4CU7qRI0cGBQXh0GaCZtq0aX379q1UqRJBBAhELZycnEDyOnfuLCD7TmDfvUKogSACB+dJEDQgc/CrVCpjY2MFpHQCs+nUajW0eiiKIgiCIBYjsNhr9+7d2cGUEOECLh54YxFEyKSlpQkrEwWmdK6urmzwGxEus2bNYkdSQ4TL8uXLhTXIoMD8dFu2bCGIwPH19VUocGBEYePu7i6sTBSenw7HF0QQxFoEJhmDBw9+8OABQYRMfHx8ZmYmQYRMRkaGsDJRYErn4uKCfjqhs2TJktOnTxNEyGwyQISDwNwl7MetiKDx8fEBFwRBhIybm5uwYq8C89NlZWWBH1QulxMEQRCLEVjrddy4cewEl4hwSUxMTEtLI4iQAYNOWJOBCEzpnJ2ddTodQYTM2rVrDx48SBAhs3///uXLlxPhIDA/3fz58wkicIoXLy7KUW0lBcQGhTUajcD8dBqNRm6AIAiCWIzAWq+zZ88+fvw4QYRMcnJySkoKQYQMxAaF5WwVmNI5OTlJbYJa8bFr167NmzcTRMicPXt2zpw5RDgIzE83efJkgggcT0/P1NRUgggZ8LSyA9UJBWH46Vq2bJmUlGS8VYqiIALr5+d36NAhggiENm3axMXFQSZC9hl/vby80B0hIDp06BAdHQ0LbA4SQ2Wkafr69euE3wij9Vq/fn14srJXwMOFoES7du0IIhw++eQTyDg2+9hfyNN69eoRRDgMGDDA3t4esg8qIFsZweaoXbs24T3CULovvvjC19fXNAUMup49exJEOPTu3btUqVKmKT4+Pn379iWIcOjevXuuTHRxcRHEtLDCULrKlSvnem80bdq0WLFiBBEOkF9t27Y1TalWrRrOmyM4wOxg54RlKVOmjCAmIBVM7PXLL780vkzAFkCDTojAyz8gIIBddnV17dWrF0GEBnghAgMD2WWlUtmjRw8iBASjdPBwGzRowC43bNgQWq8EERrOzs6dOnViB1INDg4WhH8HyUu/fv1Ysw6Mj44dOxIhYFEvk6f3UnTZ+X6WAAEYxtyyCYxhS+6txlWG0v+Xz7Hsrgzs1LJB34fXU7TZ2ub1ej25mW66P3sBs2cwJlIQLzJ3G7l2szCdyLTlqroR4RDxKEOdocszrVpO1hiBFV2upJwNhlx6tQ/z5pHU63PpH/KbReKNx96wRpdzFR4npSS3adI39GZ6fiWHyXsPhjJgsrO5XYwlKve95dxDnvPoAqu7EOEQ/SwtI5kxGigmf4oBxmzOmdmc9wHmOpQyfWJ5Vst41a9T6ZNn4c/aNe0INZFYjOF+37zF3H+DmcvlHMsWrLzotKUqOigd3jIO2Ft6mWxb8DQhloYL0CZTdFKGGzF/OnOb8r3F13sUnEMW7GAz8lVAuX6TSzH5F5PLEn6z//eIqMf6ocToPPOsms0aSx92AeWgQBgdoaxvS+S6q7cXKgtOJLfTPxMnN/mAGXzPxON/Rj+9la7V6pXh9RgXet0wyYJcOZJ/RhY26/Ilb3YUPoOsrO5yBdExxN6B6jTU18sv3++pC1K6zT+HatJ1Tbr4lCgrpPceZyS9zDyzIyYzg/5qbnnCV/7aEPX8QUbddp7lq3sSJA8ajebUtujYZ9kjFvI3E6+eir94NLFGM49qH2IUzjxn90SF3sr4ckYZZzc7szvkq3TrZ4XKlaTz8ECCFMjpnRFRT9RD5vGxnmxb/Cw9WdtjbDmCFMjDawkXDyUM56XY/bU+4vlDda+J/BVi/rBh1uOvfyhttiVrvhVx50KiOl2HMmcJzT7zl1HUqV2xhGfQNB0fmY0yZwlBtTwdXOR7lj0n/OPZXXXDT7wJYgHF/VTbl0SZ3WRe6e5dSrF3xpkGLQW8deH3eTeuw5kdsUp7gliITxlVXHQW4Rm3L8RDmysg2JUgFlC2pmNqgtbsJvNylqWm5Dj3sMWoHJS0hndD5mWkEZkMB/KzFFdPpU77nsJe+QORVorw7q54i5efS35xB/NyptXoGB0+X0uhaUaj4d2Y71otk60RwPANPEGnJTT/HhdDEzobM9FSKK3+iZkFDbciAksjgvAYVLoiQN9pGb2aiA1gSN5+tUi+FPCszCudTC7DCbgsB1wDDP+el0xOyVB/hQ4lQ6GznAKelXml09Hop7MCMOh4aNPpaAYnjLQc/edH/CvyFLxC0TFiOfk/K/NKp6+3+HwRKUGxX4IiIsW80ulfJJjrFsPP1isiAvQDX6ALoigw/xT186ni87UYKI0U/xo+cvTTCR+0NIsK8zYdTRvG7kEsQ2/T8a840uinEwEM+pGKBuxlUgRQFMVDmw6xEvwYQfAU0Mskn9arAho+mO2WwjB8nEuSwporBjAXrcHa2CutZdDFbh38K44Menisg5fPS446ZwUFPKz8XdZWWimdu7bauGkNLOzes63Vx/XJ+2PmrInjJwyHhdDQx81b1rl1y6I5d/89d7pDx0EByk0AABAASURBVKbTvh9HCgcPbTpitf4W7tHZAtNSZCxaBQP3/N3EkZ92at6lW+vJU0ffuXOTiADa6v50gs5EyDWog592btG1+8cTJ426dv0yKSLMK50hmCiVlwlN06t+/2XO3ClOTs6kkPDxaekriGQM86SkxO8mjczSZM2Y8dPUKXOTk5NgFRKJ0KH42FywEeHhYeMmDEtNTRk65Nvevb6MiY2eMnV0fHyc5Wew+hsJSTV8Hj66f/rM3yuXb1z1+1JSSPjop9MjmUpy4ODuzMyMn+b9Zm+vH5PP06PYoK96Xr0W0qL5x0TQSCn2unPXn17Fii9Z9Ds7e1zdOg2/HPjZ9RtXWrZoY+EZdNZ+96r/2K4ozAEwWb/sPyQiInz3nq3u7h4NGzQZOWL8j/Onnzt3plSpMn17D/z44w5vPcmFC2d/+e2nly9flC8X1Llzj3ZtP4XEtLS0nbs2Xwq5EBb2pJin14cffjRwwDC2lFuLd3Gf1b9vcXUp/GCHEL2BGA4RKbNmTwKTFfJuwaI5crm8UsXgmTN+2rd/54aNq11d3dp8/Am8gd9q08LretGSH27evOZb0q9JkxaQWUqlfgjsPXu3//ff2Xv3bitVqhrVaw8aNMLP159YT8/P+zVt0sJYAEqU8IVf0D5rziFm3//efTs2bV7z8/xlU6ePASupTJmy48ZMBZt33vzvtbQWNGXsmClQQws+ia0zcdzYqaarCjv9jBDsJSyEyv+tkI+frohsOjs7u23bN5QuHXDsr/ODB4346+iBMWO/btmi7d/H/mverDXUnNS01ILPADI3fcb4QQNHzJ/3a+PGzX9eMPvEyaNE/3C3bdm6/vMeX/z4w9IhQ74FowwqHikUxYp5vYvMATodAzEcwjOKqtoqFIrbd27Av53b/1q1YhMsfDvmK52OPnTgzIzv5+/YufnixXMFnyEmJnrkqAHVqtZctHDl55/3O/nP0V9/+xnSwYX027IFwcE1Zs9eOGnirMTEhB9+nEYKBdSHgIDXkwGcPfsP/AYFVbbiFLyMSDAyiiqKoATUxLS01PUbf1/484qD+09nZ2f/OP97qI9r/tj256b9t25f375jU8Fn4CATTYmMivhx3vRq1WrWr9eIFAX5tV6LbNrBCuUrfdqxGyw0+6j1wkVzg4Org8bBavNmH4OHMvzZU0gp4PB161fBu7p1q3ZEb802SE9Py8jQzy/Z47O+HzVtCa8mdrfbt29cCjk/5OtvCPKKIqy2Go0GjHGoLW5u7oFly4MVMODLoZBeq2YdMASehD5q0KBxAYfv2r1FZW8Ph4BJWLtWXVClBw/uQnqVKtXWrd3h719aYRjgWpudPWXamOSUZDfXd5pIF0yVlb8vheJRoXxFInAoHcPQRZOToG79+30NbSlYBvkAW+HXpWs8PfWTjdWs8cGTJw8LPpyzTIQoxNhx+tIVVKES2DFW2XTE2tZrEQIGHbvg5OQEvwEBORO4ODjo5wAH72MBx+p0OqhFrQwyxwINJXYBal3I5Qvzf5rx+MlDrVY/cryHx/ub5U/snhQ/v1J2djmTyzk4OoK7wLjJydEp7W2GeWjoowoVKsnlOUO9t23TEf4R/fdq8qioiOUrFt27fzs9PWeC5KTEhHdROrAFJk/5FkyPKZPnEOvgZVipSHtFBpTJMXsdHR2hvrAyRwyVMfZFTMHHcpaJ5coFLV60CprY69ev+nb04EULVkKry9KDrW29guOpqHI914lk1nyKqVarQexUKjPet9V//LZhw+oOHbps3rjv1MnLfXoPIO8TPkod+FqLanCzXLkms/J7WrDE7c1lIrhrp04fW7FilaWL//jnRMjPPy0j7waYA0OH9gVdnj7tR+tsAdb1z8OuQkUaHDStjNbWcM4yEVxJ0FZo1bIteM8TEuL3H9hp1eH5vRjyab0SXqBSqaBSwSPOlQ6N64OHdnfv1vuTDl3YlLeaFTZFJpfJ+dfDU6cfYYUXOenk5JyekZ43/dCRveCIAQcuu/qOmRga+njS5G8+bt0hl2PbCrCXbv5wkIkXL52Hqt2gfo5jDgxPCH2EhYUSq8inyJt/OUMN4cP7DQxjeFeAu9SY8seaZctXLAaPQ2ZmppdXziSY4EU6f+H/yPtDH5Ggxd6CfQcgE+/cucE6GYCT/xwbP2E4TdMpKcnFvV7PZMqGEQoHmP8zZn0HAeIxoyeTQsHPUUP0H2Xy4yXKQSbu2bN13bqVxlXI08io58W9fUhRkE8zhGIofuR6p47dQ0IuQGAIGib7D+zaum1D2bLloGEC7j+IHIFTJjk56eeFs8EvAy4/o5vAKuAkcHL4B2eAs7HLVvVX5CfQdOXJqE0d2neGt9HiJT9evnLx7L+n/ljzWzGv4vAaK18uKOTyf/C0of7s3PUnu3NMbDSxHvCvg7eozcef3Lh5lc1B+BceHkYEDrxECT9eohxkYpcuPR8+ug8hXTb75vwwBc756SfdrDiF1REJEDp+WPJt2nySkpq8YeNqUDFwTH791aj27TpB+vSpP4IT9MsB3e3t7YcPG1uzZp1Ll8536dZqw/rdxEoOHdqzbftG4yob95kwfjp7IUugCB/HpwPDnCejNkFgbv68XxcunAMvJ/BIgB4NHjwS0gcOHA6R9GnTx4KF3rVLz0kTZ0VHR0ILdOqUucRK7t67BS5diPqZJoJzo/AtWZ7Am28kOMhEaLdOnjhr6/YNe/ftgFVoFM//8Vdj/wqLyP+lQJltpm78IYyhqa7fliGIBRzbGBkXkTX0p0DCJ/atjIx9ltV7Mr/uirdcOxl362zSiCXlCZ+4eDju8omkfjP5dVe8Je655vCa8JFLzTyufL57ldTndu8Mb2dBxCHyrYDh4zcSDI69ZQ0FlPd8+9Nx9ngnTx19O5/hFtq37zxs6GjyznT8tFl+myZOnNm4UTPybvBzHgnw04kpE21+CYqPEQmKw0/Qt2xdv3XrerObygQELvv1f4T3l7D6C39DGIqjBzx+7DRNtsbsJkdD7+J3Z/XqLflt8nAviv7GvH3rcnVjHGQiB5fgIxBU4mpM3I4duzXPZ0AEhbxoPjGw9SUoqyMSHFZdKzpAF5aShu+9pYa+Mx1X5gAHmcjBJfgIBJW46hTp4uwC/4gtsfUlGGvHHGZwng5r0Hfn4J+fjqL4EkAXBBQvXdPop7OKAnQr3/50+Hwth6ez46LQWQM/SzwlqaEi35kC3lY4s3VRwPBx2g3MROvgp6agTVdE5De6Oj5dwYNZKAL0Nh1WxqIgv9grWgPCByuI8GEoGVrmVmB17BVC2+jksRh+jq6OFcRKeNlOZHTop7MCa8enQ9+AVfB0dHXMRetAP52YMa90On6M2oS8Cxi1EwWYh0WDzUdXR94bKHUiAHu2FhHmlU5pR2l1aDRbikzOKOx4181EJqfsrBtgXNIwMkLx772vkzFyJdZES2Hk+XYRNp+scqZ0WpoglqHJ1KkceVdLnD3kOn6Mri4I0hOzlSreaYq7lwJDS5YT/zxdYWd+k3mlq9HUJSMVlc5SkuM0ZaoUZlJtm9KiRwlNFqPRaAhiATFhGV6+doRnVK6rn236/pV4gljAoxvJLh5ys5vMK1256h7OHordv1g5V4UkObzmqUJBmnYuQfhHybKqPUufE+Rt/HckMkvNdB5emvCPoDpOV48nEuRtpKVlJsRo+0wyP0YxVUCQde/yiPgodY1mxSrV8yBIHsLupFz5O05uJ/tiSgDhK//uf3n7fHKVhq61mnsTJA/Rz1IuH01KSdAMnc/fcX0fXUs5seVF+douDdoXzfQxIiMpIfPikZcvnmqG/FTWOCNtLqiCu5PsXfE89pmG1uYzI4HZT1UYMz2VKbMRpLx7Mtb37M9ziH5ERaqgHd7cmWFM/wSTnXNvehOZjMAj9fBWfD4+gPCbY5siw+5majVF0As197MtHIXIZducRCGjdBTjVkzRd3IA4TcXjry8fS41K0Onn8Qsv1w0fSZvez65sjJvDTVT/i145mZKyFtr6DuciuhnENTfu4MzNWBmOVLQ2Szwd2YmZqZlmlHKXE+HMuSBflqxPBOL6YfVoNgrvT4o756UzhACM8nLXH/tsWPHExISevXqVdBJDP+//rMMl37jTmT628zZI9fWV+elCDttkOmBb9yJ0om4uQkptEnTdEKMhlC589HwN5kbb5cy5MObyRQjYyidab4bM8s0195cYa+ScwnYcu3q1X///XfUqG8Yc4fnlKK8Fc+0VFA5/Xwp8vrX9C/KVSxfdwrWD2X1+s7gXeXpI7D49ItIDfX6ZZxTJim2hpnkl/5xkdd/7OvHa1g1fWg5m3JVBNisM9bZVynssYak6MjI5StX/jB37usdDCeU6Yf2Mb0iZbgY8yqFMtQrw9Wo3J21KZNyCJaEjn5VOinDeEHUq0tQlM6kdNnJaPcSDuRtWBQxdPBwcOBH+5WWxRO75OL88xzzH7Dqi/u9vUBwgMw+PZN+4eWLXWAKg7cfL55bYlp2SuZzAWWiwHoOa7VahQJ7OwsbzEQRILhMFFiBy87OtrNDg07YoNKJAMFlIi8n78sfrCQiADNRBKBNZ1uwkogAzEQRgEpnW+D5YutV6KDSiQDB+ZHQpkO4BjNRBKBNZ1uwkogAzEQRgEpnW7CSiADMRBGASmdbwDuAlUToaDQapRK7DQsb7GViW9AcEAGYiSIAbTrbgpVEBGAmigBUOtuClUQEYCaKAFQ624Jfg4kAzEQRgP3pbAuaAyIAM1EEoE1nW7CSiADMRBGASmdbsJKIAMxEESC41qvAepmgi0cEoNKJAPTT2RasJCIAM1EEYOvVtmAlEQGYiSIAlc62YCURAZiJIgCVzragn04EYCaKAFQ624LmgAjATBQB+IW/balUqdLcuXP37dsXGxtLEGHi7++PY5kIl4sXLy5evPjRo0flypUjwkFgr9alS5eeOXPm/Pnzq1evdnZ2/tBAvXr1CCIcnj9/Dg1YggiHiIiI86+oU6dOo0aNFixYAG8sIhyo3LO0C4cnT56wj/7q1asNGzZkVU9YT1+aDB48eMSIEbVq1SIIvzGqG03TH75CLpcTASJgpTMCLoMLFy6wWUJRFJsfoH0CzRLRM3To0EGDBtWtW5cg/CM8PBxq07lz56A2GQ2IMmXKEIEjBqUzBVpGrORBbrFmNuRWYGAgQXjDyJEj+/TpA/lCEH6g0+nYWgMCJ5PJIGsaGSAiQmxKZwq4TiHnQPIyMjKMbyd7e3uCvFdGjx7drVu3Jk2aEOS9EhYWxqrbpUuX2NoB6iZW/4+Ylc5ITEyMsXlbuXJlNlMhjEuQ98H48eM7dOjQvHlzgnAOuHpYdYNfiICz6tagQQMidiShdKZcu3aNlbwXL16wVjr8urq6EoQrJk2a1LJly9atWxOEK0JDQ1mBg/Adq27w6+vrSySD5JTOSEJCAut5hd/SpUuzzdvq1asTxMZMmzYNalq7du0IYks0Go3RfHO5j+ohAAALl0lEQVR0dGQFTrJdsqSrdKbcvn2bbd7Cq89o6Hl5eRHEBsycOfODDz7o2LEjQWzA48ePWXW7efOm0XwrUaIEkTaodG+QlpZmNPQ8PT1Z1YNqSZCiY+7cucHBwV26dCFIEaFWq88ZgHILrhg2corl1hRUunx5+PAha+jBu9Fo6EnKtWEj5s+fX65cuc8++4wg78aDBw/Y9um9e/dYdYMi6u3tTZA8oNK9HfB3GA09NlzF9kwmSKFYuHChn59fr169CGI96enprLpBaSxWrBjbPsUPTt4KKp11sF2QgP/++48NYsBvQEAAQSxm6dKlUEW/+OILglgMWG1swXv06BGrbuhKtgpUusJj/BgDjD62eQtFEEdeeyvLli1zcnIaMGAAQQokNTXVGDyFkALbmKhZsyZBrAeVrgiIiooyfipYo0YNtkRWqFCBIOZYtWqVXC7/6quvCGIOticAFCdoQBiDpx4eHgR5B1DpipjLly+ztl5iYqLRo+fs7EyQV6xduzYrK2v48OEEeUVSUpLxZVmqVCm2iVCtWjWCFBGodLYiLi7O2LwNDAxkHSvBwcFE8mzYsCE5Ofmbb74hkgfC+mwhiYyMNDpA3NzcCFLUoNJxARRoNlgWERFhHGtAau2Rjh070jSdnZ0N0UNYkMlkWq3W1dX15MmTREoYP84B4BXIFgZ8BdoaVDpOAVvGONaAj48PW8ol0kVg8uTJx48fpyjKmAJlr3nz5gsXLiQS4Pr162x4wfjBNYBuDc5ApXtv3L9/n5U8ttsn69ED+SMiJTQ0dOTIkVDPjSleXl6zZs2qX78+ESmsB4P1vgUFBbHhBRxE572ASvf+YT/lYT168JJnm7eirP/sbEfGVfgbly9fTkTH1atX2QyFhqoxeOro6EiQ9wcqHb948uQJ27yFGC4reWIaHDEqKmrYsGHgfYdld3f3adOmNWvWjIgCsFWN5luVKlVYdQM7jiD8AJWOp4DPnpU8qDximhxjyZIlW7ZsgVJXtWrV9evXE4EDLyRW3VJSUozmG45rzUNQ6QRArskxWMkT1mybRqBBN2jQIPidNGmSQIeoi4mJMQ4cUr16dVbdypcvTxAeg0onMC5evMhKXlpamrEHVpEbEVFP00KOJiTE0up0mtbqUywpJRRDGOrtu0GRM43AvuPZ4EywFyUjCiXl7KGoUN2xbpvixAaYTktiHDgEp+gWCqh0QiU2NtbYq74IJ8c4vSvmweV0bTZDKYi9k8rBXeXoppIrlXIZ0SsKFBaQHxAhdpl6JYEMxcj0henNk1GvFdKwaDgM/n+9m17zGMZ0x9fHmV7ImErlEV0GWvpadbomI16dmZqVnamDNI8Sij4TA8jb6NKly969ewvYAVyKxjlPP/jgA5xqTrig0okB4+QYIH9Gj17ervbt27fPzs7u379/3759857kQUjSqV3xUBxcvZ38gm1iFnFDQmRK7KMEWsP4Bqq6jipldh94UMOHD3/69CnESfNuNfZ5hMdlnNFZoVAQRLCg0omKxMREo0eP/XzSdHKMunXrQnY7OTl9/vnnuT473fFL+Mtwjae/a8lKxYgo0Gjox+fDwRId+lNuD9rdu3fBSwiBYJ1OZ1Q61hnK2sgNGjRg1Q3H4xINqHSiJdfkGFBvZ86cKZNB3ScODg5t27adOnUqu+eaaU90jCyocWkiOp7fjUuJTB30Q1l7h5yYNWjZ/Pnzo6Oj2VVXV1d4FPCUYNkYPLXEjYgIC1Q68cNOjjF37tz09HRjIrTFmjRpsmDBgm2LwpLi6EpNA4hI0WRqHv0b+eXMMk6udgcOHFixYkVcXJxxK5T/7777DtQNTGCCiBdUOqnw0UcfmSodMVTyXo1+d3P3qNAwgIia7KzsB2ci3GpfWLduXUpKiukmeAhXrlwhiNiREUQagGUHvzoDSqXS29u7Q+2Zjip30cscYKeyKxbgmni1rrOzs4+Pj6OjIwgcTdPwKKCh2qlTJ4KIHQwnSQV/f38QOHBLVa5cOSgoyEVV8s5RjyotyhJpUDKoWOqL9M8b/Vqva/azZ88ePnwIcYmYmJjMzMzk5GSCiB1svUoIMOuMwwStmR6qcFAF1JLWhMe3jz/tOcHPy9eBIBIDW68Swihz9y4nZWXopCZzgMpFeXhtLEGkByqdFPnvcKLKmb+fMV2/dWL89Ppp6YmkqAmsUyI1QUsQ6YFKJ0UykmmfSp5Eesjt5DI7cuR/UQSRGBiRkByXjsUTiri4S9RXZe+kjH6aSRCJgUonOcLvpcsVNrTlQ64euhCyNzr2cUmf8jWrtWrSsCf7ycGm7VMgAla7Rtvte2ZnZWWUKVWtQ5uRZUpVZY86dPS3yzeOqJSOtaq38fay4dcaLt4OsQ81BJEY2HqVHGkptJ2Drd5wV28c2753jr9vxSlj97ZrPez/zm/bf2QJu0kmUzx7fuvK9b++Hbr+x+/PKOyU2/bMZjedv7T7/KVdXTtM+HbIumIevn+fWktshoefK0GkByqd5ICoq0JlK6W7dGV/YJlaXTt+5+LsWSGwTpuWX5+7uDM1LSHn0lkZn3eZVszTTy5X1K7e5mXcM0iB9H8v7Kge3LJ61RaOjq51a39SPrAOsRkKO/3fHhWWQRApgUonOWgdQ8lsku86ne5p+M2gCq/n+gGxYxjd07Dr7Kp38QCVKmfiGHt7F/jNyExhGCYu4bmP9+s+zP6+tp09C1rTWek6gkgJ9NNJDoUcvGY2qedarYams4+eWAX/TNNT03NsOooyo7BqUB0dbVRAQKm0bbSEIYzCDt/x0gKVTnLI7WRajU2UTqm0h5DCBzXbVw9uYZoOzdUCjrJXOclk8uxstTElS2PzpqWXLyqdtEClkxyOLrLURFv1nvUtGZSpTi0f+AG7qtVmxydGursVNF03tCU93EuGhd/6qFFOyr0H54jNSI5NgVCwgzNO3yUt8M0mObxLK7XZtlK69q2H3b535uKVA3qf3bPrm3dM/X3dCGjVFnxUjaqtbt09df3WCVj+5+zGZxG3ic1Ijs20U+FAm5IDlU5yNOlQTEcTG1G2TM0xwzZCCGLmT21/Xz8qU502oM8COztVwUe1+mhA/Q867TuyaPz0+mDQfdpuNDGMHEdsQGZylmcJnNBLcuBYJlLkj6lPVK4Opav7EOlx58TTTkNK+Ac5E0RKoE0nRcpVd06Pl+IXUc+uRYN9iTInQTAiIUVafO7z4HLai6eJ3mU9zO5w++6ZbXtnm93k6OCakZlidhO0QDu2/YYUEeDmW7t5nNlNOh1NUTKz89p8WLdb+4+H53fOtAR1nVZuBJEe2HqVKGf2xN69kFa5RYDZrVmazPR8Bk3KyspUqcz3d1MqHZ2d3EnRkZBo9aAjKpWTk6N5LQu7FqNNzxr8A85LLUVQ6aTLuplPdZS8XD0/IgFomr73T/jIxeUJIknQTyddBswsq07RvAyXxCwKD848r9kM263SBZVO0oxYVD72fkLc8yQiam6fDA0Idmj8aXGCSBVsvSJk+bjH7iWd/YLFKQR3/wlr1Ll4jUY4WJOkQaVD9KyeEkpksqBGoprHPvxmbEpsRvXG7k27ehFE2qDSITnsXBoe+0zj4K4UQYwi4t7LlOh0mYz0m+rv6KoiiORBpUNekxCjPrA6Oj2Jlitlju4qd18X1+JORCDQGvpFWFLKiwxtFk0YpkoDl+afSfEjEMQsqHRIbjRpmr82vYh9rsnO0hEoHWz/XMakmy6lH+PtjWXKsJ9pUcq7D7ujMf3VAqUvg9Qbh8CZGDN7vroWMb2QTA7X1t+njiZyO8rFw65WM+fghlKc+QwpAFQ6pCCin2bGhGdmJOlo7RsyBtLyKmxvlB+W1/LGvKGOxn1zCxib8KbU6T/vNwzbmUsU39A4dl0m09k5Kjy8FUG1sBMJki+odAiCiB/87hVBEPGDSocgiPhBpUMQRPyg0iEIIn5Q6RAEET+odAiCiJ//BwAA//85F/0BAAAABklEQVQDALvhOm8slbrSAAAAAElFTkSuQmCC",
|
||
"text/plain": [
|
||
"<IPython.core.display.Image object>"
|
||
]
|
||
},
|
||
"metadata": {},
|
||
"output_type": "display_data",
|
||
"jetTransient": {
|
||
"display_id": null
|
||
}
|
||
}
|
||
],
|
||
"execution_count": 3
|
||
},
|
||
{
|
||
"metadata": {
|
||
"ExecuteTime": {
|
||
"end_time": "2025-09-14T01:35:03.035331Z",
|
||
"start_time": "2025-09-14T01:35:00.799287Z"
|
||
}
|
||
},
|
||
"cell_type": "code",
|
||
"source": [
|
||
"\n",
|
||
"# Invoke\n",
|
||
"state = router_workflow.invoke({\"input\": \"Write me a joke about cats\"})\n",
|
||
"print(state[\"output\"])"
|
||
],
|
||
"id": "721ff52941281949",
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"Why did the cat join the gym? Because it wanted to improve its mouse-cles!\n"
|
||
]
|
||
}
|
||
],
|
||
"execution_count": 4
|
||
},
|
||
{
|
||
"metadata": {},
|
||
"cell_type": "code",
|
||
"outputs": [],
|
||
"execution_count": null,
|
||
"source": "",
|
||
"id": "f1709e07d4bb0b66"
|
||
}
|
||
],
|
||
"metadata": {
|
||
"kernelspec": {
|
||
"display_name": "Python 3",
|
||
"language": "python",
|
||
"name": "python3"
|
||
},
|
||
"language_info": {
|
||
"codemirror_mode": {
|
||
"name": "ipython",
|
||
"version": 2
|
||
},
|
||
"file_extension": ".py",
|
||
"mimetype": "text/x-python",
|
||
"name": "python",
|
||
"nbconvert_exporter": "python",
|
||
"pygments_lexer": "ipython2",
|
||
"version": "2.7.6"
|
||
}
|
||
},
|
||
"nbformat": 4,
|
||
"nbformat_minor": 5
|
||
}
|