{ "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "from pyquil.quil import Program, Declare, MemoryReference\n", "from pyquil.gates import *\n", "from pyquil.latex import to_latex, display" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Basic Functionality: LaTeX generation and inline IPython display\n", "\n", "There are two main functions exposed:\n", "\n", "- `to_latex` produces LaTeX source code for producing figures.\n", "- `display` renders to an `IPython.display.Image` object.\n", "\n", "**NOTE**: The `display` function requires that `pdflatex` and Imagemagick's `convert` are installed and available in the user's path." ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\\documentclass[convert={density=300,outext=.png}]{standalone}\n", "\\usepackage[margin=1in]{geometry}\n", "\\usepackage{tikz}\n", "\\usetikzlibrary{quantikz}\n", "\\begin{document}\n", "\\begin{tikzcd}\n", "\\lstick{\\ket{q_{0}}} & \\gate{X} & \\ctrl{1} & \\qw & \\meter{} & \\qw \\\\\n", "\\lstick{\\ket{q_{1}}} & \\qw & \\targ{} & \\gate{H} & \\meter{} & \\qw\n", "\\end{tikzcd}\n", "\\end{document}\n" ] } ], "source": [ "p = Program()\n", "ro = p.declare('ro', 'BIT', 2)\n", "p += X(0)\n", "p += CNOT(0, 1)\n", "p += H(1)\n", "p += MEASURE(0, ro[0])\n", "p += MEASURE(1, ro[1])\n", "\n", "print(to_latex(p))" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "execution_count": 3, "metadata": { "image/png": { "width": 300 } }, "output_type": "execute_result" } ], "source": [ "# extra kwargs are passed are passed straight to `IPython.display.Image`\n", "display(p, width=300)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Controlling display through DiagramSettings\n", "\n", "Certain options may be controlled via a `DiagramSettings` object, which may be provided to either `to_latex` or `display`. For more info, read the docstrings on `DiagramSettings`!" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "execution_count": 4, "metadata": { "image/png": { "width": 300 } }, "output_type": "execute_result" } ], "source": [ "from pyquil.latex import DiagramSettings\n", "\n", "custom_p = Program()\n", "custom_p += RX(np.pi/2, 0)\n", "custom_p += RX(np.pi/2, 1)\n", "custom_p += CNOT(0,1)\n", "custom_p += X(1).dagger()\n", "\n", "settings = DiagramSettings(\n", " label_qubit_lines=False, # no leading q_0, q_1\n", " abbreviate_controlled_rotations=True, # RX(pi/2) -> X_{pi/2}\n", ")\n", "\n", "display(custom_p, settings, width=300)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Controlling layout via gate groups\n", "\n", "In general, we do not give much explicit control over circuit layout. One exception is if a subcircuit should be grouped together (for example, to label this within the larger figure). The mechanism exposed for this is via two new pragmas:\n", "- `PRAGMA LATEX_GATE_GROUP ?` marks a start of a block of instructions for rendering as a group. If a string `` is provided, this will serve as a label in the resulting diagram.\n", "- `PRAGMA END_LATEX_GATE_GROUP` marks the end of a grouped block of instructions." ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAB6MAAAGlCAMAAACIp6OYAAAJJmlDQ1BpY2MAAEiJlZVnUJNZF8fv8zzphUASQodQQ5EqJYCUEFoo0quoQOidUEVsiLgCK4qINEWQRQEXXJUia0UUC4uCAhZ0gywCyrpxFVFBWXDfGZ33HT+8/5l7z2/+c+bec8/5cAEgiINlwct7YlK6wNvJjhkYFMwE3yiMn5bC8fR0A9/VuxEArcR7ut/P+a4IEZFp/OW4uLxy+SmCdACg7GXWzEpPWeGjy0wPj//CZ1dYsFzgMt9Y4eh/eexLzr8s+pLj681dfhUKABwp+hsO/4b/c++KVDiC9NioyGymT3JUelaYIJKZttIJHpfL9BQkR8UmRH5T8P+V/B2lR2anr0RucsomQWx0TDrzfw41MjA0BF9n8cbrS48hRv9/z2dFX73kegDYcwAg+7564ZUAdO4CQPrRV09tua+UfAA67vAzBJn/eqiVDQ0IgALoQAYoAlWgCXSBETADlsAWOAAX4AF8QRDYAPggBiQCAcgCuWAHKABFYB84CKpALWgATaAVnAad4Dy4Aq6D2+AuGAaPgRBMgpdABN6BBQiCsBAZokEykBKkDulARhAbsoYcIDfIGwqCQqFoKAnKgHKhnVARVApVQXVQE/QLdA66At2EBqGH0Dg0A/0NfYQRmATTYQVYA9aH2TAHdoV94fVwNJwK58D58F64Aq6HT8Id8BX4NjwMC+GX8BwCECLCQJQRXYSNcBEPJBiJQgTIVqQQKUfqkVakG+lD7iFCZBb5gMKgaCgmShdliXJG+aH4qFTUVlQxqgp1AtWB6kXdQ42jRKjPaDJaHq2DtkDz0IHoaHQWugBdjm5Et6OvoYfRk+h3GAyGgWFhzDDOmCBMHGYzphhzGNOGuYwZxExg5rBYrAxWB2uF9cCGYdOxBdhK7EnsJewQdhL7HkfEKeGMcI64YFwSLg9XjmvGXcQN4aZwC3hxvDreAu+Bj8BvwpfgG/Dd+Dv4SfwCQYLAIlgRfAlxhB2ECkIr4RphjPCGSCSqEM2JXsRY4nZiBfEU8QZxnPiBRCVpk7ikEFIGaS/pOOky6SHpDZlM1iDbkoPJ6eS95CbyVfJT8nsxmpieGE8sQmybWLVYh9iQ2CsKnqJO4VA2UHIo5ZQzlDuUWXG8uIY4VzxMfKt4tfg58VHxOQmahKGEh0SiRLFEs8RNiWkqlqpBdaBGUPOpx6hXqRM0hKZK49L4tJ20Bto12iQdQ2fRefQ4ehH9Z/oAXSRJlTSW9JfMlqyWvCApZCAMDQaPkcAoYZxmjDA+SilIcaQipfZItUoNSc1Ly0nbSkdKF0q3SQ9Lf5RhyjjIxMvsl+mUeSKLktWW9ZLNkj0ie012Vo4uZynHlyuUOy33SB6W15b3lt8sf0y+X35OQVHBSSFFoVLhqsKsIkPRVjFOsUzxouKMEk3JWilWqUzpktILpiSTw0xgVjB7mSJleWVn5QzlOuUB5QUVloqfSp5Km8oTVYIqWzVKtUy1R1WkpqTmrpar1qL2SB2vzlaPUT+k3qc+r8HSCNDYrdGpMc2SZvFYOawW1pgmWdNGM1WzXvO+FkaLrRWvdVjrrjasbaIdo12tfUcH1jHVidU5rDO4Cr3KfFXSqvpVo7okXY5upm6L7rgeQ89NL0+vU++Vvpp+sP5+/T79zwYmBgkGDQaPDamGLoZ5ht2GfxtpG/GNqo3uryavdly9bXXX6tfGOsaRxkeMH5jQTNxNdpv0mHwyNTMVmLaazpipmYWa1ZiNsulsT3Yx+4Y52tzOfJv5efMPFqYW6RanLf6y1LWMt2y2nF7DWhO5pmHNhJWKVZhVnZXQmmkdan3UWmijbBNmU2/zzFbVNsK20XaKo8WJ45zkvLIzsBPYtdvNcy24W7iX7RF7J/tC+wEHqoOfQ5XDU0cVx2jHFkeRk4nTZqfLzmhnV+f9zqM8BR6f18QTuZi5bHHpdSW5+rhWuT5z03YTuHW7w+4u7gfcx9aqr01a2+kBPHgeBzyeeLI8Uz1/9cJ4eXpVez33NvTO9e7zofls9Gn2eedr51vi+9hP0y/Dr8ef4h/i3+Q/H2AfUBogDNQP3BJ4O0g2KDaoKxgb7B/cGDy3zmHdwXWTISYhBSEj61nrs9ff3CC7IWHDhY2UjWEbz4SiQwNCm0MXwzzC6sPmwnnhNeEiPpd/iP8ywjaiLGIm0iqyNHIqyiqqNGo62ir6QPRMjE1MecxsLDe2KvZ1nHNcbdx8vEf88filhICEtkRcYmjiuSRqUnxSb7JicnbyYIpOSkGKMNUi9WCqSOAqaEyD0tandaXTlz/F/gzNjF0Z45nWmdWZ77P8s85kS2QnZfdv0t60Z9NUjmPOT5tRm/mbe3KVc3fkjm/hbKnbCm0N39qzTXVb/rbJ7U7bT+wg7Ijf8VueQV5p3tudATu78xXyt+dP7HLa1VIgViAoGN1tubv2B9QPsT8M7Fm9p3LP58KIwltFBkXlRYvF/OJbPxr+WPHj0t6ovQMlpiVH9mH2Je0b2W+z/0SpRGlO6cQB9wMdZcyywrK3BzcevFluXF57iHAo45Cwwq2iq1Ktcl/lYlVM1XC1XXVbjXzNnpr5wxGHh47YHmmtVagtqv14NPbogzqnuo56jfryY5hjmceeN/g39P3E/qmpUbaxqPHT8aTjwhPeJ3qbzJqamuWbS1rgloyWmZMhJ+/+bP9zV6tua10bo63oFDiVcerFL6G/jJx2Pd1zhn2m9az62Zp2WnthB9SxqUPUGdMp7ArqGjzncq6n27K7/Ve9X4+fVz5ffUHyQslFwsX8i0uXci7NXU65PHsl+spEz8aex1cDr97v9eoduOZ67cZ1x+tX+zh9l25Y3Th/0+LmuVvsW523TW939Jv0t/9m8lv7gOlAxx2zO113ze92D64ZvDhkM3Tlnv296/d5928Prx0eHPEbeTAaMip8EPFg+mHCw9ePMh8tPN4+hh4rfCL+pPyp/NP637V+bxOaCi+M24/3P/N59niCP/Hyj7Q/Fifzn5Ofl08pTTVNG02fn3Gcufti3YvJlykvF2YL/pT4s+aV5quzf9n+1S8KFE2+Frxe+rv4jcyb42+N3/bMec49fZf4bmG+8L3M+xMf2B/6PgZ8nFrIWsQuVnzS+tT92fXz2FLi0tI/QiyQvpNzTVQAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAYNQTFRF////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAzMz/zMz/zMz/zMz/iIirUFBkKys2zMz/zMz/zMz/zMz/zMz/rKzXAQEBg4OjY2N7QUFRenqYISEpAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAT09iAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFxcdAAAAAAAAAAAAVFRpzMz/JycwzMz/zMz/zMz/amqEAwMENDRBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAzMz/lpa7X193NjZEsbHdDg4RiIiqGxsiKSkzvr7uRERVbW2Io6PMenqZUlJm////u7u73d3d7u7uZmZmzMzMd3d3iIiIIiIiVVVVERERqqqqMzMzmZmZRERERkZXUlJnFxcdPDxLWlpwU1NnLCw4GRkgjIyvJiYwjo6xi4uvbm6JHh4lCgoMeHiWKCgyMjI+DQ0QlhyusgAAAE90Uk5TADNViLtEzHci3RGqZpnuIneIu83f7BHMZt3u0u9cpMen346Xp8ff189OUIm+dbTZzebywFymv+dp1u+tRKeqM1X18fqbyILaW7fx7NHjxDES0aEAAAABYktHRACIBR1IAAAACXBIWXMAAAEsAAABLABziOlSAAAAB3RJTUUH4wsBBBo3nPFi8AAACnh6VFh0UmF3IHByb2ZpbGUgdHlwZSBpY2MAAFiFnZdtkmSpDUX/swovgU8JLQcEivD+N+BDVndPt90zYzsriMx6D4SQru4V6Z/u6R986lBJ+X1WyT8+9eu3HLnatY7atdeaxxw2Vs1/9klSpGnT3MvII3f/05l/8Ql2fR79cOe0ev4fQx+P/sf5S7oMbdK++fLtBOqJg2Wt2j//F51fL+pUJUL5+/P1zU7pUmX/8Xz3788T4fyE8et/nz8W6M/Pj/9h6OfnkX821MnMl6s1f+0ws2Po98//ZH769czfP7X28g4sJsL7SfqbhAjHVeGNjJq1fYdGt95Sb0wiSm8ay1zG76P8d6bTf9r+b03/+vnb9Os7+vyWJT4dP8iasZGJCm/Y/nn013FoteVWGpD9XYlEGw/M5btHpYj739XS98/v5kms+jlam/EVh2a/n1jN3vfW+ZlX5ln/Pu9jqPZvyI35icUWDxA/yJL8YvFHpPIz+BbFAyPDMFQuptorCwZFS9IydZPb/lrZWfR26iwaPBh4N1jzsCfzEQ4peUdTfUUHPAnaxIOJgXcSw4BhwDCwMLB4uDCw6zskgzXOGmeNbww95jgsOhhgXr78vvvjNUzD2OTl/SnjkJrGMEbkUgeD9w2PSpuMy1F5CLEVsl5wv2CjCIuFd8o7vC4TI3hcjDl4W6DWgqdlFwxtfuBicb4P34fvy/flO1gQi+JsDIeGO+NQL8IIQjvJVGFwNKqZwUt2r8pDZSHZq/Pmakwkx3VhZLOYDatvcjJyfTkiBBXotJf+ljfgFZJV8qPaxi7UGyNyg3ea8E7xSS+A43/jf4w3At82/7vmdhqGsNyu5xZGtoXCaZn6YRwKa+feJwhAF0h3x+OOwT6d+l6ggnd42r2n3A8TiMmDSY8L1E4exfMgG6MtoAPcx8yDow+gMoDIwKuxGBvpccYZCWzxgzR//jiiVM2PyAVPhOyJrCy6wZ5nsZNlRRZ/OCxZbqPQ4JysKSuYUHbXduCMyFQ+GO1Z2VmpMSXQunl+IC421ZhQ6wa/kSdVMLvkOVYCzDdPOGTi7lwLYPM/i+bVPAGjAV4DeMYxjY1Meja1bJPfIN4IuHmkbOxiLFil5MWxFp4tILE40qJsFhBYZGgRi4WarHh55g9C3dDFhpO2ULSbuttM3vuVD98EfpNBL0CwruxAwYdnB90Otnxp9ldmANcxet5fRbJPf6W28iEuh4kHyB9nwuE38bjA4YK+S/Yux7oa+dqmHCVfQnDvpSzxKDh/APOAGgJUB7GK3VDjyHFfeROlSgY6jCucX3HZNm7z/OhbWCjkxOC7B3x7SpleyiJabqXcyeG0UFel9lGq9ELplLpaqc64kPkj9MpA1wriCAEwFpj2AREMSlNKp/B6N0R6lT536etADpc9IYdSy2h0QkMKsgFZ7FTGPoVTvWordAhFWCziRWYU2RVHeRarKNSgvRSVQa9hRdctYKtoaJkFQxR6mbycc5W5AmLnNws/lMORTHYxTmob6J5DY9LLqqssQrNUoaNbgEYqi4DieNltl80xNwY3nuyzymMgIFB88K27OPFx9+IE+EBahyo++ijMEh1LKwdjt0i5eHeJybVeLoC610qQjWi3hPCb57GjxF31Q6XEnsKrwDyBOkgDsiNVEODk0Gy/iKbfyqpaq9Y6Rq2TnytqPQfNWRXeqnBVbdZr85pqi8eWUXs/dBKOxu3az3rVVQeThzCQ+uGMQMnrU3PG1Ne8VbmT/OKRdquqVBkG9DjqdupsQfMHbBaOnF7tiS1GCTyieypsQvHgIG3MYqNF+qHjgERq3U2gZaubiSCiPmrzZtXlVsegH4UzvR7iclTqYeNzwSWgud1TxTM4XCs1UzkgXL5qWKnBUSJgrjZgL4pvUb1nUwdAuZM+QlQ231EbvqVWpbVqG97vjZmtQc5No7U9WyNlHV/pkVq32/qZdDKtDfh5TPozr23EoTg0NVGCv26Ta4hFb/pEw7zp0TZLbzQgbU5v0+drVj5JMjayzcEDusPM0p4aR0VZonHitgVYrtX2nWRUG21fc47kt7VTa6NaGjhtMEy7KNJl04siwSSJ/JQWTKBZanErytio2f4o8pEPoQWFQkUvB6UXf1AqXK97EFAlHuykh64WierIYacd7XN1KvyRBlJGQw0pj3Pp0mt/PaGs3SWQNqKkuoEdEodgTSS7U8h9Qo9G5ZgQ02WdToa8aF96Oo70Dfw38d4Y3nhN/XWS2n2vDqQ6s1I/RjKO90sTcOV2oPCllbTKxLLHeUIPYSsXsf2oHqpACqGDQWEOQDAqlxpQpwNaG+QRYV2DgI3esUpj2c+myuYYykGdaoFXBWmVZYMueRCMoVQSKp7GBIJTz5i+h8EyJgbhIXlZx2LZWowYYxO1bYyLzcaAxPzIOHh7dKZx3AbUNK74uPsMKB8FLwMBoNXCCS6sCBvOOPzLmwWN4lglotW45KDgj7MFdElDW/pLunXp10APWxlFflWE35SgUOWCrIsaGGYOhS2os8zr8i41YrbE4iFlcvSgR1DZ7LwX3xH4qeKLayvifugxzjahVuXKluuggYgHR5OA02nHEHr6lktuAHyxofQIJJhqXjhCB9mIBPUHQvvX3dLJEmRD567EJr1zqcDsElw/aYJ0NwQGoeC6PplsdalN2oYLa3GxJLE0OV3hd93UEbyqPjHkT1W431BD+vrXCwVeJsAOdDBd49JldS67a76WYqJRs/iBRDJMBwFHhxI0TaoU/TwTrM9+KXYWjbXpjl50K4HhlvXOZDGxOKcYZHCnQdpm+Bp3UpZpLl8TqZ/EcO7w6QJj8OxAXYc1J2LeT3LujIZsGn0zvRvtGt0G0kLzWdZMhnxA2svQ8lcsBpdAOfRUk6KjTsYIG26fMiS9RgdlBNOIg83uNjeO1Z7wLpuFA4Jp6wBquH6vMGTQnDkeageEoUKG7tldF7QcDrotghZPaG/PTHQIirQK9M4wWRA0hc9AKTtVRZlTgHONxV60KgRggRlQdhderYmQTNrjBcEyxWhmfC1EH0VZmzLb15B0X04neDq9CFp+0Y6L7D/84tF+dztKkq5rpU0bsstBsDqK7zB9I/brckLq1Kjk0vaYi/4Mv9U2xAbo5sYbSpvyPtxm4KNtLIal99oDS5cfD2dlu+3X8OxDa8sJoHE4LVB+lDSCppJWMl86ClEah5ZgmUD1kASIpB0uA7T90K2PvjkZaOhc/Z0bR38NCfhox+d2Rz/Yy2hQphOL5LCFb26xWHIO4iiWw2cIh/h9t9umHhyA28zJm7atOYehDW1xuC0d2P4gN4k4Gn5ARP2ecYjWGEcOLI494nCmIIsXbAoNMXknXWfFJvY0v9xCfC7ar5wOM5BwP7Q8J2gPYnGzQS7z5nHnuuP0NwMZOxsn24W7LjJyezhVCM3nc8UkXfjiAgAkkTZgOz0W2D8kFFJdF9KEXDbxhlovfe895nQJ85LXGyhfOH30mInue0ShXygR9DKEpFhASdEREHQHtoZ7zw2RE/KSRqM5mTMBHa0OJaABs6RYtPJbNcgnhTKJoMWhRm7fcY/DkZRtRPoX7ZEEyEutirUAADqHSURBVHja7Z2Jn+NKQphtS75kW+wusCybY9/bLEMgWXhAIJALkkAuSOpNz/HmejvdPd3T0zPdEJIsYZcF8qdHki27dLalqrJKpe/7/WZ+bcmWqqRSfap7NAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADoD+OJ53n+uOtgAAAAQA5fxEy7DgYAAAAUGM9wNAAAgJV4Ohw9X3QdDQAAAOfQ4miK4gAAANrB0QAAAHaiw9FTHA0AAKAdHY72cDQAAIB2dDh6iaMBAAC0o8HRWpq0AQAA3CSIJwybBPkt09LvZbbWCXYxnSZzkC08f5VORrZYe948MzPZvGQalPHc89bSgKxpdNr5YhSsu75QAAAAJyXYiGU8qWfopVsWG7HyJt7ysKVqa7Wjp77w/ei7gbdcr8Vyd6alN19Hp5ukh/SW8VRlMz8m/eVkGW7Wni82u5eGefRxOp37m5k/AgAAGBDjUGySPxar2XbLJFxui7pzMTsUrku3VjraE7P42xsRG30qRLwtCOfZM0aO9mJLb7yY3S83YrbYHSE5jReO0x04GgAAhsRBmOtQJA5dizCtZ5Z0XL61ytFzIbZmnYlY/POk4LwJd0XjyNmHsrifPYS3P4+fOHl8+CrlaAAAGBLBUoQ74QqRSHERikO7r5+WXcu3Vjk6CMWuTB7Jev+76AS714GZCKWDyYeYHPQ9TX7qHX4/x9EAADAgvIMTw61CI2ceKrjXqWLLt1Y5OvrCavvXVBxqqMX+b/lnWUcvhdh3Fgvjg6xSr8dN3F1fLQAAgNMRHgw58VeRhhciLQLHjHefyrdWOvpg/sjRy8PWtGm50tET6evxnu2hdm8HC/p1AwDAcIgUKrJb5iLTNUtsy7XlW49z9Kx0f7mjPfk8XnyW6O1AhJs5Q6gBAGBgeAVH+3J/rsTGk8qtlY4e71U7FYe66u2uuef7yypHRx+WXsp2z1psWVGKBgCAIeGJ/ICmoo29yq3V/br9tCeaJ7Uvx0OsQ7GaTxdejaN9TyLeNlnuLO0HIwAAgKFgytHjcPuFsdwdPP72apH/Wd7RXvFoE88Pk7lOur5cAAAAJ6O0rluunBbbLtzlW6sdHcxmwptO12G4zhy6pDt46ujF7jwVnbfHXigE1d0AADAY4j5j2Rpkr9A7bFy5tWYOE2802fi+Pw8yR14d/iw4OhlZVSzXb+bpX1GZnMFXAAAwHMK091fCOIi7ex1GP+2HTpVvrWmP9kpPla6msf3Ztrk54+hxtlw/CUb+av9pLc18AgAA4DqeXIkdxGVqX+7lFe3elmPLtzZxtDzMa1Pl6PjT4Z0hDo9/KOcHNEgDAMCACOSJvby4zDqWum1Fe3daLN9a7ehwnN8kO3o79mrjyYfYGnshV2h7m1ja+0bocW4YFwAAgNOM91Nrj8bLxNbrg3c3h4U0yrd6maryA9G3k/Um/Y23TsvBhynN5pukIO4nH1P7++v0l+nLwDg+zX4UV3wyZjIBAIAhMV7uFoOcpH2wJ+F2EclgtdtTsXU8Xc+EmE2mi+JRV+LAdrxVMs9n8tfcj8y7XEyX6VfjQvd6uT/PbvLPebIWZvTN3enWZcOyAAAAHCbwQuF7m6W/r54ONuFy5UV2zIx1Kmz142k6Q1E2pHm6Crfl6GRg867iexzZeON5Sy8emxUJe5yeP9q8CuWzhytvFW7V7s+CSXRaz5stS0vsAAAATjOde+tFYcu49HvjI47nic2+p9fCO9SmB1PPm2z3jKXjLNaHGvH0PJNdeKbxjuhnR50XAAAAaplkO2CPD4OuAAAAoEt8Mc99piUZAADABvxcZ28cDQAAYAeb7EDmIKSuGwAAwAqCzGpXeWUDAABAZyxmYpP2E5/OqOkGAACwh7UvZl7EZhlumB0MAADAJuKx0J63RtAAAAAAAAAAAAAAAAAAAAAAAAAAAADQGxaexPSYHVN5x0Jpx1reMWq6I7OEpdd0R/OIm7oiR0UcAACGx1RIeMfs8OQdU6Udvrxj1HSHL+8QTXc0j7ipK3JUxAEAYED83De++a2In5el8AvfOlC54xfkHT+vtOMX5R3farrjF+UdoumO5hE3dUVqIv7Nb/xc1+kEAABOymL07W/80pdbHstSOPvyQOWOM3nHY6UdT+QdXzbd8UTeIZruaB5xU1ekPuK/9I1vd51eAADgVCz82Xd++UvoDd/9zmjCCl4AAENgHmYLgWA//+AfhvOu0w0AABhnktSiPu3aOtCEuAYcSQMAuE4QlaLFs+ddSwea8PSr6KaFC/W7DwAANrOKcvsXL7uWDjTj5SuRG1EGAADOEdd0P6Oiu3e8fEZtNwCA4yQ13a+7Fg405zm13QAAjrPKDx6GvkBtNwCA2wRxTTeN0b0kqe0Ouk5BAABgigk13f3ldXTzJl2nIAAAMEW8ksObrl0D7Xga3bxN1ykIAACM8Y++ftW1aqAtXwmx7DoBAQCAMb7TtWegPWc/+se0RwMAuMs3u/YMqPDNrtMPAACYA0f3GhwNAOAwOLrX4GgAAIfB0b0GRwMAOAyO7jU4GgDAYXB0r8HRAAAOg6N7DY4GAHAYHN1rcDQAgMPg6F6DowEAHAZH9xocDQDgLAvve2dPu/YMtAdHAwA4y1QI8bhrz0Bbnp59z1t0nYYAAMAMOLrXPI5u37TrNAQAAGbA0b0GRwMAOAyOPhGPz5Qp6TdwjKMXnjZUXwem3QcBAKBH4OgTcSaUKblPxzh6qn7mFE8xtXndBwEAoEfg6BOBo0c4GgCgGTj6RODoEY4GAGgGjj4RsaPftudczdHnCqdO0eRohaCc42gAGBY4+kTg6BGOBgBoBo4+ETh6hKMBAJqBo08Ejh7haACAZuDoE4GjRzgaAKAprHt1EnD0CEcDADQFR58EM45++fizafDADcbRAAC9BUefBDOOPmZtShwNANBbcPRJwNEjHG0Z4bzBlzezroMLMExw9EnA0SMcbRmNLqYnJl2HF2CQ4OiTgKNHONoyGl3Mhdh0HV6AQYKjTwKOHuFoy2h2MX3xUO9EADAAjj4JOHqEoy2j2cVciybN1wCgCRy959mbyl1fC8Vj4+gRjraMhhczpNcYQAfg6BQhKiX9dWQHtYPj6BGOtoyGF3Mjxl2HGGCA4OgdL0SlpGNFixdKR7fS0RfnBy6jz5e5zzjaaRpezDEXH6ADcPSOl5WS3ir6pdLRyx19Iaq4OIWj30knvIo+X0uf35/M0Y0uAprQR9OLOQu7DjHA4Bj7nz9509Q3jlIlaR2KrnB0JMWb6/dJufVD7MXkr/fvit81Vtd9cSPE7Ufp86fo63eXJd805uhGFwFH66PpxZwzRBrg1LDulUS5pLUousLRN4fi6r0Qnw4y+lSip5L79PTse97iiFtcU8F8K8S7bJDEh9IvGnN0o4uAo/XR9GIGYtV1kAGGBo6WKZO0HkWXO/pKqlGO9l/vP3y6P87R6uteXUV7pWL028uyam6jjm52EXC0PhpfzJV46IUQAPSCozMUJa1J0eWOvr7P+Oegr/vrEj0ZcfT7aK9cs/1x1zR9Okc3uwg4Wh/5izmebjtuV4p4whBp9wjms+i5Wm7otG8pfXT007OvYm++VhdnkbykdSm63NE3hxLsdWb//d2pHP1BZKuUo3Dcln/TlKObXQQcrY/MxQy85dKbzcajwK+e9HO57DrMoJnpMu2h6TGPnJX00NFnaZp69rWBo2clrU3RpY6+upGEJIRUtXtzXqInI46+lWuXIz5VNUebcnTDi4Cj9SFfzPEyKSOvZ8FKrCt/4TFE2jHW0jCKGZK2kf45+kdSonpt4PiypPUputTR15IdMy2xb8VliZ5MOPr45mhTjm54EXC0PqSLOQ13Zt7MRE2jMwtrOMY4M9aRm2sjvXP0WSZRPTdwhoOkNSq61NE3Fxn9HOx1VahuNuXo45ujTTm64UXA0fo4XMxxmP4dpZa6+uxZSFnLJfzshAQP5SXQAX1z9NNsmvrKxDlSSetUdKmjJV1lW2LfXpXpyYSjj2+ONuXohhcBR+tjfzGDpUjduziUpsZzb5I38rqmIhx6R7YYTUHaSvrm6LNcojJRkN5J+kynoh+aCzTbElvElKOPb442Nz660UXA0frYX8zovqQdttdiZ+HpcunNvXCTtXQQ+hUH84zyfbOHt+KMCf/kpGf7QS47DU9y1tNe2t7fyPgm/fmZAn+h8uPm/M9covpLLUf9X/kN++Pnd/zvtqf4P/WOFjlXlump5D79ebT5B0fc4ioxNmiOjoP4K4qp7VfqHX3MRVANQiknfYzNnazp4OXU0VHZed8Gvdn9OdmWqRbLXEeiTVVrtTDKI7OHt+KMHfCrnZz1tJd2EDfSZn5s0VEepN4+5w/pSYGqY8fN0R+lhTTizxXN0W81XYTqaJq+CNWc9DE2d7KmrYmpo6Ni9H7ZyeW2OToId63S01z9Z+UQ6b5eNHvO2AHdRBJHDwpHHH0tHlgVy5CjPxS/WtUc/VbTRai2sOmLUM3AHb08NCGkzdHefkuYLTh7VWfp60Wz54wd8E87OSuOHhSOOPqhllhTjm7QHP1W00WodrTpi1DNsB0dSD9Nm6OX+75hfrYLQOUsJlOj/JrZw1txxoRfP+nZ/lkuBS1PctbTXloHbuRnj5X4K7WfN+X/5hLVX2g56l/nPh/GYL/O7flJ21PELcfV9hEPtMQmevpp8ag/+ek//+FDieGHolKMTZqj4zD+QDGt1TWNH3kRVINQykkfY3MnazosamffuFNh+tNdc/TiYO2VkHuJMRuoUyxy2Sk9Mq2kX+tHv84lKiPran59OP4zXSeo7df9YEusobUpG4yONt+v+7iLQC6ij4Oj883R04Ojo3sm/WTDqhpOsclmp9xcK+mXo18+y6SpJybOkSj6b3b/dEm61tEPtsQacnSD0dHmHX3cRcDR+jg4Oi0qp83R8wpHszqlYwRLOTtl7Lud9MvRchlXYym3cIYXP4n++8kLfeeodfSDLbGGHN2kOdq4o4+7CDhaH7uLOT5c1fkun/YqHD0nG3eMcUhNt/X0zNFGKqILx3/xMp4d5PFLfZKudfSDLbFmHN2oOdq4o4+7COQj+kgvZpiWjoNwV91Z5ehZ2HWYQTNBWt29nHQdFKigb47+8vlXaUW3QUUnM3g9/lKfpOsc/XBLrBlHN2qONu3oIy8CjtbHYXz0trN2MEsn665w9JjL7yDj+aNHj34DQ9tL7xwdWfovf/zjH/+Fue5i8QSgW0frk3Sdox9uiTXj6EbN0aYdfeRFQBL6SC9m5OY4hx7PvHTG5gpHszSlm/Bc2U0PHZ0Iz8gs44dlNHaO1ibpOkc/3BJrxtGNmqNNO/rIi0Beoo/Dmhq+8LzVcnqYrLvc0eGs2QmgH/Bc2Q2OPiCtdJU6Wpek6xz9cEusEUc3a4427egjLwJ5iT6kizmee9NkJM62oDw+ONo/jI9m0StH4bmyGxy9R16Mcu9oTZKucfQRLbFGHN2sOdqwo4+9COQl+ihczKVI+4SF+7lKpHnGVoLFo52E58pucHRKZr3og6P1SLrG0Ue0xBpxdL45+p14aGkug44+9iKQl+gjfzEXYj/8eSPN1z3e72Z5YTfhubKZsf+5ke7RZjHi6IyiZUdrkXSpo6/ipaZiNYrru+jPi5M5+vL8/GNsxdu73Vmjs8efxfvqUJhydLOLQF6ij/zFXB+WkV7sOniPJoeqbk/Q99dNeK5sZmqq95VRzJSjZUVnHL2VtHqQC9K53Q4i+7QbTPa+Xk8lMX7z5HP/oa62ZY6+S853sz/rufS5qtuYKUc3uwjkJfrIX8x9c/Qo9nVSaA5m4X5+yMrlNKDn8FzZDI4+ICs66+hE0upBftueCkfHoXxotaOaecYaYXoOk+MuAnmJPvIX89AcHbEO/cl0vpztrT3l2rsKz5XN4GiZg6Jzjpb3tA8yjsbRNiFfzMV0uhIinEz3Tg4mnudJlTQsp+EsPFc2g6MreKz5FDh6hKMtQ76YfjrBblWFdpBZoxJcgufKZnB0BTgaR7tOo4vJ4Gh34bmyGRxdAY7G0a7T6GL6LKfhLDxXNoOjK8DRONp1xk2mJFkwVbez8FzZDI6uAEfjaIBBwHNlMzi6AhyNowEGAc+VzeDoCnA0jgYYBDxXNoOjK8DROBpgEPBc2QyOrgBH42iAQcBzZTese1UKjsbRAIOA58pucHQp/XC00tqUOBoAcLTt4OhScDSOBhgEPFd2g6NLMeHo8/a8V3P0e4VTp2hytEJQ3pOXAOiH58pucHQpJhytiIKjNaHD0R0HAQBy8FzZDY4uBUfjaIBBwHNlNzi6FByNowEGAc+V3eDoUnQ7+uljZV6WHfdhRwdTbSwU09qi+yAAQA4cbTc4uhTdjjbFw44GAKgBR9sNji4FRwPAIMDRdoOjS8HRADAIcLTd4OhScDQADAIcbTOsqVEBjgaAQYCjbQZHV9APR7958rk/7joNAUCfwdE2g6Mr6Iejj1n3CgCgBhxtMzi6AhwNAIMAR9sMjq4ARwPAIMDRNoOjK8DRADAIcLTN4OgKcDQADAIcbTM4ugIcDQCDAEfbDI6uAEcDwCDA0TaDoyvA0QAwCHC0zeDoCnA0AAwCHG0zOLoCHA0AgwBH28zY//zJm65N0xgcLYUSRwOAAjjablj3qhQcDQCDAEfbDY4upR+OZt0rAFAER9sNji4FRwPAIMDRdoOjS8HRADAIcLTd4OhScDQADAIcbTc4uhQcDQCDAEfbDY4uBUcDwCDA0XaDo0vB0QAwCHC03eDoUnA0AAwCHG03OLoUHA0AgwBH2w2OLgVHA8AgwNF2g6NLwdEAMAhwtM2w7lUFOBoABgGOthkcXUE/HP3myef+uOs0BAB9BkfbDI6uoB+OZt0rAFAER9sMjq4ARwPAIMDRNoOjK8DRADAIcLTN4OgKcDQADAIcbTM4ugIcDQCDAEfbDI6uAEcDwCDA0TaDoyvA0QAwCHC0zeDoCnA0AAwCHG0zOLoCHA0AgwBH2wyOrgBHA8AgwNE2M/Y/f/Kma9M0BkdLocTRAKAAjrYb1r0qpR+OZr5uAFAER9sNji6lH45m3SsAUARH2w2OLgVHA8AgwNF2g6NLwdEAMAhwtN3g6FJwNAAMAhxtNzi6FBwNAIMAR9sNji4FRwPAIMDRdoOjS8HRADAIcLTd4OhScDQADAIcbTc4uhQcDQCDAEfbDY4uBUcDwCDA0XaDo0vB0QCgB88AC33Bw9E2U7Hu1dMz/XytT0w4eg+OBrAdYQCNa+ngaJupcPRjA2nqiT4x4WgplKx7BWA3OBpag6Nr7IejAUyz1lf923VUKhmUozXc0NPfIYvB0TX2w9EApvH1ZTFdR6WSKGz3bzVybbOjNdzQ098hi6lx9LnORHWPo02FEkdDn8HROLo3N7ILcHSN/XA0gGlwNI7uzY3sAhxdYz8cDWCaOEvXpK2uo1LJ0BytElmrb2QX4Oga++FoANPg6HaRxdEDAUfX2A9HA5gGR7eLLI4eCDi6xn44GsA0OLpdZHH0QMDRNfbD0QCmwdHtIoujBwKOrrEfjgYwDY5uF1kcPRAW3vfOnpbn/TgaRwOYBke3iyyOHgzfrMr7cbT9jn7z5HN/3HUKAlAAR7eLLI4eDDi6lH44mnWvoO/g6HaRxdGDAUeXgqPBdcJ5gy9vZoZCgaPbRRZHDwYcXQqOBtdplDF7YmImFPY5ejxfhfGMlKu5rnYkix29WG+SyPqeLunb4+jF7kb62m5kN/TO0W9eP4mv+89evX6qfrBKcDS4TiNHL8TGTCgsc/R4s5Qmjg43WszV0tGX1xWZsC5HL7xMZFdrHZG1xNG5G7ky9Ip5CnQ6ujJNaXP081fPpAv/1Y/emHIfjgbXaVbB6YvASCjscrRXWN/B0xDtlo6+rvqVJkfPw3xkfQ2RtcPRxRu5MpN+T4BOR1emKU2OfvmqcOHPDLkPR4PrNHP0WjRpvj4emxw9nu2yld+M/n2x+3upbkMrHb1IF6iKI/2raXlTvbhpg6MzN/JRGre+DlPtkaOfp2XoH0f//mb39wt9Reln0qFyjn7zzJxmlcDR0JaGHYVCM73GLHL0tuy13EyCeG6naTDZVQUrF6VbOvpcfKiOrKpwtoXocLNebPuMTb2ZnuKmBY6e727kOrmR3miyi5uOOpEO0OnoyjSlw9Evz7ZOPnu+7TP28usffZVsea1Jd0JIks46+k30dmDatu3A0dCWho7eCCM9b2ocfXF+4DL6fJn7rDdr35W9kosyTSW407ZizFs6+kpcm3J04EtCTmM9CXUUpTt39C5uiZCnady2rySqN7IbdDq6Mk1pcPSbRMjPEiGn/bp32n7yUoft4kL6QdIZR8eKxtHgGA0dPdY5QOdAjaPfSY1aV7vsO+W99qx9JlVs7x29M/dSrQDW0tFvxUdTjvZkG6ceGwWrZPNC9YaWRPZCVHGh+0b6uRu5jdu2al/xRnaD1n7dVWlK3dEvE0U/2XblPoy9erzdrMN2bzKSlh2d7Hmh5UVAOzga2tLUubPQRCjq67ovboS4lXKVi0/R1+8ui19Uzto9uTJ0KknQ25eu21/plo7+ZKpf9zRTqy3FLylu+qo39L40yDfX75MqkA/xK1by1/t3xZuvfCPn+RvpyTtWSsfugmD62eMS+bR19Cdj/bpfybXa0vjobVFaS3V3RtKSo21WNI6G1jQVz9zIEOkH2qNvhXgnf46cXdqgppq1j+N8ZB8/2dHbXUpKbOHou/t3dxf3lx+v76/LI6sSoCA28VwO3j4pLLK72t3QksjeHGo+Ihl8Sv8+P/yp6UYmEdgPIpMdPRqH8j3uC/rWvapNU8qOfp6piM7MYfJ1vEvLUGlZ0gdHW61oHA2taerowEghpN7RV9FeuXLusqSaW0vWPssUljOOTkrSSpWkpY6ur/2NckxxcxvXGojyyKo4epUtLGeiPlGt7S519JV016ITHBzx6b4kbgpnT9LTIZ1mHJ2UpMO+1XY3cnRtoqpNU6qOfvksU1jOzjP2SldttyzpvaOtVjTrXkF7GlfgroRaS2Up9Y5+H+2Va7Y/7pqmdTs6p+Gso3MCb3Gly7RVX/t7dX138fb+Iir0fCyPrMJzn9dwNnY5gTem1NHXh03nGbkUinSKNzKn4ayjcwLvB40cXZuoatOUqqNzGs46OidwFQ6STh1ttaJxNCiQ1854uu31WiniiYkh0vWO/iCylaFRHnRb+kW1rH2Rq87OOVq1trvU0UfU/prpMxbkq7OzHgsUa7tLHX3zMRN4yQx3em9krjo75+hFD2u7Gzn64URlqM/Y81x1dm6+7vxuBfaS3jnabkVrcnQyMnKpZ9bD3hEkc/r6877VgGkg4+jAWy692Ww8CvzqST+XS/2hqHf0rciOFflU0RytmLV7uYJyztHJfoW5UMscfUTtr6GxV+t8QTkX+biYrTAWvszRVzcZF0j7b85L4tb+5PNcQTnn6ML+HtDE0Q8nKlNjr17lCsr5NTVeaStI7yW9dbTlitbi6GCTtlj4BmoybWeSTofYaBEoN5Azr/EyKTqtZ8FKVM/a7BkYIl3r6KOboxWz9lmunTLv6NEyeotVuNIl2jqi9vfOzDxj8QOfedTzNfnxLWn/zlrm6GtJDBl3vBV6B7rng553dHKn2x++C5o4+uFEdWdonrHIlC/kz3lHv9TWIr2XdOJo2xWtw9FBOmte7KlejvBXYS11qjC0ZoS9yH2kwp2ZNzNR0+hsYmGNWkcf3RytlrUH+dJVwdFxQbr901Hm6CNqfw3NBVp438h7bC33jG5MmaNvDoOgs+64ui2LW+tzj/JVBAVHe71rHmzi6IcTlaG5QOPQZOblLqxNGa+Epct7W0n/bfTf39quaB2O9iVL9a/PoyKTTM/HoZWkM4NSdn9P68uLM/0ppNbRRzdHq2XtBSkVHD1RSh8ljj6m9teMo8eFDnD5DQulN9YyR59nwy5fB603cpKPyvTBDdbTwNFHJCpDji4ouXTDc13iSyT9s90/qxWtwdHrjKV6lnqVWYohv6Hs73aw3Md9IefO40LvmrVC+aqCWkcf3RytlrUXan8Lji6UtJtd6aK2jqn9NePoeaHbVOHBV6rZf2Au0PsHxoor3chCdUdRyaFSY3sHNHD0EYnKkKNfROXazIaCo98InStgvTmsf2m3ojU4epZ1tKH1By0l94IytIL0PvPyDlFfHwqUwTwsDMEJwqpROdO2fFHj6OObo7faUgjDb2U2xB6bZ7b8phC/3fr4JY4+pva31tE/bBuY34l+/Ov54G0yG35D8WLWSViIyl5LWm5k9i7NC3H7HZXjH8+vqx9ixw+jAP/0cYGfljj6iERV6+i/e9yW6Gx/n9nwo7iPWGbLz1SO//ivc59fp5n2s+e5PT9pf5IH+Ks2P/qpyrMa8y9EXlMnSL6nSNhH8bu5yP/eKU76a8aO3PT9KnX0QipFbnZ/rje+WJYMk91UtVYLFary67g5+qO0kEb8ubw5OjOXt43kc8Zjan9rHW0zNY7OuqOHcbOJ/IU8IlHVOtpiftx1AOzhkfoh+kMnkTV30qY1KqmjPan2b7mr5Fx708ArcXTlEGmlkFfl1x+KX61ojrY+a6/RVmXtr4uOzrmjf3GziZqXnapEhaN7D47u70nbOnp5aLLLNEeXOdqrOotSyKsymuObo63P2mu0Japqf88ddPRDzdHWx80mahwtKhLVOY7uO4N29G93cVJ9tHR0IP10LfdvLnN05SwmrWvoa9qjGzRH9649Ws41qzLb87oOcj1tjxYPNEcbb4/+QuX4x6Oz2e6zqnbOakdXJqrKNKXcHp398cnao3Nnsa49+m//7l9+8ftKKSmfz9MebRrr2qPjLDr96Ubu31ziaAOzgdb06z5+dLSJ7sBm+3VnQ16V0ZqYZ6w4+lmcrl/3g83R6jcyc2GK/bqF6tqbp6fF+tGVierczDxjhdHPhX7dhRHUSmynLnmcWU/aVlTXvVplLdWzKXgUmeRfULoO0Gk5OLrQHJ1Q4uiN/lU1ahx9/OhoDcNqMze/4Gi1aT1qHV1d+2vG0cXRz3mPFUdQN8Fv90Ki5UY+PBxabaB7N7RwdGWiMuTouFibGf388IBpFdLZxd70QdKqjp5mLTWw8dHZkWcDHR89PRQsMs3RJY42sTpljaMbNEebnmesMIK62ZWu01Z17e+Fmfm6H5xnrDiCugl+uxcSLTeyMPq5dJ6xvk2n2MLRlYnqwoyjC6OfC0oujKBW4DABaB8krbx+9Ea21GxglhpnHN2z9XCU2WVe40MuNs8UFouOnuufwqTG0U2ao9Xn6xZ183UH+ufrTqmr/a0dDN46NJv8r4Xx+bofdoemG7nKvUsVHL3sYWVhc0fXJKrKR0h5vu6v5M95Rz+NPr/SJD15ju4eSFrZ0YE0GehscItqyLOY6NeP5aSZV5iWIeNVCaUkUHT0zED2Vu3oJs3RGta9yi+XZHjdKznglUY7r/5Ne0cX1rUSxbWhNK97dYQ79NzIea65Oe/o/I3uBc0dXZOoKn+kvu6VXJDOOzpusNa57tV+djH7Ja3s6CjZpks/bQZWio4Zp9Xdy6GVouXx0dsiYry8ilxYLDh6bKItpNrRTZqjDSw7nFtOWqWGtM7RdbW/N0YcHVcKZO6k0LrGst/yhUTLjcwvfp1ztOpC4N3Q3NE1ierGjKPj4AjJlDlHx+3Vz/RM2plf6cp6SWtw9Ggx/4NHjx55gytEb5n8bhT53x1cIXp0cHTk5jhLHs+8bGGx4GgTS1PWOLpJc7Ri1p6Uv6T+CFlHF6TW+ErXaKuu9reuE7uCafKvHNnY+YpFTb/lC4meGxlXEoSHrCzn6Fkv+9w0d3RNoqqsiVJzdCLlF9mPB0c/fSZ0rahRXIzSdknrcPT2sew6IXbGtI+v1jo4rKnhC89bLafrbIV/wdGhicUIKh3dqDlaNWvPmSmbJjy1yt9aRx9R+6vd0fkIZcSVe1tpdSVbvZBoupGrTG131tFxvJf9qy1s7OhWiUrR0S+/ytR2Zx39RFtrdNl60ZZLGkcrg6OjMvTcmyadieSCct7RBha9GtU4ulFztHLWntTw7uOXSRNrxZruWkcfUfur39HJovEbOXjyMqWKvSd9tRcS1RuZ1HbvozPNf+jjo97Y0a0SlaKjt7Xdey2f5T/oqekuU7TtksbRyuDolGW2y2ve0Ssjq6JVOjrfHP2uNuNRzdqT8qNY7WIopYlgpT4oscbRR9T+6nf0tl12Nj4ET1oCTbVTla/2QqJ8I5NZD/zF4UamTTqe+o3shsaObpWoVB2dmFicvTx82Dn6aVyK1lPTXa5oyyWNo5XB0TsWudw55+iFSs/masocfXl+/jHOq2/vzs+T5fbOz8+TeZzf7z4byNqTgIhwW4Q8pIlp0qNSsZK/xtFH1P4acPTWxWkC2P+17UGpOE9AqaOv4lXL4rcscR3d06qbqOdGJi9V4Xx/I3fTACw13MguCKafPS4pg9Y5ulWiUnZ0PARaiK+2Zj44+nWy1LOWmu4qRdstaRytDI7esc7NwJRztGdmAHmZo+8Sg9wk/8dN0OfS55oprNUCsi0wb4vSaZrYlr2Er1iBIGqmEmvRcqjB0TtJb4vSqce225aKHQNLHX27HT3xaTeK4n193LTcyKQonTo6kOPbL6aidIKuGke3S1Tqjn6TSHpblE4dvS1Ei1d6+nRXKXonabOubQuOVgZH78g1R0eFqlC28lJhEo8aauYZa6ot1aCst6MQV/NxkibG81UoFclUrrSoW8GqXWRVk+y2XClm3jRx9GK92cbeU23Q8NtUtOq9kZNtVHwvuZHeYncje1nR3cLR7RKVuqN31d3i2avXTxNHvznbGvqZni7dsaNfVMk+lrQ5z7bnsSa94OiuA9EF+SxLbo72REpalp4ayuEscvRokU7oE6+A9lvpBVAflFjm6ONrf804Oi1aRu8g0b9/tft7qf4kWODotCi9vZFp3PpYiB41c7RKotLh6LQoLcT/i/79bPe3pkJ0QvWh7KzoxtE6wNERi+l0FbfGTivzMQPLaSTY5OjRaJ5O6LNHxwIMZY4+vvbXkKP3RWkJ5UL0yA5H74vSctw0HLULmjhaJVFpcXRalJbQVojuJzhaAzh6tOswlRSkKr4cmFrRzy5HjxaeNDmumOmZ2UeoacuUo0fBfJWJrJbHwA5HR3EzcCO7oHlddzs0OfrLp2cvpAv/5LXGQnQfwdEawNHHYGZw9Mg6R0cEE++L6GhfeBNdY81sdXTM1PNjNmtdErPE0THbG/loo+1GdkHfHB3x8vmPnsScDbsInYCjNYCjj8E3tVqQfY4eaU8TNjtaOxY5umTdq/7RQ0fDARytgcE6etykdLEw1eEGR7eLrLVJFkfrBUf3GhytgcE62g5wdLvIWptkcbRecHSvwdEawNGdgqPbRdbaJIuj9YKjew2O1gCO7hQc3S6y1iZZHK0XHN1rcLQGcHSn4Oh2kbU2yeJoveDoXoOjNYCjOwVHt4ustUkWR+tl4X3v7Gl53o+j7QdHawBHdwqObhdZa5MsjtZN47UpW4GjjfD07Hta5s/B0V0HYrjg6HaRtTbJ4mjd4Ohew7pXyuDoTonT3rk673C0JUQ39JNVNxJH4+guwdHK4OhOkWdVVkRfoHB0ezTcUH2BwdE4umtwtDI4ulNwNI7G0bXg6F6Do5XB0Z2Co3E0jq4FR/caHK0Mju6U8VQb+gKl39HasTbJarih+gLjtqN1g6NNgKOVwdGQB0c7Ao7G0V2Do5XB0ZAHRzsCjsbRXYOjlcHRkEdzmvAMoGNeBPdx19FPz/Tzddc6cxIcrQyOhjykCUdw19HQF3C0MuTHkIc04QgOODqYfvb4ZdeegfbgaGXIjyEPacIRHHB0xbpX0A9ePv5sGmhIBji660CAVZAmHAFHQ7ew7pUGyI8hD2nCEXA0dAuO1gD5MeQhTTgCjoZuwdEaID+GPKQJR8DR0C04WgPkx5CHNOEIOBq6BUdrgPwY8pAmHAFHQ7fgaA2QH0Me0oQj4GjoFhytAfJjyEOacAQcDd2CozVAfgx5SBOOgKOhW3C0BsiPIQ9pwhFwNHQLjtYA+THkIU04Ao6GbnmOo9UhP4Y8pAlHcMDR49W/ftq1aKA1Z1EKHGtIBji660CAVZAmHMEBR49G/6Zrz0B7Xj7/tzMdiQBHdx0IsArShCM44ehvd+0ZUOHbWhIBju46EGAVpAlHcMLRo3/XtWagPd/SkwZwdNeBAKsgTTiCG47+TteegfZ8Q08awNFdBwKsgjThCG44+tu/3LVooC3f1VPVjaPJj0GGNOEIbjiagnR/+YamJICjuw4EWAVpwhEccfTol7pWDbTjl3WlABzddSDAKkgTjuCKo//wu13LBtrw3T/UlQJwdNeBAKsgTTiCK44e/dGXX54xlUnv+CNtCQBHdx0IsArShCM44+jRd/69ePa6a+XA8Tz/6umX39F3/3F014EAqyBNOII7jh7/hygqTyhK94SXr4T4j9oqukc4mvwYMpAmHMEdR09DEfPkjPU1rOfN2ZPkZq013n8c3XUgwCpIE47gjqNHwUpsefbkiSyEsycSR+2Qt5813vG1LCO1HW+kHV833tE84vKO5hE/+oo8292oVaDx9uPorgMBVkGacASHHD0aTcJd5i8ythASR+2Qtz9pvENW1WO1HXKVwFnjHc0jLu9oHvGGVySca735OLrrQIBVkCYcwSlHj4L5riwtb/RlXRy1Q97uN94hX86p2g75EfMa72gecXlH84g3uiL+fKH33uPorgMBVkGacAS3HJ3EyPP9jC3iz3uO2iFv9xrvkBtZx2o75HWV1413NI+4vKN5xI+/Ip6BvANHdx0IsArShCO452gYJji660CAVZAmHAFHgxvg6K4DAVZBmnAEHA1ugKO7DgRYBWnCEXA0uAGO7joQYBWkCUfA0eAGOLrrQIBVkCYcAUeDG+DorgMBVkGacAQcDW6Ao7sOBFgFacIRcDS4AY7uOhBgFaQJR8DR4AY4uutAgFWQJhwBR4Mb4OiuAwFWQZpwBBwNboCjuw4EWAVpwhFwNLgBju46EGAVpAlHwNHgBji660CAVZAmHAFHgxvg6K4DAVZBmnAEHA1ugKO7DgRYBWnCEXA0uAGO7joQYBWkCUfA0eAGOLrrQIBVkCYcAUeDG+DorgMBVkGacAQcDW6Ao7sOBFgFacIRcDS4AY7uOhBgFaQJR8DR4AY4uutAgFWQJhwBR4Mb4OiuAwFWQZpwBBwNboCjuw4EWAVpwhFwNLgBju46EGAVpAlH0OzoOKPUDekMjsCwow0kbI3BJT+GPKQJR8DR4AY42vglhj5BmnAEHA1ugKONX2LoE6QJR9Dv6JtrjbwjncFxmHf0vc6UfW+xoz3eqx0ARzuCfkffv9XIOekMjsO8o691puxrHA1GwdGOgKPBDXC0tqPhaBfA0Y6Ao8ENcLS2o8WOpn2q7+BoR8DR4AY4WtvRYkfzzPYdHO0IOBrcAEdrOxqOdgEc7Qg4GtwAR2s7Go52ARztCDga3ABHazsajnYBHO0IOBrcAEdrOxqOdgEc7Qg4GtwAR2s7Go52ARztCDga3ABHazsajnYBHO0IOBrcAEdrO1qPHB3OG3x5MztVsGwARzsCjgY3wNHajtYjRzfKvDwxOVW4LABHOwKOBhcIJo+ipLJeGDuB1Y4e/3F0tB+MdR3OVUcvxOZU4bIAHO0Idjj68vrcgucdesrU26+JOvMmgZFztHN0ZcLW5+jFehPuIh+u5lpeUlx1dJQ9mUkcVoKjHcEOR19X/QpHw0NMUkWlaEzPB9o5ujJh63J0sMpF3tdgaWcdvRZNmq97Do52BBwNvaYgqbgwbaDK205HF95PosK0uoacdfQoHFCvMRztCHY4+lx8sOB5h/6RSmo1/5O4PXpX7avBU3naOboyYWtxdPp+MvP+U/T/D72ZpqL0EY6+OL9K/+qTozdCW6O99eBoR7DD0VdV+R+OhhqCzVZKcRLZ9esee9qqfDO0c3Rlwtbh6O37SRi3Qe/y42Ad6nhFecjR5+9u49N8iNvar9/1ydFjMw0hVoKjHcEOR78VH3E0NCWYSUbaj72aLpOtmiXdsl93VcLW4Oi59DKyz493RWu1R7re0ZcfxP3Hy+jZvBZ3b++ifz1y9GgWnipknYOjHcESR3+iXzc0xpNLzIfx0VtP+XrP1dLRn4z1616EUolZyo+3pWulh6bW0Ve3tx/3f0ax6FVdd/RiM5gh0jjaEbp39N39u7uL+8uP1/cleSCOhkritHvoqCvPYZJ4Sm+bdHNH1yZsdUf7cuc4OT9OXlGWKoOM6hwdKfrqEEUhbrp9ZptmXoFYnSpoXYOjHaF7R99HIbi5/SRK8wUcDVUEy0zazcwzluhba/eg5o6uTdjKjo5rusO9iLP58Uzxoa5x9OWNeC99vBWF5mi7HT1aCXPz3NgFjnaEkzj6QlRxEb2YX99dvL2/iMobJU13OBqqiE0iDaXJzgWa26lOqaPbJ2xVR4+zFdrZ/Di3s9WVrXD0dbbg/KHYHN2to8fT7ZtZpYgngxki/fv/+dGj3+86EKDOf4lu5Pf1Ha7c0VF+dHP9/jzmQ/QAb/96/07KCegzBg3JF5Wzjs4VstUpdXT7hK3q6FxROVdm8tRqu6sdfXmbvQrX4qrwne4cHXjLpTebjUeBXz3p53J5qrB1SeDtRiF6A5pZzUnmS803stzRUv3YvRCfDg9z+idjr6Ap+Qrd3JoaicI15k+ljm6fsBUdvc5JOF+vOVNqj6929EchMp3grm87fmblJDBeJnFez4KVWNdEbgBDpIPZYUKfAUTXXaQbudR0I0sdfSU1YWWyuk/pd++YZwyaschXZufXvYpFo7EPb5mjFRK2oqM3ueci7+ixUlV/taOjUGcqt69LpmjpytHTcGfmTZSvVTc6D2FhDSlnl3stQN/I3kg9ki519PV95vk9vIjvO7wyFyg0JC5JZgpLeUfHEteYG5c5WiFhKzo6zCm40D9opVKLUOvoTCex6/fF73Tk6HGY/h1djLr67Jn70tpk+kZoHoUIp8MzcCNLHX3zUX7Gpaf//m6/GUdDI+JsKFNYKqwfvazPqhtS5miFhK3m6HG+sb3g6LlKLUKto0taoG1wdLDcFxgX9S9n65qKcDdY5DowkoP2lPyN1JJwyxx9JfUEvc/svznfP/o4GhqRL0kWHV2wuBIljlZJ2GqOLhi44OixSi1CbXt0dB3qLd2No71DA/x6n5kFU8+b5kvNQeh6wdLLZe3uV+47yjx3I7WM7S9z9LWUt2VzOnGJo6EVhZJk0dFrXS+eCSWOVknYao728zXZxbGwKrUINWOvkom6xe2H9xdvq+jE0QvphWyz+zPwQj9eWXyVe1PbVL26+Ub5r2YPL/Enuaz9D0525u3pT3u6Hae7vKc72x/kbuR/03HQPy1x9M1F5vE9tNpd7TuF1jr6C9NXops0dYrbfNp0e8oL+UWUMP4ssyUea5LZ8HvRhkfaTljiaJWEnTi6dWCix+xPMxviriWzzJb/rnD8R9WO/rjPL26uL8u/ovTMNu0Wkzrak6pVltu3k2C2it9jAj/f2aZyiLQwyiOzh5f47ZOdySJOd3lPdzZTZylkSufZjEnac3XYXuNoVznBbT5tunWda40JO/mFzVQE++3H2/1XPpVLWumZbVoATx29PFSrpM3RXlozuMx1bfaqzmL2ip7uYfytk53JInD08dTNBXpfsfscR/f1FAPiWmPC7q2j317efUg1/elteZwVaOnoQPpp2hwd+tP9hkzBuXIWE22VLqVQ120UF+u6Z7kbaayuW6IqozsXH95WPu/Uddt8Chm76rr/hzBc162SsJXrurOP68nqurdcvb9P8oy7sp1d1HXH7fFpWXnXHD0WYrcOZZAdteL+bKD5rkbDWTPbMda5G6ml81/9mhrZVrvMDuYZgyYURz+fvs+YSsJW6zNWGP1c7DMWKkxi4j3k6IjLeMbT0heQLvqMTUuao8O9mbOO3ji/qkZ+yA4zjfWUIFSrZSql3tHXVc8+joaGFPotn37slUrCPsXYq9bFp2McnZ391AJHpxrej45ezIP9tZBe54awOqWnv/QFXXCyOUzkp7p87wWOhmY8PIeJSkmySK2jmydsNUcXahFOMofJRXZc9Echbsti1oWjx4c3knmh9sTLhGfu/BQmo+187Skz56dVcxhfupFKa8JnDlnj6Op8Trwv346joZwH5wJVKkkWqXV084StOBdovhah4Ghf5fAVjn6XjctlZT+5DsZHh2npOK4ezNaeSJXeMbPwVGHrkGCFop0gOEzrOtNUKVjr6MpWuygrO6/+CY6GIkH+xTJvpZVKSbJInaNbJGwNa2rIkcs7eqpUM1bh6JtsXC4q+8l14Ghv984SL0KQ67a9ymhqPJAeVOttUXo2gEoDt5lub+RSW0fHWkdXttoVHn8cDQ/hi9q1KSdC74o/dY5ukbA1rE0ZVq9NmayerXttyovc+8Z5ZT+5DhwduTl+ZxnPvHz76zxbkhzE0pQJi+l06nrvuEEQ30iNibbW0ffVO6tmAMbRUME419Ex6+ikR6TOMTZ1jm6RsBUdncRW6vuUc3QsWYW2+HJH3+WU/E7clMasozU1fOF5q+V0nWsCWYtV5k0t1NhHAaB/1Dq6fohp98879AovW9uddfRKWzfIHXWJt0XCVnX0Isy0x2cdPVUccFPu6HfZSF7eVtTjd7V+9HjuTZNWADnm69yLmvuLXgHUUufomlY7HA3NmWVquzOOTmq6tVb01Xi4TcJWdfS2tnsfw4yjk5pulVbXckffZMvNH6wYi1GI51LIfcLWYdJqH+y1vWq/qjaAC9Q5uqbVDkdDc5Labi/Nc2VHz7OlTB3UOLpNwlZ2dFJTsEzdIzt6MVOr6a5w9EW08d3h47vKGdQ6dfQi0wSw3l2gyWq/m8HCMGzqHH1fP09o98879IxkhP9ylz4Ojl4kgwo1z1RR4+g2CVvd0ds5iHaKkhydvJ+odYwqdfSd+HR++2G31NfFvexrixydmZt7nfYW8w6rTGvs6g/QQ+oc3abVDkdDDdthCdui9N7RW0np7NMdU5N62yRsdUcn9flRgTmx8d7R2/cTxd5ypY5+d3vx9upefLqO+CBuPtrxzOYdLTdHr4W3I0zNvGy9pjaAG9Q4ulWrHY6GOrZz5S3Xi9TRwWQrqZXuZsdqEbdK2BocPRrvXlGme0ePvVCuWlC5qkVHJ13Uz6/vb8T9u7uamHXqaKk5Wl5ZYuft6UAGRwNUUuPoVq12OBpq2XlKzLw/i3W1+xTqr9GsdnSrhK3D0fvpfMPVH0f/f3+zm4F/o/p+ctx83VY8s7J0F9PpKr7328GkY3mm49033F9OA+ABSh19dX5+/j5eJkdc30V/Xtj6vEMfyU47b6YQPSp3tELC1uPo0XRZiLyG95OeOno/t3FVhXagdzgeQA8pdfRuSfhPuyfova3PO/SSsZ+V1NJIt6AyRyskbE2OHgX5VxTlQvSot45+EAZHA/hturja8rxDT1ms02pesZobmuqxVccw846OmKY1/GLm6Xk9cdXR/hCW0wCoBUdDN4ynMeaOb6+jI4Ik8traWnvk6HGTaoPFUKbqBqgER4ObWO1ozfTI0QDQCBwNboKjeWYB+g+OBjfB0TyzAP0HR4Ob4GieWYD+g6PBTXA0zyxA/8HR4CY4mmcWoP/gaHATHM0zC9B/cDS4CY7mmQXoPzga3ARH88wC9B8cDW4yNEfft+YTzyyAteBocJOhOVoNnlkAO8HR4CY4GkcD9J/I0TfXGnnH8w5WEFf/6kzZ9xY7eu2rwuIVAHbiK75/804OdmIgYVvraABwFRwNboKjAaD/4GhwExwNAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJ+X/A2981h+81oHOAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDE5LTExLTAxVDExOjI2OjU1LTA3OjAwjEI8kgAAACV0RVh0ZGF0ZTptb2RpZnkAMjAxOS0xMS0wMVQxMToyNjo1NS0wNzowMP0fhC4AAAAUdEVYdHBkZjpWZXJzaW9uAFBERi0xLjUgBVwLOQAAAABJRU5ErkJggg==\n", "text/plain": [ "" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "cool_p = Program(\"\"\"H 1\n", "CNOT 2 1\n", "DAGGER T 1\n", "CNOT 0 1\n", "T 1\n", "CNOT 2 1\n", "PRAGMA LATEX_GATE_GROUP \"cool gates\"\n", "DAGGER T 1\n", "CNOT 0 1\n", "SWAP 0 1\n", "T 0\n", "PRAGMA END_LATEX_GATE_GROUP\n", "DAGGER T 2\n", "CNOT 1 2\n", "H 0\n", "DAGGER T 2\n", "CNOT 1 2\n", "T 0\n", "S 2\n", "\"\"\")\n", "\n", "display(cool_p)" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.7.3" }, "toc": { "base_numbering": 1, "nav_menu": {}, "number_sections": true, "sideBar": true, "skip_h1_title": false, "title_cell": "Table of Contents", "title_sidebar": "Contents", "toc_cell": false, "toc_position": {}, "toc_section_display": true, "toc_window_display": false } }, "nbformat": 4, "nbformat_minor": 2 }