From c10fb0ad10a691a45e5fe6592129671f98c9afca Mon Sep 17 00:00:00 2001 From: nathan Date: Sun, 19 Jan 2020 22:22:58 -0800 Subject: [PATCH] map quadtree in progress Former-commit-id: bf7cd851d24efe93f88057a11a73ba8a7bcb963f Former-commit-id: 82afe4283fbea1f513e805144e433c6d8d0da28f --- README.md | 83 +++--- draw.c | 92 ++++++- draw.o.REMOVED.git-id | 2 +- font.o | Bin 36680 -> 36504 bytes gmon.out | Bin 0 -> 39807 bytes init.c | 1 + init.o | Bin 47128 -> 47992 bytes input.o.REMOVED.git-id | 2 +- list.o | Bin 47176 -> 47000 bytes mapdata.c.REMOVED.git-id | 2 +- mapdata.h | 43 +++- mapdata.o.REMOVED.git-id | 2 +- monokai.o | Bin 26680 -> 26504 bytes planeObj.o | Bin 43224 -> 43040 bytes prof_output_nogeography | 517 ++++++++++++++++++++++++++++++++++++++ prof_output_withgeography | 517 ++++++++++++++++++++++++++++++++++++++ status.c | 2 +- status.o.REMOVED.git-id | 2 +- testing.svg | 19 ++ view1090.REMOVED.git-id | 2 +- view1090.c | 16 +- view1090.o.REMOVED.git-id | 2 +- 22 files changed, 1238 insertions(+), 66 deletions(-) create mode 100644 gmon.out create mode 100644 prof_output_nogeography create mode 100644 prof_output_withgeography create mode 100644 testing.svg diff --git a/README.md b/README.md index c59b6db..a1eacc5 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,50 @@ #spidr1090 + +###INSTALLATION + +Tested and working on Ubuntu 18.04, Raspbian Stretch, Buster + +1. Install SDL and RTL-SDR libararies +``` +sudo apt-get install libsdl2-dev libsdl2-ttf-dev libsdl2-gfx-dev librtlsdr-dev +``` + Note: On Raspbian the SDL2 package requires X to be running. See the Raspberry Pi section for notes on running from the terminal and other improvements. + +2. Download and build spidr +``` +cd ~ +git clone https://www.github.com/nmatsuda/spidr +cd spidr +make clean; make +``` + +3. Download and build dump1090 +``` +cd ~ +git clone http://www.github.com/MalcolmRobb/dump1090) +cd dump1090 +make clean; make + +4. Run +``` +~/dump1090/dump1090 --net +cd spidr +./view1090 --fullsceen + +### Runtime Options + +--server [domain name or ip] Specify a dump1090 server. Renamed from the view1090 "--net-bo-ip-addr" argument +--metric Display metric units rather than imperial. + +--screensize [width] [height] Specify a specific resolution to pass to SDL_RenderSetLogicalSize, otherwise use resolution of display +--uiscale [scale] Scale up UI elements by integer amounts for high resolution screen +--fullscreen Render fullscreen rather than in a window + + + ### TODO -* change plane history from fixed array to linked list of planeObj, handle cleanup -* status box layout system -* status box tap for info - * trails w/ altitudes +* build for ios and android * menu system (toggles for UI elements) * map system (automatically load open source) * separate fully from view1090 (which interface?) @@ -20,13 +60,13 @@ Notes: Pi 3b+ and below are a little underpowerd for unoptimized map drawing Pi 4 is smooth, may have USB issues with RTLSDR? Up squared is good, but large -Up Core may be fine but bad connection options - try up core? +Up Core may be fine but bad connection options? PiJuice is by far best battery option. FCC/CE certified! Need to test stratux low power dongles. 987Mhz? -Waveshare 4.3" HDMI(B) is very good, slightly too large for handheld. Uses a lot of power, around 500ma +Waveshare 4.3" HDMI(B) and 5.5" AOLED are both very good, a little too large for handheld. Uses a lot of power, around 500ma for the 4.3", the AMOLED scales by the overal screen brightness. Pimoroni Hyperpixel 4.0 is the right size, but takes over default I2C pins so conflicts with PiJuice, unless some pin remapping. Also lower power, around 150ma Adafruit PiTFT 2.8" capacitive touch is ok, but a little small. Not sure about power draw. Docs claim no multitouch? @@ -88,34 +128,3 @@ Recommended: PiJuice 18650 batteries (18mm x 65mm). ~2200mAH ea. Adafruit pack + PowerBoost Charger, ~$40 http://www.ebay.com/itm/3-7-volts-6400-mAh-1S2P-18650-Li-Ion-Battery-Pack-PCB-protected-Panasonic-Cells-/221923032745?hash=item33aba4bea9:g:0-IAAOSw14xWLSr2 - -###INSTALLATION - -Tested and working on Ubuntu 18.04, Raspbian Stretch - -1. Install SDL and RTL-SDR libararies -``` -sudo apt-get install libsdl2-dev libsdl2-ttf-dev libsdl2-gfx-dev librtlsdr-dev -``` -2. Download and build spidr -``` -cd ~ -git clone https://www.github.com/nmatsuda/spidr -cd spidr -make clean; make -``` - -3. Download and build dump1090 -``` -cd ~ -git clone http://www.github.com/MalcolmRobb/dump1090) -cd dump1090 -make clean; make - -4. Run -``` -~/dump1090/dump1090 -cd spidr -./view1090 --screensize 240 400 --fullsceen - -### Runtime Options diff --git a/draw.c b/draw.c index bebe530..e6287c5 100644 --- a/draw.c +++ b/draw.c @@ -2,7 +2,7 @@ #include "structs.h" #include "SDL2/SDL2_rotozoom.h" #include "SDL2/SDL2_gfxPrimitives.h" - +#include "mapdata.h" //color schemes #include "parula.h" #include "monokai.h" @@ -128,6 +128,16 @@ void pxFromLonLat(double *dx, double *dy, double lon, double lat) { *dy = 6371.0 * (lat - appData.centerLat) * M_PI / 180.0f; } +void latLonFromScreenCoords(double *lat, double *lon, int x, int y) { + double scale_factor = (appData.screen_width > appData.screen_height) ? appData.screen_width : appData.screen_height; + + double dx = appData.maxDist * (x - (appData.screen_width>>1)) / (0.95 * scale_factor * 0.5 ); + double dy = appData.maxDist * (y - (appData.screen_height * CENTEROFFSET)) / (0.95 * scale_factor * 0.5 ); + + *lat = 180.0f * dy / (6371.0 * M_PI) + appData.centerLat; + *lon = 180.0 * dx / (cos(((*lat + appData.centerLat)/2.0f) * M_PI / 180.0f) * 6371.0 * M_PI) + appData.centerLon; +} + void screenCoords(int *outX, int *outY, double dx, double dy) { *outX = (appData.screen_width>>1) + ((dx>0) ? 1 : -1) * screenDist(dx); @@ -361,7 +371,77 @@ void drawGrid() drawString("100km", (appData.screen_width>>1) + (0.707 * p100km) + 5, (appData.screen_height * CENTEROFFSET) + (0.707 * p100km) + 5, appData.mapFont, pink); } +void drawPolys(QuadTree *tree, double screen_lat_min, double screen_lat_max, double screen_lon_min, double screen_lon_max) { + + if(tree == NULL) { + return; + } + + double dx, dy; + int x, y; + + if (!(tree->lat_min < screen_lat_min && + tree->lat_max > screen_lat_max && + tree->lon_min < screen_lon_min && + tree->lon_max > screen_lon_max)) { + return; + } + + + Polygon *currentPolygon = tree->polygons; + + while(currentPolygon != NULL) { + // Sint16 *px = (Sint16*)malloc(sizeof(Sint16*)*currentPolygon->numPoints); + // Sint16 *py = (Sint16*)malloc(sizeof(Sint16*)*currentPolygon->numPoints); + + // for(int i=0; inumPoints; i++) { + + // pxFromLonLat(&dx, &dy, currentPolygon->points[i].lat, currentPolygon->points[i].lon); + // screenCoords(&x, &y, dx, dy); + + // px[i] = x; + // py[i] = y; + // } + + // double alpha = 1.0; + + pxFromLonLat(&dx, &dy, currentPolygon->lat_min, currentPolygon->lon_min); + screenCoords(&x, &y, dx, dy); + + int top = y; + int left = x; + + pxFromLonLat(&dx, &dy, currentPolygon->lat_max, currentPolygon->lon_max); + screenCoords(&x, &y, dx, dy); + + int bottom = y; + int right = x; + + //polygonRGBA (appData.renderer, px, py, currentPolygon->numPoints, alpha * purple.r + (1.0-alpha) * blue.r, alpha * purple.g + (1.0-alpha) * blue.g, alpha * purple.b + (1.0-alpha) * blue.b, 255 * alpha); + + rectangleRGBA(appData.renderer, left, top, right, bottom, purple.r, purple.g, purple.b, 255); + + + currentPolygon = currentPolygon->next; + } + + //drawPolys(tree->nw, screen_lat_min, screen_lat_max, screen_lon_min, screen_lon_max); + //drawPolys(tree->sw, screen_lat_min, screen_lat_max, screen_lon_min, screen_lon_max); + //drawPolys(tree->ne, screen_lat_min, screen_lat_max, screen_lon_min, screen_lon_max); + //drawPolys(tree->se, screen_lat_min, screen_lat_max, screen_lon_min, screen_lon_max); +} + void drawGeography() { + + double screen_lat_min, screen_lat_max, screen_lon_min, screen_lon_max; + + latLonFromScreenCoords(&screen_lon_min, &screen_lat_min, 0, 0); + latLonFromScreenCoords(&screen_lon_max, &screen_lat_max, appData.screen_width, appData.screen_height); + + drawPolys(&root, screen_lat_min, screen_lat_max, screen_lon_min, screen_lon_max); + + + return; int x1, y1, x2, y2; int skip = (int)(appData.maxDist / 25.0f); @@ -376,11 +456,11 @@ void drawGeography() { dx = 1; dy = 1; for(int j = 0; j < skip; j++) { - if(!mapPoints_relative[(i - skip + j) * 2]) { + if(!mapPoints[(i - skip + j) * 2]) { dx = 0; } - if(!mapPoints_relative[(i - skip + j) * 2 + 1]) { + if(!mapPoints[(i - skip + j) * 2 + 1]) { dy = 0; } } @@ -389,7 +469,7 @@ void drawGeography() { continue; } - pxFromLonLat(&dx, &dy, mapPoints_relative[(i - skip) * 2], mapPoints_relative[(i - skip) * 2 + 1]); + pxFromLonLat(&dx, &dy, mapPoints[(i - skip) * 2], mapPoints[(i - skip) * 2 + 1]); if(!dx || !dy) { continue; @@ -403,7 +483,7 @@ void drawGeography() { double d1 = sqrt(dx * dx + dy * dy); - pxFromLonLat(&dx, &dy, mapPoints_relative[i * 2], mapPoints_relative[i * 2 + 1]); + pxFromLonLat(&dx, &dy, mapPoints[i * 2], mapPoints[i * 2 + 1]); if(!dx || !dy) { continue; @@ -752,7 +832,7 @@ void drawMap() { if((int)(now - p->seen) > DISPLAY_ACTIVE) { planeColor = grey; } else { - planeColor = white; + planeColor = green; //srand(p->addr); // planeColor = hsv2SDLColor(255.0 * (double)rand()/(double)RAND_MAX, 255.0, 200.0); //planeColor = signalToColor((int)(255.0f * (float)rand()/(float)RAND_MAX)); diff --git a/draw.o.REMOVED.git-id b/draw.o.REMOVED.git-id index 7c1526e..f402cfa 100644 --- a/draw.o.REMOVED.git-id +++ b/draw.o.REMOVED.git-id @@ -1 +1 @@ -5bec8587fd94772a4061e38543ad9846ffb0fc11 \ No newline at end of file +737abac0c33061fb6e1c86993e1b329d8a451dcd \ No newline at end of file diff --git a/font.o b/font.o index 1b9094e1f1c196d1da92e0fc47a3baa2e7a38cff..75c233bf95cb4ceb203437a7334de8e1358b8055 100644 GIT binary patch delta 6586 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 delta 6605 zcmaJ_4OCTC7QW~4Cj`P1;czen(iDH{^|B-;lNe`sQ8NQi1VvFKB}C%qiTYr41TqU! zLe{P|>PX3~nzC%wi%GMljAksIYKm#4>EtNcs?f1|m8r|AW}kQWh1V|Uti^ffe&4sx z*=O(bb1z%EZ3iB*ZO*XW((ar5JDaHJecU!}q!92yTynE*)=0yM3^AxA>)*tXp8`W` zkQ!Ew(8?_`{H<6-bz6=Yh`=AS9jW0FW;^O#Y{!}H=p)!pGTSlOzQRZ|A4X~-!)(Xt z_BCePegxLrzsYSwF9W{GtBxZ%?8X>9^nqCEeBEx1eeG5~9n*Z8hC|Kvb%$Z!sPz*+ zL1gje+Dzu?c3PN0+RqS?^(SZaz}*2NpfmG2QX!BTt(YvhEmGYEG> zYGU%(^VoV0l@rAr+iHxxr3;mY@qRq~Tc*s6!{!$ONs+A~NOC#iBSve}B5gX!GM$L{ z(8IOxY~nca1RP4#&PT}7rD$(wp!BD_ zErVlnY`|G>K=ET|I|=_k&SoX0xc-B(H0_&+*Go{B$>xt?T|a`n4rha&Ar3NUIFLH3Ls=|^->5|K zVQ+<6n$r93^!yN6Q(j+CS5>>Rp{&suZa4L&|7=5a@8h{Gq2g8;xK)bcUi)ojBBm)w z)Yx0`tCKc$Jx*H}T*ZMBg>^Lkr9pYV*A_k+j^N906^Gaq9jgQne+Du{Uwu^F86Ize!}@Y)TF@yDLu6^0 zm;hC!4sj5+V*NfGEbUaAQ%!$H>6;IWHOI~1St!*~Vka^7dFWXvvFE)Dy`mJHi(IN3 zcfT&LGv!j~S|rtLv~rIz_O;%=MUREp!joY6?Tb`Dsm=v%=3!s{3In%G++!DRcc>)F zNo?Ro9M+^m&Jw9&DRN^NI}tofq;Ny~5{GirdYQ&F(|h}uLHS^xuIim}2)m(_aKpDOC*Z zjmvauuvi&N1t+pjVkKi|K{>KT#ExTZC3GR%M683choP_1A(Fvg=~9o-iB!lm@!(!2 z#dxS%<`Ny?TPD>*lszv~J`DrQWS*bc^^CRA+}jx*Pk1N8$3sq)6xTyZl|#frdzA~< zUw@TU7bvUym_8fCa;c8eI)39vtaG_b{0W+{eiizbJH#X4NBt{wPDWhz!D5x4 zhpcLc%Al(vm1%wft<_R3CUy#A*MhJ5b8!vy-08yX58mlew~%iener?+YrJ?O?5uH# z-Qcg0>P_)|H7FkXP?=Mv;eA%xVioqmJRTps!w^%l>+) zKBkp+FVj>(x<{%Rw5NcvOTq1t;%TVzIK*AB)zc}WVbThhcoRG;_K8*CY;dV#RxV<6 z6o%uF09_4UTUaVYt;`io;9e=!c3MUrCY=baD;@a3;X}>Kl&}t_IRyi#IRy4qQr#VR z2{(+LOmi4=kR7DS>|tyPcvd;YWaz9Z0(P$y?U3V@c@Hv8 zA6?cx44+3w=Ti*dLHfPWB-p}xI>g^cAx6lS2WcX>y-C2fjrx*(JrFs6) zUQywC#o)&fy-iztD2EIb!}I9<=SqgJBZr*O)hN|XjLkC#G4i0VQ8pJb_5oUy1%#~-)I=8Xn>|45QcG)I@-W+FU@!-IM+z^9Aj^wHTWu& zuaV7fGd7Gu`~kz=Gt(EQ=~s1gll~aEh8H(Q5}D+Powia!o-J9 z*aYgx&J2plATbEn1H5GIUWQv2hy(oVq__bFnx!a&^k%8%kx~z&I~_|s*Mb|_X2w2D z{yYS&$nIwBN5mchUo*bdGWKg?BWcfABZgUXVR#1Nlfm91)isP=jK1pPf*fS6eP{)A zG=1+b0uQp)WNWb#>D#d$dRk=OZyCFt*ybQSIN9w%xK7@8q`x0TtIXTN*z4#d=nlez zGqsE1R;G4Cd8<_Wh_zysLNPoFUC171>~vz!LLai>v^Xu>J%M=P|Ea)_>`jdQFR_au z{Vu5*85>PKZw5EA-Hf$1-jmRZtdFzQ^8xT7`%hx6TzpCKISd2Ho(W=gl;)D{Ik2yn zY9xL4Xj{#$rPDPDa*$17to40@-?zw4W$bL~c{=p0mm(XScS|uJ`cYX%N-J(xlM?@D zayNdzGS)g;9@RalXBlh#+we6gNA?i&;Q+1hlhB2uf1+#WXH0W}j^-~ffnNYW+J39+ z@-X@?vEs9fY$Gp$+Zmoj@l3b`o&v2Kq(~3c8Q{bA)IdEA2C$u}>*g8E_K$Qu+fY+K8{uwvs(@fP?tW{U&h$NF1vZpy|_T+gQLs7>@w+vqfS zVbgT61^h_;4V)cX?CHq1#kIk+9Wx`_T;>R0z=e*?$i~~urz*(0KQpqv&3rlp9#=eU HYLEUOYFSzE diff --git a/gmon.out b/gmon.out new file mode 100644 index 0000000000000000000000000000000000000000..cbb6f49c8d0dac4a334e1651fa2ca6505616d503 GIT binary patch literal 39807 zcmeI5ONbm*6o#veh*5$~l95p}(z@^w6YUwJA&JI{B$|X|Xc3H}kWwRpk4%}4yCA)g zEEJ@dJ~joqQ4q^aL~vDt#@$eYZX^jEe4}WS_}Z9w&-u@l>Ylqx>*_BEr_WdCo>TSR z+Y`bp^5nB~`{QWjYOV#?HH%xjwnx!EhdNI@KDU2g$5;RR!2?DbpaB}70UDqI8lV9h zpaB}70UDqI8lV9hpaB}70UDqI8lV9hpaB}70UDqI8lV9hpaB}70UDqI8lV9hpaB}7 z0UDqI8lV9hpaB}70UDqI8lV9hpaB}70UDqI8lV9hpaB}70UDqI8lV9hpaB}70UDqI z8lV9hpaB}70UDqI8lV9hpaB}70UDqI8lV9h2pJgt4>Csc(3*FWXIp-Q9pEcOvd}H0~L!b^tDOA#Svh zME4@D64)MrQvwGD4;QGsUSR7!BOrJtBY4Kfw z)d>7dV1Evkoz$YdQIsL^Jv#!k=Ky{0Yh4=m41Qw0U7<5SQmL?gV0igUQrYML`sK$2 zrUwBZkXLcn689&Lp4ZROhG!7p6IdQX^0PtN@i>10&@aDGVD>iPR@*DxxV|)T*WY$? z)_sms+lI<+>UMPB*TQJQDiszXn9rlq_teTV1f!#<^n+H)^oBvdTwxM|xxp!WUac$* z`sY;G{9t&{3K^6b^n(SOC_!^bxK1WoT z{D5TkJH(GJaLd~UUpJ^`}6M8157}xC!utc~$e#8o+tmD}@b%lh@#;9M?EA_{znA z`aNo`MdG*P8>vhUdY=k&gI?WIsVqjIRyJ=L?s-Hi+Xj74g#&}WCn{T5J_K`vemAwU zGI+-yZi2h?YdA1CeYOT0_Lu$qRp^aD2K^vamxW;0;OXztQ!9H08ynG6VQKJF+be~Y z!8f+nDqFWBxy-&tlEv*1?1o?-f@KJ{*JIFei#n)lNmifU3&A`Dix4bBFxiah{>OzL X#cl|u+fcc%2@&c-Fu5mCSp?ueYcDw@ literal 0 HcmV?d00001 diff --git a/init.c b/init.c index 46d5643..720cd3a 100644 --- a/init.c +++ b/init.c @@ -2,6 +2,7 @@ #include "structs.h" void init(char *title) { + // raspberry pi compiler flag enables these options #ifdef RPI putenv((char*)"FRAMEBUFFER=/dev/fb1"); diff --git a/init.o b/init.o index 60eada60fbb9e10121585d6f7cddf46360135efc..129f6da5576fef0e9286074f6db2df9c54e526db 100644 GIT binary patch literal 47992 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 literal 47128 zcmc(od3;pW+4%1y0RjXF5FsqV0a+rDkc0pc6f;RCBrsV_CXgU?m?V=$vzeJdKx=U= zs3@-GwJ2(-rPbHcmRhwgh_+%&tyODrsl{rmR_kl6TDQXQ+0LDNpCs?+)8Frp-&M{% z&-b2t*5{n_oOAD;e8V3oP4IXub9k(kR$MaFveJJX_ZO14&`P%^TeW37zI@yZpzQMZ zbDGPpNt%<1!j6*JnYoAF!GKpD8n@k(U|F{CTZljRB#D=wg&{oGjKPzC$}_%y{mysk z8=h3S>zQ#^^gzIpYlh*qhb`;msgI#kw&PE9Ywq)porI%o$J1pyCvs1VV z0<+UfAZ&WcHGpBeQPkbh?2PD+nU-3 zn1j5D#|l7BOdf$W(UVN41eTHn4o66#ljfX_!4gR4nanE%l9V*8y(=bRPOrc)$&N4! zF%1rW?bWt-XWV-;dWR(sPyPko>Y)Tjpr7({Y}hB~z}+K3wuXJ$k0ndCD3M z*R5fj&@Z{ftl!6V3*&b5>9;DcsM1OAR zL~ATw8i&rXvpvY!U+D1r$Ui*!Cc^DDzXkh767#Ldx!Oivj68+;Hsq|yBd=-!e;RZ0Ph$T!`yu*tYhv=qJ>#Ln zGrR*M5&vFF$Vy8d`CmB@fX3*N-;R6l#Qd3l57B(L-j3#bj%fDV(cHb+j%Hsxn(r?I z%4N3cGlt zD&w?j1=bR&YKw_vkwj9x5J(CRBA1#=9#*K)doKh+x;6SvY)tmvg*jsHJ@Ekd#{>Kj z1CT1Eq@Qbhr*zuhso$`@({2DSb&)Z%6264wh9_fIDEhIpanDWrHO4=k!yiSzm;Jv% zKWly3v*^!c{#&fQ9QHql{sQ*@?kz~Gkp0i2zl{AapyE`s|3!?ap8dZ^{|5HIgkd(a z{}1SIWB)M>)5HE((H~>~Yv}K1{~ytRG5cRf|2Fpj3G=X>{m0S2E4?Eev(nzkhqCWZ z@96Fl|D7D>&v@^C_P==;>goX3FnX!=$3eYgb%P8AP5bNV5SD|#jb8D;gZ^aZ@8Z2Y zxTO6JtBMDgwD&MOUJmmc#1DDZw)f z?(&M1=)pKLMM|QOIUyk_to`Nz$1KGnyltth7;{Oo*jWu8pQ^Wg@Y~6A)>f zCmTXmidNP1DET#}B7lt%emv=;3LLomCX(>q`i?ocS&qOL9=_`@W zAjwMNc3)0Xl1M8^N*3u%l2SxEi=tEmEZiJAZxBj2;{_sysL*ZIf#?9<*Jyi&RU} zwIT&c+9gsQNjHnMmZaSxts`lVNcAM$DN+MT`$YPh2Ti8^B8BMM0g*P6bWo%)Ne_zD zNYW!BHIZ~kq-K(y5-CE`5s_L*Ix12tNzaMYM$(HSwUcyAr1MF7O{7lB^>LB9>DoIY z^^o+wNEedyp-54ZJ{BoP(q~Cl3XW^|&z?!1g$7E&VG+kao8n|JJQ-~Wn%!5LYbUK! zX(a9Q1feP8<9}i**+*oTopSq=a5sB@iV=B7Bw zJeL{IV&f?>o~ZF$VLYc8PaS&_(^Dr?qKWB+>`6+WG>J%3`ds5#YdkIDf$cyJ<1ICw zO~!MT@hmf*ftU2{4Qq4rD8llFy0zqKsB2(S*RZyM$=ZfG@>H6@m22~IiB$P(z1GC^ z$xAjtLy)~Pd07kSoRz-Wnp}WpNK$&6HTewmv7Iw{Ir`adp1cCL98$SIOgnxf97v zBli??Cy_gu+;noMkUN#!Y2;2PH-p?6qFcR9H$$UT$Xv&daZ?%CvW zll#bDL~b#;CFJ_aEhTpqxn<;*le?PSHRJ}!tsu9O+$wUb$vubM8ggsN4U$_&?pku! zky}r01G($TJ(t`K5xsBvDk=smegxnT#Tgh!Bx1HSc$-RKw4stum z?IO3E+#Yf-B)6B`D7i6m`^eoy?q+iP$=yQkR&p;Q_hNFtPVOb-euLa?MU z?l;NZPVNqJuO{~za<3(KC%M;=dp)_k$i0Ew8_B(i+?&b0h1^@o{T8{q$^9>KZzK2H zich2Yl)|Smd>YHAaePYU(|A5j;L}7t zrSa($K274&WImL-Pc!%gbCV46Q_9Y95Aq%=cmlbJpn(t`-o4V~q*Mt?Q?)6tK1wq<2ZLw`N{r=y>D ztTHmPpjI|A_abj*|4j6^v40l&JJ^33`g_bj=Ci=Ite?IMA z!MXt3d3f@rd#AHhQLY7p)m%|Zz-c{Yw?!H@OSCPFC+JtC|^pbXZ662CkWq>_MmShzQjf*`aY(3RV~vo7Rb&trV`WL zALLk^r6l8Wu?0s$3wDx3ROoz`{|7X0iM133JTe+>@3a%Pcg97__%bX*FY?$pVV&)r z@ip5!t-%g_>UfXspZrez#;K3np{IUihnV_7JVZv=4w2DaU=p{PcfNhs%$5YpGu|_2 z?8MQDW2cQB@0l;<9wp+i@`)&pHp#&9-Qy{rhkw+GK}tN<1&HJvIj7z&uQ*3=cCIPKQ9r zTynfRg>nPa$W%y7_}Nnu(k*Kmq+{PTJsx!d1kP|26T}%3Czcw-Q=R3(sJuy@m7}p1 zO(te$LW!qC^0UYTqw#6vftzPL3yn9=aby^-&&~FnJ%!tD-V|)k!t`$yO~Hztx8pK+ z80^UfZzg+hDVl=P>BHrti7*#HLAV{9M6JuTM%yIcd@92EWZhkyh(8u5=YiYKH?c6n% zi)UHOTmTAR5C=x-;Y<@5oIO^Z@jmO}>mIAtcz-J>$@-_KZm*H-sl}>w#7N$i0_x?Q zVCC#J{#IcgtHH!{+)lE=_R74KVBHXq8|>3)xps=2M_Gd3vWO3V9oo`mz z5IiXm6{HEbcsyT@9RschGY9`Xi~6Fyi`u)II{KO;i~0+ehL+}Mb-?Rk{aLMDeTy2~ zV^NEObhI}vYHey77-X5bo5M*|E@9wJ81JIkmY#^jK4b=>TT}>mmkq{me7P;V35ytw zHMe)?Ww&8rz~3Bc0Y4O!B4-R)Z|}B4kQeF$Vh%-mdpp{rF}@aS?~H`d4`xQJtv3>G z&Wg5$dn3(Rj<|aGii6;7a1+J|S?P*p^?}pHQTBB~?9F_&H4^LYiG`ZFdoeiVwlf@S z<4Y0+=rj5n0fIN$-r5!J-~hd`j;v^NFAL3mojtiZXXJnc2h>N15^e$+#toEv+WR9N z(YU;+y*YvvAeW;};jX6cX3U0=&PX&GZjCf{_s3apq^miCNlF-aN05cia8GkM76yT; zzqhX`hG}tL;^8~H`=X8{psKqiHpnhC350|?gU%}Y4zJIglendR_2K zmpt?KzJ}!M`yRhDd2{j~l8?cE;NGyJb<>sYiT&B_?QQE5Hzc)spyy`Wf1+M_)k;Vl)=99BnnxVaSG(4-3$ z{@PmKDt}Q`eWyMPh!eYj==9aj+&} zHTt{4jUADa(m;1>YkOBKsBAbEYL0YvH}}Cy6OrZ|tEVj-jf5gyZJ;9&$USOvL5TB2 z)e~%}_J^vmv?aMqEqII^>h6p6^uolO^N&Jn(9z3 z#O3FVU@iEHDa1Oc{;GAMvhtD=f2I4Ly2>?`RqGUlhywmnY6ia*f-3Hf;hQu)C7`KR zcXM;7sizlT3*lZBh-`{CaBDQ42dY-qIjGcrUEy>kf3V;MDsq3Y zuBH--(B0A^&1P$=uev%=UQ7kBYN6%(qE=H!B;3{4ugjc~*E+Yi)b01wA3w z*Bh}+--ua_b_o-6z%<-S^fz+W7+Hn(>*cW<_OdOC6B1{Dv5S~_)2`D$u> z4W*!(uC}YLf!3=nuJMaD>2`-UgPz(8&DIiXYU5(rc>qmhbt@_lR`{x^2Zr(&=jB>m zE$#iGrrsuZV!q9o3G$xCYASj=^79LS3sZ7V8Q1fHGU~8g{50Wo6ySgGxvG(pRtww|P5P!YDxGv~-r&C?EP8xZ0Z+i^;eX|9xa|cBAr5E}F>wFEh zAsBry@1RsoyQ99Bzjfbx~}?X=^5_pP(x5T#s115ac2f` zJj#U}VvCf4If4Urd^$nHMLM`NQ)yiwASxaLn;_hD0jhGSCEU(qon3|i4nSBv&eWhf zFfGE)o?BT}>9?A|9D?aVWxc4RJODF~Ogua%aOc3Ry8{ERxpRb2W7^7Yd=BMO<3Ac1?M8DCnzQQ{=00*C14Hh0l$kr#7{jIm%A0 z3bc*FIolpu%SRo_Ri*}ae2~wePqiv2M_p|Zv`}rpS6gQFRQJM*d2tnDWx&`6L{;Xm z_m%jI%PV{V3(Sv*uc^CFOdmV1#lGrVs?xqLoVO#*UMP?Z1Edvp{Pi%AwMV*S6tN?y z2D`&=Pcm$P#hf-vv@y!VYiD~$M|-T3<~tlcpl7v!J%+<=?UraP(isHH9OpZ**1959 zjpw@yR9RPn87&U@b;H11FmS|&sw~6$ir18xCb0{4Mr$LHu0S}3!?3Ykz)QwjNognu z>!wg~cW*C@{?I2uv8%g5pQEAP2$(pa(Ht+Tpuamd+8>#>uDLKlFxIdZ~vO1&P9 zyS7LeOeyI7FyCMUVK-Qs57iS2wdUd|19KCu#=t6wbtu~};HzAvhF3&+?z%&y23X3qhLTWORcbZGjrV z5F*;>=Zvp)_P})(j4Z2as_MjAksE9LwdL!5MFC|$kwsTs z<6q02lgu@+MfxI98H(igit@_xit_bP%oenBp>Ge!I0TVNAYNJ=SZR3#^Ev9MtFW~V zwKe{8h?!KX>T3O9dKT-5YJ7p9C5wE=BnVv?#*7wNl0xKqu~6Z!tfR=C69q3r0<!dX2q7lfiPk`0Ijy2xT}DVFA{-fc{HDI0W0fBC9Ph!t&g*Zkca>42^n zip7+f18V0#r_L9s_0{I*! zL|s%~>8ojwc?V7~w-<*yI#>}}yStllS)i83)QBPI=UC~k#)N62tg6C~gE@XrNmhco znU(>rn_y7`W)BR`(O6Yq3=~TlXhwH>!muIXoXBc|+(VsB3vcRid)tMSRhKJCQuvAi z>j=V?{(3cnKsCju#2{R*gJorLF?3&;6k#38YkfOG94Gu0HGUWp128SypQ#QRbSeZ#C$uv8~h{)hf5h#*1As zs(-9@2WF$#4y>k!3U^>NdCso52CZdKwH*Q5ic zI(BaEhG3%xB3%v>RVRV({#s2CCr^bq&_%nN!2;uHuES-+8bb^#0wc034F_R+hLq)< zg;OwWRE2QkZEJUz8tCDc9GD8s$O2m^%`or5y|5t)XV|O6eM+?cXl}v{7+qVaOUByj4EIw$ zbr=kS8<*5oqWB4!D|4V2FiPF(|Sh0ZXb#88?+wq^#g2Lo)P!iFu(4X_gi zDVbG?HZWk{t~OXxRbA${+HqGHW=vRVwbtN{HSHIB?NugBI5dBl1t(2Fyjg$=#BDJu z3azoI2iD21qn_zt(gW*`2T*6}v6woWprHYnA1!)(fV)|+M1_yf;DfgitkWX>?skRH zY~l>WxLGaMCe#Z)&WiMg_~{iC0(OUK6^Bc=iZJvTtx#qUk*tdWvBNa&D=8th#hBTo z!bqd=Ss56(o7&;wfzPo~;w&}}QM}I%T92LHD7~|17uz#B%;sX)@Wkxe9dh1M%C~@a zLQX>TAcF`OZh)a*;p4$ww74!<9w-ks;D!(OOR^^#!(_#gpR*Cdy$UKfFV@JGjBO1y zM`PH{siFp?B#&;`o|2`Gb1OMFZ!sGOTAxHYT(a436Jl+Sz@9dH72>6_~)r-0Xd!e#agWKfIK(#&?Wi7om0y?(U<07xU7Ny8x~( z20Ux98`@uw&n`$SU|N7@ix%_*e6;1xA3S+dwlWZCocKN$Y{J45Zg>{C2`ZqaucL$Y zk)qKx3wlW@x(005tQFsqw8u5aFkL`TQ|MWPEQ)CsfOS`Sb3Y7~_~0AV43`_U5Tjj3 zstw#PbUt^fgKognmt7;gB>>9ru7UE(TG;Ke;>Cn5=2(~?3WG|*=00_k_AY#sN`o$M zOuC9?wrlLY8rR6cV`>PVmBdi`@k%&CRz~Rn~cnb924R zvh%ZZyjh*GzOKkwtr2({)ZPSQxVNe8EO>_`YiYhWtJRxTmFLZBfqHAYAgiahI|kd8 z-Mv}S7(7^o2N^Q<4_u6w=BmX{X|Af`(p+2s;e+j&&pR}7_j%J?kJ)AfV)7o>nsOXF4|OuepnXfIfvQ@Jj{fI>@Ucn}1;3V3P2 zG=gRYl)DX{OHcr3x4;kW+$jxV7pQ_lvZ|y&R8fJbvI5}=%hoU;YE1-0t!aU%mIb1k z76`O0RHF=a?Okf5g8&29H$`@Z$LBfodI#K~*114qbuUr-2y;FC&su1g0tX-WCoa(MnasHT~BP2yXjGWEjBst2r5yve=h zB;?Es*tTfdi&fFr11}xHg%k=XEB@`yX7D-Ow93JCv^cfx`Xhl&cGDpNjO>e_~KR6!m%A@8p`q}cmt>zH=e?s zG{@o4jf+PvwqvSB+t!_X*`6O_d9_BKq0-iTv?l_#2yg8SY6w8=E}NBK2BP%>J}i_+ zmRNc4K+0Yy*V@(Yu#DhwCt60(77i!|lp9JFxFKjKzCZ_$&$r1lzUUaawB zpCijIB(I*(N}V68siuTQYmL7YcHY%q6FqdapPxA!*nSm@^;+qpdAx1k!CDf+S1V|q zhb1n)#)Jz(sT;G83p)hzjEzkrr}f*+uW-@+b9YzA7TQLp2+Uq&XCwv_q+2a&{T1b0 zOZHf@uDuydZ?bF#nm3`QzFttdj=oNwQCu^>*^rU}4OTYtv;hV%+||J5ar9SuIxib0 zoG1oRwZ%&`-LUnr;j9@yd!`8;rux1fSq+-m7N2L?RgABAaWgv?K=icH6>SN;@dJ-; zTjU{pM>9SWrMW&7ZsG+%pc_g?kB-@Bb?2+XR}OY*2QD3;EjoMLSL4r-sN>@4_g7o(P2uiPQy6yi-0>7w zRjYX%M?d@h8CaZ}r?u|fs6nTOUiXWu66hCJQn}z(6 z8qXb0^`I@nTzm}VDq5L801Jq4E9@!Y2p!+Sr+qeVc2_j;dja&ik$xNo58tZXQNysh zmRmt|9NuH7TovFs7CN0fG*1FD!#SRNv9ja91tx1RX0-!%f%xrL8UlJs;k8ZN9&*m! z=FLXve*@l8aJ>|$OexnjH3Pe@Ep}($buFK+Ia+&QXK{sBMwjcFGQV8clp*H2c82|s z$?EaR3tR3iLyi0Ei{VYL0T|zHi9g$PHb2glv}=CC)>*EVp1cw< z(A0zX+hi-x=(|1C;|3^9)As9Tlug$dN;wH_is1{ggLd2+db2W5UeDkN92@mm8ZZ~Y zELjU%kr0VkC&mJ57Ym3tm^af{FI(VxkwDMacn0BZ3Rpcgfs%r8!0Q~?aKfK(jYXoH zVRTbfE*3?wYSk)Oi8yCzd!}*U5jRb&RmH{2y_t25pyqwN%FD{_BPsWi+=A?!{OsJ* znZvJr@!{E8V|n^hJ=0P~B=3UP+P#43J54y##}vM?sh1}N#ug?X@{Agr>KmI}G#Wqd zD1?7_&_{$NV^b6SW8EJ!@MYVDsNv20f1I>|!;^^b(+_ea#=oI(T}{My{0BJ_@x}W= zjzoM3evl*48Ziik52)-_#12*~2XO8q#%)A!&I015CNfF%PT<_{;~6q3Vr(3sPd>6Y9nUM|+tMZe{`>tW?W} z;Dtl*@*y~WsWaaC=%g3Uc!kdE!?A-k$P*7n&bJc=HR|k-Nic8r6Q04J<_`L{ zu>BngzHkBaDZdv_?_8OW2I4QYV&P~%6${56{=R@-mxN6^wSJ1rurF?3bM903ns*s_ z#eh#V`7q-Z>cb@X_Z9vKJ{$|=I&vJ73}5cxIPVx+%tJ~6eTBCk@sP2?uUJ4Ei2 zGp0Kg{+al%5^mx*{2E7i_?q7if1?U-;y2@ziO1yUJ{8{dj~_YW$FbI=i{lL*CY}@) zt;ghScueFYiktjAtGLO}?-e)sc||zN@M8jYevS(_={Ae}wu9rZfSLS%Bpl;G9WWfn zIXp}}#x602g5f599REys90yH25;F@E|`9?lmjZsPx@ z;%7>JZdE)We2?NK!uKg&DEtSCR|`L&c$x5@3QqzVe$Bwvhd(;F*TMgx;xYRFnc}9u zBwz!=f$`6Te@5R%IQT3FA1fSBXg!(m8IJI$IruyWpY7la9ekF9FBXm`wCPOzs~jBL z(e$H$aLoT)NBCM5-t-In&3!y{_>c;3^ssq|@E54?Mz4B?2)|i{$GX7d;vvFc>frMr zoT-Pa9X!*)jpd6Ld@}qqM~ZlmqrU)^2o7WU8vc?j73fFe;kw~>h~0s8jt8odWP#+< z$>s3y0|EAt?ckVhDh@Vqtl*O!|6v?-;V9yh%@4?@@n|pOVe*rTlO!Cb-x&TQnPAuP zWjp+75`Kf?r%QimSNv6pr%UlXsnl(X-!2WgQ}N|EdBS1lO_R^VsMK)W&L=ycf0jz! zuQ*Nqz<#254=-%2BZ@B)1LS$d>%9zKSNw8G_iu_fqte0gDWB|oek%HtAoXX;RVE5D zR`EhKI^dY9_)VgiXpiGz;u$CUwpj7YCEY^BzbWaW-R+F$6VbQziU*}!t%~1(#u^+k z#q)45gX2=g-xhtiPH|(0eOvKN=_vaZZ_4EO%{XuB;U_ql!EsoHpR$m-`56Zj{!bF_ zH5I-fk;A{M_*$vAPZi%ii^C_1UYPj*j*~4MsfzEF@Mios;qMVXUxoi~;mZ_XE_za; z_SQMHIhZwiqr{{2FQZuPeSn+Wis5=SzJ)q4?gJoS)w)eo!W! zmlcmmx}PY%OZu-tN0|*+m(vHEqYk2`1z8*O2zld z1hQW7M})U1eoXSYMe&Da;<`fd3%EM1U5dXh1HsSNtpqe^Bu!Wjr~gIR1tZ z9!C{_Rodm4;?GIDyruZN(tkf!JaZPuKMV~JI7~bK+)JW0Rq+kdE^`#0DSEzG@ja4m zq2eapfZ`_Iu;L|B4;_lXBIWH@yhZeFm*OL&UG^xxLgwZDisKK0;c-y$ugmyzNbxDN zIs6|L-y!w>q2l+5{(q_XkH&I5!$n_AyBIrWmf|0be#JM49sVoDOXhHS zUsC)%$^S=+-z4$;Tk)+je)8YVi;sJ2q+gGd_B8FgSK589;^&FolBal@j2n%Lf3bk` z-=+8@Nq4K_-=D|fuTuOAv6F68{O6(%cPRcX>5o59{Fvzf1By?c%jq6ge7KDB&nmuM z>iHGLQ)PYeSHF9lyAK9*~U&Gp?I* z8U1`l#q%f0&+irY$o%q#;{2ntmi2eVS4ciTSKR2sFsW~opLe8P#w%|0oPS`L*Y7!8 zHRPVB!ha<5^7)EiDgAeo;)SB;mnm-68`mlRvGlv!6n|Xw^LvV)6no>K;^&LrKB4#_ zsfTA3pE{ol{i@;{PG|m(;>JGyMDYcphpBQl^?z9=$1_9m5%ZZZRQ#9xAk$i|_>ZOj z`Oj&__0TWl;aU~`3DM79#h;UTberOjiCuJ^;w3VE?os>&DgO@?zfbb{q2jNKy>UYE z*QLEuWS+;%nB*;@=TjBW6P~H~Z$y8VD*heGkFi@#{L^GSsZrs}#s1r<_|K$1FIIek z%sW>r{-EgFZpE{teGe-BE77;Ziq8}IImOSF@#J;IPe{AGuXwxE&lifXmU>8*b~g1h zdp_&uB*pKMcxEepa2AKpQ@llZq2jm7xKXKixAgZ7ihozy<$T4j7rpA&d;#a@D#aIx zKHRK$v7~#q;y#&w4=8?E?Ayl_|C{K;QNvs_7XFUn>tx*cRPh8E_mf1AOnY4< z^T-6n-<9%u6~9UPd$!{Im$Ts=7{xDQyteg$c z7yX~E_#>j{^A(>f_ELf3$3)*s75`A`GpP75X|G1brwZ>;e39@=6rU;Oy;kupV)x#r z_;)3r`xSpd)<+L0zFzwEQ;I);6$r=kir*-Da$NC!3pxA;ivL^m;cV&0rd_tmxE&CV z(JtaB$X%zxS4+EWP`q5)w^i{u(k|an{CCpsS1N9v>s+JwKAHD#Q2Zg`-%|Xz)Z6Wf zoBj0fD85?a`M%=sNqK*$c!`WNKUMr@=`TN5{8<@)o>1IBj4S*1if@y4c~$Xzskb*2 z|AwS%_WMoyPLTQUOBMc8sUMGw2PXVuGM|o6{G1V-&oPP{yLqDG=g7D>Me+Tj52q@= zSH{~pim#UNXDELEe9q6=is#8Z;#d5TaI?-f<^53l^*JiM{DClQo#IEuF8Z3{IWliu zsQ5Igx6O**EA3_W^GtqzA^qrb6`uc&yJhWAe80qhz2c8cxo%NBQO1XFE52C9_q!Ai zi{AcJ@rg3N{ao=JvFn~vT&m47cB?7x>7th}sqkZDJp7a54YCe;NAYfn=O2m(q+PyH z{7o6>6J?u-Mz(imwrU=vTZ}=D|x9zd+KxTJbGXuA3D9ndE^Sj8{BK?w_jox1~N$Q@ls=vrzG;WjtT0_+GIq z&Qm;7^z(ehbEVxkD}EJc-?~ikW3oTCa|pgy@n1_n`mW*+N`2m|c%qc+M~dGe_SMf6 ze^ln9M-`tZ_STb%w+Mem@fT%${;lE{$vFIy;^U=0|ETy;iT^Fd|1II)Q+&USlOHKQ zO~%L1759lgm{-${zRi|?IzpZ&8~)!i?xiX|Qu^Z*#Xpep&QiQs^kjkJCq$pi6gTgU zRVw})DNj)G*MzTE+|<`b#lMj7EsBp6xkK@Ek$V-NCvv~yOGUm!algn{C~nGgwc<@8 z?^4|4<5tBl6?u>1=Ki}C-z)Nd#g9q5oA(QhJ{**A=4|+r!XH-gJTLMg#orM5mx_NV z@=?W4ifrOD>5i3g@0bdoA^dg4r-(iLmg2<{{%?w}5Ir&ZGU=`s{;3MzAp9%E+k_`b zIwl@7ZYC>!m4r9tGvRL$o~FX@6Fyb(p9uFVZsvozia#rMk+CmKy8QQ+;ZMq_@MfJ{ zp!n})UR$a7D>5#XDE_9*3#%3XgUo}~ioY!5&sxO`W!~AK_=_@MH!A)ku^ZbI-z4LC zm*Q{BI2KdsrOlbA=lfH_w}QEB=d0u4nVWsc~RQO8ak0^eg@WYCC2|uFvo3d_tR`HL8zo_^y(Vtfo|BKjl z#})TWyZlx0_hdeLU-1@6_anvqnXGW1DgKnq*C!OeMb;NdG7p>jyjk`EMk)SR=|`!G zCrUq>r1(|R?$Z^YCGpQv{7ETqrs5@-F*vdn|5)PBSG-Z?{pE^ZA@)q6;@hPDOBH`X z?DK%)|MpULtQy6~&17D$_)OvFDZW^Ev*Lc?=PSNWxUr*6d$kMSq{3e${9?uV4<*BU zFN(h><=U?Jucbb(Q~XSsziw9iZwXuvw<-RWwELZkKO*&fkK&W0AKj<;JmEi9{3@|O zA5`4z-#w=IE{W$U#qSdSE5-4TCgSm&;)!0u)=P?~34cxTIl}*}_)_8TD85Sg2a3Nf z_4%>lt7ZKELh;E`KjytBqd!xm-wl^}!0=8*5)T@09Us zw&Ldb@qEQ=CI2~!-?-4CW2xeY8Cz#6e!1*R6e+$^#=|njUzT($6<;}@69_84Uif;& zHwoXU_>IC_6hB@1QHSD(C48^quM6*2{0rfiC_YKr#k}7-3W|e6{Ce5fy;_Cu6uwLG zZNhI={3hXh6u(FK-HJaXe81vHh2O9EpM)P&{3GEHE51$k6Amfm5IQ;QeI<_i)iP*Q>6u(a9->Vd#Aol9Ditm+i`$ok#$iB^P#qW~#y+iSs z@O_G(BklDA#iOXGa2!zlVh{5N6u;{<=8q`uU%>pZ;!~ttM-(^v%g-wQti=DK;1(8=7nb*;jm(lgcnt&yWUpe zb0weubcC0#OX0s#;afybmi9F5{xcbu(iG1y_MYOGO8A9}zaVy3f#SExI8&ndT#3J0 z@v-x{k~S#*FR6?+#gn8RV~T$)`m;^(olF!qi?=p|?Q~VR@cLx;zI!9wY zqWCzmw~r`p);TXKe!ldJPrd;NI{%ciu^WDmB#m#ps z`xGA~`guTc^F7NWikt6Qjwo)vXL(U^^F7OP#m)B%?<;P;XZcL=i0p4nm+`~YLx$Kt z=6So}*NQ$HyVdX?%KD;6#dARVSC!(Eq<%Iio-6&XUGcL-e>N$82W9|{%N5@%dbLY) z*;kop=2f^i1^z9?NZ{})zJjrprTA#6$FSlz%Dmhu9QAO%#DS+vRQP1E1FlwltBjMk zD*lx8>$?>{SL)|}#m)Heu;Mi`u0E}JqNMwRaLm6nIhEoy6@HY2|Fa`JR&k-!^XH0J z3m-1+kMSegAbg_YZNj~Z$Ao7ozD@XY#jg~;O7ZK2*9kZJTs4}CYn`jYGqtQ<6+S58 zFLrQQ8qqD6Iymav!_r>YI5>t6Ndo3ObyGjjp$Cp1OL)WI5dNIvqorK$srVn|Xsi!a z_?Z$uS@yY2{5itsIJgWA6jP3aW6)U=f0^Qogx4v)Qh0~rTZG@L`1QhnqWDjRzo7W* z!jCKdsqjx69LpuuVx4qwEY~Sg&uL!15k(yG#GJQgI5>vSm+*@n+!_B_4vyh#C47y8 zJLBKr;26GF!e8j%&hQsGIEH^n!f#jHynlF$;zob&R(t_Q2FF8QI@!NhWAx-{;iey% z_m%&k_z@X5-csCrH~7vF{C^bpNQ3=z2>ylQw}|qd7=jO*Y0+WwKTqb7kwftDik~9u z+*5|&(-pr}<`M4@e4gSzk@y!3!SfXVm)LVlhu|v}zeVh*q9OQd#eX73R^<@9PI2?T zV8al6qvD@P2WuXJcPM@SIzZt=Du_;V7U2hNfeBF2yT7ZZxOO!Ia>B?!(P(vLA7@zNzPxy+orL~%2}TiMYq zo$#y4aE|rzxy|_SM;xw4@cV{R3;Xy0A3;rNY zHvB;w_=7a~N0a!bNL#1{|KgOC_5bDMg`0I7VSI(?z+vnTmInSND-H|T)eB7kIUfkI z$NYW)4o{elbX!ZzN&2lewz;Sk$b^BLUuVp>;E((rA-`@q-2Fw3}1ALRoC*~i=44wbW zf$2E$&V!lgT2>C9Y*&Z91g;F0{t-#v+>hy_J*?CJ7BC$rAnPqjKUFEF4tpbn9W4FN z1}Q&o#pv|E0}SId`2;T=AIm0Lx^puQu9)=A`F>&g{*(reN6dc~2D$%d4rT`ePl4R; zWau~P8h%umQZxJhdJ|C2ru+s!4W7a3FZD+p!juc!4_`4g_Zz*!{OGjt&RvrK-55C> rli(jdV$k=G1g4r82-w@_(aE|@6Kt!Y|J6TC&P*zWkVO=?;z&1o3g zMX$$9jFH@!(ClOzO>1GK6PmX%u$hiA%+1Yoi!+#xGt;r>G2O;YUumRWX8I~4onoe2 z#u=F&X2yBG4HUOKowN&!OpX-O-J$HYL%XKE-7>-R4OA!WNckpS(0A5 z{Bk5)N!iXOeTuRvX0|kt8WHz5vc_fldQDnJ;z94jgv4&*eOQ^O-|#6ZO+6NL*Shwa z)-x*6H1upF-tz}a^sF=^80@1{mY;BzpG=Hp?_Eh&t%vC*{H3Lb?gA&c8qD- z6`Q#R8as9#YNU2!9Bi%V*IQ&c=4)CywNf)+T?AS^;%Gkpk3?r&Fs)OENZ7XUXeXEG z3T2&=di6p7u{g5WqoT*9u!ecY@67|zybYQprwtm0DJ`}RZ!e=PGMA&w{QFkEshKxA zhUR)?Y#jZKbHiN&$7SIy^hC%JrY%vtv({xb?S$J;)!D&)G(+MG7_nAKz^{G&S znhzn2cMmvoq<9RvD8wEL*~^CLa4k6YI1Z{jmI;_$haYx-ZErpqk+t$eJ!ySGP&u zXS5Xrr~6cAs+_}ddDWLfc)BkB3eG$U$EP8B$$KZE(^_VfE2e@FNWo?aXL06wQ$03fMVA7yaSb3}alc zpSebCfsq zgj7o~=`==5pl+5faMWi@u^!ZHT?~fI**;NLRWv(Vh%9&_Ul-Hi5Z)(3W4=#>z=`aE*p;%>y~3h*MGK%HFA=oHAGr;B9}Ld{Z&pqiWIST%}=x_MH#pnjgN8cCDM zG*5wNezq6^Mf0WFPm8~ZX?8;Ge4n@#VhVgXwXzB>)yfrlX1TPjTnE8|RM7{@3fihq zTAQ_bh-vPIaDl|Fq_M!~iKbe;$~4jBdzjhhLH+`%;%NNq8SMj4)*@XjfZ(ERaSFnVq-YL}X!!uTJfMqT zVcY}Rxc${UpsQk<-Xmf!k1!I%gHp|)MVG_qTi|)nr* zE*3)rYL2+fQcp9@m*8G3MHyVb*eCuD!NtD#Lh9lBuDraS7dpU+#cASRa4wPJAaq%x ztCl2vi%H#(kD6Xkh?=Kpas9?Ld!Pm(jbf) z7Y)@irl|pE@D=d})CHv)PSf!S)3gS$%qNaO<}zLU1`C(1Q9Wo{^p3l{#2dlAT&icO zJ_8y36ta-M(9!f6&*(A;BE6Oluqlj=gNo(GYsR7F*(#N$&PJvw2JZ@Ad^+v*&oO$w z6Kr2GU+twswlzH~Se>=E%JWc36Y(7!dpKJiCQ%wavRa~Y$SRa#AmkM4s+>lC2-Ea| zibAQrcbTmm#psU^#t5%KBSxqvmdi9(R(T(Z7V3E#vPy>E1^-GZK7oZRvsHi6{DW!M zL&HiuBWNH_F!}|!AI%msA&B<_5XSpU;9Vuvht@$zN3hlGFCic4zljcFv;~Bawxc6| zB%^6ihjbv(@r;fFv0AEoiB4hkRq(7XP+MqPKEmktP`g?>E-3hD^$;-?+-sy-K;u@< zr1NUEu{Dh4n;?i58*JPA9Cbaj|CW0~e#Xut^3RN^E? zlfeDhk9bfx!H2yx4s_*CHs|K6Oo?@a0?`)KIv-9B|2nCDrX&3VQ!ay|bwtYpn z@qQTci?Qpe%{ujgRsZD>DlSm9w4wSLT?C#jsqo^KSeUjYE@mrjc&i}1MS4O^`x)&( zyP3T&m3#o4TcvuP(NolpBj82)38VK>%&#GTs|=iC^jGrL=+|mfTUtc1%zlh|y$!P) zuerw6k=g6%skw(~AAj-GjUtB|nS+bY%%RMFj!ryl(5#A{qKBS|;D1sE@|af%HGToJ z52OjUg4rdlmai)q5ONyo=Y*0Le@5!`7cJT z$=ZaDG^-!1DRLFFd+Ajn9xAp;mBi@B^l;w;!bopq)cR^Q6r3R$7|rO%RI`c9ZoS~- zF?%XK$1PxX>y>8(v#)SPW|X$pw0FHYb*#6bV&*V~DpU$}Sl#y+T@+=8JId@kXkvZA z?8lm#`k$Cxqdny}X8)c_k2Q}^n7ZAm6dk43Af?mL;!FB=sd_PLJt7T+TBNTrO8dTc z1RA!>z&{zCOq0wyo~;t&s1p+~hDN;lfd3g8@Y-maE!r(C+G%RhSew4PO`py5^>kEBx9Pjt^m9%7rK#{0 zt$?LA2U_zHw?bBcbeYlC+w_qy?^MXMkhMdqD&}=FbxI8cky?*KMwij+d&K)IsMsOB zXKcO(4N&A?Y4aJa#kczBJ1x)Q1Guu;Ry+ME3#N~M~@ zsI^1S1`pDCjF!8MxSF;C{G~Dz7~Mk~(spJqq3yDQ+3%v>cmZlL+CfGy(7AM&*;msX z{*>7(X<2*??w$Bn$>`Z;X3ft==y^uF(}$zh5Zoy<+tYq#O@SY1<4dyHjh@^_1J>PU zH~K%NiCI=Ugs~qQ-zmDnT`Q1oDwS!RP@R z_i6|seThYGq{weV9nvGrcML_w&t$t~;49`km=4a9%sz|kjm!>YzracS>#=F(SwD z&$y}}3+anCYK%x3MScT_&^o3I98a8N93!j3a$p2xD0tT@e_0 ztTD5ESa_}GxF&d`GpMk$z`kN-2Vrz>WMzj^PAEce+T4p~+bD$lw zTl!RJD3|!j9q*oWrWr?%NB#bb-3wWJq_{b99}YoG--h=L;i{_LlkE^GRqo2Sgct+$ zRef8unQFG?^#J^W>fW2-Sg;2s?H%Aa*#oxk9UwFa zqpfrgB<>r~VqzaN#JOb1-Ip%LLug+Hex(fK{b6wL&u|<>-~9t(PE!BI!Os1CW3)-8 SR}$1??&uyfcL8!LJNyUeB4VZh delta 8433 zcmb7J3v?9K8J@cd5JD1IL@pOe*bM{{9vK!R5V3>>$`Z6nAhaUrvT6$?yp|;70k{Nc zPof|!KL`;-mWKfpWnF?GSc#QN`cR^_np%}mEv1K336-`M<@DZ}f5_zTVPwgBpG%Zn;Qxp0)<-;s@Rd9k?PE3^L9%ebIhb;Fo%gM4lKy#Uu6h&m3 z9*4v=?QHi{&kfj}`dsFXzM3|-pTbhTs_cq4 zD-%@Zd>6AaG37Q`oOTaOgOh0o#-`k+X~~nNMY)#rkjz9{d%bhQDA}0V?hJ*uw|h%w z>dePsSN|Eqay#HjDoqWRi;&^iVY*0T&&E<+>5RPrMlkw`^9%k;7)jgrmn zh0g~LHcF?#nbF56eGb_ft|5v|lmlb*^MLB7BVl(AD{w5=v{5Qu>QW*dDl%Mb9MokD zxIJIii%cUnqFtuo>VJm|C43aV$jF}HmnAK!S>DtXGp1#{S-)V_JDGJgXgF=hs0bY2 zQByiDBjz7;-W|)I;_TEruyopz1&d2d{1w`wo8`*b{ol*(9;=x%w-f6F%>m8^8u!t$ zOM&4mxzZ-Bh;@79j(C;|-g%tOf?4zY?E7$Hp3b(xrFptY>80A$w1>=xv8QyGTAn zG?|q^a}gJBsR5B!Baw~)R?L|TM6pjMC{WDdba4W#F3uENQ%#F3hxxRE*$IusT))7r|8mw8E&DKG5Ar}qCma1vjh$snKC0mAB>xXBC6~s1h zF5;peHZYQ~0=$cKb~gkU`Q0OE_zQ1xs}CA-2ASX!b&MiOzDNb%~FijAbqD!k8aC zL7i1XK;9QaIOvlTwk7BnsRPU)ayobHz-A~|=9kLoGA@o7$B3qt5zQHBm278gWC(j7 zI7?Jp-V!dR^fA4EN;KynDA|wDf0r&DV+cW{gv-cJl=xT%uu|Q@2EoYEY)6-Lc(^p1 zJqY1aE^=`pogvmO&?wo>F4O17ge`=&QqD@DYnd)8dYhW$gpTbmhk`OLGI5wP2%8Pn z(zXlsET6DZXe#rI+43}1*N+K%2E5BTdj)1K_p$FnWVug#Kf_e^GTu(iml3sG3xSn$ zHW@_u(A3eU#JE=y-MbJd=b{Lwc$lykAYAUt{|5W{24TO!5qyW>#kib)Pw+HwS8#F1 zKr@`b5q1LATT%TRlN(ji)*vs!4asAsF7wo(^=!d3=%GySzM%jQbXz6X~o z)hrTKe(`7A6!#NlZwOcE>^wBe`(L50%FptkV1>>OLG=nQ=HMcnoz&6)3W%=Y>@{dw z;bUQNuH<4k`hSTi!{A-X+0S9tN?nxPYI?ayG@n33dic_1vT?~B+d2u&D}Ag9#3~;P zL0}bkB)On!Rkm1$!97C^-iF3iI_m^&tGM8ppx+Qp7PueNSsfHS#>IXND>}`- zS2e5UWexLK@T}(SL&#sPi@R_!l@m=igr(*!IJo+C@g8b^K{OMfx|*{@sH^s|PoTA0 zXV<{FW~1D*BWt*rijm*hqhss4p;@w*G4evfHUV49#U`A}a|t^TJd&M<`}9J>_JqJ% zzdZ39*K#=#Th{v6Byg|ej>JK5=ep(WXAoV-+0SB4>+0j!KOtD-XCFgz4Hu_y%gDi( zRVz=UfYs{k6nJX6nCLQlaSzd4hk#^1$K`xKVSf!_>ETmotmW*sSWB%u70yEI<6N}h zu5p|g{2822_|?((ggm1$3BMWX*3X`E5nmWf0xK**R$1P|g6n zPx8LkF%O%FGN~^tdvdZU!#An}g#HOMKgq>5WRDW|8(y+QCzkhMiu@7!B_>;Z^u@d?0z&%r&->cxIwTe_>nx4|d zQq&wLnk(Sk#zif%ZxZ%C@JjX)4)8g`mP2rx&Q?QY+eY>(c((i47^vL-I?I9FIv?8u z)pcB!>*~tcWpF<26GL(9h~T?`m9nW2e44ZAQ2Vql_8|8f(Yy}LQqvzUNzFPOycVK) z4?H`#n1-A5MZ!J|fgNhMsNA8mA~-1TJD_EUEDlv`UZTekCZ!X`lpEgI@b5t^f@;D^F;rG3%^}ou^HTMGdN8Q zhU1X^3Ifk?@gZRyxaoWbVaZ-0><@9f{Tdpd;h_XftCgN^Xxoe6S-3V`1iy%9@Gyd} zz}Y^A;Fs`qeUgbkaP!dai3ZjqDmpUi-%SdwjMjbp5UW! z?rkS{2Ckre1fPT5K0@$f#7~(x_?~s&7){uZ@T+1HcqBWGuwC%Po&$m1JT#xMmoTzYfh}Zrw~(cgcy`!K&QYR;i2<{t%^6@T_*TZ+!ntgcuOZ! z-x*J3E72*Klv@aX9b0#qIJ^>Zis3{v35WJhXpL~;BkW|HtcBp*!^H=L#luGX47_`I zsEx3*Fee#!##_;*VG=!vtF3IL*)iijf#^HqiFq%0jU8cQe+gm9eqdv9(=ash>uxU(UAD2h z&Gs7NR^qndv|yNb70F*AwGNIUO3*S z$B%r&Dj%Zzcxa}L&9-@ah7eihAUu;%>ZA- z46|oQ0~s#U+d-S&_;DW_`6)#9%byB~)eKC^uc2A8f3dOnO>bCV2lgBfC8Aahl43*X zxw{QlAA#jKc*2G&{aMtf*>I(Q4eMD1?}F!aj)_mdxn&)~2J&nMIN^;Zrr2=Rz(Gvq zbQ`V$x(uFrE)Lk0cBZbZij-hkWW8G_HoZodQ013dqI!rs91=nn+niL3D{!B69I_!@%J8^gWG zT9be8Y)0PAhN~%?{<9-;BLs;y#Sc1n2Ye2YJGd#6!CZypoOB+ExB>c(o%Cl#wTMPqFPE&y%gR6x)a&4Rfr~LN zgEV#v)z&>YZ{^3kWG5qQ*^WZnMG%&31!2cvZudc>WE%-vg|>f$HpzB#YsO`HK91}N za3AKPkg(R-QVa!>T|?M8rYmh5R7?4`|w5S-v5Hngow1AW!&dNvn)RGd>#2W4A(EEYGq1B^Y^h9D5&vNAnz+N8sh7;~eoGxGJ$; z;AzNn+W8=E^c+hNWJbZO* Zbk}JQo3*i!`^xC9HAl?a4LA|)|1asnQ|kZ# diff --git a/mapdata.c.REMOVED.git-id b/mapdata.c.REMOVED.git-id index 62add43..3a02d0f 100644 --- a/mapdata.c.REMOVED.git-id +++ b/mapdata.c.REMOVED.git-id @@ -1 +1 @@ -7ed2e5c3d762695e6aaf4111584830b537a549a0 \ No newline at end of file +212d4fb6e7ea7b3c502081037abbac1fbdd9fccf \ No newline at end of file diff --git a/mapdata.h b/mapdata.h index bcdd7c1..2dc6d4e 100644 --- a/mapdata.h +++ b/mapdata.h @@ -1,4 +1,43 @@ +#ifndef MAPPOINTS_H +#define MAPPOINTS_H + double *mapPoints_relative; -double *mapPoints_x; -double *mapPoints_y; int mapPoints_count; + +extern double mapPoints[]; + +typedef struct Point{ + double lat; + double lon; + struct Point *next; +} Point; + +typedef struct Polygon{ + double lat_min; + double lat_max; + double lon_min; + double lon_max; + + Point *points; + int numPoints; + + struct Polygon *next; +} Polygon; + +typedef struct QuadTree{ + double lat_min; + double lat_max; + double lon_min; + double lon_max; + + Polygon *polygons; + + struct QuadTree *nw; + struct QuadTree *sw; + struct QuadTree *ne; + struct QuadTree *se; +} QuadTree; + +QuadTree root; + +#endif \ No newline at end of file diff --git a/mapdata.o.REMOVED.git-id b/mapdata.o.REMOVED.git-id index c37fba4..abf0145 100644 --- a/mapdata.o.REMOVED.git-id +++ b/mapdata.o.REMOVED.git-id @@ -1 +1 @@ -c95610367de3a9e8503644016da9760739f94993 \ No newline at end of file +1c1e7d6bdf081956022b7592b8d59a929da2f463 \ No newline at end of file diff --git a/monokai.o b/monokai.o index 8a201795ce6391505025af9a1b3783a33d9a8d0a..03c4bd0d030293b931e0edf9d9acac10805ee7d6 100644 GIT binary patch delta 7462 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 GkNZDt@(Wr3 delta 7550 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 Q9=Btj%^!*?=jO%#56d4UvH$=8 diff --git a/planeObj.o b/planeObj.o index e2a0fd7166bbd23b72d0a2773463afecbf570439..44e6d2644d4415c37a5bb0f025618c55079d618c 100644 GIT binary patch delta 10022 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 +[3] 100.0 0.00 0.03 main [3] + 0.00 0.03 323/323 draw [1] + 0.00 0.00 324/324 getInput [31] + 0.00 0.00 323/323 interactiveRemoveStaleAircrafts [32] + 0.00 0.00 323/323 modesReadFromClient [33] + 0.00 0.00 1/1 view1090InitConfig [66] + 0.00 0.00 1/1 view1090Init [65] + 0.00 0.00 1/1 setupConnection [64] + 0.00 0.00 1/1 init [61] +----------------------------------------------- + 0.02 0.00 600/600 drawMap [2] +[4] 66.7 0.02 0.00 600 resolveLabelConflicts [4] + 0.00 0.00 172/172 sign [36] +----------------------------------------------- + 0.01 0.00 2147/2147 drawMap [2] +[5] 33.3 0.01 0.00 2147 drawTrail [5] + 0.00 0.00 2456/4608 pxFromLonLat [8] + 0.00 0.00 2456/4608 screenCoords [9] + 0.00 0.00 1846/2831 outOfBounds [10] + 0.00 0.00 613/1598 CROSSVP [14] +----------------------------------------------- + 0.00 0.00 450/9666 drawGrid [39] + 0.00 0.00 9216/9666 screenCoords [9] +[6] 0.0 0.00 0.00 9666 screenDist [6] +----------------------------------------------- + 0.00 0.00 473/4935 draw [1] + 0.00 0.00 1312/4935 drawSignalMarks [16] + 0.00 0.00 3150/4935 drawMap [2] +[7] 0.0 0.00 0.00 4935 mstime [7] +----------------------------------------------- + 0.00 0.00 2152/4608 drawMap [2] + 0.00 0.00 2456/4608 drawTrail [5] +[8] 0.0 0.00 0.00 4608 pxFromLonLat [8] +----------------------------------------------- + 0.00 0.00 2152/4608 drawMap [2] + 0.00 0.00 2456/4608 drawTrail [5] +[9] 0.0 0.00 0.00 4608 screenCoords [9] + 0.00 0.00 9216/9666 screenDist [6] +----------------------------------------------- + 0.00 0.00 985/2831 drawMap [2] + 0.00 0.00 1846/2831 drawTrail [5] +[10] 0.0 0.00 0.00 2831 outOfBounds [10] +----------------------------------------------- + 0.00 0.00 2147/2147 updatePlanes [41] +[11] 0.0 0.00 0.00 2147 findPlaneObj [11] +----------------------------------------------- + 0.00 0.00 1770/1770 drawPlaneText [15] +[12] 0.0 0.00 0.00 1770 drawStringBG [12] +----------------------------------------------- + 0.00 0.00 450/1650 drawGrid [39] + 0.00 0.00 1200/1650 drawStatusBox [19] +[13] 0.0 0.00 0.00 1650 drawString [13] +----------------------------------------------- + 0.00 0.00 457/1598 drawPlaneOffMap [22] + 0.00 0.00 528/1598 drawPlaneHeading [20] + 0.00 0.00 613/1598 drawTrail [5] +[14] 0.0 0.00 0.00 1598 CROSSVP [14] +----------------------------------------------- + 0.00 0.00 985/985 drawMap [2] +[15] 0.0 0.00 0.00 985 drawPlaneText [15] + 0.00 0.00 1770/1770 drawStringBG [12] + 0.00 0.00 656/656 drawSignalMarks [16] +----------------------------------------------- + 0.00 0.00 656/656 drawPlaneText [15] +[16] 0.0 0.00 0.00 656 drawSignalMarks [16] + 0.00 0.00 1312/4935 mstime [7] + 0.00 0.00 656/656 signalToColor [18] +----------------------------------------------- + 0.00 0.00 656/656 signalToColor [18] +[17] 0.0 0.00 0.00 656 setColor [17] +----------------------------------------------- + 0.00 0.00 656/656 drawSignalMarks [16] +[18] 0.0 0.00 0.00 656 signalToColor [18] + 0.00 0.00 656/656 setColor [17] +----------------------------------------------- + 0.00 0.00 600/600 drawStatus [40] +[19] 0.0 0.00 0.00 600 drawStatusBox [19] + 0.00 0.00 1200/1650 drawString [13] +----------------------------------------------- + 0.00 0.00 528/528 drawMap [2] +[20] 0.0 0.00 0.00 528 drawPlaneHeading [20] + 0.00 0.00 528/1598 CROSSVP [14] +----------------------------------------------- + 0.00 0.00 107/493 modesInitErrorInfo [63] + 0.00 0.00 386/493 decodeModesMessage [25] +[21] 0.0 0.00 0.00 493 modesChecksum [21] +----------------------------------------------- + 0.00 0.00 457/457 drawMap [2] +[22] 0.0 0.00 0.00 457 drawPlaneOffMap [22] + 0.00 0.00 457/1598 CROSSVP [14] +----------------------------------------------- + 0.00 0.00 181/387 ICAOAddressWasRecentlySeen [35] + 0.00 0.00 206/387 addRecentlySeenICAOAddr [34] +[23] 0.0 0.00 0.00 387 ICAOCacheHashAddress [23] +----------------------------------------------- + 0.00 0.00 386/386 modesReadFromClient [33] +[24] 0.0 0.00 0.00 386 decodeBinMessage [24] + 0.00 0.00 386/386 decodeModesMessage [25] + 0.00 0.00 386/386 useModesMessage [27] +----------------------------------------------- + 0.00 0.00 386/386 decodeBinMessage [24] +[25] 0.0 0.00 0.00 386 decodeModesMessage [25] + 0.00 0.00 386/386 modesMessageLenByType [26] + 0.00 0.00 386/493 modesChecksum [21] + 0.00 0.00 206/206 addRecentlySeenICAOAddr [34] + 0.00 0.00 181/181 ICAOAddressWasRecentlySeen [35] + 0.00 0.00 167/167 decodeAC13Field [37] + 0.00 0.00 72/72 decodeAC12Field [45] + 0.00 0.00 3/22 decodeID13Field [49] +----------------------------------------------- + 0.00 0.00 386/386 decodeModesMessage [25] +[26] 0.0 0.00 0.00 386 modesMessageLenByType [26] +----------------------------------------------- + 0.00 0.00 386/386 decodeBinMessage [24] +[27] 0.0 0.00 0.00 386 useModesMessage [27] + 0.00 0.00 373/373 interactiveReceiveData [29] +----------------------------------------------- + 0.00 0.00 373/373 interactiveReceiveData [29] +[28] 0.0 0.00 0.00 373 interactiveFindAircraft [28] +----------------------------------------------- + 0.00 0.00 373/373 useModesMessage [27] +[29] 0.0 0.00 0.00 373 interactiveReceiveData [29] + 0.00 0.00 373/373 interactiveFindAircraft [28] + 0.00 0.00 72/72 mstime [46] + 0.00 0.00 55/55 decodeCPR [48] + 0.00 0.00 17/17 interactiveCreateAircraft [53] + 0.00 0.00 17/17 decodeCPRrelative [52] +----------------------------------------------- + 0.00 0.00 110/330 cprNFunction [43] + 0.00 0.00 220/330 decodeCPR [48] +[30] 0.0 0.00 0.00 330 cprNLFunction [30] +----------------------------------------------- + 0.00 0.00 324/324 main [3] +[31] 0.0 0.00 0.00 324 getInput [31] +----------------------------------------------- + 0.00 0.00 323/323 main [3] +[32] 0.0 0.00 0.00 323 interactiveRemoveStaleAircrafts [32] + 0.00 0.00 6/6 interactiveRemoveStaleDF [54] +----------------------------------------------- + 0.00 0.00 323/323 main [3] +[33] 0.0 0.00 0.00 323 modesReadFromClient [33] + 0.00 0.00 386/386 decodeBinMessage [24] +----------------------------------------------- + 0.00 0.00 206/206 decodeModesMessage [25] +[34] 0.0 0.00 0.00 206 addRecentlySeenICAOAddr [34] + 0.00 0.00 206/387 ICAOCacheHashAddress [23] +----------------------------------------------- + 0.00 0.00 181/181 decodeModesMessage [25] +[35] 0.0 0.00 0.00 181 ICAOAddressWasRecentlySeen [35] + 0.00 0.00 181/387 ICAOCacheHashAddress [23] +----------------------------------------------- + 0.00 0.00 172/172 resolveLabelConflicts [4] +[36] 0.0 0.00 0.00 172 sign [36] +----------------------------------------------- + 0.00 0.00 167/167 decodeModesMessage [25] +[37] 0.0 0.00 0.00 167 decodeAC13Field [37] + 0.00 0.00 10/22 decodeID13Field [49] + 0.00 0.00 10/19 ModeAToModeC [50] +----------------------------------------------- + 0.00 0.00 165/165 decodeCPR [48] +[38] 0.0 0.00 0.00 165 cprModFunction [38] +----------------------------------------------- + 0.00 0.00 150/150 drawMap [2] +[39] 0.0 0.00 0.00 150 drawGrid [39] + 0.00 0.00 450/9666 screenDist [6] + 0.00 0.00 450/1650 drawString [13] +----------------------------------------------- + 0.00 0.00 150/150 draw [1] +[40] 0.0 0.00 0.00 150 drawStatus [40] + 0.00 0.00 600/600 drawStatusBox [19] +----------------------------------------------- + 0.00 0.00 150/150 draw [1] +[41] 0.0 0.00 0.00 150 updatePlanes [41] + 0.00 0.00 2147/2147 findPlaneObj [11] + 0.00 0.00 108/108 mstime [44] + 0.00 0.00 17/17 createPlaneObj [51] +----------------------------------------------- + 0.00 0.00 150/150 draw [1] +[42] 0.0 0.00 0.00 150 updateStatus [42] +----------------------------------------------- + 0.00 0.00 55/110 cprDlonFunction [47] + 0.00 0.00 55/110 decodeCPR [48] +[43] 0.0 0.00 0.00 110 cprNFunction [43] + 0.00 0.00 110/330 cprNLFunction [30] +----------------------------------------------- + 0.00 0.00 108/108 updatePlanes [41] +[44] 0.0 0.00 0.00 108 mstime [44] +----------------------------------------------- + 0.00 0.00 72/72 decodeModesMessage [25] +[45] 0.0 0.00 0.00 72 decodeAC12Field [45] + 0.00 0.00 9/22 decodeID13Field [49] + 0.00 0.00 9/19 ModeAToModeC [50] +----------------------------------------------- + 0.00 0.00 72/72 interactiveReceiveData [29] +[46] 0.0 0.00 0.00 72 mstime [46] +----------------------------------------------- + 0.00 0.00 55/55 decodeCPR [48] +[47] 0.0 0.00 0.00 55 cprDlonFunction [47] + 0.00 0.00 55/110 cprNFunction [43] +----------------------------------------------- + 0.00 0.00 55/55 interactiveReceiveData [29] +[48] 0.0 0.00 0.00 55 decodeCPR [48] + 0.00 0.00 220/330 cprNLFunction [30] + 0.00 0.00 165/165 cprModFunction [38] + 0.00 0.00 55/110 cprNFunction [43] + 0.00 0.00 55/55 cprDlonFunction [47] +----------------------------------------------- + 0.00 0.00 3/22 decodeModesMessage [25] + 0.00 0.00 9/22 decodeAC12Field [45] + 0.00 0.00 10/22 decodeAC13Field [37] +[49] 0.0 0.00 0.00 22 decodeID13Field [49] +----------------------------------------------- + 0.00 0.00 9/19 decodeAC12Field [45] + 0.00 0.00 10/19 decodeAC13Field [37] +[50] 0.0 0.00 0.00 19 ModeAToModeC [50] +----------------------------------------------- + 0.00 0.00 17/17 updatePlanes [41] +[51] 0.0 0.00 0.00 17 createPlaneObj [51] +----------------------------------------------- + 0.00 0.00 17/17 interactiveReceiveData [29] +[52] 0.0 0.00 0.00 17 decodeCPRrelative [52] +----------------------------------------------- + 0.00 0.00 17/17 interactiveReceiveData [29] +[53] 0.0 0.00 0.00 17 interactiveCreateAircraft [53] +----------------------------------------------- + 0.00 0.00 6/6 interactiveRemoveStaleAircrafts [32] +[54] 0.0 0.00 0.00 6 interactiveRemoveStaleDF [54] +----------------------------------------------- + 0.00 0.00 5/5 cleanup [85] +[55] 0.0 0.00 0.00 5 closeFont [55] +----------------------------------------------- + 0.00 0.00 5/5 init [61] +[56] 0.0 0.00 0.00 5 loadFont [56] +----------------------------------------------- + 0.00 0.00 1/1 anetTcpGenericConnect [60] +[57] 0.0 0.00 0.00 1 anetCreateSocket [57] +----------------------------------------------- + 0.00 0.00 1/1 setupConnection [64] +[58] 0.0 0.00 0.00 1 anetNonBlock [58] +----------------------------------------------- + 0.00 0.00 1/1 setupConnection [64] +[59] 0.0 0.00 0.00 1 anetTcpConnect [59] + 0.00 0.00 1/1 anetTcpGenericConnect [60] +----------------------------------------------- + 0.00 0.00 1/1 anetTcpConnect [59] +[60] 0.0 0.00 0.00 1 anetTcpGenericConnect [60] + 0.00 0.00 1/1 anetCreateSocket [57] +----------------------------------------------- + 0.00 0.00 1/1 main [3] +[61] 0.0 0.00 0.00 1 init [61] + 0.00 0.00 5/5 loadFont [56] + 0.00 0.00 1/1 initMaps [62] +----------------------------------------------- + 0.00 0.00 1/1 init [61] +[62] 0.0 0.00 0.00 1 initMaps [62] +----------------------------------------------- + 0.00 0.00 1/1 view1090Init [65] +[63] 0.0 0.00 0.00 1 modesInitErrorInfo [63] + 0.00 0.00 107/493 modesChecksum [21] +----------------------------------------------- + 0.00 0.00 1/1 main [3] +[64] 0.0 0.00 0.00 1 setupConnection [64] + 0.00 0.00 1/1 anetTcpConnect [59] + 0.00 0.00 1/1 anetNonBlock [58] +----------------------------------------------- + 0.00 0.00 1/1 main [3] +[65] 0.0 0.00 0.00 1 view1090Init [65] + 0.00 0.00 1/1 modesInitErrorInfo [63] +----------------------------------------------- + 0.00 0.00 1/1 main [3] +[66] 0.0 0.00 0.00 1 view1090InitConfig [66] +----------------------------------------------- + + This table describes the call tree of the program, and was sorted by + the total amount of time spent in each function and its children. + + Each entry in this table consists of several lines. The line with the + index number at the left hand margin lists the current function. + The lines above it list the functions that called this function, + and the lines below it list the functions this one called. + This line lists: + index A unique number given to each element of the table. + Index numbers are sorted numerically. + The index number is printed next to every function name so + it is easier to look up where the function is in the table. + + % time This is the percentage of the `total' time that was spent + in this function and its children. Note that due to + different viewpoints, functions excluded by options, etc, + these numbers will NOT add up to 100%. + + self This is the total amount of time spent in this function. + + children This is the total amount of time propagated into this + function by its children. + + called This is the number of times the function was called. + If the function called itself recursively, the number + only includes non-recursive calls, and is followed by + a `+' and the number of recursive calls. + + name The name of the current function. The index number is + printed after it. If the function is a member of a + cycle, the cycle number is printed between the + function's name and the index number. + + + For the function's parents, the fields have the following meanings: + + self This is the amount of time that was propagated directly + from the function into this parent. + + children This is the amount of time that was propagated from + the function's children into this parent. + + called This is the number of times this parent called the + function `/' the total number of times the function + was called. Recursive calls to the function are not + included in the number after the `/'. + + name This is the name of the parent. The parent's index + number is printed after it. If the parent is a + member of a cycle, the cycle number is printed between + the name and the index number. + + If the parents of the function cannot be determined, the word + `' is printed in the `name' field, and all the other + fields are blank. + + For the function's children, the fields have the following meanings: + + self This is the amount of time that was propagated directly + from the child into the function. + + children This is the amount of time that was propagated from the + child's children to the function. + + called This is the number of times the function called + this child `/' the total number of times the child + was called. Recursive calls by the child are not + listed in the number after the `/'. + + name This is the name of the child. The child's index + number is printed after it. If the child is a + member of a cycle, the cycle number is printed + between the name and the index number. + + If there are any cycles (circles) in the call graph, there is an + entry for the cycle-as-a-whole. This entry shows who called the + cycle (as parents) and the members of the cycle (as children.) + The `+' recursive calls entry shows the number of function calls that + were internal to the cycle, and the calls entry for each member shows, + for that member, how many times it was called from other members of + the cycle. + +Copyright (C) 2012-2018 Free Software Foundation, Inc. + +Copying and distribution of this file, with or without modification, +are permitted in any medium without royalty provided the copyright +notice and this notice are preserved. + +Index by function name + + [14] CROSSVP [1] draw [21] modesChecksum + [35] ICAOAddressWasRecentlySeen [39] drawGrid [63] modesInitErrorInfo + [23] ICAOCacheHashAddress [2] drawMap [26] modesMessageLenByType + [50] ModeAToModeC [20] drawPlaneHeading [33] modesReadFromClient + [34] addRecentlySeenICAOAddr [22] drawPlaneOffMap [46] mstime + [57] anetCreateSocket [15] drawPlaneText [44] mstime + [58] anetNonBlock [16] drawSignalMarks [7] mstime + [59] anetTcpConnect [40] drawStatus [10] outOfBounds + [60] anetTcpGenericConnect [19] drawStatusBox [8] pxFromLonLat + [55] closeFont [13] drawString [4] resolveLabelConflicts + [47] cprDlonFunction [12] drawStringBG [9] screenCoords + [38] cprModFunction [5] drawTrail [6] screenDist + [43] cprNFunction [11] findPlaneObj [17] setColor + [30] cprNLFunction [31] getInput [64] setupConnection + [51] createPlaneObj [61] init [36] sign + [45] decodeAC12Field [62] initMaps [18] signalToColor + [37] decodeAC13Field [53] interactiveCreateAircraft [41] updatePlanes + [24] decodeBinMessage [28] interactiveFindAircraft [42] updateStatus + [48] decodeCPR [29] interactiveReceiveData [27] useModesMessage + [52] decodeCPRrelative [32] interactiveRemoveStaleAircrafts [65] view1090Init + [49] decodeID13Field [54] interactiveRemoveStaleDF [66] view1090InitConfig + [25] decodeModesMessage [56] loadFont diff --git a/prof_output_withgeography b/prof_output_withgeography new file mode 100644 index 0000000..9c55a8a --- /dev/null +++ b/prof_output_withgeography @@ -0,0 +1,517 @@ +Flat profile: + +Each sample counts as 0.01 seconds. + % cumulative self self total + time seconds seconds calls ms/call ms/call name + 38.46 0.05 0.05 62 0.81 2.10 drawGeography + 23.08 0.08 0.03 7006834 0.00 0.00 screenDist + 23.08 0.11 0.03 3503324 0.00 0.00 screenCoords + 15.39 0.13 0.02 3508939 0.00 0.00 pxFromLonLat + 0.00 0.13 0.00 3502994 0.00 0.00 outOfBounds + 0.00 0.13 0.00 1057 0.00 0.00 mstime + 0.00 0.13 0.00 698 0.00 0.00 drawTrail + 0.00 0.13 0.00 698 0.00 0.00 findPlaneObj + 0.00 0.13 0.00 682 0.00 0.00 drawString + 0.00 0.13 0.00 510 0.00 0.00 drawStringBG + 0.00 0.13 0.00 478 0.00 0.00 modesChecksum + 0.00 0.13 0.00 372 0.00 0.00 ICAOCacheHashAddress + 0.00 0.13 0.00 371 0.00 0.00 decodeBinMessage + 0.00 0.13 0.00 371 0.00 0.00 decodeModesMessage + 0.00 0.13 0.00 371 0.00 0.00 modesMessageLenByType + 0.00 0.13 0.00 371 0.00 0.00 useModesMessage + 0.00 0.13 0.00 351 0.00 0.00 interactiveFindAircraft + 0.00 0.13 0.00 351 0.00 0.00 interactiveReceiveData + 0.00 0.13 0.00 251 0.00 0.00 CROSSVP + 0.00 0.13 0.00 248 0.00 0.00 drawStatusBox + 0.00 0.13 0.00 248 0.00 0.00 resolveLabelConflicts + 0.00 0.13 0.00 234 0.00 0.00 cprNLFunction + 0.00 0.13 0.00 199 0.00 0.00 ICAOAddressWasRecentlySeen + 0.00 0.13 0.00 178 0.00 0.00 drawPlaneText + 0.00 0.13 0.00 175 0.00 0.00 decodeAC13Field + 0.00 0.13 0.00 173 0.00 0.00 addRecentlySeenICAOAddr + 0.00 0.13 0.00 172 0.00 0.00 sign + 0.00 0.13 0.00 170 0.00 0.00 drawSignalMarks + 0.00 0.13 0.00 170 0.00 0.00 setColor + 0.00 0.13 0.00 170 0.00 0.00 signalToColor + 0.00 0.13 0.00 117 0.00 0.00 cprModFunction + 0.00 0.13 0.00 89 0.00 0.00 drawPlaneHeading + 0.00 0.13 0.00 89 0.00 0.00 drawPlaneOffMap + 0.00 0.13 0.00 82 0.00 0.00 mstime + 0.00 0.13 0.00 78 0.00 0.00 cprNFunction + 0.00 0.13 0.00 63 0.00 0.00 getInput + 0.00 0.13 0.00 62 0.00 2.10 draw + 0.00 0.13 0.00 62 0.00 0.00 drawGrid + 0.00 0.13 0.00 62 0.00 2.10 drawMap + 0.00 0.13 0.00 62 0.00 0.00 drawStatus + 0.00 0.13 0.00 62 0.00 0.00 interactiveRemoveStaleAircrafts + 0.00 0.13 0.00 62 0.00 0.00 modesReadFromClient + 0.00 0.13 0.00 62 0.00 0.00 updatePlanes + 0.00 0.13 0.00 62 0.00 0.00 updateStatus + 0.00 0.13 0.00 57 0.00 0.00 decodeAC12Field + 0.00 0.13 0.00 57 0.00 0.00 mstime + 0.00 0.13 0.00 39 0.00 0.00 cprDlonFunction + 0.00 0.13 0.00 39 0.00 0.00 decodeCPR + 0.00 0.13 0.00 18 0.00 0.00 decodeCPRrelative + 0.00 0.13 0.00 13 0.00 0.00 createPlaneObj + 0.00 0.13 0.00 13 0.00 0.00 interactiveCreateAircraft + 0.00 0.13 0.00 7 0.00 0.00 decodeID13Field + 0.00 0.13 0.00 6 0.00 0.00 interactiveRemoveStaleDF + 0.00 0.13 0.00 5 0.00 0.00 closeFont + 0.00 0.13 0.00 5 0.00 0.00 loadFont + 0.00 0.13 0.00 1 0.00 0.00 anetCreateSocket + 0.00 0.13 0.00 1 0.00 0.00 anetNonBlock + 0.00 0.13 0.00 1 0.00 0.00 anetTcpConnect + 0.00 0.13 0.00 1 0.00 0.00 anetTcpGenericConnect + 0.00 0.13 0.00 1 0.00 0.00 init + 0.00 0.13 0.00 1 0.00 0.00 initMaps + 0.00 0.13 0.00 1 0.00 0.00 modesInitErrorInfo + 0.00 0.13 0.00 1 0.00 0.00 setupConnection + 0.00 0.13 0.00 1 0.00 0.00 view1090Init + 0.00 0.13 0.00 1 0.00 0.00 view1090InitConfig + + % the percentage of the total running time of the +time program used by this function. + +cumulative a running sum of the number of seconds accounted + seconds for by this function and those listed above it. + + self the number of seconds accounted for by this +seconds function alone. This is the major sort for this + listing. + +calls the number of times this function was invoked, if + this function is profiled, else blank. + + self the average number of milliseconds spent in this +ms/call function per call, if this function is profiled, + else blank. + + total the average number of milliseconds spent in this +ms/call function and its descendents per call, if this + function is profiled, else blank. + +name the name of the function. This is the minor sort + for this listing. The index shows the location of + the function in the gprof listing. If the index is + in parenthesis it shows where it would appear in + the gprof listing if it were to be printed. + +Copyright (C) 2012-2018 Free Software Foundation, Inc. + +Copying and distribution of this file, with or without modification, +are permitted in any medium without royalty provided the copyright +notice and this notice are preserved. + + Call graph (explanation follows) + + +granularity: each sample hit covers 2 byte(s) for 7.69% of 0.13 seconds + +index % time self children called name + 0.00 0.13 62/62 main [3] +[1] 100.0 0.00 0.13 62 draw [1] + 0.00 0.13 62/62 drawMap [2] + 0.00 0.00 124/1057 mstime [11] + 0.00 0.00 62/62 updatePlanes [44] + 0.00 0.00 62/62 updateStatus [45] + 0.00 0.00 62/62 drawStatus [41] +----------------------------------------------- + 0.00 0.13 62/62 draw [1] +[2] 100.0 0.00 0.13 62 drawMap [2] + 0.05 0.08 62/62 drawGeography [4] + 0.00 0.00 698/698 drawTrail [8] + 0.00 0.00 406/3503324 screenCoords [5] + 0.00 0.00 406/3508939 pxFromLonLat [7] + 0.00 0.00 62/62 drawGrid [9] + 0.00 0.00 593/1057 mstime [11] + 0.00 0.00 248/248 resolveLabelConflicts [25] + 0.00 0.00 178/3502994 outOfBounds [10] + 0.00 0.00 178/178 drawPlaneText [28] + 0.00 0.00 89/89 drawPlaneOffMap [37] + 0.00 0.00 89/89 drawPlaneHeading [36] +----------------------------------------------- + +[3] 100.0 0.00 0.13 main [3] + 0.00 0.13 62/62 draw [1] + 0.00 0.00 63/63 getInput [40] + 0.00 0.00 62/62 interactiveRemoveStaleAircrafts [42] + 0.00 0.00 62/62 modesReadFromClient [43] + 0.00 0.00 1/1 view1090InitConfig [66] + 0.00 0.00 1/1 view1090Init [65] + 0.00 0.00 1/1 setupConnection [64] + 0.00 0.00 1/1 init [61] +----------------------------------------------- + 0.05 0.08 62/62 drawMap [2] +[4] 100.0 0.05 0.08 62 drawGeography [4] + 0.03 0.03 3502560/3503324 screenCoords [5] + 0.02 0.00 3508175/3508939 pxFromLonLat [7] + 0.00 0.00 3502560/3502994 outOfBounds [10] +----------------------------------------------- + 0.00 0.00 358/3503324 drawTrail [8] + 0.00 0.00 406/3503324 drawMap [2] + 0.03 0.03 3502560/3503324 drawGeography [4] +[5] 46.2 0.03 0.03 3503324 screenCoords [5] + 0.03 0.00 7006648/7006834 screenDist [6] +----------------------------------------------- + 0.00 0.00 186/7006834 drawGrid [9] + 0.03 0.00 7006648/7006834 screenCoords [5] +[6] 23.1 0.03 0.00 7006834 screenDist [6] +----------------------------------------------- + 0.00 0.00 358/3508939 drawTrail [8] + 0.00 0.00 406/3508939 drawMap [2] + 0.02 0.00 3508175/3508939 drawGeography [4] +[7] 15.4 0.02 0.00 3508939 pxFromLonLat [7] +----------------------------------------------- + 0.00 0.00 698/698 drawMap [2] +[8] 0.0 0.00 0.00 698 drawTrail [8] + 0.00 0.00 358/3503324 screenCoords [5] + 0.00 0.00 358/3508939 pxFromLonLat [7] + 0.00 0.00 256/3502994 outOfBounds [10] + 0.00 0.00 73/251 CROSSVP [23] +----------------------------------------------- + 0.00 0.00 62/62 drawMap [2] +[9] 0.0 0.00 0.00 62 drawGrid [9] + 0.00 0.00 186/7006834 screenDist [6] + 0.00 0.00 186/682 drawString [13] +----------------------------------------------- + 0.00 0.00 178/3502994 drawMap [2] + 0.00 0.00 256/3502994 drawTrail [8] + 0.00 0.00 3502560/3502994 drawGeography [4] +[10] 0.0 0.00 0.00 3502994 outOfBounds [10] +----------------------------------------------- + 0.00 0.00 124/1057 draw [1] + 0.00 0.00 340/1057 drawSignalMarks [32] + 0.00 0.00 593/1057 drawMap [2] +[11] 0.0 0.00 0.00 1057 mstime [11] +----------------------------------------------- + 0.00 0.00 698/698 updatePlanes [44] +[12] 0.0 0.00 0.00 698 findPlaneObj [12] +----------------------------------------------- + 0.00 0.00 186/682 drawGrid [9] + 0.00 0.00 496/682 drawStatusBox [24] +[13] 0.0 0.00 0.00 682 drawString [13] +----------------------------------------------- + 0.00 0.00 510/510 drawPlaneText [28] +[14] 0.0 0.00 0.00 510 drawStringBG [14] +----------------------------------------------- + 0.00 0.00 107/478 modesInitErrorInfo [63] + 0.00 0.00 371/478 decodeModesMessage [18] +[15] 0.0 0.00 0.00 478 modesChecksum [15] +----------------------------------------------- + 0.00 0.00 173/372 addRecentlySeenICAOAddr [30] + 0.00 0.00 199/372 ICAOAddressWasRecentlySeen [27] +[16] 0.0 0.00 0.00 372 ICAOCacheHashAddress [16] +----------------------------------------------- + 0.00 0.00 371/371 modesReadFromClient [43] +[17] 0.0 0.00 0.00 371 decodeBinMessage [17] + 0.00 0.00 371/371 decodeModesMessage [18] + 0.00 0.00 371/371 useModesMessage [20] +----------------------------------------------- + 0.00 0.00 371/371 decodeBinMessage [17] +[18] 0.0 0.00 0.00 371 decodeModesMessage [18] + 0.00 0.00 371/371 modesMessageLenByType [19] + 0.00 0.00 371/478 modesChecksum [15] + 0.00 0.00 199/199 ICAOAddressWasRecentlySeen [27] + 0.00 0.00 175/175 decodeAC13Field [29] + 0.00 0.00 173/173 addRecentlySeenICAOAddr [30] + 0.00 0.00 57/57 decodeAC12Field [46] + 0.00 0.00 7/7 decodeID13Field [53] +----------------------------------------------- + 0.00 0.00 371/371 decodeModesMessage [18] +[19] 0.0 0.00 0.00 371 modesMessageLenByType [19] +----------------------------------------------- + 0.00 0.00 371/371 decodeBinMessage [17] +[20] 0.0 0.00 0.00 371 useModesMessage [20] + 0.00 0.00 351/351 interactiveReceiveData [22] +----------------------------------------------- + 0.00 0.00 351/351 interactiveReceiveData [22] +[21] 0.0 0.00 0.00 351 interactiveFindAircraft [21] +----------------------------------------------- + 0.00 0.00 351/351 useModesMessage [20] +[22] 0.0 0.00 0.00 351 interactiveReceiveData [22] + 0.00 0.00 351/351 interactiveFindAircraft [21] + 0.00 0.00 57/57 mstime [47] + 0.00 0.00 39/39 decodeCPR [49] + 0.00 0.00 18/18 decodeCPRrelative [50] + 0.00 0.00 13/13 interactiveCreateAircraft [52] +----------------------------------------------- + 0.00 0.00 73/251 drawTrail [8] + 0.00 0.00 89/251 drawPlaneOffMap [37] + 0.00 0.00 89/251 drawPlaneHeading [36] +[23] 0.0 0.00 0.00 251 CROSSVP [23] +----------------------------------------------- + 0.00 0.00 248/248 drawStatus [41] +[24] 0.0 0.00 0.00 248 drawStatusBox [24] + 0.00 0.00 496/682 drawString [13] +----------------------------------------------- + 0.00 0.00 248/248 drawMap [2] +[25] 0.0 0.00 0.00 248 resolveLabelConflicts [25] + 0.00 0.00 172/172 sign [31] +----------------------------------------------- + 0.00 0.00 78/234 cprNFunction [39] + 0.00 0.00 156/234 decodeCPR [49] +[26] 0.0 0.00 0.00 234 cprNLFunction [26] +----------------------------------------------- + 0.00 0.00 199/199 decodeModesMessage [18] +[27] 0.0 0.00 0.00 199 ICAOAddressWasRecentlySeen [27] + 0.00 0.00 199/372 ICAOCacheHashAddress [16] +----------------------------------------------- + 0.00 0.00 178/178 drawMap [2] +[28] 0.0 0.00 0.00 178 drawPlaneText [28] + 0.00 0.00 510/510 drawStringBG [14] + 0.00 0.00 170/170 drawSignalMarks [32] +----------------------------------------------- + 0.00 0.00 175/175 decodeModesMessage [18] +[29] 0.0 0.00 0.00 175 decodeAC13Field [29] +----------------------------------------------- + 0.00 0.00 173/173 decodeModesMessage [18] +[30] 0.0 0.00 0.00 173 addRecentlySeenICAOAddr [30] + 0.00 0.00 173/372 ICAOCacheHashAddress [16] +----------------------------------------------- + 0.00 0.00 172/172 resolveLabelConflicts [25] +[31] 0.0 0.00 0.00 172 sign [31] +----------------------------------------------- + 0.00 0.00 170/170 drawPlaneText [28] +[32] 0.0 0.00 0.00 170 drawSignalMarks [32] + 0.00 0.00 340/1057 mstime [11] + 0.00 0.00 170/170 signalToColor [34] +----------------------------------------------- + 0.00 0.00 170/170 signalToColor [34] +[33] 0.0 0.00 0.00 170 setColor [33] +----------------------------------------------- + 0.00 0.00 170/170 drawSignalMarks [32] +[34] 0.0 0.00 0.00 170 signalToColor [34] + 0.00 0.00 170/170 setColor [33] +----------------------------------------------- + 0.00 0.00 117/117 decodeCPR [49] +[35] 0.0 0.00 0.00 117 cprModFunction [35] +----------------------------------------------- + 0.00 0.00 89/89 drawMap [2] +[36] 0.0 0.00 0.00 89 drawPlaneHeading [36] + 0.00 0.00 89/251 CROSSVP [23] +----------------------------------------------- + 0.00 0.00 89/89 drawMap [2] +[37] 0.0 0.00 0.00 89 drawPlaneOffMap [37] + 0.00 0.00 89/251 CROSSVP [23] +----------------------------------------------- + 0.00 0.00 82/82 updatePlanes [44] +[38] 0.0 0.00 0.00 82 mstime [38] +----------------------------------------------- + 0.00 0.00 39/78 cprDlonFunction [48] + 0.00 0.00 39/78 decodeCPR [49] +[39] 0.0 0.00 0.00 78 cprNFunction [39] + 0.00 0.00 78/234 cprNLFunction [26] +----------------------------------------------- + 0.00 0.00 63/63 main [3] +[40] 0.0 0.00 0.00 63 getInput [40] +----------------------------------------------- + 0.00 0.00 62/62 draw [1] +[41] 0.0 0.00 0.00 62 drawStatus [41] + 0.00 0.00 248/248 drawStatusBox [24] +----------------------------------------------- + 0.00 0.00 62/62 main [3] +[42] 0.0 0.00 0.00 62 interactiveRemoveStaleAircrafts [42] + 0.00 0.00 6/6 interactiveRemoveStaleDF [54] +----------------------------------------------- + 0.00 0.00 62/62 main [3] +[43] 0.0 0.00 0.00 62 modesReadFromClient [43] + 0.00 0.00 371/371 decodeBinMessage [17] +----------------------------------------------- + 0.00 0.00 62/62 draw [1] +[44] 0.0 0.00 0.00 62 updatePlanes [44] + 0.00 0.00 698/698 findPlaneObj [12] + 0.00 0.00 82/82 mstime [38] + 0.00 0.00 13/13 createPlaneObj [51] +----------------------------------------------- + 0.00 0.00 62/62 draw [1] +[45] 0.0 0.00 0.00 62 updateStatus [45] +----------------------------------------------- + 0.00 0.00 57/57 decodeModesMessage [18] +[46] 0.0 0.00 0.00 57 decodeAC12Field [46] +----------------------------------------------- + 0.00 0.00 57/57 interactiveReceiveData [22] +[47] 0.0 0.00 0.00 57 mstime [47] +----------------------------------------------- + 0.00 0.00 39/39 decodeCPR [49] +[48] 0.0 0.00 0.00 39 cprDlonFunction [48] + 0.00 0.00 39/78 cprNFunction [39] +----------------------------------------------- + 0.00 0.00 39/39 interactiveReceiveData [22] +[49] 0.0 0.00 0.00 39 decodeCPR [49] + 0.00 0.00 156/234 cprNLFunction [26] + 0.00 0.00 117/117 cprModFunction [35] + 0.00 0.00 39/78 cprNFunction [39] + 0.00 0.00 39/39 cprDlonFunction [48] +----------------------------------------------- + 0.00 0.00 18/18 interactiveReceiveData [22] +[50] 0.0 0.00 0.00 18 decodeCPRrelative [50] +----------------------------------------------- + 0.00 0.00 13/13 updatePlanes [44] +[51] 0.0 0.00 0.00 13 createPlaneObj [51] +----------------------------------------------- + 0.00 0.00 13/13 interactiveReceiveData [22] +[52] 0.0 0.00 0.00 13 interactiveCreateAircraft [52] +----------------------------------------------- + 0.00 0.00 7/7 decodeModesMessage [18] +[53] 0.0 0.00 0.00 7 decodeID13Field [53] +----------------------------------------------- + 0.00 0.00 6/6 interactiveRemoveStaleAircrafts [42] +[54] 0.0 0.00 0.00 6 interactiveRemoveStaleDF [54] +----------------------------------------------- + 0.00 0.00 5/5 cleanup [86] +[55] 0.0 0.00 0.00 5 closeFont [55] +----------------------------------------------- + 0.00 0.00 5/5 init [61] +[56] 0.0 0.00 0.00 5 loadFont [56] +----------------------------------------------- + 0.00 0.00 1/1 anetTcpGenericConnect [60] +[57] 0.0 0.00 0.00 1 anetCreateSocket [57] +----------------------------------------------- + 0.00 0.00 1/1 setupConnection [64] +[58] 0.0 0.00 0.00 1 anetNonBlock [58] +----------------------------------------------- + 0.00 0.00 1/1 setupConnection [64] +[59] 0.0 0.00 0.00 1 anetTcpConnect [59] + 0.00 0.00 1/1 anetTcpGenericConnect [60] +----------------------------------------------- + 0.00 0.00 1/1 anetTcpConnect [59] +[60] 0.0 0.00 0.00 1 anetTcpGenericConnect [60] + 0.00 0.00 1/1 anetCreateSocket [57] +----------------------------------------------- + 0.00 0.00 1/1 main [3] +[61] 0.0 0.00 0.00 1 init [61] + 0.00 0.00 5/5 loadFont [56] + 0.00 0.00 1/1 initMaps [62] +----------------------------------------------- + 0.00 0.00 1/1 init [61] +[62] 0.0 0.00 0.00 1 initMaps [62] +----------------------------------------------- + 0.00 0.00 1/1 view1090Init [65] +[63] 0.0 0.00 0.00 1 modesInitErrorInfo [63] + 0.00 0.00 107/478 modesChecksum [15] +----------------------------------------------- + 0.00 0.00 1/1 main [3] +[64] 0.0 0.00 0.00 1 setupConnection [64] + 0.00 0.00 1/1 anetTcpConnect [59] + 0.00 0.00 1/1 anetNonBlock [58] +----------------------------------------------- + 0.00 0.00 1/1 main [3] +[65] 0.0 0.00 0.00 1 view1090Init [65] + 0.00 0.00 1/1 modesInitErrorInfo [63] +----------------------------------------------- + 0.00 0.00 1/1 main [3] +[66] 0.0 0.00 0.00 1 view1090InitConfig [66] +----------------------------------------------- + + This table describes the call tree of the program, and was sorted by + the total amount of time spent in each function and its children. + + Each entry in this table consists of several lines. The line with the + index number at the left hand margin lists the current function. + The lines above it list the functions that called this function, + and the lines below it list the functions this one called. + This line lists: + index A unique number given to each element of the table. + Index numbers are sorted numerically. + The index number is printed next to every function name so + it is easier to look up where the function is in the table. + + % time This is the percentage of the `total' time that was spent + in this function and its children. Note that due to + different viewpoints, functions excluded by options, etc, + these numbers will NOT add up to 100%. + + self This is the total amount of time spent in this function. + + children This is the total amount of time propagated into this + function by its children. + + called This is the number of times the function was called. + If the function called itself recursively, the number + only includes non-recursive calls, and is followed by + a `+' and the number of recursive calls. + + name The name of the current function. The index number is + printed after it. If the function is a member of a + cycle, the cycle number is printed between the + function's name and the index number. + + + For the function's parents, the fields have the following meanings: + + self This is the amount of time that was propagated directly + from the function into this parent. + + children This is the amount of time that was propagated from + the function's children into this parent. + + called This is the number of times this parent called the + function `/' the total number of times the function + was called. Recursive calls to the function are not + included in the number after the `/'. + + name This is the name of the parent. The parent's index + number is printed after it. If the parent is a + member of a cycle, the cycle number is printed between + the name and the index number. + + If the parents of the function cannot be determined, the word + `' is printed in the `name' field, and all the other + fields are blank. + + For the function's children, the fields have the following meanings: + + self This is the amount of time that was propagated directly + from the child into the function. + + children This is the amount of time that was propagated from the + child's children to the function. + + called This is the number of times the function called + this child `/' the total number of times the child + was called. Recursive calls by the child are not + listed in the number after the `/'. + + name This is the name of the child. The child's index + number is printed after it. If the child is a + member of a cycle, the cycle number is printed + between the name and the index number. + + If there are any cycles (circles) in the call graph, there is an + entry for the cycle-as-a-whole. This entry shows who called the + cycle (as parents) and the members of the cycle (as children.) + The `+' recursive calls entry shows the number of function calls that + were internal to the cycle, and the calls entry for each member shows, + for that member, how many times it was called from other members of + the cycle. + +Copyright (C) 2012-2018 Free Software Foundation, Inc. + +Copying and distribution of this file, with or without modification, +are permitted in any medium without royalty provided the copyright +notice and this notice are preserved. + +Index by function name + + [23] CROSSVP [4] drawGeography [15] modesChecksum + [27] ICAOAddressWasRecentlySeen [9] drawGrid [63] modesInitErrorInfo + [16] ICAOCacheHashAddress [2] drawMap [19] modesMessageLenByType + [30] addRecentlySeenICAOAddr [36] drawPlaneHeading [43] modesReadFromClient + [57] anetCreateSocket [37] drawPlaneOffMap [47] mstime + [58] anetNonBlock [28] drawPlaneText [38] mstime + [59] anetTcpConnect [32] drawSignalMarks [11] mstime + [60] anetTcpGenericConnect [41] drawStatus [10] outOfBounds + [55] closeFont [24] drawStatusBox [7] pxFromLonLat + [48] cprDlonFunction [13] drawString [25] resolveLabelConflicts + [35] cprModFunction [14] drawStringBG [5] screenCoords + [39] cprNFunction [8] drawTrail [6] screenDist + [26] cprNLFunction [12] findPlaneObj [33] setColor + [51] createPlaneObj [40] getInput [64] setupConnection + [46] decodeAC12Field [61] init [31] sign + [29] decodeAC13Field [62] initMaps [34] signalToColor + [17] decodeBinMessage [52] interactiveCreateAircraft [44] updatePlanes + [49] decodeCPR [21] interactiveFindAircraft [45] updateStatus + [50] decodeCPRrelative [22] interactiveReceiveData [20] useModesMessage + [53] decodeID13Field [42] interactiveRemoveStaleAircrafts [65] view1090Init + [18] decodeModesMessage [54] interactiveRemoveStaleDF [66] view1090InitConfig + [1] draw [56] loadFont diff --git a/status.c b/status.c index 852c8f0..cfd8a15 100644 --- a/status.c +++ b/status.c @@ -225,7 +225,7 @@ void drawStatus() { snprintf(strSig, 18, "%.0f%%", 100.0 * Status.avgSig / 1024.0); drawStatusBox(&left, &top, "sAvg", strSig, green); - // drawStatusBox(&left, &top, "||||", "MENU", grey); + //drawStatusBox(&left, &top, "x", "exit", grey); // if(Status.closeCall != NULL) { // drawStatusBox(&left, &top, "", "", black); //this is effectively a newline diff --git a/status.o.REMOVED.git-id b/status.o.REMOVED.git-id index e8a5452..135328c 100644 --- a/status.o.REMOVED.git-id +++ b/status.o.REMOVED.git-id @@ -1 +1 @@ -90ec17d3fd60fd6950fbb50080a31747734eec21 \ No newline at end of file +ad8dd0e24a66f4d0d8df1297c6b9d65e3e429797 \ No newline at end of file diff --git a/testing.svg b/testing.svg new file mode 100644 index 0000000..3ab5971 --- /dev/null +++ b/testing.svg @@ -0,0 +1,19 @@ + + + + +Polygon + + + + + +-122.00493847.118663 + + + + diff --git a/view1090.REMOVED.git-id b/view1090.REMOVED.git-id index fbe62e2..7d1f834 100644 --- a/view1090.REMOVED.git-id +++ b/view1090.REMOVED.git-id @@ -1 +1 @@ -2e266c7f3d943cd7251613fc0eddc9208d5bb05a \ No newline at end of file +59d9fddeaaf6bf38d20131f49c0ce5c67d56749c \ No newline at end of file diff --git a/view1090.c b/view1090.c index b5453ec..c9e294a 100644 --- a/view1090.c +++ b/view1090.c @@ -178,24 +178,12 @@ void showHelp(void) { "-----------------------------------------------------------------------------\n" "| view1090 dump1090 Viewer Ver : "MODES_DUMP1090_VERSION " |\n" "-----------------------------------------------------------------------------\n" - "--interactive Interactive mode refreshing data on screen\n" - "--interactive-rows Max number of rows in interactive mode (default: 15)\n" - "--interactive-ttl Remove from list if idle for (default: 60)\n" - "--interactive-rtl1090 Display flight table in RTL1090 format\n" - "--modeac Enable decoding of SSR modes 3/A & 3/C\n" - "--net-bo-ipaddr TCP Beast output listen IPv4 (default: 127.0.0.1)\n" + "--server TCP Beast output listen IPv4 (default: 127.0.0.1)\n" "--net-bo-port TCP Beast output listen port (default: 30005)\n" "--lat Reference/receiver latitide for surface posn (opt)\n" "--lon Reference/receiver longitude for surface posn (opt)\n" - "--no-crc-check Disable messages with broken CRC (discouraged)\n" - "--no-fix Disable single-bits error correction using CRC\n" - "--fix Enable single-bits error correction using CRC\n" - "--aggressive More CPU for more messages (two bits fixes, ...)\n" "--metric Use metric units (meters, km/h, ...)\n" "--help Show this help\n" - "\n-----------------------------------------------------------------------------\n" - "| SDL DISPLAY OPTIONS |\n" - "-----------------------------------------------------------------------------\n" "--uiscale UI global scaling\n" "--screensize \n" "--fullscreen Start fullscreen\n" @@ -258,6 +246,8 @@ int main(int argc, char **argv) { Modes.net_input_beast_port = atoi(argv[++j]); } else if (!strcmp(argv[j],"--net-bo-ipaddr") && more) { strcpy(View1090.net_input_beast_ipaddr, argv[++j]); + } else if (!strcmp(argv[j],"--server") && more) { + strcpy(View1090.net_input_beast_ipaddr, argv[++j]); } else if (!strcmp(argv[j],"--modeac")) { Modes.mode_ac = 1; } else if (!strcmp(argv[j],"--interactive-rows") && more) { diff --git a/view1090.o.REMOVED.git-id b/view1090.o.REMOVED.git-id index 8adde1b..c6417f6 100644 --- a/view1090.o.REMOVED.git-id +++ b/view1090.o.REMOVED.git-id @@ -1 +1 @@ -547bceb30b8891c365837c7f01eac3b9c227fa8e \ No newline at end of file +015246b1fb747817b20ce17e660e6fb65096a4ff \ No newline at end of file