ÿØÿàJFIFÿþ ÿÛC       ÿÛC ÿÀÿÄÿÄ"#QrÿÄÿÄ&1!A"2qQaáÿÚ ?Øy,æ/3JæÝ¹È߲؋5êXw²±ÉyˆR”¾I0ó2—PI¾IÌÚiMö¯–þrìN&"KgX:Šíµ•nTJnLK„…@!‰-ý ùúmë;ºgµŒ&ó±hw’¯Õ@”Ü— 9ñ-ë.²1<yà‚¹ïQÐU„ہ?.’¦èûbß±©Ö«Âw*VŒ) `$‰bØÔŸ’ëXÖ-ËTÜíGÚ3ð«g Ÿ§¯—Jx„–’U/ÂÅv_s(Hÿ@TñJÑãõçn­‚!ÈgfbÓc­:él[ðQe 9ÀPLbÃãCµm[5¿ç'ªjglå‡Ûí_§Úõl-;"PkÞÞÁQâ¼_Ñ^¢SŸx?"¸¦ùY騐ÒOÈ q’`~~ÚtËU¹CڒêV  I1Áß_ÿÙELF>ps@@8@aa 0g0g!0g!p gg!g!$$papapa Ptd000000QtdRtd0g0g!0g!GNUe6LJp>XhC "’@ rAI *0 DHh BBF@ 90Rdf_&szTȬ{8QYx?ʆ%1nh"U).8('FBREomR} ͦ.X@1Ȋ]O\ YC =Z-C7rqEߚKI_e<`0>BEzGS9T¼gĸ/+$sд JPh|OpW|TF kVC8%"GO…Cm 9dyj!qX2]  0   uf8] B/ X=9 K p |k XU%  z= \ a    ,Z   " n      ` 5 t   L d(s#! *  L !C Q Ehm  G\ P {f , BId/? F"  @ `  !Q `8o   ! d t!B  p L  @~ 0P!  `u!  c  !] Pc @!!    _  0!   p=  %  p `! {r $ u  @  `?J  ?) ) !4 P  P7 !  M 0 m @  t!1  T!* @!  : /  @ ?!@! B  @p! z PI`  @yH!A !~ ` Z  q $o`!@!\ `__gmon_start___ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalize__stack_chk_failPyTuple_Type_Py_NoneStructPyObject_GC_Delng_as_flat_listPyList_NewPyList_AppendPyExc_SystemErrorPyErr_SetStringPyErr_OccurredPyDict_GetItemPyObject_SetItem_PyThreadState_Current_PyTrash_thread_deposit_object_PyTrash_thread_destroy_chainPyString_FromStringPyTuple_NewPyExc_RuntimeErrorPyObject_CallFunctionObjArgsPyObject_RichCompareBoolPyDict_SetItemNyNodeTuple_Type_PyObject_GC_NewVarmemsetPyObject_GC_TrackPyObject_GC_UnTrackPy_FatalErrorPyInt_AsLongPyDict_Nextrootstate_traversePyInterpreterState_HeadPyInterpreterState_NextPyString_AsStringsscanfPyExc_AttributeErrorPyErr_FormatPyMember_GetabortPyObject_Hash__sprintf_chkPyFrame_TypePyDict_TypePyArg_ParseTuplemallocPyEval_InitThreadsPyThread_start_new_threadPyInt_FromLongPyErr_NoMemoryPyExc_ValueErrorfreestderrfwritemalloc_statsqsortreallocng_iterNyNodeGraphIter_Type_PyObject_GC_NewPyExc_TypeErrorPyType_IsSubtype_Py_NotImplementedStruct_Py_TrueStruct_Py_ZeroStructPyMem_MallocPyWeakref_NewRefPyMem_Free_PyWeakref_RefType_PyWeakref_ProxyType_PyWeakref_CallableProxyTypePyClass_TypePyClass_IsSubclassNyRelation_TypePyObject_RichCompareNyMutNodeSet_Newnodeset_exportsNyMutNodeSet_NewHidingNyMutNodeSet_NewFlagsNyNodeSet_setobjPyDict_NewNyNodeSet_clrobjNyNodeSet_hasobjNyNodeSet_iteratePyList_SizeNyNodeSet_NewImmCopyNyImmNodeSet_NewSingletonNyNodeSet_be_immutablegc_get_objectsPyImport_ImportModulePyObject_CallMethodxt_free_tablehv_default_classifyPyInstance_Typext_findout_sizext_findout_traversext_findout_relatePyArg_ParseTupleAndKeywordsPyType_ReadyPyList_AsTuplePyTuple_SetItemPyType_Typehv_mutnodeset_newNyNodeGraph_Typehv_update_referrershv_is_obj_hiddenNyRootState_Type_hiding_tag__nameNyHeapView_SubTypeNewPyObject_GetAttrStringNyStdTypes_HeapDefNyHvTypes_HeapDefPyTuple_SizePyTuple_GetItemPyCObject_AsVoidPtrhv_cli_dictof_dictptr_PyObject_GetDictPtrdict_relate_kvNyRelation_SubTypeNewNyRelation_NewNyHeapView_iterateNyHeapView_TypePyObject_GetIterPyIter_NextPyObject_Sizehorizon_newng_add_edges_n1NyObjectClassifier_Comparecli_cmp_as_intstrcmpNyObjectClassifier_NewNyObjectClassifier_TypeNyNodeGraph_Clearhv_update_referrers_completelyng_clear_methodNyNodeGraph_AddEdgePyGC_CollectPySequence_Listhv_update_dictownersng_add_edgeNyNodeGraph_SubtypeNewNyNodeGraph_SiblingNewNyNodeGraph_InvertNyNodeGraph_RegionPyExc_NotImplementedErrorPyExc_KeyErrorPyErr_SetObjectNyNodeGraph_UpdatePyObject_IsTrueNyNodeGraph_Copyng_copyNyNodeGraph_InvertedNyNodeGraph_NewNyNodeGraph_initNy_NewInterpreterPyInterpreterState_NewPyThreadState_NewPyThreadState_Swap_PyImport_FindExtensionPyModule_GetDictPy_GetPathPySys_SetPathPyDict_SetItemString_PyImportHooks_InitPyImport_AddModulePyDict_GetItemStringPyErr_PrintPyThreadState_ClearPyThreadState_DeletePyInterpreterState_DeletePyEval_AcquireLockPyString_AsStringAndSizePyRun_StringFlagsPyExc_SystemExitPyErr_ExceptionMatchesPyErr_ClearPyFloat_FromDoublePyObject_CallFunctionPy_EndInterpreterPyEval_ReleaseLockPyThread_exit_threadPySys_WriteStderrPySys_GetObjectPyFile_WriteObjectPyErr_PrintExPyObject_PrintNyThreadState_SetAsyncExcPyLong_FromLonginitheapyc_Ny_RootStateStructNyHorizon_TypePy_InitModule4_64heapyc_docNyStdTypes_initPyType_GenericNewPyCObject_Importrootstate_docPyObject_GenericGetAttrPyObject_SelfIterhorizon_doccli_docdummyPyType_GenericAllocPyObject_FreeNyNodeSet_TypePyList_TypePyFunction_TypePyModule_TypePyTraceBack_TypePyCell_TypePyCFunction_TypePyCode_TypePyUnicode_TypePyDictProxy_NewPyExc_WarningPyErr_WarnExlibpython2.7.so.1.0libpthread.so.0libc.so.6_edata__bss_start_endGLIBC_2.3.4GLIBC_2.4GLIBC_2.2.5/opt/alt/python27/lib64ti ii ui 0g!0t8g!s@g!@g!`g!)hg!,pg!,xg!,g!,g!,!3+!v+!5+!=+!F+!Q+!Z+!d+!m+0!{+8!+P!{+X!+p!S-!S-!'!'!+!+!+!+!+!+!+ !((!8!q!@!+H!0X!p!`!+h!Вx!p!!g/!G(!\(!g(!s(!(0!/H!'/`!3/x!/!+!'!'!.!( !(8!)(p!px!!!)!h!F+!!+!@!m,H!X!!!r,!d+!x! !!)!! ! !w,(!@8! !@!)H!PX! !!,!w!!!!)!`!,(!( 0!!P!"X!+x!#!,!%!,!&!w!(!,0!@&8! H!h!,p!t-x!v!v!,!-!p~!@~!-!-!!! !v+H!5+! *!h&!`!p!!,!&!! !(!-0!-8!0@!H!h!,p!&x!!!,!'!`v!pv!6*!-!@!0v(!F*0!('8!@!h!tp!tx!t!@t !+8!`!@!+X!!`!+x!!!+!`!!+! !!+!!!! ,!! !!,!!! !*,(! 8!`!@!4,H!X! !`!;,h!x!!!D,!@!!!K,!!!!R,!!!!Z,0!y!0x!}!F*! !`!!,!!!!6*!!!! *!`! ! !,(!P8!`!@!,H!@X!!`!)h!x!`!!)!P!!!,!@!!!)!@!!!,!0!!!,!0!! !b)(!8!!@!-H!0X!!`!-h!Px!!!(!!!!B)!!!!-!!!!"-!!!!=-!0!! !((! 8!!@!D,H!X!!`!2)h!x!!!Q*!!!Q)!!!X-!!!y!@y !`!Ј!-x!u! !!v!!-! !`P! !X!v`!vh!`!!! !!X!h'p!ps!}!!y!.! P!p!!!!Px!! !!!!!!! .!h!@!8!;.P!@!!!@!0!!!!!!X!м!'!|x!w!w!!!!p!! !! !P8! @!p!! !@ 8!@!p!@ ! !0@!` x!!`!p!0@! Pn!Xn!`n!hn!pn! xn! n!n!n!H!n!n!n!#n!!n!'n!(n!!n!-n!.n!1n!2n!n!9o!:o!;o!=o!J o!(o!L0o!8o!P@o!Ho!Po![Xo!j`o!kho!npo!qxo!ro!o!zo!}o!~o!o!o!o!o!o!o!o!o!(!H!h!!!!O!O0!Op!O!O!OP!O!*!!!X!@!!!! !!`!!!!!ap!a!a!aP!a!a!!>!>!0!!p!i!i!i!i!i!i!i! i! j! j!j!j! j!(j!0j!8j!@j!Hj!Pj!Xj!`j!hj!pj!xj!j!j!j!j!j!j! j!!j!"j!j!j!j!j!$j!j!%j!&k!k!)k!+k!, k!/(k!00k!38k!4@k!5Hk!6Pk!7Xk!8`k!hk!pk!<xk!?k!@k!k!Ak!k!Bk!Ck!Dk!Ek!Fk!Gk!Hk!Ik!Kk!k!k!Ml!Nl!l!Ql! l!R(l!S0l!T8l!U@l!VHl!WPl!XXl!`l!Yhl!Zpl!\xl!]l!^l!_l!`l!l!bl!cl!dl!l!l!l!el!fl!gl!hl!il!m!m!m!lm!m m!o(m!p0m!8m!s@m!tHm!uPm!Xm!v`m!hm!wpm!xxm!ym!{m!|m!m!m!m!m!m!m!m!m!m!m!m!m!m!n!n!n!n! n!(n!0n!8n!@n!Hn!HH!HtH5!%!hhhhhhhhqhah Qh Ah 1h !h hhhhhhhhhhqhahQhAh1h!hhhh h!h"h#h$h%h&h'qh(ah)Qh*Ah+1h,!h-h.h/h0h1h2h3h4h5h6h7qh8ah9Qh:Ah;1h<!h=h>h?h@hAhBhChDhEhFhGqhHahIQhJAhK1hL!hMhNhOhPhQhRhShThUhVhWqhXahYQhZAh[1h\!h]h^h_h`hahbhchdhehfhgqhhahiQhjAhk1hl!hmhnhohphqhrhshthuhvhwqhxahyQhzAh{1h|!h}h~hhhhhhhhhqhahQhAh1h!hhhhh%e D%] D%U D%M D%E D%= D%5 D%- D%% D% D% D% D% D% D% D% D% D% D% D% D% D% D% D% D% D% D% D% D% D%} D%u D%m D%e D%] D%U D%M D%E D%= D%5 D%- D%% D% D% D% D% D% D% D% D% D% D% D% D% D% D% D% D% D% D% D% D% D%} D%u D%m D%e D%] D%U D%M D%E D%= D%5 D%- D%% D% D% D% D% D% D% D% D% D% D% D% D% D% D% D% D% D% D% D% D% D%} D%u D%m D%e D%] D%U D%M D%E D%= D%5 D%- D%% D% D% D% D% D% D% D% D% D% D% D% D% D% D% D% D% D% D% D% D% D%} D%u D%m D%e D%] D%U D%M D%E D%= D%5 D%- D%% D% D% D% D% D% D% D% D% D% DPXPD@H=s!Hs!H9tH Ht H=r!H5r!H)HHH?HHtH HtfD=r!u+UH= Ht H=. d}r!]wHWSHJ HB(Ht1)G\@tHHHtЅt [ffDHGPHH@ Df.fDfD1fHHHHGfHHHdH<%(H|$81Hx@HT$ H@PHL$HW H|$H$Ht$HT$(PHL$8dH3 %(uHHIfHG@LGXH@ J9t g81f.HwHWx-HL eCHiCBHH3BH9uH1HtfeCH1HuHf.He Df.HO(HAHP Ht HyDHHHH@1H9HHHtH1DSHWHHtH*tHC1[DHHGP0HC1[ÐHe HfDHFHHFDf.H9~t1HF(1SHHtH.t C0HC([HFHP0C0HC([ff.HGHt HfDH Hff.HHHtH1DSHWHHtH*tHC1[DHHGP0HC1[ÐHHH@`@f.HHHtH1DAVIAUIATIUSG ~D1IFLH|Aԅu"A9n ~$HcIFLHH<Aԅt[]A\A]A^fI~Ht[L]LA\A]A^[1]A\A]A^DHH9rUSHHG_$X @tHHHtЅtk H[]HGHPH9W(tHHHWHw HHfD1f.1fSHWHHGHGHHGHWHPHWHGHtH*tH[YfHHGP0H[HT$H=d!HB0LLHuHd!H*tHd!AH=d!HGP0Hd!eDAWAVAUATUSHH Lg LwHoL8HIA~8t M9oI}HtHAԅI}HtHAԅ~I} HtHAԅgI}0HtHAԅPI}8HtHAԅ9I}@HtHAԅ"I]H:f.HH{8HtHAԅH{@HtHAԅH{HHtHAԅH{PHtHAԅH{XHtHAԅH{`Ht HAԅuwH{hHt HAԅudH{pHt HAԅuQH{xHt HAԅu>HHt HAԅu(HHtJI~L9 Ht HAԅH[]A\A]A^A_H{Huf.LxIH1ATHUSHĀdH%(HD$x1lHHl$IHH1HH5ע1HT$HLH5uUxHtKHXHt/HT$H9uH9HHuHHufDH LH51H81HL$xdH3 %(HH[]A\1Ht@Hǃ=HuHt1S;$ufDS9$HHuH~ H51H8e1HT$HD$H5 uUH[T$HH1DHIpHu9tfDH[H9uHHHH5>!fHHH HH5H81f.1fHH5?!HHHwHs HH5ьH81'WfHQ H51H816lff.SHHHt HcSH1Ht [f.H[AWAVAUATIUS1HxLwdH%(HD$h1IAF DH9BtzA9^ HcIVID$HHH;uպdALH 1'LM|$ ZLHAׅuXIVID$HH9BufDdALH h1LIl$ LHՅF1HL$hdH3 %(uHx[]A\A]A^A_f.AWAVAAUATUSHHLgdH%(H$1H L(HGH@HD$oHtE1DAHAVHuGHD$HHl$ Ht$HCH9FHt$H9FLHt$H9F Ht$H9F0Ht$H9F8-Ht$H9F@xHD$LxMHuHt$H;5 I9G8I9G@}I9GHI9GP9I9GXI9G`I9GhSI9GpI9GxI9jM?MHCIT$M9dH9[IWHeE1ɹfDAH9HRADHu:MA)H1dH ivHK HHL$HڿHL$HхHCI9G8DdH1ML H HK HHL$>HڿHL$HхHCI9G@fDdH1ML H HK HHL$HڿHL$HхDHCI9GH+fDdH1ML bH H?HK HHL$nHڿHL$HхHCI9GPfDdH1ML H HK HHL$HڿHL$HхtHCI9GXofDdH1ML H xoHK HHL$HڿHL$Hх HCI9G`fDdH1ML ߡH HK HHL$6HڿHL$HхHCI9GhfDdH1ML H HK HHL$HڿHL$Hх<HCI9GpUfDdH1ML &H @7HK HHL$fHڿHL$HхHCI9GxfDdH1ML BH ؙHK HHL$HڿHL$HхupHCI9dH1ML ֜H pgHK HHL$HڿHL$HхB@H$dH34%(SHĘ[]A\A]A^A_f.H|$AHD$H1뭺dEHL fH g1HL{ HڿHAׅaHt$HCH9FdEHL H 1aHL{ HڿHAׅHt$HCH9F idEHL H 1HL{ ;HڿHAׅHt$HCH9F0dEHL oH Y1HL{ HڿHAׅSHt$HCH9F8dEHL 'H 1SHL{ HڿHAׅHt$HCH9F@dEHL H 1HK HHL$(HڿHL$Hх84@SHH5H H dH%(HD$1HT$LD$HD$HD$1҅tZHHteHD$HT$HHSHHD$HtHHH=dVHt8HxHHL$dH3 %(HuxH [@HfDHa H5,H8rHT$H*t/HT$HtH*u H|$HGP0H1H|$HGP0DSH GH=H kH H=RmH GH=y4H H[AVAUIATIUHSHHt HՅI}Ht LՅu}I}(Ht LՅukI}0Ht LՅuYIE@HtNAUL~FE1IcHHt"H{HHt LՅu H[ HuAE;uL} IE@D1[]A\A]A^f.HH9ruHNH9OrfAUHH ATUHSH*Hcw HDH}*Hcu t91xHHDH}u HEu$E)H[]A\A]@~LmHI\5IML9w'}DM9t Ao$AEIIL9vCI$I;EuIUI9T$uH(u I<$HGP0IT$H*uI|$HGP0@L+mIIcDm +@E ))SHt HcC [@HcC [f.USHHH= GHtBHXHH@{)tC HEHH[]fHHfD1ff.HH;51 HGt;H D H9Nu8HwHHtH(t 1H@HPHR0@HGHo H5p~H8pfH9tHHHHfAUIATIUSHHHw H9t HBtVI}H9t H-tAIT$IE9tt>HcHH5!Hc H>HY HH[]A\A]fH HH[]A\A]f.H9uH H9DH9DH9DH9DH9DHi HS1LfHAUATUHSHHH>Ht_LefH(H;HtDCtuHCHMI9 uLm HHAՅt 1H[]A\A]1f.UHSHHHHH>uH}(HHGH[]H[]@AUIATUHSHHHHo@HEHt(H;0uDHH9|HP HuHh hUIHHxH@HH@`)Hh1HLeHMl$@I$Iu0ID$HHtEHL[]A\A]H HSH5>{E1H81qHL[]A\A]LE1aDf.UHSHHH~H5M H9t EL~GHU@HtHHHt'H;XHuf.H;_Ht:HHx HuHH9uH> HH5zH81H1[]ÐHH HG HH+tH HH[]HCHP0@HCH; fDH HH[]A\A]f19tHV HH[]A\A]HA 191919IuI|$H[]A\A]1jHHֺff.HHֺff.HHֺlff.HHֺLff.H H`Df.H H` Df.H H`(Df.H H`HDf.HHHH:Hf.HGt t1HF(HHUHHSHHHHxH@P HtHH}HHt*HHP1HHuD$ HSHR0D$ H[]H+D$ tf.UHSHHHH5u H9t tfH}HHt&H}H*H[]KHuH}HHt HDHCH56tHPH H81Af.ATUHSHdH %(HL$1HH<$HHD$t!H|$7HL$dH3 %(u H(f1'ATUHSHH H~dH%(HD$1HS HHpH9t RHC HPHz H{H$E1׬HD$HtMIH5HLtSI|$ɤtDHt$H{8HT$IH*t:HL$dH3 %(Lu^H []A\@HT$E1H*uH|$HGP0H9 H52QE1H87DH{8HtIf.ATIUSHH dH%(HD$1HG8HH$ͫHD$Ht{HH59LHtYH}tKHt$H{0HHL$H)u H|$HGP0Ht$dH34%(HuH []A\1@1Df.SHH dH%(HD$1H<$KHD$HtUHH5wH?t"HD$HL$dH3 %(u-H [HT$HtH*u H|$HGP01胤UHSHH(dH%(HD$1H<$HHD$Htc{)t;HH5$HHT$t/HL$dH3 %(Hu2H([]DHfDH*u H|$HGP01ݣf.H(HH5%dH %(HL$1HH<$HD$tBD$u*H# HHL$dH3 %(u#H(f.H 1GSH  HHHH`HdH%(HD$1ItjH߾0HHtTH!1H!HCHCHt,H<$HH5.)tHHu @H+t"1HL$dH3 %(HuH[HCHP0gSHH0dH4%(Ht$(1H\$H|$HT$HHKH5_1@tL9HGHOLH@(HL9tcHGHOHLH@(H@1L91L9HHU H5LH8fH@1Df.ATIUHSHLHxH@PHtuMHUHHH}tJu5H1HPHHt []A\DHCHP0[]A\H}LZY HHHhHD$0HEH5t HC HHD$@HC0HHD$HHC8H]HC(HtTH5 HUH+tHL$XdH3 %(uCHh[]HSHD$HR0HD$f.H+u HCHP01GUHHH5cVSH(Hʛ dH%(HD$1HL$(tt HHtbHhHD$H5 HHEHC H}H+tHL$dH3 %(u+H([]HSHD$HR0HD$f.1臘H5 H5E AWHH5UAVAUATUSHXL H dH%(HD$H1HL$(1LL$05HD$(LpEEHXHC1L% @A9HT$(HcH\HC`HCHxL9tLcH{(HGuH H5CH8脗1I/u IGLP01HL$HdH3 %(aHX[]A\A]A^A_IHtHD$(IcHIGHHD$0IG HHIG(I(IG0vEE1SHyHHNIW(HHDH}(踕HcpH'IW0AHDE9tjHD$(IcHlHMHE HQHR HuHDHQ H5SH8R1H1 H5RBH821H5 L蜚I/IWHD$LR0HD$ĕ@UHHH5SSHhLb dH%(HD$X1HT$HHD$HL$0RHP0RHf LH(1苘ZY gHHHhHD$0H5[ HHEHC HHD$8HC(HHD$@HC0HHD$HHC8H诙H+tHL$XdH3 %(u-Hh[]fHSHD$HR0HD$f.1跔H5 PUHH5RSHHL- H> dH%(HD$81HL$(1LL$0}H= yHT$(Hz~?H- 11fHDHxH9tHztnHT$(HcH;B|տHHtaHD$(H57 HHCHHD$0HC HjH+u4HSHD$HR0HD$fDH H5:@H8貓1HL$8dH3 %(uHH[]d@ATUSG LgHG HG~FLHIlfDHH*u H;HGP0HSH*u H{HGP0HH9u[L]A\黐f.SH_HGJHtH+t1[HCHP01[f.AUATUSHHӔ L MtA$1A$HWHGHGHHHGHWHPHGXE ~VE1fDHEIcHHH*uHEH<HGP0HEHTH*uHEH|HGP0AD9m H}袏HEH@Mt"A$I$A$t~H[]A\A]H[]A\A]qH[]A\A]1AWAVAUIHH5I>ATUSHHH: dH%(HD$81IE HL$Ll$HH$H IE HD$HD$1)1茐IH HȔIăH|$RE AD$1L$DuvLHL$H|$LHD$ HtqHL9IGL4(D$(L9t$tI~H9tH輕uH I~HHpH9uH$I9F LHD uf1H$IE I/u IGLP0HT$8dH3%(Hu3HH[]A\A]A^A_@H$1IE @HI HH諏f.HH HH*G u#tHcLGHILH91fDAUIATIUSHH9G$Hh1ɉfDuxeHcH{HHDHCHtKk$I$IEHcC HHCL HcC HHCLh1C C)H[]A\A]fHCHC @H9Q61ATIUHSHHHHxH@PHtNI|$HHHt,HHP1HHuD$ HSHR0D$ H[]A\H+D$ t߸AWAVAUATUSHHHHHt$dH%(HD$81HD$ HD$(@H H{(IqHu+H5% HHHH(u HPHR0H{(舒HD$HD$ HHޏ HHHøHRHJH+HHl$(HxHD$H\$Hِ~g@E1H,fDHCN,8L踎IHt2H0Ht*H|$LkI6L觌IL9uHD$HD$HHl$E1H@(1L L fHI9HEL<M9GuLLLL$ՋLL$L uH H|$L豎LL$L uI,$tyfHL$H\$(HHT$HHHt H+HL$8dH3 %(HH[]A\A]A^A_I,$u2HD$f.IT$D$LR0H|$D$qH\$(f.IIu1I,$IJl, fDHCHP0HSD$HR0D$7fHQD$HR0D$fHD$H\ 芊f.SHHH5GHHS dH%(HD$1Hkt7H4$H;t&H HHT$dH3%(uH[D1UHSHHHW(H 觌tH{HH[]@HH9zUHHSHHuXHHt_H}Ft1H[]fH}H$uID$ HxH@PHHH|$ HtjH+u HCHP0HH9l$wH|$ t7Ht$ I|$8(HL$ H)uTH|$ HD$HWR0HD$<DHtH+u HCHP0HT$ HtH*u H|$ HGP01HL$(dH3 %(u H8[]A\A]H|$ dd@AUATUHSHHhHdH%(HD$X1HHt$(HD$0HE8D$HD$PHE(H|$D$8HD$HˇHD$@H H} HL$HH詅H$L% Ll$H;\$sEfHCL9t(HD$ H}HpuLHPt~D$8uvHH9\$wI}0[t]Ht$@H}0舯HL$@HH)tRf.HE(L`HT$XdH3%(HuIHh[]A\A]f.L%I HL$@1H)uH|$@HGP0f.1臀AUATUSHH(dH%(HD$1H H9Ft2HG0HHG0HT$dH3%(H([]A\A]Ll$Ld$H HLL$tHD$H;D$s#HpH;5x tTHC(HxH@PDH{ GHs H{t5H{ LLHÃtHD$H;D$rHC8HHC8;13t@UHHSH(H}dH%(HD$1HL$HT$]t5H\$H;\$r2f.HH9\$vHsH}u@1HT$dH3%(uH([]~f.ATIHUHSH I<$dH%(HD$1HL$HT$踂t4H\$H;\$r5DHH9\$v%HSI|$H$u߸ 1HL$dH3 %(u H []A\0~SHHH H;dH%(HD$1HL$HT$t1Ht$H9t$tH\$dH3%(uH [fDC}f.ATUSH0dH%(HD$(1H$)HHHL$ HT$H艁HD$HT$ H)H{(HM9U~HDb1I HD$HHLHXHzHJH@HHt H/uHGP0I9u1Ht$(dH34%(H0[]A\Ãu7HxHhHEH/uHGP01DHt$Ht$ H~ H5)H8|H~ H5)H8|jH`~ H5)*H8a|J"|fATIUHSH dH%(HD$1)tpHL$HT$LHHD$H\$H)H}(tCH@HH|$dH3<%(H []A\D뉐Hc}Ht}~ōsHT$HHH| fDHRHHHT$HrHHqHT$H9u@H1} H58H8B{1aHY} LH8Vz1Ezf.HHH5:f.SH HHHHX8H dH%(HD$1LL$LD$HD$HD$_xt{H3{HHtkH|$Ht \}tC(Ht$HtH;5| t H)~tHL$dH3 %(Hu%H [H+uHCHP01yH}tHW| HHfD1@UHSH}Ht1HHH}tHH[]@H+u HCHP01HH[]ff.~S~Ht)HHFzt H[@H+u HCHP01H[Ð7zUHSH.~Ht1HHH|tHH[]@H+u HCHP01HH[]ff.H=uz PySHH dH%(HD$1H<$;vHD$HtUHH5Ht"HD$HL$dH3 %(u-H [HT$HtH*u H|$HGP01w1fAVAUATUSH{HrHHxHHH}I{H5^5HCH}HtH+}HC HH5B5H}HtjH}HCHzHxH{HSH5`2tIwH=4 vHH|H55HIyHtU@yHuHH[]A\A]A^SwHk{L|H1wH!xHH[]A\A]A^ÐH=c4xIHtHH54L:tt H=$yI.kIFLP0\H1[H]A\A]A^fDH=4HD$WyHD$ DHw f.AUATUHSHdH%(HD$1zu|HH}1HH{zugH=3 xHIP{HMH<$E1H¾xHtH(I,$u>ID$LP01I,$uID$LP0Hw H8uvHUH*u H}HGP0HUHtH*u H}HGP0HrHCH9X?H=2CwHHt H52HsHmIH6L-2uIf1LLHvHHCH9XuH;uI,$u ID$LP0Hmu HEHP0H\sqbsHD$dH3%(H[]A\A]H=d"1%rH=29v1HH}HRuH=/1q1mtH(?HPHR00H;MHEHLP0HPHR0I,$FHv H}H0ykXsAVAUIATUHS yHIE1f.I^HtQL9u9HHǃHt H/uHGP0HtHEHAHHuLqIHu[D]A\A]A^E1[]DA\A]A^Ðf.SHH50H dH%(HD$1HL$HT$~utlH|$pHHtOHt$H wHcH!|sH\$dH3%(u2H [fDH1vHDCtHt1qDAWAVAUATUSHHt H-s H=Qs HhHns H8H1r<L%s I$8&LrL-s I8LyrL5s I8 LTrL=s I8L/rHr H8H=r r~H=s H8q\H8Hq>A11H5 H=.AoHHHr H8HuH=%r H rH5_.HHmLH51HmLH51HmLH5..HmHq H5=1HmLH51HmHr H5*HwmHH5-HemH=+iqHr Hum 1H[]A\A]A^A_Hq H8DHqq I$8@HYq I8DHAq I8DH)q I8DHq H p H8fDHp H8DHp H8DH5,H=,oH p HH&f.Hq (H=HsfDHGSHW8HX H9W(t HW TR@tHHHtЅt [ff.HGHSHX tHw1ɉu@tHHHtЅt [ff.HGHHP tHG @GDHGHHP tHG(@GDATUSH_Ho LgH{ Ht LՅH{(Ht LՅH{0Ht LՅuvH{8Ht LՅudH{@Ht LՅuRH{HHt LՅu@H{PHt LՅu.H{XHt LՅuH{h1Ht[LH]A\D[]A\ATUSH_Ho LgHHt LՅH`Ht LՅ|HXHt LՅugHPHt LՅuRHHt LՅu=HhHt LՅu(tH`Ht[LH]A\D1[]A\fHGHWHO(H@ D HtHqHV(QV DfATUHSH_HGH9H9`H9XH9P!H9|H9h71t HMH9`t[]A\fH=,H] lHHӅfLg H=T'`lHHAԅHEH9`FfH=A,Le lHHAԅHEH9XfH= ,Le kHHAԅulHEH9PDH=+Le kHHAԅu4HEDH=+Le xkHHAԅ[]A\H=|+Le @kHHAԅuHEYD LO9AWHcAVIAUIATDaUI,SDHAE1D$DH9Bt!IGM9tyIJxIFuH9uIEtIcLHt$DnHt$H9|RH=*~jLHƋ|$AV tH[]A\A]A^A_H1[]A\A]A^A_LhH1AWAVAUATUHSHH_L{ IGHEgLLhIG@LpHGH9CH9H9C( H9C0AH9C8wH9CPH9CXH9C`H9ChIw8E11DH[tAHD[]A\A]A^A_IwHE1DDH#uIwHADDHuEIw@E1DDHuIw@DADHAąmHCHHfLk@L9wXfIL9kHAHEI9EuLH+{@Lu HkHHAօtDHM H=)HL$chHHL$Hх@HO H=(HL$+hHHL$HхHS HEH9+HM H=R(HL$gHHL$HхZHEH9C(HM H=(HL$gHHL$HхHEH9C0HM H='HL$kgHHL$HхHEHM H='HL$+gHHL$HхHEQHM H=w'HL$fHHL$HхZHEHM H=?'HL$fHHL$HхHEHM H= 'HL$kfHHL$HхHEATUHSHi~ED`1 HCL9t4HH}HdH9EuHiHtHHƿU t[1]A\[]A\fAWAVAUIATUSHLwI^ HC8HPtbk~[E1fDAD9t9HC8McJ|f H=HuIE(K9xt4I} LIFIUIu HH[]A\A]A^A_H1[]A\A]A^A_fUSHHHoHe H}H0dH9C(t&HEHSHs H{HH[]H1[]ATUHSHf~ED`1 HCL9t4HHEH@HH9EuHzgHtHHƿU t[1]A\[]A\fATUSHoHHWH9Ut1H;U tD[]A\f.Lg H=$cHڿHAԉ¸uHS1H;U uH=~$Hk cHڿH[]A\ÐHWHOH9Jt1USHHHo H=9$ocHڿHՅH[]ATUSHoHHWH9Ut1H;UtD[]A\f.Lg H=#cHڿHAԉ¸uHS1H;UuH=#Hk bHڿH[]A\ÐAWAVAUATUSH8T$ L$dH%(HD$(1HD$ HthHIL|$1Lt$Ll$ LLLLdt0HEH;D$tMH9D$uHD$H|$HHt$U tf1H\$(dH3%(u@H8[]A\A]A^A_HM HcH $eH|$ H $HхuHE_fATUSHoHHuH;wtH߹[]A\bLg H="aHڿHAԅuHu[]A\fDATUSHoHHuH;wtH߹[]A\aLg H=aHڿHAԅuHu[]A\fDATUHSH_HGH9CH9CH9C H9C( H9C0;H9C8aHs@H9t[H]A\`fH=!Le ``HHAԅuHs@[]A\fDLg H=! `HHAԅuHEH9CGH= Le _HHAԅuHEH9C !H= Le _HHAԅjHEH9C(@H= Le _HHAԅ2HEfH=h Le P_HHAԅHEH=A Le _HHAԅHEpATUSHoHHGH9Et_H9EH9E tHuH߹[]A\-_DH=Lc ^HڿHAԅt[]A\@Lg H=x^HڿHAԅuHCH9E{H=8Lc @^HڿHAԅuHCHDATUSHoHHGH9EtgHuH9tH߹[]A\X^H=Lc ]HڿHAԅuHu[1]A\fLg H=]HڿHAԅuHCnDHw]fAVH^ L5 AUATL%UH-iSH] HCH^^ HǃHCHH\ HH:] HH^ HH] HHH\ HH] HH] HH\ HHH] HH\ HH] HHHn] HǃHfH9k tZH@H{L9cuH=m\HtH5bH%YHtHCH@ H(tH8u|LsH9k uf[^IHtH;XHtHHHKH(t0ImsIEH@LP0H{i[]A\A]A^HQ0Im=DH[ HCH5H8XHHconf_relate_visit: invalid relation typenodegraph changed size during iterationhorizon_remove: no such horizon foundno such interpreter state numberinterpreter state has no attribute '%s'root state has no attribute '%.200s'thread state has no frame numbered %d from bottomthread state has no attribute '%s'====================================================================== set_limitframe: frame or None expectedDuplicate heap definition for type '%.50s'delete_extra_type: argument must be a weak ref, got '%.50s'delete_extra_type: reference object %p not foundcli_and_memoized_kind: argument must be a (subtype of) tuple.cli_and_memoized_kind: wrong length of argument.inrel_visit_memoize_relation: can only memoize relation (not "%.200s")horizon_patched_dealloc: could not clear object in nodesethorizon_get_org_dealloc: no original destructor foundregister__hiding_tag__type: type has no '_hiding_tag_' slotregister__hiding_tag__type: type is already registeredregister_hidden_exact_type: type is already registeredrel_new: Invalid relation kind: %d, must be > 0 and < %d.hv_cli_rcs_memoized_kind: nodeset object (immutable) expected.Invalid cmp argument to NyNyObjectClassifier_CompareCompare argument must be a string.Compare argument must be one of < <= == != > >=Invalid value of cmp argument.This classifier supports only equality selection.Tuple of triples with [0] a CLASSIFIER expected.Tuple of triples with [2] a STRING expected.cli_and: classifiers argument must contain classifier objects.O!:update_referrers_completelyupdate: right argument must be sequence of 2-tuplesItem deletion is not implemented for nodegraphs.ng_ass_sub: can not change number of edges (wants to always be fast); consider using .add_edge() etc. instead.ng_ass_sub: value to assign must be a tuplecan't add __builtins__ to __main__Unhandled exception in thread started by Error at initialization of module heapycThe hiding tag: if it is the the same object as the hiding tag of a HeapView object, the nodegraph will be hidden from that view.NG.is_mapping : boolean kind, read only True if NG is a 'mapping'. Then, only one edge is allowed for each source; indexing returns the actual target object instead of a tuple of targets.NG.is_sorted : boolean kind, read only True if NG is sorted. It will become unsorted after any update. It will need to be sorted to make it possible to find edges (implementation uses binary search). Any indexing operation will automatically sort it if it was not already sorted. The flag is currently used from Python to see if the nodegraph has been used at least once after update, so that it will not be cleared too early.HV._hiding_tag_ The hiding tag defining what objects are hidden from the view defined by HV. Objects that contain a _hiding_tag_ object which is identical to HV._hiding_tag_, will be hidden from view, in the following cases: o The object is of a type that has been registered for hiding via _hiding_tag, or is of a subtype of such a type. o The object is of instance type. Such an object will be checked for a _hiding_tag_ item in its __dict__. HV.is_hiding_calling_interpreter : boolean kind If True, the data of the interpreter using the HV will be hidden from the heap view as seen from RootState. This is used when multiple Python interpreters are used. One interpreter will be monitoring the operation of the other interpreter(s). It would set is_hiding_calling_interpreter to True in the HV it is using. Its own data will then be hidden from view, making memory leak detection more practical.is_using_traversing_owner_updateHV.is_using_traversing_owner_update : boolean kind True if update_dictowners is using a recursive traversal algorithm to find the dicts in the heap. When False, the normal case, it will use the dicts found in the gc collection structure, by gc.get_objects(). This was found to be much faster in usual cases, but the old version is available by setting this flag. -- It may be removed in a later release! --HV.root An object that is used as the starting point when traversing the heap. It is normally set to the special RootState object, which has special functionality for finding the objects in the internals of the Python interpreter structures. It can be set to any other object, especially for test purposes. See also: RootStateHV.static_types : NodeSet, read only The 'static types' that have been found. The static types are the type objects that are not heap allocated, but are defined directly in C code. HeapView searches for these among all reachable objects (at a suitable time or as needed).classifier returning object typeclassifier returning object classclassifier returning index of matching kindclassifier returning object sizeclassifier returning singleton set containing object itselfclassifier returning the object itselfclassifier based on a combination of other subclassifiersguppy.heapy.heapyc.RootStateTypeguppy.heapy.heapyc.ObjectClassifierRootStatei%d_%50st%lu_%50sedges[%d].srcedges[%d].tgtmodulesi%d_%ssysdictcodec_search_pathcodec_search_cachecodec_error_registryt%lu_f%dc_profileobjt%lu_%sc_traceobjcurexc_typecurexc_valuecurexc_tracebackO|O!:interpretercan't start new thread Output from malloc_stats gcget_objectsOO:numedgesOO:relateob_typeO!:register_hiding_type_hiding_tag_O!O!O!|O!i:shpathstepO!O!:reachableO!O!:update_referrersdelete_extra_typeOO!:hv_new__dict__iO:rel_newO:partitionO:Horizon.__new__OO:<OOO:selectO!OOO:user_definedO!O!O!:cli_rcsO!O!O!:cli_inrelO!:cli_indisizeO!O!:cli_findexTuple of TUPLES expected.O!O!OO:cli_dictofO!O!:cli_andO!:update_dictownersAmbiguos mapping|OO:NodeGraph.__new____builtin__sys__main__can't create __main__ module__builtins__stderrtimesleepOOheapyc__doc__ObjectClassifierRootStateTypeNyNodeSet_Exportsguppy.sets.setscXrelatoriterableis_mappingcond_clicond_kindclassifymemoized_kindstartavoidGUSAvoidEdgesfind_onerootheapdefsset_async_excxmemstatsis_sortedadd_edgeadd_edges_n1as_flat_listclearcopydomain_coversdomain_restrictedget_domainget_rangeinvertinvertedrelimgupdateupdatednodegraph-iteratornewsselfepartition<===!=>>=limitframeis_hiding_calling_interpreterstatic_typescli_classcli_idcli_idsetcli_nonecli_typecli_user_definedindisize_sumheapreachable_xregister_hidden_exact_typeregister__hiding_tag__typeupdate_referrers_completelyclassifier returning Noneuser defined classifierhv_cli_rcsclassifier returning ...guppy.heapy.heapyc.NodeTupleguppy.heapy.heapyc.Relationguppy.heapy.heapyc.NodeGraphguppy.heapy.heapyc.Horizonguppy.heapy.heapyc.HeapViewxihiXiHi(iippppppȜ؜?tp_cache__mro____bases____base__tp_subclasses__slots__?f_backf_codef_builtinsf_globalsf_localsf_tracef_exc_typef_exc_valuef_exc_traceback__self____module__ob_reftb_nexttb_framefunc_codefunc_globalsfunc_defaultsfunc_closurefunc_docfunc_namefunc_dict__name____class__arrayArrayTypeheapyc.NyStdtTypes_init: Can not size array objects in this Python version;0 :@CTD`DpDD,D@DTDhD|PEEEF0F@FPF pF$ FD FX Fl F G PG G G G H H$ H H I PI `I I JT PK `L PM4 `MH Nl @N N N @O O$ OL P 0R pT 0WppWX`a,bPclcd@epeeD`f`fxghh<ikpkltm0nPo`potoooop0pPppp,0qXqrs0tTPthu0uuuv$v8vLv`wtwxy8yyz zzz|,|p||P}}~@~tPDpP`(p<pЉ(``@ Hpt @`В p<pP0 $ < 0 p 4!`!!!!" ("Pd"" "0"Ц#D#X#0### ,$|$$$ %\%%в%&8&\&дt&0&p&&p&' '|'''$( `((`((p)L)`)))@)P)**P*d*** +@H+++P,$,@,0T,`h,0,,@,@(-@- -.`x..0./D/|//080`t0@000zRx $@)0 FJ w?:*3$"DH2 \ $ 0>@EAD qCA4H>3Ht>\p>dE} N OH|>FBF A(D0i (D ABBK Q(D ABB0$?FAD G0~  AABD \? FED A(D0W (C ABBE N (C ABBB M (F CBBF H\p@EAG  AAG D AAJ ^ DAE TAAA AUS H iGA04AEDG x AAF ] FCJ ,B(@BJFDD Y ABF (l@BTFDD Y ABF $tBEAAJ sDAHBEDD e AAD D DAO l AAB TAA8 0C[FBA H(GP (A ABBD HHTD8FBB B(A0A8D@ 8A0A(B BBBD 0HFFDA D  AABD 4 EAAH9E` K HHH&FBB B(D0A8F 8A0A(B BBBA LPIFBH B(A0A8JM 8A0A(B BBBK ,R;EN0 AE HSiEc8SFBE D(D0(A BBB0T.80LT)BUA D(D0M (A ABBE l@U#IJ E J(PUdEAG { DAC UwHs E U.MTLVGFED C(D0 (A ABBC O (A ABBK << WKBA D(G0m(A ABBD0| pWLEDG e AAI DFAL WBEA D(P0 (D ABBD c (D ABBA 4 LX#EDG  CAB e AAI (8 DYSBDD X ABK d xYeFBB A(A0D@ 0A(A BBBF Z 0C(A BBBD P 0C(A BBBF Y 0A(A BBBG t dZFBE B(D0A8DPp 8A0A(B BBBF D 8C0A(B BBBH W8A0A(B BBB` Zf\t ([FED C(D0q (A ABBC Z (A ABBH M (C ABBE  [ [ \ \$ \8 $\L 0\` <\t H\&KU `\/( |\uEGD0Q AAA ( \EDG E AAI 4 d]FAD b ABH DAE40 ]{FAD a ABA DAE\h ^"FBA A(G@ (C ABBC K (E EBBG O (C ABBI  ^0 ^FAD D0  DABD l_0$x_OEDG Y CAC XCAX_(l_AAD@ AAH d`p`|``0`pEK o AH X AG DC<`{KEB A(A0W(D BBBL\aIBB A(A0 (C BBBI K (C BBBD HaEDD ^ AAC D DAG Z AAD DAA4b) Pb  Lb4XbcHb$@\bOEEA  ABI w ABF [AB@cgBDD g DBI N AIH ACBdKDd4 PdZFDD ] ABB UGI@DxdiFDD W ABH U AEE JHB(dEND` AAH 08eKEDG \ AAB GGH<TesEDG X AAF Z DAI GGHD(eMEA D(G0S(A ABBIH0DpeFIB J(H0G 0A(A BBBF (gEHT04 AAI iE[ w AH $i1EDG \CA<0iyEDG0x AAF X AAF DCA(p jFADD s AAA 0j L,jEJKpqxUEFAEAHKp} AAD 4jENNPjXD`FXAP AAA 48kENNPjXD`FXAP AAA (pllZEND` AAH 4mFDA { ABG N DBL 0mNEGG Q AAJ VDA8nFBD I(D0 (D ABBC (DoE[8o@O8C0j AA p int Create a new interpreter structure with a new thread and return the thread identity number. The arguments are: command A command that will be exec'd in the new environment. locals Local variables passed to the command when exec'd. The new interpreter and thread is started in a new environment. This environment consists of a new '__main__' module, with the optional locals dict as local variables. The site-specific initializations are not automatically made. To do that, 'import site' could be used as the first statement in the command string. The interpreter() function will return after the new thread structure has been created. The command will execute sooner or later. The thread will terminate, and the interpreter structure be deallocated, when the command has been executed, and dependent threads have terminated.The type of an object with special functionality that gives access to internals of the Python interpreter and thread structures. It is used as a top level root when traversing the heap to to make sure to find some special objects that may otherwise be hidden. There are no references from the RootState object to the special objects. But the heap traversal and related functions defined for RootStateType look into the Python interpreter and thread structures. The visibility is controlled by options set in the HeapView object which is passed to the traversal function. This makes it possible to hide an interpreter and/or some frames referring to system objects that should not be traversed. (See the attributes 'is_hiding_calling_interpreter' and 'limitframe' in HeapView.) The objects found in interpreter and thread structures are related to the RootState object via attributes with special names. These names have a special form which will be described below. The name starts with either an interpreter designator or a thread designator. It is then followed by the name of a member in the corresponding interpreter or thread structure. These names are the same as the names of the members in the C structures defining them. Some of the names may be dependent on the Python interpreter version used. The attribute names are used for two purposes: o To be the name used in the result of the 'relate' operation between the RootState object and some object that is referred to via an internal Python interpreter or thread structure. o To be used as attribute names when selecting objects from the RootState object. This may be used to get at such an object knowing only its attribute name. An attribute name is of one of the following two forms. i_ t_ The interpreter number identifies a particular interpreter structure. Often there is only one interpreter used, in which case the number is 0. It is possible to use more than one interpreter. The interpreters are then numbered from 0 and up in the order they were started. [This applies as long as no interpreter is terminated while there is still a newer interpreter running. Then the newer interpreters will be renumbered. If this is found to be a problem, a solution may be devised for a newer release.] The interpreter attribute is a member with PyObject pointer type in the PyInterpreterState structure and is one of the following: modules sysdict builtins -- In Python versions from 2.3.3: codec_search_path codec_search_cache codec_error_registry The thread numbers are taken from the thread identity number assigned by Python. [ In older versions without thread identity numbers the hex address will be used.] The thread attribute is a member with PyObject pointer type in the PyThreadState structure and is one of the following: c_profileobj c_traceobj curexc_type curexc_value curexc_traceback exc_type exc_value exc_traceback dict -- In Python versions from 2.3.3: async_exc -- Special attribute: f The frame list is treated specially. The frame list is continually changed and the object that the frame member points to is not valid for long enough to be useful. Therefore frames are referred to by a special designator using the format shown above with a frame number. The frame number is the number of the frame starting from 0 but counting in the reversed order of the frame list. Thus the first started frame is 0, and in general the most recent frame has a number that is the number of frames it has before it in call order. NodeGraph([iterable [,is_mapping]]) Construct a new NodeGraph object. The arguments are: iterable An iterable object that will be used to initialize the new nodegraph. It should yield a sequence of edges of the form (source, target). is_mapping A boolean which, if True, will cause the nodegraph to be treated like a 'mapping'. It will then, for the purpose of indexing, be expected to contain a single target for each source node. A NodeGraph object contains pairs of nodes (edges) and can be indexed on the first node of the pair (the source of an edge) to find all second nodes of such pairs (the targets of those edges). NodeGraph objects are used internally in the heapy system, for example to record dict ownership and shortest-path graphs. They may be used generally for mapping and dict-like purposes, but differ in the following: o The mapping is based on object identity - no equality or hashing is assumed, so any object can be used as a key. Only the address is used. To distinguish this usage from that of ordinary dicts and sets, such objects are called 'nodes'. o There may be any number of targets associated with each source. o Performance characteristics differ from dicts, in somewhat subtle ways. NG.updated(X:iterable) -> NodeGraph Return a copy of NG updated with the edges from X, specified as pairs of the form (source, target).NG.update(X:iterable) Update NG with the edges from X, specified as pairs of the form (source, target).NG.relimg(X:iterable) -> NodeSet Return the relational image of NG wrt X. That is, the set of nodes that are the target of some edge that have its source in X.NG.inverted() -> NodeGraph Return a copy of NG with the edges inverted.NG.invert() Invert the edges of NG.NG.get_range() -> NodeSet Return the set of nodes that are the target of some edge in NG.NG.get_domain() -> NodeSet Return the set of nodes that are the source of some edge in NG.NG.domain_restricted(X:iterable) -> NodeGraph Return a new NodeGraph, containing those edges in NG that have source in X.NG.domain_covers(X:iterable) -> bool Return True if each node in X is the source of some edge in NG, False otherwise.NG.copy() -> NodeGraph Return a copy of NG.NG.clear() Remove all items from NG.NG.as_flat_list() -> list Return the edges of NG in the form [src0, tgt0, src1, tgt1 ...].NG.add_edges_n1(srcs:iterable, tgt) Add to NG, for each src in srcs, an edge from src to tgt.NG.add_edge(source, target) Add to NG, an edge from source to target.H.news(X:iterable) -> NodeSet Return the set of objects in X that is not in the set of objects of H. If H was created from the contents of the heap at a particular time, H.news(X) will return the set of objects in X that were allocated after H was created. Horizon(X:iterable) Create a new Horizon object from X. The objects in X will be used to initialize a set of objects within the Horizon object. There are no official references to these objects, but as some of these objects become deallocated, they will be removed from the set of objects within the Horizon object. The objects within the set of objects within the Horizon object can be compared to another set of objects via the news() method. This can be used to see what objects have been allocated but not deallocated since the Horizon object was created. C.select(X:iterable, kind:object, cmp:string) -> list Select objects of a particular kind. Each object in X is classified by C to get its kind and this is compared with the kind argument to determine if the object will be returned in the return list. The cmp argumt tells how the kind of the object OK is compared to the kind argument AK and can be one of < <= == != > >= . The comparison '<=' used depends on the classifier. Not all classifier may have such a comparison available. The common cases where it is available are: For the type classifier: A <= B means A is a subtype of B. For the size classifier: A <= B means that the size A is less or equal than B. For the referenced-by classifier: A <= B means that A is a subset of B. C.partition(X:iterable) -> dict Return a partition of a set of objects. Each object in X is classified by C to get its kind. The partition returned is a mapping from each different kind to a list containing the objects of that kind.C.classify(object) -> object Return the kind of an object. The object is classified by C, to get its kind which is then returned.This is the type of objects created by the hv_cli_* factory methods of HeapView objects. See HeapView.__doc__ and the factory methods for the different kinds of classifiers that are supported. HV.update_referrers_completely(X:nodegraph) Update referrer graph X 'completely'. [Experimental algorithm that updates X with the referrers to all objects in the heap (of visible nodes as defined in HV). It is not normally used.]HV.update_referrers(X:NodeGraph, Y:NodeSet) Update referrer graph X for Y. The visible heap defined by HV will be traversed from the root of HV so that the edges of every path from the root to nodes in Y will be represented, inverted, in X.HV.update_dictowners(owners:NodeGraph) Update owners with ownership edges. The dict owners graph will be updated with an edge from each dict object in the heap, to either its owner or to None.HV.limitframe : frame | None The traversal limiting frame. If limitframe is set to a frame object, the frames that are more recently entered than limitframe will be hidden when traversing the heap from the root RootState. It will start traversing from limitframe rather than from the most recent frame as it would otherwise do.HV.shpathstep(G:NodeGraph, U:NodeSet, S:NodeSet [,AvoidEdges:NodeGraph [,find_one:bool]]) -> NodeSet This method implements one step of a shortest path algorithm. The arguments are: G Updated by the method, with the edges from nodes in the source set to the new nodes visited. U The source set for this step. S The set of already visited nodes. AvoidEdges Edges to avoid. find_one If True, at most one edge will be found from each node in the source set. Normally, all edges will be found. Return value: The new nodes visited. This may be used for the U argument the next time the method is called. See also: shpgraph_algorithm in Path.py.HV.relimg(S:iterable) -> NodeSet Return the 'relational image of HV wrt S'. That is, the set of nodes that are directly referred to from the nodes in S via the visible heap reachability relation as defined by HV.HV.relate(src, tgt) -> relation structure Return a description of the relation between src and tgt. This is used for descriptions of edges in paths. [The result is in a special format that I choose to not define here since it is for special low-level use and subject to change.]HV.register_hidden_exact_type(type) Register a type of objects that should be hidden from the heap view defined by HV. Objects of the exact type registered -- not including subtypes -- will be hidden. See also: register__hiding_tag__type.HV.register__hiding_tag__type(type) Register a type of objects that may be hidden from the heap view defined by HV. The type must have a slot named _hiding_tag_. An object that is an instance of the type, or of a subtype, is hidden when its _hiding_tag_ is HV._hiding_tag_.HV.reachable_x(X:NodeSet, Y:NodeSet) -> NodeSet Return the set of objects reached via a path in the visible heap as defined by HV, from some object in X, avoiding any object in Y except at the end of the path.HV.reachable(X:NodeSet, Y:NodeSet) -> NodeSet Return the set of objects reached via a path in the visible heap as defined by HV, from some object in X, avoiding any object in Y.HV.numedges(src, tgt) -> int Return the number of edges from src to tgt.HV.indisize_sum(S:iterable) -> int Return the sum of the 'individual size' of the objects in S. See also HeapView.__doc.HV.heap() -> NodeSet Return a set containing all 'visible objects' in the heap view defined by HV. See also HeapView.__doc__.HV.cli_type() -> ObjectClassifier Return a classifier that classifies by type. The classification of each object is the type, as given by its C-level member 'ob_type'. (This is the same as the type returned by the Python-level builtin 'type'.)HV.cli_class() -> ObjectClassifier Return a classifier that classifies by "class". If an object is of instance type, its classification will be its class, as given in its C-level member 'in_class', otherwise it will be its type, as given in 'ob_type'. [This is like classifying by the Python-level '__class__' attribute in newer versions of Python, except that even though the '__class__' attribute may be redefined via the class definition, the classification as made by cli_class isn't affected.]HV.cli_none() -> ObjectClassifier Return a classifier that classifies all objects the same. The classification of each object is None. HV.cli_inrel(referrers, memo) -> ObjectClassifier Return a classifier that classifes by "incoming relations". The classification of an object is the set of incoming relations. referrers A NodeGraph object used to map each object to its referrers. memo A dict object used to memoize the classification sets. HV.cli_findex(tuple, memo) -> ObjectClassifier HV.cli_indisize(memo) -> ObjectClassifier Return a classifier that classifies by "individual size". The classification of each object is an int, containing the object's individual memory size. The argument is: memo A dict used to memoize the classification objects.HV.cli_rcs(referrers, classifier, memo) -> ObjectClassifier Return a classifier that classifies by "Referrer Classification Set". The classification of an object is the classifications of its referrers, collected in an immutable NodeSet object. Arguments: referrers A NodeGraph object used to map each object to its referrers. classifier A ObjectClassifier object used to classify each referrer. memo A dict object used to memoize the classification sets. HV.cli_id() -> ObjectClassifier Return a classifier that classifies by set of identity. The classification of an object is a singleton immnodeset containing the object itself.HV.cli_id() -> ObjectClassifier Return a classifier that classifies by identity. The classification of an object is the object itself.HV.cli_dictof(owners, ownerclassifier, notdictkind, notownedkind) -> ObjectClassifier Return a classifier, that classifies by "Dict Owner". The classification of an object is the notdictkind, unless the object is a dict object. If the dict is 'owned' by some owner, the classification will be the class (as by the ownerclass argument ) of its owner. If it is not owned, the returned kind will be notowned argument. Arguments: owners A NodeGraph object used to map each dict object to its owner, or to None if it has no owner. The graph will be automatically updated, from heap information defined by HV, whenever an attempt is made to classify a dict that maps to nothing. ownerclassifier notdictkind notownedkind Tuple with comparison based on addresses on the elements. HV.cli_and(classifiers, memo) -> ObjectClassifier Return a classifier that combines the classifications of other classifiers. The classification returned from the returned classifier is a tuple containing the classifications from the classifiers in the classifiers argument. HV.delete_extra_type(weakref) Delete extra type information. For internal use as a weak-ref callback.HeapView(root, heapdefs:tuple) Create a new HeapView object with arguments: root The initial value of the root member. heapdefs Definitions of specially treated extension types. A HeapView object provides methods to get memory related information about the system heap and about individual objects. It implements much of the low-level functionality for the Heapy system. It is intended to provide what can not be done at all or would be much slower if programmed directly in Python. It is not intended to be used directly by a user, but to be wrapped in higher level objects. Some terms that are referred to in the method descriptions: Visible objects. The HeapView object attempts to restrict its view of the heap to only the 'visible objects'. This is to make it possible to analyse the heap via a Python library that inevitably itself is continually allocating and deallocating objects. These should be hidden from the heap view presented. This is primarily done via a special tag attribute, see '_hiding_tag_' and 'register__hiding_tag__type'. Frames can be hidden with another mechanism, see 'limitframe'. For hiding all objects of a special type, 'register_hidden_exact_type' may be used. It is also possible to use a separate interpreter and hide its root objects, see 'is_hiding_calling_interpreter'. Classifiers. The methods named cli_* are factory methods that create objects of type ObjectClassifier. The principal difference between classifiers is how a single object is classified. The single-object classification function is available in classifier objects; it is the classify method. There are also methods that operate on collections of objects, namely partition and select. These eliminate the per-object Python-level function call overhead that would occur if the classify method were to be called from Python for each object in a collection. See also the ObjectClassifier type. Individual size. The individual size of an object is its individually allocated memory size. It includes: o The basic object size, as can be found out in a standard way. o The extra memory for variable size objects. o For GC collected objects, the size of the GC information. o An alignment to the next highest multiple of a pointer size. o The size of any other memory allocated that belongs to the object. Some types of objects have extra memory allocated that can not be accounted for in the standard way. This memory should nevertheless be included in the individual size. To determine the size of these objects, special functions are needed. These are defined for standard builtin types, such as lists and dicts. Other types should be defined via the heapdefs argument to the HeapView constructor. The individual size does not include: o Subobjects that are accounted for separately. o Overhead for the memory allocation system. This varies depending on the kind of memory allocator, the requested size, etc. This module contains low level functionality for the heapy system. It is intended to be wrapped in higher level library classes. Summary of module content. Classes HeapView Gives a parameterized view of the heap. Horizon Limits the view back to some moment in time. NodeGraph Graph of nodes (address-treated objects). ObjectClassifier Classifies objects on various criteria. RootStateType Root of heap traversal using Python internals. Functions interpreter Start a new interpreter. set_async_exc Raise an exception in another thread. xmemstats Print system-dependent memory statistics. Object RootState The single instance of RootStateType. 3+v+5+=+F+Q+Z+d+m+{++{++S-S-''+++++++(q!+0p!+Вp!g/G(8\(@g(Hs(P(X/`'/h3/p/x+''. (0(8)(@p)hF+ (+ )m,!r,d+x !) !w,@ !)P !,w!) `, 8( ! 8"+#,(%0,&w0,@& 0,t-vv0,-p~@~0--v+5+0 *h&`p0,& 0--00,&0,'`vpv06*-@0v0F*('ttt@t+`!+!+!+`!+ !+! , !,!*, `!4, !;,!D,@!K,!R,!Z, yA0x}F* `!,!6*! *` !,P`!,@!)`!)P!,@!)@!,0!,0!b)!-0!-P!(!B)!-!"-!=-0!( !D,!2)!Q*!Q)!X-!y@yЈ-uE !v- `A !vv`! !h'ps}y.0 p!E!Px !!! . @!;.P@E!@0!!!м' |Aww!!  P p @ p@  0` `p0 GA$3a1|s|sGA$3a18@GA$3a1s9t GA$3p864@tzGA$gcc 8.2.1 20180905@t8 GA*GOW*E@tzGA*@t8GA+stack_clash@tzGA*cf_protection@t8GA+GLIBCXX_ASSERTIONS@tzGA*FORTIFY@t8GA*GA! GA* GA!stack_realign@tz GA* ps|sGA!stack_realignGA*GA+stack_clashGA*cf_protectionGA* GA*GOW*EGA! GA$3p8648 GA*GOW*EGA+stack_clashGA+GLIBCXX_ASSERTIONSGA!stack_realignGA$3a1aaGA$3a1@Eheapyc.so-0.1.10-1.el8.x86_64.debugCD7zXZִF!t/3 ]?Eh=ڊ2N%{VΤ)@44nƝuAc@mĵgU7w:$TKw l͈R\yA#q$E'C oڄ+5cKU2gT9lC/S6X&`ꢪ,tm?mxr$hn=+~z 8^F5)XSQj ˵y._ ks!Li[ΐ 5G6/CJ0euBqq[ w!ltf8_&h  ,lM9P'~V98+76L9*CGۇ +GNQ9a\<'u]яF&b =LĘ!@C0OC&P+Z=P͋XB;J'|ޥjMnޙOߚ2m 魋tt|W$J$i}gDGG$a0W FG||] F軴 kb)]CLVwr_Lmx'VpqGQ!)V].Ne{FnZI2z3ƥ39I]Ofמm`\~Atx 0e2TET(/0p HV^t?2 &,EuH*+Wu ܿjWj~q\eĴ j@(u:ci7VlT@H(mHz(%,o: W |â-;"pݦtᒗzHqLQ>Vn_kE(~yH5xju(IV~QO% _E:-lv t`Y9DCqpI.F E28Jɱzx&2&Q-48YE> -IBFgkxsYޮ eyh*~MKi@dpGGgC_ԙKի] gR&Ɣ-~ėPuQ,ˑ5胠6~GYx`A `O{ Se&-?X|C͎ `1̨^ʼ/oBX.3bat-+dRlom.v2(mB˩6IFhK7LM8M/-Ŝf(,_˨V0ē0Ӟ85Z[9O*sŜ=l~$q7ǝ]s|Y쩼mJak"F1x(-_v:f5289jxa@sWBN"{&8['8v)0NJ@7in+ӻKмfn668+]3vk%ͪK+jfViǟzZ;r輆+iT3;U!MþAU5WԁQ=P=8X@y׹_sؚvSk5w}8L0cL$(`vrBAEٯ l/\6B~kYw,V a)R`m1;}^a昌Ò0ju7r=<Ս'SyI!H:jإꢬ:Yhtē d6.3>@Լn1;d(p tUϵ "ůb(O.zId|cݧ`Aj+k۵aHJƄEm㻘dj:^ .-G061_ڧI{tsqڐIDC獂~-j%6S({F#jh$ ,FSضP47 iN!`MT-It gO qm< zkaݿL-"X5>d 83٤P~NRGߡ7Ȳq  @Bf;`)ddBv*)㗦//mxR+6iU%֑4,{FZT څc~q(e:bZJbS7,5[GkAzZPFƁF)Iр0NM&K+k bAgu[7BI(쟛c^:_,2T^Y}$f'lgYZ.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.sec.text.fini.rodata.eh_frame_hdr.eh_frame.note.gnu.property.init_array.fini_array.data.rel.ro.dynamic.got.data.bss.gnu.build.attributes.gnu_debuglink.gnu_debugdata $o((( 0 8o((Eo`*`*@T**(^BPSPS haac a a0 nPjPj wpspsȟ}88 HH000077)papa 0g!0g8g!8g@g!@gX g!gi!i@p!pv !H a ( (