No changes between revisions
/Modules/Sensors/MAG01A/SW/Python/MAG_test.ipynb
14,8 → 14,14
"Uk\u00e1zka pou\u017eit\u00ed n\u00e1stroje IPython na manipulaci se senzorov\u00fdmi daty\n",
"=======\n",
"\n",
"P\u0159\u00edklad vyu\u017e\u00edv\u00e1 modulovou stavebnici MLAB a jej\u00ed knihovnu https://github.com/MLAB-project/MLAB-I2c-modules \n",
"P\u0159\u00edklad vyu\u017e\u00edv\u00e1 modulovou stavebnici MLAB a jej\u00ed knihovnu [pymlab](https://github.com/MLAB-project/MLAB-I2c-modules). Sn\u00edma\u010d je k po\u010d\u00edta\u010di p\u0159ipojen\u00fd p\u0159es rozhradn\u00ed USB a data jsou vy\u010d\u00edt\u00e1na p\u0159es [I\u00b2C](http://wiki.mlab.cz/doku.php?id=cs:i2c)\n",
"\n",
"Pou\u017eit\u00fd sn\u00edma\u010d [HMC5883L](http://www.magneticsensors.com/three-axis-digital-compass.php) m\u00e1 n\u00e1sleduj\u00edc\u00ed katalogov\u00e9 parametry: \n",
"\n",
"* M\u011b\u0159\u00edc\u00ed rozsah +/- 800 uT\n",
"* Rozli\u0161en\u00ed typicky 5 uT\n",
"* \u010cetnost m\u011b\u0159en\u00ed 75 Hz\n",
"\n",
"Zprovozn\u011bn\u00ed demo k\u00f3du\n",
"---------------------\n",
"\n",
35,12 → 41,14
"output_type": "stream",
"stream": "stdout",
"text": [
"i2c-0\ti2c \ti2c-tiny-usb at bus 002 device 004\tI2C adapter\r\n",
"i2c-1\ti2c \tintel drm CRTDDC_A \tI2C adapter\r\n",
"i2c-2\ti2c \tintel drm LVDSBLC_B \tI2C adapter\r\n",
"i2c-3\ti2c \tintel drm LVDSDDC_C \tI2C adapter\r\n",
"i2c-4\ti2c \tintel drm HDMIB \tI2C adapter\r\n",
"i2c-5\ti2c \tDPDDC-B \tI2C adapter\r\n"
"i2c-0\ti2c \ti915 gmbus ssc \tI2C adapter\r\n",
"i2c-1\ti2c \ti915 gmbus vga \tI2C adapter\r\n",
"i2c-2\ti2c \ti915 gmbus panel \tI2C adapter\r\n",
"i2c-3\ti2c \ti915 gmbus dpc \tI2C adapter\r\n",
"i2c-4\ti2c \ti915 gmbus dpb \tI2C adapter\r\n",
"i2c-5\ti2c \ti915 gmbus dpd \tI2C adapter\r\n",
"i2c-6\ti2c \tDPDDC-B \tI2C adapter\r\n",
"i2c-7\ti2c \ti2c-tiny-usb at bus 001 device 006\tI2C adapter\r\n"
]
}
],
73,12 → 81,12
"cell_type": "code",
"collapsed": false,
"input": [
"port = 0"
"port = 7"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 7
"prompt_number": 2
},
{
"cell_type": "markdown",
125,7 → 133,7
" \"address\": 0x72,\n",
" \n",
" \"children\": [\n",
" {\"name\": \"mag\", \"type\": \"mag01\" , \"channel\": 6, }, \n",
" {\"name\": \"mag\", \"type\": \"mag01\", \"gauss\": 0.88, \"channel\": 1, }, \n",
" ],\n",
" },\n",
" ],\n",
134,7 → 142,7
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 8
"prompt_number": 4
},
{
"cell_type": "markdown",
153,14 → 161,22
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 10
"outputs": [
{
"output_type": "stream",
"stream": "stderr",
"text": [
"WARNING:pymlab.sensors.iic:HID device does not exist, we will try SMBus directly...\n"
]
}
],
"prompt_number": 5
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Nyn\u00ed u\u017e m\u016f\u017eeme p\u0159\u00edmo komunikovat se za\u0159\u00edzen\u00edm pojmenovan\u00fdm jako gauge."
"Nyn\u00ed u\u017e m\u016f\u017eeme p\u0159\u00edmo komunikovat se za\u0159\u00edzen\u00edm pojmenovan\u00fdm jako mag_sensor. A vy\u010d\u00edst z n\u011bj sadu dat."
]
},
{
167,16 → 183,23
"cell_type": "code",
"collapsed": false,
"input": [
"MEASUREMENTS = 100\n",
"x = np.zeros(MEASUREMENTS)\n",
"y = np.zeros(MEASUREMENTS)\n",
"z = np.zeros(MEASUREMENTS)\n",
"import sys\n",
"import time\n",
"from IPython.display import clear_output\n",
"\n",
"MEASUREMENTS = 500\n",
"#x = np.zeros(MEASUREMENTS)\n",
"#y = np.zeros(MEASUREMENTS)\n",
"#z = np.zeros(MEASUREMENTS)\n",
"list_meas = []\n",
"\n",
"for n in range(MEASUREMENTS):\n",
" mag_sensor.route() #V p\u0159\u00edpad\u011b v\u00edce \u010didel je pot\u0159eba ke ka\u017ed\u00e9mu p\u0159ed jeho pou\u017eit\u00edm nechat vyroutovat cesutu na sb\u011brnici.\n",
" (x[n], y[n], z[n]) = mag_sensor.axes()\n",
" print(n, x[n], y[n], z[n])"
"# mag_sensor.route() #V p\u0159\u00edpad\u011b v\u00edce \u010didel je pot\u0159eba ke ka\u017ed\u00e9mu p\u0159ed jeho pou\u017eit\u00edm nechat vyroutovat cesutu na sb\u011brnici.\n",
" clear_output()\n",
" (x, y, z) = mag_sensor.axes()\n",
" list_meas.append([x, y, z])\n",
" print (n, list_meas[n])\n",
" sys.stdout.flush()"
],
"language": "python",
"metadata": {},
185,853 → 208,242
"output_type": "stream",
"stream": "stdout",
"text": [
"(0, -91.0, 199.0, 22.0)\n",
"(1, -91.0, 199.0, 21.0)"
"(499, [-111.69, -413.90999999999997, -388.36])\n"
]
},
}
],
"prompt_number": 6
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"V\u00fdstupn\u00ed jsou v jednotk\u00e1ch miliGauss a m\u011b\u0159\u00edc\u00ed rozsah je nastaven\u00fd na 0.88 Gauss. Viz konfigurace \u010didel naho\u0159e.\n",
"Nam\u011b\u0159en\u00e9 hodnoty n\u00e1sledn\u011b ulo\u017e\u00edme do souboru. "
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"np.savez(\"calibration_data_3Dset\", data=list_meas)"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 141
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Zpracov\u00e1n\u00ed dat\n",
"-----------\n",
"\n",
"V dal\u0161\u00ed \u010d\u00e1sti budeme pracovat s daty v ulo\u017een\u00e9m souboru, kter\u00fd na\u010dteme do pol\u00ed x, y, z. "
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"data = np.load('./calibration_data_3Dset.npz')\n",
"list_meas = data['data']"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 142
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Nam\u011b\u0159en\u00e9 hodnoty vykresl\u00edme do 3D grafu."
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"from mpl_toolkits.mplot3d.axes3d import Axes3D\n",
"#%pylab qt\n",
"%pylab inline\n",
"fig = plt.figure()\n",
"ax = Axes3D(fig)\n",
"#plt.subplot(121)\n",
"p = ax.scatter((list_meas)[1],(list_meas)[5],(list_meas)[3])\n",
"#p = ax.plot3D(list_meas)\n",
"#plt.subplot(122)\n",
"#p = ax.scatter(x, y, z)\n"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"(2, -91.0, 198.0, 22.0)"
"Populating the interactive namespace from numpy and matplotlib\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"metadata": {},
"output_type": "display_data",
"png": "iVBORw0KGgoAAAANSUhEUgAAAb4AAAEuCAYAAADx63eqAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzsfXm8HUWZ9tNnP3dLwmaA+GEgGNkCARJiQsIAEkQ2WYKi\niWYEHNEZQFYNERVZFEcCg0TZFAbQYRhDQD7RsEYQEiQgYQn7Fww6gIbc7Zx7lj6nvz+ub6dO3eq9\nuvss9fx++UFubndVb/XUuzzvqxmGYUBBQUFBQaFDkIh7AgoKCgoKClFCEZ+CgoKCQkdBEZ+CgoKC\nQkdBEZ+CgoKCQkdBEZ+CgoKCQkdBEZ+CgoKCQkdBEZ+CgoKCQkdBEZ+CgoKCQkdBEZ+CgoKCQkdB\nEZ+CgoKCQkdBEZ+CgoKCQkdBEZ+CgoKCQkdBEZ+CgoKCQkdBEZ+CgoKCQkdBEZ+CgoKCQkdBEZ+C\ngoKCQkdBEZ+CgoKCQkdBEZ+CgoKCQkdBEZ+CgoKCQkdBEZ+CgoKCQkdBEZ+CgoKCQkdBEZ+CgoKC\nQkdBEZ+CgoKCQkdBEZ+CgoKCQkchFfcEFBTCRL1eh67rKJVKSKVSSCaTSCaTSCQS0DQNmqbFPUUF\nBYWIoYhPoS1Rr9dRKpUAAIZhoFaroV6vwzAM878sESpCVFDoHCjiU2gr1Ot1VKtV1Ot1DA0Noaen\nxySyZDIJAOa/JxIJ1Ot11Gq1MechIkylUkgkEooQFRTaCIr4FFoehmHAMAyT0ABA0zQYhgFd11Eu\nl1Gr1UwCo983DAOapiGRSIw5HxFipVIxf06/qwhRQaG1oRmGYcQ9CQUFP7AiPACoVCooFApIJBLI\n5/Pm71LMj37fMAyTwNg/IjJjCZOFIkQFhdaCIj6FloOIwFjCGxkZMd2Y3d3dSCaTqFar5u9Uq1XU\najXkcjnzXPyfIIRIZJzNZpFIJMxYoiJEBYXmgHJ1KrQMeMJjCaRcLqNUKiGRSKC7uxupVAqDg4OO\nBEOxP4r/8WPRH7Iq7QiRXKaGYaBUKkHTNNTrdZTL5TFjKkJUUIgPivgUmh6UlUmZmSLCSyaT6O7u\nRjqdHnMs/ZeOofifHYISIjumVQxRRIh8hil7PgUFBTlQxKfQtKDkFF3XAaCB8EqlkqnN6+npQSo1\n9lVmrSdZlpQdIRIxk/u1WCwCwBjrkEiNPx4AarWaeb38mGz8MJlMKutQQcEnFPEpNB2IRHRdR7FY\n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\n",
"text": [
"\n",
"(3, -91.0, 199.0, 22.0)"
"<matplotlib.figure.Figure at 0x7f3f8205d590>"
]
},
}
],
"prompt_number": 143
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Pro lep\u0161\u00ed zobrazen\u00ed jednotliv\u00fdch zkreslen\u00ed vykresl\u00edme i 2D pr\u016fm\u011bt dat."
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"plt.plot(x, z,'.')"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"metadata": {},
"output_type": "pyout",
"prompt_number": 144,
"text": [
"\n",
"(4, -91.0, 198.0, 21.0)"
"[<matplotlib.lines.Line2D at 0x7f3f820aa790>]"
]
},
{
"output_type": "stream",
"stream": "stdout",
"metadata": {},
"output_type": "display_data",
"png": "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\nbcOvzczMvJktxNXV823YsMH69+9vwWDQsrKyrFu3brZ48eJG11y8eNFqamoa/r179+5tuudYtGS+\nRD6/q82dO9fmzZvX6GeJfH5Xu958iXJ+Tc22bNkyGzx4sFVUVFxzjYezizZfrGfX4rh/99131qdP\nHzty5EjDz+rr661Xr1529uxZMzObMWOGvf/++42uW7p0qZWUlJiZ2UcffWSvvPJKS7cQV9eb75/C\n4fB172xnz55tS5YsMTOzQ4cOWXZ2dlz32VItnS+Rz6++vt4GDx5sv//+u5mZvfPOO/bWW281ui6R\nz6858yXC+TX1e/Ptt9+2MWPGXPOnkSsS+ezMbjxfrGfX4jcxjR49WkeOHFGvXr0kSWlpadq4caN2\n7typ4uJiderUSZmZmVq+fLnat2+vp556Slu3blVtba1efPFFnTt3TsnJySotLVW3bt1asoW4amq+\nK3bt2qXVq1ertLRUkhrmi0Qimjhxov744w916NBBq1atUkZGxi2ZIZqWzpfo57d582YtWrRIycnJ\nuu+++7R27Vp17tzZzfndaL5EOL/rzbZ69Wrdf//9GjhwoJKTkyVJ48eP19SpU12cXXPmi/XseIcq\nADjEm5gAwCHiDgAOEXcAcIi4A4BDxB0AHCLuAOAQcQcAh4g7ADj0P+4RIHXcWDIzAAAAAElFTkSu\nQmCC\n",
"text": [
"\n",
"(5, -91.0, 198.0, 22.0)"
"<matplotlib.figure.Figure at 0x7f3f81d6bad0>"
]
},
}
],
"prompt_number": 144
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Z grafu je vid\u011bt, \u017ee se uplat\u0148uj\u00ed oba zn\u00e1m\u00e9 deforma\u010dn\u00ed jevy - soft-iron a hard-iron. Pokus\u00edme se je proto kompenzovat. Nejd\u0159\u00edve zkus\u00edme odstranit Hard-iron efekty zp\u016fsobuj\u00edc\u00ed offsety."
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"xoffset = (min(x) + max(x))/2\n",
"print xoffset"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"(6, -91.0, 198.0, 21.0)"
"ename": "TypeError",
"evalue": "'float' object is not iterable",
"output_type": "pyerr",
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m\n\u001b[0;31mTypeError\u001b[0m Traceback (most recent call last)",
"\u001b[0;32m<ipython-input-145-8671977becc2>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mxoffset\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mmin\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0mmax\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m/\u001b[0m\u001b[0;36m2\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 2\u001b[0m \u001b[0;32mprint\u001b[0m \u001b[0mxoffset\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;31mTypeError\u001b[0m: 'float' object is not iterable"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"(7, -91.0, 198.0, 22.0)"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"(8, -91.0, 198.0, 21.0)"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"(9, -91.0, 198.0, 21.0)"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"(10, -92.0, 198.0, 22.0)"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"(11, -92.0, 196.0, 30.0)"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"(12, -120.0, 169.0, 48.0)"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"(13, -97.0, 114.0, 27.0)"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"(14, -78.0, 102.0, -4.0)"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"(15, -83.0, 148.0, -11.0)"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"(16, -70.0, 148.0, -22.0)"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"(17, -106.0, 123.0, -91.0)"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"(18, -133.0, 58.0, -179.0)"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"(19, -135.0, 50.0, -189.0)"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"(20, -135.0, 57.0, -183.0)"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"(21, -135.0, 70.0, -175.0)"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"(22, -136.0, 72.0, -174.0)"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"(23, -133.0, 84.0, -166.0)"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"(24, -130.0, 93.0, -160.0)"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"(25, -128.0, 98.0, -155.0)"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"(26, -118.0, 114.0, -139.0)"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"(27, -92.0, 143.0, -93.0)"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"(28, -29.0, 161.0, -17.0)"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"(29, 20.0, 147.0, 39.0)"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"(30, 48.0, 143.0, 50.0)"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"(31, 66.0, 153.0, 30.0)"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"(32, 72.0, 152.0, 27.0)"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"(33, 81.0, 150.0, 27.0)"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"(34, 88.0, 151.0, 26.0)"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"(35, 88.0, 151.0, 25.0)"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"(36, 86.0, 150.0, 24.0)"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"(37, 89.0, 149.0, 22.0)"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"(38, 107.0, 147.0, 12.0)"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"(39, 37.0, 170.0, -24.0)"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"(40, -126.0, 123.0, -106.0)"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"(41, -120.0, 41.0, -210.0)"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"(42, -83.0, -2.0, -244.0)"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"(43, -91.0, -102.0, -199.0)"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"(44, -43.0, -159.0, -128.0)"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"(45, 18.0, -163.0, -138.0)"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"(46, 46.0, -154.0, -166.0)"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"(47, 196.0, -35.0, 65.0)"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"(48, 211.0, -61.0, 11.0)"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"(49, 222.0, 31.0, -140.0)"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"(50, 147.0, 118.0, -169.0)"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"(51, 96.0, 141.0, -172.0)"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"(52, -41.0, 154.0, -157.0)"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"(53, 91.0, 82.0, -236.0)"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"(54, 191.0, -97.0, -123.0)"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"(55, 193.0, -104.0, -28.0)"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"(56, 166.0, -83.0, 60.0)"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"(57, 153.0, -135.0, -24.0)"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"(58, 235.0, -17.0, -91.0)"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"(59, 141.0, 134.0, -124.0)"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"(60, 198.0, 101.0, -73.0)"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"(61, 233.0, -13.0, -16.0)"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"(62, 196.0, -46.0, 51.0)"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"(63, 171.0, -61.0, 74.0)"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"(64, 175.0, -49.0, 75.0)"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"(65, 182.0, 82.0, 37.0)"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"(66, 81.0, 136.0, -179.0)"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"(67, 74.0, 88.0, -238.0)"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"(68, 44.0, 4.0, -271.0)"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"(69, -130.0, 71.0, -187.0)"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"(70, -157.0, 15.0, -176.0)"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"(71, -115.0, -126.0, 6.0)"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"(72, 66.0, -116.0, 93.0)"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"(73, 91.0, -155.0, 5.0)"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"(74, 236.0, -27.0, -79.0)"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"(75, 224.0, 66.0, -61.0)"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"(76, 212.0, 72.0, -121.0)"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"(77, 209.0, 46.0, -159.0)"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"(78, 156.0, 128.0, -131.0)"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"(79, 100.0, 156.0, -114.0)"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"(80, 92.0, 157.0, -124.0)"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"(81, 173.0, 110.0, -134.0)"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"(82, 174.0, 115.0, -122.0)"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"(83, 103.0, 114.0, -194.0)"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"(84, 105.0, 83.0, -221.0)"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"(85, 169.0, 120.0, -44.0)"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"(86, 191.0, 89.0, 13.0)"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"(87, 131.0, 95.0, -206.0)"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"(88, 112.0, 37.0, -250.0)"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"(89, 58.0, -20.0, -266.0)"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"(90, 48.0, -39.0, -264.0)"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"(91, 98.0, 9.0, -258.0)"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"(92, 117.0, 27.0, -246.0)"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"(93, 111.0, 25.0, -251.0)"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"(94, 129.0, 42.0, -237.0)"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"(95, 192.0, 65.0, -162.0)"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"(96, 222.0, 61.0, -83.0)"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"(97, 231.0, 25.0, -24.0)"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"(98, 234.0, -18.0, -36.0)"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"(99, 234.0, -29.0, -38.0)"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n"
]
}
],
"prompt_number": 11
"prompt_number": 145
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"from mpl_toolkits.mplot3d.axes3d import Axes3D"
"zoffset = (min(z) + max(z))/2\n",
"print zoffset"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 12
"outputs": []
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"fig = plt.figure(figsize=(14,6))\n",
"ax = fig.add_subplot(1, 2, 1, projection='3d')\n",
"p = ax.plot_surface(x, y, z, rstride=4, cstride=4, linewidth=0)"
"plt.plot(x-xoffset, z-zoffset,'.')"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "display_data",
"png": "iVBORw0KGgoAAAANSUhEUgAAAXEAAAFdCAYAAAD16V3pAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzsvXuUFOWZP/7p60z3TM+AN0QGBYWIKNFBg5dkvyHqIDKB\n6Caroi4xkRwDSRTNeomeRHSjqIlJDFmzxCOJmMRbDINZFRU3smoScBWMEYVxBQMDElBgZvreXfX7\nY35P8XZNVXVd3qruqn4/53jUmemuqu6qz/u8z/N5Pk9IlmUZAgICAgK+RLjWJyAgICAgYB+CxAUE\nBAR8DEHiAgICAj6GIHEBAQEBH0OQuICAgICPIUhcQEBAwMcQJC4gICDgYwgSFxAQEPAxBIkLCAgI\n+BiCxAUEBAR8DEHiAgICAj6GIHEBAQEBH0OQuICAgICPIUhcQEBAwMcQJC4gICDgYwgSFxAQEPAx\nBIkLCAgI+BiCxAUEBAR8DEHiAgICAj6GIHEBAQEBH0OQuICAgICPIUhcQEBAwMcQJC4gICDgYwgS\nFxAQEPAxBIkLCAgI+BiCxAUEBAR8DEHiAgICAj5GtNYnIBB8FItFFAoFxONxRCIRhMMidhAQ4IWQ\nLMtyrU9CIJiQZRmlUgnFYhH5fB6hUAgAEA6HEY1GEYvFEIlEEAqFlN8JCAhYgyBxAVcgSRKKxSIk\nSQIwFI2HQiHIslzxT7FYRHNzM6LRKKLRqBKpC1IXEDAHkU4R4ApZllEul1EsFgFgGBmzUbckSQrJ\nFwoFFAoF5W9YUqdoXUBAYDgEiQtwAxt9s2RdbbMXCoUQiUSU/2fTMIRIJIJYLKYQuyB1AYEhCBIX\ncAyt6NsJyapfL8syJElCNptVfk6kTpG6KJYKNCoEiQs4gizLKBQKw6JvnqD3JaImUs/lcsrfiGKp\nQKNCkLiALVD0XSqVIMuyp6SpFanTYjI4OIhIJKIQuiiWCgQdgsQFLINUJeVyuSJCtgpSqziFmtSJ\nsEWxVKARIEhcwBIkSUKhUPA8+rYKUSwVaBQIEhcwBSLBUqnkKPquFfSKpWxendIwbApGQKDeIUhc\noCokSUI6nUaxWEQymQxExKpH6vl8Hvl8HkBlsTQcDou8ukBdQpC4gC7Y6JtILqgkpkXqAJDP59Hf\n34/m5uaKvHo0GhWkLlAXECQuoAm9xp1GAevzAgylWqigy+bVWVmjyKsL1AKCxAUqwLtxJ0jQKpbS\nZ6VuQhLFUgGvIEhcQIFR9M1LDhgkmGlCEsVSAbchSFxARN+cYKVYKpqQBHhBkHiDw4u2eTPnEEQi\n0yuWZrNZlEolNDU1iWKpgGMIEm9Q1LJtntBoZMUWSym/rlcsZaP1RvucBKxBkHgDwk7bvMiJuwMr\nxVLh2CigBUHiDYZyuYzBwUGlgcVL0yqB6qhWLJVlWVMBIz7fxoUg8QYB27iTzWYRj8fFg+8D6Dk2\nimKpAEGQeANAbVplB07SKcViEdlsFuFwWDTFOIResTSXy6FQKIjO0gaEIPEAQ8+0yqv8tizLyGaz\nyOfziMfjSi4+l8sphE5/J0jGHvSKpWrHRlEsDS4EiQcUtW6bp9x7OBxGW1sbyuWy8jvK89LPMpmM\nQkCieOccWtG6KJYGF4LEAwazjTtuReKUr81ms0gkEmhqagIAZTdA50TkUSgUkEwmKySP+Xx+GKmL\n4p19iPF2wYYg8QDBbPRt5+E0k4Ihy1pJktDW1laRLqn23ur0CpF6uVxWpvMEhdRrnT4yGm9Hn7Uo\nlvoHgsQDgHpomy8UCkin02hqakJra6vp49PioPZpIWKPxWKapE5SOzYd0Mgk47RorVUsLRQKGBgY\nUKJzMd6uPiFI3Oew0zbPs7ApyzIymQyKxSJaW1sRi8U0j+fkgVeTOgAlp06LF5G6JEmQJKnm0a6f\nwebN6XMNhUJivF2dQpC4T+F127wW8ZdKJQwODiIajaK9vd3Th5gm7bCkTmZTxWIRhUJBROocQN+5\nnrlXNpsVxdIaQ5C4D0FSvQMHDiCRSGhGv24fP5fLIZfLoaWlBfF43NPja4FIvVgsKtt+itTz+Twk\nSarQqZuNHIXVgHYNRRRL6weCxH0GNn1gl2CcpFPK5TLS6TQAoL29ve6iLVYBQ2QOYFhO3QqpC+Kp\nDjPF0lAoVJF+EbsjPhAk7hNoNe54+QAQ6ff39yvSQT89gFqkTnl1dQOSHwt39VYDMCqWZrNZSJKE\neDwuiqUcIEjcB1C3zXt9o5N0EABSqZRChH4Gq0MHtEmdFkv6Xb3tOtwGz1QSmzeXJEn5mSiWOof/\nn8YAQ69tnmA3LWLldcViEYODg2hqakKxWKywTQ0S9Ei9VCqhXC5rdpXaXVDrLWquBrfOVa9YKsbb\nWYMg8TpFrdvmtaSD7MMVdLA+3+VyGYlEQlHABLEByUvoBRB6pK7l2CiKpQchSLzOoG7cMYo83DKy\nKpVKSKfTiEQiaGtrczX68cqMyynYKFyvAQlARV5dFO70YbafQS+vzhZLWVJvxM9ckHgdwavoW484\nWelgMpkc5jmu1V3ZqLDSgOQFqbvxvdTbd83m1QnseDuaVBWPxyv06vV0DW5AkHgdwG7bPM8olpUO\nsr4nAuah14DEatXVBBR0gtECz+tm016lUgkAlCY4QtCLpYLEawzy3AZQs61gPp9HJpNBc3OzMlSA\nN/ySNuEJInW1Vp2URul02teyxnqDLMvKZ87+LOjFUkHiNQLbNn/gwAGMGDHCsweYCFWSJGQyGZRK\nJVPSwUYkYp6g/C15u8TjcdsNSF4gCDsFK8VSvzYhCRKvAdTT5p24zznpvOzv70csFvPc90RgCEFv\nQNIDRcxuvG+1z8eoWEo+9vS9/OlPf0JXVxf38+QNf+8jfAjKjzolcLugBYSGMbS0tHh2DiKKH4Ie\n2VB+Nx6PI5FIoKWlRemMLRaLSKfTyGQyyOVySgG82nsKGIOeQUqx0EJZLBZx++231/r0TEFE4h7B\nqHHHi6Yd4ODINFmW0dTU5JlxFS0csiwjGo0KsjEJo65S9QQkim4bmcx5XTt1kvqlM9kfZ+lz1Lpt\nXj0yjY3grMDOYkOqFzpmPp+vSBGI6Nw89Eid7i8id14NSG4tCH5YaNLpNFpaWmp9GqYgSNxFVGub\nJziJxKsRstbINDIgchs07ae5ubmCsNm8L2nThQmSdbCkTt9nLBYTDUgcIEhcoOZt84D+yDS3z4Vt\n2SfVCxG2OprMZDLKtjXIxTwvQIFCvTQgeQ2eEX4mk0EymeTyXm5DkDhnWGmbJ/CW7pkZmWYHZs7T\n6rQfIp5GU2jwhp7iQ4/USWZHDUhekrof0imCxBsUXkffWqTKkqie74kbem82755MJtHU1GTrfYyK\neYLUnUOrGUY9AcmvDTA8FweRTmkwsLI9O8UkHqSq9j2xS6J2QHl3WZa5t+xbJXVRKLUGLa06kTrN\nb81kMg23aAoSbyDQCKpsNotyuYzW1lbb72MVRP61HJnG5t0TiYQnuw8jUqdUARtR1ltUWc/pBJbU\nw+EwSqUSYrGYssvksRNyy6yLJ7LZrCDxoENr2rxdOJGASZKE/v5+S74nPHTpVvPubjoysqSezWaV\nvC7bFavO+9Ya9UriLCjPzuql9XZCagVMrcCzsClIPMBQt83zKAZZJVUqTJXLZbS1tXnamEBNQ+Fw\n2LTfuJe+MGwhz6hBph5Ihxe8iu6tNCDpadX9YJubTqdx+OGHc3s/NyFI3CJYqRZ7czrJa1u9+agF\nmx4SrwicFq90Om15WHKtctV2SEdd+PND1FwrGH2+ehOQ/AARiQcQbs27tPJasq3N5/NK7p1sbN04\nHgtWmuZnv3GrpC5gDVqfr9YEpFwuV9dadVHYDBhq3TYPHByZFg6HleIl5ePdBkXfoVBI6b7kBTfk\njlaPb0Tq5XIZwHDSaQTw2IXQ80IpLvJRpy5TXg1IvHdMorAZEJhtmwfci8TV+mv1yDQ3wUb+LS0t\nKBQKdRcx8Yaa1Gn0Fy2aQc2pew3WfK0eGpDUEJF4AFAPbfOSJGFwcBCA9sg0N90PSbYYCoWUyJ+2\nwo0E+u6JdOq1UOrn3L3ZBiT6bLVkjbyvX+TEfQw7bfOA80hcbUjFmke5NTJNDzSuTV28rHXqox7g\ntFDqJ7gxvMHs4Aa9BiS9CUi8IUjcp9BTnpgFD4KjnKGZkWlOSFXrdVaOLTCEaqSupc7wc9RcCxiR\nOmnV6fMkK16nn68gcZ+BbopcLod0Om1rXJnTZh9Wvuf2yDSt9yXPFTGuzRnMqDPYhik/R+q1ghap\nk5+6uquU/bcVCBL3EegGoNw3YI+QnUbFpVIJxWIRLS0tpifu8PZcsXLsekY9pXy01BnZbBahUEhX\nR12rGowXcGMXQp+vLMtobm7mkuKiPLwf0LAkrtU2TzeC0/e1cpPSDkCWZc98T4j8qxVO9V5n95he\noN7JjwiaIkk9HbVVUvdDF6SbYM/VTopL/RmbXUjHjRunPDuxWAzr16/Hxx9/jIsvvhgffPABxo0b\nh8cffxwjRoxw4aqH0JD7OEpdsMVLHnpYq+eQy+XQ39+vTLWxS+B2iFWWZRw4cACxWAypVMo3UUfQ\nwEbpzc3NSCaTSCQSiEQiKJfLyGazw4Yj19NOww68XhiI1GkAtdFnvHnzZvz1r3+19N4vvfQSNmzY\ngPXr1wMA7rrrLnR1dWHLli0455xzcNddd7l1aQAakMSNps17pb6gCDifz6Otrc2R97ZVkHEVAKRS\nKU+cBwEoenu1CkcoXioRdFJ361yt7BqMPuPXX38d//qv/4oNGzbgwgsvxI9+9CO88cYbVY/N4qmn\nnsKXv/xlAMCXv/xl9PT02Lsok2gYEmc9vwHj6NvN9vlCoYADBw4gEol43r5eKpXQ39+v/L9V9Ynd\nRSOdTiOTyaBUKiGTySCTySCfz3vWcepnmCV1qqv4jdTrAexnfOmll2Ljxo046aSTcMkll6C3txf3\n3HOP4WvPPfdcnHbaaXjggQcAALt378aoUaMAAKNGjcLu3btdPf+GyImbbZvnkVIx6rzUs27l0e1p\ndO5aXZ92G3esnCfrdphKpZQWdrX/N11DIw0dsAutQindW2x/A49CqZ/y7Dw17ZIkoampCZdccgku\nueQSw7999dVXMXr0aOzZswddXV2YNGlSxe+9KFIHmsSttM0TzJCiVZgZmeYWtKbdexGpqRuGKI2i\nLjrlcjnl540yfo3n/cWSRHNzs/L+TguljQxy6TSD0aNHAwAOP/xwXHjhhVi/fj1GjRqFDz/8EEce\neSR27dqFI444ws3TDW46haJvInAr+TJe6RSSkw0MDCCRSKC1tZX7zEuj1xaLRc3UDX0WbpC5LMsY\nHBxENptFKpWq2m1KiysVnVpaWpQuUdLNi/SLeQQ9p64HngujWY14JpPBwMAAgCHif/755zFlyhTM\nmTMHDz30EADgoYcewgUXXMDlvPQQuEjcbts8b7Aj07zOfdPiUSgUuE+7VxcmWViddK93DLU8TK/l\nmkaIiahSH+r0C3AwnVUtUvdTOoUnzE663717Ny688EIAQ/f+ZZddhhkzZuC0007DRRddhAcffFCR\nGLqJQJG4JEmK614ymfS8aYdIjlIJZn1PeCo07EzdcQp1zp3nkGajlmstxzs/kEStQYZT1Uid9NWN\nln5Jp9OmSHz8+PHYuHHjsJ8fcsghWLNmjRunpolAkDgbfdMNafemc0qouVwOkiR55j1C50udp1rG\nVUavc/pwauXc9cDLn7oaqdMx6nXgQL1Bj9Sp25H+pp6HOPBcvP1kQwsEgMTVbfM8ui7toFgsKpPB\nraYSnC4cJOOjeZtepW5Yv5XW1taaPNhqUqdCKe0O6sGb2m3wvt+J1AuFglLgYw2nWCWR1c/UDzsl\nPw2EAHxM4lpt82wuzy6svp7yz/l8HtFo1NOhDYTBwUHE43G0tbW5emw26q9XvxW6B1j/byIgsjcI\nKqm7lb82yqnzmszD61x5IJPJKOMP/QDfkrhV6aBZWCFx9cg06oS0c0zA2o1Ii0e5XEYikTAtiWKP\nabddnyryVqJ+I22+mzsnNlInqaMWAZH1QaPlf+3AKKdeL6TuBGZz4vUC35I4SabUN4cXbdxazTM8\ndgFmwSpfiHy8AD2kzc3NnrXr84bZoh5bKOWNIEj6WFghdbfcAUVO3IfQi5jcTqcYFfLc7rwEMEz5\nQi6EdmD2XNmUUSQS8VWUUg3VSJ2+k2KxyNX7u94XQCfPkNFnyv5Tr5F6NptV2ub9AF+TuBHsrsxG\nRFzLkWlUvOQ1dcfsubNRfyKRUPT3QQVLQFQ0N4rU62Ggg5vFQh7vy36m2WxWSVvxSr/w3tmY1YnX\nC3xL4oA24brly0AEatQ841bnpdHUHTdTOOpFK+gErgardqJhA6yVQ5DmaXqJcDiMaDTKPafOM50i\nCps1hhMNtJoUeXQh2oWbKhAj8jcy62pkaClftCbIUJ0iiL4vbkAr/UKfay1kon4azQYEnMTtvpb8\nJKwSaLW29GqvZc/Z7NQd3pG4UcenV4Vbv0DLIoB1aPSzmZebboPV3pdInVKG1Ugd4LsDF+mUOgCP\n5pn+/n6EQiFLI9N4kVytcu9q50G/EE69wCypk3ZdyBnNQU3qWl26wNBzwyNSF+oUD6FHmk400DSD\njzxAvHrIKIpPp9OW0hh2r5V9He+iqcAQ9Eg9m82iWCwin89zidT90AXJE+ouXUpl8erSFc0+PgUR\naLlcRjQaVbyZrcBJJE55aK89x73M+etJQu2moPwGIvVQKKTssPQcGv2WfjELNxYc2tGQ8Vo1k7Rq\npJ7NZn1F4oEspVslU9Z322rno1NQ7r1cLiMWi6GlpcUz58FisVjhdV7t4RI5cT5g29mpkzSZTFbU\nXiilRpbC5XLZ08/eT9G9+ly1PleSjObz+aqfa6FQsCwiWL16NSZNmoSJEyfi7rvv5nJdZuHrSNxp\nK7eWCsOJjM4qybGNQyS5svrg2CFWytOacR7kAdJbk7+MkOJpQ50mcBpRCgzB7Oe6Y8cO7NmzR8nB\nm0W5XMY3v/lNrFmzBmPGjMGnPvUpzJkzByeccIJbl1QBX5O4HswQG/me0NQb+tJ4FEXNoFgsYnBw\nEE1NTWhtbUU6nfYk0qJpObSl94LAKd8ejUaHNc3Q3wgMh1nyYY3J6p3U6+Ec9T7X9957D3fccQc2\nb96MGTNmYPr06Zg+fTo+/elPG77f+vXrMWHCBIwbNw4AcMkll2DVqlWekXjDhUPUQj4wMIDm5mbN\n9IUTeaKZ42cyGQwODqK1tdX28Ar2mGZ3HdlsFoODg0gmk4hGo65H/aVSCQcOHAAApFKpipFhzc3N\nCIfDyq5AjGCrDqM0AS2WvNIv9UC2ZuH0XOlzPf/88/Hyyy/jlFNOwdVXX419+/bhvvvuq/r6vr4+\njB07Vvn/jo4O9PX12T4fq2ioSNzMyDQ3CZXVYKuli27mm7U059QZ5xZIrkgqH9LeUy6YLdyVSiXE\n4/FA6Ku9BJEPoampqa7dBP2yOMdiMcyePRuzZ8829fe1vjd9TeJWcuJmR6a5QaaUE66mwXYqFdQC\nm7bxwnnQSK5o9JlrSfFI7ilyweZQzU0QqI+p97yPyXPXYOcZHDNmDLZv3678//bt29HR0cHlfMzA\n1ySuB1a2JkkSMpmMaQ00b/8TOn65XDY8vhs3NjkP6mnOeS9WtNOIRCKaHi9moUXqosBnHVZtd0Wx\neUiZYtVm4rTTTkNvby+2bduGo446Co899hgeeeQRl85wOAJJ4gQq4tkZmWZ3dWeJkT2+m1N31GRM\naSOjjlMevjIs2PQJ7+lGeoWoUqk0bLCDX7bstYDaoZFdHNWk7kZO3K3vhue52hkIEY1G8bOf/Qzn\nnXceyuUyrrzySs+KmoDPSdzoiysWiygUCpaNo5zmxAF7xlVOOi9ZeN2y77Tb0851q0mdjTBLpZJy\nXvUYYdK18vxe7N43oVBIk9RLpRLK5TKAoZmlPD/Het8x2W25P//883H++ee7cEbV4WsS1wI7S9GK\n7wkLIha7NxyNL7N6fKdqAtK8u502IhilT7wEG2FS+3UkEhlmF8uOYAsanF6TmtRJ4RIOh+v+c5Rl\nmdtC7TcHQyBAJE7dWNlsFvF4HKVSyfMIjIpHJKWzmge2A8r/9/f3azoP8gRL/PVqlkXnEYvFlAgz\nKM6CXiMcDmva7tr9HP0gW6SRi35CIEhcPTKNbja7sBqlsikFALZJzU5kXCwWUS6XPTXsIpMuP5hl\n6SlfBKlbQ6N8jn5zMAR8TuKhUEjJAVPnI9u95uR9zb5ebSC1f/9+28e0AnbhCIfDlg277BhP0cJI\nqSo/PqRGyhctOaMolGrDDqm7Bd6FTUHiHqJUKim2kawsyAujJrZ4SVGwk2PbXThaWlqQyWQsH88q\nKH0CAC0tLb4kcC2YaW2nYKFe5Yz1kKYwInVaHOkcS6VS3UbqIifuMfTsU52SeLXXG03dcXMBYfP+\ntHC43aauLpj29/e7dqx6gJrUC4UCSqUSJEmqq4YZt8GjlZ0+o3g8rjS8sQ1cNOjB6eLIcxETJO4x\n9B4gN0ncLQmfmYWDzfs7HUtl5jOqF/VJrcGmq0TDjD0QqUuShEQiUbcNXOl0GqNGjfL8uE7gaxKv\nBt7tuGaGB7sRibNNQ2Z8v3mgXtUntQB77VoNM6VSyfSg5HpIfdQK7LWbSWOZJXURifscWqTJQzPL\nvicbkbol4dO6DjNNQ7wXDat680YG7QStyPAEtMGT1J1AFDbrCE4adliFC5uDNtNOzotU2by73aYl\nI2idp9Gke/XrvEoj+QlminvsoGSeRORGi3wtU0NGXblqh0anajQW2WxWkHi9wCk5yLKMwcFBy9Nv\neKhTrDgP8iJByvWL9Ak/aBX3KO3CM7r0S4rGyXkamXkBQ+SrTmPZOZYd75Raw/ck7kYkJ0kSCoVC\nhfbcC1Aqw8h50K1jivSJ+yBSD4VCSCaTFSkDsoogEqKhHX4g51qASD0ajaJUKiGRSFTsegB7KiKR\nE68j2CF3sm8tFouIxWK2VmS7iwprQGQnfWI1yrHbru/k+iidIIhpCGzKgAZnEKlns1kAtVO+uBXd\nu/Xd02dkxqHR6LP026R7IMDj2aySTblcRn9/P8rlsiezJ1kUCgXFNKu1tdXSw2r3oaB2fdptuEkQ\nlN/P5XIVI8Ro2o/AEChdQCPsEokEIpGIMr4unU4jl8u5PpXJLXh1zqyRl9Znmc1mKz5LtnPZaiS+\nePFidHR0oLOzE52dnXj22WeV3y1ZsgQTJ07EpEmT8Pzzz3O9RhYNH4lTEwIrp8vn87a9V6wsHmrZ\n4sDAgOtRKh2zUCjYate3CuoujcViioqDjTbZOoDQWR8Ebf9ZOSNF6pRXJ+UL7XAaEWZ2DGY+y40b\nN+Kxxx5T7Cza29tNHT8UCuG6667DddddV/HzTZs24bHHHsOmTZvQ19eHc889F1u2bHHle/L9N++E\n9KiBJpfLIZVKKc07TvLsZl9Lkb8sy2hra3OUi7Z6TEmSXM/1kzxyYGAAyWRSGQitjpCoiEoWCkEf\nmOzkvqICaSKRQEtLi/LZUTdpvX929VKA1fosjz76aBx33HHYunUrJk+ejJNOOgmLFi0yHQiqsWrV\nKsydOxexWAzjxo3DhAkTsH79ejcux/8krodqxFYqldDf349QKOSYRK2AZIv9/f1oampCS0tLxers\n1sNXKBTQ39+PeDzuiMDNLBgUzeTzebS1tekOxSBSD4VCw4iJGpyImJxOb68n8CAylojo3/Q5k9KI\n0lZ2Prt6Idxq4HGeoVAIRx99NBYtWoRRo0Zhz549WL58OaZMmWLqvZcuXYqTTz4ZV155pWKAt3Pn\nzoo5mx0dHejr63N0nnpouHSK2w00FBlpgchNa96mU58KvfOlYm2hUKg4plv67HK5jIGBAVsj6bR0\n1vXYml2PqJdmGT+DnodoNIpp06Zh2rRpAICuri58+OGHw/7+jjvuwIIFC/C9730PAPDd734X3/72\nt/Hggw9qvr9bn7fvSVzvg9FrZkmn0wCMG2jcIDg2N6xHbrwbacw07/AEO2eTXB2rweiz1iMmmq0J\nCN8SPVRrlgG8N/LyS3SvPscXXnjB1Ovmz5+P2bNnAwDGjBmD7du3K7/bsWMHxowZw+8kGTTMXU/p\nhFgshlQq5cn0G6AyN0wpA943shYRqtMnvK5Xzx6Atu+pVEqXwHlse6PRKJqbm9HS0qKpOCDHwaCk\nXniBrUVofXaZTKZCreEXwuV9nlbfa9euXcp/r1y5ElOmTAEAzJkzB48++igKhQK2bt2K3t5eJbLn\nDd9H4npgW+etNrPwKmzqOQ+6cVwCmz7xwqjL62ifhdqMipq06HMPwqQZM7BDZNWMvIChQKDe5mm6\niXK5bPk6b7zxRmzcuBGhUAjjx4/HsmXLAACTJ0/GRRddhMmTJyMajeL+++8X6RSrIMXDgQMHdH3H\njV7rlOCoMOe0kGgFlC6iYq3bhOqWLa8dsPl0mg0pSVKFf7XICWuDUimskRfdRzxHr7kR3fN8T7Kd\nsIIVK1bo/u7mm2/GzTff7PS0qsL3JK71BVJUUSwWFcWDVTghcYpO9QqnenDiu0IPmxeEWgt7AKsw\nWyRlI01B6kOgzyIWiymGXVpGXjwGOtQT/NhyDwSAxNWgrXS5XFbama3C7g0pSRKy2SwkScKIESM8\nSS2w5GSFUJ3sNrLZLEKhkCvuim7BqNAnhjsMBxvhsgsiGXnVi/KFZyQuSLwOwA5NjsfjysNpFXYI\njpwH6Sa3QwJWj8va1SaTSdcj4mKxiFKpZHs4RT0Vy6rlhCl9wLtAWk+fgV0YyRmNjLzq/dpJWeU3\n+J7E6eZQT93h4S9h5qajQiKlFii14TbYfDRgf/dg9hrJVz0SiQTOqlYrJ8y2ZdP9Va/pg1qTI0vq\nRkZerAka7+PzgB8HQgABIHFqJVerI5wqTMwem5QZlFqw67lCxzXTDckuGrFYzFZHntlrlOVKX3V6\nKIMMdT5dkiREo1HN9EEQLWOdBj9auxxaEHO5XMXn6zR1JdIpASBxMnFST91xqjCptv3TU2a41QkJ\nuD/tRw1YKIxcAAAgAElEQVS2QYlNn/BeHOtd062VPiiVSnVhGesmeNkDkL1CPp+v8FFXp65qLQXN\nZDK+s6EFAkDioVDIVvHSzPvqte27NUTBaAGgnLtXcj473ZdGMOqs9RtIuaEVaZoZltzIIELXGmFn\nR85ot/6kBT9O9QECQuJ6P+cd4ZkZmMz7uFrpE17H1NptuLlI+RHVtutspKm2OVWTUjQarftdh1sw\nslbQk4J6re8XkXgNoUVivNIpgLbnuJlioNWbTX3OXqdP1Dl+rfN3M13EC7U8PzP6dGAoHceLlHgX\nNt0slFZ7XyPli5ackeoVPJDJZHDkkUdyeS8vEQgSN4LdG5Jt29dzHtR7HQ9YSZ84IVZ6XVAGJdfb\neatJqVgsKv4kwsSrOvRInZr5KMAiWaOTIrOQGNYZeDzM1MZu1VbVriY2FBqysfWqG5KVZ1bzWuGB\nWkvh6gXsRCW9pqOgeZbw+u7VpJ5OpxUjL6dNW0JiWIewS6aU18xms9wKe2aPWywWKySLZmA3Emc9\nMtz2WqFIn80Pi6hT28TLbpGvEcEWkfWKzGYXRb9KDAPxFPEsblIeWpZlNDc3227bt9PxSTedm1a5\n7PFoC2rleFavjSJ9tp4ADKlfaDQegEBN7rELIhz1CDaAz7Qes/DrjoktMNPn19zcjHA4PGxSlNYI\nOzMk/sQTT+DEE09EJBLBG2+8UfE7vcHIr7/+OqZMmYKJEyfimmuu4XfB/z8aIhI3C9Z5EIDjJgSz\nf0eThuLxuOvdgOzxaFvv1vFoQaRIv1QqAUBF0Y/01kTmIj98EGaKpGwEWs/k69a5Gb2v1uentdPJ\nZrPYtGmTKXXKlClTsHLlSlx11VUVP9cajNzb24tQKIQFCxbgwQcfxLRp0zBr1iysXr0aM2fO5PMB\nIOAkDpgjU5bYyHkwnU673vGpVp9QhGXneHoj4dTHY/3N6dhugBqFKKrUU7pEo1Hk83nFArQem0Dq\nBep8MJtPF4tgdegtiu+99x5uueUWbN68GR999BHOO+88nH322Tj11FOHfYaTJk3SfG+twcjr1q3D\nMcccg4GBAWUgxLx589DT08OVxAPxLTtpJJEkCQMDAygWi2hvb1eicKdt+9VeWywWFa9zL9InNBia\n7AmIFO206xu9hhZE9ZR7o/ejf6u3wqSS8TKV4CfQ5wUAiUQCiUQC4XAYpVJJSWHppQ6qwS8LppMI\nnxbFT37yk/if//kfnHrqqfj617+Ovr4+LFy4UNk5moHeYGT1z8eMGcN9YHKgI/FqhFOLoQZs1K9W\ngzht2tED7+5LPbByTDOTjIzARk1q+1MRdQ4HSeu0TLzY1IEZEy83Fsh6TvUQZFnGl770JTzwwAPI\n5XI49dRTK35/5513KjM06wkNSeLUBWkkq3MjEjfTvMO725O6L52SajWou1l5NwqxqQS1Ux7b6k65\n4UaBnU7IoJh4ufE9h0Ih04ORWWgNRu7o6MCYMWOwY8eOip/zHpgc6PBFizTI9ZCiRbdnUBLMpE+c\nbAv1rlOWZbS3t2sSOK9rpKHMTU1NrgyC1oJ68C/tpIioSPteb6kXtyJSs52QTU1NSCaTaGlpQTQa\nVaS07KBkv0XiPN7XrkSXoDcY+cgjj0RbWxvWrVsHWZbx8MMP44ILLnB8viwCEYmb/RK96kpUt+yr\ni6ZG4EWqbl0nW0Q1Sg3pwY2HmY06Q6GQMrhCbxRbo6deAH0TLyosA0NpuHouKrsViRth5cqVuPrq\nq7F37150d3ejs7MTzz77rOFg5Pvvvx9XXHEFstksZs2axbWoCQAhuZ7CFJtgbzwWmUwGoVAIzc3N\nFUMjzHgt5PN55e+tgrrIWJVLa2trVfIoFovIZrNoa2uzdDx6XSqVqkgTVbvOgYEBZQqSWeRyOZTL\nZSQSCUvXRucpSdKwB4XmkfIgimKxiHK5rHREApUqDlL/mG0AoVSNlc/ICNQizqs2QXUInsZNtIOh\nTshyuTysScvqd6X1vTgF7SJ4NOjIsoxZs2bhlVde4XBm3iIQkbgeaHvd39+PSCTi6cR7Oq6RxE4L\nTjxQBgYGLHVf2r1GSZLQ39+PWCxWVX1SDzDbFWmXoIIGrSKp05ma9V7Y9HMsGwgS17o56MYrFApK\nGsMr9QntDFpbWy1Pu7cDaphJJBKuq2yI/NhuQj/BasGv3snHC+iZULEzNVn/dK/SVTy/m3w+z223\n5TUCQeJq0BazWCwiFot51jpPzTTlctlymoJgtaWd7b6khhk3jscaZVGBLAjQIih2ao8sy0qkSSqO\neoIbi0y19zRSCvnVxMuv5ldAAEmcHSmWSCQsCfZZOGnZtyvls3Kz04IhyzJaWlpszb602lkaCoUc\nfaZG51EvEa+64JfP5xViF12k2jCTrqK/4/k983wvv9rQAgEicXrgWOdBKiK5fVy1+oSKf1ZhduFg\nF6pkMglJkly7TrWvOUVajQDKDYfDYaXhSJIklEolz6fO+AV6fiX5fF6xdq7Hz8yvU32AgJC4LFdO\nZKcbyO3WebUXiZvNNID2QuUERtfIHouVD/LWz/sJevl0GlAABKOLlGeEq5Z/kvRTT/5ppelIROJD\nCASJA0A0GuVa1KtGVqzBEzsJ3sxr7RzTqKWdN7HybJ8PMvQMqYxSL/WSNvIa6tqClomX06EOTiBy\n4jWGXlHPjUjcavMOD5hpaffDsYJOXtVyw2QbyzM37PdFQf2ZUf3B6xqEIPEaQ++L5RGhsg+J2fSJ\n0+Oyx3S7+5I9z6DM2awH6KVeqJEmnU7XRJZXz7Bq4qXVOGYXfp3qAwSExPXgNBJnwRYT1ekTXsdl\n35M16ao2oJnHouHlsfy0OPA6X0ojlMvliv9m0wgsqdfyM6LdAu/3tHpNZjT9RPxOi6SCxOsARukP\nJ+9JU8mpvdft9Al1mZJlgNuzL6nTE4CrxyqVSspx1O559Q43ztGMLM+MbWwjQZ1Pp0YjekYBZ0OS\nR48e7cp5u43AkLgW6Ma3G01Rg4tV9YmTaJVI1Y7HudXrJAVKc3OzJWsAqyA/c/LNUBf/KMKyokwI\nEqx2kfrxc3LL+Izkn0BlkZS1Jzazu/GzOiXQiTgnNw01tFA07IV8kBp2ksmkJVK1c535fB65XA7R\naNSS/4mVBYpULmTqFYvFlIeOpvfQA8hO7yGjrEYFkQ/ZxiaTSV3bWJ55YYJfUl7q89SzJ1YPSday\nJ3YyJHnbtm1IJBLo7OxEZ2cnFi5cqPzO7SHJQIAicT1ysSrrYvXRdgcJW43E2e5LeoCtwux10u6i\nWCyiubnZNc23ekgyjQ1TnzOZTlEhtV7zxLWEkYKDmsrq3TbWa5jd3YRCIbzzzjum1Cl6Q5IBYMKE\nCdiwYcOwn7s9JBkIEInrwQqh8hokbOWY6oHCNMjBDZB8MBwOK4OZKZfIE3RNTU1NlhZBMxK9euv0\nswqnRUO1gqNYLCrfYT13kdbC44WFOp9OpL5z50589atfxUcffYQtW7bgS1/6Es4991yMHz9+2Hvo\nDUnWw65du1wfkgwEPJ1iBbwGCZsF6c3NDhR2imKxqFjjVlPXOEE+n1euyUmenSIpNvVC5J7L5ZBO\npytSCo0KInV2Yk8sFoMkScjlcsNSLwJDIFI/+uijsWHDBnR1deHss8/G2rVr8elPfxp79uyx9H5b\nt25FZ2cnpk+frniS9/X1uT4kGRCRuGEruxudl3RM3t2XZpqTzE7fsXscN+d5spEU65ynbgqhc2lU\n2OkiVcMvOXGeKBQKmDdvHubNm4dDDz0UZ599dsXvjYYkH3XUUdi+fTtGjhyJN954AxdccAHefvtt\nL04bQIBI3E7DjyRJyGQyrrWXaz0MXnZfsp4yWoOZee002Py3lcEbTmCUeqEisZ/VHGZRjXD1Piev\nUy+1TqdUAxU27QxJjsfjSnpr6tSpOO6449Db2+vJkGSgAdIpekRF6RMj9QmPph0W+Xy+6kBhXpF4\nuVzGgQMHlPSQW/pvGgBtpgnKLbCpl3g8rpCWV0OA/QL2c2JTL+oUFZF9I4F24mbB3kd79+5VCszv\nv/8+ent7ceyxx2L06NGuD0kGAhSJm4UVJ0Be3YlsqqFaRyQPkFzPjNOh1etjP5NcLmepCcoLgqeo\nm1IKRn4cjT6OrVqKigaAOFW9uFlX4vXdmSk46w1JXrt2LW699VZFQrts2TKMGDECgPtDkoGADEoG\n9IclU6t8U1NTRS66tbW1avqEvI/tDHfdt28f2tvblWOGQiG0tLRUvVHY87WC/v5+NDc3K17XZgYl\n2xnMLEkS9u/fj6amJmVRMpuGou9I/eBlMhk0NTVxSWeRLazelCNWalYul4dZoaq/H1LFOK0luPV+\nbgwgTqfTFY1Z7LBkO12k9Azw9usmnx8eu8zzzz8fL7/8si8X9MBH4hQ5st4nZnPRTiLxUCiEQqGA\nbDZrq/vSKigP7Hb6hLbZlGe38iCT+RPlaWth+qRX+NPTpjcqqBuyms5ab/HzAjydIP0cywaexIGD\nEafVQQp2SZxuCvVABbeOSU0f8XhcN9dudK5mQVN+AFjKf1OOlaI3ljjp+EQKXqOaNp3On/7OKWnw\nLvB5pSQxs/j5ba6mGn48ZyBAJK4nlaJillfDDdjuSx6SPiOw+X0qWFm5Ea38LeW/k8mkkh4ye45E\n1mx6hwiTVBJkYkQRYK2idHWXH1kh1HKqu9cwszCYMfAiUgf4EyTvyNmvBA4EiMTVoPRJKDQ0EsoO\ngVPUaPWY8XhcMXSyc0wzN6haa57JZCwfywzU+u9wOIx0Om3qtZRzJmJWg/LXVCsgMqcID4AS/daK\n1ImMSO1iVXPdCDDT4g5AKZTylHzyeB9K8fkVgSNxtfqEbig7sEKodExSavCeCM9CS2tuJw1T7TVa\n+m+znwcRstYDSxEuFZjZaej0e5YIACgFUSKKWjx09aK5rneoUy+06JHkE6ivWaSk5PIrAkXiWp2Q\n+Xze1aKFXvelW92eXk3fUU+51yJivRQWEbjWw0kNVuFwWDevTsTPEiZF9ZSaod/XMkonEorH48o5\nag1N9otvOuCOHJC+TzJc05N8WtnRuNHo41cEhsSpuSUajQ5TnzhRmBi9tlwuY2BgwJLixS6qtc/z\n6r7U2lWoj2P0WiJZvfRJJpNBPB63tABRZEfHYEmdiB2AkpKpBcxq03krIdwqbLp1LxOha41gq9WO\nRpB4nSAcDiOZTFoinWowIkYadKCneHESiauJiC2WarXP24X6HCn/XSqVLBeCibQA7VRHoVBALpdD\nIpFwVOxlo3Q6LpEAG6mXSqWaFkjVRMXq0vP5PEqlUk3leV7CaKHR29GUy2VFHaSVeuG5eIl0Sp2A\nnfDBgleESvC6+5LVt7vpdChJEgYGBhSduVX5oFH+O5fLoVQqoaWlxRVjLHq4KZJTe5MDtS+QUpQu\nSZJyzwjf9OHQ6yKlIintaHg+136edA8EiMSNVnpe6RTWj7taQw2PnHi1aJ/H8YDq+W+jY5nJf4dC\nIVd9VfQKpWxag3Y3pBqqVZQOHCQqMV+zOvSKyaVSSfnenaZeRDqlzsGLxKmgaIforIKKpV5E+7I8\n5HRodQg0PVB6+W8a9hyNRl3tVjVaKIzSGmajdN6FPnUawEieVwttuhs5dl7vyX5WtPOKxWKOu0gz\nmQx3SwAvESgS5506AQ6mT/L5vOvNO3Q8ypdaaZ+3eu10XQBsNUIZ5ZypQ7a5udnSwmAV5XIZ6XTa\ndKFUq/ioVyCth9SLkW86/aO3iDYCeHWR+j0nHvhv32lETKTa3t7uevs8kR9FlW76n7Bj4Mweh0gv\nEokoQ43ZZg7Kf5NG300Cp+G3iUTC9hxU2qY3NTWhqalJcTVk1RK19tWgc6TpRrRY0c6QCF5r+G+Q\noRXds4OSk8kkmpubEQ6Hqw5KNjPp/vrrr8cJJ5yAk08+Gf/8z/+MAwcOKL9bsmQJJk6ciEmTJuH5\n559Xfu7FkGRAkLguisUiBgYGAACpVMrVaIfIj/LSdnJ7Zq+T/L9pTJuVc6SItaWlBalUStnKDg4O\nYmBgAAMDA0oHplspIHahID9sHqCoLh6PKzsIUgqRfQMZeNVSxqj2A6fvXT2KzUngUq/pFCtgPyta\nACmoyOfzShCyYsUKfPTRR1Vz4jNmzMDbb7+NN998E5/4xCewZMkSAMCmTZvw2GOPYdOmTVi9ejUW\nLlyofPY0JLm3txe9vb1YvXq1K9caqHSKEczeSOqOT7Mt5mpoSQX1jsc2C5GHCG9U039Xe61a/01q\nIOpOpbx0KBTC4OCgss3l6dlNhSxJklzdqbCkTYoaVsYI1E+BlPUo0dOmB9E33erCoJV6yWazePXV\nV/Hf//3fkCQJL7zwArq6utDd3T0swOnq6lL++/TTT8eTTz4JAFi1ahXmzp2LWCyGcePGYcKECVi3\nbh2OOeYYT4YkAwEjca1o1MoXrdV96YTEq0VDWu3zbmzf9bpK2d/rfU7V9N9E4E1NTUr0Sq8pFovI\n5/MAgFgspjxEdsiE7fS06tRoBawkkl0o2OIj7UjqzedFq4mGbXmvtXVsPYHuo2XLluHWW2/FKaec\ngv379+PXv/41Tj/9dMNd6vLlyzF37lwAwM6dO3HGGWcov+vo6EBfXx9isZgnQ5KBgJG4HohYjB58\nPb9xM6+1A97t83qLRjX9txF5V9N/FwoF5PN5JJPJivRJKDRkOsbKwohMMpmMYihlNkK02+lpFWyx\n10gSyUbftS6Q6t2batVLNd90t7uN6zlFk81mccIJJ+Dmm2/Ghx9+OGwgMjsk+Y477kA8Hsell17K\n5dg80FAkrgcjPTYPvTcLSgkUCgVN+SBPhY1V/Td7jkb6bz1dthZYMqHpSrTlp10Oaaa1onRenZ7V\nQF2xViWRWh2kLKEDxkoer2DGOtbtxrV6hdkhyb/61a/wzDPP4MUXX1R+NmbMGGzfvl35/x07dqCj\no8OzIclAwAqbVht+KM2QzWaRSqUsj0SzCoqKqa1d76FxumiwhdKWlhYkEgnTnw1LQnoNPES+dvLS\nFKUnEgmkUikl51woFNDf34/BwUElnZHNZpHL5bgWMLXAWggbfVZmwBZIKcXEuvnRrqReCqRs0Y9q\nAZIkKQVSHufoViTOC2Z04qtXr8YPfvADrFq1qmIU3pw5c/Doo4+iUChg69at6O3txbRp03DkkUd6\nMiQZaJBIHBj+pbPdl0ZjxnhF4maJwunNXi3/Xe21bhhY6cFslM4WEXnDzUifjdLZSJ8KpUD9FEip\nXkELaiQSGdbqXm+2ALzOw0zb/be+9S0UCgWlwHnmmWfi/vvvx+TJk3HRRRdh8uTJiEajuP/++5Xz\n8mJIMhCgQcnAwTFlavT391c8pFby0erXWjmXdDqN9vZ2JV1jRhVCg4gPOeQQS8crFotKPjcSiZgu\n/u3fvx+pVEo5tlb+G/A+rUHETqReKpWUwhyPEWCk1mEVKG6BmpLY4i9QWSBlI14rufRsNqukonhA\nPXhZ3epux2WQ93Bo3u85e/ZsPPfcc67vxN1CoCLxatE0m4/2qvuS2ufNRsV2iYkWMDvNL0aRrtsG\nViy0lC5slE453Gw2q7SjszJGs/BKqggcbODSWvz0CqQUiNC/jQZhuK3BZndLdn3T672wWSqVXOcC\nNxEoEtcDabapecfNdnYC6y1iZSo8+3orunYqTiUSCcvHyOVyCmmyx/TKwAqoHulr6XyJSLLZrFK0\nqxaleyVVBIYK5lrqHS2wqRd2EIaa1GspY6TzNOOb7idtei2akXiiIUichP1NTU2WC1d2SJxUIaFQ\nyDJR2NW1t7S0KKOvzL6Wts2U+yTDKnoAaavupoGV3UifbTZio0OK0tUyRsC61wqPa7Ib6WuRpZaM\nkYIFL4aAa52jGW26Ol3EA7yINwjZ5ECTOPswNTU1uW5yQ8fL5XJIJpNKFGv3vYxeq24UsjJHlB1g\nzJotUVRF/hJ0fDLkcmNLnMlkIMuyMizZDtjraG5uVoikVCohl8spkWupVEJzc7OruU/2mnjtXrRk\njJIkVXi7FItFLgVSJ+So1qaz91OhUECxWDRlSFUL1NO5WEWgSFydCkin08qQACcEYWa1luUhS1c2\nfeKk29MIWvpvM+dZrYEHOEjwyWRSIT51lM5jq2xXl20GbJROk3QKhQLC4bCyqJM2nWdagk3VuDnA\nIxQKKfUBWvzUHaS0G6l16iUWi6FYLCrpOl6+6TxTIH4mcCBgJE5guy9bW1sVX2Y7MEOOWtN3nG7T\n9HTt5H9itTBrpoGHjSDZdnM2SqdWejb6tRqlaxUw3QB9XqVSSTExY6N0p9fBwstUjZaqxg+DMOrJ\nN50g0il1CK3uSypsenU8FnYiBr0Kv5H+22jhqKb/pgEOkUhEN4KkqIrt+CNCV0fpRvlZr6SKei30\n6ly63etgQYuS2/7pZnLtWnlqq4MwvFCSqFN5emPY3Nam5/N530oLCYEicSps8ZyGo0eOZtrneR1T\nyyjLLCgqA8wbWJk5P63cp1GU7qVU0Wyqxs51qEGLkhkFihOY9XVRw2yBlEi9VkoNPVsAmpuq1qbz\nOk+/z9cEAkbisVhMU87nJL2hFcVLkqSoT4zkijweCrP+J+prrJb/lmV9AyurMBOl03m4LVVkFyWr\nEZbWdejVBEKhocEMXjQLsbl2J7YAWgVStc8LyRj10m5ewIw2HeBTcPf7VB8gYCQOaEfAPHLUBJoS\nYtZnw27LPvlXuJX/NmtgZefc2eiW9RqnxY9HDloLPFM17HVoWQLQ4uykaG4GlOqiCUQ8Py+K0gkk\nCySrA14FUqeBjHo3QZJhHtp0v8/XBAJI4lpwGonTNtTqUAUn8kIq9lj1PyHy1st/e9nAo84VG+Wg\nnShFvGihpyg9EokoroTRaFSRMVq11zUDL3PttCtrbW1VZnfW8yAMAEgkErradLO+6WZGs9U7AkXi\nbhASRZB2TKXsLB4UAdGgZCu5T2DowdeLmrz05dZK1aijdB5KES9b6CkqVufa2SidFD7s4mTnczZq\n1+cJvWKp1ndlZxCGG+oPNrLXq2uYHZYchJx4oKxo9eAkEieiAexNhbeCYrGI/v5+hMNhSyRLOUOa\nRKQ1Z7FQKCCTydgeLGwWRArkT2OUayelSDKZRCqVUpQx+Xwe/f39SKfTFYOY1WBtcZ00C5kBpVG0\n0mgUpavtden7ZO11zdyH7HhAtwncbFqNdh6sxS5F7KT9JvMsre/Lq2IpfRdGw5JpViopvqqRuN6Q\n5G3btiGRSKCzsxOdnZ1YuHCh8hqvhiQDAYvEAf0RbXZIvFAoKL4cdnw2zB5Xrf+mkWZmwOa/W1tb\nlQIQkTYbSbmtoHCSqjEbpVNKgwjc7V0FYD0q1sulVzPuovugWCy6vqtg1S52rCHMFEi1Cuq8zt2u\nioqVMX7hC19Ae3s7DjvsMPT19ekObZgxYwbuvvtuhMNh3HTTTViyZAnuuusuAMCECROwYcOGYa+h\nIcnTpk3DrFmzsHr1atesaEUkrgGKUMiu1q2bkY5FEWdbW5vlAqZ6gAORR0tLC1pbWxWSB4byf9ls\n1tE0dD1Qs4uR1twK1FE6fQ+5XE6JbikydLuxhuogdqJidZROOedisYiBgQElSicrYZJgukngtADy\n6iylBVYdpQNQdrFGUbpXoPMkC44HH3wQxx9/PDZv3oxPfvKTOOmkk7B+/fphr+vq6lK+j9NPP71i\nYo8Wdu3apTkk2S00BIkD5nNzpKAoFotob293LL0zOm65XEZ/fz+AylSNmUWHIrxqDTzRaBSpVErZ\n5ofDYdPpCrOgraodgzEzYB8+IlKSDw4ODmJgYEBRK/BanNRpIV5pNEqVtbS0oK2tDc3NzUpUTPUM\nttuSN2ixdcPuADhYeGSLwJTSYEfCuXmNZnH00Udj7NixuPbaa/GPf/wDy5cvx3HHHWf4muXLl2PW\nrFnK/2/duhWdnZ2YPn06XnnlFQBAX1+fZ0OSgQZKpwDVt2Fa03dImcLrXAg85l/q7RBo+69WNWht\n89WNLfTwmS0q8tKamzkW5ZWphZ5+TimkXC6nFIXVDoZWj2WnscYqiPBKpZLSRcpeC0XxvAyj2OEU\nbncp0j2ovi/sFkhZ8GxIol3WzJkz8eGHHw77vdGQ5KOOOgrbt2/HyJEj8cYbb+CCCy7A22+/zeW8\nrCBwJK4FM1+4Xvs8T405UOl0qKf/1jumGf03Se2qkapeg45ZInRTa651LD1SZRUtQGUunYjQyuLk\npjGXGloTf7QaXHgsTqSccVvtAhh3sfIYhMETToYk08ILAFOnTsVxxx2H3t5eT4ckAw1C4oB+9yQR\nRLFY1G3X5xWJV/M/MUI1/xO6DlmWLZOqUVFRKyKkY3mhNbdKqno+42aIUG+MmhuopgHnuTh5ZQ0A\nHByEYUavzxZIrQzC4BmJE4kbgYYkr127tmJI8t69ezFy5EhEIhG8//776O3txbHHHosRI0YoQ5Kn\nTZuGhx9+GFdffTWX89VCw5A4MJyMzbTP87pZrPifaJG/EYGzcyl5FhW1Bi5QHtOLSNVJCz1gjgiJ\n0KlDttaRqh7MLE5aTVNWSNUJeChr1J2Zej4v1MzGA06GJK9duxa33nqr8pkvW7YMI0aMAODdkGQg\ngCSuRyrqn1vxJAHsuxHKsqwcy8xgZjXYAQ68DKysgH2wIpGI0gIuy7KyKLHkwev4brgd6hEh7WDY\nTkU3tvG8OkuNFie2vkF1Dy/SXbSY8FLW6MkY6Z9QKMRlEIaZSLy3t1fz51/84hfxxS9+UfN3p556\nKt566y1b52QVgSNxPbBFymo5aS3Y3cJRntnKsahLVC0fVJ+Pl0VFlnzoWGyjB9upSNGtnc/LixZ6\n4GAKiYiAWrjdKirqdUbygNbixO6astkst2EearAds27OLKXvi7xSSNXjdBCG8E7xEYgYKWKw2j5v\nFRSBS5Jkq9OTbk6t13ldVNRra1dHhFqNRlb8RLxsoWdrCGz0qJdCouuwU1T0Su1CIKIjcmJVSAAq\nrrOAqRoAACAASURBVMXJuThpGLJzLNK2q2WsFJzZGYRhJhKvdwSOxI1uJEoFWPXktqpQofw3AKXw\nZBYU8bN6XpY8vDSwsjoZ3sj1DzAmDy+n0Fcbo8YuTuqZndTBazZK52Uja/W62GMZ2evaNe6qh+si\nUOqFCsRqCaORjJFkkH5G4EhcC4VCQRmWbGfVtULibP6b7ZY0A0qfRCIRpFIp5YEjzS2RuNsT6Olc\nnLS1sxJGlgi13AspyvKihd7OdRkVeo3a6N20kVWDittGx2JVSHoLrZl0mJlj8b4uK4V0ir7NDMLQ\nEwv4CYEmcdqeFwqFim2/W8dS59pparyZ12o18LDkkc/nkcvlFPtTmunphi83bwc9PfKgegEA178f\ngI+1q16Uzi605FxIhVk3bWQB+008egstmw5TF629bBjisVjoFUglScKePXvwf//3f0rg5FcEjsTp\niyb5IDDU0k5Rk933NHqtnv7bTATPFmf08t9sQYxVUOhFtvXsyw0cJEJqMKIiFa+OSy24pZXWitJp\nODNw0DuE57Ww4OU5bhSls+odaqN3m8DdWizo3vvwww8xb948PProo74mcCCAJA5ot8876bw0eq3T\n+ZdsVV0Nvfy31gNHfhQkMbOqrPC6qKjVQk/XbNRoZDUa82phAqBEqqzUjo3SKbLlpXjRa23nATZK\nBw46ekYiEcWwi+e1sCACd2sYxvbt2zFv3jzcd999OOOMM7i/v9cIHIkXCgUMDAyYnr7jBNX030bk\nT5EOoN1arDeAQAtU1LGasyWwzUJeqAyMlBp28896x/JyYaJmF3axUF8LEa/Va1HDqyYe4KBMluSl\nvK+FhdvTjN5//3189atfxbJly9DZ2cn9/WuBkMzTGKQOQNtZ9Y1NN5udSjTln2lbZ1ZrTjd5W1ub\n8jO9/LfW63jcyJSyoOhWrUagxcKLVnOnviRs/pmuRa/RiFJcoVCISxerEdjFIplMmiIxvWupFtmq\nFwu3i3KUhjJaLOxeixpu+7ts3rwZV111FX75y1/ixBNP5P7+tULgSJyaYNRgO8qsgqJUyt1S/rua\nRSlV/dvb25Vz42VgZQdsnpOmhsuyrOQd67mFXg32WsiCliV0s7sYHufhdLFgI1v2WtSRrZ3Fwgns\nRPvs7ol8681E6W6mhgDgb3/7G775zW/i17/+NT7xiU9wf/9aInDpFD04yYkTrOa/2WNW8z9hm0/c\n2vqz+WVgKMqKx+NKLp1HcVQLbrTQq3O2RBykCCKZGS2YbhA5L8dDrTZ6GnfG5tIp/eZFysuuD4qR\nxl7PuMttg64NGzbguuuuw2OPPYbx48dzf/9ao2FIHHDmRkh5WTv+J9Xy37wNrKqdCy0Wal9up8VR\nrWN5VVSkkW2SJCnFbLONRnbgpuMhDY5gi9a5XE5pBFO30fOEuo3e6ftXM+6ihdYtAl+3bh2+853v\n4Mknn6wY1BAkBI7E9R4muw8Zu21PpVKWI0l6CPWiQbcNrFgYLRZmi6Nmp7d7XVQkHxl2sTDTaGTn\nvNwuvrGghZCuhe4nNxQvaisC3veieseRy+WUHWA2m1X6IHgtti+//DJuv/129PT04Mgjj+RxCXWJ\nwOXEAWgOGtYqMlYD5TuLxSLi8bilfDoRIeXP1dpnlni88Hl2slhUK44atdC73ZLNyhXNRI7sjoPG\noam390bw0pu7mlZary5gJ0r3uhCsLs5SvYi+G9ZelxYoK3jxxRfxgx/8AL///e9x2GGHuXQl9YFA\nknihUBiWOlEXGauBzX/TVt0siavz31rVe2oH9kIixjMnrVUcZVMVXk6hZ+WKdoiH3XGwxKHVaKQX\n7bsFO9G+1mKrp95Rv67eFl22q5ddbM1E6U8//TTuv/9+/P73v8fIkSPdupS6QUOR+ODgoGLabgS1\n/rtQKChFnmowq/9mz8+t9nn2gUkmk9yJh+0cpWnmwME0hpspFDY1xIt42CIcpcAoQqfr80LWx8P2\nwChKZ1NiXvqgqPPtZo+ldZ+pdxz0Xr///e/x0EMP4cknn7S06/YzGobEy+UyBgYGDElcT//NVuqN\nXltN/03RFUWpADRvTh4t52x+0205GkWpuVwOTU1NyjXxKI5qwYsxaqzsjySrbtgBqOFWuobdcVCU\nHolEUCgU0NTUVDF2zA3YJXC992IX2xdffBHPP/88jjjiCLz55pvo6enxvTOhFQSSxMnHm4UkSThw\n4IDu9kqWhybVSJI0rBWcttGpVEr3tUb6b3qPaikNNhIslUqKE5vVqTlWuj2dQm97bKQXNlsc1QLP\nRqhqYNMMTU1Nw0jQznejBzZP7MauSX0suh/pvM24Fzo5npO0V7X33rZtG37605/ihRdewJ49e3Dq\nqadi7ty5uOqqq7gdp54ROHWKHpz4n1Rrn6+m/2ZJzujh1JJjWZ2aw7upxghGLfRaemG1qsKqjzU1\nn3hVVFTbyBqZQzkhQavFWaegruZkMolYLKY5zIPXAkUFUzfz7c899xz27duHd999F8ViES+99BL2\n7dvH/Tj1ioaJxGVZxr59+zBy5MiKG6lQKCCdThvqv/WULdUInDWwchqBsFGt3mBcL0nOSaNLteKo\n+r3czu2rYXUh1EpVmF2g3Jb1qVGtM9KoE9bqAkX3P3U7uxHh/+QnP8HmzZuxfPly1+/5ekXDkDgA\nfPzxxwqJ6+W/taClbGEHGGvdnG6mNLRkcvRzr+WKTqN9PWkZSxpetpo7LSpaWaC8iFJZmPFBUcPu\nAsWrm1UPkiRhyZIl2LNnD37+85/73k7WCQJJ4kQGauzbtw/t7e0IhUK6+W8tsEVRM/nvWuRtaUFx\nurWvBjda6FmoFSIAlMG4blwPC947GSNVRSQSUTov3a5bAHxcD7UWKK17zW3FiyRJuPXWW1EsFvGT\nn/zE95N5nKKh9h9s+3w0GrU8o7IagbNt5l7mbaPRqLIVp6iW8pu8/FC8aqGnugANICByoLZzHsVR\nNdTNJ7yujfLoat93aqOn86eBIG6pbNihIk7uAdavRm8SkNuKF0mScP3116OtrQ0/+MEPGp7AgQaL\nxPfv3w9Zli37n5CyJZVKmTKw8nLbbxTtazVM2JH8sfIwL65Nr9HFaueoGdTq2pqampSFqlqjkV14\neW1aihc3/GquueYaHHPMMfje977n+u7FLwgkiVMej0DRCBV0rEYIpVIJ/f39ug+ZG40nerDbrm9X\n8udlNx9gXidttTiq9x5etZoDxvl2vUYjuxp7N2V9WmC9wKlz126xVwvFYhELFizAKaecguuvv14Q\nOIPAkzir/wagyKrMgE2fANDUcNNWn6LGemhZNgOjqJbSCU4n3luBk3RNteKokXOkVzlpK008Rguu\nmSjd64IpS+Baz5bTBbdQKGD+/Pn47Gc/i29+85uCwFUINImT/jsajSKZTGJwcFDp8qsGIgatAcZ0\nU5J3NZumcKv4xlOuqIZW2oXmQ3oxFJf3tl8dBarTSETgXjhH8qglWPFEcVvWp4bVYQ5axV6jKD2X\ny+GKK67A7NmzMX/+fEHgGggsiWcyGUX/TekT9Zg1PZhp4MlmsyiXy0p7rxut8+rr8cLfQpIkhXTI\nXc6uM54ZuJ3SYJumSqWSsquKx+M162Z1+p56Om6aaOTFfQLYkyyqoRWl53I5rFu3DtOmTcOCBQtw\n2WWX4fLLLxcEroNAlnapgae1tXVY/rvamkU3lVEDTzqdhizLyng2Uh+0trYqnuPFYhEDAwMYHBxU\nInY762WxWFSiRi9IJ5/Po1Qa8k5PpVJobW1FNBrldj0sJElSOmXdyttS5ygVs4EhApckCf39/Vyv\nhwW70PP0U6ddRSKRQCqVUgg0n89jcHBQ+RtJkrhejxr5fN4xgQPa17Nnzx789Kc/xeTJk7Fr1y7s\n3bsXmzdvNnU9X/3qVzFq1ChMmTJF+dnixYvR0dGBzs5OdHZ24tlnn1V+t2TJEkycOBGTJk3C888/\nb/s6aonARuIUSbJgZ2WqYcfAqhrpqKMMK97VdguYdmGmEObketTw2h5Ay0ZW73qcpsW8LpiynyWl\nwXhejxqkOXdr2Mf+/ftx6aWX4utf/zqamprw7LPP4k9/+hM2bNhQtZ718ssvo7W1FfPmzcNbb70F\nALjtttuQSqVw3XXXVfztpk2bcOmll+K1115DX18fzj33XGzZssV3ssVA6sQpp6v1c601i5eBldbx\n1Lpa0ghLkqSrDnEritOD2SKf0fVYSSPxsFo1CyOdtN71sBOArKbFvC6YahUVja7HSc8Aq6d3677c\nu3cvLr30Unz3u9/FeeedBwC48MILTb/+n/7pn7Bt27ZhP9d67letWoW5c+ciFoth3LhxmDBhAtav\nX48zzjjD9vnXAoElcb2fq79MngZW1c6JUi9ApQUtawgViUQUra3VZiQ7sBsRm7kedfFNLyJ2C6x2\nv9pnqXc9pdLBAb/VJH9e1i4A46Ki+npYqwaaoWplF+WFSdfu3btx6aWXYsmSJZg+fTrX9166dClW\nrFiB0047Dffeey9GjBiBnTt3VhB2R0cH+vr6uB7XC/hr38ABLImbzX/TnEiepEOdiS0tLWhra1Os\nTul44XCYe55WDeq0Y/PFdqF1PZRWGBgYQCaTQSaTUbbhbhM4fXehUMiWsRRdTzKZRCqVQiKRUHZI\ndD0k/wMO+ut4UbsAhr67bDaLlpYWU6m2UCg07HpIHtvf3490Oo1CoaDpOeTFzrCvrw9z587Fvffe\ny53AFyxYgK1bt2Ljxo0YPXo0vv3tb+v+rR+Lp4GMxPXAGkVVy3976cnNtl83NzcrnXzskGKeXihu\nt9Cr0xTlclmREAJANpt1dbgCb+8ONrdM789aG9AIvubmZtfTQ4BzHxSt66FdRzabrWg0CofDyGaz\nAOCay+K2bdtwxRVX4Oc//zlOPfVU7u9/xBFHKP89f/58zJ49GwAwZswYbN++Xfndjh07MGbMGO7H\ndxsNFYnTlp7Nf2vdlKwixKuZg7QtbmpqUhYOUoeQHwVFTPl8XjNiMnu8bDar5Ii9SGlQeqWtrU1R\n75RKJUXtQjl1HruOUmloDJ+bEkIaEtHS0qLknqPRqKIQyWazFVE6L9BnWSgUuH537K6jra1t2K6j\nXC4jFou5sivs7e3FFVdcgQcffNAVAgeAXbt2Kf+9cuVKRbkyZ84cPProoygUCti6dSt6e3sxbdo0\nV87BTQQyEjd6cKkRSM9L2UsDK7bJRW+bSoTBDiOgYpVVLxS2hd4L72qtjk/a1usNvnDSNOVlwRSo\nVGnQ8GsexVEtsPeKm4MjKEqPRCJKgZYkpnq1DrvYtGkTFi5ciBUrVmDSpElczn/u3LlYu3Yt9u7d\ni7Fjx+K2227DSy+9hI0bNyIUCmH8+PFYtmwZAGDy5Mm46KKLMHnyZESjUdx///2+TKcEUmIIDJ+z\nSYUdivrYLT89EF4aWDn1JFE3sVQjQC9b6AF7drxmBl/owa3ZlFowW+RT+6EQAdoxIPPSB0VPYWPU\naGR10d24cSMWLVqERx55BMcdd5xbl9IQCDyJa+W/tQhQlmWl6cQrJzuehKpFgPRwUU7aC39zgA+h\nsmoKIwdGVvbmxdQfuxYBWvecGQL02gfFSj3B7sCI1157DTfeeCOeeOIJjB071q1LaRgEmsSJvKsN\ncKBtLz1odCPy9Kxmz8vNoQpApdyPjMDooeQx1FcPbhGqHgHSNt+r3RPPiNiMAZnXPigsgVt1+jTb\nOPXqq6/i1ltvxZNPPonRo0e7cRkNh8CSOLWPG+m/tToi1QTot6EK7PFyuRyKxaKiELFr2Wr2eF55\nV9O10G6LCNDpd2QENy15tQzISKFEhOpV/cKNkXsbN27ED3/4Q3zyk5/E2rVr8cwzz+Dwww/ndOYC\ngVSn7Nu3D4sXL8brr7+u+Xt1lZ/d8qv1zvF4XHFDHBgYsKWkoAjOS0UIjWxLpVKIx+MV3hShUAj5\nfB79/f3IZDK6+mCzoAgOgCfT2kOhEIrFImKxGFKpFJqamoZ9R7SA8wCbI3YjpUGpItJwNzU1KQsu\nyRidfkdGIALn5VhJi1BzczNaW1tx0kkn4cwzz8Rzzz2HrVu34nOf+xxuuOGGCs9/PWh5oXz88cfo\n6urCJz7xCcyYMQP79+9XfhcELxSrCCSJJ5NJnHnmmVixYgXOPvtsXHvttVizZg3y+Tz6+vrwn//5\nn0oXnxHhqB8ukl5lMhkMDAyYkpKRyRM1nXhRMB0cHEQ4HB625Vc/XKlUStfcyiyIANwiOK3jkRtl\nc3OzomlmvyMAuk05do/nheshHY/SbUaSTF6LFDUpJRIJ1+olL730El599VW88sor2L17Nx588EGM\nGTPGVL3kK1/5ClavXl3xs7vuugtdXV3YsmULzjnnHNx1110AhtQujz32GDZt2oTVq1dj4cKFri18\n9YTAplMI5XIZ69evR09PD55++ml8+OGHuOCCC3D77bcrQ5Ptvi9bSGRTFETUbEu7277V6uNZjajs\nmFvpjVFzC1aPp847szlaM7uhasMOeMPMcAU7xVE9uC3JlGUZjz/+OB5//HH87ne/Q0tLi6332bZt\nG2bPnq0YWk2aNAlr167FqFGj8OGHH2L69Ol49913sWTJEoTDYdx4440AgJkzZ2Lx4sW+80KxikDq\nxFlEIhGceeaZ2LJlC5YvX45///d/x8DAAC6//HJEo1HMnDkTs2bNwtixYy09BKwFrZZvSDgcVgp8\nXhCA04KpnhkU2zXKFnu9KNCysKN4qaaxN1qkvJQsAuaGK6g7LSmQYAcVq4ujTo7nBLIsY8WKFXj2\n2WexcuVKrkOTd+/ejVGjRgEARo0ahd27dwNAYLxQrCLwJA4M3VBvvvkmXnrpJZx44okAgOuvvx57\n9uzBH/7wB9x0003Yu3cvPvvZz+Lzn/88pkyZYintQXl08qmmNAt5U5Dkz42J5m4UTFnzJJbQ6cEn\nmaYXCxQv0yx2kaKIVm1tQKTupUkXYH+4AhtIWFmkeAxzMIIsy3jggQfwyiuv4IknnnDValjPNoP9\nfdDRECQeCoXwox/9aNjPjjjiCFx55ZW48sorkU6n8cILL+CBBx7A22+/jVNPPRXd3d349Kc/bTpV\nQAVTWZaRSqUQCoWGkQVPZYiZjk8eoIg2Ho8jk8koi1I2m0Uul3M00NcIRjayTsBGtFqLFADXPc4B\nvguwepHSswmWJMlVhZQsy1i6dCn+9re/4ZFHHnFlkac0ypFHHoldu3Yp3ihB8UKxisDnxO2gXC7j\nz3/+M3p6evDqq6/i6KOPRnd3N2bMmIG2tjbN15iZeG/UkGOVoLyeQq816ICNaNmBvjzMulgbWS8s\nAlinPlK7OB18Ue14blu7EijdR547rMEV72u6++670dfXh1/84hfcFgl1TvyGG27AoYceihtvvBF3\n3XUX9u/fj7vuuksZ8rB+/XplyMN7770X+GhckHgVyLKMd999Fz09PXjuuefQ3NyMmTNnoru7G0cd\ndRRCoRDeeustHH300ZYm3qv16FbymV630JsddMBGtFbb5tXv4/UCpdXEo9Y76xWw7RzPK009HY9t\nwmK7YXktvJIk4bbbbkMmk8HSpUu5XRPrhTJq1Cjcfvvt+MIXvoCLLroIf//73zFu3Dg8/vjjGDFi\nBADgzjvvxPLlyxGNRnHfffcpgyWCDEHiFiDLMnbv3o2nnnoKf/jDH7B//34cc8wxWL16NZ577jmc\ncMIJtt9XrQzRi5TseJI4gV2FjV7bfDXjJN42stVgZcEwWnjNdsJ67YNCET8N9VaTq7p13qqCBxj6\nXG666SY0Nzfjnnvu8d14M79DkLhNlMtlLFq0CE8++SS6urrwzjvv4PTTT0d3dzfOPPNM27lAvRRF\nNBpV8pleKyacKlDMmnV5OXcTcLZgqBdeoHonrNc+KGrnw2rH0+ocrZZKKpfLuO666zB69GgsXrxY\nEHgNIEjcJpYvX45HHnkEjz/+OEaOHIlSqYRXX30VPT09+POf/4xjjz0W3d3dOPfcc5FKpWwfR91i\nzsvatBrIZpX3gkEpCnVtIBwOKwuUF5JFN9vMteodXs/edBrxG11TOBxGNBpFqVTCN77xDUyePBk3\n3XRT4HPP9QpB4jZRLpchSZIm4UiShE2bNqGnpwcvvPACWlpaMHPmTHz+85/HqFGjLEd89DAmEolh\n1qZm8+hWjudVwQ0Y+qzI4wUAV79qPbjdpKS2oA2Hw8oCTF2mbsKNlA278N5+++145ZVXkEql8KlP\nfQr33HOP7ftv3LhxaGtrU+7l9evX4+OPP8bFF1+MDz74YFjOW2A4BIm7DFmWsXPnTjz11FP4r//6\nLwwMDOCcc87B5z//eRx//PGGD7RR9Ganw9LMuXqtCGELbuFwWDNFwVMZ4naTixrU1k5DI3jLTNXw\nImVz4MABLFq0CP39/di6dSv6+/vxjW98A7fccovl9xo/fjxef/11HHLIIcrPbrjhBhx22GG44YYb\ncPfdd2Pfvn1Ka73AcAgS9xj9/f1YvXo1Vq1ahffeew9nnHEGuru7ccYZZ1SQCpGNme0+u/W1K/Wr\nhSLESKHhhjLE6WxKq1BH/HqpJF7pMS9SNplMBvPmzcPFF1+MefPmIRQK4b333sM//vEPnHXWWZbf\nb/z48fjf//1fHHroocrP9NrqBbQhSLyGKBaLePnll9HT04N169Zh4sSJ6O7uxr59+7Bq1So8/vjj\ntvLDWlI/I6LwWrJoZ7vvRJLp9eAIwFxRmE27lEolJddsJ5XkhaqH7Crmz5+Piy++mMt7HnvssWhv\nb0ckEsFVV12Fr33taxg5ciT27dsHYOi7O+SQQ5T/FxgOQeJ1AkmS8Ne//hWLFi3Cm2++iXPOOQef\n+9zn0N3djcMPP9z2Q8lK/dgRYUQU5XLZUxMrHtGiFRWF1zl+wJ7vihNzK55FWj3s378fl112Ga65\n5hpccMEF3N53165dGD16NPbs2YOuri4sXboUc+bMqSDtQw45BB9//DG3YwYNvtcDPfHEEzjxxBMR\niUTwxhtvKD/ftm0bEokEOjs70dnZiYULFyq/e/311zFlyhRMnDgR11xzTS1OexjC4TB+/OMfI5/P\n45133sGPf/xjyLKMBQsWYNasWbj33nvx7rvvWrYfDYVCFZPMyWcjnU5jYGBAefi9UoSwNrJ2FyYt\ni+BQKDTMfpZSRG7bErDI5/OKL4mVnDstRKzveyQSUXzf0+m00nHJwgsC/+ijj3DxxRfjhhtu4Erg\nAJTpPocffjguvPBCrF+/XkmjAKhoqxfQhu8j8XfffRfhcBhXXXUV7r33XkydOhXA8FZdFtOmTcPP\nfvYzTJs2DbNmzcLVV1+NmTNnen3qw/DHP/4RZ5555jDHtwMHDuCZZ57BU089hffffx9nnXUWuru7\ncfrpp9tKDbBTf8irmmfLvBa8sq1Vp5JCoZCySLlJ4m6mbPQap8hgzU0v8H/84x+49NJL8f3vfx9n\nn3021/cmH55UKoV0Oo0ZM2bg1ltvxZo1azTb6gW04XsDrEmTJln6+127dmFgYADTpk0DAMybNw89\nPT11QeKf+9znNH/e3t6OuXPnYu7cuSgUCli7di16enpw880344QTTkB3dzfOPvtsJJPJqsfQM80i\n8iNbU15j6QBvbV3JF6RQKCgLEvmGGHXCOoHbKRvaTVFxtFwuo1AoKAoeNqXEc/HduXMnLr/8cvzw\nhz/EZz7zGW7vS9i9ezcuvPBCAEPXcNlll2HGjBk47bTTcNFFF+HBBx9UJIYC+vA9iRth69at6Ozs\nRHt7O77//e/jM5/5DPr6+tDR0aH8zZgxY3zlORyPx9HV1YWuri5IkoSNGzeip6cHS5cuxciRIzFr\n1iycf/75OOyww4Y90KwCRS0hVHtvU+SXz+dtF9x42chaAZteIJsAlvzUHulOdx7qRdHtojAZj7EL\nhhuL79///nd8+ctfxtKlS5WAhzfGjx+PjRs3Dvv5IYccgjVr1rhyzCDCFyTe1dWl5MhY3HnnnZg9\ne7bma4466ihs374dI0eOxBtvvIELLrgAb7/9ttun6inC4TCmTp2KqVOnQpZlfPDBB1i1ahW+9rWv\noVgsoqurC93d3ZgwYQJ6e3uxefNmdHV1VVUvaEV+xWJRmaNpRrvtlo2sEYxSNnoDFfL5vEJ+VqV+\nrMrGC109oK1zNxp8YWfn8d5772H+/Pl44IEHcPLJJ7t5OQIc4AsSf+GFFyy/hkgIAKZOnYrjjjsO\nvb29GDNmDHbs2KH8XVA8h0OhEMaNG4drrrkGV199Nfbv34+nn34ad9xxB95++23s3r0bCxcuxKxZ\nsyyRjZ73di6XgyRJwyb+AJVNQ15Ep4B1nxf1QAXaeeRyOVM7D699UIDqwxysDL7QO993330XX//6\n1/HQQw/ZNnQT8Ba+IHGzYGu0e/fuxciRIxGJRPD++++jt7cXxx57LEaMGIG2tjasW7cO06ZNw8MP\nP4yrr766hmfNH6FQCCNHjsTll1+OWCyGl156Cddeey127NiBc845ByeddBK6u7sxffp0ZbCw2fcl\n8gMqi4jZbFaJ+EjK6IVLH+A8566386CFSN1h6bUPCmC9Uana4Astnf1bb72Fb33rW/jNb36DiRMn\nun1JApzge4nhypUrMXbsWPzlL39Bd3c3zj//fADA2rVrcfLJJ6OzsxP/8i//gmXLlin+C/fffz/m\nz5+PiRMnYsKECcOKmnqyRQBYsmQJJk6ciEmTJuH5559Xfl6PssVisYhf/epXWLNmDW655Rb8/Oc/\nx1/+8hcsWLAAGzZswBe+8AVcdtll+M1vfoOPPvrIsnyR8ugtLS1oa2tDNBpVZHDlchn5fB7lcpnL\nVHYtUMrGjqRPD6zUr7W1Vck7s1K/wcFBT42scrkcCoUCWltbbdcV1N8VDb744IMP0NnZiW984xv4\nyle+wpXAV69ejUmTJmHixIm4++67ubynwHD4XmLoBvRkizQ55LXXXlMmh/T29iIUCtWtbNEIYba/\nkwAAEvtJREFUsizj/fffx1NPPYVnnnkGkiRhxowZ6O7uxvjx4y0RlLqgaMZ61um5e93EQ9E5uRLa\n8RO3Ai+usVwu4/HHH8fy5cuRTqfx97//Heeddx7uuecejB071tH7Hn/88VizZg3GjBmDT33qU3jk\nkUdEisYFBCqdwgt6ssVVq1Zh7ty5iMViGDduHCZMmIB169bhmGOOqVvZohFCoRCOO+44XHvttVi0\naBE+/vhjPP3001i8eDH6+vrw//7f/0N3dzemTp1qSCBa+WgibNYDhYqIRHxGuVkj1CLnTrll0mSz\nBmQ0to7nGDd2mIObi9Qrr7yCX/7yl1i5ciWOOOII7Ny5E8888wza29sdve/69esxYcIEjBs3DgBw\nySWXYNWqVYLEXYAgcQvYuXMnzjjjDOX/Ozo60NfXh1gs5mvZIjBE6IceeijmzZuHefPmIZvN4o9/\n/CN+/etf49/+7d9w8skno7u7G5/97GcrOgMHBwcVEyutdIZWHp0UFGxu1qwkjp316bUihF2k2CKi\n2YKvWVgd5mAXzz//PH70ox9h1apVigHVUUcdhfnz5zt+776+vopIvqOjA+vWrXP8vgLD0bAkbke2\n2EhIJBKYNWsWZs2aBUmS8Nprr6Gnpwf33HMPRo8ejfPPPx/vvPMOPvjgA/zyl780nasNh8MVRUQr\nkrhaFBTNFE3NLlRmzbq8kC3+4Q9/wC9+8Qs89dRTrnh1iwER3qFhSdyObHHMmDHYvn278v87duxA\nR0dHYGWLhHA4jNNPPx2nn346ZFnGO++8gyuuuAJ9fX045ZRTsGzZMnR3d+Poo4+2LF9US+LYZhw2\nj04E7pXTImDfutbuQuWFbFGWZfzud7/Db3/7W/T09DiaOmUE9bOyffv2it2qAD/4Xp3iNti675w5\nc/Doo4+iUChg69at6O3txbRp03DkkUcqskVZlvHwww8bGgUtXrwYHR0dijnXs88+q/xOT/1ST7jx\nxhtxxBFHYPPmzfjVr36FQw89FLfccgtmzJiB73//+9iwYcMwo6Zq0DKAYlUhpAixMqzZLngpQgBt\nsy4AmmZdXhD4b37zGzzxxBOuEjgAnHbaaejt7cW2bdtQKBTw2GOPYc6cOa4dr5Eh1CkaWLlyJa6+\n+mrs3bsX7e3tFUR75513Yvny5YhGo7jvvvtw3nnnARiSGF5xxRXIZrOYNWsWfvrTn+q+/2233YZU\nKoXrrruu4uda6pctW7bU3fDZV155ZdgQC2DI0GjNmjVYtWoV3nrrLUydOhXd3d34p3/6J9sGTaQI\nicfjSprCah7dCrxUvXhp1iXLMpYvX46XXnoJv/3tbz0ZRP3ss89i0aJFKJfLuPLKK/Gd73zH9WM2\nIgSJ1wC33XYbWltb8e1vf7vi50uWLEE4HMaNN94IAJg5cyYWL15cUUz1C8rlMtatW4eenh68/PLL\nGDt2LGbNmoXzzjsPbW1tpiJNrXy0lpc4L1MrrwqKLNg8fyQSGeZUyOu6/uM//gMbN27EQw895Int\nsIB3aNiceK2xdOlSrFixAqeddhruvfdejBgxQlf94kdEIhGcddZZOOussyDLMrZs2YKenh5cdtll\niEajmDlzJrq7u9HR0TGMoIyMs8y0ltsxtaqFD4qWF7ieWZddnb0sy/jhD3+Ibdu2YcWKFZ7MFRXw\nFvW1Tw8Qurq6MGXKlGH/PPXUU1iwYAG2bt2KjRs3YvTo0cMichZBqPKHQiEcf/zxuPHGG/Hiiy/i\n4YcfRlvb/9fe/cdEXf9xAH8ev5JfKkxAREt+eQbCQaXn1qIDOeA6Zg0MdIQonDGqVRsmW0MaKy9o\nLEYUykxNHVaag8NCzLIDyl8kmIVJFLBIDwsU5YyOg3t///B7nx16/D7AO16PzU0+h5/7fBRffHh/\nXp/nay62bduG6OhoyOVyXLp0iXvS8/Dhw9BoNKOuR+vX0efMmTPsIIX+/v5R1+cN2xanKypAX8Dn\nzJlz39LGaPcHxnpeOp0O77zzDlQqFT7++GMq4BaK/lWnyFi7X2QyGdfSaKz7xZK6XIC7BcrDwwMy\nmQwymQx37tzB119/jdLSUvzyyy+wsbGBVqtFdHT0uNeFDUOtxtrmNxNti+MdkGHsvPQ/fdw7bk9/\n/DqdDtnZ2eDxeCgpKXng7qsQ06E18RmgnysIAIWFhaivr8ehQ4e4G5vnz5/nbmz+/vvvFnE1Ppre\n3l7ExcVBo9HgiSeewJkzZ/DII49AKpVCLBZj7ty5E9634dOVWq2WW5KxtrZGX1/ftLYt6gv4WNMW\nR2K47KIfELFz504IBAJUV1fDzc0Nb7/9NhVwC0f/ujMgKysLwcHBEAgEqKmpQWFhIQAgICAACQkJ\nCAgIgEQiQUlJybgKizkHDu3atQs+Pj44deoU3n//fZw+fRo5OTno6OjA+vXrERcXh927d+PatWsT\nmjNqa2vLLU/Y29tzAzL0sQD6jJeppO+0cXBwMMnNxXuXXRwcHDA4OIicnBwcPHgQv/32G8rKyiY9\nZNjcW2ItHV2JWwhzDxzS6XTg8XjDZnerVCocO3YMX375JXp6ehAREYHY2Fg8+uij477SNFzO0C/f\n6Nv8JjIcYiymY0SdVqvFiy++iFWrViEpKQlVVVU4duwYkpOTERcXN+H9mntLrKWjNXELYe6BQyP9\nx+fxeFi0aBHS09ORnp6O3t5enDhxAsXFxbhy5QqEQiFiY2OxevXqUa9wjeWg6LtDjK03myKlcLRh\nDqag0WiQlpaGyMhIZGRkgMfjITU1FampqSbZv7FrPWOBcOfPnzfLllhzRt8yLYSxwCFzbU8cjbOz\nM9atW4cDBw7g9OnTiI+Px/HjxxEdHY0tW7agoqICarX6vj/X39/PjTYzVuz1j8s7ODhwmdv6G59q\ntRp9fX3jXnbRaDRTXsD7+vqQnJyM2NhYroCbWnFxMQQCAdLS0tDT0wPgbiCc4aP0lvw19yCjK3EL\nMRtufhpjY2MDkUgEkUgEnU6HpqYmVFRUYNeuXXB2doZEIoFUKsUXX3yBgYEBvPLKK2OejGMspXCs\n/eiMMWg0Gmi12imdMapWq/HCCy9g06ZN2LBhw4S/DoYLhNuxYwcyMjKQk5MDANi+fTsyMzOxZ88e\no/uZrV+HM4mKuIWgwKG7V9L6fvzs7GxcvXoVCoUCMTExuHXrFmQyGVpaWsDn88cd1KVv8zMs6IYT\n5g2XXabr0f1bt24hKSkJL7/8MuLj4ye1L2qJNV+0nGIhTBU4tHTpUgQHByM0NJQbcnHjxg2IxWIs\nW7YMUVFR3I/TDzL9OnpzczPs7e1RV1eHoKAgFBQUICIiAm+++SZ++OEHDAwMjHvf9446s7W1xcDA\nAHp7e6FWq6FWq6e8gN+4cQOJiYnIzMycdAEfjUql4n5fXl6OoKAgAMMHwpHpRVfiFsLGxgYffvgh\noqOjucChidzU5PF4UCqVcHV15bbl5eVBLBZj27ZtyM/PR15eHvLy8kx5+FNCp9PBxcUFSqUS8+fP\nh7+/PxITE6HValFbWwuFQoHs7Gzw+XxIpVJERETA0dFxXO9hOGTZsG0RAPcQkamm/ej9/fffSEpK\nQm5uLiIjI02yz5FkZWXh4sWL4PF48Pb2RmlpKYChLbE2NjbjboklpkEthmQIb29v/Pjjj9ykF+Du\nuLqamhp4eHigs7MTIpEIV65cmcGjNB2dTodLly6hoqICp06dwrx58/DMM89AIpHAzc1tzEXJMHvF\nwcGB27e+fXEyuS6GOjs7kZSUhPz8fISFhU1oH8SyUBEnQ/j4+GDevHmwtrZGeno6tmzZAhcXF9y8\neRPA3WLl6urKfWxJGGPo6OiAQqHAV199BY1Gg8jISEilUvj7+w9beMcyzEFf0PUtjIbj28a65NLR\n0YGUlBQUFRVBKBRO6lyJ5aAiTobQRwL8888/EIvFKC4uxtq1a4cUbVdX10k/BWgOenp6UFVVhcrK\nSrS3t+PJJ5+EVCrFypUruQ6X27dvDwniGssV9r1xulZWVkbzTwy1trYiNTUVpaWlCA0NNfm5EvNF\nRZwMS597vnv3biiVSixcuBAqlQrh4eEWs5wyVv39/VAqlVAoFKivr0dgYCDCwsLw3nvvITc3F1Kp\ndEJLJMbyT/StjfqumObmZqSnp2Pfvn0IDAw09akRM0fdKYTz77//ore3FwC4dMGgoCCsXbsW+/fv\nBwDs379/xNFzlsrOzg5RUVH46KOPcPbsWcTFxWHr1q1wd3dHWVkZysrK0NXVNaFcl3tjZ3k8Hnp6\nerBs2TIkJiYiISEBO3funFQBP3LkCAIDA2FtbY2GhoYhrw2Xf3LhwgUEBQXB398fr7322oTfm0wx\nRsj/tba2MoFAwAQCAQsMDGRyuZwxxlh3dzdbs2YN8/f3Z2KxmN28eXPUfW3evJm5u7uzFStWcNu6\nu7tZZGSk0f3I5XLm5+fH+Hw+O3HihOlPzoSuXr3KHn74YVZUVMR0Oh1rbW1lhYWFTCwWs/DwcCaX\ny9lPP/3E1Go1u3PnzoR/VVZWsoiICCYSiZiTkxMTi8Wsvr5+Qsf866+/submZiYSidiFCxe47U1N\nTUwgELD+/n7W1tbGfH19mU6nY4wxtnLlSnbu3DnGGGMSiYQdP3588n95xOSoiJMpUVtbyxoaGoYU\n8TfeeIPl5+czxhjLy8tjWVlZjDHjhWRwcHBGjnssBgcH2XfffXffdp1Ox7q7u9mBAwfYunXrmFAo\nZFu3bmVKpZLdvn17XAX822+/ZatXr2YdHR2MMcZ6e3vZ0aNHWWtr66SO/d4iLpfLWV5eHvdxdHQ0\nO3PmDLt27Rpbvnw5t/3TTz9l6enpk3pvMjVoOYVMiaeeegouLi5DtlVWViIlJQUAkJKSgoqKCgDD\nByk9qKysrCASie7bzuPx4OrqiuTkZBw5cgQ1NTWIiIjAoUOHsGbNGrz66quorq7Gf//9N+L+6+rq\nsH37dpSXl3NP3To5OSEuLg7e3t4mPZfh8k/u3e7l5UW5KA8oetiHTJvr16/Dw8MDAODh4YHr168D\ngEXNFjX00EMPQSKRQCKRQKfTob6+HgqFAgUFBfDw8IBUKkVMTAxcXFy4m6LffPMNCgoKoFAosGDB\ngnG933D5J3K5nHtUnlgeKuJkRgyXHW74uiWxsrKCUCiEUCgEYwx//PEHFAoFNm3aBACIioqCo6Mj\njh49CoVCcd9PMWMx1vwTQ8byTxYvXgwvLy/89ddfQ7ZTLsqDiZZTyLTRP/EJ3O1Hd3d3BzD7gpR4\nPB78/PyQmZmJkydP4rPPPoObmxs++eQTVFRUTKiAjwcz6KAZLv9k4cKFmDt3Ls6dOwfGGA4ePDgr\nu5LMARVxMm2Ga1WczUFKPB4PCxYswObNm1FfXz+pWaIjKS8vx5IlS3D27FlIpVJIJBIAI48ELCkp\ngUwmg7+/P/z8/BATEzMlx0YmaYZvrBILtX79eubp6clsbW3Z4sWL2d69e0dsVdyxYwfz9fVlfD6f\nVVdXG92nsbbFt956i3l5ebGQkBAWEhLCqqqquNfMqW2RkImiJzaJ2airq4OTkxM2btyIn3/+GQDN\nfySEvqKJ2TDWtgiMb/4jIZaGijgxezT/kcxmVMSJWcvIyEBbWxsuXrwIT09PZGZmDvu5lta2SAhA\nRZyYOXd3d67nXCaTcUsmlty2OFyYVXt7O+zt7REaGorQ0FC89NJL3GsUZmW5qIgTs2aK+Y8dHR0I\nDw9HYGAgVqxYgQ8++ADAyLNFh0v+mw5BQUEoLy83OtnHz88PjY2NaGxsRElJCbc9IyMDe/bsQUtL\nC1paWlBdXT2dh0ymED2xSczGhg0bUFNTg66uLixZsgS5ublQKpWTnv9oa2uLwsJChISEQK1W4/HH\nH4dYLMa+ffuMzha9fPkyPv/8c1y+fHlGOl+WL18+rs9XqVTo7e3lvolt3LgRFRUV1PdtKWa4xZGQ\nB86zzz7LTp48yfh8Puvs7GSMMaZSqRifz2eMDZ/8N93uTSRsa2tjjo6OLCQkhD399NOsrq6OMcZY\nfX09i4yM5D6vtraWxcbGTvvxkqlBV+KEGGhvb0djYyOEQuGMBnZNJMxq0aJF6OjogIuLCxoaGvDc\nc8+hqanJpMdFHjxUxAn5P7Vajfj4eBQVFcHZ2XnIa9Md2DWRMCs7OzvY2dkBAB577DH4+vqipaWF\nwqwsHN3YJASAVqtFfHw8kpOTuUwXcwjsYgYPOnV1dWFwcBDA3cHKLS0t8PHxgaenJ4VZWTAq4mTW\nY4whLS0NAQEBeP3117ntD2pg13BhVjU1NRAIBAgNDcXzzz+P0tJSzJ8/HwCFWVkyyk4hs97333+P\nsLAwBAcHc8si7777LlatWoWEhAT8+eefWLp0KQ4fPswVRblcjr1798LGxgZFRUWIjo6eyVMgsxgV\ncUIIMWO0nEIIIWaMijghhJgxKuKEEGLGqIgTQogZoyJOCCFmjIo4IYSYMSrihBBixqiIE0KIGaMi\nTgghZoyKOCGEmDEq4oQQYsb+B6ekLGrEGw8LAAAAAElFTkSuQmCC\n",
"text": [
"<matplotlib.figure.Figure at 0xa7af2ac>"
]
}
"outputs": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"D\u00e1le pot\u0159ebujeme kompenzovat soft-iron efekty. K tomu mus\u00edme pracovat s nam\u011b\u0159en\u00fdmi daty, jako s elipsou a naj\u00edt jej\u00ed hlavn\u00ed a vedlej\u0161\u00ed poloosu. Postup je trochu komplikovan\u011bj\u0161\u00ed, proto adoptujeme k\u00f3d z [PaparazziUAV](http://wiki.paparazziuav.org/wiki/ImuCalibration). Ten pomoc\u00ed fitov\u00e1n\u00ed elipsoindu najde korek\u010dn\u00ed parametry citlivosti pro jednotliv\u00e9 osy. Zanedb\u00e1v\u00e1 ale p\u0159\u00edpadnou rotaci elipsoidu popsanou v \u010dl\u00e1nku [Compensating for Tilt, Hard-Iron, and Soft-Iron Effects](http://www.sensorsmag.com/sensors/motion-velocity-displacement/compensating-tilt-hard-iron-and-soft-iron-effects-6475)"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"import scipy\n",
"from scipy import optimize\n",
"\n",
"import calibration_utils\n",
"\n",
"sensor_ref = 1.\n",
"sensor_res = 0.73\n",
"noise_window = 10\n",
"noise_threshold = 1000"
],
"prompt_number": 14
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 146
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Uprav\u00edme strukuturu pole m\u011b\u0159en\u00fdch hodnot do sn\u00e1ze indexovateln\u00e9ho form\u00e1tu."
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"amax(p)"
"measurements = np.array(list_meas)"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": "*"
"prompt_number": 147
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Spo\u010d\u00edt\u00e1me medi\u00e1n magnitudy zm\u011b\u0159en\u00fdch vektor\u016f. A nastav\u00edme podle n\u011bj rozhodovac\u00ed \u00farove\u0148 pro filtraci a ofiltrujeme nam\u011b\u0159en\u00e1 kalibra\u010dn\u00ed data. "
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"std(p)"
"meas_median=scipy.median(scipy.array([scipy.linalg.norm(v) for v in measurements]))\n",
"noise_threshold = meas_median * 0.8\n",
"print noise_threshold\n",
"flt_meas, flt_idx = calibration_utils.filter_meas(measurements, noise_window, noise_threshold)\n",
"print(\"remaining \"+str(len(flt_meas))+\" after filtering\")"
],
"language": "python",
"metadata": {},
1042,7 → 454,7
"cell_type": "code",
"collapsed": false,
"input": [
"plt.plot(p)"
"flt_meas = measurements"
],
"language": "python",
"metadata": {},
1050,13 → 462,130
"prompt_number": "*"
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Spo\u010d\u00edt\u00e1me odhad elipsoidu z nam\u011b\u0159en\u00fdch minim\u00e1ln\u00edch a maxim\u00e1ln\u00edch hodnot."
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"plt.plot(t)"
" p0 = calibration_utils.get_min_max_guess(flt_meas, sensor_ref)\n",
" cp0, np0 = calibration_utils.scale_measurements(flt_meas, p0)\n",
" print(\"initial guess : avg \"+str(np0.mean())+\" std \"+str(np0.std()))\n",
"\n",
" def err_func(p, meas, y):\n",
" cp, np = calibration_utils.scale_measurements(meas, p)\n",
" err = y*scipy.ones(len(meas)) - np\n",
" return err"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"initial guess : avg 0.999920050427 std 0.0671243703038\n"
]
}
],
"prompt_number": 150
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Optimalizujeme odhad fitov\u00e1n\u00edm elipsoidu."
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
" p1, cov, info, msg, success = optimize.leastsq(err_func, p0[:], args=(flt_meas, sensor_ref), full_output=1)\n",
" if not success in [1, 2, 3, 4]:\n",
" print(\"Optimization error: \", msg)\n",
" print(\"Please try to provide a clean logfile.\")\n",
" sys.exit(1)\n",
"\n",
" cp1, np1 = calibration_utils.scale_measurements(flt_meas, p1)\n",
" print(\"optimized guess : avg \"+str(np1.mean())+\" std \"+str(np1.std()))"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"optimized guess : avg 0.999137645687 std 0.0293532050592\n"
]
}
],
"prompt_number": 151
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Vykresl\u00edme v\u00fdsledek filtrace a fitov\u00e1n\u00ed. "
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"%pylab qt\n",
"calibration_utils.plot_results(False, measurements, flt_idx, flt_meas, cp0, np0, cp1, np1, sensor_ref)\n",
"calibration_utils.plot_mag_3d(flt_meas, cp1, p1)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Populating the interactive namespace from numpy and matplotlib\n"
]
},
{
"output_type": "stream",
"stream": "stderr",
"text": [
"WARNING: pylab import has clobbered these variables: ['cov', 'info']\n",
"`%pylab --no-import-all` prevents importing * from pylab and numpy\n"
]
}
],
"prompt_number": 152
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Nyn\u00ed m\u016f\u017eeme z\u00edskan\u00e9 scale faktory a offsety pou\u017e\u00edt na kompenzaci libovoln\u00e9ho m\u011b\u0159en\u00ed a n\u00e1sledn\u011b vypo\u010d\u00edtat polohov\u00e9 \u00fahly platformy ve sf\u00e9rick\u00fdch sou\u0159adnic\u00edch."
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"for n in range(MEASUREMENTS):\n",
" m = mag_sensor.axes()\n",
" sm = (m - p1[0:3])*p1[3:6]\n",
" r = norm(sm)\n",
" theta = np.arccos(sm[2]/r)\n",
" phi = np.arctan2(sm[1],sm[0])\n",
" clear_output()\n",
" print (r,(theta*180)/pi,(phi*180)/pi)\n",
" sys.stdout.flush()"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": "*"
},
1066,8 → 595,25
"input": [],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": "*"
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 92,
"text": [
"583.14932841582277"
]
}
],
"prompt_number": 92
},
{
"cell_type": "code",
"collapsed": false,
"input": [],
"language": "python",
"metadata": {},
"outputs": []
}
],
"metadata": {}
/Modules/Sensors/MAG01A/SW/Python/calibration_data_2Dset.npz
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/Modules/Sensors/MAG01A/SW/Python/calibration_data_3Dset.npz
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/Modules/Sensors/MAG01A/SW/Python/calibration_utils.py
0,0 → 1,270
 
