diff --git a/docs/sphinx/applications/python/deutsch_jozsa.ipynb b/docs/sphinx/applications/python/deutsch_jozsa.ipynb new file mode 100644 index 0000000000..4a2b524e5c --- /dev/null +++ b/docs/sphinx/applications/python/deutsch_jozsa.ipynb @@ -0,0 +1,232 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "7aa9cc8f-4e42-401f-a1fd-665e5cda19c7", + "metadata": {}, + "source": [ + "## _*The Deutsch-Jozsa Algorithm*_\n", + "\n", + "Here is the link to the original paper: [Deutsch-Jozsa algorithm](http://rspa.royalsocietypublishing.org/content/439/1907/553). This algorithm is an earlier demonstration of the computational advantage of quantum algorithm over classical one. It addresses the problem of identifying the nature of a hidden Boolean function, which is provided as an oracle. The function is guaranteed to be either:\n", + "\n", + "- **Balanced**, meaning it outputs 0 for exactly half of its possible inputs and 1 for the other half.\n", + "- **Constant**, meaning it outputs the same value (either 0 or 1) for all inputs.\n", + "\n", + "Classically, determining whether the function is balanced or constant requires evaluating the oracle multiple times. In the worst-case scenario, one would need to query at least half of the inputs to distinguish a constant function. However, the Deutsch-Jozsa algorithm demonstrates quantum superiority by solving this problem with a single query to the oracle, regardless of the input size.\n", + "\n", + "This notebook implements the Deutsch-Jozsa algorithm as described in [Cleve et al. 1997](https://arxiv.org/pdf/quant-ph/9708016.pdf). The input for the oracle function $f$ is a $n$-bit string. It means that for $x\\ in \\{0,1\\}^n$, the value of $f(x)$ is either constant, i.e., the same for all $x$, or balanced, i.e., exactly half of the $n$-bit string whose $f(x) = 0$." + ] + }, + { + "cell_type": "markdown", + "id": "6edbe9a5-2a81-42e4-ac0c-50a0ef4a0dda", + "metadata": {}, + "source": [ + "## The Theory\n", + "\n", + "Here are the steps to implement the algorithm:\n", + "1. Start with initializing all input qubits and single auxiliary qubits to zero. The first $n-1$ input qubits are used for querying the oracle, and the last auxiliary qubit is used for storing the answer of the oracle\n", + "$$\n", + "|0\\ldots 0\\rangle |0\\rangle\n", + "$$\n", + "2. Create the superposition of all input qubits by applying the Hadamard gate to each qubit.\n", + "$$\n", + "H^{\\otimes^n} |0\\ldots 0\\rangle |0\\rangle = \\frac{1}{\\sqrt{2^n}}\\sum_{i=0}^{2^n-1}|i\\rangle |0\\rangle \n", + "$$\n", + "3. Apply the Pauli-X gate and apply the Hadamard gate to the auxiliary qubit. This is to store the answer of the oracle in the phase.\n", + "$$\n", + "\\frac{1}{\\sqrt{2^n}}\\sum_{i=0}^{2^n-1}|i\\rangle |0\\rangle \\rightarrow \\frac{1}{\\sqrt{2^{n+1}}}\\sum_{i=0}^{2^n-1}|i\\rangle ( |0\\rangle - |1\\rangle )\n", + "$$\n", + "4. Query the oracle.\n", + "$$\n", + "\\frac{1}{\\sqrt{2^{n+1}}}\\sum_{i=0}^{2^n-1}|i\\rangle ( |0\\rangle - |1\\rangle ) \\rightarrow \\frac{1}{\\sqrt{2^{n+1}}}\\sum_{i=0}^{2^n-1}(-1)^{f(i)}|i\\rangle ( |0\\rangle - |1\\rangle ) \n", + "$$\n", + "5. Apply the Hadamard gate to all input gates.\n", + "6. Measure input gates. If measured values are non-zero, then the function is balanced. If not, then it is constant." + ] + }, + { + "cell_type": "markdown", + "id": "5449f9a7-7b1a-4212-8b26-3edaae1fcabd", + "metadata": {}, + "source": [ + "## The Algorithm Implementation\n", + "\n", + "Here is the CUDA-Q code following the steps outlined in the above theory section." + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "id": "08e04d22-535c-4368-a495-dfe7ed5ff567", + "metadata": {}, + "outputs": [], + "source": [ + "# Import the CUDA-Q package and set the target to run on NVIDIA GPUs.\n", + "\n", + "import cudaq\n", + "import random\n", + "from typing import List\n", + "\n", + "cudaq.set_target(\"nvidia\")\n", + "\n", + "# Number of qubits for the Deutsch-Jozsa algorithm, the last qubit is an auxiliary qubit\n", + "qubit_count = 3" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "id": "4d16e25e-d3df-4d07-9e75-a6a046680caa", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generated fx for function type = constant: [1, 1]\n", + "oracleType = 0\n", + "oracleValue = 1\n" + ] + } + ], + "source": [ + "# Set the function to be \"constant\" or \"balanced\"\n", + "function_type = 'constant'\n", + "\n", + "# Initialize fx depending on whether the function is constant or balanced\n", + "if function_type == 'constant':\n", + " # For a constant function, fx is either all 0's or all 1's\n", + " oracleType = 0 # 0 for constant\n", + " fx_value = random.choice([0, 1]) # Randomly pick 0 or 1\n", + " oracleValue = fx_value # In constant case, fx_value is passed, for balanced it's not used\n", + " fx = [fx_value] * (qubit_count - 1)\n", + "else:\n", + " # For a balanced function, half of fx will be 0's and half will be 1's\n", + " oracleType = 1\n", + " fx = [0] * ((qubit_count - 1) // 2) + [1] * ((qubit_count - 1) - (qubit_count - 1) // 2)\n", + " random.shuffle(fx) # Shuffle to randomize the positions of 0's and 1's\n", + "\n", + "# If needed initialize fx, oracleType, and oracleValue manually\n", + "#oracleType = 0\n", + "#oracleValue = 0\n", + "#fx = [0,0]\n", + "\n", + "print(f\"Generated fx for function type = {function_type}: {fx}\")\n", + "print (\"oracleType = \", oracleType)\n", + "print (\"oracleValue = \", oracleValue)" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "id": "caa90b54-16d3-419d-910f-7a36e4e14829", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " ╭───╮╭───╮ \n", + "q0 : ┤ h ├┤ h ├─────\n", + " ├───┤├───┤ \n", + "q1 : ┤ h ├┤ h ├─────\n", + " ├───┤├───┤╭───╮\n", + "q2 : ┤ x ├┤ h ├┤ x ├\n", + " ╰───╯╰───╯╰───╯\n", + "\n", + "Input qubits measurement outcome and frequency = { 00:1 }\n", + "\n", + "The oracle function is constant.\n" + ] + } + ], + "source": [ + "# Define kernel\n", + "@cudaq.kernel\n", + "def kernel(fx: List[int], qubit_count: int, oracleType: int, oracleValue: int):\n", + " # Allocate two input qubits\n", + " input_qubits = cudaq.qvector(qubit_count-1)\n", + " # Allocate an auxiliary qubit (initially |0⟩)\n", + " auxiliary_qubit = cudaq.qubit()\n", + "\n", + " # Prepare the auxiliary qubit\n", + " x(auxiliary_qubit)\n", + " h(auxiliary_qubit)\n", + "\n", + " # Place the rest of the register in a superposition state\n", + " h(input_qubits)\n", + "\n", + " # Logic for oracleType == 0 (constant oracle)\n", + " if oracleType == 0:\n", + " if oracleValue == 1:\n", + " # Apply X gate to the auxiliary qubit\n", + " x(auxiliary_qubit)\n", + " elif oracleValue == 0:\n", + " # Apply identity gate (do nothing)\n", + " pass\n", + "\n", + " # Logic for oracleType == 1 (balanced oracle)\n", + " elif oracleType == 1:\n", + " for i in range(len(fx)):\n", + " if fx[i] == 1:\n", + " x.ctrl(input_qubits[i], auxiliary_qubit)\n", + " \n", + " # Apply Hadamard to the input qubit again after querying the oracle\n", + " h(input_qubits)\n", + "\n", + " # Measure the input qubit to yield if the function is constant or balanced.\n", + " mz(input_qubits)\n", + "\n", + "print(cudaq.draw(kernel, fx, qubit_count, oracleType, oracleValue))\n", + "\n", + "result = cudaq.sample(kernel, fx, qubit_count, oracleType, oracleValue, shots_count=1)\n", + "\n", + "# Debugging: Print the raw result dictionary\n", + "print(f\"Input qubits measurement outcome and frequency = {result}\")\n", + "\n", + "# Define the expected constant results for '00' and '11' for the number of input qubits\n", + "expected_constant_results = ['0' * (qubit_count - 1), '1' * (qubit_count - 1)]\n", + "\n", + "# Check if either '00' or '11' (or their equivalent for more qubits) appears in the result\n", + "is_constant = any(result_key in result for result_key in expected_constant_results)\n", + "\n", + "if is_constant:\n", + " print(\"The oracle function is constant.\")\n", + "else:\n", + " print(\"The oracle function is balanced.\")\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "278c6b13-e3a0-4f61-a25b-eed75494b376", + "metadata": {}, + "outputs": [], + "source": [ + "print(cudaq.__version__)" + ] + } + ], + "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.10.12" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/docs/sphinx/applications/python/hamiltonian_simulation.ipynb b/docs/sphinx/applications/python/hamiltonian_simulation.ipynb new file mode 100644 index 0000000000..36eec94c69 --- /dev/null +++ b/docs/sphinx/applications/python/hamiltonian_simulation.ipynb @@ -0,0 +1,576 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "introduction", + "metadata": {}, + "source": [ + "# Spin-Hamiltonian Simulation Using CUDA-Q\n", + "\n", + "This tutorial demonstrates how to perform one-dimensional spin-Hamiltonian simulations. We will focus on simulating the time evolution of spin chains with the Heisenberg and Transverse Field Ising Model (TFIM) Hamiltonians using Trotter-Suzuki decomposition.\n", + "\n", + "## Introduction\n", + "\n", + "Simulating quantum systems is a key problem to solve in quantum computing. The Heisenberg and TFIM Hamiltonians are models that describe interactions in spin chains, which are essential in understanding, as an example, magnetic properties of materials and quantum phase transitions.\n", + "\n", + "### Heisenberg Hamiltonian\n", + "\n", + "The Heisenberg Hamiltonian for a one-dimensional spin chain with nearest-neighbor interactions is given by:\n", + "\n", + "$$\n", + "H = \\sum_{i} \\left( J_x S_i^x S_{i+1}^x + J_y S_i^y S_{i+1}^y + J_z S_i^z S_{i+1}^z \\right)\n", + "$$\n", + "\n", + "- $S_i^\\alpha$ are the spin operators (Pauli matrices) acting on spin $i$ in the $ \\alpha$-direction ( $\\alpha = x, y, z$).\n", + "- $J_x, J_y, J_z$ are the coupling coefficients between spins.\n", + "\n", + "---\n", + "\n", + "### Transverse Field Ising Model (TFIM)\n", + "\n", + "The TFIM Hamiltonian is a simplified model focusing on the competition between an external transverse magnetic field and nearest-neighbor spin interactions:\n", + "\n", + "$$\n", + "H = -h \\sum_i S_i^x - \\sum_i S_i^z S_{i+1}^z\n", + "$$\n", + "\n", + "- $h$ is the strength of the transverse magnetic field.\n", + "- The first term represents the interaction of spins with the external field in the $x$-direction.\n", + "- The second term represents the interaction between neighboring spins in the $z$-direction.\n", + "\n", + "---\n", + "\n", + "### Time Evolution and Trotter Decomposition\n", + "\n", + "To simulate the time evolution $e^{-iHt}$ of these Hamiltonians, we use the Trotter-Suzuki decomposition, which approximates the exponential of a sum of non-commuting operators by a product of exponentials of individual terms:\n", + "\n", + "$$\n", + "e^{-iHt} \\approx \\left( e^{-iH_1 \\Delta t} e^{-iH_2 \\Delta t} \\cdots e^{-iH_n \\Delta t} \\right)^K\n", + "$$\n", + "\n", + "- $\\Delta t = t / K$ is the time step.\n", + "- $K$ is the number of Trotter steps.\n", + "- $H_i$ are the individual terms in the Hamiltonian.\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "import-libraries", + "metadata": {}, + "outputs": [], + "source": [ + "# Import Required Libraries\n", + "import cudaq\n", + "import numpy as np\n", + "import time\n", + "import sys\n", + "from cudaq import spin\n", + "import matplotlib.pyplot as plt\n", + "from typing import List" + ] + }, + { + "cell_type": "markdown", + "id": "function-definitions", + "metadata": {}, + "source": [ + "## Key steps\n", + "\n", + "### 1. Prepare initial state\n", + "\n", + "Prepare the initial quantum state of the system. For this simulation, we create the state $|0101\\ldots\\rangle$, where every odd qubit is in the $|1\\rangle$ state, and every even qubit is in the $|0\\rangle$ state." + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "get-initial-state", + "metadata": {}, + "outputs": [], + "source": [ + "@cudaq.kernel\n", + "def get_initial_state(n_spins: int):\n", + " \"\"\"Create initial state |1010...>\"\"\"\n", + " qubits = cudaq.qvector(n_spins)\n", + " for i in range(0, n_spins, 2):\n", + " x(qubits[i])\n", + " " + ] + }, + { + "cell_type": "markdown", + "id": "trotter-step", + "metadata": {}, + "source": [ + "### 2. Hamiltonian Trotterization\n", + "\n", + "This function performs a single Trotter step for simulating a spin chain. If _use_XXYYZZ_gate is True, it constructs specific two-qubit gates using decomposition for exponentiation. It is a custom and efficient exponentiation combination of XX+YY+ZZ gates as a single operation. Otherwise, it uses a standrd CUDA-Q exp_pauli operation for the exponentiation of Pauli gates in Hamiltonian.\n", + "Input parameters:\n", + "- **state:** The current quantum state. \n", + "- **dt:** Time step for Trotter evolution. \n", + "- **Jx, Jy, Jz:** Coupling constants for the spin-spin interactions along the x, y, and z axes. \n", + "- **h_x, h_y, h_z:** Local magnetic field strengths (unused in the code provided). \n", + "- **_use_XXYYZZ_gate:** Flag to determine if custom XX+YY+ZZ gates should be used. \n", + "- **coefficients:** Coefficients of Pauli terms for exponential evolution. \n", + "- **words:** Corresponding Pauli operators (e.g., X, Y, Z) for evolution. " + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "id": "trotter-step-code", + "metadata": {}, + "outputs": [], + "source": [ + "@cudaq.kernel\n", + "def trotter_step(state: cudaq.State, dt: float, Jx: float, Jy: float, Jz: float,\n", + " h_x: list[float], h_y: list[float], h_z: list[float], _use_XXYYZZ_gate: bool,\n", + " coefficients: List[complex], words: List[cudaq.pauli_word]):\n", + " \"\"\"Perform single Trotter step\"\"\"\n", + " qubits = cudaq.qvector(state)\n", + " n_spins = len(qubits)\n", + " \n", + " # Apply two-qubit interaction terms\n", + " if _use_XXYYZZ_gate:\n", + " for j in range(2):\n", + " for i in range(j % 2, n_spins - 1, 2):\n", + " rx(-np.pi/2,qubits[i])\n", + " rx(np.pi/2,qubits[i+1])\n", + " x.ctrl(qubits[i], qubits[i+1])\n", + " h(qubits[i])\n", + " s(qubits[i])\n", + " rz(-2*Jy*dt,qubits[i+1])\n", + " x.ctrl(qubits[i], qubits[i+1])\n", + " h(qubits[i])\n", + " rx(2*Jx*dt,qubits[i])\n", + " rz(-2*Jz*dt,qubits[i+1])\n", + " x.ctrl(qubits[i], qubits[i+1])\n", + " else:\n", + " for i in range(len(coefficients)):\n", + " exp_pauli(coefficients[i].real * dt, qubits, words[i])" + ] + }, + { + "cell_type": "markdown", + "id": "compute-overlap-probability", + "metadata": {}, + "source": [ + "### 3. `Compute overlap`\n", + "\n", + "Calculate the probability of the evolved state overlapping with the initial state." + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "id": "compute-overlap-code", + "metadata": {}, + "outputs": [], + "source": [ + "def compute_overlap_probability(initial_state: cudaq.State, evolved_state: cudaq.State):\n", + " \"\"\"Compute probability of the overlap with the initial state\"\"\"\n", + " overlap = initial_state.overlap(evolved_state)\n", + " return np.abs(overlap)**2" + ] + }, + { + "cell_type": "markdown", + "id": "create-heisenberg-hamiltonian", + "metadata": {}, + "source": [ + "### 4. Construct Heisenberg Hamiltonian\n", + "\n", + "Construct the Heisenberg Hamiltonian as a `cudaq.SpinOperator` object, considering nearest-neighbor interactions along X, Y, and Z directions. It supports arbitrary coupling constants Jx, Jy, and Jz. See formula above.\n", + "Input:\n", + "- **`n_spins`**: Number of spins (qubits) in the system. \n", + "- **`Jx`, `Jy`, `Jz`**: Coupling constants for interactions in the X, Y, and Z directions. \n", + "- **`h_x`, `h_y`, `h_z`**: Magnetic field components (currently unused). " + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "id": "heisenberg-code", + "metadata": {}, + "outputs": [], + "source": [ + "def create_hamiltonian_heisenberg(n_spins: int, Jx: float, Jy: float, Jz: float, h_x: list[float], h_y: list[float], h_z: list[float]):\n", + " \"\"\"Create the Hamiltonian operator\"\"\"\n", + " ham = cudaq.SpinOperator(num_qubits=n_spins)\n", + "\n", + " # Add two-qubit interaction terms for Heisenberg Hamiltonian\n", + " for i in range(0, n_spins - 1):\n", + " ham += Jx * spin.x(i) * spin.x(i + 1)\n", + " ham += Jy * spin.y(i) * spin.y(i + 1)\n", + " ham += Jz * spin.z(i) * spin.z(i + 1)\n", + " \n", + " return ham" + ] + }, + { + "cell_type": "markdown", + "id": "create-tfim-hamiltonian", + "metadata": {}, + "source": [ + "### 5. Construct TFIM Hamiltonian\n", + "\n", + "Construct the TFIM Hamiltonian as a `cudaq.SpinOperator` object. See formula above." + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "id": "tfim-code", + "metadata": {}, + "outputs": [], + "source": [ + "def create_hamiltonian_tfim(n_spins: int, h_field: float):\n", + " \"\"\"Create the Hamiltonian operator\"\"\"\n", + " ham = cudaq.SpinOperator(num_qubits=n_spins)\n", + " \n", + " # Add single-qubit terms\n", + " for i in range(0, n_spins):\n", + " ham += -1 * h_field * spin.x(i)\n", + "\n", + " # Add two-qubit interaction terms for Ising Hamiltonian\n", + " for i in range(0, n_spins-1):\n", + " ham += -1 * spin.z(i) * spin.z(i + 1)\n", + " \n", + " return ham" + ] + }, + { + "cell_type": "markdown", + "id": "extract-coefficients-and-words", + "metadata": {}, + "source": [ + "### 6. Extract coefficients and Pauli words\n", + "\n", + "Extract the coefficients and Pauli words from the provided Hamiltonian for use in the Trotter step." + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "id": "extract-code", + "metadata": {}, + "outputs": [], + "source": [ + "def extractCoefficients(hamiltonian: cudaq.SpinOperator):\n", + " result = []\n", + " hamiltonian.for_each_term(lambda term: result.append(term.get_coefficient()))\n", + " return result\n", + "\n", + "def extractWords(hamiltonian: cudaq.SpinOperator):\n", + " result = []\n", + " hamiltonian.for_each_term(lambda term: result.append(term.to_string(False)))\n", + " return result" + ] + }, + { + "cell_type": "markdown", + "id": "main-simulation", + "metadata": {}, + "source": [ + "## Main code\n", + "\n", + "Import required libraries, set up the simulation parameters, and perform the time evolution." + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "id": "main-code", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Initialize state\n", + "Circuit execution time: 0.060 seconds\n" + ] + } + ], + "source": [ + "# Import Required Libraries\n", + "import cudaq\n", + "import numpy as np\n", + "import time\n", + "import sys\n", + "from cudaq import spin\n", + "import matplotlib.pyplot as plt\n", + "from typing import List\n", + "\n", + "# Parameters\n", + "n_spins = 4 # Number of spins in the chain\n", + "ham_type = \"heisenberg\" # Choose between \"heisenberg\" and \"tfim\"\n", + "Jx, Jy, Jz = 1.0, 1.0, 1.0 # Coupling coefficients for Heisenberg Hamiltonian\n", + "h_field = 1.0 # Transverse field strength for TFIM\n", + "K = 100 # Number of Trotter steps\n", + "t = np.pi # Total evolution time\n", + "dt = t / K # Time step size\n", + "\n", + "# Optimized XXYYZZ exponentiation. Works only for Heisenberg Hamiltonian\n", + "_use_XXYYZZ_gate = False\n", + "if _use_XXYYZZ_gate == True and ham_type == \"tfim\":\n", + " print (\"XXYYZZ exponentiation works only for Heisenberg\")\n", + " sys.exit(0)\n", + "\n", + "# Create Hamiltonian\n", + "if ham_type == \"heisenberg\":\n", + " # Initialize field for Heisenberg Hamiltonian\n", + " h_x = np.ones(n_spins)\n", + " h_y = np.ones(n_spins)\n", + " h_z = np.ones(n_spins)\n", + " hamiltonian = create_hamiltonian_heisenberg(n_spins, Jx, Jy, Jz, h_x, h_y,h_z)\n", + "elif ham_type == \"tfim\":\n", + " hamiltonian = create_hamiltonian_tfim(n_spins, h_field)\n", + "else:\n", + " raise ValueError(\"Invalid Hamiltonian type. Choose 'heisenberg' or 'tfim'.\")\n", + "\n", + "# Extract coefficients and words\n", + "coefficients = extractCoefficients(hamiltonian)\n", + "words = extractWords(hamiltonian)\n", + "\n", + "# Initialize and save the initial state\n", + "print (\"Initialize state\")\n", + "initial_state = cudaq.get_state(get_initial_state, n_spins)\n", + "state = initial_state\n", + "\n", + "# Store probabilities over time\n", + "probabilities = []\n", + "probabilities.append(1.0)\n", + "\n", + "# Time evolution\n", + "start_time = time.time()\n", + "for k in range(1, K):\n", + "\n", + " # Apply single Trotter step\n", + " state = cudaq.get_state(trotter_step, state, dt, Jx, Jy, Jz, h_x, h_y, h_z, _use_XXYYZZ_gate, coefficients, words)\n", + "\n", + " # Calculate probability between initial and current states\n", + " probability = compute_overlap_probability(initial_state, state)\n", + " probabilities.append(probability)\n", + " #print(f\"Step {k}, Probability of initial state: {probability:.6f}\")\n", + "\n", + "total_time = time.time() - start_time\n", + "print(f\"Circuit execution time: {total_time:.3f} seconds\")" + ] + }, + { + "cell_type": "markdown", + "id": "results-and-visualization", + "metadata": {}, + "source": [ + "## Visualization of probablity over time\n", + "\n", + "Plot the probability of the system remaining in the initial state as a function of time." + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "id": "plot-code", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjcAAAHHCAYAAABDUnkqAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAAB/xUlEQVR4nO3dd3yT1f4H8E/Ske69obSFsleBCpShgpQyLkMcgCiIXlQEQXtduLByEXDiQLjyE1ABrRNFsFCWrELZUMqmpYwO2tJBd5Pn90dJaJqkTdrsfN6vF/eaJ8+TfHuaJt+c8z3niARBEEBERERkJcSmDoCIiIhIn5jcEBERkVVhckNERERWhckNERERWRUmN0RERGRVmNwQERGRVWFyQ0RERFaFyQ0RERFZFSY3REREZFWY3JBFE4lEmD17tt4eb82aNRCJRDh8+HCT595///24//77FbczMzMhEomwZs0axbF3330XIpFIb/FR86j73ZBlePLJJxEeHq73xxWJRHj33Xf1/rhkHpjckN7JEwT5PycnJ3To0AGzZ89Gbm6uqcMzuffffx8bNmwwdRh6cfPmTcydOxedOnWCs7MzAgIC0LdvX7z22mu4ffu24rz169dj6dKlpgtUjxq+vjX9a+kH8v79+/Huu++iqKhI5T5TvIYa+1mfe+45o8airc2bNzOBsVH2pg6ArNd7772HiIgIVFZWYu/evVi+fDk2b96MtLQ0uLi4mDq8Ftu6dWuT57z11lt4/fXXlY69//77ePjhhzF+/HgDRWYchYWFiI6ORklJCZ566il06tQJBQUFOHnyJJYvX46ZM2fCzc0NQF1yk5aWhhdffNEksYaFhaGiogIODg4tfqx7770X33//vdKxf//73+jbty+eeeYZxTH5z95c+/fvR0JCAp588kl4eXkp3Weq11BsbCymTp2qcrxDhw5GjUNbmzdvxrJly9QmOBUVFbC350egteJvlgxm5MiRiI6OBlD35u/r64tPPvkEf/zxByZPnqz2mrKyMri6uhozzGZzdHRs8hx7e3urfQP95ptvkJWVhX379mHAgAFK95WUlGjVPsYi70HUh7Zt26Jt27ZKx5577jm0bdsWjz/+uMbramtrIZPJzKpd6qusrISjoyPEYs0d+h06dGj0Z7Qk+no9kHnisBQZzdChQwEAGRkZAOrG0t3c3HDp0iWMGjUK7u7umDJlCoC6JOc///kPQkNDIZFI0LFjR3z00UfQtIn9unXr0LFjRzg5OaFPnz7YvXu30v1XrlzB888/j44dO8LZ2Rm+vr545JFHkJmZqfbxysvL8eyzz8LX1xceHh6YOnUqbt26pXROw5obdRrW3IhEIpSVleHbb79VdOk/+eST2LlzJ0QiEX7//XeVx1i/fj1EIhFSUlLUPsfhw4chEonw7bffqty3ZcsWiEQi/PXXXwCA0tJSvPjiiwgPD4dEIkFAQABiY2Nx9OjRRn8OdS5dugQ7Ozv0799f5T4PDw/Fh8f999+PTZs24cqVK2qHbKqqqjB//nxERkZCIpEgNDQUr776KqqqqpQeU15f1dTvWh11NTfy19/169cxfvx4uLm5wd/fHy+//DKkUqnO7aHu+T766CMsXboU7dq1g0QiQXp6OgBgx44dGDx4MFxdXeHl5YVx48bhzJkziuvfffddvPLKKwCAiIgIRbvJH1fda0ju+vXreOqppxAYGAiJRIKuXbti1apVSvHt2rULIpEIP/74I9566y20atUKLi4uKCkpadHPPXv2bLi5uaG8vFzlvsmTJyMoKEipbb/66it07doVEokEISEhmDVrltphOHWx79q1S+l4w9/xk08+iWXLlgFQHlKTU1dzc+zYMYwcORIeHh5wc3PDAw88gAMHDiidIx+W3LdvH+Lj4+Hv7w9XV1c8+OCDuHnzZhMtRMZinV8pySxdunQJAODr66s4Vltbi7i4OAwaNAgfffQRXFxcIAgCxo4di507d+Lpp59GVFQUtmzZgldeeQXXr1/Hp59+qvS4//zzDxITEzFnzhxIJBJ89dVXGDFiBFJTU9GtWzcAwKFDh7B//35MmjQJrVu3RmZmJpYvX477778f6enpKsNks2fPhpeXF959912cO3cOy5cvx5UrVxRvrM31/fffqwxhtGvXDv3790doaCjWrVuHBx98UOmadevWoV27doiJiVH7mNHR0Wjbti1++uknTJs2Tem+xMREeHt7Iy4uDkBdD8Mvv/yC2bNno0uXLigoKMDevXtx5swZ9O7dW6efJSwsDFKpFN9//73K89b35ptvori4GNeuXVP87uRDNjKZDGPHjsXevXvxzDPPoHPnzjh16hQ+/fRTnD9/XqWuRJvftS6kUini4uLQr18/fPTRR9i2bRs+/vhjtGvXDjNnztT58RpavXo1Kisr8cwzz0AikcDHxwfbtm3DyJEj0bZtW7z77ruoqKjAF198gYEDB+Lo0aMIDw/HhAkTcP78efzwww/49NNP4efnBwDw9/fX+BoCgNzcXPTv31+RCPr7++Pvv//G008/jZKSEpVhwQULFsDR0REvv/wyqqqqmuxVqqysRH5+vspxDw8PODo6YuLEiVi2bBk2bdqERx55RHF/eXk5Nm7ciCeffBJ2dnYA6hK4hIQEDBs2DDNnzlT8nR06dAj79u1r8RDis88+ixs3biA5OVllGFGd06dPY/DgwfDw8MCrr74KBwcH/O9//8P999+Pf/75B/369VM6/4UXXoC3tzfmz5+PzMxMLF26FLNnz0ZiYmKL4iY9EYj0bPXq1QIAYdu2bcLNmzeFq1evCj/++KPg6+srODs7C9euXRMEQRCmTZsmABBef/11pes3bNggABD++9//Kh1/+OGHBZFIJFy8eFFxDIAAQDh8+LDi2JUrVwQnJyfhwQcfVBwrLy9XiTMlJUUAIHz33Xcqsffp00eorq5WHP/ggw8EAMIff/yhOHbfffcJ9913n+J2RkaGAEBYvXq14tj8+fOFhn9mrq6uwrRp01TimTdvniCRSISioiLFsby8PMHe3l6YP3++yvkNr3VwcBAKCwsVx6qqqgQvLy/hqaeeUhzz9PQUZs2a1ehjaSsnJ0fw9/cXAAidOnUSnnvuOWH9+vVK8cuNHj1aCAsLUzn+/fffC2KxWNizZ4/S8RUrVggAhH379imOafu7Vkfd70b++nvvvfeUzu3Vq5fQp0+fRh+voYa/U/nzeXh4CHl5eUrnRkVFCQEBAUJBQYHi2IkTJwSxWCxMnTpVcezDDz8UAAgZGRlNPp/c008/LQQHBwv5+flKxydNmiR4enoq/g527twpABDatm2r9m9DHXn7q/v3ww8/CIIgCDKZTGjVqpXw0EMPKV37008/CQCE3bt3C4JQ97p2dHQUhg8fLkilUsV5X375pQBAWLVqleLYtGnTlF478th37typ9BzqfsezZs1S+fur//PU/7saP3684OjoKFy6dElx7MaNG4K7u7tw7733Ko7J3yOGDRsmyGQyxfGXXnpJsLOzU/v6J+PjsBQZzLBhw+Dv74/Q0FBMmjQJbm5u+P3339GqVSul8xp+Q968eTPs7OwwZ84cpeP/+c9/IAgC/v77b6XjMTEx6NOnj+J2mzZtMG7cOGzZskXRBe7s7Ky4v6amBgUFBYiMjISXl5faIZlnnnlG6ZvjzJkzYW9vj82bN+vYCtqbOnUqqqqq8MsvvyiOJSYmora2tsk6h4kTJ6Kmpga//fab4tjWrVtRVFSEiRMnKo55eXnh4MGDuHHjRovjDQwMxIkTJ/Dcc8/h1q1bWLFiBR577DEEBARgwYIFGocQ6/v555/RuXNndOrUCfn5+Yp/8iHMnTt3Kp2vze9aVw1n+gwePBiXL19u1mM19NBDD8Hf319xOzs7G8ePH8eTTz4JHx8fxfEePXogNja2Ra8vQRDw66+/YsyYMRAEQak94+LiUFxcrPJanzZtmtLfRlPGjRuH5ORklX9DhgwBUDfU88gjj2Dz5s1Ks+USExPRqlUrDBo0CACwbds2VFdX48UXX1Sq8ZkxYwY8PDywadOmZrdDc0ilUmzduhXjx49XqqcKDg7GY489hr1796oM2T3zzDNKvbiDBw+GVCrFlStXjBY3acbkhgxm2bJlSE5Oxs6dO5Geno7Lly8rhkfk7O3t0bp1a6VjV65cQUhICNzd3ZWOd+7cWXF/fe3bt1d57g4dOqC8vFwxBl5RUYF33nlHUcPj5+cHf39/FBUVobi4WOX6ho/p5uaG4OBgjTU6+tCpUyfcc889WLduneLYunXr0L9/f0RGRjZ6bc+ePdGpUyelLvHExET4+fkpEgUA+OCDD5CWlobQ0FD07dsX7777bos+yIODg7F8+XJkZ2fj3Llz+Pzzz+Hv74933nkH33zzTZPXX7hwAadPn4a/v7/SP/nsm7y8PKXztfld68LJyUkp+QAAb29vlfqq5oqIiFC6LX/tduzYUeXczp07Iz8/H2VlZc16rps3b6KoqAhff/21SntOnz4dgGp7NoyvKa1bt8awYcNU/gUGBirOmThxIioqKvDnn38CAG7fvo3NmzfjkUceUSQDmtrB0dERbdu2NXqCcPPmTZSXl2v8vchkMly9elXpeJs2bZRue3t7A4DeXjvUMqy5IYPp27evYraUJhKJpNHZGfrywgsvYPXq1XjxxRcRExMDT09PiEQiTJo0CTKZzODPr62pU6di7ty5uHbtGqqqqnDgwAF8+eWXWl07ceJELFy4EPn5+XB3d8eff/6JyZMnK83WevTRRzF48GD8/vvv2Lp1Kz788EMsWbIEv/32G0aOHNnsuEUiETp06IAOHTpg9OjRaN++PdatW4d///vfjV4nk8nQvXt3fPLJJ2rvDw0NbXZM2pDXfxiKLr0iLSV/HT/++OMaa6B69OihdNsQ8fXv3x/h4eH46aef8Nhjj2Hjxo2oqKhQ6kFsCU01by0tAteVpteONj2WZHhMbsjshIWFYdu2bSgtLVXqvTl79qzi/vouXLig8hjnz5+Hi4uL4lv5L7/8gmnTpuHjjz9WnFNZWalxZsaFCxcUXe1A3bfP7OxsjBo1qtk/l1xjBcmTJk1CfHw8fvjhB8W6LNp+KEycOBEJCQn49ddfERgYiJKSEkyaNEnlvODgYDz//PN4/vnnkZeXh969e2PhwoUtSm7qa9u2Lby9vZGdna04pulnbteuHU6cOIEHHnhAq0JtbX7X5kz+2j137pzKfWfPnoWfn59iKYTG2kPdff7+/nB3d4dUKsWwYcP0FHHzPProo/jss89QUlKCxMREhIeHK82qq98O9YeBqqurkZGR0Wj88h6Shn+76np7tC3+9/f3h4uLi8bfi1gsNniiTfrFYSkyO6NGjYJUKlXpsfj0008hEolUPoRTUlKUagmuXr2KP/74A8OHD1d8u7Kzs1P5RvXFF19o/Lb39ddfo6amRnF7+fLlqK2t1UsC4OrqqjGp8vPzw8iRI7F27VqsW7cOI0aMUMyUaUrnzp3RvXt3JCYmIjExEcHBwbj33nsV90ulUpUhuICAAISEhChNu87Pz8fZs2fVTuet7+DBg2qHUFJTU1FQUKDUxe/q6qp2+O/RRx/F9evXsXLlSpX7KioqVB5fm9+1OQsODkZUVBS+/fZbpddAWloatm7dqpQ8y5Mcda8Vda8hOzs7PPTQQ/j111+Rlpamco0xpylPnDgRVVVV+Pbbb5GUlIRHH31U6f5hw4bB0dERn3/+udLf5TfffIPi4mKMHj1a42OHhYXBzs5OZQmAr776SuXcxtqwPjs7OwwfPhx//PGH0tBzbm4u1q9fj0GDBsHDw6PRxyDzwp4bMjtjxozBkCFD8OabbyIzMxM9e/bE1q1b8ccff+DFF19UTHuV69atG+Li4pSmBwNAQkKC4px//etf+P777+Hp6YkuXbogJSUF27ZtU5qWXl91dTUeeOABPProozh37hy++uorDBo0CGPHjm3xz9enTx9s27YNn3zyCUJCQhAREaE0zXTq1Kl4+OGHAdRN1dXFxIkT8c4778DJyQlPP/200pBfaWkpWrdujYcffhg9e/aEm5sbtm3bhkOHDin1aH355ZdISEjAzp07G13H5/vvv1dMXe/Tpw8cHR1x5swZrFq1Ck5OTnjjjTeUfubExETEx8fjnnvugZubG8aMGYMnnngCP/30E5577jns3LkTAwcOhFQqxdmzZ/HTTz9hy5YtSkOb2vyuzd2HH36IkSNHIiYmBk8//bRiKrinp6fSuivywuk333wTkyZNgoODA8aMGQNXV1eNr6HFixdj586d6NevH2bMmIEuXbqgsLAQR48exbZt21BYWNii2M+fP4+1a9eqHA8MDERsbKzidu/evREZGYk333wTVVVVKr2P/v7+mDdvHhISEjBixAiMHTtW8Xd2zz33NFpA7+npiUceeQRffPEFRCIR2rVrh7/++kulngi424Zz5sxBXFwc7Ozs1PZmAsB///tfJCcnY9CgQXj++edhb2+P//3vf6iqqsIHH3ygVfuQGTHhTC2yUvKpkocOHWr0vGnTpgmurq5q7ystLRVeeuklISQkRHBwcBDat28vfPjhh0pTLwWhbjrnrFmzhLVr1wrt27cXJBKJ0KtXL5Vpordu3RKmT58u+Pn5CW5ubkJcXJxw9uxZISwsTGlKrTz2f/75R3jmmWcEb29vwc3NTZgyZYrS1F1BaP5U8LNnzwr33nuv4OzsLABQmdJbVVUleHt7C56enkJFRUWjbdjQhQsXFNNz9+7dq/K4r7zyitCzZ0/B3d1dcHV1FXr27Cl89dVXSufJY27Yhg2dPHlSeOWVV4TevXsLPj4+gr29vRAcHCw88sgjwtGjR5XOvX37tvDYY48JXl5eAgClqb3V1dXCkiVLhK5duwoSiUTw9vYW+vTpIyQkJAjFxcWK87T9XaujaSq4utefut9ZUzRNBf/www/Vnr9t2zZh4MCBgrOzs+Dh4SGMGTNGSE9PVzlvwYIFQqtWrQSxWKw0Lbyx11Bubq4wa9YsITQ0VHBwcBCCgoKEBx54QPj6668V58inU//8889a/4xQMwVc/q/+34Hcm2++KQAQIiMjNT7ml19+KXTq1ElwcHAQAgMDhZkzZwq3bt1SOqfhVHBBEISbN28KDz30kODi4iJ4e3sLzz77rJCWlqbyO66trRVeeOEFwd/fXxCJREq/VzSYCi4IgnD06FEhLi5OcHNzE1xcXIQhQ4YI+/fvVzpH0/ubpinqZBoiQWD1E5E5qa2tRUhICMaMGaPVjCNbIRKJMGvWLK0LrInIdrHmhsjMbNiwATdv3lS7QSERETWNNTdEZuLgwYM4efIkFixYgF69euG+++4zdUhERBaJPTdEZmL58uWYOXMmAgIC8N1335k6HCIii8WaGyIiIrIq7LkhIiIiq8LkhoiIiKyKzRUUy2Qy3LhxA+7u7lovzU1ERESmJQgCSktLERIS0uSehDaX3Ny4cYN7hBAREVmoq1evonXr1o2eY3PJjXwjxqtXr+p9r5Camhps3boVw4cPh4ODg14fm5SxrY2HbW08bGvjYVsbj77auqSkBKGhoUobKmtic8mNfCjKw8PDIMmNi4sLPDw8+MdiYGxr42FbGw/b2njY1saj77bWpqSEBcVERERkVZjcEBERkVVhckNERERWhckNERERWRUmN0RERGRVmNwQERGRVWFyQ0RERFaFyQ0RERFZFSY3REREZFWY3OiJVCbgYEYhjuSLcDCjEFKZYOqQiIiIbJJJk5vdu3djzJgxCAkJgUgkwoYNG5q8ZteuXejduzckEgkiIyOxZs0ag8fZlKS0bAxasgOPrzqM7y7Y4fFVhzFoyQ4kpWWbOjQiIiKbY9LkpqysDD179sSyZcu0Oj8jIwOjR4/GkCFDcPz4cbz44ov497//jS1bthg4Us2S0rIxc+1RZBdXKh3PKa7EzLVHmeAQEREZmUk3zhw5ciRGjhyp9fkrVqxAREQEPv74YwBA586dsXfvXnz66aeIi4szVJgaSWUCEjamQ90AlABABCBhYzpiuwTBTtz0Rl9ERETUcha1K3hKSgqGDRumdCwuLg4vvviixmuqqqpQVVWluF1SUgKgbpfSmpqaFsVzMKNQpcemPgFAdnElvtlzEVP7hzHB0SP5766lv0NqGtvaeNjWxsO2Nh59tbUu11tUcpOTk4PAwEClY4GBgSgpKUFFRQWcnZ1Vrlm0aBESEhJUjm/duhUuLi4tiudIvgiAXZPnvf/3eXy1/RwmhMvQ05eFxvqUnJxs6hBsBtvaeNjWxsO2Np6WtnV5ebnW51pUctMc8+bNQ3x8vOJ2SUkJQkNDMXz4cHh4eLTosX0zCvHdhcNanVtcLcLq83b4YlJPxHUNbPoCalRNTQ2Sk5MRGxsLBwcHU4dj1djWxsO2Nh62tfHoq63lIy/asKjkJigoCLm5uUrHcnNz4eHhobbXBgAkEgkkEonKcQcHhxa/oGMiAxDs6YSc4kq1dTf1yWtwFv59DiN7tOIQlZ7o4/dI2mFbGw/b2njY1sbT0rbW5VqLWucmJiYG27dvVzqWnJyMmJgYk8RjJxZh/pguAOoSl6bIa3BSMwoNGhcREZEtM2lyc/v2bRw/fhzHjx8HUDfV+/jx48jKygJQN6Q0depUxfnPPfccLl++jFdffRVnz57FV199hZ9++gkvvfSSKcIHAIzoFozlj/dGkKeT1tfklWouQiYiIqKWMWlyc/jwYfTq1Qu9evUCAMTHx6NXr1545513AADZ2dmKRAcAIiIisGnTJiQnJ6Nnz574+OOP8X//938mmQZe34huwdj72lC8MbKDVucHuGufCBEREZFuTFpzc//990MQNFerqFt9+P7778exY8cMGFXz2IlFmNo/DF9tP4fiapHaGhwRgCBPJ/SN8DF2eERERDbDompuzJ2dWIQJ4TIAmmtw5o/pwmJiIiIiA2Jyo2c9fQV8Mamn2hqceSM7YUS3YBNERUREZDssaiq4pYjrGoiRPVohNaMQeaWV+OFgFg5kFOJGI6sZExERkX6w58ZA7MQixLTzxbioVnj2/nYAgA3Hr6OqVmriyIiIiKwbe26M4N72/gj0kCC3pArLd11ChJ8rAtzrCotZf0NERKRfTG6MwE4sQlSoF7aczsXSbRcUx4M9nTB/TBfW4RAREekRh6WMICktG1tO56oczymuxMy1R5GUlm2CqIiIiKwTkxsDk8oEJGxMV3uffC2chI3pkMq4WzgREZE+MLkxsNSMQmQ3MkuK+00RERHpF5MbA9N2HynuN0VERKQfTG4MTNt9pLjfFBERkX4wuTGwvhE+CPZ00rgdgwh1s6a43xQREZF+MLkxMDuxCPPHdAGgut+U/Db3myIiItIfJjdGMKJbMJY/3ltlv6kADwmWP96b69wQERHpERfxM5IR3YIR2yUIqRmFmPvjMeSVVmHh+G4Y1iXI1KERERFZFfbcGJF8v6n7O/oDAA5fKTJtQERERFaIyY0J3BNeVzx8OJNr2xAREekbkxsTkCc3J68Vo7KGu4QTERHpE5MbEwjzdYG/uwTVUhlOXC0ydThERERWhcmNCYhEIvSVD01duWXiaIiIiKwLkxsTiQ73BgDuKUVERKRnTG5MRF53c/TKLe4ITkREpEdMbkykc7AH3CT2KK2qxdmcElOHQ0REZDWY3JiInViEXm28AACr9mYg5VIBe3CIiIj0gCsUm0hSWjaOZRUBAH49eh2/Hr2OYE8nzB/ThdsxEBERtQB7bkwgKS0bM9cexe2qWqXjOcWVmLn2KJLSsk0UGRERkeVjcmNkUpmAhI3pUDcAJT+WsDGdQ1RERETNxOTGyFIzCpFdXKnxfgFAdnElp4gTERE1E5MbI8sr1ZzYNOc8IiIiUsbkxsgC3J30eh4REREpY3JjZH0jfBDs6QSRhvtFAII9ndA3wseYYREREVkNJjdGZicWYf6YLgCgMcGZP6YL7MSa7iUiIqLGMLkxgRHdgrH88d4I8lQeevJ2ccDyx3tznRsiIqIW4CJ+JjKiWzBiuwQhNaMQn2w9h0NXbmH6wHAmNkRERC3EnhsTshOLENPOF7FdAwEA53JvmzgiIiIiy8fkxgx0CvIAAJzN5gaaRERELcXkxgx0CnYHAGTkl6GyRmriaIiIiCwbkxsz4O8mga+rI2QCcD631NThEBERWTQmN2ZAJBIpem/OZjO5ISIiagkmN2ZCXndzJod1N0RERC3B5MZMdApizw0REZE+MLkxE52D78yYyimBIAgmjoaIiMhyMbkxE5EBbhCLgFvlNcgrrTJ1OERERBaLyY2ZcHKwQ1t/NwDAGa53Q0RE1GxMbsyIou4mh3U3REREzcXkxowo6m7Yc0NERNRsTG7MCHtuiIiIWo7JjRnpdKfn5mLebVTXykwcDRERkWVicmNGQjyd4O5kj1qZgEs3uUM4ERFRczC5MSMikQidAuuGptYfvIKUSwWQyrjmDRERkS7sTR0A3ZWUlo3Td4qJvz+Qhe8PZCHY0wnzx3TBiG7BJo6OiIjIMrDnxkwkpWVj5tqjKK+WKh3PKa7EzLVHkZSWbaLIiIiILAuTGzMglQlI2JgOdQNQ8mMJG9M5REVERKQFJjdmIDWjENnFlRrvFwBkF1ciNaPQeEERERFZKCY3ZiCvVHNi05zziIiIbBmTGzMQ4O6k1/OIiIhsGZMbM9A3wgfBnk4QabhfBCDY0wl9I3yMGRYREZFFYnJjBuzEIswf0wUAVBIc+e35Y7rATqwp/SEiIiI5kyc3y5YtQ3h4OJycnNCvXz+kpqY2ev7SpUvRsWNHODs7IzQ0FC+99BIqKy2/FmVEt2Asf7w3gjyVh56CPJ2w/PHeXOeGiIhISyZdxC8xMRHx8fFYsWIF+vXrh6VLlyIuLg7nzp1DQECAyvnr16/H66+/jlWrVmHAgAE4f/48nnzySYhEInzyyScm+An0a0S3YMR2CcLmU9l44YdjsBMDu16+HxIHO1OHRkREZDFM2nPzySefYMaMGZg+fTq6dOmCFStWwMXFBatWrVJ7/v79+zFw4EA89thjCA8Px/DhwzF58uQme3ssiZ1YhNHdg+HkIIZUBtxoZIo4ERERqTJZz011dTWOHDmCefPmKY6JxWIMGzYMKSkpaq8ZMGAA1q5di9TUVPTt2xeXL1/G5s2b8cQTT2h8nqqqKlRVVSlul5TUbW9QU1ODmpoaPf00UDxm/f9viXBfV5zNKcX5nGK09nRs8eNZG322NTWObW08bGvjYVsbj77aWpfrTZbc5OfnQyqVIjAwUOl4YGAgzp49q/aaxx57DPn5+Rg0aBAEQUBtbS2ee+45vPHGGxqfZ9GiRUhISFA5vnXrVri4uLTsh9AgOTm5xY/hXCMGIMbmPYdReYkrE2uij7Ym7bCtjYdtbTxsa+NpaVuXl5drfa5FbZy5a9cuvP/++/jqq6/Qr18/XLx4EXPnzsWCBQvw9ttvq71m3rx5iI+PV9wuKSlBaGgohg8fDg8PD73GV1NTg+TkZMTGxsLBwaFFj3VechHHdl2Gk38bjBrVVU8RWg99tjU1jm1tPGxr42FbG4++2lo+8qINkyU3fn5+sLOzQ25urtLx3NxcBAUFqb3m7bffxhNPPIF///vfAIDu3bujrKwMzzzzDN58802IxaolRBKJBBKJROW4g4ODwV7Q+njs9oF1iVdGQQX/8BphyN8jKWNbGw/b2njY1sbT0rbW5VqTFRQ7OjqiT58+2L59u+KYTCbD9u3bERMTo/aa8vJylQTGzq5uJpEgWNfQTVt/VwDA5ZtlJo6EiIjIsph0WCo+Ph7Tpk1DdHQ0+vbti6VLl6KsrAzTp08HAEydOhWtWrXCokWLAABjxozBJ598gl69eimGpd5++22MGTNGkeRYiwi/uuQm/3YVSipr4OHEbxZERETaMGlyM3HiRNy8eRPvvPMOcnJyEBUVhaSkJEWRcVZWllJPzVtvvQWRSIS33noL169fh7+/P8aMGYOFCxea6kcwGHcnBwS4S5BXWoXLN8sQFepl6pCIiIgsgskLimfPno3Zs2ervW/Xrl1Kt+3t7TF//nzMnz/fCJGZXlt/1zvJzW0mN0RERFoy+fYLpFlbfzcArLshIiLSBZMbM9b2Tt3N5fzbJo6EiIjIcjC5MWPt2HNDRESkMyY3Zkw+HTwjvwwymXVNdSciIjIUJjdmrLW3CxztxKiqleF6UYWpwyEiIrIITG7MmJ1YhDDfuv2vLudzaIqIiEgbzUpuamtrsW3bNvzvf/9DaWkpAODGjRu4fZuFr/p2d6Viti0REZE2dF7n5sqVKxgxYgSysrJQVVWF2NhYuLu7Y8mSJaiqqsKKFSsMEafNivBzA5DLomIiIiIt6dxzM3fuXERHR+PWrVtwdnZWHH/wwQeV9oki/VD03HA6OBERkVZ07rnZs2cP9u/fD0dHR6Xj4eHhuH79ut4CozrtuIEmERGRTnTuuZHJZJBKpSrHr127Bnd3d70ERXe19atb6ya7uBI/H76KlEsFkHJaOBERkUY6JzfDhw/H0qVLFbdFIhFu376N+fPnY9SoUfqMjQAczCiASFT336/8chKTVx7AoCU7kJSWbdrAiIiIzJTOyc3HH3+Mffv2oUuXLqisrMRjjz2mGJJasmSJIWK0WUlp2Zi59iiEBh01OcWVmLn2KBMcIiIiNXSuuWndujVOnDiBxMREnDhxArdv38bTTz+NKVOmKBUYU8tIZQISNqZD3QCUAEAEIGFjOmK7BMFOLDJydEREROZL5+Rm9+7dGDBgAKZMmYIpU6YojtfW1mL37t2499579RqgrUrNKER2caXG+wXU1eGkZhQipp2v8QIjIiIyczoPSw0ZMgSFhYUqx4uLizFkyBC9BEVAXqnmxKY55xEREdkKnZMbQRAgEqkOgxQUFMDV1VUvQREQ4O6k1/OIiIhshdbDUhMmTABQNzvqySefhEQiUdwnlUpx8uRJDBgwQP8R2qi+ET4I9nRCTnGl2robEYAgTyf0jfAxdmhERERmTevkxtPTE0Bdz427u7tS8bCjoyP69++PGTNm6D9CG2UnFmH+mC6YufYoRIBSgiPvN5s/pguLiYmIiBrQOrlZvXo1gLqViF9++WUOQRnBiG7BWP54byRsTFcqLg7ydML8MV0woluwCaMjIiIyTzrPlpo/f74h4iANRnQLRmyXIDy5OhV7LuTj0ejWWDShB3tsiIiINNA5uQGAX375BT/99BOysrJQXV2tdN/Ro0f1EhjdZScW4Z5wH+y5kA9BABMbIiKiRug8W+rzzz/H9OnTERgYiGPHjqFv377w9fXF5cuXMXLkSEPESADCfF0AAFcKyk0cCRERkXnTObn56quv8PXXX+OLL76Ao6MjXn31VSQnJ2POnDkoLi42RIwEIMy3rsbpSiF3ByciImqMzslNVlaWYsq3s7MzSktLAQBPPPEEfvjhB/1GRwrhd3puckuqUFGtuis7ERER1dE5uQkKClKsUNymTRscOHAAAJCRkQGh4Q6PpDdeLo7wcKorkcoq5NAUERGRJjonN0OHDsWff/4JAJg+fTpeeuklxMbGYuLEiXjwwQf1HiDdFe5XNzSVWcChKSIiIk10ni319ddfQyaTAQBmzZoFX19f7N+/H2PHjsWzzz6r9wDprjY+Ljh5rRhZLComIiLSSOfk5tq1awgNDVXcnjRpEiZNmgRBEHD16lW0adNGrwHSXeG+7LkhIiJqis7DUhEREbh586bK8cLCQkREROglKFKvDaeDExERNUlvu4Lfvn0bTk7codqQwjkdnIiIqElaD0vFx8cDqNsV/O2334aLi4viPqlUioMHDyIqKkrvAdJd8oX8rt+qQHWtDI72OuemREREVk/r5ObYsWMA6npuTp06BUdHR8V9jo6O6NmzJ15++WX9R0gKAe4SODmIUVkjw/WiCkT4cfNSIiKihrRObnbu3Amgbvr3Z599Bg8PD4MFReqJRCKE+bjiXG4pMgvKmNwQERGpofO4xurVq5USm5KSEmzYsAFnz57Va2CknnxoitPBiYiI1NM5uXn00Ufx5ZdfAgAqKioQHR2NRx99FN27d8evv/6q9wBJGRfyIyIiapzOyc3u3bsxePBgAMDvv/8OQRBQVFSEzz//HP/973/1HiApa+PDnhsiIqLG6JzcFBcXw8fHBwCQlJSEhx56CC4uLhg9ejQuXLig9wBJGRfyIyIiapzOyU1oaChSUlJQVlaGpKQkDB8+HABw69YtrnNjBPKam6uFFZDKuFEpERFRQzonNy+++CKmTJmC1q1bIyQkBPfffz+AuuGq7t276zs+aiDY0wkOdiJUS2XIKak0dThERERmR+e9pZ5//nn069cPWVlZiI2NhVhclx+1bduWNTdGYG8nRmtvF2Tkl+FKfhlaeTmbOiQiIiKzonNyAwB9+vRBnz59lI6NHj1aLwFR08J87yQ3heUYYOpgiIiIzAzX77dAod51vTXbzuQi5VIBa2+IiIjqaVbPDZlOUlo2/jh+AwCw/Uwetp/JQ7CnE+aP6YIR3YJNHB0REZHpsefGgiSlZWPm2qMoqaxVOp5TXImZa48iKS3bRJERERGZDyY3FkIqE5CwMR3qBqDkxxI2pnOIioiIbJ5Ww1InT57U+gF79OjR7GBIs9SMQmQXa576LQDILq5EakYhYtr5Gi8wIiIiM6NVchMVFQWRSARBUN8rIL9PJBJBKpXqNUCqk1eq3Zo22p5HRERkrbRKbjIyMgwdBzUhwF271Z+1PY+IiPRPKhOQmlGIvNJKBLg7oW+ED+zEIlOHZXO0Sm7CwsIMHQc1oW+ED4I9nZBTXKm27kYEIMiz7g+JiIgMr2Eic6usGgs2pSuVEHA2q2k0eyp4eno6srKyUF1drXR87NixLQ6KVNmJRZg/pgtmrj0KEaCU4Mi/E8wf04XfEIiIjCApLRsJG9MbrYUE7s5mXf54byY4RqRzcnP58mU8+OCDOHXqlFIdjkhU96HKmhvDGdEtGMsf763yBxXEbwZEREYjX5ZDm7mp8nPe+P0UKmpkCPLgUJUx6DwVfO7cuYiIiEBeXh5cXFxw+vRp7N69G9HR0di1a5cBQqT6RnQLxt7XhuK/47sBADydHbD3taFMbIiIjKCxZTkaU1hWg5cSj2PyygMYtGQH1yUzMJ2Tm5SUFLz33nvw8/ODWCyGWCzGoEGDsGjRIsyZM8cQMVIDdmIR/tWjLpkprqhBda3MxBEREdmGppbl0AYXXjU8nZMbqVQKd3d3AICfnx9u3KjbCiAsLAznzp3Tb3SkkaezA9yd6kYVswrLTRwNEZH1k8oE7LuY3+LH4cKrhqdzzU23bt1w4sQJREREoF+/fvjggw/g6OiIr7/+Gm3btjVEjKSGSCRCmK8L0q6XIKuwHB2D3E0dEhGR1dK2gFhbXHjVsHRObt566y2UlZUBAN577z3861//wuDBg+Hr64vExES9B0iatfG5m9wQEZFh6FJArCsuvGoYOic3cXFxiv+OjIzE2bNnUVhYCG9vb8WMKTKONj6uAICsgjITR0JEZJ2aW0CsLS68ahjNXuemPh8fLhxnCm18XACw5oaIyFB0KSAO9nTC26M7w9tVgpziCizYdAa3yqo1JkZezg6QCQKkMoFTw/VMq+RmwoQJWLNmDTw8PDBhwoRGz/3tt990CmDZsmX48MMPkZOTg549e+KLL75A3759NZ5fVFSEN998E7/99hsKCwsRFhaGpUuXYtSoUTo9rzUI861Lbq4wuSEiMghth41mD2mHl2I7KiUpzo52ahdelSuqqMGU/zvIVYwNQKvZUp6enoohJw8PD3h6emr8p4vExETEx8dj/vz5OHr0KHr27Im4uDjk5eWpPb+6uhqxsbHIzMzEL7/8gnPnzmHlypVo1aqVTs9rLeQ9N9cKKyBjxT0Rkd5pO2w0MNJfpfdFvvBqkGfjj8Gp4fqnVc/N6tWrFf+9Zs0avT35J598ghkzZmD69OkAgBUrVmDTpk1YtWoVXn/9dZXzV61ahcLCQuzfvx8ODg4AgPDwcL3FY2mCPZ1gLxahWipDTkklQrycTR0SEZFV6RvhgyAPJ+SUqO/BaWpfvxHdghHbJQgHLhVg1vqjKKqoUTlHuPM4CRvTEdsliENUeqBzzc3QoUPx22+/wcvLS+l4SUkJxo8fjx07dmj1ONXV1Thy5AjmzZunOCYWizFs2DCkpKSovebPP/9ETEwMZs2ahT/++AP+/v547LHH8Nprr8HOzk7tNVVVVaiqqlKKEwBqampQU6P6ImsJ+ePp+3EbE+LlhKzCClzOK4G/q15KqCyCKdraVrGtjYdtbTxNtbVUJuDwlVvIK61C1xB3tcmNPAV5c2RHyKS1kDWy+5AgSNUmNor7UTc1POViHvpZ2QbI+npd63K9zp+Gu3btUtksEwAqKyuxZ88erR8nPz8fUqkUgYGBSscDAwNx9uxZtddcvnwZO3bswJQpU7B582ZcvHgRzz//PGpqajB//ny11yxatAgJCQkqx7du3QoXFxet49VFcnKyQR5XHRepGIAYm/45iIIztjc0Zcy2tnVsa+NpSVvLBOBSiQglNYCHA9DOQwA7AjRT19YnCkT4LVOMomrlhnMUC6iW3T3m6ShgQrgM0itHsPlK489zJF8EQP2X8Pq27rHe9/KWvoeUl2tfX6p1cnPy5EnFf6enpyMnJ0dxWyqVIikpyeC1LzKZDAEBAfj6669hZ2eHPn364Pr16/jwww81Jjfz5s1DfHy84nZJSQlCQ0MxfPhweHh46DW+mpoaJCcnIzY2VjFsZmgHatNx9tA1eLWOxKhh7Y3ynObAFG1tq9jWxtPStt5yOheLNp9FTsnd3uogDwneGNERPm6OyCutQoC7BNFh3jY/9KGprbeczsXqlBNqC4CrZSLMGdIO4X4uOrejb0YhvrtwuMnzhg/uZ5U9N/p4D5GPvGhD6+QmKioKIpEIIpEIQ4cOVbnf2dkZX3zxhdZP7OfnBzs7O+Tm5iodz83NRVBQkNprgoOD4eDgoDQE1blzZ+Tk5KC6uhqOjo4q10gkEkgkEpXjDg4OBnujNuRjNxTh7wYAuFZUZZMfPMZsa1vHtjYeXdpaKhOQmlGI5PQcrNqXqXJ/TkkV5vx0UukYZ+fcVb+tpTIBC/8+p3HqtgjAz0evY+9rQ3VODmMiAxDs6YSc4kq1jy+v3YmJDLDaxLOl7yG6XKv13lIZGRm4dOkSBEFAamoqMjIyFP+uX7+OkpISPPXUU1o/saOjI/r06YPt27crjslkMmzfvh0xMTFqrxk4cCAuXrwImezuRpHnz59HcHCw2sTGFnCtGyLblZSWjUFLdmDyygNqExtNODtHvabWtKm/ZYKu7MQizB/TBcDdWp2G5o/pYrWJjbFpndyEhYUhPDwcMpkM0dHRCAsLU/wLDg7WWNDbmPj4eKxcuRLffvstzpw5g5kzZ6KsrEwxe2rq1KlKBcczZ85EYWEh5s6di/Pnz2PTpk14//33MWvWLJ2f21pwlWIi2yTfEqA5ex1x40b1tF3TprlbJmiaGi4SAZ9NimJPmh5pNSz1559/YuTIkXBwcMCff/7Z6Lljx47V+sknTpyImzdv4p133kFOTg6ioqKQlJSkKDLOysqCWHw3/woNDcWWLVvw0ksvoUePHmjVqhXmzp2L1157TevntDahPnXTv2+V16CksgYeThw2ILJ2+tgSgBs3qtJ2TZuWbJkgnxqemlGInJJKLPwrHfll1aislTV9MWlNq+Rm/PjxyMnJQUBAAMaPH6/xPJFIBKm0kblwasyePRuzZ89We9+uXbtUjsXExODAgQM6PYc1c3dygI+rIwrLqpFVUI5urXRbSJGILI8uWwI0hRs33tU3wkeruhhNa9poy04sUiSUOcWVWJJ0Ft/tz0Sot/Odou+65+AQVfNpNSwln6Uk/29N/3RNbEg/5HU3V1l3Q2QT9JmQ5JdWcWjqDnldjKbEBtB/XczEe0JhLxYh7UYJJq88iLk/HsfklQcwaMkO1kS1gNY1N2S+5MkN95gism5SmYCUSwW4kFuqt8dcsOkMP0jriesapNi3r74gTycsf7y33utiUjMKUKsmuWTRd8s0a0nb7du3Y/v27cjLy1OauQTUbZFAxiX/Q+SMKSLrlZSWjYSN6XobjqpP/kFqiA9vS3M0qwhXCsrhYCfCl5N7obJWZrBhInntlDrckqFldE5uEhIS8N577yE6OhrBwcGKDTXJdELl08ELmNwQWSP5zChdBo+eHhiOYV2CcKusGgs2NZ4U8YP07npBH26pWyF/XM8QxBk40dNl6jmLvnWjc3KzYsUKrFmzBk888YQh4qFmCONaN0RWS9eZUeoW6IvrFoQ1+zKwYNMZjdfZ8gepul6xXedvIikt26A9WYaeem7LdE5uqqurMWDAAEPEQs3U5s6w1PWiCtRIZXCwYykVkbXQdmbU7CGRGBjpp3b4xE4sgp+76krt6tjaB+mW07l44UfV7RYKblcbfKjOGFPPbZXOn4L//ve/sX79ekPEQs0U6O4EBzsRpDIB36dcQcqlAs5+ILIS2iYb7QPdENPOV+OQEj9IVckE4L+bz6rtFTPGQofyqeeaBgFFqOuJa+nUc1ukc89NZWUlvv76a2zbtg09evRQ2evhk08+0VtwpJ2t6TmQ/+2991ddcRr3jiGyDvpKSppawwWwvQ/SSyUipU1GGzL0UJ186vnMtUchApR+L4aaem4rdO65OXnyJKKioiAWi5GWloZjx44p/h0/ftwAIVJj5IWGDb9ZcBohkXWQJyWaaPvtXpu9jSbdE4q/Tt6wmd7fkhrtzjPkUJ2mLRn83SWcvdYCOvfc7Ny50xBxUDM0VmjI2Q9E1kGelDy39qjKfbp+u5d/kGqaUv7ptguK/7aF3l8PLXerMfRQXf0tGd7acAqXbpZhxr1trbrtDY2VpxbMkDvYEpH56BfhC0c1EwWas7DciG7B2PvaUPwwoz8+mxSFl4Z1UHueLfT+tvMQEOShudDamDUv8i0ZHu8fBgDYejrH4M9pzbTquZkwYQLWrFkDDw8PTJgwodFzf/vtN70ERk3jNEIi6yZfe2XtgUxUS2XoFOiG+WO7tnj/IfkHqVQmYNCSHWrPsYXeX7EIeHNUR7zw40mV+0xV8xLXNQgJG9Nx+Mot5JVW2lSBtz5pldx4enoqFuvz9OTGjOaCsx+IrJe6tVeyS6pQXFGDcVGt9PIcXETu7vtjw4LeIBMNy4V4OaNnqBdOXC3C1tO5ip4c0o1Wyc3q1avV/jeZlrF2sCUi49K09kpJRY1e115h7y/w27HrAIAHe7XCI9Ghit4SU+7KPbJbEE5cLULioSy4O9mbPB5L1Ky9pcg8cBohkfWRCcCiRtZe0edQka33/lZLgU2ncgEAj0SHmk3vlIuDHQDg1PUSzP3xOADbKPDWJxYUWzhN0wgNtYMtERmWLmuvtJStLiInlQk4mFGIP7PEuF1Vi1ZeTuhnJj9jUlo25v95WuW4LRR46xOTGysgn/0wpIM/AOCh3q2w97WhTGyILJAx117RZu0ba+v9TUrLxqAlO/D4qsPYk1P3EVhcUYut6aafndTU8h6AYVdMtiZMbqyEnViE6DvfPGQCrOrNiMiWGHvtFU29vwCweEJ3q/qSJF/0tGER9e2qWrPoFeHyHvqjVXLj4+OD/Px8AMBTTz2F0tJSgwZFzRPu6woAuFJQZuJIiKi5TLH2SsO1bzoEugEArhSWI+VSAf44ft3iVy3WZnd1U/eKsMBbf7RKbqqrq1FSUgIA+Pbbb1FZyYY1R2F3dgfPKiw3cSRE1FxiEfDWqE5q7zPkRAH52jfjolohPrZuYb/l/1zC5JUHMPfH45i88gAGLdlh8t6N5rKEXhFbL/DWJ61mS8XExGD8+PHo06cPBEHAnDlz4OzsrPbcVatW6TVA0l6bO8lN/u1q3K6qhZuEk+GILNGQjv5wchCjskamdNxYa6/I7jyt0KATQ17UaomTFSyhV4TLe+iPVp9+a9euxaeffopLly5BJBKhuLiYvTdmyMPJAT6ujigsq8aVgjJ0DeGCi0SWaN+lAlTWyODv5oilk3oh/3bLViTWhVQmYMGmdLX3WfKqxZbQK9LY8h5y1lbgbShaJTeBgYFYvHgxACAiIgLff/89fH3NYz0AUtbGxwWFZdXIKihnckNkof4+Xbf2yqjuwRgY6WfU57bWVYstpVdE0+amns72WPJQD4vrMTMVnWdLZWRkMLExY/K6m8wC1t0QWaJaGbDtTB4AYHSPEKM/vyUM3zSHvFdEU2IDmE+vSP0C73/1qEtmosN8mNjooFlTwf/55x+MGTMGkZGRiIyMxNixY7Fnzx59x0bNEHZnxlRWIWdMEVmic8UilFbWIsBdgugwb6M/vyUM3zTXiG7B6Buu2qbmuOipvMD7ufvaAQAOXC5AjVTWxFUkp3Nys3btWgwbNgwuLi6YM2eOorj4gQcewPr16w0RI+kgzKeu5+YKe26ILIp81dxt1+t6DkZ0C4LYBL0I1rxqcVlVLU5dr5v5++6/OmFqeynWPhVt1ouedgn2gI+rI8qqpTiWVWTqcCyGzsnNwoUL8cEHHyAxMVGR3CQmJmLx4sVYsGCBIWIkHciHpZjcEFmO+qvmXi6te1vedDLbJNOuG1u12NyGb3SVnJ6Lihopwnxd8FjfUPTxE9DPzDekFItFGHSn7mr3+ZsmjsZy6JzcXL58GWPGjFE5PnbsWGRkZOglKGo++bDUjeIKVNVKTRwNETVF06q5hWXVJls1V9OqxZ4uDmY3fKMNqUxAyqUC/O+fSwCAsT1DIBKZb0LT0L13ttbZc4HJjbZ0XgglNDQU27dvR2RkpNLxbdu2ITQ0VG+BUfP4uTnCxdEO5dVSXLtVgXb+bqYOiYg0aGovIVNOux7RLRixXYKQmlGIb/dnIul0DjoEuFlcYpOUlq0y8+jH1KvoGOBqwqh0M7h9Xc/NyevFuFVWDW9XRxNHZP50Tm7+85//YM6cOTh+/DgGDBgAANi3bx/WrFmDzz77TO8Bkm5EIhHa+LjgbE4prhSUMbkhMmPmPu1aXtQa7ueCrek5SM28hYt5pYgMcDd6LM0h7xVrmDzm367CCz+ewPQOIowySWS6CfRwQsdAd5zLLcXei/kY09P4s+gsjc7JzcyZMxEUFISPP/4YP/30EwCgc+fOSExMxLhx4/QeIOkuzFee3LDuhsicWcq062BPZzzQORDJ6bn4aOs5jOwWbLRFBZtLm16x3zLFeFUmQMu9Sk1qcHs/nMstxa9HrkImCGbf/qbWrPX5H3zwQTz44IP6joX05O4GmkxuiMyZJU277hjohuT0XCSl1f0D6mZNGWM7iObQplesqFqEw1duYVCHQOMF1kzOjnYAgF3n87HrfN1G1ubc/qbWrHVuyLy14QaaRBbBUqZdJ6VlY9nOSyrH5XtNmeNmmtr3ilUZOJKWS0rLxpc7LqocN+f2NzUmN1YozKeu5yazgAv5EZmz+tOuGzKXaddNDe8AdUXPUpm6M0xH+14xiYEjaRlLbX9TY3JjheRr3VwrrOALnsjMjegWjH8PjlA5bi6r5upS9GxO5L1imogAeDkKJlkFWheW2v6m1qyaGzJvIV7OcLAToVoqQ05JJVp5OZs6JCJqRElFLQBgRNdABFTfwPDB/RATGWAWxaKWUvTckLxX7Lm1R1Xuk7fqhHCZWbRxYyy1/U1N556bnTt3GiIO0iM7sQitve+sVJzPoSkicyYIAnbfWZzt0T6tzG7VXEsqem5oQKQfHOxU2zHI0wlfTOqJnr7m37Ntye1vSjr33IwYMQKtW7fG9OnTMW3aNC7cZ6bCfF2QkV+GK4XlGGDqYIhIo0s3byO7uBKO9mJEh3lj5wVTR6RMPryTU1ypcUftIDMoelZn88ls1EgFtPN3xX/Hd0NeaZViCrVMWovNV0wdYdMsuf1NSeeem+vXr2P27Nn45Zdf0LZtW8TFxeGnn35CdXW1IeKjZuIGmkSW4Z8703r7Rfgopvuak8b2mpIzddGzJr8cuQYAeCQ6FDHt/DAuqhVi2vmaZayaWPNeX4akc3Lj5+eHl156CcePH8fBgwfRoUMHPP/88wgJCcGcOXNw4sQJQ8RJOmp9J7lJuZSPlEsFLCwmMlPyzRDvbe9v4kg007TXFAC8FNvB5EXP6mTml+HwlVsQi4AHe7UydTgtoqn9zaXo3By1qKC4d+/eCAoKgq+vLxYvXoxVq1bhq6++QkxMDFasWIGuXbvqK07SQVJaNr7aWbcmwolrxZi88gAXeyIyQ5U1UhzMKAAADO7gZ+JoGld/r6m80kr8cfw6dpy9iQt5t00dmhKpTEBqRiHW7KvbyHlwez8Eelh+PYq8/Q9eLsDT3x5GRY0UX0zuhehwDkep06yp4DU1Nfjll18watQohIWFYcuWLfjyyy+Rm5uLixcvIiwsDI888oi+YyUtyPdSuVVeo3Sciz0RmRepTMB3KVdQWSODt4sDIi1gHzj5XlPjolohPrYjAODvUzeQlJaNP45fN3kvcVJaNgYt2YHJKw9gS3rdKsonrhZbzfuenViEAZF+io00D2XeMnFE5kvnnpsXXngBP/zwAwRBwBNPPIEPPvgA3bp1U9zv6uqKjz76CCEh3NjL2Mx5h2EiuqvhTtW3ymsw+IOdeHNkRxNHpr1urTwR7uuCzIJypenWpuol1rRJZnFFDWauPWpVwzf92/pia3ouDlwuwMz725k6HLOkc89Neno6vvjiC9y4cQNLly5VSmzk/Pz8OGXcBLjYE5H5k38IN/xbzSmuxAs/nsCJAsv44pGUlo1MNRMWTNFLbGur+PZvW7dD/OHMQtRIZSaOxjzpnNzMnz8fjzzyCCQS5SWra2trsXv3bgCAvb097rvvPv1ESFrjYk9E5k2bD+HfMsVm/yEs/znUMUUyYWtf7DoFucPT2QFl1VKkXS82dThmSefkZsiQISgsVH2BFBcXY8iQIXoJipqHiz0RmTdddqo2Z+aWTNjaFzuxWIR+d9a1OXDZOhI2fdM5uREEASKRardpQUEBXF1d9RIUNY+l7DBMZKusZadqc0smbPGLnXxo6sDlAhNHYp60LiieMGECAEAkEuHJJ59UGpaSSqU4efIkBgzgWrimJF/saebaoxABSl3fXOyJyPSsZadqc0sm5F/sNPUmWeMqvg3rbhzsuA92fVq3hqenJzw9PSEIAtzd3RW3PT09ERQUhGeeeQZr1641ZKykBS72RGS+rGWnanPrJa6/iq+6WADr+2LXKcgdHk72KKuWYvmuiyafhm9utO65Wb16NQAgPDwcL7/8MoegzJh8saeUS/mYuioVMgH4+bkYxWaaRGQa1rJTdWO9xHLGTibC/dR/JgVZ6QKmW9NzUFVbN1Pqk+QLAC5wsdZ6dF7nZv78+YaIg/TMTizCoPb+CPd1xeX8MmQVlDO5ITIDI7oFY2A7X+y7pFwrEeTphDdHdoT0yhETRaYbeS9x/fV6gLok7eNHexrtA1a+IvHnO87XxdU1ANMGtEVeaaVik0xzTxZ1pWlNH/k0fPbSa5nc9O7dG9u3b4e3tzd69eqltqBY7uhR1W8kZDoRfnXJzaX8MgyINO/l3YlsxfWiCgDAq3Ed0MrbxeJ2qparvyVDbkklPtxyFteLKnE4sxB2YpHBk4uGiyECwKHMIozvVY1xUZa9n5QmXKxVO1olN+PGjVMUEI8fP96Q8ZCeRdzpqs24WWbiSIgIAHJLKpFZUA6xCHg8JhweTg6K+2RSEwbWTPItGQDgSNYtfJ9yBetTr2J96lUAhluxWFPvRWFZtVX3XugyDV/+e7FFWiU39YeiOCxlWSL87yQ3+ea1uR2RrTp4Z+2XLiEeSomNpUtKy8baFNVuJ0MMldhy74W5TcM3V5w7ZuUUPTf57LkhMgcH76xL0i/Cer5VG3v7A3NbRNCYzG0avrnSqufG29u70Tqb+tStXkym0+7OTsNXb1WgulYGR3vms0SmJO+56WdFa64Ye6jElnsv5NPwc4or1SaT1rimT3NoldwsXbrUwGGQoQS4S+DiaIfyaimu3ipXJDtEZHz5t6twMe82RCJY1YePsZMNW+69MMdp+OZIq+Rm2rRpho6DDEQkEiHCzxWnb5Qg42YZkxsiE5IPk3QMdIeXi6OJo9EfYycbfSN8EOghQW6J+m0qrL33QtM0fA8ne3zwcA+rLKTWlVZjFCUlJUr/3di/5li2bBnCw8Ph5OSEfv36ITU1VavrfvzxR4hEIs7gaoK87uYyi4qJTOpuvY11feg2tWIxoJ8Vi6UyASmXCvDXyRuI8FW/aJ+1rkjc0Ihuwdj72lD8MKM/RncPAgAMivRjYnOH1jU32dnZCAgIgJeXl9r6G/mGmlKpbnMZExMTER8fjxUrVqBfv35YunQp4uLicO7cOQQEBGi8LjMzEy+//DIGDx6s0/PZorYsKiYyC4p6m7bWU0wMaDdUMumeUPx18kaz175Rt6YNALg62qGs+u7njrWuSKyOfBq+nViETadykJp5S+Pm1rZGq+Rmx44d8PGpy7h37typ1wA++eQTzJgxA9OnTwcArFixAps2bcKqVavw+uuvq71GKpViypQpSEhIwJ49e1BUVKTXmKyNfDr4Za51Q2QSUpmAHWdycTanFADQx8z3jmoOTUMlcp9uu6D4b13XvtG0pg0AlFVL8dKw9gj3c7XaFYmb0qO1JxztxMi/XYWM/DK0ZfmBdsnNfffdp/a/W6q6uhpHjhzBvHnzFMfEYjGGDRuGlJQUjde99957CAgIwNNPP409e/boLR5rFeFX90Jnzw2R8anrcRi/bJ9V9i7UX7E4r7QSmfnl+HTbeZXzdFn7prFp5kDdMNSPh65i72tDbS6pkXNysENUqBdSMwtxKLOQyQ2asbcUANy6dQvffPMNzpw5AwDo0qULpk+frujd0VZ+fj6kUikCAwOVjgcGBuLs2bNqr9m7dy+++eYbHD9+XKvnqKqqQlXV3aIzeV1QTU0NampqdIq3KfLH0/fjtlSoZ13hYl5pFW7droCbpFm/drNirm1tjdjWzbfldC5e+PGExj2AvpjUE3Fd777/WUtbR7fxgFTmjvs/3q32/rsL7Z3G/e19G01KDmo5zTzlYp5OtUzW0tZyfcI8kZpZiAOX8jEhyrySZn21tS7X6/wpt3v3bowZMwaenp6Ijo4GAHz++ed47733sHHjRtx77726PqTWSktL8cQTT2DlypXw89Nun6RFixYhISFB5fjWrVvh4mKYjSSTk5MN8rgt4eZgh9s1Iqz7YytCrSipN8e2tlZsa93IBCDhqN2dxEb5w1u4879v/XYcNZlSNPxst4a2vlAsQk6Jncb765KSKnyZmIT2npoX9zuSLwKg+XHktu45iIIzui8SaA1tDQBCUV07/XPmBjZvvmrqcNRqaVuXl5drfa7Oyc2sWbMwceJELF++HHZ2dS84qVSK559/HrNmzcKpU6e0fiw/Pz/Y2dkhNzdX6Xhubi6CgoJUzr906RIyMzMxZswYxTGZrG7Ld3t7e5w7dw7t2rVTumbevHmIj49X3C4pKUFoaCiGDx8ODw8PrWPVRk1NDZKTkxEbGwsHB/NaVv37G6k4fKUIIZ16YVQP88rqm8Oc29rasK2b52BGIYoOHG7kDBGKqgH/Lv0VPQ7W1NYbT2YD6U1/Hsj8IxE3NFKl90YqE3D4yi24XSoALmQ0+TjDB/fTuefGWtoaAO6tqsXXC3egsEqEXgOHItjTfNb40Vdb6zIjW+fk5uLFi/jll18UiQ0A2NnZIT4+Ht99951Oj+Xo6Ig+ffpg+/btiuncMpkM27dvx+zZs1XO79Spk0ry9NZbb6G0tBSfffYZQkNDVa6RSCSKTT/rc3BwMNgL2pCP3Vxt/d1w+EoRsm5Vml1sLWGObW2t2Na6KSiv1fq8hu1qDW0d7KV+qnZDX/2Tgd+PZ+Pt0Z3h7SpR1Or8kJqFnJKmF/2Tr2kTExnQrJoba2hrAPB2cEC3Vp44ea0Yx66VoI2fu6lDUtHSttblWp2Tm969e+PMmTPo2LGj0vEzZ86gZ8+euj4c4uPjMW3aNERHR6Nv375YunQpysrKFLOnpk6dilatWmHRokVwcnJCt27dlK738vICAJXjpIxFxUTGZcur6AJNbxNQX3ZxJZ5ff0zn57CVNW20dU+4D05eK8bBjEKMi2pl6nBMSqvk5uTJk4r/njNnDubOnYuLFy+if//+AIADBw5g2bJlWLx4sc4BTJw4ETdv3sQ777yDnJwcREVFISkpSVFknJWVBbGY+yG1FDfQJDIuW98DSJu1b1rKlta00UbfCB98szcD/5zLwx/Hr9vs1HhAy+QmKioKIpEIgnD35fnqq6+qnPfYY49h4sSJOgcxe/ZstcNQALBr165Gr12zZo3Oz2eL2t1Z6ybjZhkXeSIygvof7g3ZSo9DU2vfNNfsIZEYGOlnsx/cmpRU1M0mul5Uibk/Hgeg+5pC1kKr5CYjo+liLjJvbXxdIBIBpVW1yL9dDX931TokItKvEd2C8dqITlicpLy0hS31OMjXvvk0+Ty+3HlRL4/ZPtBNL7uLW5OktGy8+stJleO6rClkTbRKbsLCwgwdBxmYxN4OrbyccO1WJb5PyURMO37rITIGe7u6v7HeoV6YNjDcJocK7MQiDIz001tyY611Ss3V2EKHd9cUSkdslyCbed01ezW39PR0ZGVlobq6Wun42LFjWxwU6V9SWjbySut+V5/vuIjPd1y02e5KImM6cuUWAGBY10CbLvLUpcBYE2uvU2quVC0XOkzNKLSZHi+dk5vLly/jwQcfxKlTp5TqcOQ1HLpunEmGp2lfFlvtriQyFkEQcCizLrm5J9y2P5BbWmBsK3VKzZFXql09k7bnWQOdpyHNnTsXERERyMvLg4uLC06fPo3du3cjOjq6yeJfMr6muiuBuu5KqcwQcxmIbFtWYTnyb1fB0U6M7q08TR2OyckLjIOascBckKcTv4hpYOvLDqijc89NSkoKduzYAT8/P4jFYojFYgwaNAiLFi3CnDlzcOyY7msVkOGwu/IuqUxQbOgX4O6EPmHeOHLlluK2rdVBkOEdvtNr0721J5wcmt5CwBY03FwzwN0Jt8qqsWCT8oyqIA8JJvdtY9O7fWvL1pcdUEfn5EYqlcLdvW7lQz8/P9y4cQMdO3ZEWFgYzp07p/cAqWXYXVlH3c7MYlHd/j9yrEEifTt8pRAAEB3mbeJIzIudWKTyZSqum3LCw2RGe40N+dnqcJ7Ow1LdunXDiRMnAAD9+vXDBx98gH379uG9995D27Zt9R4gtQy7K+/WHDXswWo4EievQUpKyzZidGTN5D03fZjcNEme8IyLaoWYdo3vFE6qNA35BXrY5nCezj03b731FsrK6la5fe+99/Cvf/0LgwcPhq+vLxITE/UeILWMrXdXNlZz1JD8nDd+P4WKGhmCPPjtkZqvqLwaF/JuA2ByQ8Zxd8ivADPXHkVRRQ0+fLgHBnfwN3VoRqdzchMXF6f478jISJw9exaFhYXw9vbmqrdmyFa7K+X1Nfsu3tR5ZdTCshq8lHgcAIeqqPnkU8Db+rvC142LZpJx1PWA+eH+jv7YcPwGDl25ZZPJTYs2bbp69SquXr0KHx8fJjZmTFN3pbXOPkhKy8agJTsweeUBfLnzUosei0NVpCupTEDKpQKsT80CAPRpw14bMr6+EXU1TQcvF5g4EtPQObmpra3F22+/DU9PT4SHhyM8PByenp546623UFNTY4gYSQ9GdAvG3teG4q3RnQEAAe4S7H1tqFUmNurqa5qL0+VJF/UT6+1n8gAAW9NzmRyT0fVrW1dqcOxqEapqbW/9OZ2TmxdeeAFff/01PvjgAxw7dgzHjh3DBx98gG+++QZz5swxRIykJ3ZiER7sVbdCal5pldW94HWpr9FF/enyRJpoSqyLK2rY+0dG19bPFX5uElTXynDiarGpwzE6nZOb9evXY82aNXj22WfRo0cP9OjRA88++yy++eYbrF+/3hAxkh75ukng5+YIALiQe9vE0ehXU2v6tJS1T5en5tMmsWbvHxmTSCRCvzsTRVIzbG9oSufkRiKRIDw8XOV4REQEHB0d9RETGViHwLp1is7nlpo4Ev3SNfnQtYY6v7SKH06kli6LZRIZi3wW7EEbfN3pnNzMnj0bCxYsQFVVleJYVVUVFi5ciNmzZ+s1ODIMa01utF2rZ/aQSPwwoz/OLhiJH2b0x6eP9oSPqyOaynUWbDqDQUt2cHiBVHCxTDJH8rqbI1duoUYqM3E0xqXVVPAJEyYo3d62bRtat26Nnj17AgBOnDiB6upqPPDAA/qPkPSuY1BdcnPOyoal5Gv6aPoGLV/T56XYDoqp7/JVUp0d7bTa0I+bjZI6XCyTzFGHAHd4uTigqLwGadeL0cuGZu5pldx4eipv+PbQQw8p3Q4NDdVfRGRwHQLdAADnc6yj56b+nlGD2/vhp8PXVM5pak0f+XT5hls0NCTceayEjemI7RJkdesDUfPY+mKZZJ7EYhGiw7yx7UweVu/LRGWNzGYWJtUquVm9erWh4yAjan9nWCqnpBLF5TXwdHEwcUTNt+V0Lhb+fU4lIXG0E6O6XjdskBaL8clX91yzLwMLNp3ReJ4tbTZK2qm/WGZD1rxYJpm3pLRsRb3Nnydu4M8TN2xmYVKdVyiWu3nzpmKjzI4dO8Lf3/ZWQLRUHk4OCPF0wo3iSpzPK8U94Zb5bfJEgQirU06o/aZcLZXhpWHtdd5R2E4sgp+7dqvJsn6C6pP3/r2UeAIVNXeXWdAmsSbSN/nSBA3fH21laF3nguKysjI89dRTCA4Oxr333ot7770XISEhePrpp1FeXm6IGMkAOgRZdlGxVCbgt0yxxvoYEYAfD13Fv3qE6LwJH+snqLlGdAtGkEddcvzM4Aj8MKO/VS6WSeatsaUJbGVhUp2Tm/j4ePzzzz/YuHEjioqKUFRUhD/++AP//PMP/vOf/xgiRjKAjvIZUxZad3P4yi0UVWtOWFoy9VZeP6Hp0UWo23OK9RPUUMHtKmQU1H3Je35IJHe3JpPg0gTNSG5+/fVXfPPNNxg5ciQ8PDzg4eGBUaNGYeXKlfjll18MESMZgHw6+DkL7bnJK61q+iQ0b+hIXj8BQG2CI4D1E6SefLPMyAA3eLlw3S8yDS5N0Izkpry8HIGBgSrHAwICOCxlQRTJTU4pBMHyuiYDtKyLae7QkabNRgGgX7gPPJ0d8cfx60i5VGDVXbukG3lyEx1mO1NuyfxwaL0ZBcUxMTGYP38+vvvuOzg51TVMRUUFEhISEBMTo/cAyTAiA9wgEgG3ymuQf7sa/lomC+YiOswbXo6CxqEpfUy9lc+ekk8zL62sxVsb0nAwsxCTVx5QnGcrsw+oaYfvJDd9mNyQCXFpgmb03CxduhT79u1D69at8cADD+CBBx5AaGgo9u/fj88++8wQMZIBODvaIczHBYBlFhXbiUWYEK5+xU19Tr21E4sQ084X46JaKfbkakg++4ArF9u2yhopTl2r26Aw2kJnIJJ1aGpoHbD+oXWdk5vu3bvjwoULWLRoEaKiohAVFYXFixfjwoUL6Nq1qyFiJAOx1G0YpDIBBzMKUSEFJPaqf5xBnk56n+Yon32gjq3MPqDGpV0vRrVUBl9XR4T7upg6HLJxmobWHe3FVj8NHNBxWKqmpgadOnXCX3/9hRkzZhgqJjKS9oFu2Jqei63pOegU5GERK1cmpWXXW0XYDoAAsQiYM7Q9Ivx1W9NGF7rMPuDCfrap/pCUSGTef0dkG+oPrZ+8VoRFf58FBAFDOgWYOjSD06nnxsHBAZWV1ltdbUuS0rKx7kAWACDlUl0NiblvCilflKphkiETgM+2X4DEXmywqbecfUBNOZx5p5g4nPU2ZD7kQ+vP3NsWfm4SVEsFHMsqMnVYBqfzsNSsWbOwZMkS1NbWGiIeMgJ5klBUUaN03JxrRxpblErOkMNCnH1AjREEAUez5D03rLch8yMSiTDgTq/y/ov5Jo7G8HSeLXXo0CFs374dW7duRffu3eHq6qp0/2+//aa34Ej/mlq50lw3hTT1sBBnH5AmUpmADcevo7CsGvZiEToHu5s6JCK1BrTzxZ8nbmD/pQLEmzoYA9M5ufHy8lLZFZwsh6mThOYy9bBQ/Y0RRYDaBMfaZx+QKuUaMKBWJuCBj//h0gBklgZG+gEAjl8tQllVLVwlzd5e0uzp/JNxh3DLZuokobnMYVhIPvug/ocZUDf74PNJUfwwszG2vjEhWZ5QHxe09nbGtVsVOJRZiPs7Wm9hsdY1NzKZDEuWLMHAgQNxzz334PXXX0dFRYUhYyMDMIckoTnMZb+nEd2Csfe1ofhhRn/FOhLVtTK0D+RQhC3hxoRkqRR1N5cKTByJYWmd3CxcuBBvvPEG3Nzc0KpVK3z22WeYNWuWIWMjAzCXJEFX8mEhTfUugPGGheSzD6YPjMCwznXffD7aco7bMdgQbkxIlmpAu7qhqa3pOVb9nqV1cvPdd9/hq6++wpYtW7BhwwZs3LgR69atg0ymfpVYMk+WvHJlXNcghKjZ68kQi/Zpq1NQXY/N32k5mPvjcYuYUk8tZ6nDu0RVNVIAQGZ+uVW/Z2md3GRlZWHUqFGK28OGDYNIJMKNGzcMEhgZjqaVK71dHMy6TuDY1SLcKK6ExF6E/02JwtT2Uqx9Khp7XxtqkpiT0rKxbOcllePmPKWe9MNSh3fJtiWlZeP1306pHLfG9yytk5va2lrFRplyDg4OqKmp0XAFmbP6tSMx7eqGoB6JDjXbxAYAElOvAgBG9wjB0E4B6OMnoJ+JVlVmzYVts9ThXbJdtvaepfVsKUEQ8OSTT0Iiubt7dGVlJZ577jmltW64zo3lkNeOXClohZRLhYpN/8yJVCYgNaMQV2+VY8Px6wCAyX3bmDgqy51ST/pRf2mAhoxdA0akDVt7z9I6uZk2bZrKsccff1yvwZBp9Az1AgCcul4MqUwwmzfkhmuIAHUfKvmlVQBMOzuJNRc0olswZg+NxBc7LiodD/J04jo3ZHZs7T1L6+SG69tYr/YBbnB2sMPtqlpcvnnbLKY1a1pDRCoT8Py6o/hiUk+TxCXHmgsCAOHOC3RwpB8ejm5tsI1biVrK1t6zdN5biqyPvZ0Y3Vt5AqhbudLUtNlHauHfZ2HKoWHWXBAAxVTv0T2CMS6qlcE2biVqKVt7z2JyQwCAqDZeAIAT14pMGgeg7dhwFS6VmO5DxJKn1JN+VNZIcfzO34u1fCCQ9WrsPcsa68SY3BAAoGdrLwDAiaumLyrWdsy3xMQT9TRNqQeA9yd0Z82FlTt5rRjVtTL4uTkiws+16QuITEzjMiCujma9DEhzWO+uWaSTnqF1w1JnsktQWSOFk4OdyWLRdszXw8HAgWhhRLdgxHYJQmpGIfJKK/HVzos4l3sbReVcIsHapWbULV/fN8IHIpF1fNsl61f/PevTbeeRmlGI8VEhVpXYAOy5oTtaeTnDz80RtTIB6dklJo1Fu7FhCdp5mMd6DPIp9eOiWmH6wAgAwC9HrkIQzCM+MozUzFsAgHvCOSRFlkX+njUtJhwAsPtCvmkDMgAmNwQAEIlE9Yamikwaizb7SL05shPMcWh4VI9gODmIcelmGdYezLLqvVtsWa1UhiOZdcXErLchSzWovR/sxCJczLuNq4Xlpg5Hr5jckIJ8vRtTJzdAXdfpg71aqRyX7yMV1zXQBFE1zcPJAT3uzDx7e0OaVe/dYsvOZJeirFoKdyd7dAryMHU4RM3i6eyAPm28AQC7zt80cTT6xZobUlAkN2awUrEgCDh1vS6OZ+6NQNcQT6U1RMx124+ktGzFcEV98r1brK1oz1YdvFNvEx3mbTWzS8g23d/JH6mZhdh1Ng9P9A8zdTh6w54bUujZuq7HISO/DD+kXjHpcMrxq0W4mHcbTg5ivDC0vUWsISJfn0cda9y7xRZJZQJSLhXgjztbgUSz3oYs3JCOAQCAfZfyUXlnx3BrwJ4bUjhwuQB2YhGkMgHzfksDULeokzGXkpfvJfXljgsAgBFdg+DuZAbTorRga3u32Bp124Gs2puBdv6u7I0ji9UpyB1BHk7IKanEt/szEeTpZBUrbTO5IQCatzsw5nCKug+P3RfykZSWbREfHra2d4st0fT3UVhWzeFGsmgikQjt/F2RU1KJRX+fVRw39hdbfeOwFDW63YGxhlPkHx4Nez5u3fnwsIRiXFvbu8VWmMPfB5GhJKVlY9+lApXj8i+2lvDeqw6TG9JpOMUQrOXDw9b2brEVpv77IDIUa64TZHJDJh9OsZYPD+43ZZ1M/fdBZCjW8t6rDpMbMvlwijV9eGjau8VNYse6DAtl6r8PIkOxpvfehlhQTIrhlJziSo2rAgcZcDjF2j486u/dsvV0Dlbvz4SHkwOGdwkydWjUDKb++yAyFGt7762PPTfU6HCK/LYhh1PkHx6aWGKtinzvltdGdoK7kz1uFFfioAV27ZLy30dDxvj7IDIUa64TZHJDADQPp3i6OBh8OMWaPzycHOwwuntd2/1+7JqJo6HmGtEtGF8+1kvlQ0C+HQiHG8kSmfqLrSGZRXKzbNkyhIeHw8nJCf369UNqaqrGc1euXInBgwfD29sb3t7eGDZsWKPnk/ZGdAvG3teG4ocZ/TG0U92qlUM6+hvljTsq1FvtRpjW8OEh3yNr44kb+OXIVW6kaaGCvZwhAHBxEOPTiVH4YUZ/7H1tqEW/Nok0fbEN8JBY9HuvyWtuEhMTER8fjxUrVqBfv35YunQp4uLicO7cOQQEBKicv2vXLkyePBkDBgyAk5MTlixZguHDh+P06dNo1Up1o0XSjXw4RYCAHWfzsOdCPmQyAWIDZ+4/H74KmQDcE+aN+OEdkVdaaRWrZAJAwe1qiEVARY0ML/98EoDlL5Bli/ZfzAcADO7gr3ZTVyJLVb9O8I3fTyEjvwzP3tvWot+fTN5z88knn2DGjBmYPn06unTpghUrVsDFxQWrVq1Se/66devw/PPPIyoqCp06dcL//d//QSaTYfv27UaO3LpFh/nATWKP/NvVSLthmI005fv0/H7sOr7dnwkAeKx/G8S087WIvaS0kZSWjVnrj6JhR42lL5Bli/beSW4GRfqZOBIi/ZN/sZVvnvl3Wo6JI2oZk/bcVFdX48iRI5g3b57imFgsxrBhw5CSkqLVY5SXl6OmpgY+PuoLnqqqqlBVVaW4XVJSAgCoqanR+87S8scz1x2rdSECENPWB8ln8rAtPQedA131+vhbTufiv5vPIqfk7u9GBAAymVbtZwltLZUJePfP0xoXJxQBSNh4Gve3N+8kzhLa2tAqqqU4cqVut/e+YV4Gawu2tfGwrdWL7eyHBZuAQ5m3kJVf2uhkD23pq611ud6kyU1+fj6kUikCAwOVjgcGBuLs2bMarlL22muvISQkBMOGDVN7/6JFi5CQkKByfOvWrXBxcdE9aC0kJycb5HGNzbdKBMAOf6ZeRLuKc3p73BMFIqw6L+80vPuhLkDASz+fxKkTx9HTV7uaFHNu6wvFIuSU2Gm8v26BrCp8mZiE9p7mX4Njzm1taGeLRKiR2sHTUcCZ1H9w1sC5qC23tbGxrVW1dbPDpVIRPv1lJ+4P1t97U0vbury8XOtzTV5z0xKLFy/Gjz/+iF27dsHJSX12OW/ePMTHxytul5SUIDQ0FMOHD4eHh4de46mpqUFycjJiY2Ph4GAZO1k3pndJJX78cDeulInQ/75h8HF1bPFjSmUCFn28G0CVmntFEAH4O9cFr065t9HeDEto640ns4H0U02e17ZrFEb1MN+xbUtoa0NL23IeQCaGdm2F0aO7Gex52NbGw7bWrMAnC+9tOotTZR4Y3LotAtwliA7zbnYPs77aWj7yog2TJjd+fn6ws7NDbm6u0vHc3FwEBTW+4NlHH32ExYsXY9u2bejRo4fG8yQSCSQSicpxBwcHg72gDfnYxhTq64BOQe44m1OKL3dlYFT34BYX+B6+VKA0FNWQvDfj2LVSxLTzbfLxzLmtg720G8oL9nI125+hPnNua0M7kFE3JDW4vb9R2sCW29rY2NaqXCV17XHxZhnif677gqaPSRAtbWtdrjVpQbGjoyP69OmjVAwsLw6OiYnReN0HH3yABQsWICkpCdHR0cYI1SYlpWXj6q26bsDvD1zB5JUHMGjJjhYVwVrzct8NWfMCWbZCKhOQnJ6DU9friur7t2064SayZElp2Xj9N9UeZ0ubBGHy2VLx8fFYuXIlvv32W5w5cwYzZ85EWVkZpk+fDgCYOnWqUsHxkiVL8Pbbb2PVqlUIDw9HTk4OcnJycPv2bVP9CFYpKS0bM9ceRVmVVOl4S1/g1rzcd0PcSNOyJaVlY9CSHZjx3RHFsYeW77eYN3ciXcl3Cdc0CQKwnF3CTZ7cTJw4ER999BHeeecdREVF4fjx40hKSlIUGWdlZSE7++6byfLly1FdXY2HH34YwcHBin8fffSRqX4Eq2PIF7it9WZoWiALAJ69z7LXkbBm8uS+4Y7JlvbtlUgX1rRLuFkUFM+ePRuzZ89We9+uXbuUbmdmZho+IBunywtcm7qY+uS9Gc+tPapyn6Uv961J/QWy8korkZyei79OZuPyzTJTh0ZqNJXc103hT0dslyCrep0SWVPZgMl7bsj8GPoFPqxzIPzcVGdeWcNWC5rIF8gaF9UKcx5oDwDYcTYPBbc1F1eTaVjTt1ciXVhT2YBZ9NyQeTHUC1wqE5CaUYi/Tt5A/u1qeDnbY+mkXiiuqLGarRa00SHQHT1be+LEtWIs3XYB0eHeNvXzmztr+vZKpAt52UBOcaXanksR6r6EWkLZAJMbUmGIF3hSWjYSNqYrfSOWyoDKGinGRdnePj2dgz1w4loxvj9wBd8fuAKA+02ZC2v69kqkC3nZwMy1RyEC1L7/W0rZAIelSEVTs3wE6PYC11Scebuq1iaLM5PSspF46KrKcRarmgdbK3onqq+xSRCvjehkMV++mNyQWo29wH1dHeAmsccfx68j5VJBo7OmrGlqoT6wPcyfPLnX1GsJWM63V6LmGNEtGHtfG4ofZvTHZ5OiMPjOZrEXb1rOkiscliKNGs7y8XJ2wPPrjqKgrAaPf5OqOK+x4RRDzryyRGwPyzCiWzAGtvPFvksFSseDOHRINkI+CQIAQn1csOdiPv48fh1xXQJRXiM1+zpBJjfUqPov8KS0bJRVS1XOkQ+nqJvpxOJMZWwPyyCTCTifV/ctdd7ITgjydDL7N3MiQ+kV6oVQb2dcvVWBGd/fXdTSnOsEOSxFWpEPp6ijbjhFKhOQcqkAF3JLtXp8WynOZLGqZTh5vRg3S6vgJrHHkwPDMS6qFWLa+TKxIZu05XQOrt6qUDluznWC7LkhrWg7nPJp8nk42InxQ2oWckqa7n2wpKmF+mBNUy2t2fYzdZv53tvBDxJ7OxNHQ2Q6TX2xNddFLdlzQ1rRdpjky50X8em281onNoBtFWdyvynLsO1MHgDggU6BJo6EyLQsdVFLJjekFUMMk1jzisSNaWwm2seP9rS59jA3126V40x2CcQiYEinAFOHQ2RSllonyGEp0kpTwym6mD0kEgMj/Wy6OFNpJlpJJT7cehbXblWipKLG1KHZLPkK2r8evQYA6N3GCz6uqtuEENkSS60TZHJDWtFm5UpttQ904zRnKM9EK6mswdt/nMZ3KZnoGOSOvNIqzs4xInUraJ/LvY2ktGz2pJFNs9Q6QQ5LkdYaG07Rhbll+OZgfK9WkNiLcTm/HJNXHsTcH49j8soDGLRkh1nORLAmmlbQLq20zRW0ierTZsX6Ud3qeqHNafFRJjekk/orV84e0k6na7lsvWb7Luajqlamctycp1pag8ZWjJbjitFk65r6YvvNvkyz+zLG5IZ0Jh9OeSm2Y6N78NRnizOjtKXrGkKkP5Y6E4TI2Op/sX1qYLjac8zpyxiTG2o2baY1y9nqzCht8APWdCx1JgiRKdiJRegb4YO/03LU3m9OX8ZYUEwtIu+ubFiMGeQhweS+bRDu58rC2CbwA9Z0LHUmCJGpWMr+eExuqMUabrDJZEY3/IA1HUudCUJkKpbyZYzDUqQX8joc7sGjO/kHrKYWYyG24ciHVjUlNgDrxIjq0/ZL1oXc20i5VGCy4SkmN0Qmxi0ZTGtEt2A83Ke1ynHWiRGpaurLmNyXOy8qZlBtOZ1rlNjqY3JDZAY0TbUUAZg9pB2qamUm/RZk7c5klwAAnhoYjs8mReGHGf2x97WhTGyIGtBlIglQN4PqhR9P4ESBcb+cseaGyEzUr13KLqrAO3+m4XaVFF/svKQ4J9jTCfPHdOGHrh6dzSnB6RslcLAT4YWh7eHNLReIGqVpIok68p3Df8sU41WZAAejRMieGyKzIq9dcpHY4XaVVOV+c1pHwlr8fvQ6AGBopwAmNkRa0mVBVwFAUbUIh6/cMk5wYHJDZHa4qJ9xSGUC9l3Mxw+pWQCA8VGtTBwRkWWRfxlrH+iu1fl5pVUGjuguDksRmRlLWUfCkqnbKDNhYzpEInDIj0hH2i9nITFwJHex54bIzFjKOhKWStNGmbklHPIjag5tlrPwchQQHeZttJiY3BCZGS7qZziNbZTJIT+i5mlsBpX89oRwmVGXs2ByQ2RmuKif4XAfLyLD0LScRZCnE76Y1BM9fY37hYE1N0RmRv4taObaoxABKr0MAoBJ94Tir5M3uNWFjjjkR2Q4mrbikUlrsfmKcWNhckNkhhpbR0IsAj7ddkFxm2vfaI9DfkSGJZ9BVZ9MdVULg2NyQ2SmGn4LOp9TimW7LqFhOYh87RtuFdC0vhE+CPJwQk6J+p4ZbpRJZB1Yc0NkxuTfgv7VIwS/Hbuu9hwWwmrPTizC2J7qE0BulElkPZjcEFkAFsK2jFQmIOVSAf44dh1b0+s28XOT2Cmdw40yiawHh6WILIC2Ba77Lt5kgXED6hbsA4C3/9UFbXxclQof2W5E1oE9N0QWQNsC1y93XsKgJTu4EN0dmhbsA4DXfz2F4opqjItqhZh2vkxsiKwIkxsiC9DU2jf1cXPNOo0t2CfHOiUi68TkhsgCNLYCaEMsMK7DOiUi28XkhshCaFoBVB35B/enyeeRcqnAJpMcLthHZLuY3BBZkBHdgrH3taGYPSRSq/O/3HkRk1cesMk6HC7YR2S7OFuKyMLYiUUYGOmHL3de1Pqa7OJKPLf2KJ4eGI5hXYIUi9TVXya9T5g3jly5pTR7CAAOZhTiSL4IvhmFiIkM0Oo6UxfnSmUCZDIBXs4OKKqoUXsOF+wjsl5MbogskLzAOKe4stGC2Ya+2ZeJb/ZlwsvFAQBQVH73g18sgtLqx8rn2OG7C4e1ui7Y0wlvj+4Mb1eJSRIeTVO/6+OCfUTWjckNkQVqanPNptRPTuQaluWoO0eb67KLK/H8+mNKx4I8JJjctw3C/VwNmuzIp3431R5B3I+LyKoxuSGyUI1trmluckqqDL7ZpzZTv72cHbBsSm/0b8t1bYisGZMbIgtWf3PNfRdv4sudl0wdklZy7tQAvTSsfYt7c6QyQfHzN5XkFVXUQCwSMbEhsnJMbogsnHxzzb4RPvj16HWd63BMQR5f/d6c5gxdaVNf0xCnfhNZPyY3RFaipXU4pqZu6KphYXL9mVmZ+eVYuu28zj8np34TWT8mN0RWxJLqcJqirjC54cwsXXDqN5HtYHJDZGXq1+Ekp+dg1b5Mi+zJUacliQ3Aqd9EtoLJDZEVktfhyGtxGvbk6L7OjfbXmSNO/SayLUxuiKxc/Z6chqsPa7NCccrFPGzdcxDDB/fTaoXiW2XVWLDJPIbFZg+JxMBIP7NYNZmIjIfJDZENkPfkNNTwmLpz+kX4oOCMgH71EoSmrovrdjeZyswvxw+pWcgpMV6yI6+veSm2A5MaIhvE5IaI9K5hMjV7aKRSsrN023kAhqkDYn0NETG5ISKDa5jsdAxyM9iMLtbXEBGTGyIyuoZ1QM0dupLPAtPHSsdEZD2Y3BCRSTQ2dKWpMLnhzCz20hCROkxuiMgsqCt6rl+YrGlGF3tpiKghJjdEZLbUJTzqZnQREdUnNnUAALBs2TKEh4fDyckJ/fr1Q2pqaqPn//zzz+jUqROcnJzQvXt3bN682UiREhERkbkzeXKTmJiI+Ph4zJ8/H0ePHkXPnj0RFxeHvLw8tefv378fkydPxtNPP41jx45h/PjxGD9+PNLS0owcOREREZkjkyc3n3zyCWbMmIHp06ejS5cuWLFiBVxcXLBq1Sq153/22WcYMWIEXnnlFXTu3BkLFixA79698eWXXxo5ciIiIjJHJk1uqqurceTIEQwbNkxxTCwWY9iwYUhJSVF7TUpKitL5ABAXF6fxfCIiIrItJi0ozs/Ph1QqRWBgoNLxwMBAnD17Vu01OTk5as/PyclRe35VVRWqqqoUt0tKSgAANTU1qKmpUXtNc8kfT9+PS6rY1sbDtjYetrXxsK2NR19trcv1Vj9batGiRUhISFA5vnXrVri4uBjkOZOTkw3yuKSKbW08bGvjYVsbD9vaeFra1uXl5Vqfa9Lkxs/PD3Z2dsjNzVU6npubi6CgILXXBAUF6XT+vHnzEB8fr7hdUlKC0NBQDB8+HB4eHi38CZTV1NQgOTkZsbGxcHBw0OtjkzK2tfGwrY2HbW08bGvj0Vdby0detGHS5MbR0RF9+vTB9u3bMX78eACATCbD9u3bMXv2bLXXxMTEYPv27XjxxRcVx5KTkxETE6P2fIlEAolEonLcwcHBYC9oQz42KWNbGw/b2njY1sbDtjaelra1LteafFgqPj4e06ZNQ3R0NPr27YulS5eirKwM06dPBwBMnToVrVq1wqJFiwAAc+fOxX333YePP/4Yo0ePxo8//ojDhw/j66+/NuWPQURERGbC5MnNxIkTcfPmTbzzzjvIyclBVFQUkpKSFEXDWVlZEIvvTuoaMGAA1q9fj7feegtvvPEG2rdvjw0bNqBbt25aPZ8g1G1Mo0v3lrZqampQXl6OkpISfhMwMLa18bCtjYdtbTxsa+PRV1vLP7fln+ONEQnanGVFrl27htDQUFOHQURERM1w9epVtG7dutFzbC65kclkuHHjBtzd3SES6XfDPXmx8tWrV/VerEzK2NbGw7Y2Hra18bCtjUdfbS0IAkpLSxESEqI0oqOOyYeljE0sFjeZ8bWUh4cH/1iMhG1tPGxr42FbGw/b2nj00daenp5anWfy7ReIiIiI9InJDREREVkVJjd6JJFIMH/+fLXr6pB+sa2Nh21tPGxr42FbG48p2trmCoqJiIjIurHnhoiIiKwKkxsiIiKyKkxuiIiIyKowuSEiIiKrwuRGT5YtW4bw8HA4OTmhX79+SE1NNXVIFm/RokW455574O7ujoCAAIwfPx7nzp1TOqeyshKzZs2Cr68v3Nzc8NBDDyE3N9dEEVuPxYsXQyQS4cUXX1QcY1vrz/Xr1/H444/D19cXzs7O6N69Ow4fPqy4XxAEvPPOOwgODoazszOGDRuGCxcumDBiyySVSvH2228jIiICzs7OaNeuHRYsWKC0NxHbuvl2796NMWPGICQkBCKRCBs2bFC6X5u2LSwsxJQpU+Dh4QEvLy88/fTTuH37dsuDE6jFfvzxR8HR0VFYtWqVcPr0aWHGjBmCl5eXkJuba+rQLFpcXJywevVqIS0tTTh+/LgwatQooU2bNsLt27cV5zz33HNCaGiosH37duHw4cNC//79hQEDBpgwasuXmpoqhIeHCz169BDmzp2rOM621o/CwkIhLCxMePLJJ4WDBw8Kly9fFrZs2SJcvHhRcc7ixYsFT09PYcOGDcKJEyeEsWPHChEREUJFRYUJI7c8CxcuFHx9fYW//vpLyMjIEH7++WfBzc1N+OyzzxTnsK2bb/PmzcKbb74p/PbbbwIA4ffff1e6X5u2HTFihNCzZ0/hwIEDwp49e4TIyEhh8uTJLY6NyY0e9O3bV5g1a5bitlQqFUJCQoRFixaZMCrrk5eXJwAQ/vnnH0EQBKGoqEhwcHAQfv75Z8U5Z86cEQAIKSkppgrTopWWlgrt27cXkpOThfvuu0+R3LCt9ee1114TBg0apPF+mUwmBAUFCR9++KHiWFFRkSCRSIQffvjBGCFajdGjRwtPPfWU0rEJEyYIU6ZMEQSBba1PDZMbbdo2PT1dACAcOnRIcc7ff/8tiEQi4fr16y2Kh8NSLVRdXY0jR45g2LBhimNisRjDhg1DSkqKCSOzPsXFxQAAHx8fAMCRI0dQU1Oj1PadOnVCmzZt2PbNNGvWLIwePVqpTQG2tT79+eefiI6OxiOPPIKAgAD06tULK1euVNyfkZGBnJwcpbb29PREv3792NY6GjBgALZv347z588DAE6cOIG9e/di5MiRANjWhqRN26akpMDLywvR0dGKc4YNGwaxWIyDBw+26PltbuNMfcvPz4dUKkVgYKDS8cDAQJw9e9ZEUVkfmUyGF198EQMHDkS3bt0AADk5OXB0dISXl5fSuYGBgcjJyTFBlJbtxx9/xNGjR3Ho0CGV+9jW+nP58mUsX74c8fHxeOONN3Do0CHMmTMHjo6OmDZtmqI91b2nsK118/rrr6OkpASdOnWCnZ0dpFIpFi5ciClTpgAA29qAtGnbnJwcBAQEKN1vb28PHx+fFrc/kxuyCLNmzUJaWhr27t1r6lCs0tWrVzF37lwkJyfDycnJ1OFYNZlMhujoaLz//vsAgF69eiEtLQ0rVqzAtGnTTByddfnpp5+wbt06rF+/Hl27dsXx48fx4osvIiQkhG1t5Tgs1UJ+fn6ws7NTmTWSm5uLoKAgE0VlXWbPno2//voLO3fuROvWrRXHg4KCUF1djaKiIqXz2fa6O3LkCPLy8tC7d2/Y29vD3t4e//zzDz7//HPY29sjMDCQba0nwcHB6NKli9Kxzp07IysrCwAU7cn3lJZ75ZVX8Prrr2PSpEno3r07nnjiCbz00ktYtGgRALa1IWnTtkFBQcjLy1O6v7a2FoWFhS1ufyY3LeTo6Ig+ffpg+/btimMymQzbt29HTEyMCSOzfIIgYPbs2fj999+xY8cOREREKN3fp08fODg4KLX9uXPnkJWVxbbX0QMPPIBTp07h+PHjin/R0dGYMmWK4r/Z1voxcOBAlSUNzp8/j7CwMABAREQEgoKClNq6pKQEBw8eZFvrqLy8HGKx8secnZ0dZDIZALa1IWnTtjExMSgqKsKRI0cU5+zYsQMymQz9+vVrWQAtKkcmQRDqpoJLJBJhzZo1Qnp6uvDMM88IXl5eQk5OjqlDs2gzZ84UPD09hV27dgnZ2dmKf+Xl5YpznnvuOaFNmzbCjh07hMOHDwsxMTFCTEyMCaO2HvVnSwkC21pfUlNTBXt7e2HhwoXChQsXhHXr1gkuLi7C2rVrFecsXrxY8PLyEv744w/h5MmTwrhx4zg9uRmmTZsmtGrVSjEV/LfffhP8/PyEV199VXEO27r5SktLhWPHjgnHjh0TAAiffPKJcOzYMeHKlSuCIGjXtiNGjBB69eolHDx4UNi7d6/Qvn17TgU3J1988YXQpk0bwdHRUejbt69w4MABU4dk8QCo/bd69WrFORUVFcLzzz8veHt7Cy4uLsKDDz4oZGdnmy5oK9IwuWFb68/GjRuFbt26CRKJROjUqZPw9ddfK90vk8mEt99+WwgMDBQkEonwwAMPCOfOnTNRtJarpKREmDt3rtCmTRvByclJaNu2rfDmm28KVVVVinPY1s23c+dOte/R06ZNEwRBu7YtKCgQJk+eLLi5uQkeHh7C9OnThdLS0hbHJhKEeks1EhEREVk41twQERGRVWFyQ0RERFaFyQ0RERFZFSY3REREZFWY3BAREZFVYXJDREREVoXJDREREVkVJjdEZLMKCgoQEBCAzMxMAMCuXbsgEolU9tCSy8/PR0BAAK5du2a8IIlIZ0xuiMgobt68iZkzZ6JNmzaQSCQICgpCXFwc9u3bpzhHJBJhw4YNRotp4cKFGDduHMLDw7U638/PD1OnTsX8+fMNGxgRtYi9qQMgItvw0EMPobq6Gt9++y3atm2L3NxcbN++HQUFBSaJp7y8HN988w22bNmi03XTp09Hnz598OGHH8LHx8dA0RFRS7DnhogMrqioCHv27MGSJUswZMgQhIWFoW/fvpg3bx7Gjh0LAIrekwcffBAikUipN+WPP/5A79694eTkhLZt2yIhIQG1tbWK+0UiEZYvX46RI0fC2dkZbdu2xS+//NJoTJs3b4ZEIkH//v01nlNeXo6RI0di4MCBiqGqrl27IiQkBL///nvzGoOIDI7JDREZnJubG9zc3LBhwwZUVVWpPefQoUMAgNWrVyM7O1txe8+ePZg6dSrmzp2L9PR0/O9//8OaNWuwcOFCpevffvttPPTQQzhx4gSmTJmCSZMm4cyZMxpj2rNnD/r06aPx/qKiIsTGxkImkyE5ORleXl6K+/r27Ys9e/Zo++MTkZExuSEig7O3t8eaNWvw7bffwsvLCwMHDsQbb7yBkydPKs7x9/cHAHh5eSEoKEhxOyEhAa+//jqmTZuGtm3bIjY2FgsWLMD//vc/ped45JFH8O9//xsdOnTAggULEB0djS+++EJjTFeuXEFISIja+3JycnDfffchODgYGzduhIuLi9L9ISEhuHLlSrPagogMj8kNERnFQw89hBs3buDPP//EiBEjsGvXLvTu3Rtr1qxp9LoTJ07gvffeU/T+uLm5YcaMGcjOzkZ5ebnivJiYGKXrYmJiGu25qaiogJOTk9r7YmNjERkZicTERDg6Oqrc7+zsrPTcRGRemNwQkdE4OTkhNjYWb7/9Nvbv348nn3yyyZlHt2/fRkJCAo4fP674d+rUKVy4cEFjcqINPz8/3Lp1S+19o0ePxu7du5Genq72/sLCQkXPEhGZHyY3RGQyXbp0QVlZmeK2g4MDpFKp0jm9e/fGuXPnEBkZqfJPLL77FnbgwAGl6w4cOIDOnTtrfO5evXppTF4WL16MadOm4YEHHlB7TlpaGnr16qXVz0hExsep4ERkcAUFBXjkkUfw1FNPoUePHnB3d8fhw4fxwQcfYNy4cYrzwsPDsX37dgwcOBASiQTe3t5455138K9//Qtt2rTBww8/DLFYjBMnTiAtLQ3//e9/Fdf+/PPPiI6OxqBBg7Bu3Tqkpqbim2++0RhTXFwc5s2bh1u3bsHb21vl/o8++ghSqRRDhw7Frl270KlTJwB1M6iOHDmC999/X48tRER6JRARGVhlZaXw+uuvC7179xY8PT0FFxcXoWPHjsJbb70llJeXK877888/hcjISMHe3l4ICwtTHE9KShIGDBggODs7Cx4eHkLfvn2Fr7/+WnE/AGHZsmVCbGysIJFIhPDwcCExMbHJuPr27SusWLFCcXvnzp0CAOHWrVuKYy+88IIQHBwsnDt3ThAEQVi/fr3QsWPHFrQGERmaSBAEwdQJFhFRS4hEIvz+++8YP368Ttdt2rQJr7zyCtLS0pSGuBrTv39/zJkzB4899lgzIiUiY+CwFBHZrNGjR+PChQu4fv06QkNDmzw/Pz8fEyZMwOTJk40QHRE1F3tuiMjiNbfnhoisE3tuiMji8TsaEdXHqeBERERkVZjcEBERkVVhckNERERWhckNERERWRUmN0RERGRVmNwQERGRVWFyQ0RERFaFyQ0RERFZFSY3REREZFX+H0QI+KyoslBSAAAAAElFTkSuQmCC", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Plot probability over time\n", + "plt.plot(range(K), probabilities, marker='o')\n", + "plt.xlabel('Step (k)')\n", + "plt.ylabel('Probability of initial state')\n", + "plt.title('Probability vs. Step in Trotter Evolution')\n", + "plt.grid()\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "id": "da2c333a", + "metadata": {}, + "source": [ + "## Expectation value over time: \n", + "\n", + "Set up the simulation parameters, perform the time evolution, and vizualize results for expectation value over time." + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "id": "9f09a43e", + "metadata": {}, + "outputs": [], + "source": [ + "# Initialize list to store expectation values\n", + "exp_values = []\n", + "\n", + "# Time evolution\n", + "start_time = time.time()\n", + "for k in range(1, K):\n", + " # Apply single Trotter step\n", + " state = cudaq.get_state(trotter_step, state, dt, Jx, Jy, Jz, h_x, h_y, h_z, _use_XXYYZZ_gate, coefficients, words)\n", + "\n", + " # Calculate expectation value\n", + " exp_val = cudaq.observe(trotter_step, hamiltonian, state, dt, Jx, Jy, Jz, h_x, h_y, h_z, _use_XXYYZZ_gate, coefficients, words).expectation()\n", + " exp_values.append(exp_val.real)\n", + " #print(f\"Step {k}, Energy: {exp_val.real:.6f}\")" + ] + }, + { + "cell_type": "markdown", + "id": "3621ecdf", + "metadata": {}, + "source": [ + "## Visualization of expectation over time\n", + "\n", + "Plot the expectation value over time." + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "id": "f0941a30", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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AbB//fWXehv3987IyFBvA8CuWLFC6/Hh4eHsI488ov753XffZV1cXNjr169r7Lds2TJWKpWy2dnZel9HZWUlK5PJ2BdffFFj+0cffcQyDMNmZWWxLMuya9asYQGwxcXFeo9ljLfeeosFwLq4uLBTpkxhV65cyZ47d05rvzNnzmj9jVnWuPcp97e+5557NI7x9NNPswDYS5cutdvWRx55ROP9x73vvL292bKyMvX2X3/9lQXA7t6925BTwLIsy3788cdaf/dHHnmEBcAuW7ZMY99ffvmFBcC+9957GttnzZrFMgzDpqWlqbe5uLhovEfaez6WZdnMzExWKpWyK1eu1NiemJjI2tnZaWwfPXo0C4Bdt26dQa+RO/+6/vXq1Uu939dff80CYBMTEzUeHxsby44bN0798wsvvMACYP/++2/1turqajYyMpKNiIhgFQoFy7K6rw+jR49mR48erdXGtn/j4uJivZ8/7vVwLl68yAJgH3vsMY39XnrpJRYAe/jwYfW28PBwrc9+UVGRzs+gLaNhOGK0L7/8EgcOHND498cff2jsExcXh4SEBHz77beYPHkySkpKsGnTJp3j6g8//DDc3NzUP8+aNQuBgYHYs2cPAODixYtITU3FAw88gNLSUpSUlKCkpAS1tbUYP348/vrrLyiVSiiVSvzyyy+YNm2azpwqQ3pMuJ4sAKiurkZJSQnuuOMO1NXV4dq1awafI05+fj4uXryIBQsWaPRW9OvXDxMnTlS/xtaeeuopjZ/vuOMOlJaWoqqqqt3nio2NxcCBA7Ft2zb1ttraWvzvf//D3XffDXd3d63X2NDQgJKSEgwbNgwAcP78eaNfoy47d+7EHXfcgW7duqn/XiUlJZgwYQIUCgX++usvvY91d3fHlClTsGPHDo2hnO3bt2PYsGEICwsDcCsJ99dff+Ul2TkhIQFbtmzBwIEDsW/fPrz++usYPHgwBg0apDVkqouh79PWnnnmGY2fn332WQDQ+b4wxNy5c9GtWzf1z1zP140bNzp1vLYWL16s8fOePXsglUrx3HPPaWx/8cUXwbKs1nXBGLt27YJSqcScOXM03kMBAQHo0aMHjhw5orG/TCbDwoULjXqOn376SetatmHDBvXvZ8yYATs7O2zfvl29LSkpCVeuXMHcuXPV2/bs2YOhQ4dqzEh1dXXFE088gczMTFy5csXY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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Plot expectation value over time\n", + "x = np.arange(1, K)\n", + "plt.plot(x, exp_values, marker='o')\n", + "plt.xlabel('Step (k)')\n", + "plt.ylabel('Expectation Value (Energy)')\n", + "plt.title('Expectation Value vs. Step in Trotter Evolution')\n", + "plt.grid()\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "id": "3f5c059c", + "metadata": {}, + "source": [ + "## Additional information\n", + "\n", + "In the code above, we relied CUDA-Q expentiation of Pauli gates. If we needed to do it manually here is how it is done." + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "id": "99b2f46e", + "metadata": {}, + "outputs": [], + "source": [ + "@cudaq.kernel\n", + "def xx_gate(qubits: cudaq.qview, tau: float) -> None:\n", + " \"\"\"XX gate implementation\"\"\"\n", + " h(qubits[0])\n", + " h(qubits[1])\n", + " x.ctrl(qubits[0], qubits[1])\n", + " rz(np.pi * tau, qubits[1])\n", + " x.ctrl(qubits[0], qubits[1])\n", + " h(qubits[0])\n", + " h(qubits[1])\n", + "\n", + "@cudaq.kernel\n", + "def yy_gate(qubits: cudaq.qview, tau: float) -> None:\n", + " \"\"\"YY gate implementation\"\"\"\n", + " # S gates (equivalent to rz(pi/2))\n", + " rz(np.pi/2, qubits[0])\n", + " rz(np.pi/2, qubits[1])\n", + " \n", + " h(qubits[0])\n", + " h(qubits[1])\n", + " x.ctrl(qubits[0], qubits[1])\n", + " rz(np.pi * tau, qubits[1])\n", + " x.ctrl(qubits[0], qubits[1])\n", + " h(qubits[0])\n", + " h(qubits[1])\n", + " \n", + " # S inverse gates (equivalent to rz(-pi/2))\n", + " rz(-np.pi/2, qubits[0])\n", + " rz(-np.pi/2, qubits[1])\n", + "\n", + "@cudaq.kernel\n", + "def zz_gate(qubits: cudaq.qview, tau: float) -> None:\n", + " \"\"\"ZZ gate implementation\"\"\"\n", + " x.ctrl(qubits[0], qubits[1])\n", + " rz(np.pi * tau, qubits[1])\n", + " x.ctrl(qubits[0], qubits[1])" + ] + }, + { + "cell_type": "markdown", + "id": "fdea4560", + "metadata": {}, + "source": [ + "## Relevant references\n", + "\n", + "- https://nvidia.github.io/cuda-quantum/latest/examples/python/operators.html\n", + "- https://arxiv.org/abs/quant-ph/9503016" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "id": "22ecee93", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "CUDA-Q Version 0.9.0 (https://github.com/NVIDIA/cuda-quantum b4d549b1951738f3a5a481d1d93bf090e1e622fa)\n" + ] + } + ], + "source": [ + "print(cudaq.__version__)" + ] + } + ], + "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.10.12" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/docs/sphinx/using/applications.rst b/docs/sphinx/using/applications.rst index b3119decf4..036f86239f 100644 --- a/docs/sphinx/using/applications.rst +++ b/docs/sphinx/using/applications.rst @@ -11,6 +11,8 @@ Applications that give an in depth view of CUDA-Q and its applications in Python /applications/python/trotter.ipynb /applications/python/cost_minimization.ipynb /applications/python/deutschs_algorithm.ipynb + /applications/python/deutsch_jozsa.ipynb + /applications/python/hamiltonian_simulation.ipynb /applications/python/divisive_clustering_coresets.ipynb /applications/python/shors.ipynb /applications/python/hybrid_qnns.ipynb