{
"cells": [
{
"cell_type": "code",
"execution_count": 254,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n"
],
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"%%html \n",
""
]
},
{
"cell_type": "code",
"execution_count": 255,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Running Python 3.11\n",
"Adding xrange for backwards compatibility\n",
"%pylab is deprecated, use %matplotlib inline and import the required libraries.\n",
"Populating the interactive namespace from numpy and matplotlib\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"c:\\Users\\HP\\anaconda3\\Lib\\site-packages\\IPython\\core\\magics\\pylab.py:162: UserWarning: pylab import has clobbered these variables: ['histogram', 'interactive']\n",
"`%matplotlib` prevents importing * from pylab and numpy\n",
" warn(\"pylab import has clobbered these variables: %s\" % clobbered +\n"
]
},
{
"data": {
"application/javascript": "(function(root) {\n function now() {\n return new Date();\n }\n\n var force = true;\n var py_version = '3.2.1'.replace('rc', '-rc.').replace('.dev', '-dev.');\n var is_dev = py_version.indexOf(\"+\") !== -1 || py_version.indexOf(\"-\") !== -1;\n var reloading = false;\n var Bokeh = root.Bokeh;\n var bokeh_loaded = Bokeh != null && (Bokeh.version === py_version || (Bokeh.versions !== undefined && Bokeh.versions.has(py_version)));\n\n if (typeof (root._bokeh_timeout) === \"undefined\" || force) {\n root._bokeh_timeout = Date.now() + 5000;\n root._bokeh_failed_load = false;\n }\n\n function run_callbacks() {\n try {\n root._bokeh_onload_callbacks.forEach(function(callback) {\n if (callback != null)\n callback();\n });\n } finally {\n delete root._bokeh_onload_callbacks;\n }\n console.debug(\"Bokeh: all callbacks have finished\");\n }\n\n function load_libs(css_urls, js_urls, js_modules, js_exports, callback) {\n if (css_urls == null) css_urls = [];\n if (js_urls == null) js_urls = [];\n if (js_modules == null) js_modules = [];\n if (js_exports == null) js_exports = {};\n\n root._bokeh_onload_callbacks.push(callback);\n\n if (root._bokeh_is_loading > 0) {\n console.debug(\"Bokeh: BokehJS is being loaded, scheduling callback at\", now());\n return null;\n }\n if (js_urls.length === 0 && js_modules.length === 0 && Object.keys(js_exports).length === 0) {\n run_callbacks();\n return null;\n }\n if (!reloading) {\n console.debug(\"Bokeh: BokehJS not loaded, scheduling load and callback at\", now());\n }\n\n function on_load() {\n root._bokeh_is_loading--;\n if (root._bokeh_is_loading === 0) {\n console.debug(\"Bokeh: all BokehJS libraries/stylesheets loaded\");\n run_callbacks()\n }\n }\n window._bokeh_on_load = on_load\n\n function on_error() {\n console.error(\"failed to load \" + url);\n }\n\n var skip = [];\n if (window.requirejs) {\n window.requirejs.config({'packages': {}, 'paths': {'vega-embed': 'https://cdn.jsdelivr.net/npm/vega-embed@6/build/vega-embed.min', 'vega-lite': 'https://cdn.jsdelivr.net/npm/vega-lite@5/build/vega-lite.min', 'vega': 'https://cdn.jsdelivr.net/npm/vega@5/build/vega.min', 'jspanel': 'https://cdn.jsdelivr.net/npm/jspanel4@4.12.0/dist/jspanel', 'jspanel-modal': 'https://cdn.jsdelivr.net/npm/jspanel4@4.12.0/dist/extensions/modal/jspanel.modal', 'jspanel-tooltip': 'https://cdn.jsdelivr.net/npm/jspanel4@4.12.0/dist/extensions/tooltip/jspanel.tooltip', 'jspanel-hint': 'https://cdn.jsdelivr.net/npm/jspanel4@4.12.0/dist/extensions/hint/jspanel.hint', 'jspanel-layout': 'https://cdn.jsdelivr.net/npm/jspanel4@4.12.0/dist/extensions/layout/jspanel.layout', 'jspanel-contextmenu': 'https://cdn.jsdelivr.net/npm/jspanel4@4.12.0/dist/extensions/contextmenu/jspanel.contextmenu', 'jspanel-dock': 'https://cdn.jsdelivr.net/npm/jspanel4@4.12.0/dist/extensions/dock/jspanel.dock', 'gridstack': 'https://cdn.jsdelivr.net/npm/gridstack@7.2.3/dist/gridstack-all', 'notyf': 'https://cdn.jsdelivr.net/npm/notyf@3/notyf.min'}, 'shim': {'jspanel': {'exports': 'jsPanel'}, 'gridstack': {'exports': 'GridStack'}}});\n require([\"vega-embed\"], function(vegaEmbed) {\n\twindow.vegaEmbed = vegaEmbed\n\ton_load()\n })\n require([\"vega-lite\"], function(vl) {\n\twindow.vl = vl\n\ton_load()\n })\n require([\"vega\"], function(vega) {\n\twindow.vega = vega\n\ton_load()\n })\n require([\"jspanel\"], function(jsPanel) {\n\twindow.jsPanel = jsPanel\n\ton_load()\n })\n require([\"jspanel-modal\"], function() {\n\ton_load()\n })\n require([\"jspanel-tooltip\"], function() {\n\ton_load()\n })\n require([\"jspanel-hint\"], function() {\n\ton_load()\n })\n require([\"jspanel-layout\"], function() {\n\ton_load()\n })\n require([\"jspanel-contextmenu\"], function() {\n\ton_load()\n })\n require([\"jspanel-dock\"], function() {\n\ton_load()\n })\n require([\"gridstack\"], function(GridStack) {\n\twindow.GridStack = GridStack\n\ton_load()\n })\n require([\"notyf\"], function() {\n\ton_load()\n })\n root._bokeh_is_loading = css_urls.length + 12;\n } else {\n root._bokeh_is_loading = css_urls.length + js_urls.length + js_modules.length + Object.keys(js_exports).length;\n }\n\n var existing_stylesheets = []\n var links = document.getElementsByTagName('link')\n for (var i = 0; i < links.length; i++) {\n var link = links[i]\n if (link.href != null) {\n\texisting_stylesheets.push(link.href)\n }\n }\n for (var i = 0; i < css_urls.length; i++) {\n var url = css_urls[i];\n if (existing_stylesheets.indexOf(url) !== -1) {\n\ton_load()\n\tcontinue;\n }\n const element = document.createElement(\"link\");\n element.onload = on_load;\n element.onerror = on_error;\n element.rel = \"stylesheet\";\n element.type = \"text/css\";\n element.href = url;\n console.debug(\"Bokeh: injecting link tag for BokehJS stylesheet: \", url);\n document.body.appendChild(element);\n } if (((window['vega'] !== undefined) && (!(window['vega'] instanceof HTMLElement))) || window.requirejs) {\n var urls = ['https://cdn.holoviz.org/panel/1.2.3/dist/bundled/vegaplot/vega@5'];\n for (var i = 0; i < urls.length; i++) {\n skip.push(urls[i])\n }\n } if (((window['vegaLite'] !== undefined) && (!(window['vegaLite'] instanceof HTMLElement))) || window.requirejs) {\n var urls = ['https://cdn.holoviz.org/panel/1.2.3/dist/bundled/vegaplot/vega-lite@5'];\n for (var i = 0; i < urls.length; i++) {\n skip.push(urls[i])\n }\n } if (((window['vegaEmbed'] !== undefined) && (!(window['vegaEmbed'] instanceof HTMLElement))) || window.requirejs) {\n var urls = ['https://cdn.holoviz.org/panel/1.2.3/dist/bundled/vegaplot/vega-embed@6'];\n for (var i = 0; i < urls.length; i++) {\n skip.push(urls[i])\n }\n } if (((window['jsPanel'] !== undefined) && (!(window['jsPanel'] instanceof HTMLElement))) || window.requirejs) {\n var urls = ['https://cdn.holoviz.org/panel/1.2.3/dist/bundled/floatpanel/jspanel4@4.12.0/dist/jspanel.js', 'https://cdn.holoviz.org/panel/1.2.3/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/modal/jspanel.modal.js', 'https://cdn.holoviz.org/panel/1.2.3/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/tooltip/jspanel.tooltip.js', 'https://cdn.holoviz.org/panel/1.2.3/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/hint/jspanel.hint.js', 'https://cdn.holoviz.org/panel/1.2.3/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/layout/jspanel.layout.js', 'https://cdn.holoviz.org/panel/1.2.3/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/contextmenu/jspanel.contextmenu.js', 'https://cdn.holoviz.org/panel/1.2.3/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/dock/jspanel.dock.js'];\n for (var i = 0; i < urls.length; i++) {\n skip.push(urls[i])\n }\n } if (((window['GridStack'] !== undefined) && (!(window['GridStack'] instanceof HTMLElement))) || window.requirejs) {\n var urls = ['https://cdn.holoviz.org/panel/1.2.3/dist/bundled/gridstack/gridstack@7.2.3/dist/gridstack-all.js'];\n for (var i = 0; i < urls.length; i++) {\n skip.push(urls[i])\n }\n } if (((window['Notyf'] !== undefined) && (!(window['Notyf'] instanceof HTMLElement))) || window.requirejs) {\n var urls = ['https://cdn.holoviz.org/panel/1.2.3/dist/bundled/notificationarea/notyf@3/notyf.min.js'];\n for (var i = 0; i < urls.length; i++) {\n skip.push(urls[i])\n }\n } var existing_scripts = []\n var scripts = document.getElementsByTagName('script')\n for (var i = 0; i < scripts.length; i++) {\n var script = scripts[i]\n if (script.src != null) {\n\texisting_scripts.push(script.src)\n }\n }\n for (var i = 0; i < js_urls.length; i++) {\n var url = js_urls[i];\n if (skip.indexOf(url) !== -1 || existing_scripts.indexOf(url) !== -1) {\n\tif (!window.requirejs) {\n\t on_load();\n\t}\n\tcontinue;\n }\n var element = document.createElement('script');\n element.onload = on_load;\n element.onerror = on_error;\n element.async = false;\n element.src = url;\n console.debug(\"Bokeh: injecting script tag for BokehJS library: \", url);\n document.head.appendChild(element);\n }\n for (var i = 0; i < js_modules.length; i++) {\n var url = js_modules[i];\n if (skip.indexOf(url) !== -1 || existing_scripts.indexOf(url) !== -1) {\n\tif (!window.requirejs) {\n\t on_load();\n\t}\n\tcontinue;\n }\n var element = document.createElement('script');\n element.onload = on_load;\n element.onerror = on_error;\n element.async = false;\n element.src = url;\n element.type = \"module\";\n console.debug(\"Bokeh: injecting script tag for BokehJS library: \", url);\n document.head.appendChild(element);\n }\n for (const name in js_exports) {\n var url = js_exports[name];\n if (skip.indexOf(url) >= 0 || root[name] != null) {\n\tif (!window.requirejs) {\n\t on_load();\n\t}\n\tcontinue;\n }\n var element = document.createElement('script');\n element.onerror = on_error;\n element.async = false;\n element.type = \"module\";\n console.debug(\"Bokeh: injecting script tag for BokehJS library: \", url);\n element.textContent = `\n import ${name} from \"${url}\"\n window.${name} = ${name}\n window._bokeh_on_load()\n `\n document.head.appendChild(element);\n }\n if (!js_urls.length && !js_modules.length) {\n on_load()\n }\n };\n\n function inject_raw_css(css) {\n const element = document.createElement(\"style\");\n element.appendChild(document.createTextNode(css));\n document.body.appendChild(element);\n }\n\n var js_urls = [\"https://cdn.holoviz.org/panel/1.2.3/dist/bundled/vegaplot/vega@5\", \"https://cdn.holoviz.org/panel/1.2.3/dist/bundled/vegaplot/vega-lite@5\", \"https://cdn.holoviz.org/panel/1.2.3/dist/bundled/vegaplot/vega-embed@6\", \"https://cdn.bokeh.org/bokeh/release/bokeh-3.2.1.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-gl-3.2.1.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-widgets-3.2.1.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-tables-3.2.1.min.js\", \"https://cdn.holoviz.org/panel/1.2.3/dist/panel.min.js\"];\n var js_modules = [];\n var js_exports = {};\n var css_urls = [];\n var inline_js = [ function(Bokeh) {\n Bokeh.set_log_level(\"info\");\n },\nfunction(Bokeh) {} // ensure no trailing comma for IE\n ];\n\n function run_inline_js() {\n if ((root.Bokeh !== undefined) || (force === true)) {\n for (var i = 0; i < inline_js.length; i++) {\n inline_js[i].call(root, root.Bokeh);\n }\n // Cache old bokeh versions\n if (Bokeh != undefined && !reloading) {\n\tvar NewBokeh = root.Bokeh;\n\tif (Bokeh.versions === undefined) {\n\t Bokeh.versions = new Map();\n\t}\n\tif (NewBokeh.version !== Bokeh.version) {\n\t Bokeh.versions.set(NewBokeh.version, NewBokeh)\n\t}\n\troot.Bokeh = Bokeh;\n }} else if (Date.now() < root._bokeh_timeout) {\n setTimeout(run_inline_js, 100);\n } else if (!root._bokeh_failed_load) {\n console.log(\"Bokeh: BokehJS failed to load within specified timeout.\");\n root._bokeh_failed_load = true;\n }\n root._bokeh_is_initializing = false\n }\n\n function load_or_wait() {\n // Implement a backoff loop that tries to ensure we do not load multiple\n // versions of Bokeh and its dependencies at the same time.\n // In recent versions we use the root._bokeh_is_initializing flag\n // to determine whether there is an ongoing attempt to initialize\n // bokeh, however for backward compatibility we also try to ensure\n // that we do not start loading a newer (Panel>=1.0 and Bokeh>3) version\n // before older versions are fully initialized.\n if (root._bokeh_is_initializing && Date.now() > root._bokeh_timeout) {\n root._bokeh_is_initializing = false;\n root._bokeh_onload_callbacks = undefined;\n console.log(\"Bokeh: BokehJS was loaded multiple times but one version failed to initialize.\");\n load_or_wait();\n } else if (root._bokeh_is_initializing || (typeof root._bokeh_is_initializing === \"undefined\" && root._bokeh_onload_callbacks !== undefined)) {\n setTimeout(load_or_wait, 100);\n } else {\n Bokeh = root.Bokeh;\n bokeh_loaded = Bokeh != null && (Bokeh.version === py_version || (Bokeh.versions !== undefined && Bokeh.versions.has(py_version)));\n root._bokeh_is_initializing = true\n root._bokeh_onload_callbacks = []\n if (!reloading && (!bokeh_loaded || is_dev)) {\n\troot.Bokeh = undefined;\n }\n load_libs(css_urls, js_urls, js_modules, js_exports, function() {\n\tconsole.debug(\"Bokeh: BokehJS plotting callback run at\", now());\n\trun_inline_js();\n });\n }\n }\n // Give older versions of the autoload script a head-start to ensure\n // they initialize before we start loading newer version.\n setTimeout(load_or_wait, 100)\n}(window));",
"application/vnd.holoviews_load.v0+json": ""
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/javascript": "\nif ((window.PyViz === undefined) || (window.PyViz instanceof HTMLElement)) {\n window.PyViz = {comms: {}, comm_status:{}, kernels:{}, receivers: {}, plot_index: []}\n}\n\n\n function JupyterCommManager() {\n }\n\n JupyterCommManager.prototype.register_target = function(plot_id, comm_id, msg_handler) {\n if (window.comm_manager || ((window.Jupyter !== undefined) && (Jupyter.notebook.kernel != null))) {\n var comm_manager = window.comm_manager || Jupyter.notebook.kernel.comm_manager;\n comm_manager.register_target(comm_id, function(comm) {\n comm.on_msg(msg_handler);\n });\n } else if ((plot_id in window.PyViz.kernels) && (window.PyViz.kernels[plot_id])) {\n window.PyViz.kernels[plot_id].registerCommTarget(comm_id, function(comm) {\n comm.onMsg = msg_handler;\n });\n } else if (typeof google != 'undefined' && google.colab.kernel != null) {\n google.colab.kernel.comms.registerTarget(comm_id, (comm) => {\n var messages = comm.messages[Symbol.asyncIterator]();\n function processIteratorResult(result) {\n var message = result.value;\n console.log(message)\n var content = {data: message.data, comm_id};\n var buffers = []\n for (var buffer of message.buffers || []) {\n buffers.push(new DataView(buffer))\n }\n var metadata = message.metadata || {};\n var msg = {content, buffers, metadata}\n msg_handler(msg);\n return messages.next().then(processIteratorResult);\n }\n return messages.next().then(processIteratorResult);\n })\n }\n }\n\n JupyterCommManager.prototype.get_client_comm = function(plot_id, comm_id, msg_handler) {\n if (comm_id in window.PyViz.comms) {\n return window.PyViz.comms[comm_id];\n } else if (window.comm_manager || ((window.Jupyter !== undefined) && (Jupyter.notebook.kernel != null))) {\n var comm_manager = window.comm_manager || Jupyter.notebook.kernel.comm_manager;\n var comm = comm_manager.new_comm(comm_id, {}, {}, {}, comm_id);\n if (msg_handler) {\n comm.on_msg(msg_handler);\n }\n } else if ((plot_id in window.PyViz.kernels) && (window.PyViz.kernels[plot_id])) {\n var comm = window.PyViz.kernels[plot_id].connectToComm(comm_id);\n comm.open();\n if (msg_handler) {\n comm.onMsg = msg_handler;\n }\n } else if (typeof google != 'undefined' && google.colab.kernel != null) {\n var comm_promise = google.colab.kernel.comms.open(comm_id)\n comm_promise.then((comm) => {\n window.PyViz.comms[comm_id] = comm;\n if (msg_handler) {\n var messages = comm.messages[Symbol.asyncIterator]();\n function processIteratorResult(result) {\n var message = result.value;\n var content = {data: message.data};\n var metadata = message.metadata || {comm_id};\n var msg = {content, metadata}\n msg_handler(msg);\n return messages.next().then(processIteratorResult);\n }\n return messages.next().then(processIteratorResult);\n }\n }) \n var sendClosure = (data, metadata, buffers, disposeOnDone) => {\n return comm_promise.then((comm) => {\n comm.send(data, metadata, buffers, disposeOnDone);\n });\n };\n var comm = {\n send: sendClosure\n };\n }\n window.PyViz.comms[comm_id] = comm;\n return comm;\n }\n window.PyViz.comm_manager = new JupyterCommManager();\n \n\n\nvar JS_MIME_TYPE = 'application/javascript';\nvar HTML_MIME_TYPE = 'text/html';\nvar EXEC_MIME_TYPE = 'application/vnd.holoviews_exec.v0+json';\nvar CLASS_NAME = 'output';\n\n/**\n * Render data to the DOM node\n */\nfunction render(props, node) {\n var div = document.createElement(\"div\");\n var script = document.createElement(\"script\");\n node.appendChild(div);\n node.appendChild(script);\n}\n\n/**\n * Handle when a new output is added\n */\nfunction handle_add_output(event, handle) {\n var output_area = handle.output_area;\n var output = handle.output;\n if ((output.data == undefined) || (!output.data.hasOwnProperty(EXEC_MIME_TYPE))) {\n return\n }\n var id = output.metadata[EXEC_MIME_TYPE][\"id\"];\n var toinsert = output_area.element.find(\".\" + CLASS_NAME.split(' ')[0]);\n if (id !== undefined) {\n var nchildren = toinsert.length;\n var html_node = toinsert[nchildren-1].children[0];\n html_node.innerHTML = output.data[HTML_MIME_TYPE];\n var scripts = [];\n var nodelist = html_node.querySelectorAll(\"script\");\n for (var i in nodelist) {\n if (nodelist.hasOwnProperty(i)) {\n scripts.push(nodelist[i])\n }\n }\n\n scripts.forEach( function (oldScript) {\n var newScript = document.createElement(\"script\");\n var attrs = [];\n var nodemap = oldScript.attributes;\n for (var j in nodemap) {\n if (nodemap.hasOwnProperty(j)) {\n attrs.push(nodemap[j])\n }\n }\n attrs.forEach(function(attr) { newScript.setAttribute(attr.name, attr.value) });\n newScript.appendChild(document.createTextNode(oldScript.innerHTML));\n oldScript.parentNode.replaceChild(newScript, oldScript);\n });\n if (JS_MIME_TYPE in output.data) {\n toinsert[nchildren-1].children[1].textContent = output.data[JS_MIME_TYPE];\n }\n output_area._hv_plot_id = id;\n if ((window.Bokeh !== undefined) && (id in Bokeh.index)) {\n window.PyViz.plot_index[id] = Bokeh.index[id];\n } else {\n window.PyViz.plot_index[id] = null;\n }\n } else if (output.metadata[EXEC_MIME_TYPE][\"server_id\"] !== undefined) {\n var bk_div = document.createElement(\"div\");\n bk_div.innerHTML = output.data[HTML_MIME_TYPE];\n var script_attrs = bk_div.children[0].attributes;\n for (var i = 0; i < script_attrs.length; i++) {\n toinsert[toinsert.length - 1].childNodes[1].setAttribute(script_attrs[i].name, script_attrs[i].value);\n }\n // store reference to server id on output_area\n output_area._bokeh_server_id = output.metadata[EXEC_MIME_TYPE][\"server_id\"];\n }\n}\n\n/**\n * Handle when an output is cleared or removed\n */\nfunction handle_clear_output(event, handle) {\n var id = handle.cell.output_area._hv_plot_id;\n var server_id = handle.cell.output_area._bokeh_server_id;\n if (((id === undefined) || !(id in PyViz.plot_index)) && (server_id !== undefined)) { return; }\n var comm = window.PyViz.comm_manager.get_client_comm(\"hv-extension-comm\", \"hv-extension-comm\", function () {});\n if (server_id !== null) {\n comm.send({event_type: 'server_delete', 'id': server_id});\n return;\n } else if (comm !== null) {\n comm.send({event_type: 'delete', 'id': id});\n }\n delete PyViz.plot_index[id];\n if ((window.Bokeh !== undefined) & (id in window.Bokeh.index)) {\n var doc = window.Bokeh.index[id].model.document\n doc.clear();\n const i = window.Bokeh.documents.indexOf(doc);\n if (i > -1) {\n window.Bokeh.documents.splice(i, 1);\n }\n }\n}\n\n/**\n * Handle kernel restart event\n */\nfunction handle_kernel_cleanup(event, handle) {\n delete PyViz.comms[\"hv-extension-comm\"];\n window.PyViz.plot_index = {}\n}\n\n/**\n * Handle update_display_data messages\n */\nfunction handle_update_output(event, handle) {\n handle_clear_output(event, {cell: {output_area: handle.output_area}})\n handle_add_output(event, handle)\n}\n\nfunction register_renderer(events, OutputArea) {\n function append_mime(data, metadata, element) {\n // create a DOM node to render to\n var toinsert = this.create_output_subarea(\n metadata,\n CLASS_NAME,\n EXEC_MIME_TYPE\n );\n this.keyboard_manager.register_events(toinsert);\n // Render to node\n var props = {data: data, metadata: metadata[EXEC_MIME_TYPE]};\n render(props, toinsert[0]);\n element.append(toinsert);\n return toinsert\n }\n\n events.on('output_added.OutputArea', handle_add_output);\n events.on('output_updated.OutputArea', handle_update_output);\n events.on('clear_output.CodeCell', handle_clear_output);\n events.on('delete.Cell', handle_clear_output);\n events.on('kernel_ready.Kernel', handle_kernel_cleanup);\n\n OutputArea.prototype.register_mime_type(EXEC_MIME_TYPE, append_mime, {\n safe: true,\n index: 0\n });\n}\n\nif (window.Jupyter !== undefined) {\n try {\n var events = require('base/js/events');\n var OutputArea = require('notebook/js/outputarea').OutputArea;\n if (OutputArea.prototype.mime_types().indexOf(EXEC_MIME_TYPE) == -1) {\n register_renderer(events, OutputArea);\n }\n } catch(err) {\n }\n}\n",
"application/vnd.holoviews_load.v0+json": ""
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
""
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.holoviews_exec.v0+json": "",
"text/html": [
"\n",
""
]
},
"metadata": {
"application/vnd.holoviews_exec.v0+json": {
"id": "326fe354-9404-482b-92de-dc1254d9edfc"
}
},
"output_type": "display_data"
}
],
"source": [
"from __future__ import print_function, division, generators\n",
"import sys\n",
"print(\"Running Python {0}.{1}\".format( \n",
" sys.version_info[:2][0],sys.version_info[:2][1]))\n",
"if sys.version_info[:2] > (3, 0):\n",
" print(\"Adding xrange for backwards compatibility\".format(\n",
" sys.version_info[:2][0],sys.version_info[:2][1]))\n",
" from past.builtins import xrange\n",
"#from __future__ import print_function,division,generators\n",
"%pylab inline\n",
"from scipy.stats import pearsonr\n",
"import pandas as pd\n",
"import datetime as dt\n",
"from scipy.stats import kendalltau\n",
"import seaborn as sns\n",
"from random import randrange\n",
"sns.set(style=\"darkgrid\") # Optionally change plotstyle ('whitegrid', 'ticks','darkgrid')\n",
"import altair as alt\n",
"# Import panel and vega datasets\n",
"import panel as pn\n",
"pn.extension() \n",
"import numpy as np"
]
},