# Copyright (C) 2010 Antoine Drouin
#
# This file is part of Paparazzi.
#
# Paparazzi is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2, or (at your option)
# any later version.
#
# Paparazzi is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with Paparazzi; see the file COPYING. If not, write to
# the Free Software Foundation, 59 Temple Place - Suite 330,
# Boston, MA 02111-1307, USA.
#
 
from __future__ import print_function, division
 
import re
import numpy as np
from numpy import sin, cos
from scipy import linalg, stats
 
import matplotlib
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
 
 
def get_ids_in_log(filename):
"""Returns available ac_id from a log."""
f = open(filename, 'r')
ids = []
pattern = re.compile("\S+ (\S+)")
while True:
line = f.readline().strip()
if line == '':
break
m = re.match(pattern, line)
if m:
ac_id = m.group(1)
if not ac_id in ids:
ids.append(ac_id)
return ids
 
 
def read_log(ac_id, filename, sensor):
"""Extracts raw sensor measurements from a log."""
f = open(filename, 'r')
pattern = re.compile("(\S+) "+ac_id+" IMU_"+sensor+"_RAW (\S+) (\S+) (\S+)")
list_meas = []
while True:
line = f.readline().strip()
if line == '':
break
m = re.match(pattern, line)
if m:
list_meas.append([float(m.group(2)), float(m.group(3)), float(m.group(4))])
return np.array(list_meas)
 
 
def read_log_mag_current(ac_id, filename):
"""Extracts raw magnetometer and current measurements from a log."""
f = open(filename, 'r')
pattern = re.compile("(\S+) "+ac_id+" IMU_MAG_CURRENT_CALIBRATION (\S+) (\S+) (\S+) (\S+)")
list_meas = []
while True:
line = f.readline().strip()
if line == '':
break
m = re.match(pattern, line)
if m:
list_meas.append([float(m.group(2)), float(m.group(3)), float(m.group(4)), float(m.group(5))])
return np.array(list_meas)
 
 
def filter_meas(meas, window_size, noise_threshold):
"""Select only non-noisy data."""
filtered_meas = []
filtered_idx = []
for i in range(window_size, len(meas)-window_size):
noise = meas[i-window_size:i+window_size, :].std(axis=0)
if linalg.norm(noise) < noise_threshold:
filtered_meas.append(meas[i, :])
filtered_idx.append(i)
return np.array(filtered_meas), filtered_idx
 
 
def get_min_max_guess(meas, scale):
"""Initial boundary based calibration."""
max_meas = meas[:, :].max(axis=0)
min_meas = meas[:, :].min(axis=0)
n = (max_meas + min_meas) / 2
sf = 2*scale/(max_meas - min_meas)
return np.array([n[0], n[1], n[2], sf[0], sf[1], sf[2]])
 
 
def scale_measurements(meas, p):
"""Scale the set of measurements."""
l_comp = []
l_norm = []
for m in meas[:, ]:
sm = (m - p[0:3])*p[3:6]
l_comp.append(sm)
l_norm.append(linalg.norm(sm))
return np.array(l_comp), np.array(l_norm)
 
 
def estimate_mag_current_relation(meas):
"""Calculate linear coefficient of magnetometer-current relation."""
coefficient = []
for i in range(0, 3):
gradient, intercept, r_value, p_value, std_err = stats.linregress(meas[:, 3], meas[:, i])
coefficient.append(gradient)
return coefficient
 
 
def print_xml(p, sensor, res):
"""Print xml for airframe file."""
print("")
print("<define name=\""+sensor+"_X_NEUTRAL\" value=\""+str(int(round(p[0])))+"\"/>")
print("<define name=\""+sensor+"_Y_NEUTRAL\" value=\""+str(int(round(p[1])))+"\"/>")
print("<define name=\""+sensor+"_Z_NEUTRAL\" value=\""+str(int(round(p[2])))+"\"/>")
print("<define name=\""+sensor+"_X_SENS\" value=\""+str(p[3]*2**res)+"\" integer=\"16\"/>")
print("<define name=\""+sensor+"_Y_SENS\" value=\""+str(p[4]*2**res)+"\" integer=\"16\"/>")
print("<define name=\""+sensor+"_Z_SENS\" value=\""+str(p[5]*2**res)+"\" integer=\"16\"/>")
 
 
def plot_results(block, measurements, flt_idx, flt_meas, cp0, np0, cp1, np1, sensor_ref):
"""Plot calibration results."""
plt.subplot(3, 1, 1)
plt.plot(measurements[:, 0])
plt.plot(measurements[:, 1])
plt.plot(measurements[:, 2])
plt.plot(flt_idx, flt_meas[:, 0], 'ro')
plt.plot(flt_idx, flt_meas[:, 1], 'ro')
plt.plot(flt_idx, flt_meas[:, 2], 'ro')
plt.xlabel('time (s)')
plt.ylabel('ADC')
plt.title('Raw sensors')
 
