Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/iblislin/bs_simulate

monte carlo
https://github.com/iblislin/bs_simulate

Last synced: about 1 month ago
JSON representation

monte carlo

Awesome Lists containing this project

README

        

{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"%matplotlib inline\n",
"import numpy as np\n",
"import json\n",
"import math\n",
"from random import gauss\n",
"import matplotlib.pyplot as pyplot\n",
"from matplotlib.finance import candlestick_ohlc\n",
"from datetime import date"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"def bs_model(S, T, v, mu=0, sigma=1, r=0.02):\n",
" return S * math.exp((r - 0.5 * v**2) * T + v * (T ** 0.5) * gauss(mu, sigma))"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"with open('./txf_date') as f:\n",
" data_rel = json.load(f)"
]
},
{
"cell_type": "code",
"execution_count": 592,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"def extract_close(data):\n",
" return np.array(data)[:, -2].astype(float)\n",
"\n",
"\n",
"def extract_ohcl(data):\n",
" return np.array(data)[:, 2:-1].astype(float)\n",
"\n",
"\n",
"# cal volatility\n",
"def volatility(data: 'Single Date', time: 'seconds'=60):\n",
" '''\n",
" >>> volatility(data[-1])\n",
" \n",
" 1/4 day\n",
" '''\n",
" # d = np.array(data)[:, -1].astype(float)\n",
" d = data\n",
" return (((d[1:] - d[:-1]) / d[:-1]).std()) / math.sqrt(time / (252 * 5 * 3600))\n",
"\n",
"\n",
"def gen_k(data, start_price):\n",
" close = extract_close(data)\n",
" S = start_price\n",
" T = 60 / (252 * 5 * 3600) # 1 min\n",
" v = volatility(data)\n",
"\n",
" ret = np.empty((len(data),))\n",
" for i in range(len(data)):\n",
" S = bs_model(S=S, T=T, v=v, r=0.02)\n",
" ret[i] = round(S)\n",
" return ret\n",
"\n",
"def merge_price(d):\n",
" o = d[0]\n",
" c = d[-1]\n",
" h = d.max()\n",
" l = d.min()\n",
" return np.array([o, h, l, c])"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"def gen_graph(n):\n",
" sim_k = gen_k(data_rel, data_rel[0][0])\n",
" sim_k = np.array([merge_price(i) for i in sim_k.reshape((sim_k.size // 4, 4))])\n",
"\n",
" fig, ax = plt.subplots()\n",
" fig.set_size_inches(20, 8)\n",
" candlestick_ohlc(ax,\n",
" np.hstack((np.arange(sim_k.shape[0]).reshape((sim_k.shape[0], 1)), sim_k)), \n",
" width=0.8,\n",
" colorup='r',\n",
" colordown='green')\n",
" \n",
" filename = 'sim/{}'.format(n)\n",
" fig.savefig(filename)\n",
" sim_k.tofile('{}.raw'.format(filename))"
]
},
{
"cell_type": "code",
"execution_count": 52,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"rel = data_rel[-318:-70]"
]
},
{
"cell_type": "code",
"execution_count": 70,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"rel_close = np.array([i[-1][-2] for i in rel])"
]
},
{
"cell_type": "code",
"execution_count": 1057,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"def sim_day():\n",
" day_vol = volatility(rel_close, 5 * 3600)\n",
"\n",
" S = rel[0][0][2]\n",
" T = 1 / 252 # 1 day\n",
"\n",
" mean_col = (S - rel_close[0]) / 252\n",
" sim_close = np.empty((len(rel_close),))\n",
" sim_close[0] = S\n",
" for i in range(1, len(rel_close)):\n",
" S = bs_model(S=S, T=T, v=day_vol, r=0.02) + mean_col\n",
" sim_close[i] = round(S)\n",
" return sim_close"
]
},
{
"cell_type": "code",
"execution_count": 1072,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"[]"
]
},
"execution_count": 1072,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAYoAAAEACAYAAACtVTGuAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzsnXdc1dX/x58HEBQEVJZsUQQVUXGi5sptptmwzLJh2+a3\n7/dXZt/Kb/Vtly0bWtqw/Faao9wzcw9QEAQUQTYoyFKZn98fhwsXuOzLEM7z8eDh5XzO5/M5F+S+\nPuc9haZpKBQKhUJRFSbNvQCFQqFQtGyUUCgUCoWiWpRQKBQKhaJalFAoFAqFolqUUCgUCoWiWpRQ\nKBQKhaJaahQKIcQ3QogUIcQpvbHOQohtQogIIcRWIYSt3rGFQogoIUS4EGKS3vhAIcQpIUSkEGKJ\n3ri5EGJ1yTkHhRAexnyDCoVCoWgYtdlRrAAmVxh7EdihaZovsAtYCCCE6APMBnoDU4GlQghRcs4X\nwHxN03wAHyGE7przgXRN03oCS4B3G/B+FAqFQmFkahQKTdP+BjIqDM8Evit5/R1wS8nrGcBqTdMK\nNU2LAaKAoUKIroC1pmlHS+Z9r3eO/rV+A8bX430oFAqFopGor4/CUdO0FABN05IBx5JxVyBOb15C\nyZgrEK83Hl8yVu4cTdOKgMtCiC71XJdCoVAojIyxnNnGrAMiap6iUCgUiqbCrJ7npQghnDRNSykx\nK6WWjCcA7nrz3ErGqhrXPydRCGEK2Gialm7opkIIVZhKoVAo6oGmafV+CK/tjkJQ/kl/A3B/yev7\ngPV643eVRDJ5Ad7AkRLzVKYQYmiJc3tehXPuK3l9B9I5XiWapqkvTePVV19t9jW0lC/1s1A/C/Wz\nqP6rodS4oxBC/ASMBeyEEBeAV4G3gV+FEA8CschIJzRNCxNC/AKEAQXAE1rZKhcAK4H2wCZN07aU\njH8D/CCEiAIuAXc1+F0pFAqFwmjUKBSapt1dxaEJVcx/C3jLwPhxwN/AeB4lQqNQKBSKlofKzL5O\nGTt2bHMvocWgfhZlqJ9FGepnYTyEMexXTYUQQrue1qtQKBQtASEEWhM4sxUKhULRRlFCoVAoFIpq\nUUKhUCgUimpRQqFQKBSKalFCoVAoFIpqUUKhUCgUimpRQqFQKBSKalFCoVAoFIpqUUKhUCgUimpR\nQqFQKBSKalFCoVAoFIpqUUKhUCgUimpRQqFQKBSKalFCoVAoFIpqUUKhUCgUimpRQqFQKBSKalFC\noVAoFIpqUUKhUCgUimpRQqFQKBSKalFCoVAoFIpqUUKhUCgUimpRQqFQKBSKalFCoVAoFIpqUUKh\nUCgUimpRQqFQKBSKalFCoVAoFIpqUUKhUCgUimpRQqFQKBSKalFCoVAoFIpqUUKhUCgUimpRQqFQ\nKBSKalFCoVAoFIpqUUKhUBiBwuLC0tdFxUV8cvgTNE1rxhUpFMZDCYVC0UCy87Jx+cCFa4XXANgU\ntYlntjzDhcwLzbwyhcI4NEgohBDPCCFCSr6eLhl7VQgRL4Q4UfI1RW/+QiFElBAiXAgxSW98oBDi\nlBAiUgixpCFrUiiamrC0MNKupHEi6QQAXx7/kg5mHUq/Vyiud+otFEIIP2A+MBgYAEwXQvQoOfyh\npmkDS762lMzvDcwGegNTgaVCCFEy/wtgvqZpPoCPEGJyfdelUDQ1YWlhAByKP0Ts5VgOxx/miSFP\nXFdC8eD6B4nLjGvuZShaKA3ZUfQGDmualqdpWhHwF3BryTFhYP5MYLWmaYWapsUAUcBQIURXwFrT\ntKMl874HbmnAuhSKJiUsLYw+Dn04GH+QZSeWMdd/LiPdRxKUHNTcS6sV6VfTWRm8kpMpJ5t7KYoW\nSkOEIhQYJYToLISwBKYBboAGLBBCBAshlgshbEvmuwL6jywJJWOuQLzeeHzJmEJxXRB2MYwHBzzI\n/gv7+SboGx4d/CgDnQdeNzuKPTF70NCIuRzT3EtRtFDM6nuipmlnhBDvANuBHCAIKEKakV7XNE0T\nQrwBfAA8ZIzFArz22mulr8eOHcvYsWONdWmFol6EpYWxZPIS3t7/Nn0c+tDHoQ+appFXlEdSdhLO\n1s7NvcRq2Rm9E+eOzpzPON/cS1EYiT179rBnzx6jXa/eQgGgadoKYAWAEOJNIE7TtDS9KcuAjSWv\nEwB3vWNuJWNVjRtEXygUiuYkOiMaa3NrUnJS6N65O7f43sJ0n+kACCEI6BpAcHJwixSK4ORg4rPi\n6WXfix3nd3Bf//uITI9s7mUpjETFh+jFixc36HoNEgohhIOmaWlCCA9gFhAohOiqaVpyyZRbkSYq\ngA3AKiHER0jTkjdwpGTnkSmEGAocBeYBnzRkXQpFY5OVl8WIb0ZgbWGNj50PpiamLJuxrNwcHzsf\nzmWcM3j+ufRz9OjSw+CxpmD6T9Pp49CHkyknKdaKmdlrJgs2LWi29ShaNg0SCmCNEKILUAA8oWla\nlhDiMyHEAKAYiAEeBdA0LUwI8QsQpjdfl5G0AFgJtAc26SKlFIqWRMbVDFJzU7Eyt+KTw58wqcck\n2pu1RxiM3QAPWw+DuRThaeH0WdqHhH8k4GLt0tjLrsTla5fJzMtkyz1bKCgqICknCat2VspHoaiS\nhpqeRhsYm1fN/LeAtwyMHwf8G7IWhaKxmbpqKim5KVwrvEaxVkzQo0G4WLtUmYHtaetpMPLpsyOf\nAXA88Tguvk0vFKdTT+Pn4IeJMMHCzIJunbpJn0phHiEpISzcuZC1d67F3NS8ydemaJmozGyFohak\n5KRw5uIZIp6MIOn5JJKfTy7dDZSlA5XH0I4i81omP4X+xP0D7ud40vFGX7chQlND8XPwKzcmhKBb\np268tvc1tp7byieHlfVXUYYSCoWiFmw9t5UbvW4sfcquShz08ezkSezl2HJjGyI2MLbbWKb3nN6s\nQtHXsW+l8W6durE2fC0rZq7g7b/fJiErgaCkIG7++eZmWKWiJdFQH4VC0SbYFLWJaT2n1ekc547O\nXLp6ibzCPCzMLAA4EHeAMZ5jGOQyiCc3P1lu/urQ1fja+RLgHGC0dRvidNppbvat/OHfrVM3etn3\nYq7/XOIy47jlf7dwrfAap1NPk3E1g84dOjfquhQtF7WjUChqIL8on+3R25nqPbVO55mamOJi7UJ8\nVlk+6aGEQwS6BeJp60l+UT6J2Ymlx9746w22nttqtHVXRVU7iineU1g0ahFCCF684UX6OPSht31v\nAt0COZVyqtHXpWi5qB2FQlED/9n7H0Z5jMLVpu4FA3R+ih5depCTn0PkpUgCugYghGCwy2A+PPgh\n/xrxL/KL8jmddrqSqcqY/B7+OzvP76SguADnjpVzO3Q5ICBNaytnrgRgwaYFnEw5yZhuYxptbYqW\njdpRKBTVcCLpBMtPLOfL6V/W63xPW09iM+WH/7HEY/R36l9qhnp/4vuk5qYy4tsRrDuzDrsOdlzI\napzS5F8d+4qntzyNm40b7018r1Y+FiEEQgj6O/UnODm4UdaluD5QOwqFohrWn1nP/ID5dO3YtV7n\n60c+HYw7SKBbYOkxfyd/vp/1Pbf9chsv7HiBBUMWsPnsZqOsuyKv//U6f979J/279q/zuf279ufr\nE183wqoU1wtqR6FQVENIaki9Plx1eNp6ci7jHIXFhfzv9P+40evGSnM+mvwRdpZ2PDzoYWIzY43e\nGa+ouIjU3FT6OPSp1/n+jv6Ep4VTUFRg1HUprh+UUCgU1VCV47e2TPaezLZz25i7di52lnbc1POm\nSnM8bD2IfTYWHzsfTIQJl69dbsiSK5F2JY3OHTrTzrRdvc63MrfC3dad8IvhRl2X4vpBCYVCUQVX\nCq4QnxVPzy49630ND1sPfr/zd/Zf2M8XN31RpW/ARMg/RX2fhrFIzE5scKmQ8V7j2RzVOGYxRctH\nCYVCUQVhaWH42PnU+0lcR6BbIHHPxeFj51PjXA9bD6NHPhlDKG7tfStrz6w10ooU1xtKKBSKKmio\n2Umf2kQZgdxRGCok2BASsxNx6dgwoRjjOYaz6WfL5YQoWhbG9m3po4RC0aY4kXSCvTF7azU3JCUE\nf8emrVXp2allmp7ambZjus901p1ZZ6RVKYzJ+jPrGbViFPlF+Y1yfSUUijbF50c+59Mjn9Zqbkhq\nCP5OTSsUHrYepeW+Yy7HkHE1o8HXTMxONErzpJt9bm608N3GJDOzuVfQ+Pwa9itnLp5h4Y6FJOck\nGz1CTQmFok2xJ3ZPrXtZG9P0VFsC3QLZE7OHa4XXmLNmDj+c+qHe18orzCvtN2GMvhc3et3Ivth9\njfbU2hhcugTu7pBQZc/M65+i4iK2nN3Ctnu3sT9uP/2/7M+a8DVGvYdKuFO0GS5kXiArL4u8wjzS\nr6bTpUOXKudeunKJKwVXcLdxr3JOY9CtUzcGdB3A63tf51D8ISZ2n1jvaz36x6M4WDoYxfQE0KVD\nF3ztfTkUf4jRnpVa0bRIvvgCsrMhKgpc616B5brgaOJRnK2dGeg8kEMPHWqUeyihULQZ9sbsZWy3\nsaTkpBCUFMT47uOrnBuSGkJfx761dkIbk/kB87l77d24Wrty8crFel0j42oGa8LX0Kl9J/KL8o3W\nSW9i94lsP7fdoFC8tuc18ovy+e/4/xrlXg3h998hNBQ+/xwGD4bz50GvhXSrYlPUJqZ5162ycV1R\npidFm2FPzB7Geo5lkPOgGntBNIfZSces3rMY4jKE5wKfq7dQ/HjqR6b7TMfGwoaLVy7iaOVolLVN\n7D7RYIXb3ed388Zfbxjs6NccvPUWBAfDXXfBtGlSKFojWXlZLDuxjDn+cxr1PkooFG2CouIitpzb\nwoTuExjoPLBKP8W1wmtcvna5WSKedLQ3a8+Rh48woOuAegvFypMreSjgIe7ocwdOVk6YmRjHeDDS\nYyTpV9PZcrZ8W/uXdr3Ey6NfJi4zzij3aQgXL8KZM/Dzz7BkCXTvDtHRzb2qxuGNv95gqvdUBnQd\n0Kj3UUKhaBPsidlD145d8bX3ZZDLII4kHDEYd77k0BLGrBzDieQTTR7xVBF7S/taC8XRhKMUFRcB\nUFBUwOnU04z0GMk9/e5hhu8Mo63J3NScT6Z+wlObnyKvMA+Q4noq5RQPDXyIuKzmF4odO6SZybyk\n5beXV/PvKLLysoyeH5N+NZ2vj3/dJKY+JRSKVkdBUQE7o3dSrBWXjv0Y8iP3+N8DQG/73hQUFxis\nXXQk4QhJ2UkcSzzWbKYnHfaW9qRdSatx3s7onQxbPoyXd70MwPnL53G1caW9WXu8u3jXu0R6VUzr\nOQ1Xa9fSXUVQUhC97Hvhau1KYXEhWXlZRr1fXdmyBSZPLvu+uXcUUZeiGPT1IPp/2Z9Z/5tVKugN\n5Y/IPxjnNa7elY3rghIKRavjg4MfMHP1TAKXB7L/wn7Opp9l/Zn13NX3LkBmSd/a61bWhlcuSXEs\n8Ri/3vEr8wPmVxsV1RTYW9pz6cqlajNuL1+7zP3r72fVrav4OfRntpzdwpmLZ+hl36tR13aj140c\njD8IwOGEwwxzHYYQAncb92bP3t6xAyZNKvvexQUyMuDq1eZZz0MbH+KxQY+R/HwyF69cZGXwSqNc\nd234Wm7tdatRrlUTSigUrYrojGjeP/A+px4/xTPDnmHOmjkELg9k0ahF5ZLObu1dWShSclLIzs9m\ntOdols9Y3tRLr4SFmQXtzdpX+4S+I3oH/Zz6Mcd/Di/e8CKrQ1cTcTECXzvfRl3bcLfhHIg7AMCh\n+EOlfTbcbNya1U9x8SLk5IC3d9mYiQl4eEBMTPOsKT4rnpm9ZmJhZsEHkz7glT2vkJOf06Br5ubn\nsjtmd7muhI2JEgpFq+Kdv9/hqaFP0b1zd+b2m0vUU1HEPRfH8yOeLzfvBo8biM+K53iijH7SNI3j\nSccZ7DK4WUJiq6ImP8WJpBMMdRkKyHpMf8X+1SQ7imFuwziRdIKCooJyQuFu696sforTp8HPDyr+\nCpvC/HT2LHhP+4O5qx8u1ws9NTcVB0sHAIa6DiWga0CDSqEciDvA7b/ezkj3kXTu0LnB664NSigU\nrYa8wjx+C/+NBwMeLB2zMLOgQ7sOleaampjy2bTPmLJqCqNXjMbuXTu+CfqGwc6Dm3LJNVIboRjo\nPBCAXva9yM7PZlfMrkbfUdhY2ODV2YulR5dytfBqaSl2dxv3Zt1RhIZCXwOupZ494eDByuOFhca7\n9+LlR4np9zDrDgezJnQjAFcLrpJflI+NhU3pvOk+0w2GGNeWpzc/zRjPMfx8288Gj4eGQkpKvS9v\nECUUilbDpqhN9HPqh7tt7bKpZ/vNZte8XTwX+BzLbl7G+jPrGeQyqJFXWTeqEwpN0ziRdIIA5wBA\n+l5Ge44m5nJMo+8oAEa4jeAf2/7BipkrSndh7jbNu6MIDZU7ioo8/zx89ZU8ruOLL2S2tv5YfcnP\nh99DNjMv4G480x7jp/2y8GTalTQcLB3K7VIn95DNrPSDLWpLdl424RfDeTbwWWzb2xqc8/LL8Pff\n9XsfVaGEQtFq+O7kd8z1n1unc/yd/JnVexa39bmNow8fNWooqTGoSijyCvNKzRuu1mW1KUZ7jMbW\nwtZoCXbVMa//PJZOW8q0nmVZwS3B9GRoR9GtG7zxBjz3nPz+4EF47TUpIJMmNbxw4MaNYOq7lbsG\nT+bhiWMIytiLpmmk5qbSqZ0jxXqa4NXZC1sLW04mn6zzfQ7GH2Sg80Dam7Wvck5kJPgaeUOphELR\n4knMTuS5Lc9V+wS2ImgFp9NOM9tvdr3vE+AcgLmpeb3PbwwMCUV+UT7uH7nz/LbnGeg8sNzT6tSe\nU5nVe1aT+FlGeozk0cGPlhtrTtOTplW9owC4804pEEVF8OmnUij+7//kruLMmbrfr1grJjxNhlj/\ndeQy12xPMcpjFA/f1oP8fDhy7hzBUWmcOe7A3gqV7Sf3mFwpabE27Ivdx2iPqutsFRXJnJEePep8\n6WpRQqFo8ew+v5slh5ew9OjSSsfyi/J5b/97vLDjBTbO2VjOFtwaMCQU+2L30al9J7ad20ZA14By\nx3zsfFgxc0VTLrEc3Tp1I/1qOmvD1/LkpidLczuaguRkMDUFxyo2U506gbOzFIVDh8pqP7m7Q1w9\ntO3boG/p/2V/oi5FcSx9O76WI+nQrgMdOwo8isfw9Ad7ef2DVEyuOlbyGYzyHMWRxCN1vue+C/sY\n5TmqyuOxseDkBB0qu+UahCoKqGjxBCcHc1//+1i8dzHTek7D09aTyEuROFs7M3P1TNqbtefA/AN4\nd/Gu+WLXGfaW9pzPKJ9WvDFyI/P6z+P2Prdja2HYTt1cWJlbsWnuJib+MBFHK8cmMYEBvPkmLF0K\nN9xQOeJJn0GDZEJeenqZecbNDeLrmPqRk5/DK7tf4Q6/O5i/YT5H7c/xes+vSo/fP34k6w8dxt/d\nh86XHUmrkDfp7+jPSykv1emeCVkJHE86zgj3EVXOiYwEn5o77tYZtaNQtHiCU4KZ7Teb54c/zzNb\nnuHlXS8T+E0gTu874e/oz+a5m1ulSIAUiuCUYD478hlHE45SrBWzMXIjN/vcTC/7XkZpSGRsBrsM\nJuLJCLbfu52IixE1zj8Qd6Bas2JNHT6PHpWmpJ074ddfq587aJB0Yg8bJvMroO47iqsFV3low0Pc\n6HUj3874luz8bCwPL+buQWU5DeP69MWy22n6DEnF3tKhklD0tOtJQnYCufm5tbrnlYIrzFg9g0Wj\nFlW7a1ZCoWiTaJpGcHIwA7oO4B/D/0HkpUh+Cv2Js0+dJfbZWD6d+ikmovX+Nw7oGoCnrSenUk4x\nb908nD9wpqCogH5O/Zp7adXiaOWIu407VwuvVtul79KVS4z8diRz184trR2lT2KifPKvLtzziSfg\n/fehVy8wq8FGMmgQnDsHgYFlY3UVijt/uxMhBF/f/DUWZhYcuv8EV/c/hIteJXc/Rz/C0sJIzU2l\nq3XlHYWZiRm+dr6EpYXV6p4/nvoR547OvDDyhWrnNZZQKNOTokWTmJ2IQODc0RkhBOvuXIeZiRkO\nVg7NvbQmwauzF7/N/q30+7PpZ8nJz2lRSYFVIYTAx86HyEuRDHMbZnDO2fSz+Dv6k5idyKqQVeVy\nYAD+/W/pe/juO+l4rkhmJoSFwd13125NA2XKCcP0luPmBjFJWeTkm9DRvGON1zgUf4hTj5/Csp0l\nmgbx8QJnZ+kf0WFvaU87k3acTDnJpE63cc5AyS5/J39CUkMY4jqkxnseTzzOFO8pVf7ed+yQu6qs\nLJjeCMnarfdRTNEq0O0mdH8gvR1609OuZzOvqvnw7uLd6CWljYlOKKoiKj0KP0c/7vS7k78vlA/+\nDw6GP/6AX36B5csNm6AiIuSOw6SWn2SdOsHjj8PIkWVj7u4Q7vg6AV8FcDb9LACXL8sP3YrkFeZx\n+dplHK0c2b0b+vWTpUE8PSvP9XP042TySTztK+8oQPopQlNrl8QRlBxUKXBBn99+g717Yc8eZXpS\ntEH+iv2L/k79m3sZinria+dbvVBciqJnl57c4HED++P2l44XFsJDD8F//ysrwZqbw0svVS7DceaM\nNDnVhaVLwVYvBsDFBXLbxdDN1ou5a+dy5YqMiJpjoBeQrq1sYYEJCxZIM9aff1YhFA5+aGh4OVX2\nUQD0dexLSGpIjestKCogNDWU/l3L/x2sWSMFLzNT7ig2bIBHHzW8lobSIKEQQjwjhAgp+Xq6ZKyz\nEGKbECJCCLFVCGGrN3+hECJKCBEuhJikNz5QCHFKCBEphFjSkDUpWg8rg1eyKmQVjw1+rLmXoqgn\nPnY+RFyq2qF9NuMs3l288XPwIyUnhbRc+Yn6ySfQuTM8+KCMYvrpJ7h0CW6+ufzOoj5CUZF27cCs\nSzyzuz9GdPp57rsP+vSR9v4tFVId4rPi6WLmyt13yw/k+fNh5UrDH859HPoA4OtmeEfRz6kfwcnB\nFBZXX0fkzMUzuNu6lzOL/fIL/Otfcu0vvSQLIY4aBV9+Wd4EZizqLRRCCD9gPjAYGABMF0L0AF4E\ndmia5gvsAhaWzO8DzAZ6A1OBpaLM4PYFMF/TNB/ARwgxGUWbJjE7kX9s/Qc75+2kRxcjZw8pmowa\nTU8lOwpTE1MC3QJLK9KuWwcvvlgW6tqvnyzBkZcHx46VnW8MoQAQNvFkhAdwMTcDy44FLF8O770H\nr7xSft7xs/GcPuRGQAD873+yzWpGhqxOWxE/Bz/am7XH3cmKjAyZDKePm40bPTr3YHPUZkAm8B2M\nq1yQypDZ6eefZcLghx/KHdKECdWHBTeUhuwoegOHNU3L0zStCPgLuBWYAXxXMuc74JaS1zOA1Zqm\nFWqaFgNEAUOFEF0Ba03TjpbM+17vHEUb5f0D73P/gPvxtW/c4naKxsXXzpdzGeeqDAM9m362NLR5\npPtI/r7wN5oGISFSHPQRAu6/Xz7B6zCGUBQWF1JgkcKrz7lia+bAmx+nYGkJU6bIdVy7JuddvQpL\nvkkgsI8rixaBjY00UbVvb3hHEeAcwP3976ddO4GtrczdqMhjgx/jq+My/+Lr418z4tsRpOamlpsT\nlBRUWvgRIDdXhgJPny6d8zfdBDNnNuxnUBMNEYpQYFSJqckSmAa4A06apqUAaJqWDOgyblwB/SC0\nhJIxV0A/3SW+ZEzRRtE1d/nniH8291IUDcTawpobPG5gfcT6SscuXblEsVaMvaU9IEuXH0s6RmKi\n9Ek4GAhsmzdPPsnn5kJBgfRZ9GxgbENKTgqW2DF6pDk9nJxJyk4CpAB4e8v6UceOydIgHZzimTHW\nrfTcDh3gs89g6NDK17WxsOGL6V8AYG+PQfPTbL/ZHIw/yPsH3uffu/9NQNcAtp3bVm5O+MVw/BzK\n6pJs2SKjtrqU9NXasAHuuKNhP4OaqLdQaJp2BngH2A5sAoIAQz3+akiXUSjKs/7Meib2mIiLtUvN\nkxUtnnv872FVyKpK47rdhM4C7e/oT0hKCCEhmsHCfiBNPBMmwMcfy5pGLi4NL1cRnxWPr7Mb69eD\nc0dnknKSSo8FBEBQELzzDjz5JPQdkYC7rVu58+fPl9FU1eHgYFgoLNtZ8sOsH4jOiOajyR/x2ODH\n2Hx2c7k5yTnJ5f4W1q6FWbPKjtc24qshNCiPQtO0FcAKACHEm8gdQ4oQwknTtJQSs5JuH5WA3HHo\ncCsZq2rcIK+99lrp67FjxzJWV7BF0WrYcm4L03s2TecuReMzs9dMFmxawPmM88RlxfHBwQ94ceSL\nfHn8y3KJg7rezwdDkunbt+qM89dfh+HDZTjoiKqrWRjkRNIJHv3jUXztfPnPuP/QvXN3ErIT8Ojs\nRvv2JUKRXSYUAwbIzG9dnsKvf8aXq9ZbW3RCcflyZVGZ1nNaaQXe2MuxLNq1iKLiIkxNpFc6KSep\n9GeTkyOjrD76qPr77dmzhz179tR5nVXRIKEQQjhompYmhPAAZgGBgBdwP3K3cR+g23NuAFYJIT5C\nmpa8gSOapmlCiEwhxFDgKDAP+KSqe+oLhaL1UVhcyI7oHXw69dPmXorCSHQ078j/jfw/Ar4KoEO7\nDjwx+AnGr5jKUJfhbLz3l9J5Qgj8nfw5eCiELK9/sTlqLlN7Tq10vZ49Zbnw4mLp8K4NQUlBvHfg\nPbZHb+e9ie+x6/wuvjz2Je9OfJf4rHjcrOUuwdnauVx3uoAA6TT28YGuXeXuw83GrYq7VI2DA3z/\nvfSxJCSUD8/Vx7OTJw6WDpxIOsEQ1yEUFheSfjWdvHRHdh2FpCQpjlUVPtRR8SF68eLFdV6zPg3N\nzF4jhOgCFABPaJqWJYR4B/hFCPEgEIuMdELTtDAhxC9AmN58nVlqAbASaA9s0jSt7vV3Fa2CQ/GH\n8OrkVfoEpWgdvDTqJZ4LfI4irYisix15Y8ZTzHjNGmuL8rGc/o7+rMk8xMW8NcRlVV1Oe9Giut3/\n3QPv4mTlxMnHTuJi7YK9pT2fHfkMKP/h79zRmaDkIFJzU1l/Zj2mlrZkZ89m2jQoKi4iJSelXvW1\nHBxg2TIpcj//DI9VE/E9oOsAzlw8wxDXIaTlpmHXwY4H7jfl8GGZRd4cz8oNsm5pmjZa07S+mqYF\naJq2p2TPTmRyAAAgAElEQVQsXdO0CZqm+WqaNknTtMt689/SNM1b07TemqZt0xs/rmmav6ZpPTVN\ne6Yha1LUj8LiQt4/8D5ahfTX3PzcSmONybZz25jcQ0VHt0Y6tOtAR/OOfPAB2HfsxKmTZSJx6ZIM\nH/Wz70ei2+fkF18j81oDuwnpcebiGe7pd0+prb+fUz9OpsjGQfpC4WLtQlJOEi/seIHVp1fz3O6H\n8fYp4uabISU3hS4dutSrZ4mvr0zg+/hj+Pbb6ufqdwlMzknGPL8r2dky0snKqvEjnAyhMrMVgLTd\n/mv7v4i5HFM6VlhcSOA3gbz999tNto5TKadaXDtShfG4ehW++Uba+0/qNXi7+Wb5xG1+2R+sUnGz\ncSMrz0ANjXpQrBUTeSmyXB9xdxt3rhVeIzU3lfiseFxtpN/B2Vr6KLad28ZX07/CuaMzP2wJZcgQ\nmfNR35yee++FVatkN72kJBlJVRXutu7EZ8lA0OScZLISu/Lf/0q/TFCQFIumRgmFApDNgQD2xOwp\nHfs26FvMTMz44OAH7I3ZyxN/PtHou4uISxFN0u9Z0TycPi1zDqZMkTkQ+fnSZn/wIGzeDAlBfphq\n7ZnrP9doQhGXGUfn9p2xtrAuHRNC0M+pHyeSThB5KRJPW5kI4dzRmZMpJzE3NadH5x6McB/BiYuy\ntEhwcjADnOpXZ0sI+WVqKkWxYsa3Pm42bqU7ivjMJHKSuzJ8eL1uazSUUCgA2B2zm0k9JrE3di9p\nuWm8svsVFu1axPKblzOv/zymrprKshPLjPbHa4iCogLOZ5xvtb0lFHIX0b8/WFrKPtZnzsgs7ClT\nZEG7vds7srx3PL52vmTmGcf0dObiGYMPH/0c+/HqnlfxtffFq7MXAE4dnSgsLmRS90kIIRjpPrK0\nBlVQcpBRCjKOHy/NSFWh3072VHQyncy6Ym1d9fymQAlFGyQ1N5ULmRdKv88vymd/3H5eHfMqu2N2\nM3/DfKLSo1h35zoGuQziv+P/S+RTkbjbuJN2xUAwuJGIzojG1ca12sbxiusbnVCA/Dc4GH7/HR55\nRDp6d+6Em260w8bCxmgPJVUKhVM/jiQc4cWRZaFT5qbm2FvaM6mHLEU30mMk+y/o7SiMIBRjx8Lf\nf8uEQUPom57CLiTj5dD8gR1KKNoYv4f/Tp/P+3D3mrIC/kcTjuLdxZvhbsPJK8wjKj2KlTNXMtJD\n1mJub9YeNxs3HKwcSou2GZOLVy5yKuWUMju1QnJzZdZycrL8Xl8oBgyQ/SbCwmSF2ClTZPazgwNN\nIhSjPEcxrec0pnhPKTf+5o1vMtlbBlT42vmSk5/DmYtniLgUQV/HKjIB64CdHfToIfMzDGFvaU9O\nfg5XCq5wPi2Zvp7N38VQCUUb4mjCUR7941E2ztlIdEZ0aXetteFrmeo9FSEEL97wIitnrsTCzKLS\n+Q6WDly8crFBa8jJz+FqwVVAdq9786836flpTyb+MJGTySfLORwV1z/nzskPxAULZNXXU6fKhOKO\nO+D55yE8XJqiHnxQ9r4GsG1vazyhuGRYKHrZ9+LPu/+s1AzokUGPlFZqFULw8MCHuW/dfXTv3J0O\n7RqYBl7CjTdKn4whTIQJrjauxGfFk3olmSF91I5C0USkX03nzt/u5IubvmC4+3AeGPAAy08sJ68w\njx9O/VDaWezZwGer7EZmb2lfo+npqU1P8XPIz1wpuEL/L/uXbqF1PLThITyWeLDgzwVM/3k6GyM3\nEvJ4CAO6DuCTI5+oHUUrIzoaJk6Uu4aFC2W5DV0Npx494Omny5LPuneHGTPkaxsLmwb7KIKTg3H5\nwIX9F/aXlvyuDwtHLeR8xnmjNox6+GFZDXf3bsPH3W3ciUqN54pJMiP7Nb9QqFaorZj0q+m8vOtl\n+jr2ZU34Gm7tfSu39bkNgPkD5zNkmcz89Hfyr5UD2cGyetNTUXERq0JWEZQcBMhQ16+Pf81/xv0H\nkM7qree2snb2WoKSg+jj0IcHAh7Asp0lTwx+glv+d4vaUbQyoqNlb4cvv4Rx48p2EzVhDNPTwbiD\njO8+no+nfEyXDl3qfR0bCxuWz1iOhWnlXXZ96dVLFje8807ZF1y/1/cff4BdOzc2/R2HiW0S3eyV\nUCgaidTcVIYsG8JNPW9iQ8QGOrXvxDsT3ik93r1zd9bMXsM9a+/h4ykf1+qaDlYOlUog63M44TDO\n1s5EpUfx1t9vsWjUIpadWMbLo1/G3NScg/EH6dG5B+O8xjHOa1y5c6f7TGdyj8n4O/nX7w0rWiTR\n0bL8Rffu0oGbkVG784whFCGpIQxxGdIgkdAxw3dGg69RkXHjwNUVDh8u35r1uefAaqY7f5t8h6V1\nB2wsbIx+77qihKKV8sZfbzDTdyafTK2ybBZju43lwnMXMBG1s0A6WDpwOq0sU+hKwRUs21mSeS2T\nkykn2XZuGzN8ZnCl4ArfBn/LS6NeYn/cflaHrmZe/3lsitpUWvysIqYmpmy5R1VuaW1ER0snNcje\n1O7u1c/XYdXOirzCPAqLCzEzqd/HVGhqKLf3ub1e5zYVkyfD1q1lQnHxonT8Fx/15MqIL9gya3sl\nH0pzoHwUrZDojGhWhazi5dEv1zi3tiIBlIt62n9hPw7vOZB5LZNfw35lzMoxfHrkU6b1nMYzgc/w\n8ZSPsWxnyX9v/C8v7niRuMw41p1ZV6VQKFon0dFyN1FXhBBYW1jXe1ehaRqhqaFGiVJqTHRCoePw\nYQgMhPsG3Etg0Ckm9x3SfIvTQ+0oWiHvH3ifJwY/gaNVDSUm64iDpQNpV9LIvJbJPb/fg7mpOaGp\noYSmhvKvEf/C3NSc4e7DMTMxo3tn+ekw3H04M31n4v2pN/P6zWOIS8v4j3+9UFwMWVk19ztobgoL\ny9vZQa49JkYm1tUHnfmpPqajpJwkzEzMjP43YGxGjpRJh1u2gL+/zFAPDISXXrIiM7MZanVUgRKK\nVsbla5dZHbqasAVhRr+2g5UMj10duppBzoPo1L4TIakhhKaG8s8R/6wUj67j/Unvc9+A+wh0CzT6\nmlozmiarjB46JMNKWyqaJnMlliyB0XoFXxMTZRc2S8v6XdfWov4hstfDbgJkJ79HHpE9NhISZPnw\n116T0WENbchkTJTpqZXxbdC3TOs5rVHKdOuing7EH2BSj0n4O/pzKuUUIakh1f5RWplbKZEoISQE\nvvvO8LFLl8r6M4NssXn0qBw/c6Z218/Lg/37G77OurBrlyxWd/iw/F5XDqy+ZicdDXFoh6RU/3+y\nJfHee/J3NmuW/H0PMxyd3qwooWhlrAhewWODqyl23wA6mneksLiQ3ed3M9xtOP2c+rHr/C7yCvPq\n1fWrrVFUJJPKXn+98rFt22QJC/0S1MuWSbG47TZYs6Z299i9G265RZp9mopPPpHmkpAQSEmRpqbi\nYjh7tuFCUd9S4xGXIuht37v+N28G3nlHhsza2TX3SiqjhKIVkZidSEJWAsPdGqfUpBACBysHLl+7\nTB+HPvg7+ZeWNWgJkRktnW++AQsLuUNISSkbz86WWcpTpsjENIC4OGm6CQyUQvHbb7W7R3i4jJwJ\nDoYPP5Rd1RqTtDTZkvS//4XQUPjrL7hwQfazPnkS+vWr+RpV0ZAdRUJ2Qr060TUn5uYwe3Zzr8Iw\nSihaETujd3Kj142lvXYbAwdLBwLdAjE1McXe0h4Xa5frZovf3Pz6q2zdOXx4efPQ7t0weLDsWRAR\nIcc2bZIRMaamcMMNUlhOn4YrV6TDsyrCwmSm86ZN8O671ZezNgahodC3LwwZIs1jujbNwcHSHBUQ\nUP9rN8RHkZSdVK9OdArDKKFoBQQnB7Pl7Ba2R29nQvcJjXovByuHcjuWfk79lFDUkrAwGdkycmR5\nodiyBaZOlV3Q9IXippvka1NT6fD87DN44w0pHC+/XOYL0Cc8HB56SNq9TUzkh3VjEh4OvXtDx47g\n7CzbfE6aBCdOyB1FQ4SiITuKxOzE0m52ioajhKKFsex43Xs+vLzrZW5ZfQvrzqxjYveJjbQyyV1+\nd5VLYvp06qfM6z+vUe95vZKcLP0Ma9fC5cuQmSkTzkaOlFnKR49KM9HmzdLs5OkpTTnp6XKXMVmv\nI+yjj8Lq1bI+0LFj0pcRGVn+fpomxejxx2Unuf/8B2JjZQVXY1FQULZrACkUfUrKKPXtK53xDz4o\nfSqdOsmop/piY2FDam4qC/5cQGFxocE5mqYxduVYIi5GlI4VFhdy6eqlFh8aez2hhKIFUawV89zW\n51h/Zn3p2OnU01X+kQAkZCVwIO4Am+duZrL35NL8hcbigYAHypXZ8O7i3SJKDLQk8vPlzqF3b2lu\n+ve/y568TUxkKOmpU3D33bLmT2GhLK9tagre3lJc/P3LOzWdneH222V5h4AAaaoKqxABnZoqu6h1\n7y7F6Z575D1DQozzvjQNnnpKVj49d06O6d4XyDUPGybfX0QEDBzYsPvZWNiwIngFS48t5XzGeYNz\nLl65yN7YvTy08SGKNenBT8lJwd7Svt4Z3YrKKKFoAeQX5ZNflE90RjS5BblsiNwAwIXMCwz6ehDf\nBVcRTwl8f/J7bu9zO+O8xvHrHb8qp3ILIDxcPnmnp5e090yQDl/dk7elpfQ5REXJAnAffyw/4EGa\nnz79tMzspM/XX0uTE8hrVey7rPvQFgKmT4f27aWoGMv89N57cif0xBMy0kn/niCFb9EiGfVkY9Mw\nsxPIUuOXrl7CzcaNiEsRBudEpUcxyHkQhcWF/HL6F0CZnRoDJRTNxNWCq0RekraDBX8u4JXdr3Ay\n+SSBboFsP7edvMI8Xtr5EmO6jeHdA+9SVFxk8DqrQlZxX//7mnLpihoIDpZP07oeyaNGSZNRb71o\nTZuSTVhgINx6a9m4r68UlmkGKp3oPwP06VN5R6H/oa1jwADjCMUnn0ih2rxZOuR/+EFmXevMabo1\nTZgg1zlsmHxvDcHdxp3pPtO5rfdt5UxL+pxNP4uvvS+39b6NA3EHAJmV7dxRObKNiRKKZmBvzF58\nPvMhcHkgSdlJrD69mk1RmziZcpIJXhPwc/Rj9m+z2R2zm9/u+I3O7Tuz7sy6StdJzE4kMTtRJbO1\nMIKD5Qe0jrFj5Ydqn1q0ROjVS1YUrakct5+fFIqEBHj2WRk+++GH0tGtj7F2FO+/L1uWuruDmxvM\nmSN7R/TqJc1pFfnzT9mHoiGM7z6ejXM24mvnW+WO4mz6Wbw7e9PfqT8nU04CakfRGCihaAY+P/o5\nC29YyHSf6cxYPYNAt0Dis+LZem4r/bv256mhT+Fu486xh49hbWHNXX3vYndM5Q4nO6J3NHo4rKLu\nGBIKqJ1QTJkidx81WRB79ZLObF329nvvweLFcF+FzWXfvlJQGpKAl5oqcz366gW3ffCBNG1V9Z7a\ntav5PdQWX3tfzlw0nJp+Nv0s3l286d+1PyeTT6JpmgyNVTsKo6K8Pc3A0cSjvHHjG4zrNg6/pX78\neOuP2FrYsiZ8Df2d+tPTrid39b2rdH63Tt3YdX5XpevsiN7R6OGwirqhaeX7QoMUjfvvBy+vms93\ncDDsn6iIlRU4OUl/xsGD0pFsCFtbsLeX5TS8a+5NZZDjx8tMaTrat5dVT69erd8160KNO4ou3jha\nOdKhXQfisuJIzE5ksMvgxl9YG0LtKJqYtNw0Mq5m4N3Fm94OvdkwZwO39b6NST0mYdnOkh5delQ6\nx8PWg7isuHJjmqaxI3pHo4fDKupGXJz8EHVyKhszNYUVK+S/xqRPH/lVlUjo8PeXiXH15fhxGDSo\n8njnzuDSBBYeF2sXrhRc4fK1y6VjMZdjyLiaQVR6FD3tegJI81PySemjUMl2RkXtKJqYY4nHGOQy\nqLQPxHSf6YDsoBWXGWewP4SHrQcXMi+UGwtLC8PCzKLRw2EVdSMoqPbtPhvKzJm1qwvk7y9DZG+5\npX73OX4c7rqr5nmNhRBC7iouRpT2c1+4cyHRGdFomoZdB/lD0PkplI/C+KgdRRNzNPGowZ4MXTt2\n5fUbDVSLA+w62HG14Co5+TmlY9ujtzOx+0QVDtvCOHJElrNoCh55RNaBqom+fRuWS3H8uMzbaE4G\ndB3A+oiy/KKk7CTOZ5zHu4t36d9AP6d+fBv0LWcunlFFKo1MmxOKlJwUxn03jo0RG5vkfsk5yeW+\nr0ooqkMIgbutO3GZZeanpijXoag7hw41PCzU2DTE9BQeDjk5DasCawxeH/c6K4JXsDN6JyD/rn66\n7SfenvB26ZzpPtN5efTLbLlnizI9GZlWLRTxWfEsP7Gc/KJ8lhxagtP7Tvgt9cOynSXvHXiPwuJC\nfg75Gc1Q0RwjsOv8Ltw/cudUiuw6o2kaRxOOMsS17o+c+uan/KJ89sXuY7zXeKOuV9EwiopkeY2W\n1k+gVy9ZzTUvr27nZWRIc9U77xgvgqm+OFs78+GkD3ln/zsApOSmMNB5YLmHJdv2tjwY8CCjPUdX\ndRlFPbnufBSaVrv/tLvP7+b2X2/Hq5MXy08s50LmBbbfu50OZh3o1qkbXh97cc/ae/jf6f8x3Wc6\n1hbWRl1nXGYcc9bMYaDzQHZG76SfUz/is+LR0HC3qWWHeT08bMqE4lD8IXzsfLCzbIGF69sw4eHS\nid3S+gmYm0tn9BdfyJyL2vLVV1L0Hn648dZWFwZ0HUDM5RiuFV7jSsEVOrfv3NxLajNcdzuK2Nja\nzfst7DcW3rCQQw8dYpTHKH654xf6OfWjp11P2pm245FBj7A3di+OVo6k5KbUfME68tGhj7i33708\nP/x5dsXI0Fad2ak+fgX9HcX/Qv/HVO+pRl2vouEcOtTydhM6fvxR7gx2V07HqZJz52QBw5aCu607\ncVlxJOck42jlqPxzTch1JxS7D6WXvi4sLuTPyD8Nztt3YR+jPEZhZmLGe5Pe4waP8imrL97wIsce\nPkaPzj0q+RHqw+H4w4xdORaArLwsvjv5HU8Pe5px3caxL3YfhcWF0uxUR/+EDg9bDy5kXSD2ciyr\nT6/mqWFPNXjNCuNy+HDL80/o6NYNnn8e1q+vcWopsbGyom1LoaN5RyzbWRKaGtoorX4VVXPdCcWW\nU8dLX68NX8v0n6eTmpsKyOqru8/vJuNqBucvn2egc9XlK81NzXG1ccWpoxMpOQ3fUQQlB7E3di+n\nUk6x7PgyJnafiIetBw5WDnh28uR44nG5o6iHfwKkUISmhvLMlmd4bNBjqoRyC+TcOVmrqaXi7S0T\n72pLSxMKkH8HRxKOKKFoYq47H8XxpKPARDRN470D7+Fo5cg/P9+Fe+ZdBF1bz2abW1kw5EmGuQ6j\nnWm7Gq/X1aprvXYUmdcy+TPqT8Z4jsHVxpXIS5HYW9rzxl9vsDtmN3vu21M696aeN/H2/rc5lnis\n3juKXva9uHztMkNdhvLCDS/U6xqKxiU5Gbq24M8vL6/aC0VxsWxp6uHRuGuqK562nhxJOHLdtTm9\n3rnudhSxBcfIzoY9MXvIysti4Q0v8evx7eReKea49WLMgh/n86OfMcpjVK2u59TRqV4+ig8Pfsji\nvYvxW+pHUnYSkZciWTRqEb+G/crTQ5/Gz9GvdO6rY14lNz+XTu074WDlUOd7AbjauHLu6XN8Mf0L\n1f+hhZKS0vKF4vx5w53xKpKaCtbWslRIS0LtKJqHBgmFEOI5IUSoEOKUEGKVEMJCCPGqECJeCHGi\n5GuK3vyFQogoIUS4EGKS3vjAkmtECiGWVLtgr318ujKRZ7c+y+Kxi/FmMgUe2+lzz3LcXEzxPfs5\nc3s8y6zes2r1Hrp27Fpn09O1wmt8efxL1t+1npEeIzkYf5DIS5FM8Z7CH3P+qPTEb2Fmwe93/s66\nuypXgFW0DvLzZeG8hnR0a2xsbGQvjNTUmue2RLMTSKHIuJahhKKJqbdQCCFcgKeAgZqm9UOasXSJ\n/h9qmjaw5GtLyfzewGygNzAVWCrKwha+AOZrmuYD+AghJlMFd/V4nH8n+5Gd6MzZdXdy4YQvFu01\nFu9dzPe3fE83T8Fsm4/o59SvVu/DycqJ5Ny6mZ5WnVrFIOdB9LLvRaBrIPti93Eh8wLdO3fnJp+b\nMDc1r3SOlbkVA7oOMHA1RWsgNVUW3zNUcrsloTM/TZ8uW6tWRUsVCk9buSglFE1LQ30UpoCVEKIY\nsAQSgG6Aobi1mcBqTdMKgRghRBQwVAgRC1hrmna0ZN73wC3AVkM3XDFvMbvvdMDXdAYfbRf06QOP\nzPmap+f0wquzFx4e0rZaW+q6o7h45SL/3v1vfpv9GwDD3Ycz7/d5uNm4GRQIResiL0/uHOzty4+3\ndLOTju7dYedOWXE2OFiWAzdUBiQmpmUKhYetdJo4WTnVMFNhTOr9/KNpWiLwAXABKRCXNU3bUXJ4\ngRAiWAixXAhhWzLmCuiXQE0oGXMF4vXG40vGDC/YRBDzv6fYvNqTRx+VrRmfmjIVr86yhrOnZ+1z\nLUD6KOrizH5y05PM6TuHEe4jABjqOpTknGR87Hxqf1PFdcuSJbJpUHBw+fHk5PIVY1sq3bvDl1/K\npkNffgkffWR4XkvdUeiEQu0ompaGmJ46IXcJnoAL0FEIcTewFOihadoAIBkpJkZFt73/17/gmWfK\n1/mv647CyUo6s2tTxiMtN43NZzfzxo1vlI7ZWNjg5+inhKKNsGmTbF06eTJcuVI2fr3sKLy8ZFe8\nm26CSZNkNnlcXOV5sbEy96Kl4dTRCQdLB1XLqYlpiOlpAhCtaVo6gBBiLTBC07Sf9OYsA3TV9xIA\n/doVbiVjVY0b5LXXXit9PXbsWJYsGVvueF13FFbmVpiZmJGVl4Vte1uDczZEbKBH5x6EpYUx2nM0\nHdp1KHd8co/J9HdqotrSimYjMxNOnJB9o8+fl8lrc+bIY9fTjsLMTLYpNTeHWbPgl19kMt7+/dK0\nNm4cnD4NPXs292orYyJMiHsuDgszi+ZeSotmz5497Nmzx3gX1DStXl/AUCAEaI/0SawEFgBd9eY8\nB/xU8roPEASYA17AWUCUHDtUcj0BbAKmVHFPrSbi4jTN2VnTLlzQtD17apyuaZqm9fi4hxZxMaLK\n48OXD9fu+OUO7bGNj2kfHviwdhdVtDrWrNG0SZPk61WrNG3q1LJjTz+taR9eB/81Ll/WtI8/Lvt+\n2zZN699f04qKNG3QIE0bM0bTIiM1zcVF04qLm22ZCiNT8tlZ78/7eu8oNE07IoT4reTDvwA4AXwN\nfCOEGAAUAzHAoyXzw4QQvwBhJfOfKHkDlAjMyhLR2aSVRErVB2dnuHQJnnxStmr8/XeYWkNZJJ1D\n25D5qKCogJMpJwlLC6OjeUf+vNtwyRBF6yQ6GtatA0dH2aVuuuwzxS23wIIFZUlpKSktt3yHPra2\n8PTTZd+PHy878j3+OKSnQ1QUrFolzVKqlJJCR4OinjRNWwwsrjA8r5r5bwFvGRg/DtTQ0LF2mJrK\n9oz798Mff8jOXAMGyD9y9yqKtlbn0A5JDcGrkxdDXIewMWIj/k5GWabiOuHnn6VQeHvL5j333SfH\nLS1h4ULZS3rJkuvH9FQRExP47DMYOlQ6tv/6C959V/69KBQ6rrsSHrXBy0s+KU2YIB11994LGzbI\nJ0BD2HWwI/1qusFjRxKOMNR1KM8Pf55+jv0MtipVtF6iouCxx2D+/MrH/u//pFN7/Hjo0OH6cGYb\nYvBg+fcxbpxMGPz9d/m3o1DoaJVCsWoVOJRUyujQAUaNks65qujSoUuNQuHn6FeuLIeibRAVBQ88\nUPXx/v3h5pth5crrc0ehQ2dSmzkTPvmk5fXUUDQvrfLx2NlZRnbo8PNruFAo2iZRUTVH/yxaJB9M\nOreCPjo2NtK/p1Do0yqFoiI6oagqVaIqoci4msGFzAv4Oyq/RFskM1PmSjjXELLv7Q1JSS2/fIdC\nUV/axH/trl1l2eSqiqF16dCF9GuVhWJv7F6Guw+vVblyRevj7FkpArWJ/jE1bfz1KBTNRZsQCiGg\nb9+qzU9V7Sh2n9/NuG7jGnl1ipZKbcxOCkVboE0IBUjzU2goXL1a+ViXDl3IuJpRaXx3jBKKtowS\nCoVC0maEom9feOklWfWzoKD8MUM7irTcNGIzYxnkMqgJV6loSURFSdOTQtHWaTNCcc89MlO7c2dZ\nFE2fikKhaRpv7nuTCd0nYGbSKiOIFTWQlQU7dsCQ+nWuVShaFW1GKGxtYeRImYwXE1P+WAezDhRr\nxVwtkHapd/e/y1+xf7Hs5mVGuXdSEmRUtmwpWjCLF8OUKeCvAt4UitaZcFcd3bpVri4rhJB+imsZ\ndGjXgR9DfuSbGd/QpYNx+lo+/bSs1LlqlVEup2hkkpJkCYszZ5p7JQpFy6BNCkXFHUV4OHSykOan\n9mbtib0cy0DngUa5X2GhNGFomjR5uVbZkknRUvjzT1maw9GxuVeiULQM2ozpSYenpxSKffvgzTfl\n2D/+AYU5Uij2X9jPMLdhdfZNZGXBrl2Vx48ckdVF582Dzz9v+PoVjc+ff8rGPgqFQtLmhEK3o1i7\nVjaeAZlYZZonhWLfhX2M8hhV5+t+/71sL1nRF7F1q3w6vfdeWc1W0bL48Uf5pSMvTwr+lCnNtyaF\noqXRZoVi3z6IjJSmoZgY4GqZUNzgcUOdr7thgyyk9uWX5cd1QuHpWTnaStG8/PknPPwwLNOLWdi7\nV+bc2Ns337oUipZGmxMKd3f5ga1zVB4/LsWiMLsLERcjCEsLY5jrsDpdMzMTDh2C1atl5c38fDke\nESFbZo4aJT94cnIMJ/wpmh5Nk2Xnf/1V/h/Q/c62b1e7CYWiIm1OKCwspJNyyBDo1Qs2bQJra7iW\n0YWvT3zNrF6zsDK3qvX14uPhhx+kGAwfLsNvd++Wx77+WpaoNjeXBeOcnWVEjaL5OXkS2rWTvghv\nbwgKkuO7d8ONNzbv2hSKlkabEwqQZqDRo8HHRwrFiBGQk9aFy9cu89jgx2p9nXPnpJnio4+ksxpk\ns4ig9yUAABJESURBVPp16+DaNem3eOSRsvkuLsr81FL4/XfZzlQImV+zf7/0L0VGym5vCoWijDYp\nFA88ALNnyzo+x47BDTdAdrID/Z36V2t2Ki6G116TDk+QrTBfeEEKxp13yrFbbpFO8nfflQLUvXvZ\n+a6uSihaCuvWyd8VlAnFX3/Jvtfm5s27NoWipdHm8igAHnpI/hsaKv/t0wc6p93Mj1NGIaqpKb15\ns8zYHTZMNqo5eFB2NtOnZ09ZJmTJEjh1qvwxV1dITDTe+2grpKdDWJgUdGMQHy9/D4GB8vvRo6W/\nIjFRRq4pFIrytEmh0OHjI//19gbXruYUZDhCt6rnf/RRWX/hwkLZCczSsvK8hQtlpzA3t/LjakdR\nd8LDZZvOdu2Mlyl97Jg0L+l6SLi5yZDYl1+WrUAVCkV52rRQ9OwpW6Z27y79B4mJEBBgeG5YmPzQ\n2roVJk6U5qeq+lvcc4/hcRcXGWGjqD2vvgq331457Lg2zJoF778PPXqUHz9xAgZWSLwPCJDhsgqF\nojJt0keho2NHGcLasWOZUFTF8eMwdqwsV25rK80gNbXIrIi+6am4uHLNqbbOX3+VDx/WlT959lkZ\nvpqbW37+gQNQVGT4WufPSz/EkSOVjxkSCoVCUTVtWiigzNns7Fy9UMTHl5mSFi+Gf/+77vfSNz2t\nWSPFpqo+3m2N3FyYMEGahM6fl2OHDskINWdn2c62YmjxLbfA0aOGr/f779K0FBZW+ZgSCoWibrR5\nodBR044iPl4m64GMcKpPnwLdPTQNfvpJXrNigcK2yr59Mg/lxhvhiy/k2ObNMG2afO3iUl4oMjIg\nLU1GnBli7VppAqwoFMnJMnTZw8P470GhaK0ooSjB0xOio6s+HhdX2TldV6ysZMJfeLh0nk6aJD8g\nWwPHj8sP3xdeqGwiqg07dsgdxbRpZbuETZtg6lT5umKyYlSU/NeQUCQlSf/Rk09WFoqgILmbqCa4\nTaFQVEAJRQmDB8tomOJiw8f1TU8N4bHHpHll/HgZzdMahCImRr6XV16RP8Ovvqr7NXbulD+TwYOl\n6CQkSB+OLoS1omkwIkIGIpw9W/laP/wAt94qmw6dP1+W9wIyX0J1rVMo6kabjnrSx9EROnWSmbm9\nelU+HhdXZnpqCG+/LeP23dykKBkqPa7zW1wvT73ffSfNcQ89JAMDVq+WpdtrQ1ERBAfL3dyQITIM\n1tFR5qFMmCDFACqbniIjZdmUijsKTYNvvpGNhywsZBHIqCgZhADSJPXttw1+ywpFm0LtKPQYNsxw\nlMy1a7LfhIODce4zbRr06yefeJOT4eOPZWFBHa+9VtYr43pg40YZigryw/vvv6vemVXk2WfluS++\nKEUCpGAsXVpmdoLKpqfISPlz1N9RaJo0Vwkh/R0gkyl15qewMMjOViU6FIq6ooRCj2HD4PDhyuO6\nznQmRv5pmZrKD9nNm+Gf/5RjBQUyZ0C/R0JLJjFR7gZGjJDfu7rKZMPaJMcVFsrdx759MklRx5Ah\ncOVK+SquOqGIjJT3i4iAMWPkB392tjR/+fjAE0/I3AvdbszPT2bQg4w0u/VW4/8eFYrWjvqT0WPo\nUMNCYQxHdlWMGiXNJL/9JsuQb9kiE8Ryc6+Pns1//CE/0HW7AZBhv7Xxvfz9t3SAe3qWHx8zRv5c\n9PNUdD6Kp56SO4moKPD1lT+r/ftljsuzz0q/xpw5Zec98ogU3Q0bpO/krrsa9HYVijaJEgo9Bg6U\n5omKPSOM5ciuCmdn+cH444/w2WeyaOHMmTJhrKWzZk3l+kijRknT0WefVW+CWrtWPuFXZNAgmXyn\nj4uL3EkcPSrNSTY28qtHD9k98N57Zb2miri7w+uvy5yLV14pM0kpFIrao4RCjw4doHfvst4EOozl\nyK6OBx+Exx+XtaPmzJEfbGvXNu49G0pMjIxQ0lVh1XHvvTI09a23ygovGmLDhsrnVoWdnXR833EH\nLF9elmvh6ytLsbz6atXnPvqoNFXpl3xXKBS1RwlFBQz5Kc6fb9wdBcgdRFSUzCju2FGaUmJjDYd/\ngrTv//GH/Le5+OYbmDsX2rcvP96+vWwxOnWqbC1qiKwsmTDXu3ft7iWENFE98AB06VImMIsWwbZt\nZdFRVZ3bs2ft7qNQKCqjhKICFSOfoqLkk/306Y17XyFkFVsdZmYy5PSnnwzP37wZbrtNOn7T0hp3\nbYYoLpa+lYcfrnrOmDFVC0VEhHQ+18WxfOJEWV6FDhsbKawKhaLxUEJRAf0dhabJ3ICXX5YtTpua\nuXOl38JQPaiffpJlz7t3lyacpiYkRJrJdPkJhhgzRvoaDK0/IkKajeqCtXXd5isUCuPQIKEQQjwn\nhAgVQpwSQqwSQpgLIToLIbYJISKEEFuFELZ68xcKIaKEEOFCiEl64wNLrhEphFjSkDU1FB+fsjpC\nW7fCpUsy0qY50MX7HzpUfjw3V+4o7rhD9nzesaNp1rNhg+zed+2aLEEyfnz18z08ZNmS8PDKx+oj\nFAqFonmot1AIIVyAp4CBmqb1Q2Z5zwFeBHZomuYL7AIWlszvA8wGegNTgaWirJ3cF8B8TdN8AB8h\nxOT6rquhmJhIc86qVTLpbdGisgY3TY0Q0hG7dGnZWHAwPP+8jN5xcJAf1rt2NX4V2pgY6aR+9VVZ\nPXfnTlnArybGjYPt2yuPK6FQKK4fGmp6MgWshBBmQAcgAZgJfFdy/DtAF9cyA1itaVqhpmkxQBQw\nVAjRFbDWNE1XMPp7vXOahXfflTH3ycmyt3Zz8sADMikvNVU+yU+Y8P/t3V+MVOUZx/HvY2QhVq1L\nAmhY3WUXDNRYF0SEqHGjVaEX2NTG0jQVGm2NmELShIpXiDeURkqraI2tKDS2Ck0UTFSE1CUhsd1F\nsdCKSmtQFmXrBUXsBSo8vXjOdIdl5izMzO7snPl9ErIz7zk7856XM/vM+z++pa9eHcebm6OdPm10\nUSVs2xa1l02b4Iknokmpo2Pg37vtNti48dR0BQqR2lFyoHD3j4BVwIdEgDji7tuAce7em5xzCBib\n/Mp44EDeSxxM0sYDPXnpPUla1bS3xxDZHTuqV5vIGT065hqsWRPzKqZNg1WrTl6P6sYbB7/5aevW\n2NmvuTlGHE2YcHpLmtx0UzQ9Hcj7nz9xIgYJ5LaiFZHhreRFAc3sAqL20AwcATaa2feB/o0gFW0U\neeCBB/7/uKOjg47T+VpbglGjTh32WS3Ll8cktLFjo2O9vxkzBncV2hMnoqnpoYfi+YoVxfeB6K+h\nIQLL449H7WLq1Agao0erc1pksHR2dtLZ2Vmx1zMvsXHbzL4D3OLuP0qe/wCYCdwAdLh7b9Ks9Jq7\nTzGzpYC7+8rk/FeAZcAHuXOS9HnA9e5+T4H39FLzW+vWrYu+iZ6eUwNYZ2f0HRQbilquN96IEVil\nLimyYwfMnx9LlKxcGUtxdHXVxsxzkSwwM9y95PWoy1lm/ENgppmNAo4BNwLdwGfAAmAlMB/YlJy/\nGXjGzFYTTUsTgS53dzM7YmYzkt+/A3i4jHxl0vz5scpqoVpOa+vpf8MfyNq1scBfrmnr+HFYsiTe\nv1TXXhv527Mn+jUaGopvYSoiw0/JNQoAM1sGzAO+AHYBdwHnARuAi4nawu3u/p/k/PuBO5PzF7v7\nq0n6lcDTwCjgJXdfXOT96rZGkeb48ZjTcORIac1le/fGqKY5c2I01SWXwHPPxbEVK6J/YuvWyvTX\nPP98rG3Vf+KciAyecmsUZQWKoaZAUdykSTE6qtCmSwNZsiSalV58MZYqOXw4huFOmhT7Zjz5pHaF\nE6ll5QYKzczOiNbW9D2/02zfHjWKL7+MYbiLF8cOc0ePxmtecUVFsyoiNUZboWZEqYHi6NHoOxgx\nIjqZx4yJlWyvuy76RNrbo09BROqXahQZkQsUvb2nvw0pxKY/uaVC9uyJ5dQnTozhq2vWxNpXIlLf\nFCgyorU15lJMnnzytqID2b49Fu9raYlhrLnl1OfOjVnY6nQWEQWKjGhthZ07Y8OgDRsKz1E4dOjU\ntO7uGOnU3ByBIrdBU27XOgUKEVGgyIjLLovZzw8+GENa1649+fj770cQ6L8R0oEDUZtoaYlJcLka\nxdVXwyOPDP6GTSIy/KkzOyMaGmKlWYgJbosWxYqyufV5u7ri8fLlsYzGyJGwcGEEiqamqFF8/nlf\njeKss6J2IiKiGkUGNTVF4MgfBbVzZywB8vLLsXz65s0xX6KhIdZcammJ8wZ7b3ARqT0KFBk1a1Zs\neLRuHXz8cfRF3HBDLA++ZUssqdHT09e01NwcP9XUJCL9qekpo2bOhEcfjWBx992xbPr06dDYCMeO\nRZPT/v19gaGlJfbpvuiiauZaRIYj1SgyatYseP312OBo/fpYoryxMY6NHAnjxsXxXKAYMybmUZyt\nrw4i0o/+LGTUVVfBU0/Fqq/vvAOffnry8ba2WJ589uy+tFLWiRKR7FONIqNGjIAFC2Kk0+rVMdQ1\nX1tbdHCrT0JEBqIaRR0otFtfW1ssAqhAISIDUY2iTrW1xU8FChEZiAJFncoFCs2bEJGBKFDUqUmT\n4PLL4fzzq50TERnutMOdiEjGaYc7EREZVAoUIiKSSoFCRERSKVCIiEgqBQoREUmlQCEiIqkUKERE\nJJUChYiIpFKgEBGRVAoUIiKSSoFCRERSKVCIiEgqBQoREUmlQCEiIqkUKEREJJUChYiIpFKgEBGR\nVCUHCjO71Mx2mdmbyc8jZrbIzJaZWU+S/qaZzc77nfvNbJ+Z7TWzm/PSp5nZbjN7z8x+Ve5FiYhI\n5ZQcKNz9PXef6u7TgCuB/wLPJ4d/6e7Tkn+vAJjZFOB2YAowB3jMzHJb8/0GuNPdLwUuNbNbSs1X\nvejs7Kx2FoYNlUUflUUflUXlVKrp6RvAv9z9QPK80N6stwLPuvuX7r4f2AfMMLMLgfPcvTs5bz3w\nrQrlK7P0IeijsuijsuijsqicSgWK7wJ/zHt+r5m9ZWa/M7OvJmnjgQN55xxM0sYDPXnpPUmaiIgM\nA2UHCjMbAcwFNiZJjwFt7t4OHAJWlfseIiJSPebu5b2A2VxgobvPLnCsGXjR3b9uZksBd/eVybFX\ngGXAB8Br7j4lSZ8HXO/u9xR4vfIyKyJSp9y9UJfAaTm7Au//PfKanczsQnc/lDz9NvD35PFm4Bkz\nW000LU0EutzdkxFTM4Bu4A7g4UJvVM6FiohIacoKFGZ2DtGR/eO85F+YWTtwAtgP3A3g7m+b2Qbg\nbeALohaSqyHcCzwNjAJeyo2UEhGR6iu76UlERLKtZmZmm9lsM3snmZR3X7XzM5TMbL+Z/S2Z2NiV\npDWa2atm9q6ZbckbXZY5ZvakmfWa2e68tKLXX2xiZxYUKYsznuRa68ysycz+bGb/MLM9ZrYoSa+7\n+6JAWfwkSa/cfeHuw/4fEdD+CTQDI4C3gMnVztcQXv/7QGO/tJXAz5LH9wE/r3Y+B/H6rwXagd0D\nXT/wNWAX0azaktw3Vu1rGOSyWAb8tMC5U7JaFsCFQHvy+FzgXWByPd4XKWVRsfuiVmoUM4B97v6B\nu38BPEtM4KsXxqm1v1uBdcnjdWR4kqK77wAO90sudv1zKTCxcyjyORSKlAWcwSTXQczekHH3Q+7+\nVvL4M2Av0EQd3hdFyiI3F60i90WtBIr+k/XqbVKeA1vMrNvM7krSxrl7L8SNAoytWu6qY2yR6y82\nsTPrzmSSa6aYWQtRy/oLxT8X9VYWf02SKnJf1EqgqHfXuPt04JvEf/x1RPDIV++jEur5+ut2kquZ\nnQv8CVicfJuu289FgbKo2H1RK4HiIHBJ3vOmJK0uuPvHyc9PgBeIamKvmY2DmLsC/Lt6OayKYtd/\nELg477zM3yvu/oknjc/Ab+lrRsh0WZjZ2cQfxt+7+6YkuS7vi0JlUcn7olYCRTcw0cyazawBmEdM\n4Ms8Mzsn+aaAmX0FuBnYQ1z/guS0+cCmgi+QHcbJ7a3Frn8zMM/MGsxsAsnEzqHK5BA5qSySP4g5\n/Se5Zrks1gJvu/uv89Lq9b44pSwqel9Uu8f+DHr2ZxO9+fuApdXOzxBe9wRilNcuIkAsTdJHA9uS\nMnkVuKDaeR3EMvgD8BFwDPgQ+CHQWOz6gfuJkRx7gZurnf8hKIv1wO7kPnmBaKfPdFkA1wDH8z4b\nbyZ/I4p+LuqwLCp2X2jCnYiIpKqVpicREakSBQoREUmlQCEiIqkUKEREJJUChYiIpFKgEBGRVAoU\nIiKSSoFCRERS/Q+WZhiuAyGaNwAAAABJRU5ErkJggg==\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"sim_close = sim_day()\n",
"plt.plot(sim_close)\n",
"plt.plot(rel_close)"
]
},
{
"cell_type": "code",
"execution_count": 1074,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"def sim_intraday(rel_data, close_p, mean):\n",
" def extract_close(data):\n",
" return np.array(data)[:, -2].astype(float)\n",
"\n",
" close = extract_close(rel_data)\n",
" v = volatility(close)\n",
" mean = mean / 600\n",
"\n",
" S = rel_data[0][2]\n",
" T = 60 / (252 * 5 * 3600)\n",
" sim_close = np.empty((len(close),))\n",
" for i in range(len(close)):\n",
" S = bs_model(S=S+mean, T=T, v=v, r=0.02)\n",
" sim_close[i] = round(S)\n",
"\n",
" sim_close += close_p - sim_close[-1]\n",
"\n",
" return sim_close"
]
},
{
"cell_type": "code",
"execution_count": 1075,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"([,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
" ],\n",
" [,\n",
" ,\n",
" ,\n",
" ,\n",
" ,\n",
"