From 25ce259113a0009c34ab857384c8ba176002a425 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B5=B5=E6=98=8C?= <392871505@qq.com> Date: Sun, 17 May 2026 22:36:51 +0800 Subject: [PATCH] feat(classifier): Add JSON label map support, fix encapsulation - Rewrite LoadLabelMap to support both JSON object format and legacy line format - Fix CMakeLists.txt test command to use existing WAV file path - Move WavFileSource::parse_wav_header and resample_if_needed to private section - Verify JSON label_map works: demo_offline correctly loads and classifies - All tests pass: test_core_lib 6/6, demo_offline 20/20 --- .../src/acoustic/CMakeLists.txt | 2 +- .../src/acoustic/build/demo_offline.exe | Bin 238987 -> 240650 bytes .../src/acoustic/build/extract_mel_cpp.exe | Bin 115387 -> 115387 bytes .../acoustic/build/test_classifier_cpp.exe | Bin 145600 -> 146751 bytes .../src/acoustic/build/test_core_lib.exe | Bin 308080 -> 308080 bytes .../acoustic_analyzer/io/wav_file_source.h | 4 +- .../acoustic/src/core/gunshot_classifier.cpp | 79 +++++++++++++----- 7 files changed, 60 insertions(+), 25 deletions(-) diff --git a/src/drone-software/src/acoustic/CMakeLists.txt b/src/drone-software/src/acoustic/CMakeLists.txt index e39566b..040dc88 100644 --- a/src/drone-software/src/acoustic/CMakeLists.txt +++ b/src/drone-software/src/acoustic/CMakeLists.txt @@ -208,7 +208,7 @@ if(BUILD_TESTS) endif() add_test(NAME classifier_cpp COMMAND test_classifier_cpp --model ${CMAKE_CURRENT_SOURCE_DIR}/models/gunshot_classifier.onnx - --wav ${CMAKE_CURRENT_SOURCE_DIR}/dataset/binary/train/ambient/drone_noise_simulated.wav) + --wav ${CMAKE_CURRENT_SOURCE_DIR}/dataset/binary/val/ambient/drone_noise_val_000.wav) endif() endif() diff --git a/src/drone-software/src/acoustic/build/demo_offline.exe b/src/drone-software/src/acoustic/build/demo_offline.exe index 1a4091aff989888370ac861609ad310804d35577..84227da0865461fb6d6e99ce131d92cf2238fff1 100644 GIT binary patch delta 50821 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 delta 48803 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 P$I$*C?7qD^^Oye%nOC~G diff --git a/src/drone-software/src/acoustic/build/extract_mel_cpp.exe b/src/drone-software/src/acoustic/build/extract_mel_cpp.exe index 4a04e4e24bf75a78ed7e0a48388947b4d6cfaeb7..6077e2b6484e29bd78aea802540bbb7976fd6468 100644 GIT binary patch delta 24 gcmdnp%D%gmeL@FQ?xl%ceoSjC8gFgA#rW_b0E)&81poj5 delta 24 gcmdnp%D%gmeL@G*?28k-{FrW+H{RNMi}B$>0FM9+UjP6A diff --git a/src/drone-software/src/acoustic/build/test_classifier_cpp.exe b/src/drone-software/src/acoustic/build/test_classifier_cpp.exe index 3320b8a4943bf65cacef61530055c36443844d48..46a1f6f5fad5b6f3c478682da0430ce15bf168a3 100644 GIT binary patch delta 36292 zcmeIbdt6ji+XlS%hCu{nMgc`c8F5fh#8FW}O+i5i9d#@Z*I38n|v;pdj?($~cajx_$oup(u0v zl|gMvLy>oX3_MrEqWKYiVW~V<>a)E|xM+^y{R8YTf?>e7jP2%o#=h?6D>9kms^XW= zos~O_VIs3PtO}IUtMYrhEZ@^HFv$%BIK7eqZLh7poo@=bOxI(X8B1o_l>300p z*oZ=D^=OWhK1pS(S{O$z9?x<00mslHPRc}DYKuZ>b%Y^TTc^RDuZI;mzoQ?=In!dn3OGicl?IMyU$p3G-lH_(#QR`!1$P@)1{`a|M+#Rg7En7}x*WMVr=)~**28~X z=-P2!=A7eLk$-fj*(gCn&cGbhUL}FH=Kz(m`?3%G7Yq9>Y)H#)F+Fz6CS1CgB6x0N z)ye=@+AT1zjzv3kPb-*C+B3FdbISx?_}t2>0@8&ORu&l8U07sg34yZ&y_Jc98N#G7 z>~`RYPBp!G)OE(Pu`1VYDQbP}7{@h+ehJX(YJHYXXjMM&k9eNbM{<^ev&I=`ii;;d zWGVPA(c=7<#rdJdd09Gu9;Z8R_xZ@;{LJD^H5sk05&qI!aV)WQ!jRIZI4*xxBA44i z|JH;NU`UtZW(`%oKyi>a7om>`5+9tMLkcT@B+r}R^FWrs1EY#2My_L}f!G8?rWVk>G?k=2wettFOgqRC8Iv&Cn$ zgt5~X_6NVuN77{zs}32eZzr4DV%h{XsY5jD6dERcU}6J9`wKP`TN=7t$ThK>q0yGT zT{*7qH0Fxc`K`rSXNf&69okG4Oyb5B`MyTJsDG($%ML)!Gj*aWUs2`Lsx05Z#%);$o# zI<%kK??#vZSKZU@Vz;hT-h~}(|EOT@!a9eI4Si%WSsaW}O`bM0^9(ioWHHMRix9G= zuxGdbm{yk;EN34ZyoZcP!@bf#{aEYExL+t|2v;Ve0V32i#DPa>j(*9NiQ zBBl$C9odvlCgHP=Y+a{B;kl0NXs5{Z^&P3VX}k^L*h_INQ|OB$S1-*E{k5Pr0+XWt-AGZP>5#hf2_)O?lhG{8H+|il|kR8&{T<>#aXDBa_M|PCHMltt~`GP zk->7l&{T#zeJrj~lEvXXsa9z&08t96lHE;`3P{!YJNhO0%T|I@Djjq|fC1?-8QG~Q`z)8R z2FP>r1G$S*br{F}T4-uObvk|FN2KJ^ji4H^;N4$y&--cy)n9=O)EH{B)ChxEBOIm- z$_YxZe29gG!$Q4+S3T@Q#KufawzzWPC)8M52;=V8ThE?sQ}n9cpCnxXNPy24Dc zQfSIYX6(jW`oe=KO-G{*=~(J8GC!sD`My3>ADK*jWk@~r=1$s~ zUF@1{EO^gXO8hev7mt`fvC)Ea6EQ+o=d1E~pQ9n3hge%@vpT;_Pr8@eFS|H9J6;_U z7TK-61G>t}^u@~0tM)Aj^2*H#;Avc!V@SGgA8J?naXN|O%N}cDGMy?0Jijk$Tx5U<@C)MaToZg7E zI*jSDH8cgy4r|e?CaRHqRz+m~N_tY2RX?gKov)Tg|EIC>JT_DEZV2Xxk=Ey3>~daw z8Qh}Q`}!gt4?lwRoSJm!-Q$DE1e)3gjls@HY0Sp}J)QUudX?@xtCSpfpvYR3=jq5; z=UwSC7@m$iO$2z5I%18jwG>GF*rea|8(wMFnX$3I(fVI2+d5z(|6+x-Iu9ri|9g7U zDfH+9wh{qS-mi^~8?Wj&Euh_o%aLZYxW-znXlm>Q%c;A%q%-<0!%$T85O10DksQq3 zX%7!)<I+-qW~EPKpQ~woZq;}3 zgdzJnNS~Qr@Q!h8(vP`)$GXz|$6^cogC*$;ec=l*Y$+OnB@{baAKHLPrxBLKrjUik z%1bbhDwZI=Db81BSe!Gktgg#ImAO5v&OazJ+cWcCp9R&Tl;~rp4)`NumZr(f~-4a>)V85LjG} zJxZxdDXqH;@3~h-%c+|>3;$j^7LLM~?lm?#r<=0Uou689JAmu<0_^UwI5bULv=#e< z$=Hj0C~s1fy@;a?b?_Xv7(cE2+%g9y=sL5&>Re~5>+@Hm1GPa>nGk)h)-A;R!0Mtb z%}Ol(N1z7dVo$xm>TZp#9*ZVzh~7Z%*(s0n*w|`KWPQ|ZuK4||_^e9y!YON#q%Z7C z%K>z2^&RMYkAofrC^@Xx~^zCqc2B4=s2brNQbr-UsF8$bE$ONox z|9x3`)Ic3sDF-&~(5=n}i$jg>(`&;DPP-#}Lo~WU7b3O>Q$Vx^MrWN4B2RBos;w`mO0 z^{J=Qv4YWh^_hM{mknfOrzsy+(_=rQT}3I9v}ckla#|4_v|OE{pp%Q7|MJZ9)psx) z&d+Eq$D-umq(#(X#FV^H^_;CrrI_tIi|2v3=X^YYXEH~*%AL=(;MWB%5s6CdVJ#u)smuU2+ zX_Y>W#mrw4Z#Ook979OSm#3moA8G>bJ)eaC6+HcX6}sB!0E$)n)&VL{HDyUl!LTAa zveFBFZ`5yW#L!T^Ra7swNEChaL7>&WflI4Ad(kALl z)mWLwA7dY`kK|L?C0uPkXbn{?L+MGMtCw3BW@>$@Iyq}mqcy2kU-$(Q6!TS(|8;hF zRv*uJ)z*EAe%!ZfpaIXFDDOWU@;0t%e-??$8!ho0%(y6cwi$ASY%~I@yS}bz19xBf zcPJ;1<)evKUaFe}Tj~xJ%kcR$3vjqH&8Er>NC#K9>UW~$%OJERBrwZ!N1#$Zce3+z z!Cn6qi_3iV8!J(Qf*z^*Bg&$Xx`{6n^c&BU2EwLFmWl;+>kEg`xSjLGSqf~|B3*ak z57ehx*yP~v*R1~+MSla?a<*}v9_vaCxodT%wz+F9O7TxGsJ&~A#q4?ydsIv8hy3Y+ zn|BL-_t$S&i;zOPPgRQZR6&*hI9Eu^@y-x`Y-xX}%R(7yC!0<_1qScI-aWZuS_P?P z)a$zO;HBt~riT2L4Z>gdx2&!=%IlV|r2xba-QQl2<*B-V5%{ADE>Yz-s;r~JJ{ULB z@Kt4kB74^*AyGGmerCzgJ9Wzy>7M*`tC25u?-0kww$rx=BwN4J;ehju^b*UBO&A!0 zd1onD(vR{kI9}xpJ_&X32zwB8oN*&qeI5U5fortptk3Y+F zy+#NjYuM;sy@kMM*_vM6dyS4(7KKDB?G5kf4bjzmISw+%6f?GHqHu3)EJEQ!0R7+I zTk%1!5?=6G#TND+7u>olX^xLccQ)V%2jL>sv-f&`DlA^io;Sy}{bV;9f*ocF8uXLi z5cJt^)Yq(v4~imr`7YI*XJ`sUx(20X|}!Z8^Y8Q zX6biLcrX_yKH-kW=>3TKV)w9djnVH3ly8hauF98Hxm%T+Rk>P~i&QyPm7`TTNR{96 zioN$#d0dq*lXRe>-72tIm8(^`NR?AnIa-y2RM|t7;i?Q!mFId{_NjL*uR@a3@}BkMGQDUvbcP! zu@0`hS6KWy8#C}jTLYsYgz>RBm=|`cnPgjqe6$BEIMh7a8hFBgF3U~B!6KiB|EmTgjrp> z<&0x<<~&kvmzkd<)mu72F4B0 zSVUk4c71SopV$5%Q}AXuJZFe_js3X=vNhY zhYaI|7q(R-4Nc^Q=eM#I!^(u%t*le>n_Xw#pi$Ou+ywJz8ggi zp{#96_bxxxa@={{ZT!*)^>5flBGe@d-Og=nYRYh-w3a=aGC){R%PyyM7lzeVG^RW% z1buTIR9tL>!M}Q)6{N-sUtVVwsUsaLs01s&OP6v-cDO6Fm>^f$U5nF(Zj#ikBdAC> z(nC&_$#e-v>^F;CvvaJ$CG+T^iCkW{he$=bmLBC#Z_72EPrJ*ZkEl!6`8vx_ix&QK zjlGzb?AUk>pxmYcnfW)>xOAI9qLJC4SfAk0iBzn+bW3Fj(_tj_!o|rJA68182tt?6 zSI(fNVU~h*4IJ(9(Os53GOE?BtL`@3Y+yS_P91U(0GPq($qG-|LTmyWtIz8;0-+08 z{W?iPz`JyL0I=a%nS)w#ud*Ja`gR!th(70aJ=7FT{c*)z&8Z(N){R=h3)h}xcPwQ> z-zV9g^wGlCPcSL{L1D)eY{=+?!nYgQt2&wyzba^6Uhp06y2s+qQdjf|n=m$3nEeS`JN7MMc0L<2E-j#AzI;{GbR_n4p7!DSEN0;&5RDSdpJVRabgzEE>311R_5x(a?m3h!9` zm9k*F4?4$_^!k4_vRbY0C(Oq?9_OR)Vg=1E+XC`e4dNU9FK??L?9_v3jO4ysn9-bT#BvQ$D*s8(Oiab^@ zxo=Q!f?idietGQ7hA$kP|h24n<%aG<=EUQ?Sd9j<{KZm zrAr@Uo2EP>_&mn`m=Z3uc#O5rcuGiol)avjAoO^Y-GaEbl7&B<5OicEw1Nd$Yx7Dr z{o$yftpt6EnT^^Otz=ssUKH?kt`ha}D|bvac5Ow36cDJ*VHg>m0A%$NPxhx=HezZ_ z=!ekC*7rWOoHm_lHAw2t<+A*#p9yDHuxZmW19q%X%cjCq1?Ii_}J_T-Eq!apBj@61RPmOa86XC(Abe*}GSVr8PH8K`N)fIONinQ`EA zo{LgSMw|5V+_DbgqU%BK}`Gvj!{w2bY@$~W#`s>GaO zbp*ANxw9)pQDko4G)hh?UV9OWDF%T?OM(wsqEA;mQ*BGjeY(VI5|7(jUa> zKwSvJgw(e$VQI5x2!oce1G8g=7E9O%5Fh8T-)G0^kKl-;&ZNYKZeI@TKPOQbmBW_J znQo}Vqf-ipNBfbHtBcvyIRl0Li&@CrUcxJjD@M%yT@Z$iVZ-K69rfjCioU=`oBuI0 zM#6bcs=J7Lvm$yjjl-TI-Gi`&<5Nq~7=J1IeVi_?h{1FHi{L6pB0CmgGqI7?&hN-4 zv3v7lf;Y_q@Cq3recT60?byHtU4+An*wh7``^L#7pGi58$Eiv(Q-Ft`b!~yrm?|H7 zKf#Fl=gMlMuKkM)s?7FHOt4~11$?C`$eHU7m{V#czF-flkoFb?Dw1n{AxC5NzblBGhm~r^)iUY z(De7{xafNePO&U#Kiz@#zcG#dbIBIr$2}FpmiEFe2wSr36=Che72)>QKKxTGX2mnH z9loF=GrSv7rq>tt!|Y0_JVxCw3jJ|{Y~A=ES^xbE`))-+FP&iz zjg0eOW1a7$R4%2}rzo_wQa(~HH=^9?$}uH-ihmd@t9O@+d2jVgN_h*p{Ki`#)846^ zY|~K-&)ThuPUe+5ddQ?bAW6$gaJUk4%88dHaA-miM=z12UzWR`Y{la!Gd(znfrmSF zw6Qg-A{;L$HBp7=2#lmu<|$ruDJ7}0`EJci9#Kk^id)GgI~1KMN=d$K?arHM(mNtv z|Ea}KN~KP5%`-}~FUocumq7AV*+EhNNLD{Am#9kf6{QkcX*WtR8S3$-LhGP0sASf0 z#3;^js$>WGOA~77PQ6Y_hotkQ5^5cS-T9OBbu9UCr+Uz89brn8K9(V?$xe7FsM2Xd zaEP+|Lz*P#>Q73BAJC0J{7}7Bgq5Q59hmIWSFC3BTvH-i_ERb@f;}mrH>4O+T?>7G zO3}~6G0pow=`+qr53sB??f7o&u{8sPe~o4TSTmRxSp6E4uw*Q2v$hX^g^gHii+LEM zC5JWM2xv^fLs!V}VKDk*D;e&wj;we3m$l-=+F?S+MI+IIH{YOcBDkr|S<%$?+fpJ6 zb({)`N0IV!0WBRyi>udR8~fJLQy6Gt?eqJNfBrD3c8aheLW}0o+58Pl(TFfQlQkld zOoyHgqrOIv4r4be20%dU_-tQI6`gjkVM?Lm z7Nr|;93u@0XCFOo3fM79Svj_j+OZ*u-_5#iC~Wt@AspGYq+42yS`vP!ktOWS4ZQ}o zMUlld84sz(B}yy1plW*m!!_9~Euah>nfz{JV|@qGd7He7fdK;zF zzok1{Sc`_YkS_0F7YgUJ?$b*?cMCyubnC?uH!c?H;@Artjlzp@?EJ>ZLnp?Or**v` z$jLESP}{_@8Bg?VbE_vF$i3TG?5}KuKIzGxej-ZvXHWL#6McnsJ=yIi1`EkOS^Sd& z`6pTSlS#t+J=ne{=knh$zfEcU$W0BZ;s2Y`marTaOWt=GTr$Js@>L=oQ2L%Tab5j zWrl+x%x7D0%fDVArO%{z7P)Oi$I(G3FB)OCx<DXJ6{5Sa z^zG5YUq)u%9x=eBot zY-$eIU$Qvgp-6kDJ`9u`rOe{|LGf)}H^tP%`|%(e%Hm?rP~x)L|LqrOk;70;q-VhI zTb&;?UQTrx>8H??&ru7p1UoP~=aIoQ`o#H;C26`TCU%{k)I5PN|!ea-Jc}TrLhXKa=eA zs_o@KDAwOrwtTGDj*&uABwM*7p6^p}U`H^|hgMXw$8fy$EbH^s#g-rUL;U}aJr3g+ z4`Ru?=J2uXz^(=%c@NtqJ`-`g4~ow{Llxn9`W1=E$={?A6|zP@mS57Jk7P$mx(Ro8 zSA1TAP5kMnS*zV!_#y1+-Glu;><#^{?8@!|!r2nm_L*p5ZwX6!X0fp82s`-9TH$4p znf4?IAHTt-?&%?vzQLZ@6NBsHKlb$Td*1}r_U!9D{rEr@zIO;8#HQ>W`j>9`bbMKTWu6i~MSl)L*{9;H5HY@d~2w8r z7HPYz_?zUE|6KU67eK79LQ$&o%lZ?Ls)^f@i%JgCJB!6=OG;(_PzrfGYPu~Mo#c<(Ql5)- zEA1nEQp6rEo!|cCBWNcA+HS#nvPG)92QFuymM-hvjgfCBn(#8q4XFcV@W3S>b}dCY z^dbbkSSzJGNqC*KDvzz)*Ud32k90a+!9^79J`zcu`%LP&gK8->g^@D$X!N!pcJa~} z;3WT;2U!%lO{L%4PMh{0-$l_+`l(w?X3(YcD)$58!pF8gSEUs)RwubulDBV2a~xC= zS~HCb+|hICABskX5{nY4e*fONvn z0xPDf)*vA*rCixeQee!t0Y7fY>G=9|RCb^3LhuSRzL`B?L>m@)O=ll$_ich2+D zEg%?2dC32eo0H>x1{~<&$lWGWB$HaRr`l;Kz?ENFVTYgdje)a$qYbdE z4;+53Fs>M>W)P~uswllr<}k_&q%*Q%ysM@ncIlLid?p<`*w{E0ceF*JG0_gZs_3jn zoBHD#FWucrjX6{QR=SLJ0S1;26q^(V?R|!h;k^==`KR)LH0I->^-V-0z*@Nh&s3^vW)-TUk9w&>O1q7Fu~9SbABu z`aX!l^B-<+j{KL{o&GN3N~~>ZLXxCqAs0rE-GlPH&%jD!-4R-6J#SHIU!p=CwAGj7QLlHu4dHnKYsekw=b}>CHK9jn zlT+0C9E9ZLi`e@wbc{&|q<#i978|jPJ1#$LK)Xj${jL>u{Ix=ECwL<$khViDjWVpe z9l&}WjPF}VD|x{=WBoOR!0~*vLAoq&c5h2h&`!iP#zHZLbI6A>=uP`$TUgP-FyH6E zVWpiy9Zw)3tI>k93K{ZPEHsssAHQ@mlK((x08HoVaKVl_b57R+IbOQsYHU2#26!V5 zMRXy+>c0TLsP%_fCuV8@ zHtWUGHpUxVGJ?YM31eN#G96jdv}o0R`Re=fwfE&4)O^?JiXF2m-PKfOY3(cc%ax6| zUBHJmmZjj4VaiL9{EdoPFU16~trhKAS;fG1D{_}D5YqDmRwmeU5q+K2GtosJuU0(e66-ktR7GUx_%7dq#2G&q$X->Tv#P=)ud94w55~CV2vfTro(K6s#PVfHcYc@eX(w znS7j`m~7arA#H}-jc*3hB+ueI7ik0}H~Jy`O(W7a$lLg?MVjQHi5#~HX_6E0OkyX} zB*#wXxKiRnK8)|HNM}J_!}l=K*BnT!oPypXLvnBidXF?o7rr$}le~)WEu=|4`7qp$ zG|3bA-b0#X+*JJKWKUj}t*3EZ2+~;CxJrDDNMljsu#j(eRu2}-F#G#>(d+-fG+PIYCp20UF&Vj%|B4`x=1K1$hSFQX|G5GI2ky!r(ZPk$Cb2xRvHN zmk?qDB_70E685>rlK?PM?*Mn5;AkCXOQ#owa2;F z$WVUAm5>1q2tN3O>t=vk@uhWuWJ`Y^o&STrK0NYn&LrTA@vXM8(O2FQ3?o>;)p!zv zt{x-`lDdzbn_&0go`w`q-URM>t6$t$+Be+5z-GvDLqRyv0g8N-}m;WS!d%|Cbf{K>9 z>k-`T0NpDQoEWJ4HiAFXO7~R+_xQBdRNxHK{U?Gur`P=$!M)Mu-~9Fn?oYj<<546+m0@7ZG(oe(sp^6tf_@D-AH9j3$>bRD}b!OizAG=VCMSTSO>kFf8 zE`om!E(w_WXJ;WCvJk{rPv&BMNx*u;&jS%odZrg|nyBNrCAuEmCcfix?j)}}#dFUH zz`hsSekyR+eEb0LY*B4za_{C^c_5D0cB923{R)I2AHmK4(R#C91vP6}KRr#?he^zD4IEA06$}Cmp zs4`ELhgEq?mSeE{7_Ta-a)ByKRCz&_*Hr0iQ}_l|hN&`vZU4T#!>;Bwsj^g+<*Ia# z-$gZlOO^Lj88AVy9{jJLRlcsuN>!d#<$J2ER^=5{-c;pxs{C1% z_f+YN8AYE~sth3+2OwMpqEs2D$^oiOR^>=GtG@lhxoU2yD)Uq++s04fefj^JZn9_o zZ@Q5i{%^Yd|D0}7|KHQC;`oo3{3`DL8sb-B_;aO?$P4_FF~)r{`^@{2_gVJY_GRr` zu&;7o)xHb+u*Ge_t^osa_j&Gs<$&!##e_>XewQzAXlYc>YWi;P(*CH~m%qUa#%V`` z{rDaslo%GSB2f{%El{X!BiikJ*P~*0eihG~#Wu10!$Q?|F(;OfB3T^EFA@xUMSCB< zvl!lkw+ii)jNb%o3$k{L$q(?I{njYy@*Yqs-b+fI#XCLt7$IV>h|6)5IJ75!kIW2- z<1Z5A&wQ7}EOywlefukSw<#TwUcAc1<02ESg$c6+^hbmUZ_b9_H5Pv2HBr*IRqj6az z4(U(WA~CB!JUCHN(EWmAz*6zY{(M(m7Lq>V?G1de*kb_SO8lWeZ+vm`0G>yik7f+y zKf<^Li}}6ysNO9E+ygY?TtHs2mSvAik@>&EGYc`k|EgEkjA|JkdfJB=uMK zE-)kcv1?%R7Pr+S;)KC`s4$^}xCN2);;(~wzFR}FyA-z}oUf+~=$-s&-w}5j#flTB zAkCF1(e;XwmYw?>($(7)JUT*76RsbFv>i8%iVOCN`~&FIJ{eRD-bR|+Dppgt4(ueS zmC>T~1~F_X@XwVr;li-a;`E_>6n|874CTA}#YZAocrkev-%fmMDDUrg06=~R#WrU| z;SRBZY|K;AvhA}-S3M;r4x>7|$Y~irfOKgGB``yyFt*Cb__>fa$0#<>Azk}|!tv|c zgr^|ga8Sl|E~E`&=1@LT_X?7BaZNJcF#!GH&QnPnF@HTDrB6m6C~jHXmg61~+f3bf#$;w#Hj;2}^!UsqX!6Knl94G#>D+aq=H*AR%g5M0J7qk%V)YHzx zFsBr;$(nB6oPIq z(znFLspyZ6UJ+B^mP?Rc>yPG&DVs6d%JP-Q|4(uM3ld1n9GN6H~adPA)DhP8kh6oE#v3pE?d3=R|j!c6(+G=Sx5L(@jq#( zBoPZpl^SMSo2BUuBYUh8e!kdHy3;14t5n>Abc34CL)zF=EboW0MzXl4qFPJvi%R77 z=!IEQB4&-EnW3a<28itvc$4350Oh?DrK?ECzbG&70@@a0!S&&S=&+#mc|M}8J0C7S z8^`+xHnc<(pz}U_{`M}RetzgQ>iW)t^(eKaXh?^==p&vqqrNV1TS-f?meMnjzNNam z1o~CtbLq6Y^%Kvg^9kaPoqSs{XFuOI+8=(#P@#_ah4insnFbUFdywpfIrC8VpqMh6 z@7k@2nw`5~<H0T|4-oMW>I@XeKhL)ie;&=7#P|c4 zf^+usAuUzA=xFKl=)m79`3VUIvG)Ofl&&}wwTMMa`7p6@9^ZoKA5TFYhOy|x1uNe+ zq#RcuZ9BsHiSZfWEFw-6enLvUIL3bBCgPkW&RXJZ^5Vqw6K@iy^EhxW6UXkwG4~UP zJPZzQJll$9`oW!JTOqNZxQpPA2-!?OGYL-aCpHiqHy#M?P1}Yfcv-ac6Gu-4=LzBr zrJqVtwe=GZ5L`rVgk00#??7-4 z5$6Zu93;+#zvHx;4vu94-*y+iAtirD$tKEv6pK@dv*7PIRm8bRoWsOP{5wwg3~(kt z2u=`wLR$SDCzm+o#92U`TS0%*txLoScnBQan6?c${CAv~nc!dt+g6OgPe`5@XF)%4 z199FW&ZET1`8&=v;)G2ErBPb?`I_0>Jq2gZoYCh=XxL?}gn?8V>Y#W#uX5`PEr4}0;8z4%74 z>tyi1BYue&zr>3lA+96-$jRVay!fSF{4nuT;+KLSV)o*f^%L8zf=`A|flq!Xn+>h* z_er^zO@ru~0-F<|6kX=Uuk_-#62Bt;>%=ei;#Ya`{l#G!;QMEQpXbHD;Klb9pCZ;HA(IEKVl{(^M$ycDisqeQFV*Q9V4 zSAA_Cj9v;g!D1dMBu|IJ1uumdFNKeT#g9l~H!1A&QZRcdR0oT3v{?R33RW+LL@$Ml z!QvC7Fm47E;=B}+y%a74i?yUs1_d!>CZ@5)i*q(u97M~gfMRheaco|ks$g*^ai*iV zTLV0&bzX*-!pUIq2U0jf3fH_8vb+>3gGCE1u!c-1lz1sD@KQJ&Ebb?TMWm4GrC|3` zC=V9zk-}M0Xz|^Z3Swzfp(qp=goNWtt>t&>Fznc*V#8_@``GyoLIZYr1NqLoa(Q3D5F+2;^Si~LW??&;)nC~y z4w}tdgewdk6Lm& z#fR<0j*FBkoPX^F02PtTR2VD;I#9##-;6Wb;DhyH3L=UzO|>2Y zQY@az!kytaNS0EvqxiXl_t%#WbVq3+Rsplv#lnYrIyyVhfNO&?Uo49EY~n9V;gWo{ z?^)sl%lOE!5Hs#WHC09dF()e#_n@bli9mNJD-nm%lgs!;x(upz-7 zP@!6_VUft>Y_c*Lo5tWTJI25mri{UAanvIigYmFmt=fkyegubo_5eD0z#>eqX(@AIw4JVhTb;9Jq&;1aL3ea7}l@ghw^L1H&-C=Pl`7ngetZDd&SsXWNjlo zuCee2@t==^`492BS|qOu`{YWq?aSw_n3u~zL7pOzqgTR1uLjVu1-9^ciibMNHVpJH zgEgIVHkx;>;ya1m*YF6ll_2hV6jQWZsqS;}lSkqH;65CeHB#}(o1T7l1A0wG-}a#W zfvy~-a8G&A(Le`V6!eS-oe$Jy5v%6$p?VMK0C-iUp7)?TfIgY771mj^j7=L`z9gKIy_w(RlE?g|dVMerJ%>8?{oxz^VxpG3$KTJ$o z#di&^M5tg!VbP9PFL^(U%U0pk?M5H57#n~6_o$sdxHI5<_z;|*2!HeuYgX~y1ml=p ztNCo9MPG5jYOH(h`-)pgcIzvalkC%1{CG9r4F~mqtVZLq#)!r>pu_N{H7NeRkN7G{ zs8y4M)t^biT-aJzw}mTnrmZ+i7zKLZTq^F5(dQK%u)1Gd5)L079no#jEzgo=-BLrt*r-Ue(=QgJh(EVd!a=47W% zwAwLp<_Osz(GE>h9I&AMECym$Y?`g&w*~wnv8u@Jn39cfOuk}?-zJ_aMAX|9vdt<6 zY{XDzDMMNL1enz-^EvUxMlkagX1>bIQJD9h#FoY=cG(2RKSlmYh;oHkZWXs~Lj8w{ zk*Bbeok-gi_8Bn^N<#5iWhsILeJfu`%u#%mLi$8>(n#3HDT}0ioO_X+jioq9StQFh zVfcq^hUH@MaTh;IFmzUe=PU7j3e(#0vT|VUc(-zjc-w&oR8UM&wljOgeOsWIr7Hd+ ze(!>!*`_oNQg%+6c&Z4ja+ReMTNiYR4qlRAP)cb{iJZr!at3HZd6+nE;!+y>XuQ28fnf2yt^E)K9+wb(0^RFk_n) zDX&jL16spyf|^TbaMxbOR=paR6LlFU$_nBm z&-3A-1N__GPv<7cl?V+X;@ao2k9fNnXQ-*$aqAQI-?(BnoiO$VM?6hLlNZrnF)Fqq zVmT3$cYxT}i)c`Zhv-~19vty4BBpu~!&G7h5nm)3+2;%ErM4L)9 z6EPed@ns@bdJ!{J;-PYIN{AR!0^(^eVwOrwAYwak#Dhe9@4pg{`~#ewL^M4OVzn1> zfod_4h;6|U_Y?7o7tyW~kG~F1F%gZsLA>cj%u|U&h!_Np_$(2>^CIS}#J64pXA2P{ zo&oV^FXASZm`ua~aKzn2yyrzMR*9!y1!ofx!}fsa8+`x7EK!N)UIC{N9MO&?ASC3! z5-miW362=D7e7@Pb)i%>@*cqg!8`C166Iy2Od;~q#btXDR)%N6it}QXtE?>Xdtz-R z)&MV7rOKKsE`AoQR?mTz{9joM#5!VaCe}zVR+ZX;{g{?w9yp?ZDSi%PaD@wMnUNNl zU#aW~D(j135~|g*XQ?cgVBdYHV6ImMH7YTJ)|5L$+(5*oUc_3JxSNP}aCYIDR!CkG zPu&;}z_Za+Sl8d$&-*u9u-(tG?Cuqri&q!yh6&1!Kj?WrN2nIWi!bvX{Z(VB;&adA zlGBVbN=V@7SyflQRJ=U~?*-)3BP;A2eE2}IPanPmpCLYT09T(E`eFAnLAgz_(47uv zU-p>1!&v*EaxFxu{|mT)`5nde)-3kK&RIPE0xm=i>UC_9=yQ;+om16o=Ty;p5YLyF zR)S+uFILG$<>Htxj(QRQyQd1&YMZ9iYL{!BmuHu2y*^E`g3_87u{pm-`=e%eiW8Lv zY%YWGV#TN+_=_Kx;fk0)L(zqdcnSA7A+41C<+;N+#K5!5mf{C5p`o=#<-%DyLo~dK zn*cwWHM?kfwQ3qB)$0l;K^!mvoEn-sIrs^w^}3#x$;J|d>JV|{tJvUvOSDT~v~qWIVtiJ!|v4DcdyGik&V z#HB>6BH~2+gxoXSzpDDH#0x}BIL)^aKl~>j9CFKxXi$k!lR=zr#pcWAwfVZ(q@~VR zgMYKh-=yH4{0-RhtNS-K42?6zzdfyhRf){#b$eeg-oSWce%rGVw6xNkl8ao`45KP4nEJX894p$$*Q>p&CO*4mCYsJZ!SYMH{eZ}v#aLv#mM6@ zN6&QZilWX=isGpibfj>SAJ1^LDp1@hJVXo3@KQ3qC67&Wy z%6Jg+89mD}&Q*J;miX`!#4Z*5RB>B(oSz*OGf%?4T_KSyJBfjvt29@rQdi+BwZ(@- z$D63vJn#N`6Pu7_^ZVwY?&NvOIGN{(-@S<@pA@IOh0fB$pHj65vh*z!)r)~|<6MxQ z+R(=rUmrO&6iAl(W(i(dLnP0}*??${*R>cQ7GO4z%O5IBRgyeZ4gvWctsHa-JO zg2kCuJY{(U%Z=!q!UsC=h+qyqB8V|5-Nq7x&l=R5p)Mr~@){83S*4LvkY9mh>6>er z@Cd`K(Xs+@J5ih z0`oZ_SsKo#KsGN;bXu|2wq%g`8VgJW;{sI5lI2*lv= zS?1KGkKvEyIGaYRH#iqG)eixZh3NJ)$iYnmRITa#N+9_fqzp(E{SA@Y1pI{&kRix< z3~{wU=nWbl4@XGE;{;9hdLYGWx#Cxc_edK-qB+{+>Ty7nM|^JQ?*&31JSjk6M_$IewDuF5u!0&0K}~6Mvbgx zY-Z;U5Srx8pdiGQ*7-&t4W6FK12h+LZffqvA>g=Qs8SmA;1IF&93SO)3?+7t7f=;f z1Vni(?(Xt4Knxnr2S7?SqjC+%0!?@R1Y*{-LjM3-sqtrA>Pk}@qW!@~Aw`7ie72Z75 z4BbU=4A_4*P2{UUv@5OmlG$P?das#nVM7sJ$(j{%6G)|+HogvoR?((dIuGQ6#?@_x zp~ad7VGIKAc5@?efM*^aoJs(eHQ-G9dD$539)&%cvAa>0f@G_7r z4RR950?lyL1Br2HoaUE`AX2MV`Wg;olW%k9j|0*Ghwz>z&LKo|Jy`)HUvq)m4kX#r z`&qM>Aryg3nA|*u4}nyy>De_xLYr6r3y?&OX>9fgu|-{#s32z``` z$co(Mxy!IauhC4{GH?<#bL$Kc|C!CZTm!@oJLDwAQNI9jzbUIA-5n$0a!pf51F>t6 z93aIWzfjZG0IAY=(*>kN*Ss4~1JO=^e*iJ7jZvyUKN54RT%+~{NKMQ49Cf*}X?ouP zPClOI`l!Y@?sw8MHAh;F0-~8V9e`}o)MXxpx#fPCtF&kcNOnzdPXLmkF*FlM(!Z-IjR znA$yI9{^IR>C;0%?1+1+Lcl*SF>l^tq&8_9mjzCkrrwo6v@2QxkUVt2-{WKajQ}Pi zvQ5xGfo#FD+k~74(x7R44UkeasD*3@o05fe3zMiBtXtr?Ur|QWkw1c&Hx+!sFIfmH4x(HX@o zOw>w^tN#N|v4=y3f=0u%rqMXNjGw)>O6vq>|v~ z!?6WOm}V6B0nv_hIgoPAidGGTj%)qVT!G73HouP3;t&+$-xNUaJuV_-FOXVKpk*(gH)}4?JdMvzl4%5Z)BV8*KuR@D zq~AZ|1wDKKa~(TY>nyFBd%Q2*DK(dG4GXyh#GwdNQuU0^be=I z|9nB|m;ngf(ab|ln*xkKR{^RdoP}>19Xu^vARc#7bxJ32hG9bn_&4aoS zNV%uc@(mo;$_$gjap1%wbKcUqnVE7w=tt@6cBt7juBLxVCfQ?%m|cNzn!fe{lBLnw z52VZ!j96o6iQ%f;U4{Sgxebz}2^kIqgW5)=K|w&mG`$}JO8g{fqZxaH>7k zQ(b$2_~WYtzFhw+$XYZ#I|@X*qS0Qd#?wSpHir%>w2SWd;3R8;@jpOHG?s%Nq(&Ir z!ALjd-2rJg8c9HCS!$ZoqktGSuAcUwxco9M;9F4=hH9E7^3ypU=N54^-MIs#6n1Dtlu^++9zwipDr*nqg2z)}ay@~>Xa?ayAe=^PE)cE9 z3xH&3I3+-A9y@X<&%pp%G;#7WNL8Mwpz2QpG3uN5%=?7x7jV$|W(QirM8s0R=6($U zlBH=-_la1*t2NL-kg7Clqk$xAkm*1;jbj%Q2Vj$9R|2V2XsWBX0@p36;%L1DB z>?ojOO=TYdv1t4upLmGpYxqdV7br~Bgh3tAH3o!9hTlCCH*H zD&*~~mbg=+huck4ClttCPZUCxn*yXMc9oMp#IDA#3&FXd)}u@vpCkm2UE`vyASG%l z+YN;1P5w9ngg#BkB_NfWA-f4g(jeWYATB(?lR0ns@}WMCFc;|7j%H?ZFjUc)I7*?4|J*Fu=M1APx;Auy1UgvAV9Z8v)^Ovs7oRgO~ATtyH zSnaIzoP~2nFHB2In`q9ojhvWi8#A#_rp@+Hzsywo#J-tnwlQ-a>Yr&_^-xkK9t4g1 zU+Kr^9<8{`FY^ysF8?KZ{PKC(_T1(1%Gt|NBQN~P|L+G!hCu{nMg>Jw7oGiJR@Os49mq`4%rMraT1Y!E)`};`8H#~l^ ze=|!<@S#bG|?;i6FD^?3UbUNK*6+;|@dCVcm^J!03+C3SRF+619IYWdt* zS+fKo%>t|f-w1qPVt2$&ohjGgVC(^u z#X=jPU_df^Q|crN>@t2O=Ht~#^kz}`^yuTJbauRzw=J5V$q z4)s1FiJRDee3GTOQ7pVs`<{>X69l`Ic<&XY*}(n}O-E9|bIOCJ*?*$WIi{;I7- zq5MHS+77p|HI2*(Z;cd$TYkr2ks!Z@v^*PysMQ9FT+N-Py8JC@QS#TK1i=}9J$La6_ONOq-B8|!V=gttBdQ^>tnyVCDiEk5!hRbwvM;WA_>=A4xChO;idV}i~n zdZ_y{krnucw|gBWFyu7Uq1r(bu>EbI@|)e+zkMH;ejLUIHjapVX{VyXWq7fzC~PiY z>F0{S4rW&{U4|!A%pl*kAKu!ymncQqS-D@LT#H)r%NyVh?FlGacX>U9+SurNQ z6V*5gVF)RmkrKMzKo7!DIbrzk>W$OdFNy8%8%K@^~Z!p_se6iJ?9h&lF zFC6wlqIiHUwzuWrf0Lgz~XE!mb(izElJS3~>yzZL}Dxu?zceqXclb}ff)qx|2t zm8F#YOOc1k&4VOyiz>)18WfHU%9JCZ8`0NEoEVO0Vo&UBw|3k6l%)(eZ zGb|}`Z$-CZ!yAav_tT9(l&3rMEjd&QX=k3Q$Yn5qNN^G0Bv-aCLdRr( zFVB*VJbe;fBjhCK+YYV4i59!vxzn3k$1((7rNUBqcCm)m(kBDag3E9olQ0RER)LY^ zyqg3YlVLXOw)XlDKp*g{|&SHnhv_2+TQtZyR6^Ehr&BLhGz-x6HXjJ8u&`@aKc!q`= zQ8puPdfbe-nQ^J7jbVAiVGy;y)NXgJPPP~1S#l`<-f&AcBnEW2C5?VE&#EPYz27fc zeeBL#>4oX(QBXiE_Ds8$j_u7sSHkr2%FA}=QYagNF&%DMV0YCG46Wu*d6OsY1<*;Q zSXjO?=EZIz$neur2v_%YA+(_lx7eyr!sPVA;l>lghS7p)CYMLby{IXd$?h62|2o`c zHW)Yic{vD5vY6vz%8&PlO|l8Srd<&`yD@JD^dw;^%O)+EN==kwV$~Jm^85Vv-eN~br6Atka16d+r}_({7PcL(lXB4~@%`fYdZw3MMNsozx$5DKWh zVgTuO{w2Ggk&KoVp*CX#TrUNuxc;L=}>qsrSZOcw2PF4+537&jdy2lP8-+;ka<#5rf_GUa5I!7iSZCz@3K zWK>eWYE^$RGRkVc+kpoDHqa@&Q{kPQM`8uz=DvTD_rH|4E84u&=)q-<)jk06Zp>?o za^-3Tq}mDuetC6cK*lheqMaJ2c}~MZAN0980t0Fc>t;ioVKfFheXCzkYEXaeNv@^I zqx;=9<}F3U#rzucRm}Id%!TYqK+DubY&xU+eVf&DGy=; zI*I+TCXC+veO5q{^IDR#I;rzbc^H+!;7t2~BuknxZ{6=|xa6Q)ic33yP@N9c7=~4f zs0--Yre_9a#@ed~;*!U`1PQLm=G+gw<#?*pkyM?$X0W#wKS=ENsWGp)awkC-T+aWf zYZhD5wUy(wrckArcL__DazW;tl6E|swomckO)YsWmJBwgV+pHf1WWVr$jw^(J9 zvTA80m&R}%Q5e-L&@|~oY%BWuRb};~(8WkPgrAHX@)U&+M!9<>(pD&hZ1t`CuH8*Hhlc&EFx9((cALm6;*LZ4rJwB^fv015R@c zO~am@76;9~bZres_jW2_6?fL#GkP+g8p zq7&96x{|!_B|4LYdx-^h-y~=GXiU1?tM@SR5<8cR6}eUSavk@4jhhxDdXb5_5a;|P z_muBgSD^10XJF%grHKX&JP zb@4*mmbH4Y3RZ^_BMUzWDVq>Cd5Uu9g)6F$kL6(7v_%<=o&2f(?@Dl;mfvR+qk8rF z`4@OI_Yq$q>odFaA}trE<_JPw`O35EZBA<3%+ra^v(@(%L(Wz^(E>ZaxFdTfs;790 z{S=iT9%lWclf)bBvFNelZuUiVthkbytSiM@_NcW(|J%5|N^*^gj4Q)j7mlmjMUthP zd>RGV0K}~4lrfJfM}ui}1+K<`{1&@rO%Co)toMfDeh<>+k9{QjS?nWS*~l2H_#=BH z#x9L}mc1J@OggiM`SpmFzS_?Q^yt)mS~xX3(Gp9WoApPdDZF^UAV6kVB1acYlb^zCrVm)%&qZCONUuD7Q>^(pg0x zhxFysY+TZTMDAuGQosO-|F~ zNKN+FWEV|_XwpxU$9+_NFKKeCCfAa5prJ(?Fin#qHQ8U2T{Ib@Nk2{gZcr89)Z|4? zexS+YntVxc6j#4Pawra!<0C^)O6QjQ+MR|-1va$LVXyRW zCyjrGo$qgH+YK?{ykK{ESKvxw<#kv5eP{f=TY=Eh{2A6{fVurcpVihDBJ8a*PS-W! zGTizBOKSN_<9mj$e_*2r^fTRfT0J$A=vL2A`83--AX@5sn7uckhva{l{W0K^u`rrXd8jW(Bs8n8gCAf~F97&ZJ~83kwXBc9V@K z<s?L1sPG**-*FxGK+iS*?T_R;Wvbqu&c zqiozvM=madfSh8%f4{}zb``ga&iMQ6%HSY&D!xF zQ1QQHI0!a^T=DnpPTW8%($Jlt0>iIY>&V^;xlFO7VdPq!qfIV_2Y34^<<(D-xdnz} z?#ldErKR`c?4mFo%1E1|x0^XkVg5}sE<-FxbYrtg)h@d0T=_-q zhapsfFdY)87r2?CQ{UEV+fD?b%Wy`a!qQ-S?)n;muCUQ<)^b#bCOfO@y1M@tHhk2y zfs+A%*#bT3=q~H5D0t7%8;B_2cxSyVBj8|VS3tn$J;OyU z1ywI2sk(pT&xgAwtq`UBe71jdiFD1ylE#dbcDq>7nDNq37rQ;?d1=p9wsUMBY4%oj ze(VzIM<*MY{JC`edloqEaR1K`Ls*iuHN<6jKZoDq>NGV zrnSM8+pgtS`cZD6nPn{gV zHsFdd*@uF|uzCag_td$;odNx5oEdMzeeZ_yYC3g7;UDYSsA>5Di`RqSUxhZVXWvfi zAdOzn8b8!FU<8%i#-$s`9oMs-5A_JRLYJEdRp^^_Y{f$z9Nz&-H%>YEqp?|h%`HDz z8E;b3WbYoOFe<)AHQ!a2Rm@*c%7#K2)v3Wx(}$Jv=##6uU}6T-U3$6P3b#<0ht%JR zRH2#LdMu?4-U17p-ZCJBGT(VAmWHllvD24HhaX`tPY;ofKEmFczDttVvY9h_Nf+0$ zoe=qJ*#|Rv1*ESy%sMh9bP46g%OyV#w5b`AS!W@OMtpy|fwlgsHUG`TpRn);=*BAfZArTPuc zR`m|e#`FkeThf|JVcCqQ4e|SYwbtTll(Y|e3)x$}Hm<)fV31algAJvtF)v%PZnH95 z3eyDP%Ttx_U%vL`naXc2zkm7USKaSVWv|bgC%v%>b32svojp*RwTi8r9V>;cVz15a z)%&-V=z|kW6Pacr(|!Q5YPf9uxwiH_p@UkYtQIFwKrNnFsaV-C!VASKQv$0eyz^iMVg$Z$&s4uugNZ&4AG>YCV#)A*1xIAi<va!u0X^IRgYWFeo3Dp-CV{d&hIQ8UB(;`dCS;K z^Sc?-mw{+eW5Y0R8T)pAtn}YZ7Perz>4{7=99H!tC9X{7TF_S-pUKWF=q^2!dHAOV zze~~&W7!W6PaDC;Quz7TCi@<f<;YT_RaC+GbM)}G!Kf-rxBRPP5m(gCDxRm)V4(-ua zDfv>K3wfNHBsKKBpjrY#W2%1WnVuQ#dn?sOod1v%YD{B26Rb$}G3XvJV3|MZF9_LotM|l08*Nd02 zxlbfAEH~zj#M-bvsSe}JY@~@l9umfx7R)F z_@O8FrwrwgW1WjV{o;|2El`f%Gxm2^`fWq>3{KaE3>$dgVyR7|471v;#bl&5~K zblpaW+EzLni-d>UeKnB{*wEH7PgOz!}7MF=~n0@Fk^W zhgzqVT4IB!4LXGqdGk|vOkRwixH8=3k=}=(5M!UO=ymLEsQAlqO3@CbdY)3ERqCWx zN>M5;LJ20oEj-a{`Z4C1yzn^Ul8%%V2l>jgD(QB;TAm6?r&mQ}9UW2rBu8{c5>N?2 zuB2g>SUFIE=yVZyF>qNT1V9zy_;_mkdsgI_YqCq}hVO)Pelm7hPuknL#vOiS;}EG$mr=0b z-8ZP42yU{u*h047mF?`a+>?QQP!w~4p25*_Va5ZKtV!&pyspxJC$cZ{dW?Pf2vu!& zX(A%DU@o1{U$qwu3#OwfGZHpBeykyv{0Jf)a2DjN`Q^yhJ*N(;NEjRK|N18!kRqVMcl^v zJ{lLYvo+S_Cb&kgduU&fXvUe0yskCd@uL)j?WjW$Rr% zq(N48$TdI`tn7}fugFV?O}6!vUg^%_wzZK8 zyR*{5Ahu%Lr_yuXSmO4mpv{kyFAUqdVMqfv(kL_?-;L#OA8tH946PP4H4LYz%MYOz(Aac5@U(X!32Em5g6lorNK zikmn|J-)^B%d^8xgGEuFiwDVj-fSkEJk;l^@Y(GxXUR`s^6?%&yiENe9T%yYlq6AYDP>5o860 zJUX^R?O2d0f?eL#S^74dHQpUAod{>v-EI39hf}9VEvPN5qV5-rvddpnWTAiZQ_o`X zhN+{QO}x60LgyBQvqyJ_CfXaqw?4Kz-=#=<_f{|{-PAI>^N#9U<&hZhzz6XFG{Iis z3DPkO`-Mk|cMn^NT8QFjhhv{uElTsAVTbmdZ#=OdqUY3JFi$S+&&r>iBUUrZQ#F$C zG;8_vlWqI=Me#OlelQZJ^YR2G`J3DVD;{d}+_AT}c!l-Z8zGfFd3fetT=;IUy6OVKfgy98q#6(xtpEQVaIGjQ!YP%4u!~1<}+;wjhXs zNaY5t{1p}6q``OCGY7hubC=ZCzJ=W%VMEs3-bLN`O}?(kyYeMgeW1h8Mp~6MhpDBN z;b>*U)oFXf(=`h9KO9*nWCrl(EH)4ib2l)$|!#~o&)p9>ihj*?sD zC>rkk=GI$~nu@!!Kb1VMJnn}rab-D}d`a}c=B`}jR6Q1(&z^rSM%uNFefiw{Rs&bV zPF$8{+VMUX7TQAeKt8&fO?iH4^c_aN#mg?VXI-TXo?7HUue~6{vOs--OTPLT;nnhQ z>)9{QM>wvor#kJX^;A69M~Ue#%ipeu^^&$_10c79xMcSa=dLN8cDx(uILbM)LDkHAF zj^jM(FAvqKzO;y0N}^hZsC9nmh&m^ft?#6qzKAU-8P(@~!t#L?Qd0wvkfSJ9eQFt6 z$GT^g|3aQ(_%GUgfY{`pS#?R9sg>BmX|(9zP`y~mQ(xeluT?mT3fip}y$k1ySKz9@ zDy*%=BLAE67MuJLa-_O|nAn%1Xuis9#*3Y;XE9@LeNXPoq24*)laBxaSsC&_Dap!b-cLv;`2|EPaVuReK~ul$Hetipai8n?9t zL6_lKr5{c2kdNLRS9HBNU-*}Gd zkFwK<;^=Hb3cXL+cpH2AV6gWO1=vT5+XXp3M?$Ga-gzGxyzC}BQB#XT1O)Eoa|VT* zpgPMykA_d5HMBxbl!tfZe(RenHc_xCW6AqEyL!L%F@kjoy5n9%SJS zE1L7uf!I5u)wT^=L$lQ%&TY^(iw~-cl2|@|J8F=Nh z6!I5*v+4CuTnu)@Hy>#$WNIHl*okx+}}3>yNhyAA)Bza8Ocb zyxR}?7``c;MTe4j4Vk$pD203r-%O-oxG+5q4I@nw9T4)6CV3R!eBwaf9x4b$NY_A4 z8YT!wkS5tP0e?P%G)eyvf^Z&blH>8MM4Dv9NQWR?N2X#V)+C%`)F7P$c@y9JNRtf2 zUA=D?j2`5kF~}ob3>k-$7ceMOcAY2)TaYIC1-?6xCh0#3ZbzErI(!czO>)L$K`28S z>zd#@MG(#)jWtccIwn*gO%iLE;HX4~5?H{5Dx^tb5ffyjN#@}DGtwlV#P>eZ#gPBT z*Sjk`2U&}+327k(j}P!|i*yy_v8fn;q{|^YJcO`9+6uW0UmMan58yRdyJr7<%ItTLcba(~nV#x0E;T5Dwez*W$ zLAnC+Hoj#@XD-AJgKv3P2LcC)nTwzp1!<69;9H3_$*DMIzD_vgqxjY!T?qLmzW0$X zUy7$FnQ(D8^lX_R3|o%KkHBn#+>LKB(pWWwFYzrxx(c$z3Zy%tGmxTVC4vH{{5Ht% z@(}TK;=frCT02o0Bs1io0$5HJARQb%?t~sg_IUzEL#Yk2`%?%y;8w`q_(oGVEo%c5fZ{n z_@*FT3V8zGUg$B&Pw|aKn&jeF!9h9`as$4B=sn4QzlNS6T>)8HidZ36Lk1i|454Et z$aeV3NQXkk&*{t|oNZZ6bH zhP)QyzYT^9&4o983|}-CPy6^?X)gZhBYoFgyxxfLyT1PspKl@L`*%X-gC>S(XA41Y zY5??TfB`yOM#J6~0^&#cw8o)T_Y#hTFzYl)Z&B0BzLXE97L7=$nb;?Kt*OlxKl*CGG02;gnWa8g1;Y|o8Qa@X-2 zieqoyh){g^T|}tw6L4JvhdtoDP2VZZm%f`u6@29VBwmu00l6%Xr(BO}Dm%Qbdbu}t z%;`JsG?^4U5tDMbC~UFS^$}~|B*ZhYl%e(5bYMb)C{#AUyeDIh0W*PH_Xz}6#%A4V z6?1MxJxZmQ>hg9KpQyWWTJw@f5lx=csHpi+}JG+Cp`-!vJ$&u`nyR96vwOocK zvoyI*lX;rV*W^x3?$P9aO&-+bo0=@waud8yJa7P2~X|m2w-k87*KmR-J z6mR_RwEN#_hd}thoOW&gKc?N`mwx%!C*a$l)M*p4`p%!1m9cQiJl6iVkapuIWX1GU zk2)6OfMedQ#fcMBCt6eEC-hAn&tn=%AuT5KN}bRxt`1Si2 z4ZK_wy^rQg;z}=Ez^xOx=p#NB8NAQD&$=&mpKV|AzLb3>`%3qf?JM7hsx{cKA>?Ok zo{c?VJ8(G0J6YWAE1DW-YG*(_9&g|3sMS}zDoUA?kGAj=y982VNT`N%FpJ6lQbjY4 z2j(4)?(QnC6-6^|)?J(`+46Ztcd-M1eF%_OyNgLuA?KOB#ZVp+h0Ja><1-G|FI78v zew5fjf-EIzD&mFRLHsdFjFg_@JSPcy21kqcNyR{`_&G5GW5h*bCbiXOcZBH6_s58Z zlJ#k&37_mnxWL-QQ+hxfq@rz45Al*T=xNf{kw4i}{KDV*w0fQBC9dVO28gZs?p|V{ zSYEGlWN+v!)pV}&ho!T3_aQ@PD=H121G4gmhlpW3y$@^^R`NnBCy5Rmz0gO@5GC^( zZi@v9sTi^;7St1}R{jBHY;*X}V2Cz;_boAKcMs9eXEg@KHjfYNr@)6!iESRYdh-qa z;JQ!Ms)k>h;e9UtLqD;jn9N)BhsdE^*b9^Uiz3WEnleDVAWEhd%II{)wX^V7tsu-- zX7_(PW8ih4_TE~S$IKI3p*3U6mgru7osSHBUxFCq(?7Nv7(FST z%`*q1uaMMNL;GOdbn&Bu#g0<)Y<`J~l4tK80%4uSEt*uA?}KR~Uv`vo9^-{nL=s9~ zxG)6$$=N|c66zD)26y5+lmed>NGIp3_%mvnD)_vMbj@ylFb?T9ZIv|PT^>f-hTBN; zfS35aBna)@EaADWl#aFIIYY$`J~5&AhdV@G!^D>S z#8A=Krv!klArKk{OIs_ox~xUI-0jK{UbrpwX!(l5QF}Jn3}uCU`Y^P9NKI1@Fe#oH zCU*4M4!bv~e)lnSfD=0M;vQlcB`cm$r$CMhEB<&3>8fG{HyApSpRWu8I~>V0{>*T( zO{=J^dD&U8$cE8Xz4KI4-1GB8Nn#K`(Npx}BlE-%o;Fr&i^ve;_}F-uF&hecNxUK& z^K(zU=x1n*x&|&IPB*AQ#{U8@ajWXc4|PIxMp|%2Bk>w5 zVs9$a=lQ4+VwlfaBn2-8_URdp+xkY_l#hXXH30*+g#fkC_%+hOSUgnwf>ot{5dgK? zeUY{{;>igZm~BW~w2I#%9qX<*My=Sb6UZvTumb5V{0}><`3lK_nm+nlEVD14nWb4{ zcoBe|Z?}tPZ%olx?n*?BTqGwdH9AC871#MR3Z1GCBV?4%6F#_o^d$>ha`O@jOaN(K z+_Y8Fw#a4$g-KpQ)I$0Pg zl(S;9;67GtAX*olNS+iOpO2de9aqw0AgY z31INoiB^M+P2XsyLW?6>G0~cg7n_G)@}OlCt>LKjy~nG^VJ}YyztuSpevYCxemB%k z1cR3o?T80$i$Z&E7ig~%4fl4Bs<>eyD4U3K;qNJzcq&mY5#>=d{Wn@F`7xsO znFPaRP= zVDP;}>-7(`TSUtz+C8G(3wW?ECCXSVJOtVeqK%&d+7=I5sY3gXXf`nTL87hu2im;X zLEA$#pA8W0lfd9hh;|)2xqik~D73GLHl1kah<3(E^*PNApVJR1qg>1~}LKA2d5Mn)etFPJa~h=ZSN`gJX^6`NY|Y z;@vYrneIV}jpjJ*>cH=inrXxd^x)W{xorYCb`xAGA3$n&V8m1D{Kr3gR5_;ABVhH;HqCI9+CeGu?xe6U|MN!3jn&&m+!256+fo zzKA%>iF27aW)DtbG(SU}^Tdgrjh`B%q@rjZIt6e9Av@@2Bz~mgXr4`Q4k5Sk6L=ee zt&i=JXnuh>7m1TF2b>ZQPH8mnmI6*M6!T)@O!VNCMe|3AvyC{v6Nehow^bg^tB4~L z$Aqhfz&@AiuWz(VmIA(JE-o;acE{CVG+o#Qc36uGFFc=$vXT(Y_~I4;*Ie}32%gcZ z@JtRB0?L498hK48F*LXo=^S8a33XCa7tdO_1dr0KJb9hi!B|0an@Yqh`1PaP7;I4U z#KB?`|JOWRCSB)OAtWJCxi=O$@0^Zosgq(ypMlf4|m{}`J!Da*2)g?$LFh6 zs6|65x*_sICAi>vCrNC?(-w&qZeAc-q|C+$0HVsAvg($TL?41%;E+ zU9|GMi_oZ@L|guh72Sw^ShV1D0YH1N z;nPz1#)olnnT-hc;dfs`UyUG1f!@4$0Nq>+8$Z#Kk~A!qH_H&))Mba;DBDpiRJ-&8 zpNgDR9z$JTBvz@Y$eS*9qY1ofiP+9p(UurzR$EV;7RgV7BbrEbkfsF_-iB9XijDcQ zr6_2@$1PEH(1=hAdzOgX#3J4qrBbXnFWrLOK%utdy9lf4K}K}rH*>_0-I?fVg<9N+ zCuXX}OEM7-=2mKyjO2f2B8dNl>rgYTlNi{mJ8lE;#BRa7)D`pQtf)d-4M;+pU_+91 zNHCB|J(ZfKXr(6cqJZ}7qoBqZH);p!&)YA=24#1L@A^>}>5JRL)wa>9L(2RO& zv~tC~<%?&btIL;1%^|y$&rPVWL8`vnv=8SDQ0MMgw~+yukv9jZvomKv-R#_nn%?~J zY|PHkEOD@OzcJkjcM$XW#w;32&GGa3`;;{gmvG&>_#R zL|6s#m{kag12o+%h*LVBLt~koZ^~>P;RAgdQcw>N;Y*wH@VT1K=<)|E721u+Ok?)WH4j@^5OeV)Xk()Z{DpJu0=xE zq^vvb+R?N#1P(yJFWX>8| z*8Cc*L{;ial&mT;y@{Ijr-PqG^U{@Kpi~;iPvoG@;&m|UgKPxHd7L6h#aioMasNj! z0M+Oin2H6;KS`rR#(kjOhN|e>ZYTI-oqShAPqrwHvmER=!iIoRzz+B8s;C(iT>C)F$zIOw*F8Wg>`rv8|^U_KuWI@t>E5Ct4sZk8~ zbBGb5fyX#7?4=3r;j!@N9b!vr<%9!TPD2aMBj_p_TJ}BOK1llB%6)RwhP#kNgJW`F zfGtD~B_n?#$E|abRH(sWeDp?)G5w(wnp5Hla`#3|vNP%=OW}7nW0Gn77`}KD_-61; zBgpfiK3$QnQI;V5%gCD$*(eCjgY)ih!iHMWAS$_K6Es=*CwZ8>!}y_GXc~dqW=+#X zq^lZgLIE@_k}4Z2S&$1QIjWLL{Fgi^S&oWUO-T;Y6%Cc3Krtt8Gt8-~*JQUv*H|oD{IF^yM8 z{DZCPxaaf#VqcVswJMM{CkEG>i<_`rzPbgMFy$KcDc));s1+I&QlXku>c>t{O*kH> zwf0rs*99t$GL_yz=D4sKw^gZkwt||bQOo%w`Jh&5R7g-4@u&ifVx-FNkq>^U#=pSd zDFDAbQB@7;yA7&)snk`dCJCXc71y}ec0`huFWZP3)=@lZJGy35na8(*nXEB?W(9mc-nKg zAiYMMRrm=k`a6!&Q1j=(N#pqWnTQ8Gh$&jDg+#ne#O3%2eBFbXrV=p-qlyrEHN-mO z!CIiP^7#A2T7r%RR(h~9HP#kB;t8;B6YGWtD_b)SZ_+g9pFe@0MfeG<@gU}C>I(U= zJy0hT>-T?T?c^tkmA(fopB4`~cZ;U0h!1%Ztn0)w{Uhrs{x4$9eiFuA+=oFd)T$Tr z0Z*Zz3I%}?9@UF9)&YKuSTmmjE6Rgatg%XX->1R4M66g3R*A+s$loB=w5P!u>cJ}2 zSf#w@Ua%^OHS!->NBALPP2P)ceT-0*%CzcbJo*_Fd`bmLh*POtD|nl~LIvZWf!^63 zde3RBa^AHVtO{afc(5uo)*1dHvBngGmF2;z)L7?u?yF#(C)PR-R+Yv&&pYh{>-kq< z@QE>^e`9S9$y)iRyyJe9pTpP%?)1=7$ExJ}h?TG(tUVsA8co+F9`-C)XNa}mgLO}1 zRq>~ZHS}4q4tlVJ(aHjWTi`Yaz$z!!n;tA*jV1FZh&32P6j=U`tlPZRb6~wqtg{|0 zlcK9P-$k7M7}LNC4^FVw-p{!JtCtg-I#$BESkD@x#X4_2hgYH>fvJ@vHb zIK})~)C;`hQN^lOk%X3fD=zOM1Y9g?7jtUWKKJVDXqR_A8}X<&!L7u(h03jazLSHS zDy_B_47Sng^PRL8@$7W{Sln6XzkmY*EX~b=dN-hJs^c2bm174mK|pSBbG z)uOksU)8*b-J?p~g~a*1-%Hpjb0#UZ{B!XBJnn)7FI?m{qZ>rUe&uA~_Dk5FcPbkY z9v@zP1-Igvt8i^+HLF|idcOW;{68_Au&j8pYT07NvU%B=ie=rWsFtBL;2>43e zK+8_-!YRD`kk|_sb}{JGhKAswj^qlmbLh{3Oec*%ok z)rh6Er2BxwchgS~7$L=KWj&}YkKn+=Q1YsW5}QUmf^CIM;P4&v6NPpqyH?hR%5n%c z9f6Xq9!iomVj1>1{udFq5pkUdF-0TxC*nGAc#}6koa;eM(}-`=_WU~$w}RLrsh+6K z=%&2;n>fi!amP~KT0sXe`n4i+Dj#!HT*$AyDTb4}X8gA!Vw1+2qBg$j(x9>y@zNJ? z{xvUIY$Im#uaAly{ioNhdSX+4cdgi3?8?K-utq%51FOPRb5t(kRXrXY#!#Z~^`pZ~P9H%NiB-ubElb$p!q% zDRCBFaQGL>Bhpe;+(*b*xEQwM@66l?`RWE#XQrzCN#$M2q4`<9tDJ6f6ci1n^2>lF z-zN0pN(bKL1netS?R$;CaT1N>q&?WkmU?9A{2m!-s4z_#fB!nJmzbd%dW;vGLLYyH zAvG#Tg8cjxERlKKX)!F=rzh&;L#HShL3{#%Bx`SG;B79%>}+~R&DtG-XFMaekxs3_UF*qey~ODI+hB2#!=UC%TGb8BDp|pI9$VDUuejAAZf;iwSET@ ztE<(aSG`kJJ#j!BW=u-Ts?cFTTXfaF1yc8#fXZpvTM*P|t#!>m1jMA%vl58S0Oe@LNJ8qgxf#i;)(Azo2d?kyci_;c-soQmar-QF+LG04 z04OhPxIJX(gExM3%{K?Kz}wNV`4~V|y55fhQm8{V05RbYbkJSRXM2DQM6P~--XxBx z;c!#}xuU)>0O2`I;14Z)a^ItzzpZpTt1ez8~sy&Lv*A`qJ{^qfHI-q}z``Z$ncU9C@m z)C9mo@V{pDH-PLq$I{=-+H}`dJ`WHz#$@ylh&6vy*5L z9d*6`45Un*V;l8{(=g1nwRI+j0ihSB>ycPO@SzJ^wXb7G|COsMKvdHSdo}qwioFAa>o* zbp=waGqFFAWL#Z&L4)e?bRZQv%_|7eHSZdTK(k?#>ixn&qK`Un7SCHeCvy!Zscz`@ zgQH(pJr~H2!J&8B>J7RA#D>7BU!leh!bC6DS+sHxTn$ovu2{5WBATZ3m;4 z+e3?IWn?U!gXVQcXM#fypz3G#Ye1ynXzu%w80z=|nIc^?mLWiN6|6vfb>8X^BwNSX z07RJDFfz6RDR$RNowWiF46}qx#kjh`;tr59-94ZII1OZryBZ<%2l9cC^@DW-2z~0k z^)nE=Zqx&87%ZLUBp~HFqZiv8Smboowt!Tn?c{1ey$qyG$2kT>Kk+{S60GA~2U4z! zgL^=Zpklqz&EpUUR$X7)#nrzKsx}`3BpKD}!zTfVS?B5rKyq}0=mJuz>+4rQ$msgO z{27SjZJk9;hhh@yrc)@8d%79lojAsZie>>x)6Mv0K$3MxE|6^9aJ&vA)}eFSM}SIo zeZ2~#P}j4dVVF+3AnF1{**&zHg3up`^6r~pR{Vw+B&e3V_p@d%MJPgZ(&UB{V+}}! zx}H4?M0t1Ct@>>s*}5wb`nUP?eZ4e{ud2Wr8!#M$sWW~W5c;TF2L7ZcYiR~{=g|$V zSPD*#Zs@iGNzo1XGe9z-N7BBy9t9GN4%SbSI}Sj~+l+26G>eBpI^%l+q1RTu+=_+* zDW|>Ijf@9UVrZy34TydMtO8=yYLHQauq_^Qt6W#@d64QC>p9wTRjdqV-9Q}$hh7=0 zZ~i3JvNS~g10+*7ZK{A285)}S-+0Wex@WMeMP3OAQ(bTe16iO`6b_{BUPBV_PGT<0>5|xvGNNlq~Tk? zOnZ+&5bOFB0whzc8};-R^X5GaODc87bppq%Yj+?J{fagc$QGZ5w#{?^iiEOybF+ce z-Hd1>3dE)}{uv;}FsKn~;sQN2dm-Jh&>vmY58un+)V&w0>NyTXc}dhAm%etyN-sr; z+B@{Yj;~IU6^KyV{DYIHu!2jZ*i>kB~4XiGI32?5dLcp!WZgH-A!(ILYu zOjKXpL_Gmcp_@aBJ_BOX8T}oQ99_)a1EODIJ0)TrHo0d!R)r;V7H0}(U1R-03dSzz zi)K_eP5=_A>)8Sz`jK7@q*S+}aUeP9x~eB*>HHWgG|CQL5FG$1Sy$~}K+J9vsjuQl z1gtL5f`Hu9A!$I&y5YzLV$&f9iDSa}*N4nU1nGKq9f+Va=vN@gy2kuRp=UZy7?5P0 z(N-Y7y5>g$DQtxCuXpSeKxu9lQD5f*snP{nE|3!UN}7&8&72F~Ih_}O0Efn^{{BEh zd5O;GBp_CF)luJk1|a2)Z1?owLokJOR^$K2C8W5UClhx8Db@wrOF-=S)~_gK$XRt0 z_yQ1tx(ffp)byp9^Ohh*#QJJqBUksTza-$&m|i9l1YLMGMb3(qfI?FZ&u}0mIxqGD zQuiXg${7X(?tq8Tz6$BD6VkKhWn_R*r86i6)$0DJK&|yCkV0L=>;^)gdcVE~BvKa* zw}Dtyzp6Lhn7w0g3W1SUtEJD$Sh`{!rjV}r0pOT*qnHRJMW;F&hzSP4C0fV!6QUcS zqd>|vqy3fTGlP~-JFl)3!yIQ&nym9^udzUMotzBB7S(X9<^oC6)%pxbsoPpCF0{4? zCUm`ige}Rq6w?JpPX{2u(r{MB0ZEH)SZyhgN_Si;%l|C6Mpw&89C!0HBL4=GqI2kF zLUbLwnT&wYFJ=DYFnn$s(byb1kI=8SW^j^qG1mo1iB5GK5Y%fhE2mK{ozWTNgpSI3 zR6ljsf|RCn^|o=m(6=O>KeUFO`zHOX#9mZx>`QtF;J$49;bh>-K^_Q zIFMrKp{Q3QKbHQTtQuWoBY_0FJq4yP6Npte2%CXWeAXMpf#^N{CXfX>&WAu!+#H4z zpfh?akowqF5A-nab$)#coO7sHKf*ZSbTl~PM450BB)hJ$kAP5>dVf>{p-(*`;x1Cq zg|lIXWAcfF!%;7d7%2kZhenj{^zT^`8EZ8dbVl=YZ(1 z->v|u(M468DTp(NuG&~Yk-Ekn0#dH4wgyP1F3`4+B6nZ0!DP@iM6hmy*$0lz-FxcT z5g^6-%f8cqigf;DW;9Eg*KC7wHNsSm(uoKq_E-edtXFl8stj>(}36KnrxPJ_1Dj zm<0)MBFDvuL5>dq=IH$YB@q4gRZWOa75(pvVs$n(0aD|(dzE&lYt@Zf1URL-Q0oy7 zD8&uox_2H~SfLxW1K`yCF(-8yTRsqS04#tLs-_+Fxh7VI9G&~8xWM=5HG}krc=Tak zX& mono, int src_rate, int dst_rate); std::size_t read(std::vector>& out, std::size_t max_samples); void close(); @@ -32,6 +30,8 @@ public: bool is_open() const { return fp_ != nullptr; } private: + bool parse_wav_header(); + void resample_if_needed(std::vector& mono, int src_rate, int dst_rate); std::string path_; int target_sample_rate_; std::FILE* fp_; diff --git a/src/drone-software/src/acoustic/src/core/gunshot_classifier.cpp b/src/drone-software/src/acoustic/src/core/gunshot_classifier.cpp index 8f6d33f..814c34b 100644 --- a/src/drone-software/src/acoustic/src/core/gunshot_classifier.cpp +++ b/src/drone-software/src/acoustic/src/core/gunshot_classifier.cpp @@ -33,32 +33,67 @@ struct GunshotClassifier::Impl { bool LoadLabelMap(const std::string& path) { std::ifstream f(path); if (!f) return false; - std::string line; + std::string content((std::istreambuf_iterator(f)), + std::istreambuf_iterator()); labels.clear(); - while (std::getline(f, line)) { - // Parse "index: label" format - size_t pos = line.find(':'); - if (pos == std::string::npos) continue; - int idx = 0; - try { - idx = std::stoi(line.substr(0, pos)); - } catch (...) { - continue; - } - std::string label = line.substr(pos + 1); - // trim whitespace - size_t start = label.find_first_not_of(" \t\r\n"); - size_t end = label.find_last_not_of(" \t\r\n"); - if (start != std::string::npos && end != std::string::npos) { - label = label.substr(start, end - start + 1); - } else { - label.clear(); + + // Try simple JSON object format: {"0": "ambient", "1": "threat"} + if (content.find('{') != std::string::npos) { + size_t pos = 0; + while ((pos = content.find('"', pos)) != std::string::npos) { + size_t key_start = pos + 1; + size_t key_end = content.find('"', key_start); + if (key_end == std::string::npos) break; + std::string key = content.substr(key_start, key_end - key_start); + int idx = -1; + try { idx = std::stoi(key); } catch (...) {} + + size_t colon = content.find(':', key_end); + if (colon == std::string::npos) break; + size_t val_quote = content.find('"', colon); + if (val_quote == std::string::npos) break; + size_t val_end = content.find('"', val_quote + 1); + if (val_end == std::string::npos) break; + std::string label = content.substr(val_quote + 1, val_end - val_quote - 1); + + if (idx >= 0) { + if (idx >= static_cast(labels.size())) labels.resize(idx + 1); + labels[idx] = label; + } + pos = val_end + 1; } - if (idx >= static_cast(labels.size())) { - labels.resize(idx + 1); + } else { + // Fallback: "index: label" line format + size_t line_start = 0; + while (line_start < content.size()) { + size_t line_end = content.find('\n', line_start); + if (line_end == std::string::npos) line_end = content.size(); + std::string line = content.substr(line_start, line_end - line_start); + line_start = line_end + 1; + + std::size_t pos = line.find(':'); + if (pos == std::string::npos) continue; + int idx = 0; + try { + idx = std::stoi(line.substr(0, pos)); + } catch (...) { + continue; + } + std::string label = line.substr(pos + 1); + std::size_t start = label.find_first_not_of(" \t\r\n"); + std::size_t end = label.find_last_not_of(" \t\r\n"); + if (start != std::string::npos && end != std::string::npos) { + label = label.substr(start, end - start + 1); + } else { + label.clear(); + } + if (idx >= static_cast(labels.size())) { + labels.resize(idx + 1); + } + labels[idx] = label; } - labels[idx] = label; } + // Remove empty entries and compact std::vector cleaned; for (const auto& l : labels) {