IDE Profiling

Hello,

Does anyone use the IDE for profiling?

I have found it to be a terribly difficult tool to use.

The whole IDE has some grave flaws, in my opinion.

Robert.

Robert Muil <r.muil@crcmining.com.au> wrote:

Hello,

Does anyone use the IDE for profiling?

I’ve not hugely used it – though I have taught the use of it.

I have found it to be a terribly difficult tool to use.

With 6.3.0, there is an off-by-one error for attributing business
to lines of code in the profiling editor, other than that I have
found it reasonable for handling C code. (Not so good on C++,
though.)

Can you describe the difficulties you’ve run into?

-David

David Gibbs
QNX Training Services
dagibbs@qnx.com

David,

I am unable to determine how long a program spends, cumulatively, in a
function.

It does not help me to know that 5% of my time was in ldiv() or .plt()
(whatever they are). I want to know that 100% was in main(), then 90% of
that was in do_loop(), etc.

Also, it does not seem to correctly read the symbol table. I have a very
simple program to test, which just loops and does a few printfs. When I
profile it, the calling information only displays call information for the
source I compiled. For example, it does not tell me that do_loop() called
printf().

The sampling information is all over the place. If I reduce the iterations
in do_loop(), the sampling information doesn’t even mention printf(). It
never mentions usleep(). With a higher number of iterations (like 99999), I
get a couple of little coloured bars in the text editor, but they don’t
correspond to where the program would have run. I only see 1 green and 1
blue bar - no breakdown at all. With 999 iterations, I don’t get any
coloured bars.

I have attached a screenshot of the editor after a profile. This is about as
much useful information as I can get out of it.

There is no way to look at the profiling data statistically. No logs, or
textual data, such as the actual numbers that the %Time Usage bars are drawn
from. For CPU usage, all I can get are little coloured bars, and then only
if I am perseverent and lucky.

This is not a tool worthy of the advertising hype that populates the help
documentation. If the documents spent as much time telling me how to use
their brilliant, time-saving, modular, single, consistent, integrated
environment as they spent placing adjectives in front of their products, I
may have less to complain about. Unfortunately it seems the deficiencies are
in the product also - not only the documentation. This is especially true of
the profiling and update/installation perspectives.

Just try to save a source file to My Documents quickly - or open an external
c file in an existing editor.

David - I mean no disrespect to you. I am grateful that you have responded
to me, and appreciate that you are regularly very helpful on the newgroups.
My frustration with the IDE, however, needed an out.

Robert.

“David Gibbs” <dagibbs@qnx.com> wrote in message
news:cnidar$30l$1@inn.qnx.com

Robert Muil <> r.muil@crcmining.com.au> > wrote:
Hello,

Does anyone use the IDE for profiling?

I’ve not hugely used it – though I have taught the use of it.

I have found it to be a terribly difficult tool to use.

With 6.3.0, there is an off-by-one error for attributing business
to lines of code in the profiling editor, other than that I have
found it reasonable for handling C code. (Not so good on C++,
though.)

Can you describe the difficulties you’ve run into?

-David

David Gibbs
QNX Training Services
dagibbs@qnx.com

begin 666 idetest.JPG
M_]C_X 02D9)1@!0$8 !@#_VP!#@&!@<&!0@’!P<)“0@#!0-# L+
M#!D2$P\4’1H?‘AT:’!P@)“XG(”(L(QP<
#<I+# Q-#0T’R<Y/3@R/“XS-#+_
MVP!#0D)"0P+#!@-#1@R(1PA,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R M,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C+_P 1” 'YC(#2(A$!`Q$!_\0` M'P```04!`0$!`0$```````````$"`P0%!@<("0H+_\0`M1 @$#P($P4%
M! 0```%]0(#``01!1(A,4$&$U%A!R)Q%#*!D:$((T*QP152T? D,V)R@@D* M%A<8&1HE)B<H*2HT-38W.#DZ0T1%1D=(24I35%565UA96F-D969G:&EJ<W1U M=G=X>7J#A(6&AXB)BI*3E)66EYB9FJ*CI*6FIZBIJK*SM+6VM[BYNL+#Q,7& MQ\C)RM+3U-76U]C9VN'BX^3EYN?HZ>KQ\O/T]?;W^/GZ_\0'P$P$!`0$! M`0$!`0````````$"`P0%!@<("0H+_\0`M1$@$”! 0#! <%! 00)W$"
MQ$$!2$Q!A)!40=A<1,B,H$(%$*1H;'!"2,S4O 58G+1"A8D-.$E\1<8&1HF M)R@I*<C4V-S@Y.D>-$149'2$E*4U155E=865IC9&5F9VAI:G-T=79W>'EZ@H.$ MA8:'B(F*DI.4E9:7F)F:HJ.DI::GJ*FJLK.TM;:WN+FZPL/$Q<;'R,G*TM/4 MU=;7V-G:XN/DY>;GZ.GJ\O/T]?;W^/GZ_]H# ,!(1`Q$`/P#T-Y)9YY42 MUMY%A;;NED(.2H/3:?6D\J?_`)\++_OZ?_B*DM?^/B]_Z[#_`-%I4L]PD"KN M#,SMM15&2QP3C]#R>*S**WE3_P#/A9?]_3_\11Y4_P#SX67_`']/_P`13H;F M5[[85_<2H7C+`JPVD @@@8'/'X^HQB:OXPM[#0M0NH?WMY;QW)CCB@EF13&S MHID*J-BEHR,M@?*V&(7=0!L^5/\`\^%E_P!_3_\`$4>5/_SX67_?T_\`Q%4- M3\5Z?86FH2(7FFM()I%4QND<SQJS-&LI786&UL@$D;6R/E.)G\3:7$D32R7, M8==[;[.93"F2-\H*_NERK89]H(4G. 30!9\J?_GPLO\`OZ?_`(BCRI_^?"R_ M[^G_`.(JAJ7BJRL8YFBCN;DPSQ12&.WE*?-,D3;7"%792Y^126RI& 0<:<NH M6T&GB^F9XX"JL-\;!SNQM781NW$D`+C<20,9XH C\J?_`)\++_OZ?_B*/*G_ M`.?"R_[^G_XBK%I=1WMJEQ$LRH^<":%XGX..5<!AT[BIJ */E3_\^%E_W]/_ M`,13)1)#$\LEC9!$4LQ\P\ =?X*T:JZG_P`@J\_ZX/\`^@F@#F[CQGX>LKJ: MTN[G3X+J!VCFA9)V,;J<,I*PD'!!&02/0FHQXZ\+GI?Z;_W[N/\`XQ7 PV=O MJ/QNNK.[B66WFUJ=)$89!!D:O0M9\*^%-9672] T4V]RLLD?VS8ZQ$QJ2RA\ M-R#M[ '!&>:]">'I0W3>ES!5)/L-'C?PR?\`E^TW_OW<?_&*</&OAL_\OVF_ M]^[C_P",5Y!9:5/>R7L5O'--);J"JQ(&+DRI&!C.>2XZ!CG QC)&Q)X3NH], MLY4:WDN)IIUD9+V%X(XT6'!:0-M0EI"/F;NHQDC.WU.AW9G[:?8]('C+PX?^ M7W3?^^+C_P",4X>+_#Q_Y?--_P"^+C_XQ7FC^%[^+3([K"-,UTUM]F$B%W.V M(H8QNS*&\T8V`C&#G!% \/:D)DC"6[*REO.2ZB:%0" =TH;8I!91@D'YE_O# M*^IT>_XA[:?8],'BW0#_`,O>F_\`?$__`,8IP\5:"?\`EZTW_OF?_P",5YO? MZ)+IUA97;3V[K<*V52:-F5EDD3@!B67]WG>!MYQFF+IMR-/^W,(D@/W=\R*[ MC.W*H3N89R,@$<'T.#ZE1[L/;S['IH\3Z&?^7G3?^^9__C-*/$FBG_EYTW_O MF?\`^,UP^G:-;W$-K]IGEADN$GN 40/M@B1R3C(W%F1E`R,;"3G<,/FT&<6O MVZR+3V'E"4S2!8R@+.OS#<0"6B<#!.?E'5@*7U2C>UV'MI]CMQXBT8_\O&F_ ME/\`_&:4:_I!Z3Z;^4W_`,9KD;#PY=27L<=TJI'M=G"SQY0HC/L<Y/E,=A'S M@8P3@[2*G.@EK)YX$D\QID6)#*_P#/ M1/\`OH4>='_ST3_OH5E44<P<QJ^='_ST3_OH4>='_P`]$_[Z%95%',',:OG1 M_P#/1/\`OH4>='_ST3_OH5E44<P<QJ^='_ST3_OH4>='_P`]$_[Z%95%',', M:OG1_P#/1/\`OH4>='_ST3_OH5E44<P<QJ^='_ST3_OH4>='_P`]$_[Z%95% M',',:OG1_P#/1/\`OH4>='_ST3_OH5E44<P<QJ^='_ST3_OH4>='_P`]$_[Z M%95%',',:OG1_P#/1/\`OH4>='_ST3_OH5E44<P<QJ^='_ST3_OH4>='_P`] M$_[Z%95%',',:OG1_P#/1/\`OH4>='_ST3_OH5E44<P<PO7WS^.?Y^OOU[Y^ M<Z^^?QS_`#]??KWS\YU]\_CG^?K[]>^?G.OOG\<_S]??KWS\X68]9NO_`/(% MG^J?^A"M*LW7_P#D"S_5/_0A4K<9=MO^/6'_`'%_E11;?\>L/^XO\J*!D5K_ M`,?%[_UV'_HM*-3_`.05>?\`7!__`$$T6O\`Q\7O_78?^BTHU/\`Y!5Y_P!< M'_\`030([FBBBM"0HHHH`**** "BBB@`HHHH`*S]=_Y%[4_^O27_`- -:%9^ MN_\`(O:G_P!>DO\`Z : ,K5=#EU_2]0T]+M+:&ZDD@N2T)=FA92K!#N 5\'A MB& _NFMG[!_TT_\`':+#_EZ_Z^'_`*5<I6!HI_8/^FG_`([1]@_Z:?\`CM7* M*+(5D4_L'_33_P`=H^P?]-/_`!VKE%%D%D4_L'_33_QVC[!_TT_\=JY119!9 M%/[!_P!-/_':/L'_`$T_\=JY119!9%/[!_TT_P#':/L'_33_`,=JY119!9%/ M[!_TT_\`':/L'_33_P`=JY119!9%/[!_TT_\=H^P?]-/_':N4460613^P?\` M33_QVC[!_P!-/_':N4460613^P?]-/\`QVC[!_TT_P#':N4460613^P?]-/_ M`!VC[!_TT_\`':N4460613^P?]-/_':/L'_33_QVKE%%D%D4_L'_`$T_\=H^ MP?\`33_QVKE%%D%D4_L'_33_`,=H^P?]-/\`QVKE%%D%D4_L'_33_P`=H^P? M]-/_`!VKE%%D%D4_L'_33_QVC[!_TT_\=JY119!9%/[!_P!-/_':/L'_`$T_ M\=JY119!9%/[!_TT_P#':/L'_33_`,=JY119!9%/[!_TT_\`':/L'_33_P`= MJY119!9%/[!_TT_\=H^P?]-/_':N4460613^P?\`33_QVC[!_P!-/_':N446 M0613^P?]-/\`QVC[!_TT_P#':N4460613^P?]-/_`!VC[!_TT_\`':N44606 M13^P?]-/_':/L'_33_QVKE%%D%D4_L'_`$T_\=H^P?\`33_QVKE%%D%D4_L' M_33_`,=H^P?]-/\`QVKE%%D%D9'7WS^.?Y^OOU[Y^<Z^^?QS_/U]^O?/SG7W MS^.?Y^OOU[Y^<Z^^?QS_`#]??KWS\Z*,>LW7_P#D"S_5/_0A6E6;K_\`R!9_ MJG_H0J5N,NVW_'K#_N+_`"HHMO\`CUA_W%_E10,BM?\`CXO?^NP_]%I1J?\` MR"KS_K@__H)HM?\`CXO?^NP_]%I1J?\`R"KS_K@__H)H$=S1116A(4444 %% M%% !1110`4444 %9^N_\B]J?_7I+_P"@&M"L_7?^1>U/_KTE_P#0#0!)8?\` M+U_U\/\`TJY5.P_Y>O\`KX?^E7*2`****8!1110`4444`%%%% !1110`4444 M`%%%% !1110`4444`%%%% !1110`4444`%%%% !1110`4444`%%%% !1110` M4444`%%%% !1110`4444`%%%% !1110`4444`%%%% &1U]\_CG^?K[]>^?G. MOOG\<_S]??KWS\YU]\_CG^?K[]>^?G.OOG\<_P`_7WZ]\_/(S'K-U_\`Y L_ MU3_T(5I5FZ__`,@6?ZI_Z$*E;C+MM_QZP_[B_P`J*+;_`(]8?]Q?Y44#(K7_ M`(^+W_KL/_1:4:G_`,@J\_ZX/_Z":+7_`(^+W_KL/_1:4:G_`,@J\_ZX/_Z" M:!'<T445H2%%%% !1110`4444 %%%% !6?KO_(O:G_UZ2_\`H!K0K/UW_D7M M3_Z])?\`T T`26'_`"]?]?#_`-*N53L/^7K_`*^'_I5RD@"BBBF 4444`%%% M% !1110`4444`%%%% !1110`4444`%%%% !1110`4444`%%%% !1110`4444 M`%%%% !1110`4444`%%%% !1110`4444`%%%% !1110`4444`%%%% !1110! MD=??/XY_GZ^_7OGYSK[Y_'/\_7WZ]\_.=??/XY_GZ^_7OGYSK[Y_'/\`/U]^ MO?/SR,QZS=?_`.0+/]4_]"%:59NO_P#(%G^J?^A"I6XR[;?\>L/^XO\`*BBV M_P"/6'_<7^5%`R*U_P"/B]_Z[#_T6E&I_P#(*O/^N#_^@FBU_P"/B]_Z[#_T M6E&I_P#(*O/^N#_^@F@1W-%%%:$A1110`4444 %%%% !1110`5GZ[_R+VI_] M>DO_`* :T*S]=_Y%[4_^O27_`- -`$EA_P`O7_7P_P#2KE4[#_EZ_P"OA_Z5 M<I(`HHHI@%%%% !1110`4444`%%%% !1110`4444`%%%% !1110`4444`%%% M% !1110`4444`%%%% !1110`4444`%%%% !1110`4444`%%%% !1110`4444 M`%%%% !1110`4444`9'7WS^.?Y^OOU[Y^<Z^^?QS_/U]^O?/SG7WS^.?Y^OO MU[Y^<Z^^?QS_`#]??KWS\\C,>LW7_P#D"S_5/_0A6E6;K_\`R!9_JG_H0J5N M,NVW_'K#_N+_`"HHMO\`CUA_W%_E10,BM?\`CXO?^NP_]%I1J?\`R"KS_K@_ M_H)HM?\`CXO?^NP_]%I1J?\`R"KS_K@__H)H$=S1116A(4444 %%%% !1110 M`4444 %9^N_\B]J?_7I+_P"@&M"L_7?^1>U/_KTE_P#0#0!)8?\`+U_U\/\` MTJY5.P_Y>O\`KX?^E7*2`****8!1110`4444`%%%% !1110`4444`%%%% !1 M110`4444`%%%% !1110`4444`%%%% !1110`4444`%%%% !1110`4444`%%% M% !1110`4444`%%%% !1110`4444`%%%% &1U]\_CG^?K[]>^?G.OOG\<_S] M??KWS\YU]\_CG^?K[]>^?G.OOG\<_P`_7WZ]\_/(S'K-U_\`Y L_U3_T(5I5 MFZ__`,@6?ZI_Z$*E;C+MM_QZP_[B_P`J*+;_`(]8?]Q?Y44#(K7_`(^+W_KL M/_1:4:G_`,@J\_ZX/_Z":+7_`(^+W_KL/_1:4:G_`,@J\_ZX/_Z":!'<T445 MH2%%%% !1110`4444 %%%% !6?KO_(O:G_UZ2_\`H!K0K/UW_D7M3_Z])?\` MT T`26'_`"]?]?#_`-*N53L/^7K_`*^'_I5RD@"BBBF 4444`%%%% !1110` M4444`%%%% !1110`4444`%%%% !1110`4444`%%%% !1110`4444`%%%% !1 M110`4444`%%%% !1110`4444`%%%% !1110`4444`%%%% !1110!D=??/XY_ MGZ^_7OGYSK[Y_'/\_7WZ]\_.=??/XY_GZ^_7OGYSK[Y_'/\`/U]^O?/SR,QZ MS=?_`.0+/]4_]"%:59NO_P#(%G^J?^A"I6XR[;?\>L/^XO\`*BBV_P"/6'_< M7^5%`R*U_P"/B]_Z[#_T6E&I_P#(*O/^N#_^@FBU_P"/B]_Z[#_T6E&I_P#( M*O/^N#_^@F@1W-%%%:$A1110`4444 %%%% !1110`5GZ[_R+VI_]>DO_`* : MT*S]=_Y%[4_^O27_`- -`$EA_P`O7_7P_P#2KE4[#_EZ_P"OA_Z5<I(`HHHI M@%%%% !1110`4444`%%%% !1110`4444`%%%% !1110`4444`%%%% !1110` M4444`%%%% !1110`4444`%%%% !1110`4444`%%%% !1110`4444`%%%% !1 M110`4444`9'7WS^.?Y^OOU[Y^<Z^^?QS_/U]^O?/SG7WS^.?Y^OOU[Y^<Z^^ M?QS_`#]??KWS\\C,>LW7_P#D"S_5/_0A6E6;K_\`R!9_JG_H0J5N,NVW_'K# M_N+_`"HHMO\`CUA_W%_E10,BM?\`CXO?^NP_]%I1J?\`R"KS_K@__H)HM?\` MCXO?^NP_]%I1J?\`R"KS_K@__H)H$=S1116A(4444 %%%% !1110`4444 %9 M^N_\B]J?_7I+_P"@&M"L_7?^1>U/_KTE_P#0#0!)8?\`+U_U\/\`TJY5.P_Y M>O\`KX?^E7*2`****8!1110`4444`%%%% !1110`4444`%%%% !1110`4444 M`%%%% !1110`4444`%%%% !1110`4444`%%%% !1110`4444`%%%% !1110` M4444`%%%% !1110`4444`%%%% &1U]\_CG^?K[]>^?G.OOG\<_S]??KWS\YU M]\_CG^?K[]>^?G.OOG\<_P`_7WZ]\_/(S'K-U_\`Y L_U3_T(5I5FZ__`,@6 M?ZI_Z$*E;C+MM_QZP_[B_P`J*+;_`(]8?]Q?Y44#(K7_`(^+W_KL/_1:4:G_ M`,@J\_ZX/_Z":+7_`(^+W_KL/_1:4:G_`,@J\_ZX/_Z":!'<T445H2%%%% ! M1110`4444 %%%% !6?KO_(O:G_UZ2_\`H!K0K/UW_D7M3_Z])?\`T T`26'_ M`"]?]?#_`-*N53L/^7K_`*^'_I5RD@"BBBF 4444`%%%% !1110`4444`%%% M% !1110`4444`%%%% !1110`4444`%%%% !1110`4444`%%%% !1110`4444 M`%%%% !1110`4444`%%%% !1110`4444`%%%% !1110!C@EU#".4AN<^6W.? MP/J?7OUYWP7MY#I]E->7A>&WB4M)(\;8`_(^OOWZ\[\C6[R:QC$\5KYZ+&F\ M!]I4;1ST.16/XJ%R?!%])=0"WE>'=Y._<R#(QNX&"?3\Z@HWZS=?_P"0+/\` M5/\`T(5I5FZ__P`@6?ZI_P"A"DMP+MM_QZP_[B_RHHMO^/6'_<7^5% R*U_X M^+W_`*[#_P!%I3[Z-YM/N8HQEWB95&>I(.*9:_\`'Q>_]=A_Z+2K5 '1_P!J M6?\`SV_\=/\`A1_:EG_SV_\`'3_A7.44^9BL='_:EG_SV_\`'3_A1_:EG_SV M_P#'3_A7.44<S"QT?]J6?_/;_P`=/^%']J6?_/;_`,=/^%<Y11S,+'1_VI9_ M\]O_`!T_X4?VI9_\]O\`QT_X5SE%',PL='_:EG_SV_\`'3_A1_:EG_SV_P#' M3_A7.44<S"QT?]J6?_/;_P`=/^%4]6O;>YT:^MX9-TLMO(B+M(R2I '-9%%' M,PL;MA=1?Z1@NV9F8;48\'IT%7/M,?\`=E_[]-_A7.+_`,><O_71/Y-65IEY M->W&HB:-H1;O&B1G&1D.23]<#V_G33%8[&VU:QNWN$@GWM;RF&4!&^5P`2O3 MDX8=.Y Z\5/]JA_OY^@)_P`]OS'J*XGP>.==XZZK)VZ_NX_;W]^OOANEZ^^? MQS_/U]^O?/SNX6-'[5#_`'\_0$_Y[?F/44?:H?[^?H"?\]OS'J*SNOOG\<_S M]??KWS\YU]\_CG^?K[]>^?G+A8T?M4/]_/T!/^>WYCU%'VJ'^_GZ`G_/;\QZ MBL[K[Y_'/\_7WZ]\_.=??/XY_GZ^_7OGYRX6-'[5#_?S] 3_`)[?F/44?:H? M[^?H"?\`/;\QZBL[K[Y_'/\`/U]^O?/SG7WS^.?Y^OOU[Y^<N%C1^U0_W\_0 M$_Y[?F/44?:H?[^?H"?\]OS'J*SNOOG\<_S]??KWS\YU]\_CG^?K[]>^?G+A M8T?M4/\`?S] 3_GM^8]11]JA_OY^@)_SV_,>HK.Z^^?QS_/U]^O?/SG7WS^. M?Y^OOU[Y^<N%C1^U0_W\_0$_Y[?F/44?:H?[^?H"?\]OS'J*SNOOG\<_S]?? MKWS\YU]\_CG^?K[]>^?G+A8T?M4/]_/T!/\`GM^8]11]JA_OY^@)_P`]OS'J M*SNOOG\<_P`_7WZ]\_.=??/XY_GZ^_7OGYRX6-'[5#_?S] 3_GM^8]11]JA_ MOY^@)_SV_,>HK.Z^^?QS_/U]^O?/SG7WS^.?Y^OOU[Y^<N%C1^U0_P!_/T!/ M^>WYCU%'VJ'^_GZ G_/;\QZBL[K[Y_'/\_7WZ]\_.=??/XY_GZ^_7OGYRX6- M'[5#_?S]`3_GM^8]11]JA_OY^@)_SV_,>HK.Z^^?QS_/U]^O?/SG7WS^.?Y^ MOOU[Y^<N%C1^U0_W\_0$_P">WYCU%'VJ'^_GZ G_`#V_,>HK.Z^^?QS_`#]? M?KWS\YU]\_CG^?K[]>^?G+A8T?M4/]_/T!/^>WYCU%'VJ'^_GZ G_/;\QZBL M[K[Y_'/\_7WZ]\_.=??/XY_GZ^_7OGYRX6-'[5#_`'\_0$_Y[?F/44?:H?[^ M?H"?\]OS'J*SNOOG\<_S]??KWS\YU]\_CG^?K[]>^?G+A8T?M4/]_/T!/^>W MYCU%'VJ'^_GZ`G_/;\QZBL[K[Y_'/\_7WZ]\_.=??/XY_GZ^_7OGYRX6-'[5 M#_?S] 3_`)[?F/44?:H?[^?H"?\`/;\QZBL[K[Y_'/\`/U]^O?/SG7WS^.?Y M^OOU[Y^<N%C1^U0_W\_0$_Y[?F/44?:H?[^?H"?\]OS'J*SNOOG\<_S]??KW MS\YU]\_CG^?K[]>^?G+A8T?M4/\`?S] 3_GM^8]11]JA_OY^@)_SV_,>HK.Z M^^?QS_/U]^O?/SG7WS^.?Y^OOU[Y^<N%C1^U0_W\_0$_Y[?F/44?:H?[^?H" M?\]OS'J*SNOOG\<_S]??KWS\YU]\_CG^?K[]>^?G+A8T?M4/]_/T!/\`GM^8 M]11]JA_OY^@)_P`]OS'J*SNOOG\<_P`_7WZ]\_.=??/XY_GZ^_7OGYRX6-'[ M5#_?S] 3_GM^8]11]JA_OY^@)_SV_,>HK.Z^^?QS_/U]^O?/SG7WS^.?Y^OO MU[Y^<N%C1^U0_P!_/T!/^>WYCU%'VJ'^_GZ G_/;\QZBL[K[Y_'/\_7WZ]\_ M.=??/XY_GZ^_7OGYRX6-'[5#_?S]`3_GM^8]11]JA_OY^@)_SV_,>HK.Z^^? MQS_/U]^O?/SG7WS^.?Y^OOU[Y^<N%C1^U0_W\_0$_P">WYCU%'VJ'^_GZ G_ M`#V_,>HK.Z^^?QS_`#]??KWS\YU]\_CG^?K[]>^?G+A8T!=Q,H91*0>01$W/ MZ5#>ZM9Z=937EY(\-O"I:21HGP!^5<KXANI;*QDN(2-Z)$1D9!^Z"*R?%OG' MP5?// T$CVX8Q.1N7)'!]/QY]A2N%B:?6M8DE)3PU<;0`H)NX02 `,_>]JS= M<GUW6-'N[(>'YT>="-[741P>O/S5U5%3<85FZ_\`\@6?ZI_Z$*TJS=?_`.0+ M/]4_]"%"W NVW_'K#_N+_*BBV_X]8?\`<7^5% R@=1M;"\NTN9&C9Y Z_(QR M-BC/`]0?RIW]OZ;_`,_!_P"_3_X4FL?\L?\`@7]*RZ=A&K_;^F_\_!_[]/\` MX4?V_IO_`#\'_OT_^%95%%@-7^W]-_Y^#_WZ?_"C^W]-_P"?@_\`?I_\*RJ* M+ :O]OZ;_P`_!_[]/_A1_;^F_P#/P?\`OT_^%95%%@-7^W]-_P"?@_\`?I_\ M*/[?TW_GX/\`WZ?_KHHL!J_V_IO`S’+]/_A1_;^F_\_!_[]/_(5E
M446 U?[?TW_GX/`WZ?
H_M_3?^?@_]^G_`,*RJ*+ 6+_QA':#R+2PGO5? M#M(K! N,C'S<D\_Y[4!XUG&[&@SC=C<?.CR<9QS^)_.IZ*=D!/X3URTM;?4I M+_=:R75\TZQLI<A2B#DJ".H;]>.S=!_PE.C'_E[//K"__P`2?4^O?KSOYBB@ M1T__E.C’E[//K"`\2?4^O?KSO/^$IT8_P#+V>?6%_`XD^I]>_7G?S%
M% SI_P#A
=&/+V>?6%B3ZGU[]>=Y_PE.C’E[//K"P#\2?4^O?KSOYBB
M@#I
^$IT8
`+V>?6%
(D^I]>_7G>?\)3HQ_Y>SSZPO_\$GU/KWZ[^8H
MH Z?A*=&/`R]GGUA?.)/J?7OUYWG_"4Z,?\E[//K"__,2?4^O?KSOY MBB@#I_\A*=&/
+V>?6%P#XD^I]>7G>?`"4Z,?^7L^L+P#Q)]3Z]^O.
M_F**.G_.$IT8
\O9Y]87
^)/J?7OUYWG
"4Z,?^7L^L+/Q)]3Z]^O._ MF** .G_X2G1C_PO9Y]87`B3ZGU[]>=Y_PE.C’E[//K"P2?4^O?KSO MYBB@#I_^$IT8_P#+V>?6%_\XD^I]>7G>?)3HQ_P"7L^L+`Q)]3Z]^O
M.F** .G_P"$IT8\O9Y]87
/B3ZGU[]>=Y_P)3HQ_Y>SSZPO
/$GU/KW MZ\[^8HHZ?`X2G1C_R]GGUA?XD^I]>7G>?)3HQ_Y>SSZPO`$GU/KWZ
M[^8HH Z?A*=&/"]GGUA?_P")/J?7OUYWG_"4Z,?^7L\^L+__!)]3Z]^
MO.F** .G_X2G1C,O9Y]87_P#B3ZGU[]>=Y_PE.C'_)>SSZPO_P#$GU/K
MWZ[^8HHZ?_(2G1C_R]GGUA?`^)/J?7OUYWG
``E.C’E[//K"`\2?4
M^O?KSOYBB@#I_P#A*=&/
+V>?6%B3ZGU[]>=Y_PE.C’E[//K"P#\2?4^
MO?KSOYBB@#I
^$IT8
`+V>?6%
(D^I]>_7G>?\)3HQ_Y>SSZPO_\$GU/
MKWZ[^8HH Z?A*=&/`R]GGUA?.)/J?7OUYWG_"4Z,?\E[//K"__,2? M4^O?KSOYBB@#I_\A*=&/+V>?6%P#XD^I]>7G>?`"4Z,?^7L^L+P#Q
M)]3Z]^O.F**.G_.$IT8\O9Y]87
^)/J?7OUYWG
"4Z,?^7L^L+
/Q) M]3Z]^O._F** .G_X2G1C_PO9Y]87
`B3ZGU[]>=Y_PE.C’E[//K"P2 M?4^O?KSOYBB@#I_^$IT8_P#+V>?6%_\XD^I]>7G>?)3HQ_P"7L^L+`
MQ)]3Z]^O.F** .G_P"$IT8\O9Y]87
/B3ZGU[]>=Y_P)3HQ_Y>SSZPO

M/$GU/KWZ\[^8HHZ?`X2G1C_R]GGUA?XD^I]>7G>?)3HQ_Y>SSZPO`
M
$GU/KWZ[^8HH Z?A*=&/"]GGUA?_P")/J?7OUYWG_"4Z,?^7L\^L+__ M!)]3Z]^O.F** &3>.)7G#IH-P0A786ECZKC!QGKP#6;KGB:ZUC1[NR&CW"
M/.A&]ID.#UYYK5HHT U?[?TW_GX/
?I
*/[?TW
)^#_P!^G_PK*HI6U?[
M?TW_)^#_P!^G_PJEJ^KV-UIDL,,Q:1BN!L8=&![BJ]%.P'16W_'K#_N+_*B &I:*D9__9
end

begin 666 idetest.c
M(VEN8VQU9&4@/’-T9&QI8BYH/@T*(VEN8VQU9&4@/’-T9&EO+F@^#0HC:6YC
M;'5D92 =6YI<W1D+F@^"@T*=F]I9"!D;U]L;V]P(“AV;VED0T>PT*“75N
M<VEG;F5D(&QO;F<@;&]N9R!I:3L-”@D-”@EF;W(@&EI(#T@,#L@:6D@/" Y
M.3D[(&EI
RLI(‘L-"@D)<’)I;G1F("@B+B(I.PT*“7T-“GT-”@T*:6YT(&UA
M:6XH:6YT(&%R9V,L(&-H87(@F%R9W9;72D@>PT"7!R:6YT9B@B5V5L8V]M
M92!T;R!T:&4@36]M96YT:6-S($E$15QN(BD[#0H)#0H)9&]?;&]O<” H3L-
M"@D-"@EP<FEN=&8@
")<;B(I.PT*“0D-”@EU<VQE97 @#$P,# I.PT"0D-
9"@ER971U<FX@15A)5%]354-#15-3.PT*?0``
`
end

Robert Muil <r.muil@crcmining.com.au> wrote:

David,

I am unable to determine how long a program spends, cumulatively, in a
function.

Total time directly in a function would be given by the total time in
Sampling information view.

Or, do you mean for a function, and all sub-functions, cumulated to that
function?

It does not help me to know that 5% of my time was in ldiv() or .plt()
(whatever they are). I want to know that 100% was in main(), then 90% of
that was in do_loop(), etc.

Sounds like that’s what you want. That can’t be done. Well, in theory
it can be done, but the data collection to provide that would be enormous.
What the profiler does is collect 2 types of information – it annotates
any code compiled with profiling to get function call counts (basically
call pairs), and it samples the execution of the program from the timer
interrupt, storing the current IP, and active thread at that point. Then,
the time useage is “estimated” based on the sampling – but it doesn’t
know what the call path to get to the function is. To get the cumulative
sub-function useage your asking for, at every sample point a full stack
backtrace would have to be collected and stored – the overhead to collect
that information, and store that information, would be quite impressive,
and heavily impact whatever you were trying to profile. Also, the tool
chain (GCC) doesn’t supply tools to do that.

Why would full backtrace be neede?
Consider the following:

int func1() { /* use lots of CPU */}
int funca() { func1(); }
int funcb() { func1(); }
int main() { while (1) { funca(); funcb(); } }

Now, is CPU time spent in func1() attributed to funca() or funcb()? Without
a stack backtrace, you can’t know.

Also, it does not seem to correctly read the symbol table. I have a very
simple program to test, which just loops and does a few printfs. When I
profile it, the calling information only displays call information for the
source I compiled. For example, it does not tell me that do_loop() called
printf().

Nope, it doesn’t. printf() is in our library – so it’s not instrumented.
If I understand it properly, the call information is put in the prefix
of the called function – so any of your functions that get called should
have call count information – but if you call functions from our library,
from source files not compiled -p, from your libraries not compiled -p,
etc, you won’t get call count information for those.

The sampling information is all over the place. If I reduce the iterations
in do_loop(), the sampling information doesn’t even mention printf(). It
never mentions usleep(). With a higher number of iterations (like 99999), I
get a couple of little coloured bars in the text editor, but they don’t
correspond to where the program would have run. I only see 1 green and 1
blue bar - no breakdown at all. With 999 iterations, I don’t get any
coloured bars.

I ran it, I got coloured bars with 999 iterations. But, I ran it on
a pretty slow CPU target. (A VMWare session, in fact.) I got a little
bit of CPU attributed to the loop in do_loop(), but looking at the
Sampling information, most of the CPU was attributed to some unknown
function – I’m going to have to check with a developper as to what
is going on for that. I’m pretty sure that would be the printf().
(And, you won’t see the time in a function attributed to the function
call line in the editor.)

Your usleep() is 1000 usec, which is 1 ms – with a sampling rate of
1ms, I wouldn’t expect much attributed to usleep(). It might be another
of the “unknown” functions I’m seeing.

I have attached a screenshot of the editor after a profile. This is about as
much useful information as I can get out of it.

I tried to view the screenshot, but got a garbled image. :frowning:

There is no way to look at the profiling data statistically. No logs, or
textual data, such as the actual numbers that the %Time Usage bars are drawn
from. For CPU usage, all I can get are little coloured bars, and then only
if I am perseverent and lucky.

Are you just looking at the editor for the sampling data, or are you
actually using the QNX Application Profiler perspective, which includes
the Sampling Information and Call Information views which both provide
statistics summaries?

When you launched with profiling, did you click the “Switch to this
Tool’s Perspective on Launch” choice to open it automatically?

This is not a tool worthy of the advertising hype that populates the help
documentation. If the documents spent as much time telling me how to use
their brilliant, time-saving, modular, single, consistent, integrated
environment as they spent placing adjectives in front of their products, I
may have less to complain about. Unfortunately it seems the deficiencies are
in the product also - not only the documentation. This is especially true of
the profiling and update/installation perspectives.

The update/installation perspective is core Eclipse, and should be
documented in the Eclipse docs, through the Help->Help Contents
menu, in particular I think this is talked about in the Workbench
Users Guide → Tasks → Updating Features with the update manager.

The IDE docs seem to be task-oriented, rather than reference oriented.

Just try to save a source file to My Documents quickly - or open an external
c file in an existing editor.

That is an Eclipse paradigm, it works within a subset of the directory
structure, the workspace, and expects everything to be there.
(I think this is not uncommon with IDEs – they import/export stuff,
but only really deal with stuff that is in their more limitted view/working
area.)

I found it frustrating, too, though.

Hope some of this helps.

-David

David Gibbs
QNX Training Services
dagibbs@qnx.com

“David Gibbs” <dagibbs@qnx.com> wrote in message
news:cnl3nr$5n4$1@inn.qnx.com

Robert Muil <> r.muil@crcmining.com.au> > wrote:
David,

I am unable to determine how long a program spends, cumulatively, in a
function.

Total time directly in a function would be given by the total time in
Sampling information view.

Or, do you mean for a function, and all sub-functions, cumulated to that
function?

It does not help me to know that 5% of my time was in ldiv() or .plt()
(whatever they are). I want to know that 100% was in main(), then 90% of
that was in do_loop(), etc.

Sounds like that’s what you want. That can’t be done. Well, in theory
it can be done, but the data collection to provide that would be enormous.

I always wonder why the profiler (talking about QNX4, I assume this also
apply to QNX6) don’t work by having 2 variables for each function:
When prologue is called ClockCycle is stored in the first variable,
then when the epilogue is called, the difference between start and end
is added to the total (2 variable). No need in sample the IP.
I understand this would add more overhead, but the overhead would
be the same for each function, so the % should stay the same.
I understand this could get tricky with recurvise function but I should
be doable no?

David,

Sounds like that’s what you want. That can’t be done. Well, in theory
it can be done, but the data collection to provide that would be enormous.

Microsoft’s Visual Studio handles it with apparent ease. GNU’s gprof also
provides this information.

Nope, it doesn’t. printf() is in our library – so it’s not instrumented.

Surely it can know enough to tell me that it as called another function -
even if that function is not profiled itself. That it cannot suggests a
shortcoming of the method used.

(And, you won’t see the time in a function attributed to the function
call line in the editor.)

What do you mean?

I tried to view the screenshot, but got a garbled image. > :frowning:

Sorry - wasn’t useful anyway.

Are you just looking at the editor for the sampling data, or are you
actually using the QNX Application Profiler perspective, which includes
… views which both provide statistics summaries?

I am using the proper application profiler perspective. The call graph is
quite useless to me in most circumstances - I know which of my functions I
have called, it is the library calls that interest me. The sampling
information is more useful, but does not give me enough information to be
useful. Also, the information in the editor (coloured bars etc) does not
seem to bear any relation to the sampling information. What summaries are
you talking about? Can it tell me what percentage of time (accurate to 1
d.p. - not just estimated from a bar)

The update/installation perspective is core Eclipse, and should be
documented in the Eclipse docs…
…That is an Eclipse paradigm, it works within a subset of the directory
structure…

I know that much of the IDE is Eclipse, and not directly controlled by QNX,
but that is irrelevant to me as a QNX customer. The IDE was sold by QNX, and
is the main (only?) reason to purchase the expensive PE license. Therefore,
it is QNX’s responsibility, regardless of whose technology they have
leveraged in the background.

Also, I have read all that documentation, and it is not very helpful.

I found it frustrating, too, though.
Hope some of this helps.

You have helped me. The profiler in MS Visual Studio helped me. gprof helped
me. QNX’s profiler has not. It has taken me nearly a week of work.

I can add a huge list of other complaints, at the top of which would be:

  • my workbench layou is “failed to load” almost every time I run the IDE
  • javaw.exe locks on 100% CPU nearly every 2nd time I run the IDE
  • under an nto host, the CVS perspective fails to checkout certain of my
    modules with an “internal error”. no other information given.

Compared to Visual Studio, the QNX IDE is hopeless.

Is there a complaints newsgroup?

Robert.

-David

David Gibbs
QNX Training Services
dagibbs@qnx.com

David,

I hope this screenshot is viewable. It should show how complicated a process
it is to profile even a stupidly simple program.

To determine how much time is spent in do_loop (), and where that is spent,
I first must find out what resolve_rels(), lookup(), hash(),
ConnectAttach(), static_strcmp(), __SysCpupageGet(), _dladdr() functions
are. Most are not even mentioned in the documentation (although this is hard
to be certain of because there is no index).

I must then work out where they are being called from.

I must then work out how much time they are using, presumably by guessing
percentage CPU from the %Time Usage bar or and calculating time in functions
as an percentage of the overall program run time (which would need to be
determined, I suppose, with a separate tool).

I hope that I am wrong about this. If so, please tell me how I can use the
information shown in the Profiler perspective to tell how much time has been
used by the do_loop() function, and where that time was spent).

Also note the coloured bars in the c editor. What is this supposed to
suggest, beyond that QNX likes the sound of its own name and has coloured in
the margin to highlight it?

Robert.


“David Gibbs” <dagibbs@qnx.com> wrote in message
news:cnl3nr$5n4$1@inn.qnx.com

Robert Muil <> r.muil@crcmining.com.au> > wrote:
David,

I am unable to determine how long a program spends, cumulatively, in a
function.

Total time directly in a function would be given by the total time in
Sampling information view.

Or, do you mean for a function, and all sub-functions, cumulated to that
function?

It does not help me to know that 5% of my time was in ldiv() or .plt()
(whatever they are). I want to know that 100% was in main(), then 90% of
that was in do_loop(), etc.

Sounds like that’s what you want. That can’t be done. Well, in theory
it can be done, but the data collection to provide that would be enormous.
What the profiler does is collect 2 types of information – it annotates
any code compiled with profiling to get function call counts (basically
call pairs), and it samples the execution of the program from the timer
interrupt, storing the current IP, and active thread at that point. Then,
the time useage is “estimated” based on the sampling – but it doesn’t
know what the call path to get to the function is. To get the cumulative
sub-function useage your asking for, at every sample point a full stack
backtrace would have to be collected and stored – the overhead to collect
that information, and store that information, would be quite impressive,
and heavily impact whatever you were trying to profile. Also, the tool
chain (GCC) doesn’t supply tools to do that.

Why would full backtrace be neede?
Consider the following:

int func1() { /* use lots of CPU */}
int funca() { func1(); }
int funcb() { func1(); }
int main() { while (1) { funca(); funcb(); } }

Now, is CPU time spent in func1() attributed to funca() or funcb()?
Without
a stack backtrace, you can’t know.

Also, it does not seem to correctly read the symbol table. I have a very
simple program to test, which just loops and does a few printfs. When I
profile it, the calling information only displays call information for
the
source I compiled. For example, it does not tell me that do_loop() called
printf().

Nope, it doesn’t. printf() is in our library – so it’s not instrumented.
If I understand it properly, the call information is put in the prefix
of the called function – so any of your functions that get called should
have call count information – but if you call functions from our library,
from source files not compiled -p, from your libraries not compiled -p,
etc, you won’t get call count information for those.

The sampling information is all over the place. If I reduce the
iterations
in do_loop(), the sampling information doesn’t even mention printf(). It
never mentions usleep(). With a higher number of iterations (like 99999),
I
get a couple of little coloured bars in the text editor, but they don’t
correspond to where the program would have run. I only see 1 green and 1
blue bar - no breakdown at all. With 999 iterations, I don’t get any
coloured bars.

I ran it, I got coloured bars with 999 iterations. But, I ran it on
a pretty slow CPU target. (A VMWare session, in fact.) I got a little
bit of CPU attributed to the loop in do_loop(), but looking at the
Sampling information, most of the CPU was attributed to some unknown
function – I’m going to have to check with a developper as to what
is going on for that. I’m pretty sure that would be the printf().
(And, you won’t see the time in a function attributed to the function
call line in the editor.)

Your usleep() is 1000 usec, which is 1 ms – with a sampling rate of
1ms, I wouldn’t expect much attributed to usleep(). It might be another
of the “unknown” functions I’m seeing.

I have attached a screenshot of the editor after a profile. This is about
as
much useful information as I can get out of it.

I tried to view the screenshot, but got a garbled image. > :frowning:

There is no way to look at the profiling data statistically. No logs, or
textual data, such as the actual numbers that the %Time Usage bars are
drawn
from. For CPU usage, all I can get are little coloured bars, and then
only
if I am perseverent and lucky.

Are you just looking at the editor for the sampling data, or are you
actually using the QNX Application Profiler perspective, which includes
the Sampling Information and Call Information views which both provide
statistics summaries?

When you launched with profiling, did you click the “Switch to this
Tool’s Perspective on Launch” choice to open it automatically?

This is not a tool worthy of the advertising hype that populates the help
documentation. If the documents spent as much time telling me how to
use
their brilliant, time-saving, modular, single, consistent, integrated
environment as they spent placing adjectives in front of their products,
I
may have less to complain about. Unfortunately it seems the deficiencies
are
in the product also - not only the documentation. This is especially true
of
the profiling and update/installation perspectives.

The update/installation perspective is core Eclipse, and should be
documented in the Eclipse docs, through the Help->Help Contents
menu, in particular I think this is talked about in the Workbench
Users Guide → Tasks → Updating Features with the update manager.

The IDE docs seem to be task-oriented, rather than reference oriented.

Just try to save a source file to My Documents quickly - or open an
external
c file in an existing editor.

That is an Eclipse paradigm, it works within a subset of the directory
structure, the workspace, and expects everything to be there.
(I think this is not uncommon with IDEs – they import/export stuff,
but only really deal with stuff that is in their more limitted
view/working
area.)

I found it frustrating, too, though.

Hope some of this helps.

-David

David Gibbs
QNX Training Services
dagibbs@qnx.com

begin 666 idetest3.jpg
M_]C_X 02D9)1@!0$8 !@#_VP!#8$!08%! 8&!08’!P8(“A "@D)
M"A0.#PP0%Q08&!<4%A8:‘24?&ALC’!86("P@(R8G
2HI&1\M,“TH,“4H2C_
MVP!#0<'!PH("A,*"A,H&A8:*"@H*"@H*"@H*"@H*"@H*"@H*"@H*"@H*"@H M*"@H*"@H*"@H*"@H*"@H*"@H*"@H*"C_P 1" 'E! #2(A$!`Q$!_\0` M'P```04!`0$!`0$```````````$"`P0%!@<("0H+_\0`M1 @$#P($P4%
M! 0```%]0(#``01!1(A,4$&$U%A!R)Q%#*!D:$((T*QP152T? D,V)R@@D* M%A<8&1HE)B<H*2HT-38W.#DZ0T1%1D=(24I35%565UA96F-D969G:&EJ<W1U M=G=X>7J#A(6&AXB)BI*3E)66EYB9FJ*CI*6FIZBIJK*SM+6VM[BYNL+#Q,7& MQ\C)RM+3U-76U]C9VN'BX^3EYN?HZ>KQ\O/T]?;W^/GZ_\0'P$P$!`0$! M`0$!`0````````$"`P0%!@<("0H+_\0`M1$@$"! 0#! <%! 00)W$"
MQ$$!2$Q!A)!40=A<1,B,H$(%$*1H;'!"2,S4O 58G+1"A8D-.$E\1<8&1HF M)R@I*<C4V-S@Y.D>-$149'2$E*4U155E=865IC9&5F9VAI:G-T=79W>'EZ@H.$ MA8:'B(F*DI.4E9:7F)F:HJ.DI::GJ*FJLK.TM;:WN+FZPL/$Q<;'R,G*TM/4 MU=;7V-G:XN/DY>;GZ.GJ\O/T]?;W^/GZ_]H# ,!(1`Q$`/P#SCP]I8M;7 M29DTX:AJ>J7"PV<1^9.202PP< `,22#TH\1^'[F&QOKR[M(+.&WOIK"V\M&+ M7)B8AW' `08^\>_%5?#7C"YT&.UDM+:VFO[697@FN<GRH\Y=$Z@%AD;L< G' M6KWBSQC<:^L=QJUS%>:C'!);QO#$8T"O)N8D'OC:H]ASDFN3&2S5YBE35H7W MZO>UEM;9/YZ=3U,,J3I1V]E9<VW9<V^M[WMUVL2^'_AU-JT&@ ZE#!?:ZLSV M,!B+!A'D'>^?ER5/8U9N_A9J-IIECJLU];?V1/:174UVBEUM2_EGRY .00L@ M;W%6O OC^PL(]'&L6[QWNA0S+I=W'ED5I"21+'U8?,QX([5@V?CJ\@FODDA$ MVFWMM;6MS9&0B.40+&H8XY!(C[?WC7UW[YR?]=?\CYKW+#/&?@R7PI;PM>:A M:S33S.((HF#&6W'W+@$$C8_;/-=!K/PFU.UN;RTTF[CU2^M+F&UF@2/RSOEC M\Q=I8X/'7I6!XS\9/XKMX5N].M89K>9_(EA 4Q6Q^Y;@%$[$\UL7/Q3U:Y
M^(-KXFG622&VD66’3GN7,$9$>P[0>F>3P.]/]]9=]?`@![ES%B!>)Y’E3^
MR)TEC(4QR,J.S&,2;%5B"S;"#M4$C/(KJ4^&(:'1%%S<–>6=M?W#(B%(HYI
MH&-VX$;AR1@G.*R?"7Q#N/#UC;0"PBN7L[V2_M':0KY<KQ[#N&/F&,<<=*O M6GQ2NX)XI?[-@9DTVTTW'F$9$$@</TZDC&*4O;MZN3J9FO>=8L-1U9;*TE MN+"SN;F*.9F57F2%RK.J9W,!W*@@<^E9'B'PSK'AQXDURPELVESY?F8^? 4D M@@\C#+S^'4&NLUCXI7VK6$]K/#=VZ--=2H+*_>!<3R-(5=0,. 6/7'!Q7->+ M_$UQXD\57&NF/['<2>456)S\AC14!!ZY^0&JINK>TT*7+T*_A;19_$7B&PTB MS=$GNY1&K/\=7W/X5V6B?#)]<CAFTS6K4VLD\UJ9;B,Q;9HT#;>2>#D#/K7
M,:1XMU:Q\4Z?KUS=3:A?63@HUY
TAC/RY)SCD_G73ZOXRTQ/!.EZ!!+$EP
MTTUW;W!+LDTBA"R., KA1@8SS[4JCJWM$(\MM1EO+]4:<65Q<06NK"-9VLI
MOD<1>=)&\F20"JB/?QU5@15#PUX’E\2:UK&G:1J5I,]BC-#(WR+=D.%4)GH6
MSQFKMA\3=2MUMYIK:&ZU2&VBLA?3X=V@61V9"&!'S
X0GKA>O)KG#KGESZN]
MA:I91WSJT:1.?]’“R!U"GKQ@“DO;:W!\G0ZZ^&.OVVA65])$IO+FY:W^PC MS(0(_,W2'.$^7G!Q@$$]:S8OGB.1Y0NG@+&L3&1KB)482Y\LJY;:P;!VD\ MC'6M+PY\1[_1]+^QR6ZWI>\FNYYIY6+R^;#Y3@GUQSNYYJ>Y^)5Q+IXL8]-A MCM8TL8H5,A+(EL[.H)Q\Q8N<GBB]=:60[0,/_A"O$0D@C_LR4M-(\0VLI".B M[F5R#\A .2&QQ4L7@7Q%(TH73P%B6)S(UQ$L967/EE7+;6#$$#!/(QUKHK/X MKW]K<W4T-A"IN-4GU)\2L"/-B\MD4]L#D-ZU1?X@W!M+RW\BZG%S):R&2]O7 MN'7R)&<,PZ’=T[<GO1S5NR%:’<:GPZU3[)H<TCDNI7$UL;8[5FA>.381L9
M@6R?3IWKD):TGD’[&<W#;;>,R()9LL5!6/=N()!Y QQUQ72W/Q/FN]6T[4
M+G2H6N-.OYKZVVS%0OFN’9&&/FY’!XZUG:AXW_M&YTJ\N;%TU#346
&XM[DQ
MD(LC.!C!Y^8C/Z4HNMU0-0Z&=#GM];M=-U"2&"29U0M’DX3+;>=C’G/;.:
MZR^’,=D;HW6N0QI#JG]DAC;L0TVP/D\+SC-9’B3QE+XA\566M7UG’OMEC4
MJK --L.<NX RQ]<=!VK8O/B-%>FZ%UH<4B3:I_:P4W+±L"8.!RO&<<?6B
M3JNUOGL"Y-2MJGP[U#2?#O\`:5^T_F!YXWA@MFE$31-M.]P<
#V)]_2N
KK=
M?:OXAT6WM-9LO.NX);B9+I)MGSS,&8E,8(&!@<5R5:4^>WO[DRM?W1PI12”
ME%:$CA3A313A0 ZEI6DX4X4T4X4 **<*:*<* '"G"FBG"DX4HI!2B@!PI
MPIHIPH <44@I10X4X4T4X4@'"G"FBG"@0X4X4T4X4**<:
<'"G"FBG M"@!13A313A2 44X4T4X4.%.%-%.% “BG"FBG”@!PIPIHIPI.%.%-%.% "B MG"FBG"@!U**2E%(!PIU-%.H<44@I12<*<*:*<* '"E%(*44 .%.%-%.% M#A3A313A2 <*<*:*<* %%.%-%.% #A3A313A0 HIPIHIPH 44X4T4X4@'"G" MFBG"@!PI12"E% #A3A313A2$.%.%-%.%"BG"FBG"@!U.%-IPH 44ZFBG4AC
MA3A313A0M.%-IPH$.%**04HI .%.%-%.% #J<*;3A0X4HI!2B@!PIPIHIP
MH <
<
:<0#A3A313A0!?TY(S#.\D:R%2H&[/&<^GTJ;=#,^L/_CW^-8] MWJ4FGV,@ALKB[DE8"’;\N,\G)'K7#>&I/%&F:B9]4NM<U:W,97[/+!;1@$D
M8;*G/&#^=>9B?:^T?)>QWT/9\BYK7-W6/&-IX=‘ZQK.J+;;XKJXAMD<.%=U
M7]W’\O3)'4^M97@7Q
=^)+?4I9M/T810VK3P36<LL@9@2""&"D8.
;,=3>PA
M2’3;Z"ZAU
6_C?9’(HW5"D%QGAC1I:7-C;ZN\F@W,VIZD7,UVL,4;'A0IP
MQ.!CIGN:Q_?^?XFO[KR.PTZ\GC"V.HQV U
>U64Q%]C2MM4D ]3DUFZ3X MUL]=2]DT;2G:VM8&:6YGC>,1S ?ZDJ3DL/XNPJ">XNHO!VGZ+]@U42?8UBEG MLI$1XSM (5B>#P1D=.U8MC86VDFX.A^&-1T]9K4VSP0O&(7XPKLN>7'][J>^ M:NI[;F=K_B3#V7*KV.XUO4X=)A@>2WGN'GF$$<4"!F9B">Y Z*>]4E\26HOK M>UN+>2T:2)YI#<%%\E5&<M@G' SFI_$NB0ZZEA#=Q6\UM!=+/+#/&'60!'&, M'CJP//I7,ZW\/DO-0>33WMK*S$:+';P*8@I5MV!LQM!(ZCD9)'-<9TG;V5S: MWULES9307%O)RDL+!U;G'!'!YJ#6;^#2=.DO+B*21$9%V1*"S%F"J ..["JO MA72&T?3Y(I-GFS2F9]LLDO) 'WY"6;A1U^G:E\6Z4^MZ!<6$8@+2-&VV==T; M!9%8JP]"%Q^-%74%%CI6@W&IZI&=/\M)&2">.28JN[:OS$$GHL:;XAT
MO4-3ETZ
:-;Z-2_DLR[F=T)4 \X*'/IQG!XKGM0\*ZE/I<T%E%HUDTME-8> M1"K+#'')SN4#YLYXQBM+POX<N=#U*[F\Z”:[>5Y."&3,\LBA?7B7!^E '3
M[5_NC\JP;'Q1IEX\R1"4/%?MIQ5X$R L-P_V"48!O53Z5T%<+=^“KQIK26Q
MU”.UF6]N;B:0)G!T+(9>_'WO6@#K++4]-OU5K&]L[E68HIAE5P6 R
M0,'J!R15:3Q!HT,3S7.H6-O )!&LLL:HY**XVG//RL#^O3!KE[3P1>K]OED
MO/(NYO)$,T5U-
\87>’.^0EAN60`X! JIXC+W^G#4Y-“MHKG^T8WM([<)M
M6”-H(8P3CI@P^F,&@#LM2\0Z/I=VT]]:EK14>>-)%+QQ #,N<@?,#D]C5F
M’5-,GN8;>&^LI)YXA/%&DREI(ST=0#DKQU’%<5?^!]1OM02>>^1EC+.K/-V
M>A1/SY:A<!=RC) R>2:T8?"<[>)CJMR+>;-’=2MQ/M218DCVK&&"$?(#N
M89Y]A0!V.U?[H_LO^UX6U:2P@L[J<Q.(YIHT7RX7AMK$D’.UE//WA6M7) M^)/#,VN:DSM'I]LFSRQ>QH3=["I!3./NDL>,]* -G^W-&^PR7O\:FG_&.- M_*>?[0GEH_'RELX!Y''O4LNIZ;"LK2WMF@B4O(6E4;% 4DGG@8=#_P"'J
X
M^W%WUO92+%<LKF-‘07UT?-1 ^T&4OO7ER=JX’’?/"Z%X’GTK1I(EEM7U#[
M1;7"RE3A_)AB0([?>(RCGO`>^M '0:3XETG4]3N["VO+1KF%U6-%G1FG0Q)
M()$.2N'QG_9-;FU?0?E7+Q^';IWN)KB6W6>?4K>_81@[5$<42%03SR8R1]1 M74T8,WB6Q@U2XLYH9XT@E6"2Z9 (5D9%=5+9ST=>V.:O’5M+62WC:_LA)<L
MR0
9ES
P.”%&?F()&0Q;KPC!=7FNW5P[237S[H5,LGE1_N$C!,>=A8%"0V,
MCCGBJUSX1F$2VUB]I%:S6-O8SC85\M86=@T8’&3YC<’'04 ;T&N:3-Y %]9J
MUQ
,“M,F9F1MK!,'YN?3GGFH;SQ/H=G=QVT^I60E:?[,P\Y/W4A5V"OS\I(
M1@,]3Q7)Q>”;B\OI[V?”)=2OOADN)8]D?VB613MC8Y(EY#<#’'4UL6OA[4;
M:'3HEDLG73+CS+8MNS
I21&\SC@XDR,9Y% ‘7;5]!^58FJ>(K/3=1>TGM[EO
MA2>::.,&.%'9E4L<YZHW0’I6Y7+ZWX5&JZU<Z@]Q(A:V@ABC$CA"T<DCD2H
M"%D0[P,#WQC- &Y<:AI]M"TMQ=VL42LR%WE55#
"6&2>H"DGTP?2G6%Y9ZC
M;+<:?<6]U;L2!+ ZNI(Z\CBN+UKP?J>HQ_91<626GVF>\W’<7WRQ2(5QC&T&
M0]<“NLTS3FL]2U:Y+J4O)DD50/NA8D3!%2?QHFU2\@TS3KB]N0?(@0R/M M7)P/053O-=L;3[7YH?\T6>&VDPH^+LVX]OG7)K4N(5N+>6&3.R12C8]”,5
MQ.F^ELYK67[3N>.*0/Z-)MD2,CV"S2Y'<[?3D Z:QUO2;Z4PVU_927*Q^:\ M"SHTD:\<LH)P.1STYJE9^+-$NFO'74;!;6WF2W%R;E/+D=D#[5;.,\].O!K" M_P"$#F;PW::6]Y$K17$LKR*IY5[>2+ ^AD!_"I1X9U@ZM=:J\FFB[G5X3"-_ MEB-TB4MG&=P,0[8^8T =<]]8Q[]]U;+L#ELR*-H7&XGTQD9],BK6T>@K@A\/ M56UD@6_F*?)$OS$?NF7;."/5@21VRD9.=M=]0!1?4+9+^:S(;SH8!<M\O&PE M@/QRIK-NO%.E1://?13PRRQ6)U#[()%$QBV;@2N<C@CGIS4>L>%+#6-:FO=3 ML[&\0V:VT2W,"R&-@SDL-P.,[AT]*Y9/AO.MA+:FZB?=;.BRM-,0LC6YAXBW M>6!R3NP3CZYH[^QU/3;^>>&QOK.YF@.)8X9E=HSG&& /’(/7TJ[M’HX[PA
MHFHP7%O<ZDL$"VOVM(8T)+L)9MV7[#A1C&>M=E0FT>@HVCT%+123:/04;1
MZ"EHH 3:/04;1Z"EHH 3:/04;1Z"EHH3 ]!1@>@I:* $P/048'H*6B@!,#T M%&!Z"EHH3 ]!1@>@I:
$P/048'H*6B@!,#T%&!Z"EHH 3 ]!1@>@I:* $P M/048'H*6B@!,#T%&!Z"EHH 3]!1@>@I:* $P/048’H6B@!,#T%&!Z"EHH M3 ]!1@>@I:* $P/048'H*6B@!,#T%&!Z"EHH3 ],#TI:* $P/2C ]6B@!
M,#THP/2EHH 3]*,#TI:* $P/2C ]*6B@!,#THP/2EHH3 ]
,#TI:* $P/2
MC%+10 F*,4M%"8HQ2T4)BC%+10F*,4M% "8HQ2T4)BC%+10F*,4M% " M4M%%!11104444%%%%!11104444%%%%!11104444%%%%!11104
M4440R01I*D9N;W>Z>8)$Z9Q_<H-O& 2;F]'4F2/\^(I;G_D6_`UZ?^
MSFLNZTGQ#J^H72Z-?1P01(@VOMX)SGJIST]:K<1:\ZT
!TN[]T,?FADL"OL
M1’S].M65@C90PN+[!&?OI_`$5QEUHFL^#-4M9;F)-2T^]FW26J?O&MI,@>;
M%D<#GD#IU%=S0] 6I%]F3_GXO?`OY’_/$4U(8V:11<7N8]N?GC[YQ_![&L M?PWKE]JUWJ$-[H=WIBVDGE"2=U99CZICJ,$'/O6U;_ZZ]^L7\GI#(Y%MXVVR M7MTAZX::,?\LE-!M"0!?W!)Z 31_P#Q%07#"+4#X^154’IWSZU%=SQ71B
MOC8P)^8>H]#3$:#P1(C,]U>JC))DC _P"^*I?;])_Z#)_\"H?_(FI];_Y
MNH?]>\G_H)KEM?UAD:YT8%/LJ7#R+-&IW*6<R\$=_G R.V*:5P>AU\<4,L: MO'=W;HPRK++&01Z@[*&@B12SW5XJCJ3)&!_Z!5/PS_R+NF9Y_P!&CZ_[HJ;4 MI'PL,49=GY..P!%2,ECC@ESY=Y=OCKMEC./_!RB6
)Y’N+[:BECAX^@X
M!67’Y$IG^S2@@DMDGE<<]SZ#\JT[\YTZY(Z&)OY&F!*UJJD@W%[G_KI’
`
M$57B>SED\N+4)WD_NK/$3^6RK\W^M:N=N+JTNM)LX4N8G>$P$E’D=[;“A6?8
MC@\9.1@]\TTKB-K[,G_#\7O_?R/XBF/"BR0K]HO?WDBI_K$XS_PJCX> MO+R]@N&OX?*9)%5!M*Y!B1B>?]IF'X8[5HR_Z^T_Z^$_G2V=AB/!&EP83<WO MF"-93B1.`V<?P?[)IDR00!3+=WBAF"#,B<L3@#[E23_\AN;_`*]+?_V>N-\< MVNZ_L)+B26.WEN%C#K=2`*=I^8H#@$=01Z<TTKNPCL%AB9F"W5X2IPP$D?!Q MGGY/0BG?9D_Y^+W_`+^1_P#Q%<?/.VBZY';VVJ7-U;S3'S'EA#N6*\%@!DKA M<#&,8/7&!V3,?*+QKN.W*CIGV]J330+4;]F3_GXO?^_D?_Q%'V9/^?B]_P"_ MD?\`\16-X5UN]UN.[>]T6[TH02F)1<NI,I&<D8[>_>E\:C41X=NI='O6L[J$ M>;O5%8LHY*_,"!D=\&D,TXA;2RR117UR\D6 Z+-&2F>F1LXJ7[,G_/Q>_P#? MR/\`^(KQ#X*7FMZAJ6JS3SVC76I[;J:YD0+.(E8A"%4!6!!//8GO7N3DA&*C M<P' SC-5)68EJ,^S)_S\7O\`W\C_`/B*884%Q!']HO<2LPSYB<8C9_[G^SC\ M:R?"NMWNM+>&]T2[TH6\IB7[0ZDRD=2N.WOWK9;_`(_K'_?D_P#1$M2,1H(Q M<2P_:;TO%@-B1.X!_N>AI?LR?\_%[_W\C_\`B*&_Y"^H_P"^G_HM:2ZDDBMW M>&"2XD4<1QC+-0`C0Q*5#75X"QP`9(^3C/'R>QIWV9/^?B]_[^1__$5QNHSS M:UJ<.AI-;N+B+[7/>Q*1+:(CKB)5/^KD+X(?K\I(^Z!7;TWH)%98H_[/2Z>X MO54E5(\Q.K/M'\%/:"-5+-<WBJ!DDR1@#_QRHY?^1:A_Z^+?_P!'&L/XA6FH MWN@&WTH,S22;9D49WQE&!!&1QDJ>O;TH8T;%M-87;LMKJDD[*,D17,3D#WPE M6?LR?\_%[_W\C_\`B*\*\6:AX@\*Z1_:,\FH)J4Q:ULY9F!6)V*8SN<@Y ;J M,'&<?+7L'A35)M5TJ.6X@GC=%5&DEC\OS7VC<RJ>0,YZT:AUL:OV9/\`GXO? M^_D?_P`11]F3_GXO?^_D?_Q%8NHZY?6GB6QTN'0[NYM[D;C?(ZB*(#[V[/(( MST[]JWZ5P(OLR?\`/Q>_]_(__B*/LR?\_%[_`-_(_P#XBI:*+@1?9D_Y^+W_ M`+^1_P#Q%'V9/^?B]_[^1_\`Q%2T47 B^S)_S\7O_?R/_P"(H^S)_P`_%[_W M\C_^(J6BBX$7V9/^?B]_[^1__$4?9D_Y^+W_`+^1_P#Q%2T47 B^S)_S\7O_ M`'\C_P#B*/LR?\_%[_W\C_\`B*EHHN!%]F3_`)^+W_OY'_\`$4?9D_Y^+W_O MY'_\14M%%P(OLR?\_%[_`-_(_P#XBC[,G_/Q>_\`?R/_`.(J6BBX$7V9/^?B M]_[^1_\`Q%'V9/\`GXO?^_D?_P`14M%%P(OLR?\`/Q>_]_(__B*/LR?\_%[_ M`-_(_P#XBI:*+@1?9D_Y^+W_`+^1_P#Q%'V9/^?B]_[^1_\`Q%2T47 B^S)_ MS\7O_?R/_P"(H^S)_P`_%[_W\C_^(J6BBX$7V9/^?B]_[^1__$4?9D_Y^+W_ M`+^1_P#Q%2T47 B^S)_S\7O_`'\C_P#B*/LR?\_%[_W\C_\`B*EHHN!%]F3_ M`)^+W_OY'_\`$4?9D_Y^+W_OY'_\14M%%P(OLR?\_%[_`-_(_P#XBC[,G_/Q M>_\`?R/_`.(J6BBX$7V9/^?B]_[^1_\`Q%'V9/\`GXO?^_D?_P`14M%%P(OL MR?\`/Q>_]_(__B*/LR?\_%[_`-_(_P#XBI:*+@1?9D_Y^+W_`+^1_P#Q%'V9 M/^?B]_[^1_\`Q%2T47 B^S)_S\7O_?R/_P"(H^S)_P`_%[_W\C_^(J6BBX$7 MV9/^?B]_[^1__$4?9D_Y^+W_`+^1_P#Q%2T47 B^S)_S\7O_`'\C_P#B*/LR M?\_%[_W\C_\`B*EHHN!%]F3_`)^+W_OY'_\`$4?9D_Y^+W_OY'_\14M%%P(O MLR?\_%[_`-_(_P#XBC[,G_/Q>_\`?R/_`.(J6BBX$7V9/^?B]_[^1_\`Q%'V M9/\`GXO?^_D?_P`14M%%P(OLR?\`/Q>_]_(__B*/LR?\_%[_`-_(_P#XBI:* M+@1?9D_Y^+W_`+^1_P#Q%'V9/^?B]_[^1_\`Q%2T47 B^S)_S\7O_?R/_P"( MH^S)_P`_%[_W\C_^(J6BBX$7V9/^?B]_[^1__$4?9D_Y^+W_`+^1_P#Q%2T4 M7 B^S)_S\7O_`'\C_P#B*/LR?\_%[_W\C_\`B*EHHN!%]F3_`)^+W_OY'_\` M$4?9D_Y^+W_OY'_\14M%%P(OLR?\_%[_`-_(_P#XBC[,G_/Q>_\`?R/_`.(J M6BBX$7V9/^?B]_[^1_\`Q%'V9/\`GXO?^_D?_P`14M%%P(OLR?\`/Q>_]_(_ M_B*/LR?\_%[_`-_(_P#XBI:*+@1?9D_Y^+W_`+^1_P#Q%'V9/^?B]_[^1_\` MQ%2T47 B^S)_S\7O_?R/_P"(H^S)_P`_%[_W\C_^(J6BBX$7V9/^?B]_[^1_ M_$4?9D_Y^+W_`+^1_P#Q%2T47 B^S)_S\7O_`'\C_P#B*/LR?\_%[_W\C_\` MB*EHHN!%]F3_`)^+W_OY'_\`$4?9D_Y^+W_OY'_\14M%%P(OLR?\_%[_`-_( M_P#XBC[,G_/Q>_\`?R/_`.(J6BBX$7V9/^?B]_[^1_\`Q%'V9/\`GXO?^_D? M_P`14M%%P(OLR?\`/Q>_]_(__B*/LR?\_%[_`-_(_P#XBI:*+@1?9D_Y^+W_ M`+^1_P#Q%'V9/^?B]_[^1_\`Q%2T47 B^S)_S\7O_?R/_P"(H^S)_P`_%[_W M\C_^(J6BBX$7V9/^?B]_[^1__$4?9D_Y^+W_`+^1_P#Q%2T47 B^S)_S\7O_ M`'\C_P#B*/LR?\_%[_W\C_\`B*EHHN!G/J%M)J*R&>W6..#R@WG*=QW$],^] M+'J<UI<S2Z=K-E LH4,KHLG(SSG</6KMSJD=J5%S?)"6Y DE"Y_,U"=9=S_H M;37B@;G:`EPHR!G(Z_3V-/<15FOY+R^M[C4M8LI_(#!%1%C^]CJ=Q]*L_P!H M67_/W;_]_5_QJQ#>R2W$#1SNT3PNX^8X/W<']:2&YOYHA*)H45F<*&=\X5V7 MG _V:+ 0?VA9?\_=O_W]7_&F17UFLERQN[;#[,?O5[!L]_<5=\V__P"?F#_O MI_\`"CS;_P#Y^8/^^G_PHL,S)Y[224.E_;*<@D%U.<9QW]ZA9K9GW-J-KR^\ M@%1V`]?:MGS;_P#Y^8/^^G_PJ.>XU&."219H'**7*AW'`&3V],T"(?[0LCUN M[?\`[^+_`(UC7VF:%/&!`-)@DWJQ?R8FR >1SZCC-;@NM4(!!AP?^FK?X4?: M=5]8?^_K?X4#,O2V2R\M)=8MIH$C*+$JQQ@'<2",'C"X7'MFK%W/9SLC+?P1 MLN1D2XR/3AA5S[3JOK#_`-_6_P`*/M.J^L/_`'];_"@#,8VS##:I%M/7]\>1 M_P!]U:NKRSDLYHDN[;+1E1^]7T^M20ZAJDLDZ#R08G"']ZW/RAO3_:J7[3JO MK#_W];_"@!)-2LF<D7=OC_KHO^-4-1>SN1;^5>6B&.=)2?,'(4Y(K0^TZKZP M_P#?UO\`"C[3JOK#_P!_6_PH`QM#2VL'D9[JP7,4<1\J0?O64N3*_P#MMN / M7[HYK2EO[/SK4_:[? G0G]XO`S]:G^TZKZP_]_6_PH^TZKZP_P#?UO\`"AN[ MNQ%7^T+:34IYVGMTC\F*)?WRG=MW9/7CJ*AU4Z;J%L\<L]G(Q1D7S) 5&X8) MQTS[_7U-:'VG5?6'_OZW^%'VG5?6'_OZW^% S$TS3="T^6":.X22XA4JLLMV M7(R #@%B!G':MC^T++_G[M_^_J_XT_[3JOK#_P!_6_PH^TZKZP_]_6_PH>H# M/[0LO^?NW_[^K_C67J]EHFKRJ^H72R*J[51;LQJ/4X5ADGCKZ"M?[3JOK#_W M];_"C[3JOK#_`-_6_P`*%IL!@VVGZ99:G97.GWUK;PVUJ;00;@P*%@W7=D'Y M?>MO^T++_G[M_P#OZO\`C3_M.J^L/_?UO\*/M.J^L/\`W];_H>H#/[0LO^
M?NW
._J_P"-1M?V?VVS/VNWP'DR?,''[F0>OJ14_P!IU7UA_P"_K?X4?:=5 M]8?^_K?X4: 58M0MGO;R>2>WC$KJ5'G*> H&>OM6I8Z]8V:-LEM6D88WF8<5 M5^TZKZP_]_6_PH^TZKZP_P#?UO\”@“I;/I5K/<S02V:37,GFS.KJ#(WJ3FK
M’]H67_/W;`?U?:?`:=5]8?`OZW^%'VG5?6’OZW^%("B];OH]K;)/;
MDF6-V)F4;0DA8\9]*M_VA9?_=O
-_5_P:?]IU7UA_[^M_A1]IU7UA_P”_
MK?X4WJ!R>N>’-(\07RRZ]JYOK-)#)‘I[R1BV!V%02N,DC<3G/7’I5WP9$FAZ
M!!IEW?V<HMBR1.L^XF/<2H);G(! "M[3JOK#W];"C[3JOK#-_6_P*
M&?VA9?\_=O_-5_P:/[0LO^?NW_[^K_C3_M.J^L/_’];"C[3JOK#W]
M;
"EH S^T++
)^[?_OZO^-']H67_/W;_P#?U?\&G_:=5]8?^K?X4?:=5]
M8?`OZW^%&@#/[0LO^?NW
[^K_C1_:%E_P_=O\]5_QI_VG5?6’OZW^%’
MVG5?6’OZW^%&@#/[0LO^?NW_P"J_XT?VA9?_=O_W]7&G:=5]8?^K?X
M4?:=5]8?^K?X4: ,M"R_Y^[?`[^K(T?VA9?\_=O_P!_5_QI_P!IU7UA M_P"_K?X4?:=5]8?^_K?X4: ,_M"R_P"?NW_[^K_C1_:%E_S]V_\W]7!I_ MVG5?6'_OZW^%'VG5?6'_+^M_A1HS^T++_G[M_^_J_XT?VA9?\/W;
/?U M?\:?]IU7UA_[^M_A1]IU7UA_[^M_A1HS^T++G[M`OZO^-’]H67
/W;
]
M_5_QI_VG5?6’OZW^%'VG5?6’OZW^%&@#/[0LO^?NW._J_P"-']H67_/W M;_\?U?:?`:=5]8?`OZW^%'VG5?6’OZW^%&@#/[0LO`G[M^J_XT?V
MA9?_=O
-_5_P:?]IU7UA
[^M_A1]IU7UA_P"K?X4: ,M"R_Y^[?OZO
M^-’]H67
#]V_P#W]7_&G_:=5]8?^_K?X4?:=5]8?^_K?X4:,M"R_Y^[?
M+^K_C1_:%E_S]V__?U?\:?]IU7UA_[^M_A1]IU7UA_[^M_A1H S^T++_G[M M_P#OZO\C1
:%E_S]V
_']7_&G_&G5?6’+^M_A1]IU7UA_[^M_A1H S^ MT++_)^[?OZO^-’]H67/W;P#?U?`&G:=5]8?^K?X4?:=5]8?`OZW^
M%&@#/[0LO^?NW
[^K_C1
:%E_P_=O\]5_QI_VG5?6’OZW^%00:S<M<WE
MM,2)K= R.2KC-%@)/[0LO^?NW_.J_P"-’]H67/W;`?U?:6*]U22)
M’!A 90V/-;O^%.^TZKZP_P#?UO`"C0!G]H67
/W;
`?U?:/[0LO`G[M_
M^J_XT[3JOK#W];“C[3JOK#W];“C0!G]H67_/W;P#?U?`&C^T++G
M[M
^J_XT[3JOK#P!6_PH^TZKZP]6_PHT 9:%E_P_=O\]5_QH_M
M"R_Y^[?
+^K_C3_+3JOK#
-_6_P6WNM2E>4-)"BQD29’.3C…GH118
M"/`M"R_Y^[?OZO^-’]H67#]V_P#W]7_&K7FW_P#S\P?]]/\X4>;?
`
M/S!WT^%.P7O`:%E_S]V__?U?:/[0LO^?NW_._J_P"-6O-O_P#GY@_[ MZ?\PH\V_P#^?F#+Z?_"BP7*O]H67_#]V_P#W]7&C^T++G[M`OZO^
M-.DN]32X\H-"V4WAO,?D9QZ>HI?M.J^L/?UO*5@&?VA9?_=O-_5_P:
M/[0LO^?NW_[^K_C3_M.J^L/'];_"C[3JOK#_W];_"C0!G]H67_#]V_P#W
M]7
&C^T++G[M`OZO^-/`M.J^L/`W];H^TZKZP_\`?UO\*- &?VA9 M?\_=O_W]7_&C^T++_G[M_P#OZO\`C3_M.J^L/_?UO\*/M.J^L/\`W];_HT
M9_:%E_S]V__’]7
&C^T++)^[?_OZO^-/^TZKZP_]_6_PH^TZKZP_]_6_ MPHT9:%E_S]V_`W]7_!H_M"R_Y^[?_OZO^-/^TZKZP_\?UO*/M.J^L/
M_?UO*- &?VA9?`/W;/?U?\:/[0LO^?NW_P"_J_XT_P"TZKZP_P#?UO\
M"C[3JOK#P!6_PHT 9:%E_S]V_?U?:/[0LO^?NW
._J_P"-/^TZKZP_ M]_6_PH^TZKZP_P#?UO\"C0!G]H67_/W;`?U?:/[0LO`G[M^J_XT[
M3JOK#W];"C[3JOK#W];"C0!G]H67_/W;_P#?U?`&C^T++G[M^J_X
MT
[3JOK#P!6_PH^TZKZP]6_PHT 9:%E_P_=O\]5_QH_M"R_Y^[?
M+^K_C3_+3JOK#
-_6_P
/M.J^L/'];_"C0!G]H67_/W;_]_5_QH_M" MR_Y^[?\[^K(T_[3JOK#_W];_"C[3JOK#_-6_P*- &?VA9?\_=O_P!_ M5_QH_M"R_P"?NW_[^K_C3_M.J^L/_?UO\*/M.J^L/_?UO\*-&?VA9?_=O
M-_5_P:/[0LO^?NW_[^K_C3_M.J^L/'];_"C[3JOK#_W];_"C0!G]H67_ M#]V_P#W]7&C^T++G[M`OZO^-/`M.J^L/`W];H^TZKZP_\`?UO\ M*- &?VA9?\_=O_W]7_&C^T++_G[M_P#OZO\`C3_M.J^L/_?UO\*/M.J^L/\` MW];_HT9_:%E_S]V__’]7&C^T++)^[?_OZO^-/^TZKZP_]_6_PH^TZ MKZP_]_6_PHT9:%E_S]V_`W]7_!H_M"R_Y^[?_OZO^-/^TZKZP_\?UO
M*/M.J^L/?UO*- &?VA9?`/W;/?U?\:/[0LO^?NW_P"_J_XT_P"TZKZP M_P#?UO\“C[3JOK#P!6_PHT 9:%E_S]V_?U?:/[0LO^?NW_._J_P"- M/^TZKZP_]_6_PH^TZKZP_P#?UO\“C0!G]H67_/W;`?U?:/[0LO`G[M
M^J_XT[3JOK#W];“C[3JOK#W];“C0!G]H67_/W;P#?U?`&C^T++G
M[M
^J_XT[3JOK#P!6_PH^TZKZP]6_PHT 9:%E_P_=O\]5_QH_M
M"R_Y^[?
+^K_C3_+3JOK#
-_6_P*/M.J^L/
'];_"C0!G]H67_/W;_] M_5_QH_M"R_Y^[?\[^K_(T_[3JOK#_W];_"C[3JOK#_-6_P*- &?VA9? M\_=O_P!_5_QH_M"R_P"?NW_[^K_C3_M.J^L/_?UO\*BNK_5+>UFG;R2L:%R! M*W.!GTHL@*.M:?97AU![RTN+AXM/D,9A=U"'.<MM89&0#SGI5C6="M=+6P2T MTN>QCN)A#(S7?G!TP6V_,6(&5'3%&HQ:?<.RW=QL;:8V5+IHLJ>Q"L,CZU&L M>F"6*1KZ21HFW();^20X(SAG([FG?2PK%^-%CO($10J+#(H& !\O%<[XNO M;NRT32193W<+3W[0NUI&DDI4R3$A0ZLO8=JZ&&6.:]B:)T=?*D&5.1_#4,*K M/:V^^QDF\F65D8H"WFR?,N3UP2,6CH!REIXFU>TBN8;^Q$CVJ1’SI7".G
M3-’#O51@-M"%< EL#HS=7\0:K+JM&58FT>RN9KA(+IT4RB,K)\N’XD P
MXV@Y.#@5WTMK’-]H\W2W?[0@CFW1*?,49P&YY’)
,U7@TBQM[8V&AK’8FA M,:P(%*,<LN/0]Q0,XO1/&.H1W#68L)[V..]G$]PS_P"K1[R:- ">,*$Q@D<
M5U_AK4[G6O"B:E=VR6IN[-IDB63?A6BR,G ]3^&.^14G]CV'VB&?^PD\Z!F M>)_(3<C,Q9B#V)))/N35N.(V^GM:VNGRQ1+;M#%&B*JJ-A50!G@=*+".5UF^ MU&#5-8G@U*:*#3+""XCM!'&8YW8RY5B5WY;8H&UASV/0Y&L>,M4O+2\CM-.E MM8O/,$%T9"F9(YPCG’0E6’&3CJ*[:72+>_AO[C1%DOXE"I</ AD4#.&Z\ M9/YTV?0].N);J6?0(Y)+I0L[/;H3*..&/?H.OI0!BCQ=<Q7&K6EW90B[TVVG MFE\J4E&9$BD4D XS+DD<$‘K4VD^)KR_P!1L1]CMTT^\GN+=’\TF57A+AB5
MVXP61L<]"*T)O#NDS6$5E-X<@>SB)9(6MD**3U('09J"#PS:1>)FUP65R;O;
MM11#"JQ
*%)!50[9Z,S#G@#C!896\82:I96);1YQ!=W6HPJC;5;<NU05.X$ M#.TC/49S6)_PGEPL.JW%K;F]\FYW"VP0\,"VL#R=!U#R,#NZ$X[<=]-'Y^SS MM/FDV.)%W(IVL.A'/6LRY\.Z3=12QW'AR"6.69KB17MHR'E889SZL0!DT 8F MH^+[@6\L<5G)'<1.6EPP&R$E/+<$J0=PD7C'4.!]TTT>,[W;;R-8VPBOK1KF MQ5969W(>-51P%X)\P=">E=4]E!)YF_26;S$2-\Q*=RH254\]22!VR:Q;7PA
MIT.IZA?3:9-<R7H9’26WA"!&8,5PJKNY"\ON/’!Y.2P&)IWC/4KBYU&[DM$C
ML[2SB\VVD;:Z3
:+F([?EY!,2YR1@#@9)K7T_P2ZA<>)%T66PMQ<1&7[3*D MY*($6!P5RH)R+@#H.1Z<UJ0:%IL$<4</A^*-(E=(U6W0! _+@>@.3GUJ>PTR MTT\1BPT;[,(U94\J%%VAB"P&#T)52?H*+ :5%1;YO^?2Y_[Y'^-&^;_GTN?^ M^1_C2LP):*BWS?\/I<]\C!HWS?\/I<]\C!HLP):*BWS?\^ES_P!\ MC_&C?-_SZ7/_’R/:+,“6BHM\W_#Z7/_?(_P:-\W_#Z7/_?(_P:+,“6
MBHM\W_/I<`?(QHWS?^ES_P!\C&BS EHJ+?-P^ES_WR/\&C?-P^ MES_WR/\&BS EHJ+?-SZ7/'R/\:-\W_/I<_\?(QHLP):*BWS?`/I<
M]\C
!HWS?\/I<
]\C
!HLP):*BWS?\^ES_P!\C_&C?-_SZ7/_’R/:+,
M"6BHM\W_#Z7/_?(_P:-\W_#Z7/_?(_P:+,“6BHM\W_/I<`?(QHWS?
M^ES_P!\C
&BS EHJ+?-P^ES_WR/\&C?-P^ES_WR/\&BS EHJ+?-S
MZ7/
'R/\:-\W_/I<_\?(QHLP):*BWS?`/I<]\C
!HWS?\/I<
]\C

M!HLP):*BWS?\^ES_P!\C_&C?-_SZ7/_’R/:+,“6BHM\W_#Z7/_?(_P:
M-\W_#Z7/_?(_P:+,“6BHM\W_/I<`?(QHWS?^ES_P!\C&BS EHJ+?-
M_P^ES_WR/\&C?-P^ES_WR/\&BS EHJ+?-SZ7/'R/\:-\W_/I<_\
M?(QHLP):*BWS?`/I<]\C
!HWS?\/I<
]\C_!HLP):*BWS?\^ES_P!\ MC_&C?-_SZ7/_‘R/:+,"6BHM\W_#Z7/_?(_P:-\W_#Z7/_?(_P:+,"6
MBHM\W_/I<`?(QHWS?^ES_P!\C&BS EKGD_Y&#6/^O=?016YOF_Y]+G
M_OD?XUA1%CK^KED9#]G7Y6Z
=%-(“OXI^VII&DR:?JEU8,UQ;0/Y"1-O621$
M.?,1N0”<8QUYS6&?%&IZ!97\UW$E
;;KJ"W9ISYI=%D<!AMVJN(V’‘J.,=.
MWCB,UE;)<:?-(J"-U#("RX*L,GJ" 13)]-M9XO+GT;S(_,:7:T*$;V!#-]2 M&8$^YH YZ;Q=?6^N?8Y]*Q;0/%%=W"R96)G4,,'&" &7/<\X!XS7L_&M]=WZ MZ?'ID:7EQ(@M'E=EBDC=)G#D[<_=@;H#R1[UU4NG6TVH1W\NC[[V-=J3M"I= M1SP&SGN:ICPWHZQW,8\-VX2Y*F91:QXD*DD;O7!)/XFBP&#%>:F_@31[@:A/ M;WLE]!%-+'LD+*]R(V7,BMQAN#@'@>XJEK'BC5KO2[>!+>"VDU&55MVAN7!\ ML7<,+J[!04+"48*Y(YP00*[&;1=/FT^WL)="1[*W8/# UNA2-AG!5>@(R?SJ M4Z;:D0Z-D0’,7[E/D^=7X]/F16^J@]J,C3]>N?[1M+26UB%I)=/IRR"9GD M$T<3N2=PY7$;#.<DD9'6K^NWTVG:1?3V^T2&\@BWL,K$',:&0CT4,6/3[O45 M933[9-2;4$T?;?,NQK@0KYA7TW9SVJ=%D*722V,[)+)G:5!!78!SS[&BPC!N MKG4-&F@L8+J75;JXCEN?,OVCC"1Q[ P'E1CDEQC(]>>E9MEXVO;J".\CTI9; M.YD>"VBBE)G>18&F*D!1D(1P>I%;J^&]‘6U^S+X;@%OYGF^4+6/;OQC=CUQ
MWJW-IEI/"T4VC!XF=I"C0H0692C’'J59@?8D46&<N/&MU]DNIA:6DAL+=KJ]
M597!1%+ HH9 2XVG@X’3FJ?A[Q??
:(;+[!/=P)=&&XNW<Y4R3LJ<GC !7@G
M/&!G@5UW]AZ;Y=HG]@1[+0[K=?LZ8B.<Y7TY]>ND6W<%TNAH+B#/E2B!-R
M9))P>V23^=%A&A)Q_1?]>__+.:EJNYG-TCBSN-HBV'Y1UW$^OO3]\W_/I< M_P#?(_QI-#):*BWS?\^ES_WR/\:-\W_/I<_]\C_&BS EHJ+?-_SZ7/\WR/
M:-\W
/I<P#?(QHLP):*BWS?^ES_WR/:-\W/I<]\C_&BS EHJ+?-SZ
M7/`WR/:-\W
/I<P#?(QHLP):*BWS?^ES_WR/:-\W/I<]\C_&BS E
MHJ+?-SZ7/`WR/:-\W/I<P#?(QHLP):*BWS?^ES_WR/:-\W/I<]
M\C_&BS EHJ+?-SZ7/`WR/:-\W/I<P#?(QHLP):*BWS?^ES_WR/:-
M\W
/I<
]\C_&BS EHJ+?-SZ7/`WR/:-\W/I<P#?(QHLP):*BWS?^E
MS_WR/:-\W
/I<
]\C_&BS EHJ+?-SZ7/`WR/:-\W/I<P#?(QHLP):
M*BWS?^ES_WR/:-\W
/I<
]\C_&BS EHJ+?-SZ7/`WR/:-\W/I<P#?
M(QHLP):*BWS?^ES_WR/:-\W/I<
]\C_&BS EHJ+?-SZ7/`WR/:-\W
M
/I<P#?(QHLP):*BWS?^ES_WR/:-\W/I<]\C_&BS EHJ+?-SZ7/`
MWR/:-\W
/I<P#?(QHLP):*BWS?^ES_WR/:-\W/I<]\C_&BS EHJ+?
M-SZ7/`WR/:-\W/I<P#?(QHLP):*BWS?^ES_WR/:-\W/I<]\C_&
MBS EHJ+?-SZ7/`WR/:-\W/I<P#?(QHLP):*BWS?^ES_WR/:-\W/
MI<
]\C_&BS EJGK’((OO^N#P#H)J??-SZ7/`WR/:J:N\ITF]S:W"CR’
MYC ^4^]"0$]YK%OIY"7-SY7R[L8)P,XSP/6J4?B_2))DB35(C([!%7)R6)P
M!T]:CUNTM+D:@;K3K>=;!]C2[?W7/WAN[3TJD-/TF]U…RM=$TV.XCG!>:
MQTT-]G(E(0E]X)^[DD#I5):";.C9BVH1%B2?*D
]EI+/_CQA_P!Z7_T=)532
M+A[N’3KF4
))K0R,%Z9H3C\ZH>(-:30]!M)G>(SW$ENLLQ
=QDRRG<W(R!
M@\9&3@9’6IE)1BY/9#2N[(P_MWB"R$UY=31>==W:NT5LLWD(GF",-JG!V@
MY;=GY&:Z[1I;F?1[&;4(Q'>201O.@&-LA4%ACM@YKR3Q)K.EWWA[5I]:O\
M3-2O&N?LL,T05&BB*+S&C.VTY+’. !T/P@\37?B76UGOYKVVM6A6!I
MEB##(;.3&JCL/6N?#XZ&,4G3C91=K]_0Z’@:L
3K/:]M^IU.D>M,U..16E
MM4EA%Q$;I/$L9&=ZYZCD58U;7].TRUNY9;F%WM55I(ED7>NX@+D9^4$L.3Q
MSFN=T_P’;VVCZ%;2XN+FR-N9WN)9)E81K@K&’)VKNP0H' XX%1W_@V]NW,1 MDLUMX[N6Z27+&2423^:4<8PH)4<G.!P.W1HRFN1#5@Q;?:))7E0
MQH,1G&’!_UJ]UHKVUF:-8KF"1I%#H%D!+02"/4$\^U<+K7@2YOM:OKV M.>$0RRB6.!99(2<)NTNGC]TW(SU’O6OX1*C1+Z:[D2W\R2W2)=CO(T9\V
M:1QOD)9AF4<D\X)PO !U=%%%( HHHH
"BBB@HHHH****"BBB@H MHHH"BBB@HHHH****"BBB@HHHH"BBB@HHHH****"BB
MB@HHHH
***"BBB@HHHH*****K73>=)’’ [[" 2"/0’^M26T_GA\HR,
MC;2#] ?ZU!B>*YG9(=ZR,"#N_A _I4EDDB^>TJ;"\FX#.>,?TI@%[>16:Q
MF4.=[;5"C))P3_2JIUJU5D$GF1AF"AG7R>G-2:SIL>J69AD9D8'<CJQ!5NF M>",UPK^&-;W$%/,4'@F4D?7!DII(3N>D@C(.0:K75
:VEQ;07,R12W+%(0W
M&]@,X!]:K^‘H+JVTJ**^)\Y2W!;<0N3@9^FI^+]%F\06$>G"2&SE?-S(5W
M2A1R/+R"Q/\1Z=LFD,U+&_M;\3&SF280R&)RO(##J,]\5D)_PC!K’
%[K M_P"@BK/A;3;C2-*73[AX)([=BD$D2;"T?8NN,!O7'!Z]\563_D8-8_Z]U_\
M010@-J_N!:6+W#S+% 9"JDMB/.,X..GI7FQ^+NFK?6=JUI()+N0Q0_Z1D, M0<'I'Q^.*]+N[9+VT:UEF\E)K<Q^85W;28R!QD9Y]Z\?L_A))%KPN#)9I KK M*D@20L)-Q)RANMHX(Z_2EU’‘EL^9OR/7FN8H[4W,K^7$\PM(1\HQGD\50M M==M9H9Y[A)[&VBVYFO$\E&!.06/^<BK&LZ7!J&E7>F><Q@EC, E4<XQC-8M
M_8:[J M)+J’2C+8WGB03/Y=QF.2,A\I\G^L##&[D8]Z$(W%U.P>[2U2]M6N MG7<L(E4NPQG(7.2,<_2F'6-,$32'4;,1K)Y)8SK@/_=SG[WMUKD[/P3/;Z=< MPM-;R32W=M<!^00L;1ETSC(SM8#'J.E,L_"6JVL,+*]E+Y:36\=G-*SQPQR" M/D2[-[L#'QN&?G(W<<L#JK37+*>22.2:.WD%R]JB2R*IE=2 =HSSU%#ZJW_" M1+I4=I))B 7$LX90L:L7"C!.224/3UKAT^'-Q'(]Q’=1LOE$M<SPA%!)W[8
MR/,)SRI(’'7DUU;++'XYD9K:X:WN;".%9T4[%97E8AF’3AACZT 7-6\0:7I1
M(OKR
-E,8==W*!Y%C4M_=&YUY/;)[&K/]IV’F-’]NM?,6/SF7S5R([Y&?N
MCGI7-3>$[B&PFL;.:UEM&FBNT$\060R1S)*$=U&'5MI&XKN’4[R:RM4\`W-_ M-J3L;<-=QS,KM=3E8WDA:/8(N$VC<?FP3C^$$Y !V\FL:9&[I)J-FK(-S!IU M!49VY// R0/K2?VQIXN?LTMY!%<&3REBDD56=N/NC.3R:P+GPCOU@7,`M8[9 M;A)!'LZ1K;21;>F/O.IQ[>M8^F> ;RVTK5K>>YM9+B[T[[)%)ACLDVD;\D9Z M\\<T`=GJ&O:9I\4SW-[ !!)%%,!("8C(ZHN\9^498<GMS5J/4+*6X$$5W;O. M8Q*(UE4L4/1L9SCWKA;_`,$ZE>:V][+/;R;6\T-)<2L)V6>5$:(C9&,1;"5
MR<’.#TIU[X#GOKV_DEDBA^UI
?.2ZG;R7D@,6U(<JF!N)#'GV!Y !TUMXITF
M>>[5;R#R+9XXVN!IB+.I8#<#@=.]7]8U’2;!KNY65HPZ1A8DW,S.X10!W)
M9@*P+'1M71M4E:/2+6:^>(;5#SQQJBD$[<)N)…,CUR<8,MUX5C
.$5CT6U MN)O+%Q!,9'?RVVI.DC!?+"A#A2!L"X//7)HU=-UFROU_=R^5,’,;03?)(K
M9P5/.<<U4O/$^G0S:=’;SP71O93%&T<Z;>,;OF)P2-P^4^”+66:`
ML["(7.G2V2SR,TLR/)D&0LQRQP1U.> -.,W9\21ZQ?+8Q$RFV@)=%.%"L
MI
CG@YX’;K0!K:7XDT^_C9S,EN#,((Q.ZJ96
(XV\…*U8;B&<N(9HY"AP
MP1@=IR1SCW!
(UYA:#2[BLH8+B>"X<+;.!=3PHH$4:%\1D%^4/RDCCN*[/
M3M$N=+.ZE:Z=);P:E<R74=P$RHDD=V1FR.<;ESP>E !#XPT:6W,[7/DP”[
M-GYDPV+OP2&R?X”%.&Z’M5NV\1:3<6L]P-0MHXH)WMY3+J;)%=E(.3QRIQZ
MCFN5B"76FS6QL-1>^M[5(!’;ZAL)B5D1=T<8PCGDACD#ZU:NO"^H&PELX
M3;/;;)KG8+F2W:<2.TGSO&-RE"Y)##KCI1H!OZYX@T_1H6:ZN8?,4Q[HO M-4.%=U3>03]T%LD^U6O[5T_R8)?M]IY5PVR%_.7;(V<84YY.?2N,TWP;J-IH ML>ERM83HWV1Y+EV;>&B$(9 "O*GR2<DCENE-UKP'-?:I>W"O"\%R[A8?M,T" MQ(R1J3B(C><HWRY .>HH`ZZ;7+*/7+;25FCDO)@Y,:2*6C"J&^89R,@C%);> M(=)GM[B<7]M'';SO;3&614\N1'9"#D\<J<>HYK%TOPY>V>OVTS_8FL[>:ZF6 M8,WG2>>[-M*[< +NQ]XY`'3I3!X;O[:426L>GS^3>7-S&LS,HF$[N[;\*<%2 M^!UR!GCI0!UZRQL[(KJ74 E0>0#T/XX/Y5D3^)-/B;3$\Y&GU!HQ%#O7S-K@ MD,5SG'':CPWI$FCV\-L[02I#9V]L)U0B60QJP)<^G((';+5QR> =272(-+\^ MQ\DB)I;O+>;&RVRP%47;R/EW9+#J>.] ':R>(M)22T3^T+9A=2M#&ZRJ4+@9 M*[LXSCM5K^T[#;<M]NM=ML=LY\U<1'T;GY?QKCM(\&7.GW=M>K%:>?#*,Q27 M<]P&7:REM\F2"-Q(4*!QUYXJ6G@&XM+-HU2&:>)$CAF?4;D,Y4@^80=RQG@' M8%93G!.!@@';:;K>G:E=W=M97<4T]LRB15<$X9$<,/52'7GI5B[U"RLY(H[R M[MX))3B-9954N?8$\]17/:38W?AHWUQ=K_:7VGRI))K>'$S2"*.(CRU&-O[K M=P1@MC'&:P_$D5_JU\9M.TJ=Q?""W?[7$T;6XAD+[QP1\PD(Y(^YWH ]#N)X MK:%YKB6.*%!EGD8*JCW)Z5CS^)]-@D7S6G6V*@_:C$PA!*[@"WKC!_&G^(=$ M&K-:S).(;FU8O%YD2S1$G^\AZ_52K>^"0<O6M"U36)K83O86WE+E;N#=YT)* MX9%!'*DC.<KQ@8XR0"]'XILY(WV6U^TZ[2+<6Y\QE;=M<#^Z=C<_[)IMEXKL MK^X>.PM[ZZ1"H::*`F,%HUD`SZ[77\ZPX/"^L6=O,EA'I=O%.8HY[2*9T21$ M#Y?>$R'<LH8;?NH/FYXOCPY<-K5K>K9Z39NK1R2W-J&$PVJ%,6=HWJ0N-Q*\ M$#;QDF@%I/%]DTLL)M-16ZC9$^SM;'S'+*S84=R%4D^@P>XK0LM>L+V]M;6V ME+RW-J;R/Y#@QAE7.>F<L.*R3H%]##97<#VTVK174EY-YK,L<KNC1D;@"P"J M0%R#PBCWHT?0+[3=3T1@]M)9V.GRVDC%F$C.[1MD+C&!Y8[_`,1].0#H;&]M MKZ)I+.>.958HVPY*L.H(['V--EU*QBFFBEO;9)8$\R5&E4-&O'S,,\#D<GUK M,T_0Y%UMM7OYHOM>PQI%:QB-`A.?F;[TAY/4A><AV@C-8.L>>#KV_\^!9;1;?[ M1-=),2QDD,F[]VXQ@*-YP<G[HX&>`#M+>]MKFU^TVUQ%/;X)\R)@ZG'7!'6L ML^)K$Z7::A"EU/;W2&5#%"250=68=@,CKZU-I>FR:?=:Q+'Y6R[G6:&,?*%Q M#&F#QQ\R$\>M8<>@ZL/"%II$T6E3LJM',LC.5'S921&V]5_NE>21R,<@&Q9> M)-/O;Z.VMVE82L4BGV$12. 6**W=@ QQ_LFK5QJ]G;ZHNGS2%;DVTEW@J=HC M1E5CGIU<<5SVG>&M1LY[5/M%M)!9W$U[%.Y;S)99(W3:ZXP%'F$Y#$G'3GB] M?Z3J-[K5C<2M:"!-.N+.=E9MV^4QDLJXQ@&(=3_$?3D`?%XJLIHG:*"^>4;" ML*VY,DB/N*NH[J=C\_[)JU=:_90:+%J@\Z:VE9$18HRSLSN$50OKN(%<X?#V MO1Q;H9+ .8;>QDC$\B^9;Q>:<[PF59C(`0`<`'#9((V+W2[R]TEK*XLM'>W$ M,6RTD5GB\Q7)8$X'RX";3MR#DX/ H !XI@-TML-.U4W!C65HQ:G**S,H+<\9 M*-^5:.K:K%IB1F6&YF+Y.V"(N54=6/H!D?G7)/X-NC!$JPZ4LYW!+@!A+8 L M6 @;'S!<\#Y,$=>>-G7;+7+U8HHAITUIYLC2P/*\7FIQY:LP5LCKN'&>!G&Y M2 65\3Z:;B-&>5()`3'=/&5AD(0N0K'J=H8_0&FW?B'R+6RNDT^Z:VN+F.V9 MW C,>^18T8JQR02XZ=JR/$7A>^\0.8[K^S[:/R)(A/"&,C(\3IY+`@#8&?=G M/)0?*.U:?2+NPT^&T2Q53=:G:3K;6 +P6J1SQ,YW$+C(5FZ#G/6@#O:***0! M1110!'/((89)""0BEB![56DO'CB,CVT@0#).1TJ>[1I+69$Y9D('UQ56X^TR MVCPBWQN7;G>*: T*=:P2WE]':P$*S LSD9"J.^*;6#=WIADG?;*9LD*BJ><= M!G_/6FE<&;4I,.JW%F)5G6%1ND5-N&/;J:DK-TU4L;6..=\W$C;G."<N>M:5 M)[@C,EU[2XH+J:2]B5+:40RYSE7/1<=<G(QZ]JGUC_D$7W_7!_\`T$URVI>% M+Z[\1'7UGLUU"WD`M8#'F)XQU\QMN[><G##[O;.3GJ=8_P"01??]<'_]!-"$ MK]1UYI]G>E3>6T,Q48'F*#BLJVTB6SU"&YM(O*\IL[8;YH4F`=F4.HC/3=C@ MUG^.?$]WHHBAL+/S96>,M*9HPJ+NRP8$Y&55E!QC)%+IWC*.6]EBU"QO; %4 M:*.:W8/M*@LS=> 2!]0::N#L;^E6[6<>G6TA#/#:&-BO0D*HX_*K]CH[7NC) M/=7]E#;>;*JK/;[@/WK]27 )Z]JB'_'_`!?]<I/_`&6K\.1X5L&5D0K>S$/) M$9$0[Y0"R@@D9QQD?44XZ@RO!X6M+B39!J&CROC.U+-6/Y"2L/QA=67@N!5F MU"U6ZF>,);Q:>X+@M@D$-@X7<V.O%=+HYO)-6M!/?:;=RKO(>TTV2V5%P,A@ MTKY)[<C'H:Q_B]H6H:CI%L]B]W=:AYR$VMNY2.2-`6?Y6W;2?F *E6.X*21U MN,4WJ2V[:#]$N++6[J:+3?$.GSK'Y0618/ED9T+A5_>9)VX)'O\`6M__`(1F M]_Z"5O\`^ A_^.5XW'>IXA\3Z1_PC.C6R-YJP3(]JZPA%!$D4HQ@$%3R.A^G MS>_7L>H2Z))'9R06NI-#A6^^B/CG!(_(E3V)4]#52FHNR(IU'-7M8PF\/722 M(C:M:J[YVJ;4@MCDX'F<T_\`X1F]_P"@E;_^`A_^.5S)T2Z_M31;G4;'6?M- MI=EKRY2\>5IF9"JNK(5_=;MQ*!450>44'%96C:9XTGE@CU#4]71I;B$:@88G MB"MD^84=Y7!7[P_=(BX(( .W$61I=G=_\(S>_P#02M__$/P<ID/AZZFB M26'5K62-P&5UM20P]0?,KEO[-\307,EQ#+K#2&YNY@KW4CIQ?[(1M+8V_9V8 M[<8(P2,@&H/#.G^*[+3(]0E359M5CN;6);6>[<1-!]BA\P%"2@_>^8"^W(.: M+(+L[!_#UTCHCZM:J[DA%-J06P,G'[SGBG_\(S>_]!*W_P# 0_\QRO/]'TW
M7[CQ#:2ZNNM3Z59W,<Z%$N89$D=)D< O,\CH#Y6<,$P?NCG,^EVGC%([A]3N
M]6F5F3^T(8(98S];
)<S,2<;L>2L:^WW119!=G96>B37L3R6NKVLJ)(+%;
M1N’1BK#
%G4,I'X5(_AZZ1T1]6M5>0D(IM2"Q SQ^\YX!KFM&TB^3PS:PZ= M8:Q!J9O;^6VN);HPO!$]R[*9FD#[]P*':ROGK@XS6SXWM_$9T[11IDCRWT9? M[5+;+L!'DL"0,\9/3WQBBR"[+%OHDUS-=10:O:O):R"*91:-E'**X!_>==KJ M?Q%21>'KJ528M6M78J2MJ3@@X(UG4$8KSJ32$2W>H/H;:]8:7<:A),AN8
MKB>Y>3[-:)&S?OD?;E)Q[,G!7IB_<:/X@LM,NK>UDU:WGDU66XOY$6>57B M=IGC,*12H0=S)O$;+S][-%D%V=M+X>NH8VDFU:UCC7JS6I 'X^93_P#A&;W_ M
"5O_X”'XY7":OI/B?489[&Z.IZDTE@BN[&2S6#$:D@KF.9F;)[.A/5L#
M;W[ZS86NA_9+74H[;4?LV+>'4+D?: Y7Y-XD)8G)‘WLT6079’_PC-[T$K?
M,!#_P#'*/\A&;W_H)6_P#X"'XY7,^+^YO;[Q+'IESJ<LD6FVH'VV=Y46 M])N?,V%V8 <19 P.!Q4&G:9K>H:IIUO*_B*#1FEB-X9;R>*3SQ!<^:0^[>(B MWV; !V9'ZT6079UO",WO`T$K?_P!#_\9-X>NH8VDFU:UCC499FM2
M![GS
R-2M?$-]X7-)(^HI>I)
]V8)FB<[;>?R]Y4@D>8(N#P3C.:Y_Q!X:
M5ZQX5U"V^V3;(-LD=I>PO<&X=H(6)#>8I&R7SL [E!/ &Q<%D%V==+IJ0SSP
MR^(=-2:"/S98VB :-./F8>;P.1R?6H5M[1[87">-’:W,@B$H52I<C(7/FXS
MCG’6LKQ=H+ZUJ0M1INHJJK/]L-O!%%’(&AD’G1.0=TA9U&QV90"25W ,&O:W
M4F@W<5QI^JRJ[O%8WO`9"W0!6,L)8Q&%4,RLNX(/E4<@D&BR"[-F_L5L+Z
MRLKO6[6.ZO2PMX_L;DOM
@]‘X +KR?44Y=/C:YGMT\0Z:UQ;J7EB6’+QJ.I9
M1)D8R/SJ"Y#6GB7PK:7,T%E>/H%];(#+@";?9 *I)))R#CDGCO5&^G^P^"[G
M2H],N[+6C:I8B[-OL26>1DB&)AP=SN#G/J3THL@NS3%G"6M%/B/3%>[17MT:
M’:TJM]TJ#)DYK0_X1F]Z"5O_P" A`CE4]*MDT75+BSN=*FEEGNBUI=Q6O
MFQ11’ C4L/N!,8XP!QQ4.@:;XOA\0^();K5-*\F9T,;?V7*%=O(4!E_T@X4 M-C(YS@\KG@L@NS2_X1F]_P"@E;_^A
^.56_L@;'M/[=T[6B>8T/D?.J_W
MBOF9Y'-+X"L/$=G<:LVNWME+;R7L[I'%8O"[$D8<,9G&S&?EQGWKF]2A>"" MVT2:W>#Q!)??:%U.1=J3()@SJLO5F>-O*V=3O/& 2"R"[.A32O,BAD37].:. M?_5,(<B3D+\I\SGEE''<@=ZG3P_<N'*:M:,$)5B+8G:1U!_><5Y_IOAK5M,_ ML+2VT6XN;"'2?W)!*"UN)9+3Y2PY3RY(VERHR I(R:[8:1?OX)N+!;=Q?)=Q MO=$MC^T%29'F()_YZHK+@X W;>@S19!=CX-+%Q8O>0:_ITMF@):=(=T:@=<L M),#%/L=&>_@$]CKEA<PDD>9#!O7([9$F*YYP-7UZ2_TJTECTNQEA-]I#1^7- M.467YO)[X+Q,,_>\KC) J?Q%)J=X#+H=CK-FIM6&G10QO;JE]EL-.@(!C_U? M^L!3/'6BR”[.B_X1F]Z"5O_P" A`CE1S^'KF”&2:?5K6.-2[N]J0%4#
M))/F<"N3NM(\2+;V"P3:YNO[QAJ’^FRDQQ#4(=NSYOW0@R_<V_+]!6SJUIJ
M$/@K6[:[%W-96M^C;9G:62;3TDB>923EI T8F7!R6!V^U%D%V.,=F(R[^
-)
MC50I;S(PA7<,KN!ER"1V-.N;:&WAGEEUZS\N&-)76C/\C_=88<Y!]16)K.E
MWVK>-)IM)LD1&U"UG6]N;(S6SQBUG4M@,N\9=1PPY(-;%O:6^@:]IT’VR,)9
M6-R^H7#D1)^]E#(O)P%WF3:I)(!’)ZDL@NR_8Z)-?65O=V>KVLUM<1K+%(MH
MV’1AD$?O.A!%3_`",WO_02M_P#P$/`<J;X:_\DY*_P#8
M?$2M='19 M!=G+?\(S>_\02M__ 0__’*/^$9O?^@E;`@(?(Y74T46079RW_",WO\
MT$K?P!#_\’*/^$9O?^@E;P#@(?`XY74T46079RW",WO_02M`P$/

M,<H_P"$9O?^@E;_/@(?CE=3119!=G+?`",WO_02M_P#P$/`<H_X1F]
M_P"@E;
^A_^.5U-%%D%V<M_PC-[_P!!*W_\!#_\<H_X1F]_Z"5O_P" A_\
MCE=3119!=G+?(S>P#02M_$/_P`<H_X1F]_Z"5O_`. A_P#CE=3119!= MG+?\(S>_]!*W_P# 0_\`QRC_`(1F]_Z"5O\`^ A_^.5U-%%D%V<M_P`(S>_] M!*W_`/ 0_P#QRC_A&;W_`*"5O_X"'_XY74T46079RW_",WO_`$$K?_P$/_QR MC_A&;W_H)6__`("'_P".5U-%%D%V<M_PC-[_`-!*W_\0__!RC_A&;W_H) M6_\X”’..5U-%%D%V<M_PC-[_T$K?_,!#P#’*/`A&;W_H)6_P#X"'X
MY74T46079RW
C-[_T$K?\`\!#_`/'*X^XM)++Q/K,$LJRNMNI+JFP'*CMD M_P`Z]9KS+7O^1TUS_KV3_P! %)K0$R/[>JHXDN9P\,UO:.$TQV DE4% #YG( MY7G_`&AZUU'_C-[T$K?`!#/'*Q!X9U.X\065U#,1I4SVUU,-PQO18 MC]W/)'V5%!_Z>&_N?-1T7P;J5MXBM[NY&I-=)<^;+>"6T6*1=V2-PC\\@KQ@ MG)Z$@<UZSP>%G!2C42=KM;]-NG6_WHSYY)[&WI^F37UU?V\.HH);*40RA[%E M^8J&!'[SD$,.:O?\(S>_]!*W_P# 0_\QRJ LM<NY/%L2Z?+8’41OM;AIXR,
MK$D8’RL2"=I/3I523P
++:3KIGA<:2I\LS1?:8Q]K02HS1;48J<HKKER,;L#
MAFQF’2;^-+;JGNE?JNM]K[:CYV;7
”,WO`T$K?P!#_\’*/^$9O?^@E;
M_P#@(?`XY7+:IX3O+ZUFCL-73[62XLV2T,T>(VCD9I9OE8CE"$XY/IBJ\G MA/Q!=:/86NJ1WLL-K)-N@@FMG,I<1E'_'P9,+B4= V7XX)K2.74)6
?):];
M=K]&^N@O:/L=C_PC-[T$K?,!#_P#'*A?0YTNXK5]7M1<2H\B1_9#EE4J& M(_>=BZ_G6CX)TR;2= CM;C[0"'9E2XDC=T4GA?W:J@QZ*,#U-4_$^AM=>)M' MUF#3;>^FM(Y80)&"&-F:-DDR?X5V-G&3\W /-<<:%+VSIN6FNNFMEIUZLKF= MKB_\(S>_]!*W_P# 0_\QRC_(1F]_Z"5O\^ A_^.5BZUX>O;BZU0+HXN-1
MN)’:SU?S8Q]D!'R’D[QL// /MFO0Z5>A"FHN,KW]/+S?XV>FP39Q3Z5+6
MGBU2&9;4NLJQ63,P91DJ!YG)]JDT[1;C4-/MKVVU2!H+B)9HR;-@2K $<>9Z
M&DT?0YM$O/$1L](@(O’EN%GCD56F+#Y8P#WSNR6P.1C/…9LO"FN0:#&7: MV5S8QOIMHEPZW4;M++'(IE7YBP)>,% 6!7& >*ZXX+#SNE42U5F[;/?2_07/ M+L=?_P(S>]!W_/ 0_P#QRL[5+%M,NM/@O-5AC-]-]GA?[$VSS-I8*3YG M!(4X]3Q4GP\\/3Z+/>R/%?V\,JJHBN9+;!8$Y8+;HJ]"!DDGCI5KX@Z+/KR: M+:QVLLUO'>^=-+%(B/;CRI$61=W\2LZN, X*9]*R6&HQQ'LI3O'NO2_YAS.U MREH=@^MV/VRPU2)[8R/&KM9,^UBIO.1D’![UH?(S>`02M__ 0__'Y
MC2?#-W:Z=90ZCX86\LH%FCBTX30XMR9G<,MMQL95X.?E],5GZQX,\13%9;"
MW\JZCLY$247"J02)VA0’/±C;C/0% 1P,UTO+L-*HTJJ2N[7L_U_3TN+GE;
M8[?
(1F]_Z"5O\^ A_^.4?(S>P#02M_$/_P`<KD]<\(:KJ>MW=[+% MJGGW+J]O+#-9J+0;5 7>\;2*58$Y3..J\U>LM!U*R\1M?6VCS1F367E:0728 M%JT>TX7=P"^'*@9.,]:S>7T5&ZJJ]KVTW[;CYWV->WT.>Y:=8-7M7:"3RI + M1OE;`.#^\]"/SI\7AZ]D:0?VA$NQMOS63#=P#D?O.1SUI_AO0VT;Q'K4L6FV MZ17UPUR;Q& 9@54;-O7.X,3G`YXSSC&TS1]470]<T^'1FTV":\2Y@A\^,J\6 M8O,A^5CC<$<<\?/R>M9?5*+;M-6]W>W7?KT_X>P<S-K_`(1F]_Z"5O\`^ A_ M^.4?\(S>_P#02M__$/_P<K%N?#K7&DWD%GX9ETN*39OA@NX0\N#U"?-$V M/]O^@K:^'^EW>EZ?<17=E'9J9!Y:+M4LH'WG1&:,,>[+M#'^%< 4JF$I0IN: MFFUTT_1L:F[F5XAM9=!M([F[O'EB=UCS;Z<\A#,0JYQ)QDD#\:IWDIM+V&UF MN+KS9+<71VZ5(PCC)P2V).,=QVKJ/'4-_<Z,EOIE@]Y*UQ!(P65$VK'*CG.X MCJ%(X[U3O3K*>*+?4+71))8VT_R#NN8E$<C.&PW).!CDJ#[9JZ%"C*FG*U]? MM);6MOMU$Y.YSUY>I;75U"EQ=77V:))WDM=*>5/+92RL").00#T]#72KX;O6 M4,-2M\$9_P"/1O\XY7
P^&-4T?5+9[;3-0U:996=O:20WZ017#PQNI,D9? MH2XZ@D8./?U-22H+#!QR/2EC:%"ER^Q=TUO==ETZ?/TZ!&4GN<O_,(S>`
M02M__ 0__’*/^$9O?^@E;
`@(?(Y74T5P61=V<M_PC-[_-!*W`0__ M!RC_A&;W_H)6_`X”’..5U-%%D%V<M_PC-[_T$K?_,!#P#’*/`A&;W
M_H)6_P#X"'XY74T46079RWC-[_T$K?\`\!#_`/'*/^$9O?\`H)6__@(? M_CE=3119!=G+?\(S>_\`02M__ 0__'*/^$9O?^@E;_\`@(?_`(Y74T46079R MW_",WO\`T$K?_P`!#_\`'*/^$9O?^@E;_P#@(?\`XY74T46079RW_",WO_02 MM_\`P$/_`,<H_P"$9O?^@E;_`/@(?_CE=3119!=G+?\`",WO_02M_P#P$/\` M\<H_X1F]_P"@E;_^`A_^.5U-%%D%V<M_PC-[_P!!*W_\!#_\<H_X1F]_Z"5O M_P" A_\`CE=3119!=G+?\(S>_P#02M__$/P<H_X1F]_Z"5O_. A_P#C
ME=3119!=G+?(S>
]!*W_P# 0
`QRC
(1F]_Z"5O\^ A_^.5U-%%D%V<M
M_P(S>_]!*W_/ 0_P#QRC_A&;W_*"5O_X"'_XY74T46079RW_",WO_$$K
M?P$/QRC_A&;W_H)6("'_P".5U-%%D%V<M_PC-[_-!W_`0__!RC
M_A&;W_H)6_`X"’_..5U-%%D%V<M_PC-[_T$K?_,!#_P#’
/`A&;W_H)6
M_P#X”'XY74T46079RWC-[_T$K?\`\!#_`/'*/^$9O?\`H)6__@(?_CE= M3119!=G+?\(S>_\`02M__ 0__'*/^$9O?^@E;_\`@(?_`(Y74T46079P$]A> M0R%7U&T!R<?Z*_0$C^_[5S_C2ZN=)T&68W5M<>:RP;%@93\YVDY+=LUT?BJ& M[N&:*QGBMY&#`RR9^4;CTP#S7%_$2.>/PA"MW+#+.+F$,\0(!^<<\@5"W&6/ M'6@?VS#:20BV@GMI1.;N5%/EA!N Y[%@,^P-8(@\1>+[[1K_`%"UN=.M\K<- M*+A1(AV$#;U(!R,J1]>I%=@;MUT^VFO]1TZW%Q")=CV[GY2._P`_3G%-L]6M MKV\BM;77])EN)3M2-87W,<9Z;_04U>Q?LY-<UG8TH5*75NC2-(RP."[8RQ^7 MDX &?H!76>#O^0!%_P!=9_\`T:]<RMI<6]RANI8I'V.!Y:%0!@>I-=-X._Y M$7_76?\`]&O3B9LVJ***H12TN&.W6>WMXTCABDVHB `*-JGL!Z^_U["U/-%; MPO+<2)%$@RSNP55'J2:IQ6ZS3W99Y5_>8^21E_@7T;_#Z=SY[\8M/O1'974, M<UUIT2R&1"K3".4D%)&7:WRC+#H0#M)#!<4`2^,/B)<V&MO9:*NFM%;O"DLU MT9&$KR+O$:;!Q\I4[R2/FZ&NT\'Z[%XE\-6&KP)Y:W*$M'G.QU)5US@9PRD9 M[XS7E'@#X>'7;">]UDW^FVS20_9H;?-N9(UC&[*E?EC+$[1]Y?FPPS@>Q6.E MVMAH\.EV2-!9PPB"-4<AE4#'#9SGWSGO0!4U7Q-H^E7"P7]_!%*9$C92P_=E MON[_`.Z#D=<5>_M*Q\^6#[;;>=$`TD?FKN0'&"1G(SD?F*XN3P5>VNG1V%F^ MFWEI;7"7< N81#)(ZL24F9%*L#N;#! 00Q):L:^^&-S=W>HF0VK)<7$LXF
MDO)WWB2;S#'Y/”(%!AOFR%!PI/ !Z1_;.E^84_MRW@2OGKD;L;>,]\C’K
MD4D.M:=+<+;&R".Y9WC6&215D8J[(<*3DC*G\JXO5_$MU?:K-;&QB2ZGE
MDB!4@HAL([= <#^&1-WL,$<\55TWX=7MM;:OYTUD]U=;/(E^8F,B]N9SR1D9
M6=1QW![<T =QJ/B32-/1GNM0ME5)TMI") ?D<X?GY>0>M7%U&R:>6!;RV, MT2>9)&)5W(N,[B,\#!'/O7F+_#S69-=.HW#V%P\7[P^=>2LM]*)4<%XRA6 $ M*W";\;N^*FF^&UW-J&HS&2!&FDFN([@WD[DF1BWE>3PB*-VW=\V0,[03P =I MI_BS2+Z6]6.\A6*VO!8B8R*8Y9##'+\KXZ2<]P15G6=>L]*FCAF6XFF9=Y MCMH6E9$Z;V"]%SW-<UIOAK6%L=:<AE@T.R>;5=0%P\<:M=101"WBB^52L89R8B M>0-V?FQ@N;P_J/A6)KSPNJZE+]CCM)H;Z7:Q6-Y71TV+C(,T@,>%!&T4VX
M8 TT;Z$]QJT4=TSMIB123LJ$J5D4,I0_P7#+G'3<,]14UEJ&AZQ>VWDP0S M74\#7 +P#<JHRH=Q(RIR< 'GY6Q]TUPB_#FZD\/3#2+E8KB:XBDB:\1HV^S& M"WCECE4#(),.X+TRJ9Z&NU\.:+J&F:G/>7,]M(=01I;Y47 %P"H0Q< A-FX$ M,3RJGJ7+$<WBK1]+CO’BM+L6< :26YMK-C"Q’7#@88Y&/KQ3YO&NF0Q0%H-
M1-S-/]G6S%HYN VQG&8\9 *HQSTXKE-;#>(9K6#3=+N[9-.MHGA1I+Z9//0
MJY1)( A3(9ES("2=O0=!9\1>#-5US4;76;^RT:YODFB$FGR7,@M
)CCN57]Y
MY19GW7+,3L P.Q9@#JK[Q5IUKIVFWBBZNH]1D\JV6U@:5W;8SGY1R,*C9^E M7K;6M-N(;61+R!?M1*PI(X1G8<%0IYW \$=17-S^'M7M-*\+)IS65Y>:/.99 M%NIGA20&"6/ 94<\>8,<<@=JPK_X;7-QJJWKRPW+7(S<!KN>!+>0S22LR)'_ MT’S,;69<!!R=QP=QX>\2:;KNG)=VES$,D*\32J7C8L5"L>“2.!5VYU73
MK4H+J_M(2[%%\R95W,.”!D\D9’%><V?@+6$CL6==)MYM,!,AE<B];[3#.#* M?+'EX\C;D!_]8Q[8;)\0>%]?MX=0!TVRU"]UWS(S'$\CQV)\YW#K(8L9(FP= MPC'[L<GL>K37^CRW+K-=:>]Q9@R.‘D0O !C+’)RO;GZ582]L;H0A+FVF$N’
MC D5M_4@KZ_=8C’]T^E>03>#=5U;5VTW[%’#:Z=;3)]O\R6!KYFNK:949@@

M@B%UW(9,9SZ ]?X($?V%K,FHW,5J’:T6"-4FEG:%O-E=P)).6!#J,\9P?E
MH UM2\7V.GWSVSP7L["X6T4VT)E,DQC>4HH’)VHA)/0=.N:UK?5+::Q^U,6@
M4 ;HYQLD0GHK
>03D8!ZY%<)K7A2^O[AK1=/LKV&VUEM65;Z1HH;A)8)D*[E
M1,CR=,,BM.[-:C>WEK>R6^DVTD$ M_LJ.\B,“I4OOK\R )\O0N#C
M>"@!N:;XIT;4+6ZN(;^!([5PD_G.$,1.,;LGC.1@]Z37]>TK3H[$WDEO-)<7
M-O’;Q!T+LTLJQJZ@GD ODD=@:X2/X;W\7A^WTX_89OLUS’>;DNI;9KIO)>)H
MW=$+(JE]RD;MVW!"YS5F’P%J-H+6WMH],EMS=V-U)-+/9+8031R,D>Y7+[@
MA&2Z\L>.U '>Z]JUMH>F-?7HF:(211!88S([/)(L:
%’))9U’XT:?J]O>6C7
M#±:! 6=+M#"ZJ/XBK#S[5C>+M%U’Q!X/;3[B/3IKTW5O.T3LZ02)%<I+ ML)PS#*)@G!Y/I5"7PSJ%U;Z9FPT6Q_L[+QVL4LDT<WS9$3,40A/XONG#A&P0 MA5P#>TG7=(U+5;RVLY8QJ$('FHP"R%>Q]2/?WJ[)JVG1&X$M
:(;;‘GAIE’E
M9X&[GY<^]<OX’*7?AS4[V:864=V6=IE8B2,[V(0#;RI!R3D8(Q@]:J?(G
MJD,4<=MI%Q]BOGO(GEF=3?!Q,"DW[L[OG9!&_)0<#.0 =/K?B33=(ALWGN M(G>[GMX((DD7?)YTJ1*R@GE07!)'8&M*UO+6\,HM;F"<Q-LD$<@;8WH<=#[5 MYK_P@&K1)%#&=,N$FO+2\EGED=7M/*N5F:.$;#O!
@DI]U_AQX+F+B87’
MEEOL=J)5O)KAI@F?WC"3"QD]=B@X_O&@#N4541410JJ, 8‘I7,Z_XIT/2
MS?)JT4P@BC=YI6M6:)S’&9"@;&&8
K’'M69X=^&UAH6LVVI0:E>320$D));V
MBJ<J1R4A5AU[$58\2^&]0UW6$:>+2/L<22JD\BO(\B/$Z&“2+@,A+[B0XSM MP.M &C’XGLH[$.UEJ5OAA%%;/9NDLG’2-,9(`ZXZ47WC#1[”]N+>\GDA2WW”
M6Y>-A"CAD9"_3<$!;'HX^3X?7DDL-W)INB,L+/Y>CFYD^RQ[E ,@D\K.X[
M1QL_&ED^’>JR%XGU.!KAH2C:V=QNR3;>3M,>,;=W[S._.>,=Z .NM_%UC-/! M$8;R!I)EMW6XA,31,RDIO4\@-M(!Z9&.XKHJ\YA\+7T$‘V);&TLH[Z^M9G@L M9&EAM4MW$I?<RIEG*JN,#&<Y.,5Z-0`4444`%%%%`!1110`4444`%%%%`!11 M10`4444`%%%%`!1110`4444`%>9:]R.FN?]>R?^@“O3:\RU[D=-<Z]D]
M%)[#1Z'I7_(+L_^N*?^@BK54=+AC:RL)B@,J6X16[A6"DC\=J_E5L0QB=IP M@$K*$9^Y4$D#_P>/YU6@A]%,CACCDED1 KRD,Y’\1 &?PHAACA#B)@=B M[8[L>IHT?1445O%%;^1’&JPX(V <<]?YTC6L#VGV5HE-OL\OR<;<8Q1H!-
M13)H8YT"S(‘4,K@’^\I!!
@&B2&.5XGD0,T3;T)A;!7(!B/QHT ?13&AC
M:=)F0&5%JW<XR/QP/RH$,8G,P0>:5"%^Y4$D#]31H^BF)#&DLDB(\F"[ M#JV!@9HBACAW^4@7>Q=L=V/>C0!]%1PP10Q>5$BI'DG:.G)R?U)IAM+<V)LS M$AM3'Y7E8^79C&WZ8XHTGHID,<Z!)D#J&5P#ZJ0P/X$ A1+#’*T32(&,3
M;T)A;!&1^!/YT: /HIC0QO-’*R R1@A6[@’&?Y"CR8/[8/-V[-
?;G.
-
M'T4Q(8TFDE5)),!V’4XZ?SHBACB:0QH%,C;W(B; &3^ %&@#Z*9!#’ FR
M% B;F; ]6))/XDDU’]CMQ8_8O)3[+Y?D^5CY=F,;?ICBC0">BHYH8YX
+F0.
MF0V#TR”"/U I988Y3&94#&-MZY[-Z_J:- ‘T4QX8WECE= 9([&/5<]:/)C
M\3[!YH78’[[<YQ^E&@#Z*8L,:S/,J 2NK-W(&<#]3^=$4,<3RM&@5I6WN1_ M$V ,G\ !^%&@#Z*9!#' A2% BEF<@?WF)8G\22?QIBVL"V8M%B46P3RO+QQM MQC'TQ1H!-14<L$4L'DR1JT7'RD<<<C^5+-#'-L\UVQ@ZY[,.AHT?13)(8Y M)(I'0,\1)1CU4D8./P-!AC,ZS%!YJJ4#=PI()'Z#\J- 'T4Q88UG>8(!*ZJC M-W(4D@?AN/YT1PQQ/*\:!6E;>Y'\38"Y/X*!^%&@#Z*9##' K+$@169G('=B M<D_B2::EM"EK]F2-1!MV; .-OI1H!+144EM#);?9WC5H<!=A'&!VITT,<P42 MH'"L'&>SY!
.C0!]%,DACDDB>1 SQ,60G^$D$9’X$C:&AC:=)B@,JRW<
MQ!(’:OY4: /HI@AC6=Y@@$KJJ,W<J"2!^&X_G1’#’’)*Z(%>4AG(B( &3
M^ HT ?13(88X0PB0(&8NV.['DFFQV\,5OY$<:K#@C8!Q@]:- ):*A>U@>T^ MRM$IM]FSR\<;<8Q3YH8YT"S('4,K@'LRD$'\" :-'T4R2&.5XGD0,T3;T)

MA;!7(
!B/QH:&-ITF9 945E5NX!QD?CM’Y4:/HI@AC$[3!!YK*$+=RH)('Z MG\Z$ACCEDD1 'D(+L.K8&!G\*- 'T4R*&.'?Y2!=[%VQW8]320P10P^5$BK' MS\HZ<G)_4FC0"2BH3:0-9&S,2&U,?E>7CY=F,8^F*?/#'.@29 ZAE< _WE(8 M'\" ?PHT?13)88Y6B:1S1-O0G^%L$9'X$C\:&AC::.5D!DC!"MW .,_PA
M1H ^BF>3’Y_G;!YNW9O[[<YQ0D,:2R2J@$DF-[#JV.E&@’!ZGX,T>\U"YN+A
M;TRR2,S$7LRC)/8!L#/TK)UKP+H<6DWDPANV>&)I4WWDS ,HR#@L1U P\ MUW,_^OD_WC_/_/\GFLW7`D!:E_P!>TG_H)S)Q4#.633K&_LM&%_;Q3 M6]NN)!"9%!'TQ4=A%X<NM;L9M’T>SLY8KZ5(9;907=4#Q?(7:,^A;MT[;
MUGI5E)I=A#J5O;S300JF693M(’…?_K4%EH[6QTN0WT;3VDD\DI"J%E\XEF
M&XE?F/')X'.:2*YI)6N6?M:7RVUPBE-R2!D)!*,,!E)'&000<=Q^%=#X._Y M$7_%UG_P#1KUS%K:+80VUOYL<LF)Y'9.-SLVYFQN;&68G&>,XKI_!W_( B M_P"NL_\Z->FB6;5%%%4(IV\L<<]YYDB(?-S\S ?P+[#^OU[#D_’+:-2LXH
MI[<L9=A(S8X< CY5;KR/SKK+>)))KS>BM^]QRN?X%]S_3Z=SR?CS54T&_MK
MA+8S&2%T
12Q1L!N!W’>RC&?U-*6VA4$V
=/#M?^(FLZ1JDVF:8UU&L’B,$-
M’>"
.1&BC
VX+J3LR&)8X"Y&>M?2OA[68=9/6>KK’+:PW$/FE+A=C1CN&SZ
M8//XU\Y75@GB34#”=.M+J[FU:74X(WOX-[Y2)1#PQ^8^4Q/;ISUQ]I<1_V=
M"U]"+7S8P&@E
ML)’’!(…G!(JWR\JLM>HI0E%VDK’-ZGXZMK:.">RL+Z^L
MY+F.W^T11-M8N2/W8QF0C!S@8X.2
6Y^(WAJUN[RWGOBCVI99"8V(WVUE’’
M)4Y!’;!]9/X=T;R_+L=3N;&)76:&&4,D$JG(>-’#!3RV1C:=Q)!."DG@_
M0GGNF.J3B
>5KCRE\I=LC2>8[;@F]MS;CAF(&[@#Q-Q&C+X^T6&XGAE%^C0 M%1(39R *3$LI&<=5C=6;T&<]*;:>/M(FNI+=S,6CD97FBAD>&-?/EA0O)M 7 M+0M[9Z$C!,>H^'-$O[F_GEOYE:\FEF<*ZX!DM5MB!QTV("/]K/;BJ]EX1T"S MM-1MX]1N"E\$$A:1<KMN);@8^7^].P^@'?))<";5_B'I=C>26<$5Q<WL-TEO M+;I&V\AGV%T!+@$CIZBK+?$#PZNHW-D]Z4GM]P;<A ++]Y%/=@<@CKD&L6/
MP-HD=\MU%K=VDD
;+7 @S;.C@@^7F0@H.9"?.<U9?PAH3SWC/J4QBN6DE,
M0\I=LKMN:3<$#L2Q+;68J,````N!<TGQDUV-:GGTV^6TLM06T %JZRQH;:&
M7?(A^;[TC#(‘3!QU-:M_XDL+;2+;4TN8’L9YDB\XL0H#-@G@‘D<’‘N1619Z
M#8Q6]]%=>(=0NVOKL7=U(TD<32D1)$$)B1<)MC7@8SSDD’%6]4T?0-0T2#2&
M=(+"&1)!% P4’:<X^A[]>BX&0WQ)TZ#5[^.^2XM["*WM7M,MG26>25KC=M
M!^\NV$$$#^]R>UFU^(VCRC5IY1FGV3Q".[5&:.<211.H!QC?F7&S)/&>]4)
M/!6E37!N;GQ!>SW:)#’;RRI;-]G2(3!55?VMQ/(“7#'IR”,U:F)Z(]O<6Z
M:I<);S&5H\QN//B"!)OF0Y8+&@VGY./NYYHN!;;X@:±:B336FOIFMWN?B
MB8F-5++F0@'8-R,N3W4^E;OAS55UO1+345MY[87$8?RIT
,N1Z$X]#W'-<K M+X1T2X-BMWJD\T%L"3%B%/,<EB6+(@9?O'Y5*I_L]:NK<ZIH]K;6.C'3=4MH MH]HFU'4#;R+R<(%CMV! 7 !ZGOGJ2X&CI7BK3=4U8:?:?:3*\,D\4CV[K%,B M,BLR.1A@#(G3UJG/X\T6$,6-XV6 AV6KM]IS(L>8L#YP'= 2.FX>M8WA319] M-\3B^O-1@73;2UFM+&T6X$VQ99(G8Y\F-EQY(&&:3.[JN/FLQ>$]%6YM9)-6 MNI8[)U:SB9HPMLHFCF9%(4%@S11Y+ECA>",G)<#=G\5:;#H0U5OM+0>>MMY: MP,9A*SB,(8\;MVX@8K)U#XC:':Z3<7D<DCRI@0P2+Y+3LP<KM+X&#Y<GS=!L M;TJV=*T@V;6WVY]C:D-3)WKGS!,)=O3[NX8]<=^]5+/PSX>MX9XGN/M"2VB6 M>)]C[55YF##Y>&S._/H![Y+@177C>XAM](O$TR"6RU"&-X]MWF5V95)V*$*E M5+ $EE/#84\PZ+XVU/5- GU&/3]’#QJCM&NI28@4J68S9@#+C VJ^2>P!- M7/\A’]+$5A;#6;M=-M!#BR#H(V>’:8WSMW
055L
R@D<CDY(]$MXY)[A?$^
MI?VA((XTO-T.^.–^V/;Y>QQ^?EU8Y(.<@$%P+P\76L6A:3J-W;78?4I/)A
MM[>)IW9]CN0HR1MC<YP.!VZ51F\?Z9Y5X;7S;J6-2T45M#)+(P$:LQ9HP%
M+J#R<9&<$XJ’5-"@>Q-V>CZRU@FEWK7+7"E&E(,$Z’:'1E)+3 G(QC.,<55
MB%Z+:L\NFZU>V5VZM&UQ&T3L4=4$BX=&7YC&C$XR"."2*+@:UWXEO[?P?I M>LI96DAGM8KBY::X:&*/<J\+A78DEL 8QP<L.,T+'Q]+>ZU'96^DY\U6$<1N M+C>(C(-R%=@0XV[A(3DCY<9(T[C3K,Z-8:=9:[=V4=I+8/"T;&6,*%PX=6 M4YVCD $<X(R<Y/\PA^BQQ""SUJ^M+2,.UM!#(G^CS-“T)F1BI<ML=@S%>< MXR!1<"O?_$#4K*X@MIM*TQ)&>9'N7U"7[+E/+^59! 2S?.005 !0\FKVN>,= M4T2X#WFE:?/8"SFOI)+34'DD6**+<6VM$JD%RJCY^<Y['$T&C)#I<=E'XLU% M5CRJNB6RXC(,>P1!”.,Y
[AS@C)J9=!/BQOK-IR]K=V2:<8VE_U<“H4”>
MH’)/4\DFBX$,OB^]LXY8[28OML&HV5C.MM=>9$BW,B(L@=D5CC>,C;UQVR1
MMZQJ<UOJNDZ=9I&US>R,[M(“1’!&9& R,DED0#/!?=@A2#SUUX;LKJPFBF\ M1WQNYKNWO);S$ D=H&5HUV^7L"@HIX4$XY/6M?6%AN=4TG4;.[MUN;*1D<2, M0)()!(N><’*HX…2FW(#$@N!2O/&$UMX5\3ZQ_9,C2:+).GV;SU!E6)0V[=
MT4$’…3@=”>*O:QK%]!KL6G:5:0W<@M’N)4D?R]I+JD9W]ESYA; 8X7@$X!R
MI
#UA/H/B+2I-?O#%K<DCS2?N=\0D 5U3]WC!48^8$^^>:;?Z+%J<VJ?;=;=
M!<VT%K%<P%!,$0[G# IL.]LY&T@AB, 47 63QAJBZ0M^NBV\D:2-’)LO21.0
M<!;7]WF5FY W! 2.N.:=<^
]1;Q%=:9I=C:73"1HX6GG:!<QHK2AF"N<CS$Q
MA<‘GGBHY- 5[BRG_.$PU(3VB-'&PBM,‘T7R=H…,@XXI+?08&B^T2ZRUG MJYNKB<W=F4;*R,!MVR(R_<2('Y>J\'DY+@.T3XBZ9K>N:/IU@F?M]F;IGDE5 M6A;RTD6(KDDMMDR<<#'4UT":P[>+)=&:T942S6[6Y+C#Y<J5"]>,=3ZUF6>A M>'+*\T>YLQ#$^EVYMH,8)*%50;F(W$A4!SZU9^RV?`PE)UO^UI=QM?LGV7
M]WY6W=NW?=W9S_M8]J+@./^)%U/2+\N[26SENKN:S$&?-/’)(OS,O_U1 M.>F3C)X)S+[QI+;:?JDYTU8I;34SIRBXN-J'Y%<2NRJQ52&Z,>1G’.+&A:9
M::1IUO:)KUY<"&[EO#)(T:M(9&=F1MB*“NYRV,9SCG Q57_A’]/-/?^WKS M[1<:A_:44W[G=;2[-GR#R\$;/EPX;UZ\T7 O#Q3GP5_;HM,S,#'%;B3Y99C) MY2*'QPK/MPQ48# D#D#$;XDI;W&F#4--:"VFM)Y;V5)3(;6>)S&\(4+F3YT= M0PQGP/F%:-SX=/W>AV>DWMP;FT@NC>.LC#2)2SNQ<8P7<M@``'&,8J’
M1O"7AC2;^YGM’7R)FW"U8J88SN1\J,9’SQANO4DT7 ?X0\6WVKR6’]JZ=%8&
M]6YC6%)?-,4]O,<B%`,"%R#@8Z<YKLZX_2]L[‘6HIQ?1M9VQN9H$9LOYU
MQ,TDC’ &[:!SQ[CGIO[1L_^?B/\Z+@6J*J_P!HV?\`S\1_G1_:-G_S\1_G M1<"U157^T;/_`)^(_P`Z/[1L_P#GXC_.BX%JBJO]HV?_`#\1_G1_:-G_`,_$ M?YT7`M455_M&S_Y^(_SJ2"Z@G8K#*CD#) - $U%%% !1110`4444`%%%% !7 MF6O?\CIKG_7LG_H`KTVO,M>_Y'37/^O9/_0!2>PT>AZ5_P`@NS_ZXI_Z"*M5 M5TK_`)!=G_UQ3_T$5:IB"BBB@ HHHH **** "BBB@ HHHH **** "BBB@ HH MHH **** "BBB@ HHHH **** "BBB@ HHHH **** "BBB@ HHHH **** "BBB M@ HHHH **** "BBB@ HHHH **** "BBB@ HHHH **** "BBB@ HHHH PY_\` M72?[Q_G_`)_SQ6;K_P#R`M2_Z]I/_03_`)_SFM*?_7R?[Q_G_G_/-9NO_P#( M"U+_`*]I/_03_G_.*D9EM!"[%G60L>N)Y%'Y!L4GV:W_`+DW_@3+_P#%5+14 M7*((T2.^B$88#RI/O.S?W>Y)-=7X._Y $7_76?\`]&O7+#_C_B_ZY2?^RUU/ M@[_D`1?]=9__`$:]7$3-JJ&NS2P:9(]O(8Y2\:!P`2-SJ"<'CH:OU!>VL5[; M/!/N\ML$[6*D$$$8(]P*HDY.QU>0WD9ADUO#3#S5O-.\E9 01\I,:DGY1P#4 M'C6UL=3U2U6]MMX2,#]ZA48,R@XSUZ?D1ZUU":/ LT4K37DIB;>HDN'8`^N" M?>I-2TC3]3>-K^TBN&CX0N,X_P`XI-75AIM:H\\T>S\-W6NV-QI&D6=I+!J3 MPP2VP#22",.'+@A=@R#C!8D8.!74ZSJ4=[H4-ZD<B@.X:+ 9U9"RLF%)RP*D M8&>12:?X?EMYM,7[<#<6%Q/=2N(0$F\]I&90NXE<%N#D].])J5G%HWAZ%+JX M0 3O+-*(V"M)*[.S;?F(!9B>N!2E9(?,Y/5W/.1XKOKBVBN[&RLGCGG2UAMY M;O;)N8D;I"BL(P-IP!N)!!RN"*CA\;SR->@Z2 ME&!.XN05\TSRP;%^7)&^( MG=@?*<X!&TZ"Z;HGC+48[.>$PWWF+*4>,@RJJJXW,H(VD,,9(/!':NNA\#6\ M,$D,5O9+%)$L+J ?F12Q`/'8LQ^I-9Q:FKQU&]-SS+5/$6JS:S+";=(&TNWN M9KN*&^8+O2.%T9&\O]X-LP^5U49SUP,QZ)XWO$=;0Z?=7Y%Q,\\^6)BC:[FC MC PA4X$9^\4&`,9[>FP^!;*TC$$4%A&LD<D(7G+JV"Z],G.T9^@I/^%?V7FP MR"SL0\+,Z$ \%F+$]/[Q)^I-585SC1XKN)_"9U)M/N+2:XMI)K;RU,ZH%3(: M1@NU<G. >HQG!R!6;QCJ-K<6%G<Z,9[AK:&XNWMI7D6-9'=4*GR@"?D8D-L` M[%J]*M_"K6UHEK +9+9$V+&,[0OIC'2L]?A[9*UL1:66;<DQ=?ER<^GJ2?QH ML%S@O^$XOOL5C=?V+"D5S;R76'O?F6-6B0$`1D$EI>F1\HR>3M"0^,]0N=<7 M3K/38)+M]L+1S7A2%'5KH.581%B/]'X)'((X7!SZ(? UN88HC;V1CBB,*+@X M5"5)4<=,JI_ 40^!K>&]^UQ6]DESN+>:`=V27).<>LLG_?9HL%SS?4_B`RV< M4UG8LT$T`#3J68V\[J2J,-FSNAY<'#?=Z9F'C/4;5M/MKG1OM%RUK#<W;VTK MNJ)(S*I4B+!)V,2&V =BW..Z/PZT\SV\QL;#S( HC.#\N.G&,<4X?#VQ!MR+ M2RS;DF+K\N3GT]>:+!<X:SUS5-3UZRD@CMK2RN--NY[8/.TGF%9+<!I4VJ$( M#'HS?>/XU=5\5W5T+"&W-W8R&^-M<2:?&MX''D2O^Z)0[AE!G*A@.H&17H<? MP]L8[F>X2TLEFG1HY&&?F5B"1TZ$J/RJ]_PB?-M\EH/LS%H0`0(SM*\<<<,1 M^-%@N><V/BK55M[B*]TI/M-M+!:%VN BR3RB,H" I*@>9\QYQQ@')"YEUXEU M*?5-2N!#Y4.E68,T45X1LF,D\;%1Y9$H/EK@N%VXR!DFO59_!D=Q'=1S16CI M=,&F!S\Y`"@GCJ H'X"H8O =K%!)#';62Q21+"ZX/S(I8A3QSRS'\318+GE^ MB>.KN.VB@?3;F]2 !+B[+/D.WS+_%<89<DN#UP#QGH[[Q+):^!GUV[MEM)
M7@$D4)E#G+X"D#&22.!FNJ_X5[8^='+]CL=\:E%.#P.>V/<U=;PEOMH;=EM M3!"4:-.<*4(*D<=B!CZ46"YY-I'BS5+N2TM;6ZM=0D@M[T7D[?N=YB:#9,JA M6P2)"0F0"&^]P*O2>,[[3="TNYU#3X;BX>V6YO%MII',41 Q)Q%C+8;ABH!4 MC<>M>B3^"(9[G[1-!9M/Y@FWD'.\
#G’H /P%59_AOIUQ#’%-8V+QQDE5.[
MR<GMTSVHL%SB+W7M9O)-"N--L[1(+G47BB22]=#.@M[@L)<1'9@H& &_) Z M4R#X@-/>HD.C7#VJ,D=S,I8^6[<<8385&1RSJ<= 3@'T*#P);07ANH;>S2X\ MSS=XSD/M9=PXX.'8?\"-,3P!9I<PW"VEB)8<[& /&23TQ[FBP7.(T76M2O\
M5K^>XBBMK9MAN[:.<R,TI#,“BA6P"!D<=34%GXNU*'0[:XOM/MI)8=.C MU&]9+HC]TP/*#RQN<[6.T[0.!N/4>@Z;X$MM,FGEL+>S@DG 61ES\P!)Z=.
M3Q[U$?AY8GR<V=CB%BZ#!PI)R>W3/;I18+F#K6JSV?AS6[YH?+>SCF:/RY58 ML$7(.2”%)]"#CWKEM5\97]MJ-G?BQ!TYXKB*"&.X9I)Y?M$$*[T$?RX9S]TN
M<$\9XKU)
!ZO:W5N=J8+HL9D.<2;AAL<YJF_P[T][F>X:RL3-.C)(Q!Y#$
M$CIQDJ#QW HL%SSZ#QIJ/VF]NKK3/)L;‘3WNKJ!G82R&3F,-&"^=H&&V8Z
MU,?&]]‘9&2ZT3[(Z2%9I;F66.WB3(9G,.X9S@90#(//3/?Q^ ;2-8%2UL@( M0RIP> P(8=.<@GK42?#JP2**-;.RV1/YB+\QPW')XYZ#K18+F#X.O]0U'2Y) M]22 '[1,D3QR$ET65E!9=H"GC& 3ZYJNWB2Y.NPVL=A";![UK!IVN2)%D$32 M9$>P@KA<9W@\]*Z>Z\"W.7;2]1_LMY7,DS6R(WFGW#HP'X8JA#\,2->M-7NM M0-U=VXRI=43<^UEWG8@).UB,=/:BP7,[6-<E@U6+2K**%;J90PGNY-D2@G'R MC[TC<_=&>FY:P?$.L:MI6H-’’?&6.[&V$F
/:&,T<>R’&3O?&93MW$'@;@ M/3KWPH;V!H;M;6:(_P+Y(^O3@^]4SX!LS+=2&ULB]R"LQP?F!
#CUXHLPN>
M>0:EK5S:F”‘4)$U2&=X8K5X(B[LIS<,H*A!NY,>.",$MQ4NG7.K/J%S;ZOJ MFHV33-<-;R*MHT/EI)P5(5F!";0=_J>XX[67X::9*L0>QL3Y2E4^\" 3DC/U MJRW@&T:2\=K6R+7B-'/D']XK## \=^_K18+GESZUKL&CW=TVI3'[/IT^KP>9 M!$'EC4GRTEP@X8*&.T*PW8SD9KKK*ZU";7=>LS<0;88X6M<PG$9=6^]\V7Y& M>J\<<=:ZC4?!,.I/"]]#:3M$<H7R<?IT]J:/\ NKVY$-J)[U/+N’!;,BXQ@ M\>E%F%SF_#NNG59KFWEMTCN+?&][>83P-G^Z^ 3]"JGKU’-82>-KV8:8L&D6
MQEU5(Y[(/>LH,3@D&0B([&QCY5##G[WKZ;!X9EMXEB@^S11+T1 5^@JA;>
M;2UF\VWM;*.3S/-W 'AN>1QQU/3UHL%SDM3UN[F\!:MJMAY=I?VL%R/G'FH MDL)=6Q]W<-R'!('&"1U%'B2]U"REM+NVO&$DACEA6.,HH=PI:0G+G.<+LQ@
M]<C…SG%13Z=/830VC64Y=I(3G:Y=BS9&.[$D_6HF!VK2VDK6UF9+552%C
MGY%‘0=.WO19A<X?PAK-[=/ILFHW8ECU+3$U$JZ(JP.Q3]VA !V_/@;BQX’/J
M[6-9USO=?C6>(QPI9?9L18,7G2,C$DD[CQD=N@QUSVL/@&T@$XBM;)1,P>0
M'DAMP[<8(!_"G-X%MGNKRY:WLVGO$$=PYR3(HZ \=J+!<\^>_U<R7UA;ZM( M][9W9M[<>1&7N288I 93C:J R$$JJG &#GKJ>*IM7/V!-'DGW>8RW2V;6_F? M<R /.^7J0?7%=%)\--,DCA1[&Q*PA@GW@0&()YZ\X'Y"K=WX$MKN.6.YM[.1 M99!*^<_,X4*&SCKM51]!19A<\ZT;5M0FU6WN;C4-1DT>YDA6SE"6OERAH$8" M0!?,5RQ<\ #IT%;>LW%Z^J6::3J 9W"N+9(T:-DS\SRN<D+CA=NTY_O9XZM/ MMLE]’>);62W,:A$< C P.WIQ5=OASI[3V\QL[(26\:11,-PV(A)51@=!DX M^M%F%SS[5M>UG2=1^QI+)J#WH7[.P2%1EF4%H "!M7<1B5LYVX)&<^D_#:]% M_:>;NF9T5X93.%#^9&Y1PVSY<AE(^7CTXJ$?#VQ"W*BSL=MP<RC!^;G/IQSZ M5O\AK0AHJ^5"L,=NJ;$2//’.::0-F[1115DA1110 4444 %%%% !7F6O?`
M(Z:Y_P!>R?`H KTVO,M>Y’37/^O9/$ 4GL-'H>E?\@NS_P"N*?\H(JU
M572O^079_P#7%/`T$5:IB"BBB@HHHH
*** "BBB@HHHH**** "BBB@ MHHHH**** "BBB@HHHH**** "BBB@HHHH**** "BBB@HHHH**** “B
MBB@HHHH**** “BBB@HHHH**** “BBB@HHHH**** “BBB@HHHHPY_
M]?)O’^?^?`/%9NO`(“U+KVD_P#03_G#FM*?\U\G^?Y_Y_SS6;K_
M/R M2_Z]I/_$$Y_SBI&9]%%%9E$0_X_XO^N4G_LM=3X.Y $7_76?P!&
MO7+#C_B_P"N4G_LM=3X.Y $7_76?`]&O6D1,VJHD* 1,PU&;R4
MC?Y([W
XY;I\I_G^7?$\8:9J.JV5L(((S-#,KJBSC:>F=P91D YZ<`^U;
M7
(1N?`KG’
#;W_H/Q[1:UJUGHMBUYJ4WDVZD*6VD\GV%14C&4&I;%1O=6 MW/ ?/UF\\36<D%M=::U@[*\[[G9&W%V#@D$H2".PP./2O3/#_B.[USX6ZK?R M>;)J$-O<*6>)0'?RRZA0I(8,JY’4@#I61XHAT/Q!XM:TO%N8X3+&7NX9]R
MRXC4A"FT@(<@’!ZBO0;&TT[PIX;,4&^+3;“24[F:0H@R[>I…>/P%<6"I^S
ME
,97BM+=C?$2NDY+5GDNLZ]K37VGW4%TTFM6DEV%TIH55+:,(Z1S$A"PT M>U\DL/FX7&!5W3=7\0RZA9ZC=:DDS16M[%:&U_>Q7\G[AXXF8PQAF+"49C5> M%QDD-GU9]3M$GL(FD(DOL_9QM/SX0N?I\H)YJ[7H',>,P^+?$ZZ)+/=:G9.G MGQ@O9R+)<DE7+0Q%[=(F<$)\C#."<ORM=G\-FN!'K,5]?74ER+^XD-G<HJM; M(\TC)T /S*0W)(],"NSJAK&CV&LP)#J=NL\2-O52Q&#C&>"/6@#B=>\1W]IX MRCM'U1K/.IVUK;Z?Y*%;NW=(R\NYE+9WM(N58#]WTSDGT6L6V\,Z+8S6]S#8 MQ1O:(5B=F)\L9+'J?5B<^]6])UC3M8CE?2[R"Z6)MCF)L[3Z&@"_1110444
M4 %%%% !11104444 %%%% !11104444 %%%% !11104444 %%%% !1110 M4444 %%%% !11104444 %%%% !11104444 %%%% !11104444 %>9:]_ MR.FN?]>R?^@"O3:\RU[_)'37/`KV3
- %)[#1Z'I7_(+L_P#KBG_H(JU6 M=I5W;_V79_O4_P!2G?\V14MQJ=E;JC3W4,8=Q&I9L98G ]R:8BY15234K* M.:&*2YB629BL:EL%R 20/7@$_A4WVB'_)Z)^= $M%1?:(?^>B_G1]HA_P”>
MB?G0!+14?VB’GHGYTGVB’GHGYT2T5']HA_P">B_G2?:(?^>B?G0!+14?V MB'_GHGYTGVB'_GHGYT 2T5']HA_YZ+^=)]HA_P">B?G0!+14?VB'_GHGYTGV MB''^L3\Z):*C^T0_P#/1/SI/M$./]8GYT 2T5’]HB_YZ)^=)]HAQ_K$.@"
M6BH_M$7
#T3\Z3[1#C_%B?G0!+14?VB+GHGYTGVB’GHGYT 2T5’]HA_Y
MZ)^=)]HA_P">B?G0!+14?VB’GHGYTGVB’GHGYT2T5']HA_P">B?G2?:(? M^>B?G0!+14?VB'_GHGYTGVB'_GHGYT 2T5']HA_YZ)^=)]HA_P">B?G0!+14 M7VB'_GHGYT?:(?\GHGYT 2T5%]HA_YZ)^='VB’)Z)^= $M%1?:(?^>B?G M1]HA_P">B_G0!+147VB'_GHGYT?:(?\GHGYT 2T5%]HA_YZ)^='VB’)Z+ M^= $M%1?:(?^>B_G1]HA_P">B?G0!+147VB'_GHOYT?:(?\GHOYT 2T5%]H
MA_YZ+^=+]HA_YZ)^= $E%1?:(?`GHGYTOVB’GHOYT245%]HA_YZ)^=+]H MA_YZ+^= $E%1?:(?^>B?G2_:(?\GHGYT 245%]HA_YZ)^=+]HA_YZ+^= $E
M%0&[MP<>:F?K2->VRJ6:= H&22> * .1\1:M#I#^9/A8RQRWE%N=QZX%<?`
M$/59;CP=’/;%XH9[B(!@AC+KO /OBK^M>*+2[GE2+2M5O+5L@2QVA:.52205 M/<$’@USGCC5Y];TCR(M)U:-UFCD+2VI1%56!/T %0MRCO****@9$/^/^+KE
M)
[+74^#O^0!%UUG`1KURP_X_XO`KE)
[+4VE^++?1;,6-UI^HO*DDC;
MHHT96#.S@[AV(JXB9WM%<;_,+!L/`H&:M_P!^4
`BZ/^%@V0,U;OR
MG_Q=62=E17&
+!L/^@9JW
?E/`XNC
(6#8?\0,U;ORG_P70!U3V[FX M:5)WCW!00%!'&?4>]<-\9(I8_ ET7N'D^=1@JHYQUX'L?S^E7_\A8-A_P!
MS5O^
*?
!=1S^.]+N(S'/I&IRQGJKV\;#\B]1./-%Q[ETY<DE+L>2^ XC=P MQ)$Y(3S7(0C[H09_J?J*]KG,^O?#V]CMU#W=S836X7(,NQD(R>,;AUK&M?%
MV@VG
’KX?O8>"/W=I$O!ZCAJLQ>/=-BC"1:3JB(.BK @_#?6,*')6G53^)M M_C=%2J<T(PMLDON5CD+SPCK\EW;&/3+C^TH);EY=3^U1^7+ ^[RX4&_>&$96 M/E%&5/S8^8Q:3X9O-3U;Q(\&D7MA;6IN4LK6XNEW07+6MDT9&R1EY82,"&(& M3G!R*[?_(6#8?`0,U;ORG_P71_PL&P_Z!FK?]^4_^+KI,B/2K#6;/4Y; MZ:QEFA$3F"V:\&4NOSR-SM E/ )V_>('F,$RO$.A>(+_Q%?W6GVTZ>=;*# M+=2Q[8_D4&*V9'W#)W;O,0#))##OL_\"P;#H&:M_WY3_XNC_A8-A_T#-6
M[\I
\70WPY;:IIEA?)'H<HLKFYD>WL+BZCWVL0MU&QB&=3OF1S@,<"4$]P+ MG@F.\8WEWJ^DWMCJ4RQK))<-595W;8XA%(^$3<VV#\Y/))JK_PL&P_Z!FK M?]^4_P#BZ/\A8-A_P! S5O^
?!= '945QO\PL&P_P"@9JW'Y3_P"+ MH_X6#8?]S5O^_?%T=E17&_\"P;#H&:M_WY3_XNC_A8-A_T#-6[\I
M\70!V5%<;PL&P_Z!FK?]^4^+H_X6#8?] S5O`ORG_,70!V5%<;_PL&P_ MZ!FK?]^4_P#BZ/\A8-A_P! S5O^*?!= '945QO\PL&P_P”@9JW_'Y3 M_P"+H_X6#8?]S5O^*?%T=E17&_\"P;#H&:M_WY3_XNC_A8-A_T#-6
M[\I_\70!V5%<;PL&P_Z!FK?]^4^+H_X6#8?] S5O`ORG_,70!V5%<;_P ML&P_Z!FK?]^4_P#BZ/\A8-A_P! S5O^*?!= '945QO\PL&P_P”@9JW_
M'Y3_P"+H_X6#8?]S5O^*?%T=E17&_\"P;#H&:M_WY3_XNC_A8-A_T
M#-6
[\I_\70!V5%<;PL&P_Z!FK?]^4^+H_X6#8?] S5O`ORG_,70!V5% M<;_PL&P_Z!FK?]^4_P#BZ/\A8-A_P! S5O^*?!= '945QO\PL&P_P”@
M9JW_'Y3_P"+H_X6#8?]S5O^*?%T=E17&_\"P;#H&:M_WY3_XNC_A8
M-A_T#-6
[\I_\70!V5%<;PL&P_Z!FK?]^4^+H_X6#8?] S5O`ORG_,70 M!V5%<;_PL&P_Z!FK?]^4_P#BZ/\A8-A_P! S5O^*?!= '945QO\PL&P
M_P”@9JW_'Y3_P"+H_X6#8?]S5O^*?%T=E17&_\"P;#H&:M_WY3_XN
MC_A8-A_T#-6
[\I_\70!V5%<;PL&P_Z!FK?]^4^+H_X6#8?] S5O`ORG_
M,70!V5%<;_PL&P_Z!FK?]^4_P#BZ/\A8-A_P! S5O^*?!= '945QO\
MPL&P_P”@9JW_'Y3_P"+H_X6#8?]S5O^*?%T=E17&_\"P;#_H&:M_WY

Mario Charest <nowheretobefound@8thdimension.com> wrote:

“David Gibbs” <> dagibbs@qnx.com> > wrote in message

Sounds like that’s what you want. That can’t be done. Well, in theory
it can be done, but the data collection to provide that would be enormous.

I always wonder why the profiler (talking about QNX4, I assume this also
apply to QNX6) don’t work by having 2 variables for each function:
When prologue is called ClockCycle is stored in the first variable,
then when the epilogue is called, the difference between start and end
is added to the total (2 variable). No need in sample the IP.
I understand this would add more overhead, but the overhead would
be the same for each function, so the % should stay the same.
I understand this could get tricky with recurvise function but I should
be doable no?

Yeah, in theory, should be doable. I just don’t know how much work on the
compiler side it would be. Currently, we don’t do anything specific
for QNX for instrumenting the code – we just use the standard instrumentation
provided by GCC, essentially the same data generation that grpof will
parse for its output.

I’m not sure the tools people want to get into this sort of customisation
of the tool chain – it would be a massive support effort, as it would
require re-porting these changes into every GCC upgrade/change as I don’t
think such a change would be accepted as part of the main GCC stream.
(ClockCycles() is a QNX specific function, and there is no generally
available way of getting 64-bit free-climbing counters on all hardware
platforms.)

This does, though, sound like a cool way to self-instrument your code
in places where you want/need this information.

-David

David Gibbs
QNX Training Services
dagibbs@qnx.com

Robert Muil <r.muil@crcmining.com.au> wrote:

David,

Sounds like that’s what you want. That can’t be done. Well, in theory
it can be done, but the data collection to provide that would be enormous.

Microsoft’s Visual Studio handles it with apparent ease. GNU’s gprof also
provides this information.

I don’t know about Visual Studio. I do know that gprof lies. (Well, it
makes naive assumptions and reports them as fact.)

Consider:

expensive_func( int COUNT )
{
/* do something time consuming COUNT times */
}

funca() { expensive_func( 10 ); }
funcb() { expensive_func( 1000 ); }
int main() {
while(1) {
funca();
funcb();
}
}

If you profile the above using gprof, it will tell you that funca() and
funcb() each used about 50% of the CPU time. In fact, depending on when
you interrupt and grab the info, you may see slightly more time attributed
to funca() than funcb(). Clearly that is not the case.

We parse the same data output – but we don’t make up statistics that
aren’t valid.

You can load a gmon.out into the IDE – copy it to your project, then
right click on it, and choose “Open in QNX Application Profiler”.

This won’t display the somewhat confusing library information, either,
as the gmon.out data won’t cover that code.

Nope, it doesn’t. printf() is in our library – so it’s not instrumented.

Surely it can know enough to tell me that it as called another function -
even if that function is not profiled itself. That it cannot suggests a
shortcoming of the method used.

Yes there are inherent short-comings, they come about because we use
the GCC tool chain for code generation, including the generation of
profiling code.

(And, you won’t see the time in a function attributed to the function
call line in the editor.)

What do you mean?

I meant, though it was unclear, that if you call printf() inside funca(),
and spend a noticeable amount of time in printf(), it will not be represented
by a coloured bar on the line of funca() where you called printf().

I tried to view the screenshot, but got a garbled image. > :frowning:

Sorry - wasn’t useful anyway.

Are you just looking at the editor for the sampling data, or are you
actually using the QNX Application Profiler perspective, which includes
… views which both provide statistics summaries?

I am using the proper application profiler perspective. The call graph is
quite useless to me in most circumstances - I know which of my functions I
have called, it is the library calls that interest me. The sampling
information is more useful, but does not give me enough information to be
useful. Also, the information in the editor (coloured bars etc) does not
seem to bear any relation to the sampling information. What summaries are
you talking about? Can it tell me what percentage of time (accurate to 1
d.p. - not just estimated from a bar)

Ok, in the editor:

Green bar at top of function gives time (sampled) in this function relative
to total time (sampled) of execution. Hover-help for the green bar should
give this as a value in (fractional) seconds and as a % to several decimal
places.

Blue and yellow bars on a line of code give the time (sampled) for this line
relative to the total time program ran (yellow bar) and to the time (sampled)
in this function (blue bar). Hover help over the bars should give this
value in (fractional) seconds and as a % to several decimal places.

There are a couple problems, though. The placement of the code information
lines seems to be off by one. (Existing PR.) And, I think you mentioned
you were Neutrino-hosted. There are a bunch of focus and redraw problems
in Neutrino-hosted that make it such that hover-help often doesn’t work,
making this data hard to view. (The redraw and focus problems are supposed
to be fixed for service pack 1, I’m not sure about the finding the right
line problem.)

The update/installation perspective is core Eclipse, and should be
documented in the Eclipse docs…
…That is an Eclipse paradigm, it works within a subset of the directory
structure…

I know that much of the IDE is Eclipse, and not directly controlled by QNX,
but that is irrelevant to me as a QNX customer. The IDE was sold by QNX, and
is the main (only?) reason to purchase the expensive PE license. Therefore,
it is QNX’s responsibility, regardless of whose technology they have
leveraged in the background.

Yes, and we work to fix bugs in the Eclipse core, and to get features
or extensions we want/need into the core.

I think the editiability of functions outside the workspace is supposed
to be much better with the next generation of the core Eclipse tools.

Also, I have read all that documentation, and it is not very helpful.

And, the update tools is one that is not needed for useage as a QNX
development environment – unless you’re adding someone else’s tools
to the IDE. We try to enhance documentation as needed for core pieces
that are used for QNX development, as well as documenting the non-core
pieces that are QNX specific.

I found it frustrating, too, though.
Hope some of this helps.



I can add a huge list of other complaints, at the top of which would be:

  • my workbench layou is “failed to load” almost every time I run the IDE

Does it generate a .log file when it fails? Check in workspace/.metadata
for a file called “.log”. Each time the IDE has an error, it is supposed
to generate a log to that file. Posting the .log file with a description
of the error may allow the problem to be resolved.

  • javaw.exe locks on 100% CPU nearly every 2nd time I run the IDE

Can you describe what you do to trigger this fault?

  • under an nto host, the CVS perspective fails to checkout certain of my
    modules with an “internal error”. no other information given.

Does it generate a “.log” file?

Is there a complaints newsgroup?

I don’t think specifically – or all of them could be so considered.

-David

David Gibbs
QNX Training Services
dagibbs@qnx.com

David Gibbs <dagibbs@qnx.com> wrote:

Robert Muil <> r.muil@crcmining.com.au> > wrote:
There are a couple problems, though. The placement of the code information
lines seems to be off by one. (Existing PR.) And, I think you mentioned
you were Neutrino-hosted. There are a bunch of focus and redraw problems
in Neutrino-hosted that make it such that hover-help often doesn’t work,
making this data hard to view. (The redraw and focus problems are supposed
to be fixed for service pack 1, I’m not sure about the finding the right
line problem.)

The problem with line numbers hasn’t been fixed yet, but there is a
partial workaround (this is from the SP1 release notes):

Line numbers in the Memory Analysis, Application Profiler, and Code
Coverage tools are incorrect on SH and MIPS targets. On x86, PowerPC and
ARM targets, the line numbers are off by 1 if you use the stabs
debugging format. (Ref# 21198, 21412)

Workaround: For x86, PowerPC and ARM targets, use the DWARF debugging
format, by adding -gdwarf-2 option to the compile flags.


Steve Reid stever@qnx.com
TechPubs (Technical Publications)
QNX Software Systems

Robert Muil <r.muil@crcmining.com.au> wrote:

David,

I hope this screenshot is viewable. It should show how complicated a process
it is to profile even a stupidly simple program.

This one displayed.

I copied the source, profiled it, and got completely different results,
though. (And, I got the results I expected, too.)

To determine how much time is spent in do_loop (), and where that is spent,
I first must find out what resolve_rels(), lookup(), hash(),
ConnectAttach(), static_strcmp(), __SysCpupageGet(), _dladdr() functions
are. Most are not even mentioned in the documentation (although this is hard
to be certain of because there is no index).

Actually, the documentation does have an index. At the top and bottom
of every page in the library reference there are 4 square boxes, labelled
(left to right): “Previous”, “Contents”, “Index”, “Next”.

But, the index may not help, as it will probably not have index entries
for non-exported library functions.

I’ve been testing against an x86 target, and when I ran it, I got the
most CPU in TimerTimeout_r – I happen to know that’s the kernel call
used to implement the usleep(). But, this tool does supply information
that is hard to decode, when it supplies information about what is
happening in the C library. (Note: I could not get gprof to reveal
any information about time spent in the C library. This would appear
to be extra information beyond what gprof can do that the IDE & qconn
try to collect.)

What target are you testing against?

I must then work out where they are being called from.

I must then work out how much time they are using, presumably by guessing
percentage CPU from the %Time Usage bar or and calculating time in functions
as an percentage of the overall program run time (which would need to be
determined, I suppose, with a separate tool).

Hm… you could sum the “Total Time” for all the functions – but you are
right, that would be a pain. The “% Total used” should give the information
numerically, as well as giving the green bar. I’ve issued PR 22667 to
address this shortcoming.

I hope that I am wrong about this. If so, please tell me how I can use the
information shown in the Profiler perspective to tell how much time has been
used by the do_loop() function, and where that time was spent).

I do not think you can get this information. I do not think the data
needed to answer this question is generated. (That is, I don’t think
gprof could tell you this either.)

Also note the coloured bars in the c editor. What is this supposed to
suggest, beyond that QNX likes the sound of its own name and has coloured in
the margin to highlight it?

I talked in a previous reply about what the bars are supposed to
represent. I noted there was a known bug with them. (There’s actually
at least one other bug with the attribution of time in a library function.)
Steve Reid posted a work-around for the mis-found line problem (for some
targets).

-David

David Gibbs
QNX Training Services
dagibbs@qnx.com

I don’t know about Visual Studio. I do know that gprof lies. (Well, it
makes naive assumptions and reports them as fact.)

Consider:

expensive_func( int COUNT )
{
/* do something time consuming COUNT times */
}

funca() { expensive_func( 10 ); }
funcb() { expensive_func( 1000 ); }
int main() {
while(1) {
funca();
funcb();
}
}

I cannot get stats for this, with gprof. I compile it with ‘cc -g -p
main.c’, then run it with ./a.out to generate the gmon.out. When I run
gprof, it tells me the call counts, but contains no times at all.

There are a couple problems, though. The placement of the code
information
lines seems to be off by one. (Existing PR.) And, I think you mentioned
you were Neutrino-hosted. There are a bunch of focus and redraw problems
in Neutrino-hosted that make it such that hover-help often doesn’t work,
making this data hard to view. (The redraw and focus problems are
supposed
to be fixed for service pack 1, I’m not sure about the finding the right
line problem.)

I have an nto-hosted IDE to test and a windows-based one. I can’t use the
nto-based one for any of my proper projects, because it can not checkout the
CVS modules without an “internal error”. The testing I have been doing
regarding these postings have been in a windows-based IDE.

Yes, and we work to fix bugs in the Eclipse core, and to get features
or extensions we want/need into the core.
I think the editiability of functions outside the workspace is supposed
to be much better with the next generation of the core Eclipse tools.

That’s good to hear. Will this be available for 6.2.1 or just >6.3.0?

Also, I have read all that documentation, and it is not very helpful.

And, the update tools is one that is not needed for useage as a QNX
development environment – unless you’re adding someone else’s tools
to the IDE. We try to enhance documentation as needed for core pieces
that are used for QNX development, as well as documenting the non-core
pieces that are QNX specific.

I appreciate that people like yourself do, and QNX’s development is
admirable. But please, less marketing hype. Aim the documentation at
technicians and engineers, not other marketing departments.

I can add a huge list of other complaints, at the top of which would be:

  • my workbench layou is “failed to load” almost every time I run the IDE

Does it generate a .log file when it fails? Check in workspace/.metadata
for a file called “.log”. Each time the IDE has an error, it is supposed
to generate a log to that file. Posting the .log file with a description
of the error may allow the problem to be resolved.

I have looked through this log and am none the wiser, but I will post it
when the error occurs again (the whole log file is formidably large atm).

  • javaw.exe locks on 100% CPU nearly every 2nd time I run the IDE

Can you describe what you do to trigger this fault?

So far, the only common trigger is running the IDE. It is usually associated
with a debugging or system information session, but it is intermittent.

  • under an nto host, the CVS perspective fails to checkout certain of my
    modules with an “internal error”. no other information given.
    Does it generate a “.log” file?

Answered in new thread.

I copied the source, profiled it, and got completely different results,
though. (And, I got the results I expected, too.)

I don’t understand that. Are you using 6.2.1 IDE? Why would I get completely
different results?

Actually, the documentation does have an index. At the top and bottom
of every page in the library reference there are 4 square boxes, labelled
(left to right): “Previous”, “Contents”, “Index”, “Next”.

Yes, you are right, I had been looking for an overall index in the help
browser. I apologise.

But, the index may not help, as it will probably not have index entries
for non-exported library functions.

I’ve been testing against an x86 target, and when I ran it, I got the
most CPU in TimerTimeout_r – I happen to know that’s the kernel call
used to implement the usleep(). But, this tool does supply information
that is hard to decode, when it supplies information about what is
happening in the C library. (Note: I could not get gprof to reveal
any information about time spent in the C library. This would appear
to be extra information beyond what gprof can do that the IDE & qconn
try to collect.)

Can you get gprof to give you any time information at all? I cannot.

What target are you testing against?

A standard x86 PC with QNX6.2.1 Momentics PE for now.

Hm… you could sum the “Total Time” for all the functions – but you are
right, that would be a pain. The “% Total used” should give the
information
numerically, as well as giving the green bar. I’ve issued PR 22667 to
address this shortcoming.

Thank you.

I hope that I am wrong about this. If so, please tell me how I can use
the
information shown in the Profiler perspective to tell how much time has
been
used by the do_loop() function, and where that time was spent).

I do not think you can get this information. I do not think the data
needed to answer this question is generated. (That is, I don’t think
gprof could tell you this either.)

I do not understand how the profiler can be used, therefore, to give useful
information. This seems to me to be so fundamental as to erode the purpose
of the profiler. It is akin to measuring the pressure on soldiers’ feet to
determine the movement an army.

Steve Reid posted a work-around for the mis-found line problem (for some
targets).

Noted.

-David

David Gibbs
QNX Training Services
dagibbs@qnx.com

Thank you for your attention David.

Robert.

Robert Muil wrote:

I cannot get stats for this, with gprof. I compile it with ‘cc -g -p
main.c’, then run it with ./a.out to generate the gmon.out. When I run
gprof, it tells me the call counts, but contains no times at all.

What happens if you run the profiled a.out as root? I found that gprof
did not give me times (call counts only) when I was non-root, then
repeating the run after doing a “su” I got non-0 timing figures:

[UID != 0]
Each sample counts as 0.001 seconds.
no time accumulated

% cumulative self self total
time seconds seconds calls Ts/call Ts/call name
0.00 0.00 0.00 2000 0.00 0.00 expensive_func
0.00 0.00 0.00 1000 0.00 0.00 funca
0.00 0.00 0.00 1000 0.00 0.00 funcb
0.00 0.00 0.00 1 0.00 0.00 main

VERSUS:

[UID == 0]
Each sample counts as 0.001 seconds.
% cumulative self self total
time seconds seconds calls ms/call ms/call name
100.00 20.04 20.04 2000 10.02 10.02 expensive_func
0.00 20.04 0.00 1000 0.00 10.02 funca
0.00 20.04 0.00 1000 0.00 10.02 funcb
0.00 20.04 0.00 1 0.00 20043.00 main

That does it. Thanks indeed.

I’d had this one solved for me previously and forgot it, embarrassingly
enough.

Robert.

“John Garvey” <jgarvey@qnx.com> wrote in message
news:cnu8ok$3df$1@inn.qnx.com

Robert Muil wrote:
I cannot get stats for this, with gprof. I compile it with ‘cc -g -p
main.c’, then run it with ./a.out to generate the gmon.out. When I run
gprof, it tells me the call counts, but contains no times at all.

What happens if you run the profiled a.out as root? I found that gprof
did not give me times (call counts only) when I was non-root, then
repeating the run after doing a “su” I got non-0 timing figures:

[UID != 0]
Each sample counts as 0.001 seconds.
no time accumulated

% cumulative self self total
time seconds seconds calls Ts/call Ts/call name
0.00 0.00 0.00 2000 0.00 0.00 expensive_func
0.00 0.00 0.00 1000 0.00 0.00 funca
0.00 0.00 0.00 1000 0.00 0.00 funcb
0.00 0.00 0.00 1 0.00 0.00 main

VERSUS:

[UID == 0]
Each sample counts as 0.001 seconds.
% cumulative self self total
time seconds seconds calls ms/call ms/call name
100.00 20.04 20.04 2000 10.02 10.02 expensive_func
0.00 20.04 0.00 1000 0.00 10.02 funca
0.00 20.04 0.00 1000 0.00 10.02 funcb
0.00 20.04 0.00 1 0.00 20043.00 main

Steve,

I have added -gdwarf-2 to CCFLAGS and LDFLAGS in Makefile.

It makes no difference - the line references all place me (and the coloured
bars) 1 code line below the actual line.

Is there supposed to be a GUI option to modify these settings, or have I
done it correctly?

Does the binary parser option in project settings have anything to do with
this?

Robert.

“Steve Reid” <stever@sreid.ott.qnx.com> wrote in message
news:cntb34$bk7$1@inn.qnx.com

David Gibbs <> dagibbs@qnx.com> > wrote:
Robert Muil <> r.muil@crcmining.com.au> > wrote:
There are a couple problems, though. The placement of the code
information
lines seems to be off by one. (Existing PR.) And, I think you mentioned
you were Neutrino-hosted. There are a bunch of focus and redraw problems
in Neutrino-hosted that make it such that hover-help often doesn’t work,
making this data hard to view. (The redraw and focus problems are
supposed
to be fixed for service pack 1, I’m not sure about the finding the right
line problem.)

The problem with line numbers hasn’t been fixed yet, but there is a
partial workaround (this is from the SP1 release notes):

Line numbers in the Memory Analysis, Application Profiler, and Code
Coverage tools are incorrect on SH and MIPS targets. On x86, PowerPC and
ARM targets, the line numbers are off by 1 if you use the stabs
debugging format. (Ref# 21198, 21412)

Workaround: For x86, PowerPC and ARM targets, use the DWARF debugging
format, by adding -gdwarf-2 option to the compile flags.


Steve Reid > stever@qnx.com
TechPubs (Technical Publications)
QNX Software Systems

I don’t want to get into the functionality of the profiler too much, but
the test program in your source is going to spend 99.9% of it’s time in
libc functions usleep (which will end up being a TimerTimeout ) and
printf (all sorts of libc functions).

Since libc isn’t profiled, this will cause varying and unclear results.

Robert Muil wrote:

David,

I hope this screenshot is viewable. It should show how complicated a process
it is to profile even a stupidly simple program.

To determine how much time is spent in do_loop (), and where that is spent,
I first must find out what resolve_rels(), lookup(), hash(),
ConnectAttach(), static_strcmp(), __SysCpupageGet(), _dladdr() functions
are. Most are not even mentioned in the documentation (although this is hard
to be certain of because there is no index).

I must then work out where they are being called from.

I must then work out how much time they are using, presumably by guessing
percentage CPU from the %Time Usage bar or and calculating time in functions
as an percentage of the overall program run time (which would need to be
determined, I suppose, with a separate tool).

I hope that I am wrong about this. If so, please tell me how I can use the
information shown in the Profiler perspective to tell how much time has been
used by the do_loop() function, and where that time was spent).

Also note the coloured bars in the c editor. What is this supposed to
suggest, beyond that QNX likes the sound of its own name and has coloured in
the margin to highlight it?

Robert.


“David Gibbs” <> dagibbs@qnx.com> > wrote in message
news:cnl3nr$5n4$> 1@inn.qnx.com> …

Robert Muil <> r.muil@crcmining.com.au> > wrote:

David,

I am unable to determine how long a program spends, cumulatively, in a
function.

Total time directly in a function would be given by the total time in
Sampling information view.

Or, do you mean for a function, and all sub-functions, cumulated to that
function?


It does not help me to know that 5% of my time was in ldiv() or .plt()
(whatever they are). I want to know that 100% was in main(), then 90% of
that was in do_loop(), etc.

Sounds like that’s what you want. That can’t be done. Well, in theory
it can be done, but the data collection to provide that would be enormous.
What the profiler does is collect 2 types of information – it annotates
any code compiled with profiling to get function call counts (basically
call pairs), and it samples the execution of the program from the timer
interrupt, storing the current IP, and active thread at that point. Then,
the time useage is “estimated” based on the sampling – but it doesn’t
know what the call path to get to the function is. To get the cumulative
sub-function useage your asking for, at every sample point a full stack
backtrace would have to be collected and stored – the overhead to collect
that information, and store that information, would be quite impressive,
and heavily impact whatever you were trying to profile. Also, the tool
chain (GCC) doesn’t supply tools to do that.

Why would full backtrace be neede?
Consider the following:

int func1() { /* use lots of CPU */}
int funca() { func1(); }
int funcb() { func1(); }
int main() { while (1) { funca(); funcb(); } }

Now, is CPU time spent in func1() attributed to funca() or funcb()?
Without
a stack backtrace, you can’t know.


Also, it does not seem to correctly read the symbol table. I have a very
simple program to test, which just loops and does a few printfs. When I
profile it, the calling information only displays call information for
the
source I compiled. For example, it does not tell me that do_loop() called
printf().

Nope, it doesn’t. printf() is in our library – so it’s not instrumented.
If I understand it properly, the call information is put in the prefix
of the called function – so any of your functions that get called should
have call count information – but if you call functions from our library,
from source files not compiled -p, from your libraries not compiled -p,
etc, you won’t get call count information for those.


The sampling information is all over the place. If I reduce the
iterations
in do_loop(), the sampling information doesn’t even mention printf(). It
never mentions usleep(). With a higher number of iterations (like 99999),
I
get a couple of little coloured bars in the text editor, but they don’t
correspond to where the program would have run. I only see 1 green and 1
blue bar - no breakdown at all. With 999 iterations, I don’t get any
coloured bars.

I ran it, I got coloured bars with 999 iterations. But, I ran it on
a pretty slow CPU target. (A VMWare session, in fact.) I got a little
bit of CPU attributed to the loop in do_loop(), but looking at the
Sampling information, most of the CPU was attributed to some unknown
function – I’m going to have to check with a developper as to what
is going on for that. I’m pretty sure that would be the printf().
(And, you won’t see the time in a function attributed to the function
call line in the editor.)

Your usleep() is 1000 usec, which is 1 ms – with a sampling rate of
1ms, I wouldn’t expect much attributed to usleep(). It might be another
of the “unknown” functions I’m seeing.


I have attached a screenshot of the editor after a profile. This is about
as
much useful information as I can get out of it.

I tried to view the screenshot, but got a garbled image. > :frowning:


There is no way to look at the profiling data statistically. No logs, or
textual data, such as the actual numbers that the %Time Usage bars are
drawn
from. For CPU usage, all I can get are little coloured bars, and then
only
if I am perseverent and lucky.

Are you just looking at the editor for the sampling data, or are you
actually using the QNX Application Profiler perspective, which includes
the Sampling Information and Call Information views which both provide
statistics summaries?

When you launched with profiling, did you click the “Switch to this
Tool’s Perspective on Launch” choice to open it automatically?


This is not a tool worthy of the advertising hype that populates the help
documentation. If the documents spent as much time telling me how to
use
their brilliant, time-saving, modular, single, consistent, integrated
environment as they spent placing adjectives in front of their products,
I
may have less to complain about. Unfortunately it seems the deficiencies
are
in the product also - not only the documentation. This is especially true
of
the profiling and update/installation perspectives.

The update/installation perspective is core Eclipse, and should be
documented in the Eclipse docs, through the Help->Help Contents
menu, in particular I think this is talked about in the Workbench
Users Guide → Tasks → Updating Features with the update manager.

The IDE docs seem to be task-oriented, rather than reference oriented.


Just try to save a source file to My Documents quickly - or open an
external
c file in an existing editor.

That is an Eclipse paradigm, it works within a subset of the directory
structure, the workspace, and expects everything to be there.
(I think this is not uncommon with IDEs – they import/export stuff,
but only really deal with stuff that is in their more limitted
view/working
area.)

I found it frustrating, too, though.

Hope some of this helps.

-David

David Gibbs
QNX Training Services
dagibbs@qnx.com
\


cburgess@qnx.com

Robert Muil <r.muil@crcmining.com.au> wrote:

I don’t know about Visual Studio. I do know that gprof lies. (Well, it
makes naive assumptions and reports them as fact.)

Consider:

expensive_func( int COUNT )
{
/* do something time consuming COUNT times */
}

funca() { expensive_func( 10 ); }
funcb() { expensive_func( 1000 ); }
int main() {
while(1) {
funca();
funcb();
}
}

I cannot get stats for this, with gprof. I compile it with ‘cc -g -p
main.c’, then run it with ./a.out to generate the gmon.out. When I run
gprof, it tells me the call counts, but contains no times at all.

Wasn’t intended to be a compilable example – I’ll include at the end
the actual sample code I used, and the gprof output.

The relevant bits are:

0.00 0.47 23/23 main [1]
[5] 50.7 0.00 0.47 23 afunc [5]
0.01 0.46 23/45 dofuncs [3]

0.00 0.45 22/22 main [1]
[6] 48.6 0.00 0.45 22 bfunc [6]
0.01 0.44 22/45 dofuncs [3]

Note that the CPU% attributed to afunc vs bfunc is, basically,
the number of times they’ve called dofuncs, over total times
dofuncs() is called. (23/45 = 51.1%, 22/45 = 48.9%).

Also, to get time data, you need to run the program as root –
the profiling code attaches an interrupt handler to the timer
interrupt to get the sampling data, if it can’t attach the
interrupt, all it can get is the call count.


Yes, and we work to fix bugs in the Eclipse core, and to get features
or extensions we want/need into the core.
I think the editiability of functions outside the workspace is supposed
to be much better with the next generation of the core Eclipse tools.

That’s good to hear. Will this be available for 6.2.1 or just >6.3.0?

I think it is added to the core with Eclipse 3.0. It will definitely
be post 6.3.0.

Also, I have read all that documentation, and it is not very helpful.

And, the update tools is one that is not needed for useage as a QNX
development environment – unless you’re adding someone else’s tools
to the IDE. We try to enhance documentation as needed for core pieces
that are used for QNX development, as well as documenting the non-core
pieces that are QNX specific.

I appreciate that people like yourself do, and QNX’s development is
admirable. But please, less marketing hype. Aim the documentation at
technicians and engineers, not other marketing departments.

Wish I could control the marketing hype. But, apparently, the marketing
people think that generating hype is their job.

I can add a huge list of other complaints, at the top of which would be:

  • my workbench layou is “failed to load” almost every time I run the IDE

Does it generate a .log file when it fails? Check in workspace/.metadata
for a file called “.log”. Each time the IDE has an error, it is supposed
to generate a log to that file. Posting the .log file with a description
of the error may allow the problem to be resolved.

I have looked through this log and am none the wiser, but I will post it
when the error occurs again (the whole log file is formidably large atm).

You don’t generally need to post the whole log – each entry (which
is multiple lines long) is dated at the start of the entry. Also,
if the IDE is not running, you can just delete the .log file, to start
from a clean log.

(Each entry in the log will start with the key string “!ENTRY”.)


  • javaw.exe locks on 100% CPU nearly every 2nd time I run the IDE

Can you describe what you do to trigger this fault?

So far, the only common trigger is running the IDE. It is usually associated
with a debugging or system information session, but it is intermittent.

Is it also associated with a loss of connectivity to the client? Either
through client restart, qconn crash, or other such thing? If debugging,
do you find a nto_gdb* process running using lots of CPU? If so, does
killing that process off help recover?

-David

Flat profile:

Each sample counts as 0.001 seconds.
% cumulative self self total
time seconds seconds calls us/call us/call name
68.06 0.63 0.63 44 14386.36 14386.36 func2
29.46 0.91 0.27 45 6088.89 6088.89 func1
1.61 0.92 0.01 45 333.33 20488.89 dofuncs
0.75 0.93 0.01 1 7000.00 930000.00 main
0.11 0.93 0.00 22 45.45 20534.34 bfunc
0.00 0.93 0.00 23 0.00 20488.89 afunc
0.00 0.93 0.00 1 0.00 0.00 options

% 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.

Call graph (explanation follows)


granularity: each sample hit covers 4 byte(s) for 0.11% of 0.93 seconds

index % time self children called name
0.01 0.92 1/1 _start [2]
[1] 100.0 0.01 0.92 1 main [1]
0.00 0.47 23/23 afunc [5]
0.00 0.45 22/22 bfunc [6]
0.00 0.00 1/1 options [8]


[2] 100.0 0.00 0.93 _start [2]
0.01 0.92 1/1 main [1]

0.01 0.44 22/45 bfunc [6]
0.01 0.46 23/45 afunc [5]
[3] 99.1 0.01 0.91 45 dofuncs [3]
0.63 0.00 44/44 func2 [4]
0.27 0.00 45/45 func1 [7]

0.63 0.00 44/44 dofuncs [3]
[4] 68.1 0.63 0.00 44 func2 [4]

0.00 0.47 23/23 main [1]
[5] 50.7 0.00 0.47 23 afunc [5]
0.01 0.46 23/45 dofuncs [3]

0.00 0.45 22/22 main [1]
[6] 48.6 0.00 0.45 22 bfunc [6]
0.01 0.44 22/45 dofuncs [3]

0.27 0.00 45/45 dofuncs [3]
[7] 29.5 0.27 0.00 45 func1 [7]

0.00 0.00 1/1 main [1]
[8] 0.0 0.00 0.00 1 options [8]

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 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
<spontaneous>' 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.


Index by function name

[5] afunc [7] func1 [8] options
[6] bfunc [4] func2
[3] dofuncs [1] main

/*

  • appprofile_looper
  • This is a sample for demonstrating the use of the application profiler
  • tool. It is a very phoney but effective sample (i.e. it does nothing
  • practical but is useful for demonstrating profiling).
  • If you run it with no command line arguments then it will loop forever.
  • On SIGINT or SIGTERM it will exit and write a gmon.out file.

*/

#include <stdlib.h>
#include <stdio.h>
#include <inttypes.h>
#include <sched.h>
#include <unistd.h>
#include <pthread.h>

void *other_thread (void *arg);
void dofuncs (uint64_t count);
uint64_t func1 (uint64_t n);
uint64_t func2 (uint64_t n);
void options (int argc, char **argv);

int loop_once; /* -o to have it loop only once /
int optv; /
-v for verbose operation */
char *progname;
int tid;

void sig_exit( int signo )
{
pthread_cancel(tid );
printf(“exit from sig exit\n”);
exit(EXIT_SUCCESS );
}
void afunc()
{
dofuncs (1000000);
}

void bfunc()
{
dofuncs (100000);
}

int
main (int argc, char *argv[])
{
progname = argv[0];
setvbuf(stdout, NULL, _IOLBF, BUFSIZ );
printf ("%s: starting…\n", progname);
options (argc, argv);

signal( SIGTERM, sig_exit );
signal( SIGINT, sig_exit );

setprio (0, 5); /* run at low priority, 5, so we don’t hog CPU */

//pthread_create (&tid, NULL, other_thread, NULL);

while (1) {
afunc();
bfunc();
}
printf ("%s: exiting…\n", progname);

return EXIT_SUCCESS;
}

void *
other_thread (void arg)
{
while (1) {
dofuncs (100000);
if (loop_once)
break;
delay (1); /
put a minimal delay so that this thread will run less */
}
return NULL;
}

void
dofuncs (uint64_t count) /* dofuncs() is an excuse to have more call layers /
{
//uint64_t count = 1000000; /
larger is better */

func1 (count);
func2 (count);
}

uint64_t
func1 (uint64_t n) /* 33.3% of total run time */
{
volatile uint64_t a, b, c;

if (optv)
printf ("%s: Now in func1()\n", progname);
for (a = 0; a < 2n; a++) {} / 50% of func1() time /
for (b = 0; b < n; b++) {} /
25% of func1() time /
for (c = 0; c < n; c++) {} /
25% of func1() time */
return 1;
}

uint64_t
func2 (uint64_t n) /* 66.7% of total run time */
{
volatile uint64_t d, e;

if (optv)
printf ("%s: Now in func2()\n", progname);
for (d = 0; d < n; d++) {} /* 12.5% of func2() time /
for (e = 0; e < 7
n; e++) {} /* 87.5% of func2() time */
return 1;
}

/*

  • options
  • This routine handles the command line options.
  • We support:
  •  -o      loop only once
    
  •  -v      verbose operation
    

*/

void
options (int argc, char **argv)
{
int opt;

optv = 0;
loop_once = 0;

while ((opt = getopt (argc, argv, “ov”)) != -1) {
switch (opt) {
case ‘o’:
loop_once = 1;
break;
case ‘v’:
optv = 1;
break;
}
}
}

David Gibbs
QNX Training Services
dagibbs@qnx.com

John Garvey <jgarvey@qnx.com> wrote:

Robert Muil wrote:
I cannot get stats for this, with gprof. I compile it with ‘cc -g -p
main.c’, then run it with ./a.out to generate the gmon.out. When I run
gprof, it tells me the call counts, but contains no times at all.

What happens if you run the profiled a.out as root? I found that gprof
did not give me times (call counts only) when I was non-root, then
repeating the run after doing a “su” I got non-0 timing figures:

Yeah, it attaches an interrupt handler to the timer to do the sampling.
No interrupt handler, no samples.

-David

David Gibbs
QNX Training Services
dagibbs@qnx.com

Robert Muil <r.muil@crcmining.com.au> wrote:

Steve,

I have added -gdwarf-2 to CCFLAGS and LDFLAGS in Makefile.

CFLAGS or CCFLAGS?

(I thought CFLAGS was for C code, CCFLAGS for C++ code, but I could
be wrong.)

It makes no difference - the line references all place me (and the coloured
bars) 1 code line below the actual line.

Is there supposed to be a GUI option to modify these settings, or have I
done it correctly?

Is it a QNX C project, or a Standard Make project?

If a QNX C project, you probably need to do it through the GUI, you’re
not supposed to edit the Makefile. (In fact, I don’t know what editing
the Makefile does.)

I don’t have a 6.2.1 IDE around anymore to check exactly how to do it with
6.2.1.

Does the binary parser option in project settings have anything to do with
this?

For a QNX project, it should be set properly automatically.

For 6.2.1, I don’t remember for sure, but for a Standard Make project,
it should probably be set to QNX Binary parser. I don’t think it will
make a difference, but I’m not sure.

-David

David Gibbs
QNX Training Services
dagibbs@qnx.com