plt.subplot(3, 2, 3)
plt.plot(cp0[:, 0])
plt.plot(cp0[:, 1])
plt.plot(cp0[:, 2])
plt.plot(-sensor_ref*np.ones(len(flt_meas)))
plt.plot(sensor_ref*np.ones(len(flt_meas)))
 
plt.subplot(3, 2, 4)
plt.plot(np0)
plt.plot(sensor_ref*np.ones(len(flt_meas)))
 
plt.subplot(3, 2, 5)
plt.plot(cp1[:, 0])
plt.plot(cp1[:, 1])
plt.plot(cp1[:, 2])
plt.plot(-sensor_ref*np.ones(len(flt_meas)))
plt.plot(sensor_ref*np.ones(len(flt_meas)))
 
plt.subplot(3, 2, 6)
plt.plot(np1)
plt.plot(sensor_ref*np.ones(len(flt_meas)))
 
# if we want to have another plot we only draw the figure (non-blocking)
# also in matplotlib before 1.0.0 there is only one call to show possible
if block:
plt.show()
else:
plt.draw()
 
 
def plot_mag_3d(measured, calibrated, p):
"""Plot magnetometer measurements on 3D sphere."""
# set up points for sphere and ellipsoid wireframes
u = np.r_[0:2 * np.pi:20j]
v = np.r_[0:np.pi:20j]
wx = np.outer(cos(u), sin(v))
wy = np.outer(sin(u), sin(v))
wz = np.outer(np.ones(np.size(u)), cos(v))
ex = p[0] * np.ones(np.size(u)) + np.outer(cos(u), sin(v)) / p[3]
ey = p[1] * np.ones(np.size(u)) + np.outer(sin(u), sin(v)) / p[4]
ez = p[2] * np.ones(np.size(u)) + np.outer(np.ones(np.size(u)), cos(v)) / p[5]
 
