]> rtime.felk.cvut.cz Git - opencv.git/blob - opencv/src/cvaux/cvhog.cpp
new version of KDTree added, KMeans initialization has been improved; a few other...
[opencv.git] / opencv / src / cvaux / cvhog.cpp
1 /*M///////////////////////////////////////////////////////////////////////////////////////\r
2 //\r
3 //  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\r
4 //\r
5 //  By downloading, copying, installing or using the software you agree to this license.\r
6 //  If you do not agree to this license, do not download, install,\r
7 //  copy or use the software.\r
8 //\r
9 //\r
10 //                           License Agreement\r
11 //                For Open Source Computer Vision Library\r
12 //\r
13 // Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\r
14 // Copyright (C) 2009, Willow Garage Inc., all rights reserved.\r
15 // Third party copyrights are property of their respective owners.\r
16 //\r
17 // Redistribution and use in source and binary forms, with or without modification,\r
18 // are permitted provided that the following conditions are met:\r
19 //\r
20 //   * Redistribution's of source code must retain the above copyright notice,\r
21 //     this list of conditions and the following disclaimer.\r
22 //\r
23 //   * Redistribution's in binary form must reproduce the above copyright notice,\r
24 //     this list of conditions and the following disclaimer in the documentation\r
25 //     and/or other materials provided with the distribution.\r
26 //\r
27 //   * The name of the copyright holders may not be used to endorse or promote products\r
28 //     derived from this software without specific prior written permission.\r
29 //\r
30 // This software is provided by the copyright holders and contributors "as is" and\r
31 // any express or implied warranties, including, but not limited to, the implied\r
32 // warranties of merchantability and fitness for a particular purpose are disclaimed.\r
33 // In no event shall the Intel Corporation or contributors be liable for any direct,\r
34 // indirect, incidental, special, exemplary, or consequential damages\r
35 // (including, but not limited to, procurement of substitute goods or services;\r
36 // loss of use, data, or profits; or business interruption) however caused\r
37 // and on any theory of liability, whether in contract, strict liability,\r
38 // or tort (including negligence or otherwise) arising in any way out of\r
39 // the use of this software, even if advised of the possibility of such damage.\r
40 //\r
41 //M*/\r
42 \r
43 #include "_cvaux.h"\r
44 \r
45 /****************************************************************************************\\r
46       The code below is implementation of HOG (Histogram-of-Oriented Gradients)\r
47       descriptor and object detection, introduced by Navneet Dalal and Bill Triggs.\r
48 \r
49       The computed feature vectors are compatible with the\r
50       INRIA Object Detection and Localization Toolkit\r
51       (http://pascal.inrialpes.fr/soft/olt/)\r
52 \****************************************************************************************/\r
53 \r
54 namespace cv\r
55 {\r
56 \r
57 size_t HOGDescriptor::getDescriptorSize() const\r
58 {\r
59     CV_Assert(blockSize.width % cellSize.width == 0 &&\r
60         blockSize.height % cellSize.height == 0);\r
61     CV_Assert((winSize.width - blockSize.width) % blockStride.width == 0 &&\r
62         (winSize.height - blockSize.height) % blockStride.height == 0 );\r
63     return (size_t)nbins*\r
64         (blockSize.width/cellSize.width)*\r
65         (blockSize.height/cellSize.height)*\r
66         ((winSize.width - blockSize.width)/blockStride.width + 1)*\r
67         ((winSize.height - blockSize.height)/blockStride.height + 1);\r
68 }\r
69 \r
70 double HOGDescriptor::getWinSigma() const\r
71 {\r
72     return winSigma >= 0 ? winSigma : (blockSize.width + blockSize.height)/8.;\r
73 }\r
74 \r
75 bool HOGDescriptor::checkDetectorSize() const\r
76 {\r
77     size_t detectorSize = svmDetector.size(), descriptorSize = getDescriptorSize();\r
78     return detectorSize == 0 ||\r
79         detectorSize == descriptorSize ||\r
80         detectorSize == descriptorSize + 1;\r
81 }\r
82 \r
83 void HOGDescriptor::setSVMDetector(const Vector<float>& _svmDetector)\r
84 {\r
85     svmDetector = _svmDetector;\r
86     CV_Assert( checkDetectorSize() );\r
87 }\r
88 \r
89 bool HOGDescriptor::load(const String& filename, const String& objname)\r
90 {\r
91     FileStorage fs(filename, FileStorage::READ);\r
92     FileNode obj = !objname.empty() ? fs[objname] : fs.getFirstTopLevelNode();\r
93     if( !obj.isMap() )\r
94         return false;\r
95     FileNodeIterator it = obj["winSize"].begin();\r
96     it >> winSize.width >> winSize.height;\r
97     it = obj["blockSize"].begin();\r
98     it >> blockSize.width >> blockSize.height;\r
99     it = obj["blockStride"].begin();\r
100     it >> blockStride.width >> blockStride.height;\r
101     it = obj["cellSize"].begin();\r
102     it >> cellSize.width >> cellSize.height;\r
103     obj["nbins"] >> nbins;\r
104     obj["derivAperture"] >> derivAperture;\r
105     obj["winSigma"] >> winSigma;\r
106     obj["histogramNormType"] >> histogramNormType;\r
107     obj["L2HysThreshold"] >> L2HysThreshold;\r
108     obj["gammaCorrection"] >> gammaCorrection;\r
109 \r
110     FileNode vecNode = obj["SVMDetector"];\r
111     if( vecNode.isSeq() )\r
112     {\r
113         vecNode >> svmDetector;\r
114         CV_Assert(checkDetectorSize());\r
115     }\r
116     return true;\r
117 }\r
118 \r
119 void HOGDescriptor::save(const String& filename, const String& objName) const\r
120 {\r
121     FileStorage fs(filename, FileStorage::WRITE);\r
122     fs << (!objName.empty() ? objName : FileStorage::getDefaultObjectName(filename)) << "{";\r
123 \r
124     fs  << "winSize" << winSize\r
125         << "blockSize" << blockSize\r
126         << "blockStride" << blockStride\r
127         << "cellSize" << cellSize\r
128         << "nbins" << nbins\r
129         << "derivAperture" << derivAperture\r
130         << "winSigma" << getWinSigma()\r
131         << "histogramNormType" << histogramNormType\r
132         << "L2HysThreshold" << L2HysThreshold\r
133         << "gammaCorrection" << gammaCorrection;\r
134     if( !svmDetector.empty() )\r
135         fs << "SVMDetector" << "[:" << svmDetector << "]";\r
136     fs << "}";\r
137 }\r
138 \r
139 void HOGDescriptor::computeGradient(const Mat& img, Mat& grad, Mat& qangle,\r
140                                     Size paddingTL, Size paddingBR) const\r
141 {\r
142     CV_Assert( img.type() == CV_8U || img.type() == CV_8UC3 );\r
143     \r
144     Size gradsize(img.cols + paddingTL.width + paddingBR.width,\r
145                   img.rows + paddingTL.height + paddingBR.height);\r
146     grad.create(gradsize, CV_32FC2);  // <magnitude*(1-alpha), magnitude*alpha>\r
147     qangle.create(gradsize, CV_8UC2); // [0..nbins-1] - quantized gradient orientation\r
148     Size wholeSize;\r
149     Point roiofs;\r
150     img.locateROI(wholeSize, roiofs);\r
151 \r
152     int i, x, y;\r
153     int cn = img.channels();\r
154 \r
155     Mat_<float> _lut(1, 256);\r
156     const float* lut = &_lut(0,0);\r
157 \r
158     if( gammaCorrection )\r
159         for( i = 0; i < 256; i++ )\r
160             _lut(0,i) = std::sqrt((float)i);\r
161     else\r
162         for( i = 0; i < 256; i++ )\r
163             _lut(0,i) = (float)i;\r
164 \r
165     AutoBuffer<int> mapbuf(gradsize.width + gradsize.height + 4);\r
166     int* xmap = (int*)mapbuf + 1;\r
167     int* ymap = xmap + gradsize.width + 2;\r
168 \r
169     const int borderType = (int)BORDER_REFLECT_101;\r
170 \r
171     for( x = -1; x < gradsize.width + 1; x++ )\r
172         xmap[x] = borderInterpolate(x - paddingTL.width + roiofs.x,\r
173                         wholeSize.width, borderType);\r
174     for( y = -1; y < gradsize.height + 1; y++ )\r
175         ymap[y] = borderInterpolate(y - paddingTL.height + roiofs.y,\r
176                         wholeSize.height, borderType);\r
177 \r
178     // x- & y- derivatives for the whole row\r
179     int width = gradsize.width;\r
180     AutoBuffer<float> _dbuf(width*4);\r
181     float* dbuf = _dbuf;\r
182     Mat Dx(1, width, CV_32F, dbuf);\r
183     Mat Dy(1, width, CV_32F, dbuf + width);\r
184     Mat Mag(1, width, CV_32F, dbuf + width*2);\r
185     Mat Angle(1, width, CV_32F, dbuf + width*3);\r
186 \r
187     int _nbins = nbins;\r
188     float angleScale = (float)(_nbins/CV_PI);\r
189 \r
190     for( y = 0; y < gradsize.height; y++ )\r
191     {\r
192         const uchar* imgPtr = img.data + img.step*ymap[y];\r
193         const uchar* prevPtr = img.data + img.step*ymap[y-1];\r
194         const uchar* nextPtr = img.data + img.step*ymap[y+1];\r
195         float* gradPtr = (float*)grad.ptr(y);\r
196         uchar* qanglePtr = (uchar*)qangle.ptr(y);\r
197         \r
198         if( cn == 1 )\r
199         {\r
200             for( x = 0; x < width; x++ )\r
201             {\r
202                 int x1 = xmap[x];\r
203                 dbuf[x] = (float)(lut[imgPtr[xmap[x+1]]] - lut[imgPtr[xmap[x-1]]]);\r
204                 dbuf[width + x] = (float)(lut[nextPtr[x1]] - lut[prevPtr[x1]]);\r
205             }\r
206         }\r
207         else\r
208         {\r
209             for( x = 0; x < width; x++ )\r
210             {\r
211                 int x1 = xmap[x]*3;\r
212                 const uchar* p2 = imgPtr + xmap[x+1]*3;\r
213                 const uchar* p0 = imgPtr + xmap[x-1]*3;\r
214                 float dx0, dy0, dx, dy, mag0, mag;\r
215 \r
216                 dx0 = lut[p2[2]] - lut[p0[2]];\r
217                 dy0 = lut[nextPtr[x1+2]] - lut[prevPtr[x1+2]];\r
218                 mag0 = dx0*dx0 + dy0*dy0;\r
219                 \r
220                 dx = lut[p2[1]] - lut[p0[1]];\r
221                 dy = lut[nextPtr[x1+1]] - lut[prevPtr[x1+1]];\r
222                 mag = dx*dx + dy*dy;\r
223                 \r
224                 if( mag0 < mag )\r
225                 {\r
226                     dx0 = dx;\r
227                     dy0 = dy;\r
228                     mag0 = mag;\r
229                 }\r
230                 \r
231                 dx = lut[p2[0]] - lut[p0[0]];\r
232                 dy = lut[nextPtr[x1]] - lut[prevPtr[x1]];\r
233                 mag = dx*dx + dy*dy;\r
234                 \r
235                 if( mag0 < mag )\r
236                 {\r
237                     dx0 = dx;\r
238                     dy0 = dy;\r
239                     mag0 = mag;\r
240                 }\r
241 \r
242                 dbuf[x] = dx0;\r
243                 dbuf[x+width] = dy0;\r
244             }\r
245         }\r
246         \r
247         cartToPolar( Dx, Dy, Mag, Angle, false );\r
248 \r
249         for( x = 0; x < width; x++ )\r
250         {\r
251             float mag = dbuf[x+width*2], angle = dbuf[x+width*3]*angleScale - 0.5f;\r
252             int hidx = cvFloor(angle);\r
253             angle -= hidx;\r
254             if( hidx < 0 )\r
255                 hidx += _nbins;\r
256             else if( hidx >= _nbins )\r
257                 hidx -= _nbins;\r
258             assert( (unsigned)hidx < (unsigned)_nbins );\r
259 \r
260             qanglePtr[x*2] = (uchar)hidx;\r
261             hidx++;\r
262             hidx &= hidx < _nbins ? -1 : 0;\r
263             qanglePtr[x*2+1] = (uchar)hidx;\r
264             gradPtr[x*2] = mag*(1.f - angle);\r
265             gradPtr[x*2+1] = mag*angle;\r
266         }\r
267     }\r
268 }\r
269 \r
270 void HOGDescriptor::normalizeBlockHistogram(Vector<float>& _hist) const\r
271 {\r
272     float* hist = &_hist[0];\r
273     size_t i, sz = _hist.size();\r
274 \r
275     float sum = 0;\r
276     for( i = 0; i < sz; i++ )\r
277         sum += hist[i]*hist[i];\r
278     float scale = 1.f/(std::sqrt(sum)+sz*0.1f), thresh = (float)L2HysThreshold;\r
279     for( i = 0, sum = 0; i < sz; i++ )\r
280     {\r
281         hist[i] = std::min(hist[i]*scale, thresh);\r
282         sum += hist[i]*hist[i];\r
283     }\r
284     scale = 1.f/(std::sqrt(sum)+1e-3f);\r
285     for( i = 0; i < sz; i++ )\r
286         hist[i] *= scale;\r
287 }\r
288 \r
289 \r
290 struct HOGCache\r
291 {\r
292     struct BlockData\r
293     {\r
294         int histOfs;\r
295         Point imgOffset;\r
296     };\r
297 \r
298     struct PixData\r
299     {\r
300         size_t gradOfs, qangleOfs;\r
301         int histOfs[4];\r
302         float histWeights[4];\r
303         float gradWeight;\r
304     };\r
305 \r
306     HOGCache();\r
307     HOGCache(const HOGDescriptor* descriptor,\r
308         const Mat& img, Size paddingTL, Size paddingBR,\r
309         bool useCache, Size cacheStride);\r
310     virtual ~HOGCache() {};\r
311     virtual void init(const HOGDescriptor* descriptor,\r
312         const Mat& img, Size paddingTL, Size paddingBR,\r
313         bool useCache, Size cacheStride);\r
314 \r
315     Size windowsInImage(Size imageSize, Size winStride) const;\r
316     Rect getWindow(Size imageSize, Size winStride, int idx) const;\r
317 \r
318     const float* getBlock(Point pt, float* buf);\r
319     \r
320     Vector<PixData> pixData;\r
321     Vector<BlockData> blockData;\r
322 \r
323     bool useCache;\r
324     Vector<int> ymaxCached;\r
325     Size winSize, cacheStride;\r
326     Size nblocks, ncells;\r
327     int blockHistogramSize;\r
328     int count1, count2, count4;\r
329     Point imgoffset;\r
330     Mat_<float> blockCache;\r
331     Mat_<uchar> blockCacheFlags;\r
332 \r
333     Mat grad, qangle;\r
334     const HOGDescriptor* descriptor;\r
335 };\r
336 \r
337 \r
338 HOGCache::HOGCache()\r
339 {\r
340     useCache = false;\r
341     blockHistogramSize = count1 = count2 = count4 = 0;\r
342     descriptor = 0;\r
343 }\r
344 \r
345 HOGCache::HOGCache(const HOGDescriptor* _descriptor,\r
346         const Mat& _img, Size _paddingTL, Size _paddingBR,\r
347         bool _useCache, Size _cacheStride)\r
348 {\r
349     init(_descriptor, _img, _paddingTL, _paddingBR, _useCache, _cacheStride);\r
350 }\r
351 \r
352 void HOGCache::init(const HOGDescriptor* _descriptor,\r
353         const Mat& _img, Size _paddingTL, Size _paddingBR,\r
354         bool _useCache, Size _cacheStride)\r
355 {\r
356     descriptor = _descriptor;\r
357     cacheStride = _cacheStride;\r
358     useCache = _useCache;\r
359 \r
360     descriptor->computeGradient(_img, grad, qangle, _paddingTL, _paddingBR);\r
361     imgoffset = _paddingTL;\r
362 \r
363     winSize = descriptor->winSize;\r
364     Size blockSize = descriptor->blockSize;\r
365     Size blockStride = descriptor->blockStride;\r
366     Size cellSize = descriptor->cellSize;\r
367     Size winSize = descriptor->winSize;\r
368     int i, j, nbins = descriptor->nbins;\r
369     int rawBlockSize = blockSize.width*blockSize.height;\r
370 \r
371     nblocks = Size((winSize.width - blockSize.width)/blockStride.width + 1,\r
372                    (winSize.height - blockSize.height)/blockStride.height + 1);\r
373     ncells = Size(blockSize.width/cellSize.width, blockSize.height/cellSize.height);\r
374     blockHistogramSize = ncells.width*ncells.height*nbins;\r
375 \r
376     if( useCache )\r
377     {\r
378         Size cacheSize((grad.cols - blockSize.width)/cacheStride.width+1,\r
379                        (winSize.height/cacheStride.height)+1);\r
380         blockCache.create(cacheSize.height, cacheSize.width*blockHistogramSize);\r
381         blockCacheFlags.create(cacheSize);\r
382         size_t i, cacheRows = blockCache.rows;\r
383         ymaxCached.resize(cacheRows);\r
384         for( i = 0; i < cacheRows; i++ )\r
385             ymaxCached[i] = -1;\r
386     }\r
387 \r
388     Mat_<float> weights(blockSize);\r
389     float sigma = (float)descriptor->getWinSigma();\r
390     float scale = 1.f/(sigma*sigma*2);\r
391 \r
392     for(i = 0; i < blockSize.height; i++)\r
393         for(j = 0; j < blockSize.width; j++)\r
394         {\r
395             float di = i - blockSize.height*0.5f;\r
396             float dj = j - blockSize.width*0.5f;\r
397             weights(i,j) = std::exp(-(di*di + dj*dj)*scale);\r
398         }\r
399 \r
400     blockData.resize(nblocks.width*nblocks.height);\r
401     pixData.resize(rawBlockSize*3);\r
402 \r
403     // Initialize 2 lookup tables, pixData & blockData.\r
404     // Here is why:\r
405     //\r
406     // The detection algorithm runs in 4 nested loops (at each pyramid layer):\r
407     //  loop over the windows within the input image\r
408     //    loop over the blocks within each window\r
409     //      loop over the cells within each block\r
410     //        loop over the pixels in each cell\r
411     //\r
412     // As each of the loops runs over a 2-dimensional array,\r
413     // we could get 8(!) nested loops in total, which is very-very slow.\r
414     //\r
415     // To speed the things up, we do the following:\r
416     //   1. loop over windows is unrolled in the HOGDescriptor::{compute|detect} methods;\r
417     //         inside we compute the current search window using getWindow() method.\r
418     //         Yes, it involves some overhead (function call + couple of divisions),\r
419     //         but it's tiny in fact.\r
420     //   2. loop over the blocks is also unrolled. Inside we use pre-computed blockData[j]\r
421     //         to set up gradient and histogram pointers.\r
422     //   3. loops over cells and pixels in each cell are merged\r
423     //       (since there is no overlap between cells, each pixel in the block is processed once)\r
424     //      and also unrolled. Inside we use PixData[k] to access the gradient values and\r
425     //      update the histogram\r
426     //\r
427     count1 = count2 = count4 = 0;\r
428     for( j = 0; j < blockSize.width; j++ )\r
429         for( i = 0; i < blockSize.height; i++ )\r
430         {\r
431             PixData* data = 0;\r
432             float cellX = (j+0.5f)/cellSize.width - 0.5f;\r
433             float cellY = (i+0.5f)/cellSize.height - 0.5f;\r
434             int icellX0 = cvFloor(cellX);\r
435             int icellY0 = cvFloor(cellY);\r
436             int icellX1 = icellX0 + 1, icellY1 = icellY0 + 1;\r
437             cellX -= icellX0;\r
438             cellY -= icellY0;\r
439             \r
440             if( (unsigned)icellX0 < (unsigned)ncells.width &&\r
441                 (unsigned)icellX1 < (unsigned)ncells.width )\r
442             {\r
443                 if( (unsigned)icellY0 < (unsigned)ncells.height &&\r
444                     (unsigned)icellY1 < (unsigned)ncells.height )\r
445                 {\r
446                     data = &pixData[rawBlockSize*2 + (count4++)];\r
447                     data->histOfs[0] = (icellX0*ncells.height + icellY0)*nbins;\r
448                     data->histWeights[0] = (1.f - cellX)*(1.f - cellY);\r
449                     data->histOfs[1] = (icellX1*ncells.height + icellY0)*nbins;\r
450                     data->histWeights[1] = cellX*(1.f - cellY);\r
451                     data->histOfs[2] = (icellX0*ncells.height + icellY1)*nbins;\r
452                     data->histWeights[2] = (1.f - cellX)*cellY;\r
453                     data->histOfs[3] = (icellX1*ncells.height + icellY1)*nbins;\r
454                     data->histWeights[3] = cellX*cellY;\r
455                 }\r
456                 else\r
457                 {\r
458                     data = &pixData[rawBlockSize + (count2++)];\r
459                     if( (unsigned)icellY0 < (unsigned)ncells.height )\r
460                     {\r
461                         icellY1 = icellY0;\r
462                         cellY = 1.f - cellY;\r
463                     }\r
464                     data->histOfs[0] = (icellX0*ncells.height + icellY1)*nbins;\r
465                     data->histWeights[0] = (1.f - cellX)*cellY;\r
466                     data->histOfs[1] = (icellX1*ncells.height + icellY1)*nbins;\r
467                     data->histWeights[1] = cellX*cellY;\r
468                     data->histOfs[2] = data->histOfs[3] = 0;\r
469                     data->histWeights[2] = data->histWeights[3] = 0;\r
470                 }\r
471             }\r
472             else\r
473             {\r
474                 if( (unsigned)icellX0 < (unsigned)ncells.width )\r
475                 {\r
476                     icellX1 = icellX0;\r
477                     cellX = 1.f - cellX;\r
478                 }\r
479 \r
480                 if( (unsigned)icellY0 < (unsigned)ncells.height &&\r
481                     (unsigned)icellY1 < (unsigned)ncells.height )\r
482                 {\r
483                     data = &pixData[rawBlockSize + (count2++)];\r
484                     data->histOfs[0] = (icellX1*ncells.height + icellY0)*nbins;\r
485                     data->histWeights[0] = cellX*(1.f - cellY);\r
486                     data->histOfs[1] = (icellX1*ncells.height + icellY1)*nbins;\r
487                     data->histWeights[1] = cellX*cellY;\r
488                     data->histOfs[2] = data->histOfs[3] = 0;\r
489                     data->histWeights[2] = data->histWeights[3] = 0;\r
490                 }\r
491                 else\r
492                 {\r
493                     data = &pixData[count1++];\r
494                     if( (unsigned)icellY0 < (unsigned)ncells.height )\r
495                     {\r
496                         icellY1 = icellY0;\r
497                         cellY = 1.f - cellY;\r
498                     }\r
499                     data->histOfs[0] = (icellX1*ncells.height + icellY1)*nbins;\r
500                     data->histWeights[0] = cellX*cellY;\r
501                     data->histOfs[1] = data->histOfs[2] = data->histOfs[3] = 0;\r
502                     data->histWeights[1] = data->histWeights[2] = data->histWeights[3] = 0;\r
503                 }\r
504             }\r
505             data->gradOfs = (grad.cols*i + j)*2;\r
506             data->qangleOfs = (qangle.cols*i + j)*2;\r
507             data->gradWeight = weights(i,j);\r
508         }\r
509 \r
510     assert( count1 + count2 + count4 == rawBlockSize );\r
511     // defragment pixData\r
512     for( j = 0; j < count2; j++ )\r
513         pixData[j + count1] = pixData[j + rawBlockSize];\r
514     for( j = 0; j < count4; j++ )\r
515         pixData[j + count1 + count2] = pixData[j + rawBlockSize*2];\r
516     count2 += count1;\r
517     count4 += count2;\r
518 \r
519     // initialize blockData\r
520     for( j = 0; j < nblocks.width; j++ )\r
521         for( i = 0; i < nblocks.height; i++ )\r
522         {\r
523             BlockData& data = blockData[j*nblocks.height + i];\r
524             data.histOfs = (j*nblocks.height + i)*blockHistogramSize;\r
525             data.imgOffset = Point(j*blockStride.width,i*blockStride.height);\r
526         }\r
527 }\r
528 \r
529 \r
530 const float* HOGCache::getBlock(Point pt, float* buf)\r
531 {\r
532     float* blockHist = buf;\r
533     assert(descriptor != 0);\r
534 \r
535     Size blockSize = descriptor->blockSize;\r
536     pt += imgoffset;\r
537 \r
538     CV_Assert( (unsigned)pt.x <= (unsigned)(grad.cols - blockSize.width) &&\r
539                (unsigned)pt.y <= (unsigned)(grad.rows - blockSize.height) );\r
540     \r
541     if( useCache )\r
542     {\r
543         CV_Assert( pt.x % cacheStride.width == 0 &&\r
544                    pt.y % cacheStride.height == 0 );\r
545         Point cacheIdx(pt.x/cacheStride.width,\r
546                       (pt.y/cacheStride.height) % blockCache.rows);\r
547         if( pt.y != ymaxCached[cacheIdx.y] )\r
548         {\r
549             Mat_<uchar> cacheRow = blockCacheFlags.row(cacheIdx.y);\r
550             cacheRow = (uchar)0;\r
551             ymaxCached[cacheIdx.y] = pt.y;\r
552         }\r
553 \r
554         blockHist = &blockCache[cacheIdx.y][cacheIdx.x*blockHistogramSize];\r
555         uchar& computedFlag = blockCacheFlags(cacheIdx.y, cacheIdx.x);\r
556         if( computedFlag != 0 )\r
557             return blockHist;\r
558         computedFlag = (uchar)1; // set it at once, before actual computing\r
559     }\r
560 \r
561     int k, C1 = count1, C2 = count2, C4 = count4;\r
562     const float* gradPtr = (const float*)(grad.data + grad.step*pt.y) + pt.x*2;\r
563     const uchar* qanglePtr = qangle.data + qangle.step*pt.y + pt.x*2;\r
564 \r
565     CV_Assert( blockHist != 0 );\r
566 \r
567     for( k = 0; k < blockHistogramSize; k++ )\r
568         blockHist[k] = 0.f;\r
569     \r
570     const PixData* _pixData = &pixData[0];\r
571 \r
572     for( k = 0; k < C1; k++ )\r
573     {\r
574         const PixData& pk = _pixData[k];\r
575         const float* a = gradPtr + pk.gradOfs;\r
576         float w = pk.gradWeight*pk.histWeights[0];\r
577         const uchar* h = qanglePtr + pk.qangleOfs;\r
578         int h0 = h[0], h1 = h[1];\r
579         float* hist = blockHist + pk.histOfs[0];\r
580         float t0 = hist[h0] + a[0]*w;\r
581         float t1 = hist[h1] + a[1]*w;\r
582         hist[h0] = t0; hist[h1] = t1;\r
583     }\r
584 \r
585     for( ; k < C2; k++ )\r
586     {\r
587         const PixData& pk = _pixData[k];\r
588         const float* a = gradPtr + pk.gradOfs;\r
589         float w, t0, t1, a0 = a[0], a1 = a[1];\r
590         const uchar* h = qanglePtr + pk.qangleOfs;\r
591         int h0 = h[0], h1 = h[1];\r
592         \r
593         float* hist = blockHist + pk.histOfs[0];\r
594         w = pk.gradWeight*pk.histWeights[0];\r
595         t0 = hist[h0] + a0*w;\r
596         t1 = hist[h1] + a1*w;\r
597         hist[h0] = t0; hist[h1] = t1;\r
598         \r
599         hist = blockHist + pk.histOfs[1];\r
600         w = pk.gradWeight*pk.histWeights[1];\r
601         t0 = hist[h0] + a0*w;\r
602         t1 = hist[h1] + a1*w;\r
603         hist[h0] = t0; hist[h1] = t1;\r
604     }\r
605 \r
606     for( ; k < C4; k++ )\r
607     {\r
608         const PixData& pk = _pixData[k];\r
609         const float* a = gradPtr + pk.gradOfs;\r
610         float w, t0, t1, a0 = a[0], a1 = a[1];\r
611         const uchar* h = qanglePtr + pk.qangleOfs;\r
612         int h0 = h[0], h1 = h[1];\r
613         \r
614         float* hist = blockHist + pk.histOfs[0];\r
615         w = pk.gradWeight*pk.histWeights[0];\r
616         t0 = hist[h0] + a0*w;\r
617         t1 = hist[h1] + a1*w;\r
618         hist[h0] = t0; hist[h1] = t1;\r
619         \r
620         hist = blockHist + pk.histOfs[1];\r
621         w = pk.gradWeight*pk.histWeights[1];\r
622         t0 = hist[h0] + a0*w;\r
623         t1 = hist[h1] + a1*w;\r
624         hist[h0] = t0; hist[h1] = t1;\r
625 \r
626         hist = blockHist + pk.histOfs[2];\r
627         w = pk.gradWeight*pk.histWeights[2];\r
628         t0 = hist[h0] + a0*w;\r
629         t1 = hist[h1] + a1*w;\r
630         hist[h0] = t0; hist[h1] = t1;\r
631 \r
632         hist = blockHist + pk.histOfs[3];\r
633         w = pk.gradWeight*pk.histWeights[3];\r
634         t0 = hist[h0] + a0*w;\r
635         t1 = hist[h1] + a1*w;\r
636         hist[h0] = t0; hist[h1] = t1;\r
637     }\r
638 \r
639     // normalize the block histogram\r
640     Vector<float> d(blockHist, (size_t)blockHistogramSize);\r
641     descriptor->normalizeBlockHistogram(d);\r
642 \r
643     return blockHist;\r
644 }\r
645 \r
646 \r
647 Size HOGCache::windowsInImage(Size imageSize, Size winStride) const\r
648 {\r
649     return Size((imageSize.width - winSize.width)/winStride.width + 1,\r
650                 (imageSize.height - winSize.height)/winStride.height + 1);\r
651 }\r
652 \r
653 Rect HOGCache::getWindow(Size imageSize, Size winStride, int idx) const\r
654 {\r
655     int nwindowsX = (imageSize.width - winSize.width)/winStride.width + 1;\r
656     int y = idx / nwindowsX;\r
657     int x = idx - nwindowsX*y;\r
658     return Rect( x*winStride.width, y*winStride.height, winSize.width, winSize.height );\r
659 }\r
660 \r
661 \r
662 void HOGDescriptor::compute(const Mat& img, Vector<float>& descriptors,\r
663                             Size winStride, Size padding,\r
664                             const Vector<Point>& locations) const\r
665 {\r
666     if( winStride == Size() )\r
667         winStride = cellSize;\r
668     Size cacheStride(gcd(winStride.width, blockStride.width),\r
669                      gcd(winStride.height, blockStride.height));\r
670     size_t nwindows = locations.size();\r
671     padding.width = (int)alignSize(std::max(padding.width, 0), cacheStride.width);\r
672     padding.height = (int)alignSize(std::max(padding.height, 0), cacheStride.height);\r
673     Size paddedImgSize(img.cols + padding.width*2, img.rows + padding.height*2);\r
674     \r
675     HOGCache cache(this, img, padding, padding, nwindows == 0, cacheStride);\r
676 \r
677     if( !nwindows )\r
678         nwindows = cache.windowsInImage(paddedImgSize, winStride).area();\r
679 \r
680     const HOGCache::BlockData* blockData = &cache.blockData[0];\r
681 \r
682     int nblocks = cache.nblocks.area();\r
683     int blockHistogramSize = cache.blockHistogramSize;\r
684     size_t dsize = getDescriptorSize();\r
685     descriptors.resize(dsize*nwindows);\r
686 \r
687     for( size_t i = 0; i < nwindows; i++ )\r
688     {\r
689         float* descriptor = &descriptors[i*dsize];\r
690        \r
691         Point pt0;\r
692         if( !locations.empty() )\r
693         {\r
694             pt0 = locations[i];\r
695             if( pt0.x < -padding.width || pt0.x > img.cols + padding.width - winSize.width ||\r
696                 pt0.y < -padding.height || pt0.y > img.rows + padding.height - winSize.height )\r
697                 continue;\r
698         }\r
699         else\r
700         {\r
701             pt0 = cache.getWindow(paddedImgSize, winStride, (int)i).tl() - Point(padding);\r
702             CV_Assert(pt0.x % cacheStride.width == 0 && pt0.y % cacheStride.height == 0);\r
703         }\r
704 \r
705         for( int j = 0; j < nblocks; j++ )\r
706         {\r
707             const HOGCache::BlockData& bj = blockData[j];\r
708             Point pt = pt0 + bj.imgOffset;\r
709 \r
710             float* dst = descriptor + bj.histOfs;\r
711             const float* src = cache.getBlock(pt, dst);\r
712             if( src != dst )\r
713                 for( int k = 0; k < blockHistogramSize; k++ )\r
714                     dst[k] = src[k];\r
715         }\r
716     }\r
717 }\r
718 \r
719 \r
720 void HOGDescriptor::detect(const Mat& img,\r
721     Vector<Point>& hits, double hitThreshold,\r
722     Size winStride, Size padding, const Vector<Point>& locations) const\r
723 {\r
724     hits.clear();\r
725     if( svmDetector.empty() )\r
726         return;\r
727     \r
728     if( winStride == Size() )\r
729         winStride = cellSize;\r
730     Size cacheStride(gcd(winStride.width, blockStride.width),\r
731                      gcd(winStride.height, blockStride.height));\r
732     size_t nwindows = locations.size();\r
733     padding.width = (int)alignSize(std::max(padding.width, 0), cacheStride.width);\r
734     padding.height = (int)alignSize(std::max(padding.height, 0), cacheStride.height);\r
735     Size paddedImgSize(img.cols + padding.width*2, img.rows + padding.height*2);\r
736     \r
737     HOGCache cache(this, img, padding, padding, nwindows == 0, cacheStride);\r
738 \r
739     if( !nwindows )\r
740         nwindows = cache.windowsInImage(paddedImgSize, winStride).area();\r
741 \r
742     const HOGCache::BlockData* blockData = &cache.blockData[0];\r
743 \r
744     int nblocks = cache.nblocks.area();\r
745     int blockHistogramSize = cache.blockHistogramSize;\r
746     size_t dsize = getDescriptorSize();\r
747 \r
748     double rho = svmDetector.size() > dsize ? svmDetector[dsize] : 0;\r
749     Vector<float> blockHist(blockHistogramSize);\r
750 \r
751     for( size_t i = 0; i < nwindows; i++ )\r
752     {\r
753         Point pt0;\r
754         if( !locations.empty() )\r
755         {\r
756             pt0 = locations[i];\r
757             if( pt0.x < -padding.width || pt0.x > img.cols + padding.width - winSize.width ||\r
758                 pt0.y < -padding.height || pt0.y > img.rows + padding.height - winSize.height )\r
759                 continue;\r
760         }\r
761         else\r
762         {\r
763             pt0 = cache.getWindow(paddedImgSize, winStride, (int)i).tl() - Point(padding);\r
764             CV_Assert(pt0.x % cacheStride.width == 0 && pt0.y % cacheStride.height == 0);\r
765         }\r
766         double s = rho;\r
767         const float* svmVec = &svmDetector[0];\r
768         int j, k;\r
769         for( j = 0; j < nblocks; j++, svmVec += blockHistogramSize )\r
770         {\r
771             const HOGCache::BlockData& bj = blockData[j];\r
772             Point pt = pt0 + bj.imgOffset;\r
773 \r
774             const float* vec = cache.getBlock(pt, &blockHist[0]);\r
775             for( k = 0; k <= blockHistogramSize - 4; k += 4 )\r
776                 s += vec[k]*svmVec[k] + vec[k+1]*svmVec[k+1] +\r
777                     vec[k+2]*svmVec[k+2] + vec[k+3]*svmVec[k+3];\r
778             for( ; k < blockHistogramSize; k++ )\r
779                 s += vec[k]*svmVec[k];\r
780         }\r
781         if( s >= hitThreshold )\r
782             hits.push_back(pt0);\r
783     }\r
784 }\r
785 \r
786 \r
787 struct SimilarRects\r
788 {\r
789     SimilarRects(double _eps) : eps(_eps) {}\r
790     inline bool operator()(const Rect& r1, const Rect& r2) const\r
791     {\r
792         double delta = eps*(std::min(r1.width, r2.width) + std::min(r1.height, r2.height))*0.5;\r
793         return std::abs(r1.x - r2.x) <= delta &&\r
794             std::abs(r1.y - r2.y) <= delta &&\r
795             std::abs(r1.x + r1.width - r2.x - r2.width) <= delta &&\r
796             std::abs(r1.y + r1.height - r2.y - r2.height) <= delta;\r
797     }\r
798     double eps;\r
799 };\r
800 \r
801 struct HOGThreadData\r
802 {\r
803     Vector<Rect> rectangles;\r
804     Vector<Point> locations;\r
805     Mat smallerImgBuf;\r
806 };\r
807 \r
808 void HOGDescriptor::detectMultiScale(\r
809     const Mat& img, Vector<Rect>& foundLocations,\r
810     double hitThreshold, Size winStride, Size padding,\r
811     double scale0, int groupThreshold) const\r
812 {\r
813     double scale = 1.;\r
814     foundLocations.clear();\r
815     int i, levels = 0;\r
816     const int maxLevels = 64;\r
817 \r
818     int t, nthreads = getNumThreads();\r
819     Vector<HOGThreadData> threadData(nthreads);\r
820 \r
821     for( t = 0; t < nthreads; t++ )\r
822         threadData[t].smallerImgBuf.create(img.size(), img.type());\r
823 \r
824     Vector<double> levelScale(maxLevels);\r
825     for( levels = 0; levels < maxLevels; levels++ )\r
826     {\r
827         levelScale[levels] = scale;\r
828         if( cvRound(img.cols/scale) < winSize.width ||\r
829             cvRound(img.rows/scale) < winSize.height ||\r
830             scale0 <= 1 )\r
831             break;\r
832         scale *= scale0;\r
833     }\r
834     levels = std::max(levels, 1);\r
835     levelScale.resize(levels);\r
836 \r
837     {\r
838 #ifdef _OPENMP\r
839     #pragma omp parallel for num_threads(nthreads) schedule(dynamic)\r
840 #endif // _OPENMP\r
841     for( i = 0; i < levels; i++ )\r
842     {\r
843         HOGThreadData& tdata = threadData[getThreadNum()];\r
844         double scale = levelScale[i];\r
845         Size sz(cvRound(img.cols/scale), cvRound(img.rows/scale));\r
846         Mat smallerImg(sz, img.type(), tdata.smallerImgBuf.data);\r
847         if( sz == img.size() )\r
848             smallerImg = Mat(sz, img.type(), img.data, img.step);\r
849         else\r
850             resize(img, smallerImg, sz);\r
851         detect(smallerImg, tdata.locations, hitThreshold, winStride, padding);\r
852         Size scaledWinSize = Size(cvRound(winSize.width*scale), cvRound(winSize.height*scale));\r
853         for( size_t j = 0; j < tdata.locations.size(); j++ )\r
854             tdata.rectangles.push_back(Rect(\r
855                 cvRound(tdata.locations[j].x*scale),\r
856                 cvRound(tdata.locations[j].y*scale),\r
857                 scaledWinSize.width, scaledWinSize.height));\r
858     }\r
859     }\r
860 \r
861     for( t = 0; t < nthreads; t++ )\r
862     {\r
863         HOGThreadData& tdata = threadData[t];\r
864         std::copy(tdata.rectangles.begin(), tdata.rectangles.end(),\r
865             std::back_inserter(foundLocations));\r
866     }\r
867 \r
868     if( groupThreshold <= 0 )\r
869         return;\r
870 \r
871     Vector<int> labels;\r
872     int nclasses = partition(foundLocations, labels, SimilarRects(0.2));\r
873     Vector<Rect> rrects(nclasses);\r
874     Vector<int> rweights(nclasses, 0);\r
875     int nlabels = (int)labels.size();\r
876     for( i = 0; i < nlabels; i++ )\r
877     {\r
878         int cls = labels[i];\r
879         rrects[cls].x += foundLocations[i].x;\r
880         rrects[cls].y += foundLocations[i].y;\r
881         rrects[cls].width += foundLocations[i].width;\r
882         rrects[cls].height += foundLocations[i].height;\r
883         rweights[cls]++;\r
884     }\r
885     foundLocations.clear();\r
886     for( i = 0; i < nclasses; i++ )\r
887     {\r
888         Rect r = rrects[i];\r
889         if( rweights[i] <= groupThreshold )\r
890             continue;\r
891         float s = 1.f/rweights[i];\r
892         foundLocations.push_back(\r
893             Rect(cvRound(r.x*s), cvRound(r.y*s), cvRound(r.width*s), cvRound(r.height*s)));\r
894     }\r
895 }\r
896 \r
897 Vector<float> HOGDescriptor::getDefaultPeopleDetector()\r
898 {\r
899     static const float detector[] = {\r
900        0.05359386f, -0.14721455f, -0.05532170f, 0.05077307f,\r
901        0.11547081f, -0.04268804f, 0.04635834f, -0.05468199f, 0.08232084f,\r
902        0.10424068f, -0.02294518f, 0.01108519f, 0.01378693f, 0.11193510f,\r
903        0.01268418f, 0.08528346f, -0.06309239f, 0.13054633f, 0.08100729f,\r
904        -0.05209739f, -0.04315529f, 0.09341384f, 0.11035026f, -0.07596218f,\r
905        -0.05517511f, -0.04465296f, 0.02947334f, 0.04555536f,\r
906        -3.55954492e-003f, 0.07818956f, 0.07730991f, 0.07890715f, 0.06222893f,\r
907        0.09001380f, -0.03574381f, 0.03414327f, 0.05677258f, -0.04773581f,\r
908        0.03746637f, -0.03521175f, 0.06955440f, -0.03849038f, 0.01052293f,\r
909        0.01736112f, 0.10867710f, 0.08748853f, 3.29739624e-003f, 0.10907028f,\r
910        0.07913758f, 0.10393070f, 0.02091867f, 0.11594022f, 0.13182420f,\r
911        0.09879354f, 0.05362710f, -0.06745391f, -7.01260753e-003f,\r
912        5.24702156e-003f, 0.03236255f, 0.01407916f, 0.02207983f, 0.02537322f,\r
913        0.04547948f, 0.07200756f, 0.03129894f, -0.06274468f, 0.02107014f,\r
914        0.06035208f, 0.08636236f, 4.53164103e-003f, 0.02193363f, 0.02309801f,\r
915        0.05568166f, -0.02645093f, 0.04448695f, 0.02837519f, 0.08975694f,\r
916        0.04461516f, 0.08975355f, 0.07514391f, 0.02306982f, 0.10410084f,\r
917        0.06368385f, 0.05943464f, 4.58420580e-003f, 0.05220337f, 0.06675851f,\r
918        0.08358569f, 0.06712101f, 0.06559004f, -0.03930482f, -9.15936660e-003f,\r
919        -0.05897915f, 0.02816453f, 0.05032348f, 0.06780671f, 0.03377650f,\r
920        -6.09417039e-004f, -0.01795146f, -0.03083684f, -0.01302475f,\r
921        -0.02972313f, 7.88706727e-003f, -0.03525961f, -2.50397739e-003f,\r
922        0.05245084f, 0.11791293f, -0.02167498f, 0.05299332f, 0.06640524f,\r
923        0.05190265f, -8.27316567e-003f, 0.03033127f, 0.05842173f,\r
924        -4.01050318e-003f, -6.25105947e-003f, 0.05862958f, -0.02465461f,\r
925        0.05546781f, -0.08228195f, -0.07234028f, 0.04640540f, -0.01308254f,\r
926        -0.02506191f, 0.03100746f, -0.04665651f, -0.04591486f, 0.02949927f,\r
927        0.06035462f, 0.02244646f, -0.01698639f, 0.01040041f, 0.01131170f,\r
928        0.05419579f, -0.02130277f, -0.04321722f, -0.03665198f, 0.01126490f,\r
929        -0.02606488f, -0.02228328f, -0.02255680f, -0.03427236f,\r
930        -7.75165204e-003f, -0.06195229f, 8.21638294e-003f, 0.09535975f,\r
931        -0.03709979f, -0.06942501f, 0.14579427f, -0.05448192f, -0.02055904f,\r
932        0.05747357f, 0.02781788f, -0.07077577f, -0.05178314f, -0.10429011f,\r
933        -0.11235505f, 0.07529039f, -0.07559302f, -0.08786739f, 0.02983843f,\r
934        0.02667585f, 0.01382199f, -0.01797496f, -0.03141199f, -0.02098101f,\r
935        0.09029204f, 0.04955018f, 0.13718739f, 0.11379953f, 1.80019124e-003f,\r
936        -0.04577610f, -1.11108483e-003f, -0.09470536f, -0.11596080f,\r
937        0.04489342f, 0.01784211f, 3.06850672e-003f, 0.10781866f,\r
938        3.36498418e-003f, -0.10842580f, -0.07436839f, -0.10535070f,\r
939        -0.01866805f, 0.16057891f, -5.07316366e-003f, -0.04295658f,\r
940        -5.90488780e-003f, 8.82003549e-003f, -0.01492646f, -0.05029279f,\r
941        -0.12875880f, 8.78831954e-004f, -0.01297184f, -0.07592774f,\r
942        -0.02668831f, -6.93787413e-004f, 0.02406698f, -0.01773298f,\r
943        -0.03855745f, -0.05877856f, 0.03259695f, 0.12826584f, 0.06292590f,\r
944        -4.10733931e-003f, 0.10996531f, 0.01332991f, 0.02088735f, 0.04037504f,\r
945        -0.05210760f, 0.07760046f, 0.06399347f, -0.05751930f, -0.10053057f,\r
946        0.07505023f, -0.02139782f, 0.01796176f, 2.34400877e-003f, -0.04208319f,\r
947        0.07355055f, 0.05093350f, -0.02996780f, -0.02219072f, 0.03355330f,\r
948        0.04418742f, -0.05580705f, -0.05037573f, -0.04548179f, 0.01379514f,\r
949        0.02150671f, -0.02194211f, -0.13682702f, 0.05464972f, 0.01608082f,\r
950        0.05309116f, 0.04701022f, 1.33690401e-003f, 0.07575664f, 0.09625306f,\r
951        8.92647635e-003f, -0.02819123f, 0.10866830f, -0.03439325f,\r
952        -0.07092371f, -0.06004780f, -0.02712298f, -7.07467366e-003f,\r
953        -0.01637020f, 0.01336790f, -0.10313606f, 0.04906582f, -0.05732445f,\r
954        -0.02731079f, 0.01042235f, -0.08340668f, 0.03686501f, 0.06108340f,\r
955        0.01322748f, -0.07809529f, 0.03774724f, -0.03413248f, -0.06096525f,\r
956        -0.04212124f, -0.07982176f, -1.25973229e-003f, -0.03045501f,\r
957        -0.01236493f, -0.06312395f, 0.04789570f, -0.04602066f, 0.08576570f,\r
958        0.02521080f, 0.02988098f, 0.10314583f, 0.07060035f, 0.04520544f,\r
959        -0.04426654f, 0.13146530f, 0.08386490f, 0.02164590f, -2.12280243e-003f,\r
960        -0.03686353f, -0.02074944f, -0.03829959f, -0.01530596f, 0.02689708f,\r
961        0.11867401f, -0.06043470f, -0.02785023f, -0.04775074f, 0.04878745f,\r
962        0.06350956f, 0.03494788f, 0.01467400f, 1.17890188e-003f, 0.04379614f,\r
963        2.03681854e-003f, -0.03958609f, -0.01072688f, 6.43705716e-003f,\r
964        0.02996500f, -0.03418507f, -0.01960307f, -0.01219154f,\r
965        -4.37000440e-003f, -0.02549453f, 0.02646318f, -0.01632513f,\r
966        6.46516960e-003f, -0.01929734f, 4.78711911e-003f, 0.04962371f,\r
967        0.03809111f, 0.07265724f, 0.05758125f, -0.03741554f, 0.01648608f,\r
968        -8.45285598e-003f, 0.03996826f, -0.08185477f, 0.02638875f,\r
969        -0.04026615f, -0.02744674f, -0.04071517f, 1.05096330e-003f,\r
970        -0.04741232f, -0.06733172f, 8.70434940e-003f, -0.02192543f,\r
971        1.35350740e-003f, -0.03056974f, -0.02975521f, -0.02887780f,\r
972        -0.01210713f, -0.04828526f, -0.09066251f, -0.09969629f, -0.03665164f,\r
973        -8.88111943e-004f, -0.06826669f, -0.01866150f, -0.03627640f,\r
974        -0.01408288f, 0.01874239f, -0.02075835f, 0.09145175f, -0.03547291f,\r
975        0.05396780f, 0.04198981f, 0.01301925f, -0.03384354f, -0.12201976f,\r
976        0.06830920f, -0.03715654f, 9.55848210e-003f, 5.05685573e-003f,\r
977        0.05659294f, 3.90764466e-003f, 0.02808490f, -0.05518097f, -0.03711621f,\r
978        -0.02835565f, -0.04420464f, -0.01031947f, 0.01883466f,\r
979        -8.49525444e-003f, -0.09419250f, -0.01269387f, -0.02133371f,\r
980        -0.10190815f, -0.07844430f, 2.43644323e-003f, -4.09610150e-003f,\r
981        0.01202551f, -0.06452291f, -0.10593818f, -0.02464746f, -0.02199699f,\r
982        -0.07401930f, 0.07285886f, 8.87513801e-004f, 9.97662079e-003f,\r
983        8.46779719e-003f, 0.03730333f, -0.02905126f, 0.03573337f, -0.04393689f,\r
984        -0.12014472f, 0.03176554f, -2.76015815e-003f, 0.10824566f, 0.05090732f,\r
985        -3.30179278e-003f, -0.05123822f, 5.04784798e-003f, -0.05664124f,\r
986        -5.99415926e-003f, -0.05341901f, -0.01221393f, 0.01291318f,\r
987        9.91760660e-003f, -7.56987557e-003f, -0.06193124f, -2.24549137e-003f,\r
988        0.01987562f, -0.02018840f, -0.06975540f, -0.06601523f, -0.03349112f,\r
989        -0.08910118f, -0.03371435f, -0.07406893f, -0.02248047f, -0.06159951f,\r
990        2.77751544e-003f, -0.05723337f, -0.04792468f, 0.07518548f,\r
991        2.77279224e-003f, 0.04211938f, 0.03100502f, 0.05278448f, 0.03954679f,\r
992        -0.03006846f, -0.03851741f, -0.02792403f, -0.02875333f, 0.01531280f,\r
993        0.02186953f, -0.01989829f, 2.50679464e-003f, -0.10258728f,\r
994        -0.04785743f, -0.02887216f, 3.85063468e-003f, 0.01112236f,\r
995        8.29218887e-003f, -0.04822981f, -0.04503597f, -0.03713100f,\r
996        -0.06988008f, -0.11002295f, -2.69209221e-003f, 1.85383670e-003f,\r
997        -0.05921049f, -0.06105053f, -0.08458050f, -0.04527602f,\r
998        8.90329306e-004f, -0.05875023f, -2.68602883e-003f, -0.01591195f,\r
999        0.03631859f, 0.05493166f, 0.07300330f, 5.53333294e-003f, 0.06400407f,\r
1000        0.01847740f, -5.76280477e-003f, -0.03210877f, 4.25160583e-003f,\r
1001        0.01166520f, -1.44864211e-003f, 0.02253744f, -0.03367080f, 0.06983195f,\r
1002        -4.22323542e-003f, -8.89401045e-003f, -0.07943393f, 0.05199728f,\r
1003        0.06065201f, 0.04133492f, 1.44032843e-003f, -0.09585235f, -0.03964731f,\r
1004        0.04232114f, 0.01750465f, -0.04487902f, -7.59733608e-003f, 0.02011171f,\r
1005        0.04673622f, 0.09011173f, -0.07869188f, -0.04682482f, -0.05080139f,\r
1006        -3.99383716e-003f, -0.05346331f, 0.01085723f, -0.03599333f,\r
1007        -0.07097908f, 0.03551549f, 0.02680387f, 0.03471529f, 0.01790393f,\r
1008        0.05471273f, 9.62048303e-003f, -0.03180215f, 0.05864431f, 0.02330614f,\r
1009        0.01633144f, -0.05616681f, -0.10245429f, -0.08302189f, 0.07291322f,\r
1010        -0.01972590f, -0.02619633f, -0.02485327f, -0.04627592f,\r
1011        1.48853404e-003f, 0.05514185f, -0.01270860f, -0.01948900f, 0.06373586f,\r
1012        0.05002292f, -0.03009798f, 8.76216311e-003f, -0.02474238f,\r
1013        -0.05504891f, 1.74034527e-003f, -0.03333667f, 0.01524987f, 0.11663762f,\r
1014        -1.32344989e-003f, -0.06608453f, 0.05687166f, -6.89525274e-004f,\r
1015        -0.04402352f, 0.09450210f, -0.04222684f, -0.05360983f, 0.01779531f,\r
1016        0.02561388f, -0.11075410f, -8.77790991e-003f, -0.01099504f,\r
1017        -0.10380266f, 0.03103457f, -0.02105741f, -0.07371717f, 0.05146710f,\r
1018        0.10581432f, -0.08617968f, -0.02892107f, 0.01092199f, 0.14551543f,\r
1019        -2.24320893e-003f, -0.05818033f, -0.07390742f, 0.05701261f,\r
1020        0.12937020f, -0.04986651f, 0.10182415f, 0.05028650f, 0.12515625f,\r
1021        0.09175041f, 0.06404983f, 0.01523394f, 0.09460562f, 0.06106631f,\r
1022        -0.14266998f, -0.02926703f, 0.02762171f, 0.02164151f,\r
1023        -9.58488265e-004f, -0.04231362f, -0.09866509f, 0.04322244f,\r
1024        0.05872034f, -0.04838847f, 0.06319253f, 0.02443798f, -0.03606876f,\r
1025        9.38737206e-003f, 0.04289991f, -0.01027411f, 0.08156885f, 0.08751175f,\r
1026        -0.13191354f, 8.16054735e-003f, -0.01452161f, 0.02952677f, 0.03615945f,\r
1027        -2.09128903e-003f, 0.02246693f, 0.09623287f, 0.09412123f, -0.02924758f,\r
1028        -0.07815186f, -0.02203079f, -2.02566991e-003f, 0.01094733f,\r
1029        -0.01442332f, 0.02838561f, 0.11882371f, 7.28798332e-003f, -0.10345965f,\r
1030        0.07561217f, -0.02049661f, 4.44177445e-003f, 0.01609347f, -0.04893158f,\r
1031        -0.08758243f, -7.67420698e-003f, 0.08862378f, 0.06098121f, 0.06565887f,\r
1032        7.32981879e-003f, 0.03558407f, -0.03874352f, -0.02490055f,\r
1033        -0.06771075f, 0.09939223f, -0.01066077f, 0.01382995f, -0.07289080f,\r
1034        7.47184316e-003f, 0.10621431f, -0.02878659f, 0.02383525f, -0.03274646f,\r
1035        0.02137008f, 0.03837290f, 0.02450992f, -0.04296818f, -0.02895143f,\r
1036        0.05327370f, 0.01499020f, 0.04998732f, 0.12938657f, 0.09391870f,\r
1037        0.04292390f, -0.03359194f, -0.06809492f, 0.01125796f, 0.17290455f,\r
1038        -0.03430733f, -0.06255233f, -0.01813114f, 0.11726857f, -0.06127599f,\r
1039        -0.08677909f, -0.03429872f, 0.04684938f, 0.08161420f, 0.03538774f,\r
1040        0.01833884f, 0.11321855f, 0.03261845f, -0.04826299f, 0.01752407f,\r
1041        -0.01796414f, -0.10464549f, -3.30041884e-003f, 2.29343961e-004f,\r
1042        0.01457292f, -0.02132982f, -0.02602923f, -9.87351313e-003f,\r
1043        0.04273872f, -0.02103316f, -0.07994065f, 0.02614958f, -0.02111666f,\r
1044        -0.06964913f, -0.13453490f, -0.06861878f, -6.09341264e-003f,\r
1045        0.08251446f, 0.15612499f, 2.46531400e-003f, 8.88424646e-003f,\r
1046        -0.04152999f, 0.02054853f, 0.05277953f, -0.03087788f, 0.02817579f,\r
1047        0.13939077f, 0.07641046f, -0.03627627f, -0.03015098f, -0.04041540f,\r
1048        -0.01360690f, -0.06227205f, -0.02738223f, 0.13577610f, 0.15235767f,\r
1049        -0.05392922f, -0.11175954f, 0.02157129f, 0.01146481f, -0.05264937f,\r
1050        -0.06595174f, -0.02749175f, 0.11812254f, 0.17404149f, -0.06137035f,\r
1051        -0.11003478f, -0.01351621f, -0.01745916f, -0.08577441f, -0.04469909f,\r
1052        -0.06106115f, 0.10559758f, 0.20806813f, -0.09174948f, 7.09621934e-004f,\r
1053        0.03579374f, 0.07215115f, 0.02221742f, 0.01827742f, -7.90785067e-003f,\r
1054        0.01489554f, 0.14519960f, -0.06425831f, 0.02990399f, -1.80181325e-003f,\r
1055        -0.01401528f, -0.04171134f, -3.70530109e-003f, -0.09090481f,\r
1056        0.09520713f, 0.08845516f, -0.02651753f, -0.03016730f, 0.02562448f,\r
1057        0.03563816f, -0.03817881f, 0.01433385f, 0.02256983f, 0.02872120f,\r
1058        0.01001934f, -0.06332260f, 0.04338406f, 0.07001807f, -0.04705722f,\r
1059        -0.07318907f, 0.02630457f, 0.03106382f, 0.06648342f, 0.10913180f,\r
1060        -0.01630815f, 0.02910308f, 0.02895109f, 0.08040254f, 0.06969310f,\r
1061        0.06797734f, 6.08639978e-003f, 4.16588830e-003f, 0.08926726f,\r
1062        -0.03123648f, 0.02700146f, 0.01168734f, -0.01631594f, 4.61015804e-003f,\r
1063        8.51359498e-003f, -0.03544224f, 0.03571994f, 4.29766066e-003f,\r
1064        -0.01970077f, -8.79793242e-003f, 0.09607988f, 0.01544222f,\r
1065        -0.03923707f, 0.07308586f, 0.06061262f, 1.31683104e-004f,\r
1066        -7.98222050e-003f, 0.02399261f, -0.06084389f, -0.02743429f,\r
1067        -0.05475523f, -0.04131311f, 0.03559756f, 0.03055342f, 0.02981433f,\r
1068        0.14860515f, 0.01766787f, 0.02945257f, 0.04898238f, 0.01026922f,\r
1069        0.02811658f, 0.08267091f, 0.02732154f, -0.01237693f, 0.11760156f,\r
1070        0.03802063f, -0.03309754f, 5.24957618e-003f, -0.02460510f, 0.02691451f,\r
1071        0.05399988f, -0.10133506f, 0.06385437f, -0.01818005f, 0.02259503f,\r
1072        0.03573135f, 0.01042848f, -0.04153402f, -0.04043029f, 0.01643575f,\r
1073        0.08326677f, 4.61383024e-004f, -0.05308095f, -0.08536223f,\r
1074        -1.61011645e-003f, -0.02163720f, -0.01783352f, 0.03859637f,\r
1075        0.08498885f, -0.01725216f, 0.08625131f, 0.10995087f, 0.09177644f,\r
1076        0.08498347f, 0.07646490f, 0.05580502f, 0.02693516f, 0.09996913f,\r
1077        0.09070327f, 0.06667200f, 0.05873008f, -0.02247842f, 0.07772321f,\r
1078        0.12408436f, 0.12629253f, -8.41997913e-004f, 0.01477783f, 0.09165990f,\r
1079        -2.98401713e-003f, -0.06466447f, -0.07057302f, 2.09516948e-004f,\r
1080        0.02210209f, -0.02158809f, -0.08602506f, -0.02284836f,\r
1081        4.01876355e-003f, 9.56660323e-003f, -0.02073978f, -0.04635138f,\r
1082        -7.59423291e-003f, -0.01377393f, -0.04559359f, -0.13284740f,\r
1083        -0.08671406f, -0.03654395f, 0.01142869f, 0.03287891f, -0.04392983f,\r
1084        0.06142959f, 0.17710890f, 0.10385257f, 0.01329137f, 0.10067633f,\r
1085        0.12450829f, -0.04476709f, 0.09049144f, 0.04589312f, 0.11167907f,\r
1086        0.08587538f, 0.04767583f, 1.67188141e-003f, 0.02359802f, -0.03808852f,\r
1087        0.03126272f, -0.01919029f, -0.05698918f, -0.02365112f, -0.06519032f,\r
1088        -0.05599358f, -0.07097308f, -0.03301812f, -0.04719102f, -0.02566297f,\r
1089        0.01324074f, -0.09230672f, -0.05518232f, -0.04712864f, -0.03380903f,\r
1090        -0.06719479f, 0.01183908f, -0.09326738f, 0.01642865f, 0.03789867f,\r
1091        -6.61567831e-003f, 0.07796386f, 0.07246574f, 0.04706347f, -0.02523437f,\r
1092        -0.01696830f, -0.08068866f, 0.06030888f, 0.10527060f, -0.06611756f,\r
1093        0.02977346f, 0.02621830f, 0.01913855f, -0.08479366f, -0.06322418f,\r
1094        -0.13570616f, -0.07644490f, 9.31900274e-003f, -0.08095149f,\r
1095        -0.10197903f, -0.05204025f, 0.01413151f, -0.07800411f, -0.01885122f,\r
1096        -0.07509381f, -0.10136326f, -0.05212355f, -0.09944065f,\r
1097        -1.33606605e-003f, -0.06342617f, -0.04178550f, -0.12373723f,\r
1098        -0.02832736f, -0.06057501f, 0.05830070f, 0.07604282f, -0.06462587f,\r
1099        8.02447461e-003f, 0.11580125f, 0.12332212f, 0.01978462f,\r
1100        -2.72378162e-003f, 0.05850752f, -0.04674481f, 0.05148062f,\r
1101        -2.62542837e-003f, 0.11253355f, 0.09893716f, 0.09785093f, -0.04659257f,\r
1102        -0.01102429f, -0.07002308f, 0.03088913f, -0.02565549f, -0.07671449f,\r
1103        3.17443861e-003f, -0.10783514f, -0.02314270f, -0.11089555f,\r
1104        -0.01024768f, 0.03116021f, -0.04964825f, 0.02281825f, 5.50005678e-003f,\r
1105        -0.08427856f, -0.14685495f, -0.07719755f, -0.13342668f, -0.04525511f,\r
1106        -0.09914210f, 0.02588859f, 0.03469279f, 0.04664020f, 0.11688190f,\r
1107        0.09647275f, 0.10857815f, -0.01448726f, 0.04299758f, -0.06763151f,\r
1108        1.33257592e-003f, 0.14331576f, 0.07574340f, 0.09166205f, 0.05674926f,\r
1109        0.11325553f, -0.01106494f, 0.02062161f, -0.11484840f, -0.07492137f,\r
1110        -0.02864293f, -0.01275638f, -0.06946032f, -0.10101652f, -0.04113498f,\r
1111        -0.02214783f, -0.01273942f, -0.07480393f, -0.10556041f, -0.07622112f,\r
1112        -0.09988393f, -0.11453961f, -0.12073903f, -0.09412795f, -0.07146588f,\r
1113        -0.04054537f, -0.06127083f, 0.04221122f, 0.07688113f, 0.04099256f,\r
1114        0.12663734f, 0.14683802f, 0.21761774f, 0.12525328f, 0.18431792f,\r
1115        -1.66402373e-003f, 2.37777247e-003f, 0.01445475f, 0.03509416f,\r
1116        0.02654697f, 0.01716739f, 0.05374011f, 0.02944174f, 0.11323927f,\r
1117        -0.01485456f, -0.01611330f, -1.85554172e-003f, -0.01708549f,\r
1118        -0.05435753f, -0.05302101f, 0.05260378f, -0.03582945f,\r
1119        -3.42867890e-004f, 1.36076682e-003f, -0.04436073f, -0.04228432f,\r
1120        0.03281291f, -0.05480836f, -0.10197772f, -0.07206279f, -0.10741059f,\r
1121        -0.02366946f, 0.10278475f, -2.74783419e-003f, -0.03242477f,\r
1122        0.02308955f, 0.02835869f, 0.10348799f, 0.19580358f, 0.10252027f,\r
1123        0.08039929f, 0.05525554f, -0.13250865f, -0.14395352f, 3.13586881e-003f,\r
1124        -0.03387071f, 8.94669443e-003f, 0.05406157f, -4.97324532e-003f,\r
1125        -0.01189114f, 2.82919413e-004f, -0.03901557f, -0.04898705f,\r
1126        0.02164520f, -0.01382906f, -0.01850416f, 0.01869347f, -0.02450060f,\r
1127        0.02291678f, 0.08196463f, 0.03309153f, -0.10629974f, 0.02473924f,\r
1128        0.05344394f, -0.02404823f, -0.03243643f, -5.55244600e-003f,\r
1129        -0.08009996f, 0.02811539f, 0.04235742f, 0.01859004f, 0.04902123f,\r
1130        -0.01438252f, -0.01526853f, 0.02044195f, -0.05008660f, 0.04244113f,\r
1131        0.07611816f, 0.04950470f, -0.06020549f, -4.26026015e-003f, 0.13133512f,\r
1132        -0.01438738f, -0.01958807f, -0.04044152f, -0.12425045f,\r
1133        2.84353318e-003f, -0.05042776f, -0.09121484f, 7.34345755e-003f,\r
1134        0.09388847f, 0.11800314f, 4.72295098e-003f, 4.44378285e-003f,\r
1135        -0.07984917f, -0.03613737f, 0.04490915f, -0.02246483f, 0.04681071f,\r
1136        0.05240871f, 0.02157206f, -0.04603431f, -0.01197929f, -0.02748779f,\r
1137        0.13621049f, 0.08812155f, -0.07802048f, 4.86458559e-003f, -0.01598836f,\r
1138        0.01024450f, -0.03463517f, -0.02304239f, -0.08692665f, 0.06655128f,\r
1139        0.05785803f, -0.12640759f, 0.02307472f, 0.07337402f, 0.07525434f,\r
1140        0.04943763f, -0.02241034f, -0.09978238f, 0.14487994f, -0.06570521f,\r
1141        -0.07855482f, 0.02830222f, -5.29603509e-004f, -0.04669895f,\r
1142        -0.11822784f, -0.12246452f, -0.15365660f, -0.02969127f, 0.08078201f,\r
1143        0.13512598f, 0.11505685f, 0.04740673f, 0.01376022f, -0.05852978f,\r
1144        -0.01537809f, -0.05541119f, 0.02491065f, -0.02870786f, 0.02760978f,\r
1145        0.23836176f, 0.22347429f, 0.10306466f, -0.06919070f, -0.10132039f,\r
1146        -0.20198342f, -0.05040560f, 0.27163076f, 0.36987007f, 0.34540465f,\r
1147        0.29095781f, 0.05649706f, 0.04125737f, 0.07505883f, -0.02737836f,\r
1148        -8.43431335e-003f, 0.07368195f, 0.01653876f, -0.09402955f,\r
1149        -0.09574359f, 0.01474337f, -0.07128561f, -0.03460737f, 0.11438941f,\r
1150        0.13752601f, -0.06385452f, -0.06310338f, 8.19548313e-003f, 0.11622470f,\r
1151        5.05133113e-003f, -0.07602754f, 0.06695660f, 0.25723928f, 0.09037900f,\r
1152        0.28826267f, 0.13165380f, -0.05312614f, -0.02137198f, -0.03442232f,\r
1153        -0.06255679f, 0.03899667f, 0.18391028f, 0.26016650f, 0.03374462f,\r
1154        0.01860465f, 0.19077586f, 0.18160543f, 3.43634398e-003f, -0.03036782f,\r
1155        0.19683038f, 0.35378191f, 0.24968483f, -0.03222649f, 0.28972381f,\r
1156        0.43091634f, 0.30778357f, 0.02335266f, -0.09877399f, -6.85245218e-003f,\r
1157        0.08945240f, -0.08150686f, 0.02792493f, 0.24806842f, 0.17338486f,\r
1158        0.06231801f, -0.10432383f, -0.16653322f, -0.13197899f, -0.08531576f,\r
1159        -0.19271527f, -0.13536365f, 0.22240199f, 0.39219588f, 0.26597717f,\r
1160        -0.01231649f, 0.01016179f, 0.13379875f, 0.12018334f, -0.04852953f,\r
1161        -0.07915270f, 0.07036012f, 3.87723115e-003f, -0.06126805f,\r
1162        -0.15015170f, -0.11406515f, -0.08556531f, -0.07429333f, -0.16115491f,\r
1163        0.13214062f, 0.25691369f, 0.05697750f, 0.06861912f, -6.02903729e-003f,\r
1164        -7.94562511e-003f, 0.04799571f, 0.06695165f, -0.01926842f, 0.06206308f,\r
1165        0.13450983f, -0.06381495f, -2.98370165e-003f, -0.03482971f,\r
1166        7.53991678e-003f, 0.03895611f, 0.11464261f, 0.01669971f,\r
1167        8.27818643e-003f, -7.49160210e-003f, -0.11712562f, -0.10650621f,\r
1168        -0.10353880f, -0.04994106f, -7.65618810e-004f, 0.03023767f,\r
1169        -0.04759270f, -0.07302686f, -0.05825012f, -0.13156348f, -0.10639747f,\r
1170        -0.19393684f, -0.09973683f, -0.07918908f, 4.63177625e-004f,\r
1171        -6.61382044e-004f, 0.15853868f, 0.08561199f, -0.07660093f,\r
1172        -0.08015265f, -0.06164073f, 0.01882577f, -7.29908410e-004f,\r
1173        0.06840892f, 0.03843764f, 0.20274927f, 0.22028814f, -5.26101235e-003f,\r
1174        0.01452435f, -0.06331623f, 0.02865064f, 0.05673740f, 0.12171564f,\r
1175        0.03837196f, 0.03555467f, -0.02662914f, -0.10280123f, -0.06526285f,\r
1176        -0.11066351f, -0.08988424f, -0.10103678f, 8.10526591e-003f,\r
1177        5.95238712e-003f, 0.02617721f, -0.01705742f, -0.10897956f,\r
1178        -0.08004991f, -0.11271993f, -0.06185647f, -0.06103712f, 0.01597041f,\r
1179        -0.05923606f, 0.09410726f, 0.22858568f, 0.03263380f, 0.06772990f,\r
1180        -0.09003516f, 0.01017870f, 0.01931688f, 0.08628357f, -0.01430009f,\r
1181        0.10954945f, 0.16612452f, -0.02434544f, -0.03310068f, -0.04236627f,\r
1182        0.01212392f, -6.15046406e-003f, 0.06954194f, 0.03015283f, 0.01787957f,\r
1183        0.02781667f, -0.05561153f, -8.96244217e-003f, -0.04971489f,\r
1184        0.07510284f, 0.01775282f, 0.05889897f, -0.07981427f, 0.03647643f,\r
1185        -3.73833324e-003f, -0.08894575f, -0.06429435f, -0.08068276f,\r
1186        0.03567704f, -0.07131936f, -7.21910037e-003f, -0.09566668f,\r
1187        0.17886090f, 0.14911725f, 0.02070032f, -0.05017120f, -0.04992622f,\r
1188        0.01570143f, -0.09906903f, 0.06456193f, 0.15329507f, 0.18820767f,\r
1189        0.11689861f, -0.01178513f, -0.02225163f, -0.01905318f, 0.10271224f,\r
1190        -7.27029052e-003f, 0.11664233f, 0.14796902f, 0.07771893f, 0.02400013f,\r
1191        -0.05361797f, -0.01972888f, 0.01376177f, 0.06740040f, -0.06525395f,\r
1192        0.05726178f, -0.02404981f, -0.14018567f, -0.02074987f, -0.04621970f,\r
1193        -0.04688627f, -0.01842059f, 0.07722727f, -0.04852883f, 0.01529004f,\r
1194        -0.19639495f, 0.10817073f, 0.03795860f, -0.09435206f, -0.07984378f,\r
1195        -0.03383440f, 0.11081333f, 0.02237366f, 0.12703256f, 0.21613893f,\r
1196        0.02918790f, 4.66472283e-003f, -0.10274266f, -0.04854131f,\r
1197        -3.46305710e-003f, 0.08652268f, 0.02251546f, 0.09636052f, 0.17180754f,\r
1198        -0.09272388f, 4.59174305e-004f, -0.11723048f, -0.12210111f,\r
1199        -0.15547538f, 0.07218186f, -0.05297846f, 0.03779940f, 0.05150875f,\r
1200        -0.03802310f, 0.03870645f, -0.15250699f, -0.08696499f, -0.02021560f,\r
1201        0.04118926f, -0.15177974f, 0.01577647f, 0.10249301f, 7.50041893e-003f,\r
1202        0.01721806f, -0.06828983f, -0.02397596f, -0.06598977f, -0.04317593f,\r
1203        -0.08064980f, 6.66632550e-003f, 0.03333484f, 0.07093620f, 0.08231064f,\r
1204        -0.06577903f, -0.06698844f, -0.06984019f, -0.06508023f, -0.14145090f,\r
1205        -0.02393239f, 0.06485303f, 8.83263443e-003f, 0.09251080f, -0.07557579f,\r
1206        -0.05067699f, -0.09798748f, -0.06703258f, -0.14056294f, 0.03245994f,\r
1207        0.12554143f, 0.01761621f, 0.12980327f, -0.04081950f, -0.11906909f,\r
1208        -0.14813015f, -0.08376863f, -0.12200681f, 0.04988137f, 0.05424247f,\r
1209        -3.90952639e-003f, 0.03255733f, -0.12717837f, -0.07461493f,\r
1210        -0.05703964f, -0.01736189f, -0.08026433f, -0.05433894f, -0.01719359f,\r
1211        0.02886275f, 0.01772653f, -0.09163518f, 3.57789593e-003f, -0.10129993f,\r
1212        -0.02653764f, -0.08131415f, -0.03847986f, -7.62157550e-004f,\r
1213        0.06486648f, 0.19675669f, -0.04919156f, -0.07059129f, -0.04857785f,\r
1214        -0.01042383f, -0.08328653f, 0.03660302f, -0.03696846f, 0.04969259f,\r
1215        0.08241162f, -0.12514858f, -0.06122676f, -0.03750202f,\r
1216        6.52989605e-003f, -0.10247213f, 0.02568346f, 4.51781414e-003f,\r
1217        -0.03734229f, -0.01131264f, -0.05412074f, 8.89345480e-004f,\r
1218        -0.12388977f, -0.05959237f, -0.12418608f, -0.06151643f, -0.07310260f,\r
1219        0.02441575f, 0.07023528f, -0.07548289f, -7.57147965e-004f,\r
1220        -0.09061348f, -0.08112976f, -0.06920306f, 9.54394229e-003f,\r
1221        -0.01219902f, 1.21273217e-003f, -8.88989680e-003f, -0.08309301f,\r
1222        -0.04552661f, -0.10739882f, -0.05691034f, -0.13928030f, 0.09027749f,\r
1223        0.15123098f, 0.03175976f, 0.17763577f, 3.29913251e-004f, 0.05151888f,\r
1224        -0.09844074f, -0.09475287f, -0.08571247f, 0.16241577f, 0.19336018f,\r
1225        8.57454538e-003f, 0.11474732f, -0.01493934f, 0.03352379f, -0.08966240f,\r
1226        -0.02322310f, 0.02663568f, 0.05448750f, -0.03536883f, -0.07210463f,\r
1227        -0.06807277f, -0.03121621f, -0.05932408f, -0.17282860f, -0.15873498f,\r
1228        -0.04956378f, 0.01603377f, -0.12385946f, 0.13878587f, 0.21468069f,\r
1229        0.13510075f, 0.20992437f, 0.08845878f, 0.08104013f, 0.03754176f,\r
1230        0.12173114f, 0.11103114f, 0.10643122f, 0.13941477f, 0.11640384f,\r
1231        0.14786847f, 0.01218238f, 0.01160753f, 0.03547940f, 0.08794311f,\r
1232        -0.01695384f, -0.07692261f, -0.08236158f, 6.79194089e-003f,\r
1233        -0.02458403f, 0.13022894f, 0.10953187f, 0.09857773f, 0.04735930f,\r
1234        -0.04353498f, -0.15173385f, -0.17904443f, -0.10450364f, -0.13418166f,\r
1235        -0.06633098f, -0.03170381f, -0.06839000f, -0.11350126f, -0.06983913f,\r
1236        0.19083543f, 0.17604128f, 0.07730632f, 0.10022651f, 0.36428109f,\r
1237        0.28291923f, 0.12688625f, 0.15942036f, 0.14064661f, -0.11201853f,\r
1238        -0.13969108f, -0.09088077f, -0.14107047f, 0.05117374f,\r
1239        -2.63348082e-003f, -0.10794610f, -0.09715455f, -0.05284977f,\r
1240        0.01565668f, 0.05031200f, 0.07021113f, -0.02963028f, 0.01766960f,\r
1241        0.08333644f, -0.03211382f, 4.90096770e-003f, 0.05186674f, -0.05045737f,\r
1242        -0.09624767f, -0.02525997f, 0.06916669f, 0.01213916f, 0.05333899f,\r
1243        -0.03443280f, -0.10055527f, -0.06291115f, 5.42851724e-003f,\r
1244        -6.30360236e-003f, 0.02270257f, -0.01769792f, 0.03273688f, 0.07746078f,\r
1245        7.77099328e-003f, 0.05041346f, 0.01648103f, -0.02321534f, -0.09930186f,\r
1246        -0.02293853f, 0.02034990f, -0.08324204f, 0.08510064f, -0.03732836f,\r
1247        -0.06465405f, -0.06086946f, 0.13680504f, -0.11469388f, -0.03896406f,\r
1248        -0.07142810f, 2.67581246e-003f, -0.03639632f, -0.09849060f,\r
1249        -0.11014334f, 0.17489147f, 0.17610909f, -0.16091567f, -0.07248894f,\r
1250        0.01567141f, 0.23742996f, 0.07552249f, -0.06270349f, -0.07303379f,\r
1251        0.25442186f, 0.16903116f, -0.08168741f, -0.05913896f, -0.03954096f,\r
1252        6.81776879e-003f, -0.05615319f, -0.07303037f, -0.12176382f,\r
1253        0.12385108f, 0.22084464f, -0.05543206f, -0.03310431f, 0.05731593f,\r
1254        0.19481890f, 0.04016430f, -0.06480758f, -0.12353460f, 0.18733442f,\r
1255        -0.09631214f, -0.11192076f, 0.12404587f, 0.15671748f, 0.19256128f,\r
1256        0.10895617f, 0.03391477f, -0.13032004f, -0.05626907f, -0.09025607f,\r
1257        0.23485197f, 0.27812332f, 0.26725492f, 0.07255980f, 0.16565137f,\r
1258        0.22388470f, 0.07441066f, -0.21003133f, -0.08075339f, -0.15031935f,\r
1259        0.07023834f, 0.10872041f, 0.18156518f, 0.20037253f, 0.13571967f,\r
1260        -0.11915682f, -0.11131983f, -0.18878011f, 0.06074620f, 0.20578890f,\r
1261        0.12413109f, 0.03930207f, 0.29176015f, 0.29502738f, 0.27856228f,\r
1262        -0.01803601f, 0.16646385f, 0.19268319f, 0.01900682f, 0.06026287f,\r
1263        2.35868432e-003f, 0.01558199f, 0.02707230f, 0.11383014f, 0.12103992f,\r
1264        0.03907350f, 0.04637353f, 0.09020995f, 0.11919726f, -3.63007211e-003f,\r
1265        0.02220155f, 0.10336831f, 0.17351882f, 0.12259731f, 0.18983354f,\r
1266        0.15736865f, 0.01160725f, -0.01690723f, -9.69582412e-004f, 0.07213813f,\r
1267        0.01161613f, 0.17864859f, 0.24486147f, 0.18208991f, 0.20177495f,\r
1268        0.05972528f, -8.93934630e-003f, -0.02316955f, 0.14436610f, 0.14114498f,\r
1269        0.05520950f, 0.06353590f, -0.19124921f, 0.10174713f, 0.29414919f,\r
1270        0.26448128f, 0.09344960f, 0.15284036f, 0.19797507f, 0.11369792f,\r
1271        -0.12722753f, -0.21396367f, -0.02008235f, -0.06566695f, -0.01662150f,\r
1272        -0.03937003f, 0.04778343f, 0.05017274f, -0.02299062f, -0.20208496f,\r
1273        -0.06395898f, 0.13721776f, 0.22544557f, 0.14888357f, 0.08687132f,\r
1274        0.27088094f, 0.32206613f, 0.09782200f, -0.18523243f, -0.17232181f,\r
1275        -0.01041531f, 0.04008654f, 0.04199702f, -0.08081299f, -0.03755421f,\r
1276        -0.04809646f, -0.05222081f, -0.21709201f, -0.06622940f, 0.02945281f,\r
1277        -0.04600435f, -0.05256077f, -0.08432942f, 0.02848100f, 0.03490564f,\r
1278        8.28621630e-003f, -0.11051246f, -0.11210597f, -0.01998289f,\r
1279        -0.05369405f, -0.08869293f, -0.18799506f, -0.05436598f, -0.05011634f,\r
1280        -0.05419716f, -0.06151857f, -0.10827805f, 0.04346735f, 0.04016083f,\r
1281        0.01520820f, -0.12173316f, -0.04880285f, -0.01101406f, 0.03250847f,\r
1282        -0.06009551f, -0.03082932f, -0.02295134f, -0.06856834f, -0.08775249f,\r
1283        -0.23793389f, -0.09174541f, -0.05538322f, -0.04321031f, -0.11874759f,\r
1284        -0.04221844f, -0.06070468f, 0.01194489f, 0.02608565f, -0.03892140f,\r
1285        -0.01643151f, -0.02602034f, -0.01305472f, 0.03920100f, -0.06514261f,\r
1286        0.01126918f, -6.27710763e-003f, -0.02720047f, -0.11133634f,\r
1287        0.03300330f, 0.02398472f, 0.04079665f, -0.10564448f, 0.05966159f,\r
1288        0.01195221f, -0.03179441f, -0.01692590f, -0.06177841f, 0.01841576f,\r
1289        -5.51078189e-003f, -0.06821765f, -0.03191888f, -0.09545476f,\r
1290        0.03030550f, -0.04896152f, -0.02914624f, -0.13283344f, -0.04783419f,\r
1291        6.07836898e-003f, -0.01449538f, -0.13358212f, -0.09687774f,\r
1292        -0.02813793f, 0.01213498f, 0.06650011f, -0.02039067f, 0.13356198f,\r
1293        0.05986415f, -9.12760664e-003f, -0.18780160f, -0.11992817f,\r
1294        -0.06342237f, 0.01229534f, 0.07143231f, 0.10713009f, 0.11085765f,\r
1295        0.06569190f, -0.02956399f, -0.16288325f, -0.13993549f, -0.01292515f,\r
1296        0.03833013f, 0.09130384f, -0.05086257f, 0.05617329f, -0.03896667f,\r
1297        -0.06282311f, -0.11490010f, -0.14264110f, -0.04530499f, 0.01598189f,\r
1298        0.09167797f, 0.08663294f, 0.04885277f, -0.05741219f, -0.07565769f,\r
1299        -0.17136464f, -0.02619422f, -0.02477579f, 0.02679587f, 0.11621952f,\r
1300        0.08788391f, 0.15520640f, 0.04709549f, 0.04504483f, -0.10214074f,\r
1301        -0.12293372f, -0.04820546f, -0.05484834f, 0.05473754f, 0.07346445f,\r
1302        0.05577277f, -0.08209965f, 0.03462975f, -0.20962234f, -0.09324598f,\r
1303        3.79481679e-003f, 0.03617633f, 0.16742408f, 0.07058107f, 0.10204960f,\r
1304        -0.06795346f, 3.22807301e-003f, -0.12589309f, -0.17496960f,\r
1305        0.02078314f, -0.07694324f, 0.12184640f, 0.08997164f, 0.04793497f,\r
1306        -0.11383379f, -0.08046359f, -0.25716835f, -0.08080962f,\r
1307        6.80711539e-003f, -0.02930280f, -3.04938294e-003f, -0.11106286f,\r
1308        -0.04628860f, -0.07821649f, 7.70127494e-003f, -0.10247706f,\r
1309        1.21042714e-003f, 0.20573859f, -0.03241005f, 8.42972286e-003f,\r
1310        0.01946464f, -0.01197973f, -0.14579976f, 0.04233614f,\r
1311        -4.14096704e-003f, -0.06866436f, -0.02431862f, -0.13529138f,\r
1312        1.25891645e-003f, -0.11425111f, -0.04303651f, -0.01694815f,\r
1313        0.05720210f, -0.16040207f, 0.02772896f, 0.05498345f, -0.15010567f,\r
1314        0.01450866f, 0.02350303f, -0.04301004f, -0.04951802f, 0.21702233f,\r
1315        -0.03159155f, -0.01963303f, 0.18232647f, -0.03263875f,\r
1316        -2.88476888e-003f, 0.01587562f, -1.94303901e-003f, -0.07789494f,\r
1317        0.04674156f, -6.25576358e-003f, 0.08925962f, 0.21353747f, 0.01254677f,\r
1318        -0.06999976f, -0.05931328f, -0.01884327f, -0.04306272f, 0.11794136f,\r
1319        0.03842728f, -0.03907030f, 0.05636114f, -0.09766009f, -0.02104000f,\r
1320        8.72711372e-003f, -0.02736877f, -0.05112274f, 0.16996814f, 0.02955785f,\r
1321        0.02094014f, 0.08414304f, -0.03335762f, -0.03617457f, -0.05808248f,\r
1322        -0.08872101f, 0.02927705f, 0.27077839f, 0.06075108f, 0.07478261f,\r
1323        0.15282831f, -0.03908454f, -0.05101782f, -9.51998029e-003f,\r
1324        -0.03272416f, -0.08735625f, 0.07633440f, -0.07185312f, 0.13841286f,\r
1325        0.07812646f, -0.12901451f, -0.05488589f, -0.05644578f, -0.03290703f,\r
1326        -0.11184757f, 0.03751570f, -0.05978153f, -0.09155276f, 0.05657315f,\r
1327        -0.04328186f, -0.03047933f, -0.01413135f, -0.10181040f, -0.01384013f,\r
1328        0.20132534f, -0.01536873f, -0.07641169f, 0.05906778f, -0.07833145f,\r
1329        -0.01523801f, -0.07502609f, -0.09461885f, -0.15013233f, 0.16050665f,\r
1330        0.09021381f, 0.08473236f, 0.03386267f, -0.09147339f, -0.09170618f,\r
1331        -0.08498498f, -0.05119187f, -0.10431040f, 0.01041618f, -0.03064913f,\r
1332        0.09340212f, 0.06448522f, -0.03881054f, -0.04985436f, -0.14794017f,\r
1333        -0.05200112f, -0.02144495f, 0.04000821f, 0.12420804f, -0.01851651f,\r
1334        -0.04116732f, -0.11951703f, -0.04879033f, -0.08722515f, -0.08454733f,\r
1335        -0.10549165f, 0.11251976f, 0.10766345f, 0.19201984f, 0.06128913f,\r
1336        -0.02734615f, -0.08834923f, -0.16999826f, -0.03548348f,\r
1337        -5.36092324e-003f, 0.08297954f, 0.07226378f, 0.04194529f, 0.04668673f,\r
1338        8.73902347e-003f, 0.06980139f, 0.05652480f, 0.05879445f, 0.02477076f,\r
1339        0.02451423f, 0.12433673f, 0.05600227f, 0.06886370f, 0.03863076f,\r
1340        0.07459056f, 0.02264139f, 0.01495469f, 0.06344220f, 0.06945208f,\r
1341        0.02931899f, 0.11719371f, 0.04527427f, 0.03248192f, 2.08271481e-003f,\r
1342        0.02044626f, 0.11403449f, 0.04303892f, 0.06444661f, 0.04959024f,\r
1343        0.08174094f, 0.09240247f, 0.04894639f, 0.02252937f, -0.01652530f,\r
1344        0.07587013f, 0.06064249f, 0.13954395f, 0.02772832f, 0.07093039f,\r
1345        0.08501238f, 0.01701301f, 0.09055722f, 0.33421436f, 0.20163782f,\r
1346        0.09821030f, 0.07951369f, 0.08695120f, -0.12757730f, -0.13865978f,\r
1347        -0.06610068f, -0.10985506f, 0.03406816f, -0.01116336f, -0.07281768f,\r
1348        -0.13525715f, -0.12844718f, 0.08956250f, 0.09171610f, 0.10092317f,\r
1349        0.23385370f, 0.34489515f, 0.09901748f, 0.02002922f, 0.12335990f,\r
1350        0.07606190f, -0.14899330f, -0.15634622f, -0.06494618f, -0.01760547f,\r
1351        0.03404277f, -0.13208845f, -0.12101169f, -0.18294574f, -0.16560709f,\r
1352        0.02183887f, -0.02752613f, 0.01813638f, 0.02000757f, 0.01319924f,\r
1353        0.08030242f, 0.01220535f, 2.98233377e-003f, -0.01307070f, 0.05970297f,\r
1354        -0.05345284f, -0.03381982f, -9.87543724e-003f, -0.06869387f,\r
1355        0.03956730f, -0.03108176f, -0.05732809f, 0.02172386f, 0.04159765f,\r
1356        2.62783933e-003f, 0.04813229f, 0.09358983f, -8.18389002e-003f,\r
1357        0.01724574f, -0.02547474f, -0.04967288f, -0.02390376f, 0.06640504f,\r
1358        -0.06306566f, 0.01137518f, 0.05589378f, -0.08237787f, 0.02455001f,\r
1359        -0.03059422f, -0.08953978f, 0.06851497f, 0.07190268f, -0.07610799f,\r
1360        7.87237938e-003f, -7.85830803e-003f, 0.06006952f, -0.01126728f,\r
1361        -2.85743061e-003f, -0.04772895f, 0.01884944f, 0.15005857f,\r
1362        -0.06268821f, -0.01989072f, 0.01138399f, 0.08760451f, 0.03879007f,\r
1363        -9.66926850e-003f, -0.08012961f, 0.06414555f, -0.01362950f,\r
1364        -0.09135523f, 0.01755159f, 0.04459474f, 0.09650917f, 0.05219948f,\r
1365        -2.19440833e-003f, -0.07037939f, -0.01599054f, 0.13103317f,\r
1366        -0.02492603f, -0.01032540f, -0.02903307f, 0.04489160f, 0.05148086f,\r
1367        0.01858173f, -0.02919228f, 0.08299296f, -0.04590359f, -0.15745632f,\r
1368        -0.09068198f, -0.02972453f, 0.12985018f, 0.22320485f, 0.24261914f,\r
1369        0.03642650f, -0.05506422f, 2.67413049e-003f, -0.03834032f, 0.06449424f,\r
1370        0.03834866f, 0.03816991f, 0.25039271f, 0.34212017f, 0.32433882f,\r
1371        0.18824573f, -0.08599839f, -0.17599408f, -0.15317015f, -0.09913155f,\r
1372        -0.02856072f, -0.05304699f, -1.06437842e-003f, -0.06641813f,\r
1373        -0.07509298f, 0.01463361f, -0.07551918f, -0.04510373f,\r
1374        -8.44620075e-003f, 0.01772176f, 0.04068235f, 0.20295307f, 0.15719447f,\r
1375        0.05712103f, 0.26296997f, 0.14657754f, 0.01547317f, -0.05052776f,\r
1376        -0.03881342f, -0.01437883f, -0.04930177f, 0.11719568f, 0.24098417f,\r
1377        0.26468599f, 0.31698579f, 0.10103608f, -0.01096375f, -0.01367013f,\r
1378        0.17104232f, 0.20065314f, 2.67622480e-003f, -0.01190034f, 0.18301608f,\r
1379        0.09459770f, -0.06357619f, -0.06473801f, 0.01377906f, -0.10032775f,\r
1380        -0.06388740f, 3.80393048e-003f, 0.06206078f, 0.10349120f, 0.26804337f,\r
1381        8.17918684e-003f, -0.02314351f, 9.34422202e-003f, 0.09198381f,\r
1382        0.03681326f, -8.77339672e-003f, -0.09662418f, -0.02715708f,\r
1383        0.13503517f, 0.08962728f, -6.57071499e-003f, -0.03201199f, 0.28510824f,\r
1384        0.32095715f, 0.18512695f, -0.14230858f, -0.14048551f, -0.07181299f,\r
1385        -0.08575408f, -0.08661680f, -0.17416079f, 7.54326640e-004f,\r
1386        0.05601677f, 0.13585392f, -0.04960437f, -0.07708392f, 0.10676333f,\r
1387        -0.04407546f, -0.07209078f, 0.03663663f, 0.28949317f, 0.41127121f,\r
1388        0.27431169f, -0.06900328f, -0.21474190f, -0.15578632f, -0.19555484f,\r
1389        -0.15209621f, -0.11269179f, 0.07416003f, 0.18991330f, 0.26858172f,\r
1390        0.01952259f, 0.01017922f, 0.02159843f, -4.95165400e-003f, -0.04368168f,\r
1391        -0.12721671f, -0.06673957f, -0.11275250f, 0.04413409f, 0.05578312f,\r
1392        0.03896771f, 0.03566417f, -0.05871816f, -0.07388090f, -0.17965563f,\r
1393        -0.08570268f, -0.15273231f, -0.06022318f, -0.06999847f,\r
1394        -6.81510568e-003f, 0.06294262f, -6.54901436e-004f, -0.01128654f,\r
1395        -0.02289657f, 0.04849290f, 0.04140804f, 0.23681939f, 0.14545733f,\r
1396        0.01989965f, 0.12032662f, 3.87463090e-003f, -6.02597650e-003f,\r
1397        -0.05919775f, -0.03067224f, -0.07787777f, 0.10834727f, 0.02153730f,\r
1398        0.02765649f, 0.03975543f, -0.12182906f, -0.04900113f, -0.09940100f,\r
1399        -0.06453611f, -0.13757215f, -0.03721382f, 0.02827376f, -0.04351249f,\r
1400        0.01907038f, -0.10284120f, -0.05671160f, -0.10760647f, -0.09624009f,\r
1401        -0.09565596f, -0.01303654f, 0.03080539f, 0.01416511f, 0.05846142f,\r
1402        -5.42971538e-003f, 0.06221476f, -0.03320325f, -0.06791797f,\r
1403        -0.05791342f, 0.12851369f, 0.14990346f, 0.03634374f, 0.14262885f,\r
1404        0.04330391f, 0.05032569f, -0.05631914f, 0.01606137f, 0.04387223f,\r
1405        0.22344995f, 0.15722635f, -0.04693628f, 0.03006579f, -2.52882647e-003f,\r
1406        0.05717621f, -0.07529724f, -0.02848588f, -0.06868757f,\r
1407        -4.51729307e-003f, 0.06466042f, -0.05935378f, -0.04704857f,\r
1408        -0.07363959f, 0.04843248f, -0.13421375f, -0.09789340f, -0.10255270f,\r
1409        0.03509852f, 0.04751543f, -0.03822323f, 0.09740467f, 0.04762916f,\r
1410        0.03940146f, -0.08283259f, 0.09552965f, 0.05038739f, 0.21258622f,\r
1411        0.09646992f, 0.03241193f, 0.05167701f, 0.04614570f, 0.04330090f,\r
1412        -0.02671840f, -0.06259909f, -0.02301898f, 0.18829170f, 0.10522786f,\r
1413        0.04313190f, 0.01670948f, -0.08421925f, 0.05911417f, -0.10582602f,\r
1414        -0.04855484f, -0.08373898f, 0.07775915f, 0.03723533f, -0.12047344f,\r
1415        4.86345543e-003f, -0.10520902f, 0.06571782f, -0.07528137f,\r
1416        -0.03245651f, -0.09869066f, -0.02917477f, -0.18293270f, 0.14810945f,\r
1417        9.24033765e-003f, -0.04354914f, 0.02266885f, -0.11872729f,\r
1418        -0.04016589f, 0.02830229f, 0.22539048f, 0.20565644f, 0.16701797f,\r
1419        0.09019924f, 0.01300652f, 0.09760600f, -0.03675831f, -0.01935448f,\r
1420        -0.06894835f, 0.08077277f, 0.19047537f, 0.11312226f, 0.04106043f,\r
1421        -0.11187182f, 0.04312806f, -0.18548580f, -0.11287174f, -0.08794551f,\r
1422        0.02078281f, -0.15295486f, 0.11806386f, -0.01103218f, -0.15971117f,\r
1423        0.02153538f, -0.05232147f, -0.10835317f, -0.13910367f, 0.05920752f,\r
1424        -0.10122602f, 0.20174250f, 0.09105796f, -0.01881348f, 0.09559010f,\r
1425        -0.03725745f, -0.09442931f, -0.09763174f, 0.05854454f, 0.08287182f,\r
1426        0.12919849f, 0.08594352f, -2.49806582e-003f, 0.02398440f,\r
1427        5.67950122e-003f, -0.06296340f, -0.12993270f, 0.03855852f, 0.05186560f,\r
1428        0.10839908f, -0.03380463f, -0.12654832f, -0.05399339f, -0.07456800f,\r
1429        -0.04736232f, -0.10164231f, 0.07496139f, 0.08125214f, 0.07656177f,\r
1430        -0.04999603f, -0.12823077f, -0.07692395f, -0.11317524f, -0.09118655f,\r
1431        -0.05695669f, 0.10477209f, 0.07468581f, 0.01630048f, -8.00961629e-003f,\r
1432        -0.06582128f, -0.04019095f, -0.04682907f, -0.01907842f, -0.10997720f,\r
1433        0.04911406f, 0.02931030f, 0.04197735f, -0.05773980f, -0.09670641f,\r
1434        -0.03594951f, -0.03402121f, -0.07149299f, -0.10566200f, 0.10601286f,\r
1435        0.06340689f, -0.01518632f, -5.96402306e-003f, -0.07628012f,\r
1436        -3.52779147e-003f, -0.02683854f, -0.10265494f, -0.02680815f,\r
1437        0.16338381f, 0.03103515f, 0.02296976f, 0.01624348f, -0.10831620f,\r
1438        -0.02314233f, -0.04789969f, -0.05530700f, -0.06461314f, 0.10494506f,\r
1439        0.04642856f, -0.07592955f, -0.06197905f, -0.09042154f, -0.01445521f,\r
1440        -0.04297818f, -0.11262015f, -0.11430512f, 0.03174541f, -0.03677487f,\r
1441        -0.02963996f, -0.06610169f, -0.13292049f, -0.07059067f, -0.08444111f,\r
1442        -0.02640536f, -0.07136250f, 0.04559967f, 0.01459980f, 0.17989251f,\r
1443        0.04435328f, -0.12464730f, -0.02871115f, -0.10752209f, -0.03393742f,\r
1444        -0.03791408f, 0.02548251f, 0.01956050f, 0.19245651f, 0.13963254f,\r
1445        -0.05904696f, -0.07424626f, -0.10411884f, 1.54176133e-003f,\r
1446        0.01797429f, 0.13025844f, 0.04547642f, -0.05710349f, -0.10697161f,\r
1447        -0.13489437f, -0.06515755f, -0.06406886f, -4.08572936e-003f,\r
1448        -0.01336483f, 0.04368737f, -0.11259720f, -0.05701635f, -0.06469971f,\r
1449        -0.08346602f, -0.04166770f, -0.05795543f, -0.08247511f, -0.05742628f,\r
1450        0.08452254f, -0.03350224f, 0.13980860f, 0.13252275f, 0.07589617f,\r
1451        0.07539988f, 0.12155797f, 0.19087289f, 0.15050751f, 0.21250245f,\r
1452        0.14206800f, 0.01298489f, 0.07450245f, 0.06559097f, 0.01700557f,\r
1453        0.04512971f, 0.16950700f, 0.10261577f, 0.16389982f, 0.05505059f,\r
1454        -0.03453077f, 0.08622462f, 0.07935954f, 0.03976260f, 0.02036091f,\r
1455        3.95744899e-003f, 0.03267065f, 0.15235919f, 0.01297494f, -0.08109194f,\r
1456        0.01407558f, 4.40693414e-003f, -0.15157418f, -0.11390478f,\r
1457        -0.07487597f, -7.81322457e-003f, -0.02749545f, -0.10181408f,\r
1458        0.13755716f, 0.14007211f, 0.13482562f, 0.27517235f, 0.34251109f,\r
1459        0.07639657f, 0.07268607f, 0.19823882f, 0.16135791f, -0.04186463f,\r
1460        -0.12784107f, -0.09846287f, 0.03169041f, 0.10974082f, -0.15051922f,\r
1461        -0.08916726f, -0.07138767f, -0.04153349f, 6.25418453e-003f,\r
1462        0.01266654f, 0.10533249f, 0.12749144f, 0.15148053f, 0.01498513f,\r
1463        0.06305949f, -0.01247123f, -0.08778401f, -0.08551880f, -0.11955146f,\r
1464        -0.08493572f, -0.02901620f, -0.02394859f, -0.13427313f, -0.11053200f,\r
1465        -0.14413260f, -0.15203285f, 0.03972760f, -3.72127310e-004f,\r
1466        -0.04200919f, 0.06105104f, 0.01904975f, -0.01106191f,\r
1467        -7.27445772e-003f, -0.01520341f, 1.10228511e-003f, -0.04949187f,\r
1468        -0.08013099f, 5.72071038e-003f, 0.08415454f, -0.06523152f, 0.03664081f,\r
1469        -0.02673042f, -0.12066154f, -0.03702074f, 0.06006580f, 0.01628682f,\r
1470        -6.17772620e-003f, 0.08192339f, -3.41629819e-003f, 0.02870512f,\r
1471        0.05807141f, 0.04959986f, 0.04618251f, -0.04901629f, -0.10579574f,\r
1472        0.02274442f, 0.12070961f, 2.23597488e-003f, 0.09831765f, -0.03019848f,\r
1473        -0.11181970f, -0.04961075f, 0.02498928f, -0.03714991f, -0.01619653f,\r
1474        0.02643486f, -7.62964319e-003f, -0.02882290f, -0.06242594f,\r
1475        -0.08439861f, 0.07220893f, 0.07263952f, 0.01561574f, 0.03091968f,\r
1476        0.01708712f, -0.03797151f, -3.18561122e-003f, 0.01624021f,\r
1477        -0.02828573f, 0.11284444f, -1.32280716e-003f, -0.07784860f,\r
1478        -0.07209100f, 0.03372242f, 0.12154529f, 0.02278104f, -0.05275500f,\r
1479        -0.01918484f, 0.12989293f, 0.05424401f, 0.02333086f, 0.04029022f,\r
1480        0.12392918f, 0.09495489f, 0.09190340f, 0.07935889f, 8.76816828e-003f,\r
1481        0.17148446f, -8.51302687e-003f, -0.08011249f, -0.06796283f,\r
1482        0.04884845f, 0.01112272f, -0.07835306f, -1.14811445e-003f,\r
1483        -0.03440760f, 0.02845243f, 0.07695542f, -0.07069533f, -0.01151784f,\r
1484        -8.53884313e-003f, -0.01662786f, -0.04163864f, 0.05400505f,\r
1485        0.02859163f, 0.02921852f, 0.05003135f, -6.85718050e-003f, -0.01632611f,\r
1486        0.07780217f, 0.04042810f, -0.01216440f, 3.60914599e-003f, -0.06322435f,\r
1487        0.09516726f, 0.12877031f, -9.69162490e-003f, 0.01031179f, 0.05180895f,\r
1488        -9.34659224e-003f, -0.01644533f, -0.04849347f, -0.04343236f,\r
1489        0.10514783f, 0.08046635f, -0.04615205f, -0.03975486f, -0.01485525f,\r
1490        0.13096830f, -0.01517950f, -0.06571898f, -0.04016372f, 0.01849786f,\r
1491        0.02439670f, 0.08067258f, 1.74824719e-003f, 0.07053747f, 0.08819518f,\r
1492        -5.08352555e-003f, -0.06550863f, -0.08266170f, -0.07780605f,\r
1493        0.01453450f, -0.08756890f, 0.01096501f, -8.71319138e-003f, 0.10110464f,\r
1494        0.02420769f, -0.06708383f, 0.02007811f, 5.93133038e-003f, 0.05398923f,\r
1495        0.07538138f, 0.02049227f, 0.02242589f, 0.04011070f, -1.44875818e-003f,\r
1496        -4.19115182e-003f, 0.06367654f, 0.02506934f, 0.02434536f, 0.05879405f,\r
1497        -8.22952855e-003f, -0.01242441f, 0.04224926f, -0.01754923f,\r
1498        0.05958161f, 0.03818886f, -0.01830363f, -0.04308917f, -0.04422197f,\r
1499        -0.02432721f, 0.02264866f, 2.03751423e-003f, 0.01197031f, 0.04439203f,\r
1500        0.12169247f, 0.03602713f, -0.02599251f, -1.98226492e-003f, 0.02046336f,\r
1501        -0.02639058f, -1.91242550e-003f, -0.09334669f, -0.03595153f,\r
1502        -9.88179818e-003f, -0.06848445f, -0.04666303f, -0.09955736f,\r
1503        -0.04206430f, 0.02609075f, 9.09005292e-003f, -0.07138551f,\r
1504        -4.22313227e-004f, 0.01766645f, 0.02756404f, 0.01308276f, 0.04052891f,\r
1505        0.02387515f, 0.05337298f, 0.02500631f, -0.04970853f, -0.12467445f,\r
1506        0.17604403f, 0.12256411f, -0.07512254f, 8.70451052e-003f, -0.05697548f,\r
1507        -0.03626474f, -8.76623299e-003f, -0.01210897f, -0.09451522f,\r
1508        0.07490732f, -0.02008001f, -0.02681278f, -0.06463405f, -0.01517507f,\r
1509        7.33757764e-003f, 6.07147906e-003f, -0.09316964f, -0.04575328f,\r
1510        0.13261597f, 0.15424870f, -0.01655918f, -0.02772390f, -0.05243644f,\r
1511        -0.02356456f, -0.02351753f, -0.10211615f, -0.12873036f, 0.14549787f,\r
1512        0.12519856f, 4.38762689e-003f, 0.02795992f, 0.05170322f, 0.09223596f,\r
1513        0.05890015f, 0.02376701f, -0.02777346f, 0.09506908f, 0.02328936f,\r
1514        -0.02319928f, -0.03218696f, -0.01527841f, -0.01016694f, -0.02674719f,\r
1515        0.05137179f, 0.01980666f, 0.06544447f, -0.01746171f, 0.01026380f,\r
1516        0.01561806f, 7.97004555e-004f, 0.07601810f, 0.01907250f, -0.03083035f,\r
1517        -0.05987392f, 0.09242783f, 0.14555025f, 0.01035827f, 0.03092401f,\r
1518        -0.09562709f, -0.03802354f, 0.02531144f, 0.03079449f, -0.07100715f,\r
1519        0.03330721f, -2.69116857e-003f, 0.03167490f, 0.05744999f, 0.03259895f,\r
1520        1.91266940e-003f, 0.03194578f, 0.07389776f, 0.02198060f, 0.07633314f,\r
1521        0.03293105f, -0.09103648f, 0.04718142f, 0.06102672f, -0.01003063f,\r
1522        5.85481385e-003f, -0.01522574f, 0.02323526f, 0.10584345f,\r
1523        4.35879454e-003f, 0.06107873f, 0.05868603f, -0.03115531f, 0.01214679f,\r
1524        0.08567052f, 3.93926632e-003f, -0.02521488f, -1.88425183e-003f,\r
1525        0.02038053f, -6.26854831e-004f, 0.04897438f, -0.04280585f,\r
1526        -0.04819689f, -0.04812867f, -0.01451186f, 0.05101469f,\r
1527        -9.01125465e-003f, -0.03333859f, 0.03917955f, 0.04196448f, 0.04292135f,\r
1528        0.02809529f, 0.02999715f, 0.04081348f, 9.10039060e-003f, 0.09703232f,\r
1529        0.10379741f, 0.02348725f, -4.72756615e-003f, 0.01027325f, 0.10402658f,\r
1530        0.12071823f, 0.09817299f, -0.02612033f, 0.03638414f, 0.05896405f,\r
1531        0.04865025f, 0.04793910f, -0.03882321f, -0.02962117f, -0.01222268f,\r
1532        0.04071597f, 0.01922777f, -0.02287866f, 0.03328381f, 0.01859092f,\r
1533        0.09024994f, 0.03804455f, -0.01424510f, 0.01953739f, 0.02509617f,\r
1534        -0.03390914f, -0.05663941f, -0.01641979f, 0.05848591f, 0.04639670f,\r
1535        0.02092116f, 0.12911791f, 0.19918139f, 0.07739855f, -7.25806039e-003f,\r
1536        0.04074838f, 0.03183993f, 1.39251316e-003f, -0.01428625f, 0.01865480f,\r
1537        0.08529541f, 0.13547510f, 0.11189661f, 0.03998901f, 0.09575938f,\r
1538        -0.02631102f, -0.03458253f, -0.04749985f, -0.06070716f,\r
1539        4.71884012e-003f, 0.06445789f, -0.02450038f, -0.05483776f,\r
1540        -0.04657237f, -0.02030717f, -0.03480766f, -0.09397731f, -0.06399718f,\r
1541        -0.01804585f, 5.62348310e-003f, -6.64811488e-003f, -0.06517869f,\r
1542        6.96210237e-003f, -0.01860148f, -0.04245830f, -0.05850367f,\r
1543        -3.24417115e-003f, 0.07700698f, 0.11290991f, 0.09923030f, -0.02970599f,\r
1544        0.05592411f, 0.04813979f, -0.09811195f, -0.09357996f, -0.03276114f,\r
1545        0.05218338f, 0.04141375f, 3.92977800e-003f, -0.05047480f, 0.15960084f,\r
1546        0.04612800f, -0.03114098f, -0.04650044f, -0.03249795f, -0.02425641f,\r
1547        -0.04311355f, 0.04307659f, -0.09401883f, -0.04742785f, -0.01254499f,\r
1548        -0.06598741f, 3.41369561e-003f, -0.05620445f, -7.28127593e-003f,\r
1549        -0.05998361f, -0.03274450f, -0.07376868f, 3.19015374e-003f,\r
1550        -0.07733069f, 0.05815864f, -0.02471071f, 0.03850617f, 0.13838784f,\r
1551        0.15399861f, 0.01731321f, -0.01477586f, 0.10393341f, 0.05159833f,\r
1552        -0.01945555f, -0.03427503f, -0.04867341f, 0.09237480f, 0.10732719f,\r
1553        0.06071450f, -0.01355071f, 0.01844356f, -0.03480803f, -0.03796671f,\r
1554        2.15628621e-004f, -0.05440186f, 0.01889855f, -0.01443413f,\r
1555        -0.02607902f, -0.02938001f, 0.02720689f, -0.06228397f, -0.02970936f,\r
1556        -0.03426210f, -0.10280876f, -0.06739304f, -0.05227850f, 0.03360292f,\r
1557        -0.11278441f, -0.06966180f, -0.13937433f, 9.10932291e-003f,\r
1558        2.52020749e-004f, -4.07359656e-003f, 0.12310639f, 0.09343060f,\r
1559        0.07302511f, 0.03222093f, 0.07532879f, 0.03792387f, -0.04985180f,\r
1560        0.01804602f, 0.02694195f, 0.13481498f, 0.04601225f, 0.04106982f,\r
1561        0.08511057f, 0.12314661f, 0.01320830f, 0.05044121f, -5.52943908e-003f,\r
1562        -0.08992624f, -0.02249301f, -0.08181777f, 0.06165213f, -0.03256603f,\r
1563        -0.01068920f, -0.01323473f, -0.11970232f, -0.04616347f, -0.12088681f,\r
1564        -0.06762606f, -0.08676834f, -0.06434575f, 0.01772529f, 0.03469615f,\r
1565        -0.10926618f, 0.03013873f, 0.14030397f, 0.16130108f, 0.17985588f,\r
1566        0.11281928f, 0.10530639f, 0.08905948f, 0.07733764f, 0.06695238f,\r
1567        0.02142088f, 0.06438877f, 0.09794453f, 0.05745072f, 0.02788557f,\r
1568        0.02632830f, 0.07985807f, 4.24902979e-003f, 8.47890321e-003f,\r
1569        -0.02679466f, -5.28812688e-003f, -0.02162580f, -0.07490715f,\r
1570        -0.08251337f, -0.02056576f, -0.01026194f, -1.15492963e-003f,\r
1571        -5.75720915e-004f, -0.07210591f, -0.07320981f, -0.04883312f,\r
1572        -0.10897151f, -0.07477258f, -0.08867134f, -0.09222437f, -0.10924666f,\r
1573        -0.10430276f, 0.07953499f, 0.02767959f, 0.11393359f, 0.18779543f,\r
1574        0.03313421f, 0.02143700f, 0.05852016f, -2.12067598e-003f,\r
1575        -3.76984011e-003f, 0.02774167f, -0.03124610f, 0.01465141f, 0.01616004f,\r
1576        -0.01391913f, -0.04404102f, -0.05444227f, -0.14684731f, -0.15016587f,\r
1577        0.04509468f, 1.29563001e-003f, 0.01398350f, 0.05610404f, -0.04868806f,\r
1578        -0.04776716f, -8.16873740e-003f, -2.30126386e-003f, -0.02286313f,\r
1579        0.11983398f, -0.04703261f, -0.08814441f, -0.07585249f, -0.10799607f,\r
1580        -0.03232087f, 0.01509786f, -0.04843464f, -0.03967846f, 0.09589416f,\r
1581        0.01352560f, -0.01458119f, 0.01050829f, -0.03038946f, 0.01608388f,\r
1582        1.11975556e-003f, -0.01250656f, 2.86211423e-003f, 0.04333691f,\r
1583        -0.14603497f, -0.01946543f, -0.02327525f, -0.01973944f, 0.07944400f,\r
1584        -0.02224544f, -0.06701808f, 0.03476532f, 0.11505594f, -0.02712801f,\r
1585        -0.01665113f, 0.06315716f, -0.08205860f, 0.07431999f, 0.04915778f,\r
1586        -0.04468752f, -0.01490402f, 0.07400476f, -0.11650901f, 0.05102430f,\r
1587        0.04559118f, -0.05916039f, 0.08840760f, -0.01587902f, -0.14890194f,\r
1588        0.07857784f, 0.04710254f, -0.05381983f, -0.07331945f, -0.03604643f,\r
1589        0.15611970f, 0.07649943f, -0.05959348f, -0.02776607f, 0.11098688f,\r
1590        0.03758875f, -0.04446875f, 0.04933187f, 0.01345535f, 0.06921103f,\r
1591        0.07364785f, 0.05518956f, 0.02899585f, 0.09375840f, 0.10518434f,\r
1592        -0.04420241f, 0.01915282f, -3.56386811e-003f, 0.14586878f, 0.10286101f,\r
1593        -0.04360626f, -0.12723237f, 0.09076386f, 0.11119842f, -0.06035013f,\r
1594        0.09674817f, 0.08938243f, 0.07065924f, 0.02603180f, 5.84815582e-003f,\r
1595        -0.05922065f, 0.12360309f, 3.59695964e-003f, 2.99844006e-003f,\r
1596        0.03697936f, 0.02043072f, 0.04168725f, 0.01025975f, -0.01359980f,\r
1597        -0.01600920f, 0.02581056f, 0.02329250f, 2.98100687e-003f, 0.01629762f,\r
1598        0.06652115f, 0.05855627f, 0.01237463f, -0.01297135f, 0.01761587f,\r
1599        0.05090865f, 0.06549342f, -0.04425945f, 2.43203156e-003f,\r
1600        3.07327788e-003f, 0.06678630f, -0.04303836f, 0.01082393f, -0.06476044f,\r
1601        0.04077786f, 0.12441979f, 0.08237778f, 0.07424165f, 0.04065890f,\r
1602        0.06905543f, 0.09556347f, 0.12724875f, -0.02132082f, 0.08514154f,\r
1603        -0.04175328f, -0.02666954f, 0.01897836f, 0.03317382f, 9.45465732e-003f,\r
1604        -0.01238974f, -0.04242500f, -0.01419479f, -0.03545213f, -0.02440874f,\r
1605        0.08684119f, 0.04212951f, 0.02462858f, -0.01104825f, -5.01706870e-003f,\r
1606        0.02968982f, 0.02597476f, -0.01568939f, 0.04514892f, 0.06974549f,\r
1607        0.08670278f, 0.06828108f, 0.10238872f, 0.05405957f, 0.06548470f,\r
1608        -0.03763957f, 0.01366090f, 0.07069602f, 0.05363748f, 0.04798120f,\r
1609        0.11706422f, 0.05466456f, -0.01869259f, 0.06344382f, 0.03106543f,\r
1610        0.08432506f, -0.02061096f, 0.03821088f, -6.92190882e-003f,\r
1611        6.40467042e-003f, -0.01271779f, 6.89014705e-005f, 0.04541415f,\r
1612        -0.01899539f, -0.05020239f, 0.03000903f, 0.01090422f, 4.52452758e-003f,\r
1613        0.02573632f, -0.02388454f, -0.04200457f, 1.72783900e-003f,\r
1614        -0.05978370f, -0.02720562f, 0.06573715f, 0.01154317f, 0.01265615f,\r
1615        0.07375994f, -9.19828378e-003f, -0.04914120f, 0.02124831f, 0.06455322f,\r
1616        0.04372910f, -0.03310043f, 0.03605788f, -6.78055827e-003f,\r
1617        9.36202332e-003f, 0.01747596f, -0.06406314f, -0.06812935f, 0.08080816f,\r
1618        -0.02778088f, 0.02735260f, 0.06393493f, 0.06652229f, 0.05676993f,\r
1619        0.08640018f, -7.59188086e-003f, -0.02012847f, -0.04741159f,\r
1620        -0.01657069f, -0.01624399f, 0.05547778f, -2.33309763e-003f,\r
1621        0.01120033f, 0.06141156f, -0.06285004f, -0.08732341f, -0.09313398f,\r
1622        -0.04267832f, 5.57443965e-003f, 0.04809862f, 0.01773641f,\r
1623        5.37361018e-003f, 0.14842421f, -0.06298012f, -0.02935147f, 0.11443478f,\r
1624        -0.05034208f, 5.65494271e-003f, 0.02076526f, -0.04577984f,\r
1625        -0.04735741f, 0.02961071f, -0.09307127f, -0.04417921f, -0.04990027f,\r
1626        -0.03940028f, 0.01306016f, 0.06267900f, 0.03758737f, 0.08460117f,\r
1627        0.13858789f, 0.04862388f, -0.06319809f, -0.05655516f, 0.01885816f,\r
1628        -0.03285607f, 0.03371567f, -0.07040928f, -0.04514049f, 0.01392166f,\r
1629        0.08184422f, -0.07230316f, 0.02386871f, 0.02184591f, 0.02605764f,\r
1630        -0.01033954f, 9.29878280e-003f, 7.67351175e-003f, 0.15189242f,\r
1631        0.02069071f, -0.09738296f, -0.08894105f, -0.07768748f, 0.02332268f,\r
1632        -0.01778995f, -0.03258888f, -0.08180822f, -0.08492987f, 0.02290156f,\r
1633        -0.11368170f, -0.03554465f, -0.04533844f, -0.02861580f, 0.06782424f,\r
1634        0.01113123f, 0.02453644f, 0.12721945f, 0.08084814f, -0.03607795f,\r
1635        0.01109122f, 0.04803548f, -0.03489929f, 0.03399536f, -0.05682014f,\r
1636        8.59533902e-003f, -4.27904585e-003f, 0.03230887f, -0.01300198f,\r
1637        -0.01038137f, -0.07930113f, 8.33097473e-003f, 0.02296994f,\r
1638        -0.01306500f, -0.01881626f, 0.04413369f, 0.05729880f, -0.03761553f,\r
1639        0.01942326f, 1.64540811e-003f, -0.03811319f, 0.04190650f, -0.14978096f,\r
1640        -0.04514487f, 0.01209545f, -5.46460645e-003f, -0.01647195f,\r
1641        7.63064111e-003f, -0.07494587f, 0.08415288f, 0.10020141f, -0.01228561f,\r
1642        0.06553826f, 0.04554005f, 0.07890417f, 0.03041138f, 0.01752007f,\r
1643        0.09208256f, -3.74419295e-004f, 0.10549527f, 0.04686913f, 0.01894833f,\r
1644        -0.02651412f, -4.34682379e-003f, 5.44942822e-003f, 0.01444484f,\r
1645        0.05882156f, -0.03336544f, 0.04603891f, -0.10432546f, 0.01923928f,\r
1646        0.01842845f, -0.01712168f, -0.02222766f, 0.04693324f, -0.06202956f,\r
1647        -0.01422159f, 0.08732220f, -0.07706107f, 0.02661049f, -0.04300238f,\r
1648        -0.03092422f, -0.03552184f, -0.01886088f, -0.04979934f, 0.03906401f,\r
1649        0.04608644f, 0.04966111f, 0.04275464f, -0.04621769f, -0.02653212f,\r
1650        8.57011229e-003f, 0.03839684f, 0.05818764f, 0.03880796f,\r
1651        -2.76100676e-004f, 0.03076511f, -0.03266929f, -0.05374557f,\r
1652        0.04986527f, -9.45429131e-003f, 0.03582499f, -2.64564669e-003f,\r
1653        -1.07461517e-003f, 0.02962313f, -0.01483363f, 0.03060869f, 0.02448327f,\r
1654        0.01845641f, 0.03282966f, -0.03534438f, -0.01084059f, -0.01119136f,\r
1655        -1.85360224e-003f, -5.94652840e-004f, -0.04451817f, 2.98327743e-003f,\r
1656        0.06272484f, -0.02152076f, -3.05971340e-003f, -0.05070828f,\r
1657        0.01531762f, 0.01282815f, 0.05167150f, 9.46266949e-003f,\r
1658        -3.34558333e-003f, 0.11442288f, -0.03906701f, -2.67325155e-003f,\r
1659        0.03069184f, -0.01134165f, 0.02949462f, 0.02879886f, 0.03855566f,\r
1660        -0.03450781f, 0.09142872f, -0.02156654f, 0.06075062f, -0.06220816f,\r
1661        0.01944680f, 6.68372354e-003f, -0.06656796f, 8.70784000e-003f,\r
1662        0.03456013f, 0.02434320f, -0.13236357f, -0.04177035f, -0.02069627f,\r
1663        0.01068112f, 0.01505432f, -0.07517391f, -3.83571628e-003f,\r
1664        -0.06298508f, -0.02881260f, -0.13101046f, -0.07221562f,\r
1665        -5.79945277e-003f, -8.57300125e-003f, 0.03782469f, 0.02762164f,\r
1666        0.04942456f, -0.02936396f, 0.09597211f, 0.01921411f, 0.06101191f,\r
1667        -0.04787507f, -0.01379578f, -7.40224449e-003f, -0.02220136f,\r
1668        -0.01313756f, 7.77558051e-003f, 0.12296968f, 0.02939998f, 0.03594062f,\r
1669        -0.07788624f, -0.01133144f, 3.99316690e-004f, -0.06090347f,\r
1670        -0.01122066f, -4.68682544e-003f, 0.07633100f, -0.06748922f,\r
1671        -0.05640298f, -0.05265681f, -0.01139122f, -0.01624347f, -0.04715714f,\r
1672        -0.01099092f, 0.01048561f, 3.28499987e-003f, -0.05810167f,\r
1673        -0.07699911f, -0.03330683f, 0.04185145f, 0.03478536f, 0.02275165f,\r
1674        0.02304766f, 6.66040834e-003f, 0.10968148f, -5.93013782e-003f,\r
1675        -0.04858336f, -0.04203213f, -0.09316786f, -6.13074889e-003f,\r
1676        -0.02544625f, 0.01366201f, 9.18555818e-003f, -0.01846578f,\r
1677        -0.05622401f, -0.03989377f, -0.07810296f, 6.91275718e-003f,\r
1678        0.05957597f, -0.03901334f, 0.01572002f, -0.01193903f,\r
1679        -6.89400872e-003f, -0.03093356f, -0.04136098f, -0.01562869f,\r
1680        -0.04604580f, 0.02865234f, -0.08678447f, -0.03232484f, -0.05364593f,\r
1681        -0.01445016f, -0.07003860f, -0.08669746f, -0.04520775f, 0.04274122f,\r
1682        0.03117515f, 0.08175703f, 0.01081109f, 0.06379741f, 0.06199206f,\r
1683        0.02865988f, 0.02360346f, 0.06725410f, -0.03248780f, -9.37702879e-003f,\r
1684        0.08265898f, -0.02245839f, 0.05125763f, -0.01862395f, 0.01973453f,\r
1685        -0.01994494f, -0.10770868f, 0.03180375f, 3.23935156e-003f,\r
1686        -0.02142080f, -0.04256190f, 0.04760900f, 0.04282863f, 0.05635953f,\r
1687        -0.01870849f, 0.05540622f, -0.03042666f, 0.01455277f, -0.06630179f,\r
1688        -0.05843807f, -0.03739681f, -0.09739155f, -0.03220233f, -0.05620182f,\r
1689        -0.10381401f, 0.07400211f, 4.20676917e-003f, 0.03258535f,\r
1690        2.14308966e-003f, 0.05121966f, -0.01274337f, 0.02384761f, 0.06335578f,\r
1691        -0.07905591f, 0.08375625f, -0.07898903f, -0.06508528f, -0.02498444f,\r
1692        0.06535810f, 0.03970535f, 0.04895468f, -0.01169566f, -0.03980601f,\r
1693        0.05682293f, 0.05925463f, -0.01165808f, -0.07936699f, -0.04208954f,\r
1694        0.01333987f, 0.09051196f, 0.10098671f, -0.03974256f, 0.01238771f,\r
1695        -0.07501741f, -0.03655440f, -0.04301528f, 0.09216860f,\r
1696        4.63579083e-004f, 0.02851115f, 0.02142735f, 1.28244064e-004f,\r
1697        0.02879687f, -0.08554889f, -0.04838862f, 0.08135369f, -0.05756533f,\r
1698        0.01413900f, 0.03451880f, -0.06619488f, -0.03053130f, 0.02961676f,\r
1699        -0.07384635f, 0.01135692f, 0.05283910f, -0.07778034f, -0.02107482f,\r
1700        -0.05511716f, -0.13473752f, 0.03030157f, 0.06722020f, -0.06218817f,\r
1701        -0.05826827f, 0.06254654f, 0.02895772f, -0.01664000f, -0.03620280f,\r
1702        -0.01612278f, -1.46097376e-003f, 0.14013411f, -8.96181818e-003f,\r
1703        -0.03250246f, 3.38630192e-003f, 2.64779478e-003f, 0.03359732f,\r
1704        -0.02411991f, -0.04229729f, 0.10666174f, -6.66579151f };\r
1705     return Vector<float>((float*)detector, sizeof(detector)/sizeof(detector[0]), true);\r
1706 }\r
1707 \r
1708 }\r