
{
"cell_type": "code",
"execution_count": 256,
"metadata": {},
"outputs": [],
"source": [
"monsoon = pd.read_csv('https://raw.githubusercontent.com/Koi4595/SI-649/main/Monsoon_data.csv', parse_dates=['Date'])\n",
"monsoon.index = monsoon.Date\n",
"# monsoon = monsoon.drop('Date', axis=1)\n",
"\n",
"olou = pd.read_csv('https://raw.githubusercontent.com/Koi4595/SI-649/main/Olou_counts.csv',parse_dates=['Date'])\n",
"olou.index = olou.Date\n",
"# olou = olou.drop('Date', axis=1) \n",
"olou['Date'] = pd.to_datetime(olou['Date'])"
]
},
{
"cell_type": "code",
"execution_count": 275,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"\n",
""
],
"text/plain": [
"alt.VConcatChart(...)"
]
},
"execution_count": 275,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"\n",
"# Create the step chart for Monsoon data\n",
"step_chart = alt.Chart(monsoon).mark_line(interpolate='step-after').encode(\n",
" x=alt.X('Date:T', title=None), # 'T' specifies temporal (time-based) data\n",
" y=alt.Y('Precip:Q', title='Precipitation (mm)') # 'Q' specifies quantitative data\n",
").properties(\n",
" width=600,\n",
" height=200,\n",
" title='Monthly Precipitation'\n",
")\n",
"\n",
"# Create the point chart for Olou data\n",
"point_chart = alt.Chart(olou).mark_point(color='green').encode(\n",
" x=alt.X('Date:T', title='Date'),\n",
" y=alt.Y('Counts:Q', title='Olou NM Counts (scaled by 1/1000)') # Adjust the title as necessary\n",
").properties(\n",
" width=600,\n",
" height=200,\n",
" title='Olou NM Counts'\n",
")\n",
"\n",
"# Combine the charts\n",
"combined_chart = alt.vconcat(step_chart, point_chart).resolve_scale(x='shared')\n",
"\n",
"# To display the chart in a Jupyter notebook, just call the variable\n",
"combined_chart\n"
]
},
{
"cell_type": "code",
"execution_count": 258,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"\n",
""
],
"text/plain": [
"alt.VConcatChart(...)"
]
},
"execution_count": 258,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"highlight1 = alt.selection_point(\n",
" on='mouseover', \n",
" fields=['Date'], \n",
" nearest=True \n",
")\n",
"\n",
"highlight2 = alt.selection_point(\n",
" on='mouseover', \n",
" fields=['Date'], \n",
" nearest=True \n",
")\n",
"\n",
"\n",
"step_chart = alt.Chart(monsoon).mark_line(interpolate='step-after').encode(\n",
" x=alt.X('Date:T', title=None), # 'T' specifies temporal (time-based) data\n",
" y=alt.Y('Precip:Q', title='Precipitation (mm)'),\n",
" tooltip=[alt.Tooltip('Date:T', title='date'), alt.Tooltip('Precip:Q', title='preciptation')],\n",
" opacity=alt.condition(highlight1, alt.value(1), alt.value(0.2)) \n",
").add_params(\n",
" highlight1\n",
").properties(\n",
" width=600,\n",
" height=200,\n",
" title='Monthly Precipitation'\n",
")\n",
"\n",
"# Create the point chart for Olou data\n",
"point_chart = alt.Chart(olou).mark_point(color='green').encode(\n",
" x=alt.X('Date:T', title='Date'),\n",
" y=alt.Y('Counts:Q', title='Olou NM Counts'),\n",
" tooltip=[alt.Tooltip('Date:T', title='date'), alt.Tooltip('Counts:Q', title='Counts')],\n",
" opacity=alt.condition(highlight2, alt.value(1), alt.value(0.2)) \n",
").add_params(highlight2\n",
" ).properties(\n",
" width=600,\n",
" height=200,\n",
" title='Olou NM Counts'\n",
")\n",
"\n",
"\n",
"combined_chart = alt.vconcat(step_chart, point_chart).resolve_scale(x='shared')\n",
"\n",
"combined_chart\n"
]
},
{
"cell_type": "code",
"execution_count": 259,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"\n",
""
],
"text/plain": [
"alt.VConcatChart(...)"
]
},
"execution_count": 259,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"monsoon['Date'] = pd.to_datetime(monsoon['Date'])\n",
"\n",
"step_chart = alt.Chart(monsoon).mark_line(interpolate='step-after').encode(\n",
" x=alt.X('Date:T', title=None), # 'T' specifies temporal (time-based) data\n",
" y=alt.Y('Precip:Q', title='Precipitation (mm)'),\n",
" tooltip=[alt.Tooltip('Date:T', title='date'), alt.Tooltip('Precip:Q', title='preciptation')],\n",
" opacity=alt.condition(highlight1, alt.value(1), alt.value(0.2)) \n",
").add_params(\n",
" highlight1\n",
").properties(\n",
" width=600,\n",
" height=200,\n",
" title='Monthly Precipitation'\n",
")\n",
"\n",
"# Create the point chart for Olou data\n",
"point_chart = alt.Chart(olou).mark_point(color='green').encode(\n",
" x=alt.X('Date:T', title='Date'),\n",
" y=alt.Y('Counts:Q', title='Olou NM Counts'),\n",
" tooltip=[alt.Tooltip('Date:T', title='date'), alt.Tooltip('Counts:Q', title='Counts')],\n",
" opacity=alt.condition(highlight2, alt.value(1), alt.value(0.2)) \n",
").add_params(highlight2\n",
" ).properties(\n",
" width=600,\n",
" height=200,\n",
" title='Olou NM Counts'\n",
")\n",
"\n",
"\n",
"combined_chart = alt.vconcat(step_chart, point_chart).resolve_scale(x='shared')\n",
"\n",
"combined_chart\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": 260,
"metadata": {},
"outputs": [],
"source": [
"def return_stderr(data):\n",
" \"\"\"Calculate uncertainty of a np array as Standard Error of the Mean\"\"\"\n",
" return np.nanstd(data)/np.sqrt(np.count_nonzero(data) - 1)\n",
"\n",
"climo = {} # Produce a dic of monthly climatology using list comprehension\n",
"climo['means'] = [np.mean(monsoon.Precip[monsoon.index.month == (mnth+1)])\n",
" for mnth in xrange(12)]\n",
"climo['error'] = [return_stderr(monsoon.Precip[monsoon.index.month == (mnth+1)].values) \n",
" for mnth in xrange(12)]"
]
},