# measurements
mx = measured[:, 0]
my = measured[:, 1]
mz = measured[:, 2]
 
# calibrated values
cx = calibrated[:, 0]
cy = calibrated[:, 1]
cz = calibrated[:, 2]
 
# axes size
left = 0.02
bottom = 0.05
width = 0.46
height = 0.9
rect_l = [left, bottom, width, height]
rect_r = [left/2+0.5, bottom, width, height]
 
fig = plt.figure(figsize=plt.figaspect(0.5))
if matplotlib.__version__.startswith('0'):
ax = Axes3D(fig, rect=rect_l)
else:
ax = fig.add_subplot(1, 2, 1, position=rect_l, projection='3d')
# plot measurements
ax.scatter(mx, my, mz)
plt.hold(True)
# plot line from center to ellipsoid center
ax.plot([0.0, p[0]], [0.0, p[1]], [0.0, p[2]], color='black', marker='+', markersize=10)
# plot ellipsoid
ax.plot_wireframe(ex, ey, ez, color='grey', alpha=0.5)
 
# Create cubic bounding box to simulate equal aspect ratio
max_range = np.array([mx.max() - mx.min(), my.max() - my.min(), mz.max() - mz.min()]).max()
Xb = 0.5 * max_range * np.mgrid[-1:2:2, -1:2:2, -1:2:2][0].flatten() + 0.5 * (mx.max() + mx.min())
Yb = 0.5 * max_range * np.mgrid[-1:2:2, -1:2:2, -1:2:2][1].flatten() + 0.5 * (my.max() + my.min())
Zb = 0.5 * max_range * np.mgrid[-1:2:2, -1:2:2, -1:2:2][2].flatten() + 0.5 * (mz.max() + mz.min())
# add the fake bounding box:
for xb, yb, zb in zip(Xb, Yb, Zb):
ax.plot([xb], [yb], [zb], 'w')
 
ax.set_title('MAG raw with fitted ellipsoid and center offset')
ax.set_xlabel('x')
ax.set_ylabel('y')
ax.set_zlabel('z')
 
if matplotlib.__version__.startswith('0'):
ax = Axes3D(fig, rect=rect_r)
else:
ax = fig.add_subplot(1, 2, 2, position=rect_r, projection='3d')
ax.plot_wireframe(wx, wy, wz, color='grey', alpha=0.5)
plt.hold(True)
ax.scatter(cx, cy, cz)
 
ax.set_title('MAG calibrated on unit sphere')
ax.set_xlabel('x')
ax.set_ylabel('y')
ax.set_zlabel('z')
ax.set_xlim3d(-1, 1)
ax.set_ylim3d(-1, 1)
ax.set_zlim3d(-1, 1)
plt.show()
 
 
def read_turntable_log(ac_id, tt_id, filename, _min, _max):
""" Read a turntable log.
return an array which first column is turnatble and next 3 are gyro
"""
f = open(filename, 'r')
pattern_g = re.compile("(\S+) "+str(ac_id)+" IMU_GYRO_RAW (\S+) (\S+) (\S+)")
pattern_t = re.compile("(\S+) "+str(tt_id)+" IMU_TURNTABLE (\S+)")
last_tt = None
list_tt = []
while True:
line = f.readline().strip()
if line == '':
break
m = re.match(pattern_t, line)
if m:
last_tt = float(m.group(2))
m = re.match(pattern_g, line)
if m and last_tt and _min < last_tt < _max:
list_tt.append([last_tt, float(m.group(2)), float(m.group(3)), float(m.group(4))])
return np.array(list_tt)