
{
"cell_type": "code",
"execution_count": 261,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"C:\\Users\\HP\\AppData\\Local\\Temp\\ipykernel_16236\\2603195274.py:10: UserWarning: FixedFormatter should only be used together with FixedLocator\n",
" ax1.set_xticklabels(labels=['Jan','Mar','May','Jul','Sep','Nov'])\n"
]
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAdIAAAHZCAYAAAAyp7r1AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8pXeV/AAAACXBIWXMAAA9hAAAPYQGoP6dpAABpyUlEQVR4nO3deVhUdd8G8HsGGPZh32RRBAFRwQ01TTFMza1E67FFSy3T7MlXK9ustFKz3B7N3HJNK620stLcKk0z10RUFkFEUZB9X4ZZ3j9wRkdAgRk4s9yf6+KSOXPOme/8HPjy20UqlUoFIiIiahKx0AEQEREZMyZSIiIiHTCREhER6YCJlIiISAdMpERERDpgIiUiItIBEykREZEOmEiJiIh0wERKZACaui4K11OpH8uGWgoTKRmlcePGITQ0VOurY8eO6N+/Pz744AMUFRW1SBxvvfUWYmJidLrm4MGDePPNNxv92t999x0++eQTzeOdO3ciNDQUGRkZjb6Xvh0/fhyhoaE4fvw4AOCzzz5DaGhoi7x2VlYWJk+ejOvXrzfquqb8XxIBgKXQARA1VXh4OGbPnq15XF1djQsXLmDJkiVISEjAN998A5FI1KwxTJ06Fc8++6xO12zatKlJr71q1Sr06NFD87h///7Yvn07PD09m3S/5vTEE0+gb9++LfJaf//9N/7880+89957LfJ6REykZLQcHBzQuXNnrWNRUVEoKyvD8uXLERcXV+t5fQsICGiRaxrC1dUVrq6uzXJvXXl7e8Pb21voMIiaBZt2yeR07NgRAHDjxg0ANc3Ar7/+OqZNm4auXbvixRdfBABUVVXh008/RXR0NDp27IgRI0Zg9+7dWvdSqVT46quvMGzYMERERGDgwIH44osvNP1vdzcHxsTEYOnSpfj444/Ro0cP9OjRAzNnzkRBQYHmnDuvGTduHE6cOIETJ05oNYUmJibiv//9L3r16oUOHTqgb9++mDt3LiorKzWvc/36dfzwww+a5ty6mnaPHj2Kp59+Gt26dUPPnj3x2muvITMzU/P8zp07ER4ejri4OIwZMwadOnVC//798cUXX9y3nM+fP48XXngB3bp1Q69evTBjxgyte9/p7qbdcePG4f3338eqVavQt29fREZGYtKkScjNzcWOHTswcOBAdOnSBePHj9d6PwqFAmvXrsXw4cMRERGBzp0748knn8SxY8c07+ftt98GAAwYMABvvfWW5rqvvvoKI0aMQEREBPr3749Fixahqqqq3vfX0Gt++OEHDB06FJ06dcKjjz6KY8eOITw8HDt37kRhYSE6deqEJUuWaF1TVVWFqKgorFix4r7lTIaPiZRMTlpaGgDA399fc2zPnj2wsrLC559/jmeffRYqlQovv/wytm3bhgkTJmDVqlXo0qULZsyYgR9//FFz3ZIlSzBv3jxER0dj1apVeOKJJ7B06VKsXLmy3tf/+uuvcfr0acyfPx+vv/46Dh8+jBdeeAFKpbLWubNnz0Z4eDjCw8Oxfft2dOjQAdnZ2XjmmWdQUVGBBQsW4IsvvsCQIUOwZcsWTTPwihUr4OHhgejo6Hqbc3/66SdMnDgRXl5eWLJkCd5++238+++/GDNmDPLy8jTnKZVKTJ8+HUOHDsXatWvRrVs3LFq0CH/99Ve97zExMRFPPfWUJsYPP/wQFy9exMSJE1FdXV3vdXf69ddf8ffff2PevHl4++238ffff2Ps2LHYsmUL3nzzTcyaNQtxcXH48MMPNdcsWrQIn3/+OcaMGYN169bhww8/REFBAf7v//4P5eXl6N+/P1566SVNGU2dOhUA8P7772P+/PmIiYnBqlWr8Mwzz2Dr1q2YOnVqvYOSGnLNjz/+iLfeegtdu3bFypUrMXjwYEydOhUKhQIA4OzsjIcffhg///yz1uscPHgQJSUlGDlyZIPKigwbm3bJaKlUKsjlcs3joqIinDhxAqtWrULnzp01NVMAEIvF+Oijj2BnZwegpqb2119/YenSpRg6dCgAoG/fvqioqMCiRYswfPhwlJeXY+PGjRg3bhzeeOMNAECfPn2Qn5+P06dP1xuXSCTCxo0b4ejoCKCmyfXll1/G4cOH0b9/f61zg4OD4eDgAACaZuizZ8+iffv2WLZsmea53r1749ixYzh58iSmTJmC8PBwSCQSuLq61tl8rVQqsXDhQvTu3RtLly7VHO/atSuGDh2KDRs2YObMmZpynDp1Kp544gkAQLdu3bB//378+eef9fZrrly5Ek5OTtiwYQOsra0B1DTfTp8+HUlJSfWWzZ2qq6uxYsUKODk5AQD279+PI0eO4MCBA5o/ghISEvDTTz9prsnOzsaMGTMwbtw4zTEbGxu88sorSEpKQpcuXTRN5+3bt4efnx9SUlLw/fffY/r06Zok26dPH3h6euKNN97A4cOHER0drRVbQ69ZtmwZHnroIcydOxdAzWfIysoKixcv1txr9OjR2L17N44fP45evXoBqKnF9uzZE35+fg0qKzJsrJGS0Tp58iQ6dOig+erduzdeffVVdOjQAUuWLNEaaOTn56dJogBw7NgxiEQiREdHQy6Xa75iYmKQk5ODS5cu4ezZs6iursbAgQO1Xvett97Chg0b6o3roYce0iRRoKYZ1srKCqdOnWrQ+3rwwQexdetWWFtbIy0tDX/88QdWr16N/Px8yGSyBt0jLS0NOTk5GDFihNbxgIAAdOnSRdOErNalSxfN9+oEXV5eXu/9T58+jX79+mmSKABERETg999/1/oD5l6CgoI0SRQAPDw84OrqqtWS4OzsjJKSEs3jxYsXY/z48cjPz8e///6LnTt3YteuXQBQb034xIkTAFCrLIYNGwYLC4taZdHQa9LT03Hjxg088sgjtc65U+/evdGqVSvNHwTZ2dk4evQoYmNj64yXjA9rpGS0OnTogA8++ABATS3Q2toaPj4+mlrcndzd3bUeFxYWQqVSoWvXrnXeOzs7WzOFprEDeO5uZhWLxXB2dkZxcXGDrlcqlViyZAm++uorlJeXw8fHBxEREVpJ634KCwsB1H7f6mMXL17UOmZjY1Mr5nvNwywsLISbm1uD46lLXf9Ptra297wmPj4eH3zwAeLj42FjY4Pg4GD4+voCqH/eqPr/0cPDQ+u4paUlXFxctBJ1Y67Jz88HgFrlcPc1YrEYo0aNwsaNGzF79mzs2rULNjY2GDx48D3fKxkPJlIyWvb29ujUqVOTrnV0dISdnR2+/PLLOp9v3bo1zpw5AwDIz89H27ZtNc9lZmYiPT0d3bp1q/NadRJTUygUKCgoaHBCXrt2LTZt2oQ5c+Zg8ODBmtrt448/3qDrgZqaHADk5ubWei4nJwcuLi4NvlddHB0dNYnkTocOHUJYWJhO965PaWkpXnjhBYSGhuKXX35BUFAQxGIxDh06hL1799Z7nbrWm5OTo9WUWl1djYKCgjrLoiHXqEch39nfXNdjABg1ahQ+//xzHD58GLt378bQoUPv+0cDGQ827ZJZ6tGjB8rLy6FSqdCpUyfN16VLl/D5559DLpcjIiICVlZWOHjwoNa1mzdvxv/93//VO0f1r7/+0mqCPXjwIORyOR544IE6zxeLtX8MT58+jeDgYDz++OOaJHrz5k0kJydrDVi6+7o7BQYGwsPDAz///LPW8WvXruHs2bP11sQbqnv37rXeZ1JSEl588UXEx8frdO/6XL58GYWFhXj22WfRrl07zfs/fPgwAGjK5u5yUc+1vbssfv31VygUijr/IGrINd7e3ggICMD+/fu1zqkrqfv6+uKBBx7Ali1bcOHCBTbrmhjWSMksRUdHIyoqClOnTsXUqVMRFBSEc+fO4bPPPsODDz6oqT0+++yz2Lx5MyQSCXr16oX4+Hhs3boVr776Kiwt6/7xycrKwksvvYRnn30WmZmZWLJkCR588EH07NmzzvOlUin+/fdfzbSJiIgIrFy5EmvXrkXnzp2Rnp6ONWvWQCaToaKiQuu6ixcv4sSJE4iIiNC6p1gsxquvvoq3334bM2bMwMiRI1FQUKAZ3DNhwgSdym/q1KkYM2YMJk2ahOeeew4ymQzLli1Dhw4d0K9fP/z777863b8ugYGBcHBwwOrVq2FpaQlLS0vs3bsX33//PQBoykYqlQKoGbzUr18/BAcHIzY2FitWrEBlZSV69uyJhIQErFixAj179qxzQFVDrhGJRJg2bRpef/11zJ49GwMHDkRiYiI+//xzALUT+uOPP45XX30Vbdq0qbc1g4wTEymZJbFYjLVr12LZsmVYs2YN8vLy4OXlhfHjx+Pll1/WnDdz5ky4u7vjm2++wYYNG+Dn54d33nkHTz/9dL33HjZsGKRSKaZPnw47OzvExsZixowZ9Z7/zDPP4Pz585g0aRI+/vhjTJ48GQUFBfjyyy/x+eefw8fHB4899hhEIhHWrFmDoqIiODk5YeLEiZg/fz6ef/55bNy4sdZ9R40aBXt7e6xZswYvv/wyHBwc0LdvX7z66qu1+vEaKzw8HFu2bMHixYsxY8YM2NvbIzo6Gq+//jokEolO966Po6MjVq5ciU8//RT/93//B3t7e7Rv3x5bt27FpEmTcOrUKcTExKBnz57o3bs3Fi9ejGPHjmHt2rWYN28eWrdujR07dmD9+vXw9PTEuHHj8PLLL9dbs2/INSNGjEB5eTnWr1+PHTt2oF27dpg1axZmzZqlNbgNqPnjTSQSYdSoUc1SPiQckYorOxPpTUxMDHr06IEFCxYIHQq1gF9++QXh4eFafeh//vknJk+ejJ9++kmrv3j37t2YOXMm/vzzT53/kCHDwhopEVET7dq1C0uXLsX06dPh4+ODK1euYPny5ejRo4cmiR44cADx8fHYtm0bHnvsMSZRE8RESkTURJ988gkWL16MhQsXIj8/H+7u7hgyZAimTZumOScjIwObNm1C9+7dNUsWkmlh0y4REZEOOP2FiIhIB0ykREREOmAiJSIi0gETKRERkQ44arcOKpUKSiXHYNVFLBaxbOrAcqkfy6ZuLJf6GUrZiMWiepcCvRMTaR1EIhGKi8shl9feiNmcWVqK4eJiz7K5C8ulfiyburFc6mdIZePqag8Li/snUjbtEhER6YCJlIiISAdMpERERDpgIiUiItIBEykREZEOmEiJiIh0wERKRESkAyZSIiIiHTCREhER6YCJlIiISAdMpERERDpgIiUiItIBEykREZEOmEiJiIh0wERKRESkAyZSIiIiHTCRElGzqJIp8OzcAxjx2k+okimEDoeo2TCREhER6YCJlIiISAdMpERERDpgIiUiItIBEykREZEOmEiJqFncyC3TfF9RJRcwEqLmxURKRM3iZGK25vv5W04jM6/sHmcTGS8mUiJqFknXCjTfZ+WX46PNp3A6KUfAiIiaBxMpEeldRZUc6Vklmschfk6olCnw+Q/x2HEoFUqlSsDoiPSLiZSI9C7paiHuzJUzxnTGwO7+AIBfj6Xjf9/FobSiWqDoiPSLiZSI9O5ier7WY0sLMZ56uB1eHBEOiaUY59Py8eGmk7h6s6SeOxAZDyZSItK7hPSCOo/36uCNd8Z1g7uTDXKLKjF/y2n8cyGrhaMj0i8mUiLSq6IyGa7n1D9CN8DLEe+Pj0LHQFfI5Eqs/fkivj6QDLlC2YJREukPEykR6VXirdqov6cDvnz3Yfy8+DFYSyy0znGwtcL0JyIxvHdrAMCBUxlYvO0sispkLR4vka6YSIlIrxJu9Y+2b+1yz/PEYhFG9QvCy7GdYCOxQNK1Qny46SQu3yhuiTCJ9IaJlIj06uKVmhppeJt7J1K1bqEeeO+57vB2tUNBSRUWfHUah+NuNGeIRHrFREpEepNTWIHcokpYiEVo5+fc4Ot83Ozx3nPd0aWdO+QKFTbtScSmPYmolrPflAyf4Im0sLAQ77//Pvr164euXbviqaeewqlTpzTPv/322wgNDdX66tevn+Z5pVKJ5cuXo2/fvoiMjMTEiRORnp4uxFshMnvq0bqBPlLYWls26lpba0u8PKoTRvVrCxGAw3E38MnXZ5BfXNkMkRLpj+CJ9NVXX0VcXByWLFmC77//Hh06dMDzzz+P1NRUAEBSUhKmTJmCI0eOaL5+/PFHzfUrV67Etm3bMHfuXGzfvh0ikQiTJk2CTMZBC0QtTZ1I79c/Wh+xSIThvdtg+n8iYW9jics3ivHhppNIulr3dBoiQyBoIk1PT8fRo0cxe/ZsdO/eHW3btsWsWbPg5eWFX375BQqFAikpKejUqRM8PDw0X66urgAAmUyGDRs24JVXXkF0dDTCwsKwdOlS3Lx5E/v37xfyrRGZHZVKpUmkDe0frU+ntm54b3wU/DwcUFxejUXbzmL/qWtQqbi0IBkeQROpi4sL1q5di44dO2qOiUQiqFQqFBUV4cqVK6iqqkJQUFCd1ycmJqKsrAy9evXSHJNKpQgPD8fJkyebPX4iuu16bhmKy2SQWIrRtpWTzvfzdLbFrHHd0CvcCwqlCt8cuIQvfrmIqmqFHqIl0h9BE6lUKkV0dDQkEonm2J49e3D16lU8+OCDSE5OhkgkwubNmxETE4OHH34YH330EUpKapYVy8qqWRHFx8dH676enp7IzMxsuTdCREi4NVq3nZ8TrCz186vFWmKBSSPC8eSAdhCLRPjnwk18vOU0cgor9HJ/In1o3GiAZnb69Gm88847GDBgAGJiYrB8+XKIxWL4+vpi9erVSE9PxyeffILk5GRs3rwZFRU1P0x3JmIAsLa2RlFRkU6xWFgI3n1scNRlwrLRxnKpkXhr27QObd1gaaldJrqWzdAHWiPQxxErdsbjanYpPtx0ElNjO6FTkJtuQQuEn5n6GWPZGEwiPXDgAF5//XVERkZiyZIlAIBXXnkF48ePh1QqBQCEhITAw8MDY8aMQXx8PGxsbADU9JWqvweAqqoq2Nra6hSPVKrb9aaMZVM3cy4XhUKJpKuFAIBeEa3g4mKv9bw+yqa3iz1CAt3x8eYTSL5aiEXb/sW4Ie3xeEw7iEQine8vBHP+zNyPMZWNQSTSrVu3Yt68eRg4cCAWLVqkqWGKRCJNElULCQkBUNOsq27Szc7ORkBAgOac7OxshIWF6RRTcXEFFFz7U4uFhRhSqS3L5i4sFyD1ehHKK+Wws7GEq50VCgpq1trVd9lYAHjj6S7Y8lsSDp29gS93J+BCai5efLRDo6fbCImfmfoZUtlIpbYNqhkL/sn7+uuv8dFHH2HcuHF45513IBbfDvq1115DYWEh1q9frzkWHx8PAAgODoa/vz8cHBxw/PhxTSItLi7GxYsXMXbsWJ3iUiiUkHMyeJ1YNnUz53KJT80DAIQFuECpVNXauFufZSOGCM89EoY23o74an8yTiflYM6GE/jvqE7wcbO//w0MiDl/Zu7HmMpG0EbotLQ0zJ8/HwMHDsTkyZORl5eHnJwc5OTkoKSkBMOHD8fRo0exatUqXL16FYcOHcI777yD4cOHIygoCBKJBGPHjsWiRYtw8OBBJCYmYsaMGfD29sbAgQOFfGtEZkXX+aNNEd3ZF28+3RUujtbIzCvHR5tP4d/knBZ7fSI1QWuke/fuRXV1Nfbv319r3mdsbCwWLFiAZcuWYfXq1Vi9ejUcHR0xYsQITJ8+XXPetGnTIJfL8e6776KyshJRUVFYv359rQFIRNQ8quUKXMqoGdzXkokUAIJ8nfD++Cis+iEeyRlF+GxnPIb3boORDwZCLDbOflMyPiIVZzjXqaCgzGiaFVqKpaUYLi72LJu7mHu5JFzJx8JtZ+HkIMGSl/toDfxpqbKRK5T49o8UHDiVAQDo2NYVkx/tAHsbKwBAlUyBl5YcAgCsejW61rZuLc3cPzP3Ykhl4+pq36A+UuMZX0xEBumiejWj1i6CjZ61tBDj6YdDMGl4OCSWYpy/nI8PN53EtexSQeIh88JESkQ6ud0/6ipwJMADHb3xzrhucHeyQU5hJeZtOYXjF28KHRaZOCZSImqy8ko50jJrNuJu6f7R+gR4OeL98VHoEOgKWbUSa3ZdwPeHUoUOi0wYEykRNVnytUKoVICniy3cnGzuf0ELcbC1wownIjHsgdYAgIOnMwSOiEwZEykRNdnF9HwANf2jhkYsFmF0dBBeju0Ia6vbg4s4vpL0jYmUiJpM0z/aRvj+0fp0C/XEm0930Ty+klUiYDRkiphIiahJispkuJ5TsxRgWICzsMHcx50rHp3mog2kZ0ykRNQkCbeadf09HeBoZzwLoJxJzoGSzbukR0ykRNQkiQIsC6gPBSVVuHyjWOgwyIQwkRJRk1y8tZF3eBvjSqQAcDIhW+gQyIQwkRJRo+UUViC3qBIWYhFC/J2FDqfRTiVls3mX9IaJlIgaTT1aN7CVFDYSwXdjvC9riQU2vBWDNa/3h621BQpKqpB6vUjosMhEMJESUaNdvFIz0Kh9gHE161pZitGlnQcANu+S/jCRElGjqFQqzUAjY+wfjQrzBACcZPMu6QkTKRE1yvXcMhSXV0NiKUbbVk5Ch9NoHQJdYWttiaJSGVIy2LxLumMiJaJGSbg1WredvzOsLI3vV4ilhRhdQ9wBsHmX9MP4fgqISFAJd+w/aqyiwrwA3Bq9q2TzLumGiZSIGkyhVCLpWk0iDTPiRBrexgX2NpYoKpPhUkah0OGQkWMiJaIGu5JVgooqBeysLdHay1HocJrM0kKMLiE1o3dPJLJ5l3TDREpEDabuHw1r7QKxWCRwNLrpcWv07ulENu+SbphIiajBEox0fd26hLWuad4tLq9G0rVCocMhI8ZESkQNIqtW4NKt6SLGOH/0bpYWYnQLvbU4A5t3SQdMpETUICnXiyBXKOHkIIG3q53Q4eiFevTu6aRsKJRKgaMhY8VESkQNcue0F5HIuPtH1cJaO8PB1gol5dVIuloodDhkpJhIiahBbvePugocif5YiNm8S7pjIiWi+yqvlCMts2YzbFPoH71Td/Xo3aQcNu9SkzCREtF9JV0rgEoFeLnYwlVqI3Q4ehUWUNO8W1pRjcT0QqHDISPEREpE96WeP2oK017uZiEWo7umefemwNGQMWIiJaL70vSPtjGd/tE7Rd3RvCtXsHmXGoeJlIjuqahMhuu5ZQBqmkFNUUiAM6R2ViirlGv2WiVqKCZSIrqnhPR8AECApwMc7SQCR9M8akbv1tRKufYuNRYTKRHdk6Z/1MRG695N3bz7bzKbd6lxmEiJ6J5MaX3dewnxd4bUXoKySjkuXmHzLjUcEykR1Su7sAK5RZWwEIsQ4u8sdDjNSiwWcfQuNQkTKRHVSz3wJrCVFDYSS4GjaX7q5t0zybls3qUGYyIlonpdvFIz0CjcxJt11dr5OcPJQYKKKjkupOULHQ4ZCSZSIqqTSqXS1EhNvX9UraZ5t6ZWyrV3qaGYSImoTtdzylBcXg2JpRhtWzkJHU6L0YzevZSDajmbd+n+mEiJqE4Xb9VG2/k7w8rSfH5VBPs5wdlBgooqBZt3qUHM56eDiBol8Y79R82JWCTS7AjD5l1qCCZSIqpFoVQi6Zp5LMRQlx5hXgCAsyk5qJYrBI6GDB0TKRHVciWzBBVVCtjbWCLA01HocFpcW18pXBytUVGlwHk279J9MJESUS3q/tHQABeIxSKBo2l5YpFIM+iIzbt0P0ykRFRLwq35o+Yy7aUut0fv5kJWzeZdqh8TKRFpkVUrkHK9GAAQbob9o2ptW0nhJrVGlYzNu3RvTKREpCXlehHkCiWcHSTwdrUTOhzBiDh6lxqIiZSItNze7cUVIpH59Y/eKUo9epfNu3QPTKREpEW9hZg594+qBfo4wk1qg6pqBeIv5wkdDhkoJlIi0iivrMaVLPaPqolEIkS1Z/Mu3RsTKRFpJF0rhEoFeLnYwlVqI3Q4BkE9evdsSi6q2LxLdWAiJSKNBHWzbhtXgSMxHG28HeHuZANZtRLxqWzepdqYSIlII8FM19e9lzubd0+weZfqwERKRACAotIqXM8tAwCEBjgLG4yBUa+9ey4lF1UyNu+SNiZSIgJwuzYa4OkARzuJwNEYlgAvB3g620ImVyIuNVfocMjAMJESEYA75o9ytG4tHL1L98JESkQAtBdioNrUo3fPpeahUiYXOBoyJIIn0sLCQrz//vvo168funbtiqeeegqnTp3SPJ+QkICxY8eic+fO6N+/P9avX691vVKpxPLly9G3b19ERkZi4sSJSE9Pb+m3QWTUsgsrkFtUCQuxCCH+TkKHY5D8PR3g6WKLarkScSkcvUu3CZ5IX331VcTFxWHJkiX4/vvv0aFDBzz//PNITU1FQUEBJkyYgDZt2mDHjh145ZVXsGzZMuzYsUNz/cqVK7Ft2zbMnTsX27dvh0gkwqRJkyCTyQR8V0TGRb3bS2ArKWwklgJHY5hE3FqN6iHoT0x6ejqOHj2Kb775Bl27dgUAzJo1C4cPH8Yvv/wCGxsbSCQSzJkzB5aWlggKCkJ6ejq++OILjB49GjKZDBs2bMDMmTMRHR0NAFi6dCn69u2L/fv3Y9iwYUK+PSKjwWkvDRMV5olfj6XjXGoeKqrksLXmHx0kcI3UxcUFa9euRceOHTXHRCIRVCoVioqKcOrUKURFRcHS8vaHtVevXkhLS0NeXh4SExNRVlaGXr16aZ6XSqUIDw/HyZMnW/S9EBkrlUp1R/8oE+m9+Hs6wMvVDnKFEnEpHL1LNQT9c0oqlWpqkmp79uzB1atX8eCDD2Lp0qUICQnRet7Ts6Zp5caNG8jKygIA+Pj41DonMzNTp9gsLARv9TY46jJh2Wgz9nK5ll2KkvJqSKzECG3tAks9vg9jL5u69Az3wq4jaTiVlIMHI1s16R6mWC76YoxlY1DtEqdPn8Y777yDAQMGICYmBh9//DEkEu35bNbW1gCAqqoqVFRUAECd5xQVFekUi1Rqq9P1poxlUzdjLZfD8TV/kHZs6w4Pd8dmeQ1jLZu6DOzVBruOpOFcah6sbSWws7Fq8r1MqVz0zZjKxmAS6YEDB/D6668jMjISS5YsAQDY2NjUGjRUVVUFALCzs4ONTc2i2jKZTPO9+hxbW93+E4qLK6BQKHW6h6mxsBBDKrVl2dzF2Mvl1MWaRNrOV4qCgjK93tvYy6YuUmsxfNzskJlXjt9PpKNPJ5/7X3QXUywXfTGkspFKbRtUMzaIRLp161bMmzcPAwcOxKJFizQ1TG9vb2Rna4+OUz/28vKCXC7XHAsICNA6JywsTKeYFAol5HJ+wOvCsqmbMZaLQqlE4q3+0dAA52aL3xjL5l6iwjyx6+gVHL9wEz3bezX5PqZWLvpkTGUjeCP0119/jY8++gjPPPMM/ve//2k100ZFReH06dNQKG6vbXns2DEEBgbCzc0NYWFhcHBwwPHjxzXPFxcX4+LFi+jevXuLvg8iY3QlswSVMgXsbSwR4Nk8zbqmSD0N5nxaHsorqwWOhoQmaCJNS0vD/PnzMXDgQEyePBl5eXnIyclBTk4OSkpKMHr0aJSWlmLWrFlISUnBzp07sXnzZkyePBlATd/o2LFjsWjRIhw8eBCJiYmYMWMGvL29MXDgQCHfGpFRuHirNhoW4AKxWCRwNMbD18MBrdztIVeo8O8ljt41d4I27e7duxfV1dXYv38/9u/fr/VcbGwsFixYgHXr1mHevHmIjY2Fh4cH3njjDcTGxmrOmzZtGuRyOd59911UVlYiKioK69evrzUAiYhqUy/EwPV1Gy8qzBM/HUnDycTsJvWTkukQqVQqldBBGKKCgjKjaZ9vKZaWYri42LNs7mKs5SKrVuC///sLcoUS8yb1hI+bvd5fw1jLpiGu55bhvXXHYSEW4X/THoR9I0bvmnK56MqQysbV1b5Bg40E7yMlImFcul4EuUIJZwcJvF3thA7H6Pi628PXwx4KpQr/JrN515wxkRKZqcQ7dnsRidg/2hRce5cAJlIis3Xxyq31ddk/2mTqRHrxSj5KKzh611wxkRKZofLKalzJKgbA9XV14eNmDz8Ph1vNuzlCh0MCYSIlMkNJVwuhUgFernZwldrc/wKqV1R7Nu+aOyZSIjN0kbu96M3t5t0CNu+aKSZSIjOUyP1H9cbb1Q4Bng5QqlQ4w+Zds8RESmRmikqrcD23DCIAYUykesHmXfPGREpkZtSbePt7OcDBtulbgNFt3W817yZcKUBJuew+Z5OpYSIlMjMXNc26rgJHYjq8XOzQ2suRzbtmiomUyIyoVCok3Jo/ymZd/WLzrvlq9KL1BQUFOHDgAI4dO4aMjAyUlJTAxcUFrVq1Qr9+/dC/f39IpdLmiJWIdJRTVIm84kpYiEUI8XcSOhyT0j3ME9//mYqE9AIUl8sgtePGGeaiwYk0Pz8fq1evxnfffQeFQoGgoCD4+vqidevWKC4uRnJyMnbv3g2JRIInn3wSkyZNgpubW3PGTkSNpN7tpW0rKWwkgm7+ZHI8nW3RxtsRV7JKcCYpB/27+AodErWQBv0k/fbbb/joo4/QoUMHfPTRRxgwYABsbW1rnVdaWorDhw9j27ZtGDp0KGbPno2hQ4fqPWgiapoEzh9tVlHtPXElqwQnE7OZSM1IgxLpl19+ibVr16JDhw73PM/BwQFDhw7F0KFDERcXh48//piJlMhAKFUqTSINb8OBRs0hKtQT3/2RisSrBSgqk8HJns275qBBg42+/vrr+ybRu0VGRmLbtm1NCoqI9O96ThlKyqshsRKjbSuOY2gO7s62CPSRQqUCziRx0JG54KhdIjOh7h8N8XOGZQM2K6am4dZq5qfRow1kMhm2bt2KM2fOoLi4uNbzIpEImzdv1ktwRKQ/mv5RbpvWrLqHeeDbP1KQdLUQRaVVcHKwFjokamaN/rP0ww8/xKeffor09HSoVKpaX0qlsjniJCIdKJRKJF0rBMCFGJqbu5MtglpJoQJwKomLM5iDRtdI9+/fjylTpmD69OnNEA4RNYe0zBJUyhSwt7GEv5eD0OGYvO5hnki9UYyTidkY0M1P6HComTW6RioWixEVFdUcsRBRM1H3j4YFuEAsEgkcjenrHlrTT3rpWiEKSqoEjoaaW6MT6ciRI7Fjxw424RIZEfaPtiw3JxsE+dY0757m6F2T1+im3enTp2PkyJEYPHgwOnbsCBsbG63nRSIR5s+fr7cAiUg3smoFUq4XAeBCDC0pKswLqddrmncf7u4vdDjUjBqdSBctWoS0tDTY2toiLi6u1vMiNhsRGZRL14sgV6jg4mgNb1c7ocMxG91DPbDt4CVcyihCQUkVXBw5etdUNTqR7tq1C8899xzeeOMNWFhYNEdMRKRH6t1e2rd24R+6LchVaoNgPyekZBThVGI2BkaxVmqqGt1HqlAoEBMTwyRKZCQS0msGGrFZt+VxcQbz0OhEOnDgQOzZs6c5YiEiPSuvrMaVrBIATKRC6B7qCRGAlOtFyC+uFDocaiaNbtqNjIzE4sWLkZiYiC5dusDe3l7reZFIhJdffllvARJR0yVdLYRKBXi52sFVanP/C0ivXByt0c7PCcm3mncH9QgQOiRqBo1OpHPmzAEAnD17FmfPnq31PBMpkeG4qN7thbVRwUS190JyRhFOMpGarEYn0sTExOaIg4iaAfcfFV63UA98vT8ZqTeKkVtUAXen2ns5k3HjFhBEJqqwtAo3cssgAhDGRCoYZwdrhPg7AwBOJXLtXVPE3V+ITJS6Nurv5QAHWyuBozFvUe09kXStECcTs/FITzbvmhru/kJkohI0/aPc7UVo3UI8IBIBaZnFyC2sEDoc0jPu/kJkglQq1e2FGLi+ruCcHKwR6u+MxKuFOJmUjRHugUKHRHrE3V+ITFBOYQXyiithIRYhxM9Z6HAINaN3AeBkAhdnMDXc/YXIBKmnvbRtJYW1hKuQGQJ18+6VrBI8O/cARrz2E6pkCqHDIj3g7i9EJujO9XXJMEjtJQgLcNH0XZPp4O4vRCaiSqbAS0sOAYBmlG54Gw40MiRR7T2ZSE0Qd38hMkGlFdWQWInRtpVU6FDoDl1DPLB1bxKUKqEjIX3i7i9EJirE3xmWFlxzxZBI7SQIDWBzu6nh7i9EJor9o4apa4iH0CGQnnH3FyITxYUYDFPnYHd8tT8ZAJBdUA4fN/v7XEGGjru/EJkgextL+Hs5CB0G1eHO5RrPpeYxkZoA7v5CZIJC/J0h5gh6g3cuNQ+DubWa0WtQH2lBQdOGazf1OiLSjXq3ETJsydcKUVElFzoM0lGDEumoUaOwefNmyGSyBt20srIS69evR2xsrE7BEVHDKe6YUxHs6yRgJNRQCqUKF9LyhQ6DdNSgRLplyxb8/vvv6Nu3L95//30cO3YMpaWlWueUlJTg0KFD+PDDD9G3b18cOHAAW7ZsaZagiai2a9klmu9bubPfzVjEpeYKHQLpqEF9pH5+fti8eTP27duHtWvX4ttvv4VIJIJUKoWtrS2Ki4tRUVEBlUqF8PBwzJs3D4MGDWru2InoDinXizTfs3/UeJxLzYNSpeL/mRFr1GCjQYMGYdCgQUhLS8M///yDa9euobS0FC4uLmjVqhX69OkDPz+/5oqViO4hJaPo/ieR4KwlFvjy3Yfh4GiLZ97fjZLyaqRlFiOoFZvjjVWjR+0CQGBgIAIDuZ8ekaFQqVRaNVIyfFaWYnRq64YTCdk4l5LHRGrEuH4YkQm4kVeOskqO/jQ2ndu5A2A/qbFrUo2UiAzLpWuFAICwAGe88XRXYYOhBosIcocIwNWbpSgoqYKLo7XQIVETsEZKZAKSMwoBAO38nAWNgxpHai/R7NDDWqnxYiIlMgHqGikXYjA+EcE1zbvnUvIEjoSaiomUyMjlFVUir7gKYpEIQb7cf9TYRAa5AQAupudDVq0QOBpqiib1kR49ehR//PEHKioqoFQqtZ4TiUSYP39+k4JZuXIljh07prWQw9tvv42dO3dqnefl5YXDhw8DAJRKJVasWIHvvvsOxcXF6NatG2bPno3WrVs3KQYiY6Nu1m3t7QAbCYc9GBt/Twe4OFqjoKQKiVcLEXErsZLxaPRP3bp167Bo0SJYW1vD1dUVorsmEd/9uKE2bdqE5cuXIyoqSut4UlISpkyZgrFjx2qO3bmp+MqVK7Ft2zZ8/PHH8PLywsKFCzFp0iT88ssvkEgkTYqFyJiom3XZP2qcRCIRIoPc8OfZG4hLzWUiNUKNTqRfffUVRowYgXnz5uklUd28eROzZs3C6dOna81NVSgUSElJwdSpU+HhUXszXJlMhg0bNmDmzJmIjo4GACxduhR9+/bF/v37MWzYMJ3jIzJ0SewfNXoRwe748+wNnEvJg2qgqskVEhJGo/tI8/Ly8Pjjj+uttnfhwgU4OTlh165diIyM1HruypUrqKqqQlBQUJ3XJiYmoqysDL169dIck0qlCA8Px8mTJ/USH5EhKymXITOvHADQzo8T+o1V+9YusLIUI6+4Etdzy4QOhxqp0TXS8PBwXLp0CT179tRLADExMYiJianzueTkZIhEImzevBmHDx+GWCxGdHQ0pk+fDkdHR2RlZQEAfHx8tK7z9PREZmamTnFZWHAc1t3UZcKy0SZkuVzOLAZQs0i9i9SmxV//fviZqdvd5WJpKUZ4GxfEpeQh/nI+2viY76AxY/zMNDqRvvPOO5g+fTrs7OwQGRkJW1vbWue0atVKL8FdunQJYrEYvr6+WL16NdLT0/HJJ58gOTkZmzdvRkVFBQDUqh1bW1ujqEi35dKk0trvi2qwbOomRLmkZ9fUXjoFu8PFxXB3fOFnpm53lkvvSF/EpeThfFo+nh3eQcCoDIMxfWYanUifeuopKJVKvPPOO/W24yckJOgcGAC88sorGD9+PKTSmr/OQkJC4OHhgTFjxiA+Ph42NjV/gctkMs33AFBVVVVngm+M4uIKKBTK+59oRiwsxJBKbVk2dxGyXM5dygEAtPFyQEGB4TUJ8jNTt7rKpd2thRkS0/Nx9XoBHO3Mc7CkIX1mpFLbBtWMG51I586d26SAmkK9VdudQkJCAABZWVmaJt3s7GwEBARozsnOzkZYWJhOr61QKCGX8we/LiyburV0uVTK5LiSWbMHaXArJ4P+P+Fnpm53louzvQR+Hg7IyCnF2Uu5eKCDt8DRCcuYPjONTqSxsbHNEUedXnvtNRQWFmL9+vWaY/Hx8QCA4OBg+Pv7w8HBAcePH9ck0uLiYly8eFFrugyRKUq9UQylSgU3qTXcnAyvf5QaLzLYDRk5pYhLYSI1Jk2avZ2fn4+NGzfi+PHjKC4uhouLC7p3747x48fDzU1/c6CGDx+Ol156CatWrcKwYcOQlpaGDz/8EMOHD9eM5B07diwWLVoEV1dX+Pr6YuHChfD29sbAgQP1FgeRIdLMH+W0F5MRGeSOX4+l4/zlfCiUSliIjWfAjTlrdCLNysrCmDFjkJ+fj86dOyM8PBw5OTnYuHEjfvzxR3z//ffw8vLSS3APPfQQli1bhtWrV2P16tVwdHTEiBEjMH36dM0506ZNg1wux7vvvovKykpERUVh/fr1XIyBTF6yev4oF2IwGW1bSeFga4XSimqkZBQhNMBF6JCoAUQqlUrVmAtee+01nD17Fps2bYK/v7/m+LVr1zBx4kR069YNCxYs0HugLa2goMxo2udbiqWlGC4u9iybuwhRLnKFEi8vPYxquRIfvdATvu6GOWKXn5m63atcvvj5Io5dyMIjPQPwn4eCBYpQOIb0mXF1tW/QYKNGtxscOXIE06ZN00qiAODv74+XX35ZswYuETWfK1klqJYr4WBrhVZudkKHQ3oUGVzTPRaXwm3VjEWjE6lCoYCLS93NDa6urigtLdU5KCK6t9vr6zpxOTkT0zHQFWKRCJl55cgurBA6HGqARifS0NBQ/PTTT3U+9+OPP2qmpxBR80nmQvUmy87GCiH+Ncs9nmOt1Cg0erDR1KlT8fzzz6OwsBAjRoyAu7s7cnNz8fPPP+Pvv//G8uXLmyNOIrpFqVIh5XrNyl2hAc7CBkPNIiLIHYlXCxGXmoeHu/vf/wISVKMTaZ8+ffDJJ59g4cKFOHr0qOa4u7s75s+fz2knRM3sRk4ZyirlsLayQICXg9DhUDOIDHbDt3+kIOlqASplcu4za+Ca9L/z2GOP4dFHH8Xly5dRVFQEJycntG3bln01RC1AvZF3kK+U8wxNlLerHTydbZFdWIGLVwrQNaT2NpJkOBr0U3jjxg1UV1drvr9x4wYyMzNha2sLb29v2NraIjMzU/McETUfzh81fSKRCBEcvWs0GlQjHTBgALZv346IiAjExMTct+apr0XriUibSqW6PdCIKxqZtMggdxw4lYFzqXlQqlQQs8XPYDUokc6fP18zb3T+/PlswiUSSE5RJQpLZbAQi9C2lfnuWWkOQvydYS2xQFGZDOlZJQg04z1KDV2DEumdC9X36tULHh4esLKyqnVeVVUVLly4oL/oiEiLev5oG29HWFtZCBsMNSsrSzE6tnHF6eQcnEvNYyI1YI0eqTBgwIB6m27PnTuHCRMm6BwUEdVN0z/KZl2zwH5S49CgGuknn3yCwsJCADV9NCtXrqxzdaOEhAQ4OjrqNUAiui05o2b+KPtHzUNE25pEeiWrBIWlVXB2sBY4IqpLgxJpUFAQVq5cCaBmNNn58+dr7a5iYWEBR0dHvP322/qPkohQVCbDzfxyiFCzNCCZPicHawT6OCItswTnUvPQL7KV0CFRHRqUSB9//HE8/vjjAICYmBh8/vnnaN++fbMGRkTa1P2jvh72sLepPUaBTFNkkDsTqYFrdB/p77//fs8kWlJSolNARFQ3TnsxT5HB7gCAC2n5qOZWdAap0SsbyWQybNq0CSdOnEB1dTXU25mqVCqUl5cjJSUFcXFxeg+UyNypVzTiQgzmJcDLAU4OEhSVypB0rQAdA92EDonu0uga6aeffoolS5YgOzsbqampuH79OioqKnDu3DkkJCRg8uTJzREnkVmrqJLjWnbNFoUcsWteRCIRIoPUo3fzBI6G6tLoRLpv3z6MHz8eu3btwrhx49CxY0d899132LdvH3x9faFUsumBSN9SrhdBpQLcnWzg4siRm+YmMqimeTcuJVfTCkiGo9GJND8/H9HR0QBq9iaNj48HAHh5eeHFF1/E7t279RshEWn6R0NZGzVL7du4wNJCjNyiSmTmlQsdDt2l0YnU0dERMpkMANCmTRtkZmaitLRU6zER6dclDjQyazYSS4Td2ns2LpWLMxiaRifS7t27Y8uWLSgvL4efnx9sbW2xf/9+AMC///4LBwfuj0ikT9VyBS5n1oyGZ/+o+VKP3j3HflKD0+hE+vLLL+Ps2bOYPHkyLC0t8fTTT+P999/HqFGjsGzZMgwePLg54iQyW2mZJZArlJDaWcHLxVbocEggEbcGHF3KKEJZZbXA0dCdGj39JSwsDHv27EFycjIA4LXXXoODgwPOnDmDmJgYjtol0rM7549y5yXz5eFsC193e1zPLcP5y/noGe4ldEh0S6MT6cmTJxEeHo4+ffoAqBmaPWXKFABAcXEx9u3bh2HDhuk3SiIzxvmjpBYR5IbruWWIS81lIjUgjW7affbZZ5GamlrncxcvXuRau0R6pFSqkHq9ZqF69o+Sup80PjUPSiWnwRiKBtVI33zzTc1oXJVKhTlz5tQ5qOjKlStwd3fXb4REZuxadikqqhSwkVjA35MD+cxdkK8U9jaWKKuUI/VGEdqxlcIgNKhGOnjwYKhUKq2JwOrH6i+xWIzOnTvj448/brZgicyNulk32M8JYjH7R82dhViMTm25ypGhaVCNNCYmBjExMQCAcePGYc6cOQgKCmrWwIjo9vxR9o+SWkSQG/65eBNxqbl4vD9/DxuCRg822rJlS3PEQUR3UalUmhG77B8ltY5t3SASAddzypBbVAF3J06JElqDEumAAQPw+eefIywsDAMGDLjnuSKRCAcOHNBLcETm7GZBBYrLq2FpIUKgj6PQ4ZCBcLC1QjtfJyRnFOFcah5iuvoJHZLZa1Ai7dGjB+zt7QEAUVFRnMtG1ALUtdFAHymsLC2EDYYMSmSwO5IzihCXwkRqCBqUSO8cQLRgwYJmC4aIbrvEZl2qR0SQG777MxUJ6QWokilgLeEfWkJqdB+p2qFDh3D69GkUFRXB3d0dDzzwALp3767P2IjMmnrELqc40N1audvD3ckGuUWVSEgvQOd2nHYopEYn0sLCQkyaNAnx8fGwtLSEs7MzCgsLsXLlSvTt2xcrVqyARCJpjliJzEZBSRVyCishEgHBvk5Ch0MGpmazb3ccPJOBuNRcJlKBNXplo/nz5+Pq1atYsWIF4uPjceTIEZw7dw7Lli1DXFwcli5d2hxxEpmVS7dqo/6eDrCzaXLDEZmwyGD1fFJu9i20RifSQ4cO4fXXX8fDDz+sGXQkFosxaNAgzJgxAz///LPegyQyN8mcP0r3ERrgDImVGIWlMly9WSp0OGat0YkUQL3LAPr4+KC8nLu3E+mK80fpfqwsLdChjSsA4Bw3+xZUoxNpbGwsVq1ahbKyMq3jcrkcW7duRWxsrN6CIzJHZZXVuJ5T8/PVjomU7kG9iH1cKpcLFFKjO19sbGxw5coVzbKBnp6eKCgowJEjR5CVlQUnJyfNDjAikQjz58/Xe9BEpuxSRhFUALxcbOFkz4F7VD/1urtpN4pRVCbj50UgjU6ku3bt0uz8cvz4ca3nvL29cebMGc1jLtxA1HiX7tjIm+heXByt0drLEek3SxCfmocHI3yEDsksNTqR/v77780RBxHdop4/GspESg0QGeyG9JslOJeay0QqkCYNNiKi5iGrVuBKZgkA1kipYdT9pOfT8iFXKAWOxjw1etH6mJiYezbZctF6oqa7fKMYCqUKzg4SeDjZCB0OGYHW3o6Q2ktQXCZD8rVChN8ayUstp9GL1vfo0YN9n0TN5M5pL/w5o4YQi0SIaOuGI/GZOJeax0QqAL0sWi+XyyEWiyEWs6WYSBdcX5eaIjK4JpHGpeTiyQHthA7H7DQp861atQrPP/+85vHp06fRp08fbNq0SV9xEZkdhVKJ1OvFALgQAzVOeBtXWIhFuFlQgax8LorT0hqdSNetW4cVK1YgJCREc6x169Z47LHHsHjxYmzfvl2vARKZi6s3S1FVrYCdtSV8PeyFDoeMiK21JUIDnAHUrL1LLavRifTbb7/FjBkz8Oabb2qOeXt746233sIrr7yCL7/8Uq8BEpkLdf9oOz8niNk/So0UGVQzevccVzlqcY1OpDdv3kSHDh3qfK5Tp07IyMjQOSgic8T1dUkX6t1gkq8VorxSLnA05qXRidTf3x9///13nc8dP34c3t7eOgdFZG5UKhUuZRQB4PxRahpPFzv4uNlBoVThwpV8ocMxK41e2eipp57C/PnzIZfL8fDDD8PNzQ35+fk4cOAAvvzyS7z++uvNESeRScvMK0dpRTUklmK08XYUOhwyUhFBbsjMK0dcSi6iwjyFDsdsNDqRPvPMM8jKysLGjRu1RulaWFjgueeew/jx4/UYHpF5UDfrtm0lhaUFp5FR00QGuWPviWuIv5wHpVIFsZh97S2h0YkUAF577TW8+OKLOHv2LAoLCyGVShEREQEXFxd9x0dkFjh/lPQh2M8JttaWKCmvRlpmMYJ8nYQOySw0+U9fe3t7eHh4wMnJCd26deMqLEQ6uMSBRqQHlhZidGpbs7JRHDf7bjFNSqQ//fQT+vfvj9jYWEyZMgXp6ema6S8ymUzfMRKZtLyiSuQVV0EsEiHIVyp0OGTkIoJqRu/GpXAaTEtpdCLdvXs33nzzTfTq1QtLliyBUlmz28CgQYNw+PBhrFy5ssnBrFy5EuPGjdM6lpCQgLFjx6Jz587o378/1q9fr/W8UqnE8uXL0bdvX0RGRmLixIlIT09vcgxELU3drNva2wE2kib1thBpdGrrBhGAa9mlyC+uFDocs9DoRLp69Wo8+eST+PTTTzFo0CDN8VGjRuG///0vfv311yYFsmnTJixfvlzrWEFBASZMmIA2bdpgx44deOWVV7Bs2TLs2LFDc87KlSuxbds2zJ07F9u3b4dIJMKkSZNYMyajodnIm/2jpAeOdhJN3ygXZ2gZjU6kaWlpGDhwYJ3PRUZG4ubNm426382bN/HCCy9g2bJlCAwM1Hru22+/hUQiwZw5cxAUFITRo0dj/Pjx+OKLLwAAMpkMGzZswCuvvILo6GiEhYVh6dKluHnzJvbv39/Yt0YkiORb80fZP0r6ol6cgcsFtoxGJ1I3NzekpqbW+Vxqairc3Nwadb8LFy7AyckJu3btQmRkpNZzp06dQlRUFCwtbzd39erVC2lpacjLy0NiYiLKysrQq1cvzfNSqRTh4eE4efJko+IgEkJJuQw3cssA1CwNSKQPEbeWC0xIL4CsWiFwNKav0R0yQ4cOxfLly+Hp6Yno6GgANZt5nz9/HitXrsTw4cMbdb+YmBjExMTU+VxWVpbW4vgA4OlZM8n4xo0byMrKAgD4+PjUOiczM7NRcRAJQb2akY+bHRztJAJHQ6bCz8MerlJr5BdXIfFqgSaxUvNodCKdPn06kpOTMX36dM3+o+PGjUN5eTm6d++O//u//9NbcJWVlZBItH+5WFtbAwCqqqpQUVEBAHWeU1RUpNNrW3BSfC3qMmHZaNOlXFKu13xOwwJcYGlpeuXKz0zdWqJcOrfzwO+nM3Ducj66hhrPKkfG+JlpdCKVSCRYt24djh49in/++QeFhYVwdHREjx49EB0drdf5pDY2NrUGDVVVVQEA7OzsYGNjA6Cmr1T9vfocW1tbnV5bKtXtelPGsqlbU8ol9UbN/qNd2nvBxcV0t07jZ6ZuzVkufbv41STS1Dw4O9sZ3Vx/Y/rMNDqRTpkyBc8++yz69OmDPn36NEdMGt7e3sjOztY6pn7s5eUFuVyuORYQEKB1TlhYmE6vXVxcAYVCqdM9TI2FhRhSqS3L5i5NLZdKmRypt5p2/dzsUFBQ1lwhCoafmbq1RLn4u9lCYilGbmEF4pOz4e/p0Cyvo2+G9JmRSm0bVDNudCI9efIkJkyY0KSgGisqKgrbtm2DQqGAhYUFAODYsWMIDAyEm5sbHB0d4eDggOPHj2sSaXFxMS5evIixY8fq9NoKhRJyOX/w68KyqVtjyyXpaiGUKhXcpNZwtpeYdJnyM1O35iwXsUiE9q1dEJeahzNJ2fBxtWuW12kuxvSZaXQjdJ8+ffDdd99pmlib0+jRo1FaWopZs2YhJSUFO3fuxObNmzF58mQANc3MY8eOxaJFi3Dw4EEkJiZixowZ8Pb2rneKDpGh0Mwf5bQXaiaRwTWDjLjKUfNqdI3U2toae/bswf79++Hn51druotIJMLmzZv1EpybmxvWrVuHefPmITY2Fh4eHnjjjTcQGxurOWfatGmQy+V49913UVlZiaioKKxfv77WACQiQ6PZyJsLMVAzUS8XmHq9CCXlMo4MbyaNTqRZWVno0qWL5rFKpdJ6/u7HjbFgwYJaxyIiIrB9+/Z6r7GwsMDMmTMxc+bMJr8uUUuTK5SagUaskVJzcZXawN/TAdeyS3H+cj4e6OgtdEgmqdGJdMuWLc0RB5FZuZJVgmq5Eg62VmjlZlx9V2RcIoPdcC27FHGpuUykzaRRfaTnzp3Dnj17cPHixeaKh8gs3F5f18nopiWQcYm8tRhD/OV8yDlyulk0qEZaXFyMyZMn4+zZs1CpVBCJROjcuTOWLFlSa1UhIrq/ZC5UTy0k0EcKRzsrlJRXIyWjCGGtXYQOyeQ0qEb6v//9DxcvXsQrr7yCtWvX4s0330RaWhree++95o6PyOQoVSrNikahAc7CBkMmTywWoVPbmkFH3A2meTSoRvrHH3/g1VdfxXPPPQcA6NevH7y8vPD666+jvLwcdnbs4yFqqBs5ZSirlMPaygIBXsYxSZ6MW2SwO/4+n4W41Fz8JyZY6HBMToNqpDk5OejQoYPWsZ49e0KhUHBxeKJGUm/kHeQrhYXYeNYTJePVoY0rLMQiZOaV42ZBudDhmJwG/RTL5fJa8zKdnGq2fGqJhRmITAnnj1JLs7Ox1Ox3e46LM+idzn8O6zJvlMjcqFSq2wONOH+UWpB6cYZzqdzsW990TqQcuk/UcDlFlSgslcFCLELbVlKhwyEzol4uMPFqISqq5AJHY1oavCDDnDlz4OBwe2CEuib63nvvwd7+9vZP+lwikMjUqOePtvF2hLWVhbDBkFnxdrWDl4stbhZU4OKVfHQzoj1KDV2DaqRRUVGwt7eHSqXSfKmP29nZaR1XKjnhl6g+mv5RNuuSACKCuIh9c2hQjZTLAhLpR/Kt/UfZP0pCiAx2w/5T13Duch6UKhXE7JrTC469J2ohRWUy3Mwvhwg1SwMStbQQf2fYSCxQXCZDelaJ0OGYDCZSohai7h/19bCHvY2VsMGQWbK0EKNjoCsAIC6Fo3f1hYmUqIVw2gsZAvaT6h8TKVELUa9oxIUYSEidgtwgApB+swQFJVxQRx+YSIlaQEWVHNeySwFwxC4Jy8legsBbc5jjL7NWqg9MpEQtIOV6EVQqwN3JBi6O1kKHQ2Yu8tYqR+wn1Q8mUqIWoO4fDWVtlAyAup/04pUCVMsVAkdj/JhIiVrAJQ40IgMS4OUAZwcJqqoVSLpaKHQ4Ro+JlKiZVcuVuJxZM2eP/aNkCEQikWbtXY7e1R0TKVEzS8sshlyhhNTOCl4utkKHQwQAiFRPg0nN5S5eOmIiJWpmd84f5W5JZCjat3aBpYUIuUWVeP6TP1AlY19pUzGREjUzzh8lQ2QtsUCov4vQYZgEJlKiZqRUqpB6vWahevaPkqHp1NZV6BBMAhMpUTO6ll2KiioFbCQW8Pd0uP8FRC2oY1s3zfdlFdUCRmLcmEiJmpG6WTfYzwliMftHybC4SW0035+5lCNgJMaNiZSoGannj7J/lAzdrqNXUFbJWmlTMJESNROVSqXZyJv9o2ToSiuqsePQZaHDMEpMpETN5GZBBYrLZLC0ECHQx1HocIju69C/13H5RrHQYRgdJlKiZqKePxroI4WVpYWwwRDdR8/2XlAB2LI3CUolF2hoDCZSomai6R9lsy4ZgVH92sLO2hLpN0vwx7/XhQ7HqFgKHQCRqVKP2G3HgUZkoKwlFtjwVozm8ejottiyLxk7D19G91APODlwy7+GYI2UqBkUlFQhp7ASIhEQ7OskdDhEDRLd2RdtvB1RUSXHt3+kCB2O0WAiJWoGl27VRv09HWBnw4YfMg5isQjjBodCBODYhZtITC8QOiSjwERK1AySOX+UjFSgjxT9u/oCALbsS4JcoRQ4IsPHRErUDJKvcf4oGa9R/dpCameFzLxy7Dt5TehwDB4TKZGelVVW43pOKYCardOIjI29jRX+ExMMANh1NA25RRUCR2TYmEiJ9OxSRhFUALxcbOFkLxE6HKImeaCDN0L8nSGrVuKbA5eEDsegMZES6dmlOzbyJjJWIpEI4waFwEIswr+XcnH2Uq7QIRksJlIiPVPPHw1lIiUj5+vhgEFR/gCArw8ko6paIXBEhomJlEiPZNUKXMksAcAaKZmGR/sEwlVqjdyiSvx67IrQ4RgkJlIiPbp8oxgKpQrODhJ4ONnc/wIiA2ctscDTD4cAAPb8cxWZeWUCR2R4mEiJ9EjdrBvi7wyRiBt5k2no0s4dEUFuUChV2LovGSoVF7W/ExMpkR5pBhpxIQYyISKRCE8PDIGVpRgJ6QU4kZAtdEgGhYmUSE8USiVSrtfs5ciFGMjUeDrbYvgDrQEA2w5eQnmlXOCIDAcTKZGepGeVoKpaATtrS/h62AsdDpHePdKzNbxcbFFUJsOPf10WOhyDwURKpCdJVwsBAMF+ThCzf5RMkJWlGGMHhQIADp7JQHpWicARGQYmUiI9US9Uz/mjZMo6BLqiR3tPqFQ1i9orOfCIiZRIH1QqlSaRcv4omboxMe1gI7HA5RvF+CvuhtDhCI6JlEgPMrJLUVJeDYmlGG28HYUOh6hZuThaY2TftgCA7/9MRXG5TOCIhMVESqQHFy7nAQDatpLC0oI/VmT6BnTzhb+nA8oq5fj+z1ShwxEUf+KJ9ECdSDl/lMyFhViMcYNrBh4dOZeJS7cWIzFHTKREenAhrSaRcv4omZNgXyf0i/QBAGzZmwSFUilwRMJgIiXSQZVMgWfnHkBOQQXEIhGCfKVCh0TUoh7vHwwHWytk5JTh4KkMocMRBBMpkZ4EeDnARmIpdBhELcrB1gqP9w8CAPxwJA35xZUCR9TyjCKRXr9+HaGhobW+vvvuOwBAQkICxo4di86dO6N///5Yv369wBGTOWL/KJmrByN8EOQrRZVMgW2/pwgdToszij+fk5KSYG1tjQMHDmjtqOHo6IiCggJMmDABDz/8MD744AOcPXsWH3zwAZydnTF69GgBoyZzcPFKvuZ79o+SuRKLRBg3KBQfbDqJU4nZOH85Dx3bugkdVosxihppcnIyAgMD4enpCQ8PD82XjY0Nvv32W0gkEsyZMwdBQUEYPXo0xo8fjy+++ELosMnEnU3JxaqfzmsedwpyFTAaImEFeDni4W7+AICt+5NRLVcIHFHLMYpEmpSUhODg4DqfO3XqFKKiomBpebty3atXL6SlpSEvL6+lQiQzczopG5/vjIdccXt5NAuxUfw4ETWbkX0D4eQgQXZBBfb8c1XocFqMUTTtJicnw8PDA08//TSuXLmC1q1bY+rUqejbty+ysrIQEhKidb6npycA4MaNG3Bza1rzggUn1deiLhNzL5t/LmRh9Y8XoFSpEBXmiZOJNXszii1EXIzhLvzM1M1Uy8XRUoJnBoZg5Q/n8euxdPSJ8IGXq12j7mGMZWPwiVQmk+HKlSuwtbXFG2+8ATs7O+zatQuTJk3Cxo0bUVlZCYlEonWNtbU1AKCqqqrJryuV2uoUtykz57L5/dRVrP7xPJQqIKa7P6aN6QILMXd6uR9z/szciymWyyN92uLvCzdxNjkH3/yegjkv9NIa29JQxlQ2Bp9IJRIJTp48CUtLS03C7NixI1JTU7F+/XrY2NhAJtNe51GdQO3sGveX0J2KiyugUJjn5OL6WFiIIZXamm3ZHPr3Ojb8mgAVgOjOrfDs4BAUF5WbfbncC8umbqZeLk8NCMb51FycSczG/n+uICrMs8HXGlLZSKW2DaoZG3wiBepOiCEhIThy5Ai8vb2RnZ2t9Zz6sZeXV5NfU6FQQi43vQ+4Pphj2fx+JgNb9yUDAB7q6otnBoZAqVBBidt9pOZYLg3FsqmbqZaLh5MthvRsjZ//voKte5PQPsC50XOsjalsDL4ROjExEV26dMGpU6e0jp8/fx7BwcGIiorC6dOnoVDcHiF27NgxBAYGNrl/lOhO+05c1STRQVH+GDswhBt3E93HsAdaw93JBgUlVdh15IrQ4TQrg0+kISEhaNeuHT744AOcOnUKqamp+Pjjj3H27FlMmTIFo0ePRmlpKWbNmoWUlBTs3LkTmzdvxuTJk4UOnUzAr8euaCaYD3ugNcbEBDepv4fI3EisLDB2UM1A0H0nryEjp1TgiJqPwSdSsViM1atXo1OnTpg+fTpiY2MRFxeHjRs3IjQ0FG5ubli3bh3S0tIQGxuLFStW4I033kBsbKzQoZMRU6lU+OlIGnYcugwAeOzBQIzq15ZJlKgRIoLc0TXEA0qVClv2JkGlUt3/IiMkUpnqO9NRQUGZ0bTPtxRLSzFcXOxNvmxUKhV2Hr6MX4+lAwBGR7fFsAfa1Hu+uZRLU7Bs6mZO5ZJXVIlZ6/6BrFqJ54e1R59OPvc835DKxtXVvkGDjQy+RkrUklQqFbb/nqJJok/GBN8ziRLRvbk52eCxPoEAgG//SEFpRbXAEekfEynRLUqVCl/tT8a+k9cAAM8MDMGgHgECR0Vk/AZG+aOVuz1Kyqux8/BlocPROyZSItQk0S9/S8TvZ65DBOC5R0IxoJuf0GERmQRLCzHG3Rp4dOjf67h8o1jgiPSLiZTMnlKpwsZfE3A4LhMiETBxWHtEd/YVOiwikxIa4ILeHb2hArBlbxKUStMZnsNESmZNrlBi7c8XcPR8FsQiEV4c0eG+gyGIqGmeeCgYdtaWSL9Zgj/+vS50OHrDREpmS65QYs1PF3AiIRsWYhFeGtkBPcObvhoWEd2bk70Eo6PbAgB2Hk5FUWnT10M3JEykZJaq5Uqs/OE8TifnwNJChJdHdUK30IavB0pETRPd2RdtvB1RUaXA9j9ShA5HL5hIyezIqhX4bMc5nE3JhZWlGNNGR6BzsLvQYRGZBbFYhHGDQyEC8M+Fm0hILxA6JJ0xkZJZqZIp8L/v4nA+LR8SKzGmPx6Bjm25JjNRSwr0kaJ/15oBfVv3JUFu5DvgMJGS2aiokmPpt2eReLUQ1hILvPqfzmjfxlXosIjM0qh+bSG1s0JmXjn2nrgqdDg6YSIls1BeWY0l288iOaMIttaWeH1MZ4T4OwsdFpHZsrexwn9iggEAPx+9gtyiCoEjajomUjJ5pRXVWLjtLFJvFMPexhIzn+qMIF8nocMiMnsPdPBGqL8zZHIlvjlwSehwmoyJlExacbkMn379L9KzSuBga4WZT3VBG2+p0GEREQCRSISxg0NhIRbh30u5OHspV+iQmoSJlExWUWkVPv36X2TklEJqL8GbT3dBgJej0GER0R183e0xqIc/AOCr/cl4du4BjHjtJ1TJFAJH1nBMpGSSCkqqsODrf3EjtwwujtZ465mu8PVwEDosIqrDo70D4Sq1Rl5xpdChNAkTKZmc3KIKLPjqNG7ml8NNao03n+4Cb1c7ocMionpYSyzw9MMhQofRZEykZFKyCyvwyVdnkFNYCQ9nG7z5TFd4ujCJEhm6Lu3c0THw9nS0pKvGs1ADEymZjKz8cnzy1RnkFVfBy9UObz7dFe5OtkKHRUQNIBKJtGqli7efxa/HrkCpMvxdYphIySRczy3Dgq/OoKCkCq3c7fHW013gKrUROiwiagQXR2vN9yoVsOPQZSz//hxKK6oFjOr+mEjJ6F3LLsWnX59BcZkMfh4OeOPpLnBysL7/hURksJ4dHApLCzHOpebhg40nDHozcEuhAyDSxZWsYizedhZllXK09nbEa2M6w8HWSuiwiKgJrCUW+PLdh+HiYo+CgjK0bSXFyh/PI7ugAh9vPY0xMcEY0M0PIpFI6FC1sEZKRiv1ehEWflOTRINaSTHzSSZRIlMS4OWI95+LQrdQDyiUKnx94BJW/XQBFVVyoUPTwhopGZ0qmQIvLTmkedzOzwnTn4iErTU/zkSmxs7GElNHdsSBUxn49o8UnErMxrWbJZga2wn+noYxN5w1UjIqqTeKsGbXBc3jUH9nvPqfzkyiRCZMJBJhYJQ/3nqmK1yl1rhZUIG5X57CX3E3hA4NAGukZARUKhXOp+Vjzz/pSLxaqPXc1JEdYS2xECYwImpRQb5OmD0+Cut+SUD85Txs3JOI5IxCjB0UCmsr4X4PMJGSwVIolTiZmI09/1zFtexSAICFWIReHbzwSM/W8HW3FzhCImppjnYS/N8TEfj1WDp+/OsyjsZnIT2rBC+N7AgfN2F+JzCRksGpqlbgyLlM7D1xFblFNWtvWltZILpzKwyK8uf8UCIzJxaJMKJ3GwT7OmHNrgvIyCnDh5tPYcKQMPRo79Xi8TCRksEorajG72cycOBUhmYCtqOdFR7u5oeHuvpxRC4RaWnf2gVzJkRhzU8XkHStEKt/uoBL14rwn5hgWFm23BAgJlISXH5xJfadvIZDZ2+gqrpm6yR3JxsM7hGAByN8BO37ICLD5uxgjdef6owf/0rDr8fScfBMBi5nFuGlxzrC3blllghlIiXBXM8tw2//pOOfizehUNasp+nv6YAhvQIQFeYJCzEHlRPR/VmIxRgdHYRgXyes++Ui0jJL8MGmk3h+eDg6B7s3++szkVKLS8kowu5/0nE2JVdzLCzAGUN6tUbHQFeDW7WEiIxDZLA7Zk+IwqofLyAtsxjLvz+HIb0CMKpf22b9w5yJlFqEUqXCudQ87PknHZcyigAAIgBdQjwwpFcAglo5CRsgEZkEdydbvD22K7b/noKDpzOw55+rSL1ejMmPdtBaFF+fmEipWckVSpxIuIk9/1zF9dwyADVTWHp39MYjPQMEG65ORKbL0kKMZwaGIMTfGRt3JyD5WiE+2HgCkx/tgPZtXO9/g8a+nt7vSISaZfwOx93AvpNXkVdcBQCwkVigfxdfDOzu32x/GRIRqUWFecLf0wErf4hHRk4ZFm0/i5EPBmJY7zYQ67ELiYmU9KqkXIaDpzNw8HQGyiprFpaW2kswsLsfHuriCzsbTmEhopbj7WqHWc92x1f7k3HkXCZ++CsNlzKKMGlEOBztJHp5DSZS0ovcogrsPXENf8XdgEyuBAB4OtvikZ4B6NPJG1aWnMJCRMKwtrLAxKHtEeLnjK37knA+LR9zNp7ESyM7IthX9/EZTKSkk4zsUuw5no7jF7OhVNVMYWnt5YghvQLQPdQTYjFH4BKRYXgwwgdtvB3x+Y/ncTO/HJ98dQZP9A/CwCh/nWYLMJFSo6lUKiRdLcCe41dxLjVPc7x9axcMfaA1wlu7cAoLERkkP08HvP9cd2zak4iTidnY9nsKLmUUYcLQ9rCzaVpKZCKlBqmSKTBxwe8AgLatpLh8oxhAzRSWbmGeGNIzAIE+UgEjJCJqGFtrS0x5rANC/J2x7eAlnE7OwdXsEkwd2QmtvR0bfT8mUtJQKJUoKpWhoLQKhSVVKCipuvW9DPnFlZrzLt8ohqWFCH06+eCRHgHwcrUTMGoiosYTiUQY0M0PgT5SrPrxPHIKKzFvy2k8PbAdoiNbNapVjYnUDKhUKpRXyVFQUoXC0poEWVhShYJS2a1/ax4Xl8mgasD9hvQMwKAofzg5cAoLERm3tq2kmD0hCut+uYhzqXn48rckXLpWhGcHhzb4HkykRk6uUN5OhqWyO5Kk9r/qkbT3YyEWwclBAhcHazg7WsPZwRoujtZwsLHCpt8SAQCjooNgwUFERGQiHGytMO3xCPx2/Cp2HrqMYxeycCWrGB9O7g3vBiwaw0RqwIpKqzBjxVEAwDMDQ1BaUa1dqyytQkl5dYPvZ29jCWdH61pJ0uXWv84OEjjaS+qdqBzT3Q8uLvYoKCiDvIGJmYjIGIhFIgzt1RpBraRYvesCMvPKG3wtE6mAVCoVCktlyCmsQE5hBbILKm5/X1ihlSS/2p9c730sLURwvpUcbydFazg7SjSPnRysuR0ZEdF9hAa4YM6EHlj94/kGX8NE2syq5UrkFt2ZKCs1iTK3sKLBTa4dA13hKrWBs4OkphZ5Z7OrrRWnmxAR6YmTvQTTRkc0+HwmUj0oraiut1ZZUFx1zwE8IhHgJrWBh7MtPF1sa/51rvnXw9m2yfOaiIio6RqzmAx/SzeAUqlCfkklcgoqkFNUieyCmiSZU1iBnIIKlFfJ73m9tZXFHYnSpiZR3kqablIbWFpwA2siIkNiLbGAq7Ntg85lIq1DWUU1vvwtEVn55cgpqEBuUSUUyntPDHFykGhqk5oapUvN9452bHolIjJVTKR1KCmX4cCpDK1jFmIR3DVJUrtW6eFsy4E8RERmiom0HkN6BcDLxU5Ty3RxtOYC7EREVAsTaR283ezx1MMhnCtJRET3xVEuREREOmAiJSIi0gETKRERkQ6YSImIiHRgEolUqVRi+fLl6Nu3LyIjIzFx4kSkp6cLHRYREZkBk0ikK1euxLZt2zB37lxs374dIpEIkyZNgkwmEzo0IiIycUafSGUyGTZs2IBXXnkF0dHRCAsLw9KlS3Hz5k3s379f6PCIiMjEGX0iTUxMRFlZGXr16qU5JpVKER4ejpMnTwoYGRERmQOjT6RZWVkAAB8fH63jnp6eyMzMFCIkIiIyI0a/slFFRQUAQCKRaB23trZGUVFRk+9rwR1ZalGXCctGG8ulfiyburFc6meMZWP0idTGxgZATV+p+nsAqKqqgq1tw7bAqYtU2vRrTR3Lpm4sl/qxbOrGcqmfMZWN0SdSdZNudnY2AgICNMezs7MRFhbW5PsWF1dAoeBau3eysBBDKrVl2dyF5VI/lk3dWC71M6SykUptG1QzNvpEGhYWBgcHBxw/flyTSIuLi3Hx4kWMHTu2yfdVKJRctL4eLJu6sVzqx7KpG8ulfsZUNkafSCUSCcaOHYtFixbB1dUVvr6+WLhwIby9vTFw4EChwyMiIhNn9IkUAKZNmwa5XI53330XlZWViIqKwvr162sNQCIiItI3kUqlUgkdhCESum3eUFlYiFk2dWC51I9lUzeWS/0MpWzEYhFEItF9z2MiJSIi0oHxTNQhIiIyQEykREREOmAiJSIi0gETKRERkQ6YSImIiHTAREpERKQDJlIiIiIdMJESERHpgImUiIhIB0ykREREOmAiJSIi0gETKRERkQ6YSImIiHRgtok0NDQUO3fuFDoMwcXExCA0NBQbN26s8/n3338foaGh+Oyzz1o4MuGwTJquMT9XMTExJleGP//8M8aMGYMuXbqgS5cuGD16NLZt2yZ0WIKKiYlB//79UVpaWuu5t956C+PGjRMgKv0y20RKt1lZWeG3336rdVwul2Pfvn0N2o/P1LBMqLG+//57vPfeexg9ejR27tyJHTt2YNSoUZg3bx5WrFghdHiCyszMxIIFC4QOo9kwkRIeeOABxMXFITMzU+v4P//8Azs7O/j4+AgUmXBYJtRYX3/9NR5//HH85z//QWBgINq2bYtnnnkG48ePx5dffil0eILy9/fHd999h7/++kvoUJqF2SdSlUqFdevWYciQIejYsSO6deuGyZMn49q1a5pzQkND8e2332LChAmIiIhA3759sWbNGgGj1q+IiAi0atWqVg1s9+7dGDJkiFbta8eOHRg5ciQiIiLQuXNnjBs3DhcuXNA8HxMTg/nz52Po0KHo2bMn/vnnnxZ7H/qkrzLZtGkTunTpgoqKCs35SqUS/fr1M+lfrp999hliYmK0ju3cuROhoaECRdT8xGIxzpw5g6KiIq3jkyZNwvbt2wEAMpkMCxcuRN++fdGlSxf85z//wZEjRzTn7ty5E/369cOOHTsQHR2NLl264OWXX8bNmzdb9L3o26OPPooHHngA7733Xp1NvABQWFiIDz74ANHR0YiIiMBTTz2FU6dOAQCuXbuGsLAwHDp0SOuad999F08//XSzx38/Zp9IN2/ejDVr1mDmzJnYu3cvVq5cibS0tFrNEJ9++ilGjhyJn376CaNHj8aSJUs0/8mmYMiQIVpJQyaT4cCBAxg2bJjm2P79+zF79myMHz8ee/bswebNm1FZWYlZs2Zp3eubb77Bu+++i3Xr1qFr164t9h70TR9l8uijj6K6uhr7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bdqEzp07a10XGxuLsrIyjBw5suWDrodIZaptckQGRKVSYdCgQXjxxRfxxBNPCB0OGaidO3fi7bffrjUSngyb2Y/aJWpO1dXV+P333/HPP/+gtLS0zuZhIjJuTKREzcjKykoz7WHhwoWws7MTOCIi0jc27RIREenALAYbERERNRcmUiIiIh0wkRIREemAiZSIdMahFmTOmEiJjNy4ceMQGhqKJ598st5zZsyYgdDQ0DrXRtZFVlYWJk+ejOvXr2uOxcTE6P11iAwZEymRCRCLxTh79qxmy7c7VVRUaO13qU9///13s92byFgwkRKZgPDwcFhbW2ttRK72+++/w9rautbWgESkH0ykRCbAzs4O0dHR2LNnT63ndu/ejUceeUSzHRUAVFVV4fPPP8cjjzyCTp06YdCgQVi7dq3WPqrjxo3DrFmzsHbtWvTv3x+dOnXCk08+qVlDWL2cHQAMGDBAqzlXvTl1nz590LlzZ0ycONGkd38h88ZESmQihg4diri4ONy4cUNzrLS0FIcPH9bakFylUmHKlClYt24dHn/8caxevRqPPPII/ve//2H27Nla99y7dy8OHjyId999F0uWLEFubi6mTZsGhUKB/v3746WXXgIArFixAlOnTtVct3v3bly6dAkLFizA+++/j/j4eMyYMaOZS4BIGFwikMhE9O/fH3Z2dvjtt980m9Pv378frq6u6Natm+a8w4cP4++//8bChQvx6KOPAqjZxsrGxgbLli3Dc889p9kDUi6XY/369Zo9NcvKyvDmm28iISEBHTt2REBAAICa7eb8/Pw0r+Hl5YWVK1dqNqlOT0/H6tWrUVpaqrkXkalgjZTIRNjY2CAmJkareffXX3/F0KFDtbbgOnHiBCwsLGptC6dOqsePH9ccCw4O1kp86n7WioqKe8YSERGhSaIANPttqjf/JjIlTKREJmTIkCE4d+4cMjIyUFBQgGPHjtXacaaoqAguLi5afaYA4OHhAQAoKSnRHLO1tdU6R72R8p19qXW5e3H+hl5HZIzYtEtkQvr16wdHR0fs3bsXjo6O8PPzQ8eOHbXOcXJyQkFBAeRyuVYyzc7OBgC4uLi0aMxExo41UiITIpFIMGDAAOzbtw979uypc//THj16QKFQYPfu3VrHd+3aBQBa/an3o65pEpkz1kiJTMzQoUMxefJkiMVivPvuu7We79evH3r27InZs2cjOzsb4eHhOHHiBL744gvExsZqBho1hFQqBVAzqKlfv34ICgrS2/sgMhZMpEQmpnfv3pBKpfDx8akzsYlEIqxZswbLly/Hl19+ifz8fPj5+WHGjBmYMGFCo16rZ8+e6N27NxYvXoxjx45h7dq1+nobREaDG3sTERHpgB0cREREOmAiJSIi0gETKRERkQ6YSImIiHTAREpERKQDJlIiIiIdMJESERHpgImUiIhIB0ykREREOmAiJSIi0gETKRERkQ6YSImIiHTw/4gGTcXCMiReAAAAAElFTkSuQmCC",
"text/plain": [
"