+
    Ðé·iX ã                   ó†  € ^ RI Ht ^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RI	t	^ RI
t
^ RIt^ RIt^RIHtHtHtHtHt ^RIHtHtHtHtHt ^RIHt ^RIHtHtHtHtH t  ^RI!H"t" ^RI#H$t$H%t% ^R	I&H't'H(t(  ]) R
t,^ s-R t.Rt/]P`                  Pc                  ]/R4      t2]P`                  Pg                  ]24      '       g   Rt2^t4^t5^t6^t7^t8^ t9 ! R R]:4      t; ! R R4      t< ! R R4      t= ! R R4      t> ! R R4      t? ! R R4      t@ ! R R4      tA ! R R4      tB ! R R 4      tC ! R! R"]:4      tDR#   ]* d    ]+t) LÇi ; i)#é    )Úprint_functionN)ÚlibÚ
bcc_symbolÚbcc_symbol_optionÚbcc_stacktrace_build_idÚ_SYM_CB_TYPE)ÚTableÚPerfEventArrayÚRingBufÚBPF_MAP_TYPE_QUEUEÚBPF_MAP_TYPE_STACK)ÚPerf)Úget_online_cpusÚprintbÚ_assert_is_bytesÚ	ArgStringÚStrcmpRewrite)Ú__version__)Údisassemble_progÚ
decode_map)ÚUSDTÚUSDTExceptioniè  c                  ó   € \         # ©N)Ú_num_open_probes© ó    Ú./usr/lib/python3/dist-packages/bcc/__init__.pyÚ_get_num_open_probesr   ,   s   € äÐr   z/sys/kernel/debugÚtracingz/sys/kernel/tracingc                   ó2   a € ] tR t^Dt o R tR tR tRtV tR# )ÚSymbolCachec           	     ó˜   € \         P                  ! V\        P                  ! R \        P                  ! \
        4      4      4      V n        R # r   )r   Úbcc_symcache_newÚctÚcastÚPOINTERr   Úcache)ÚselfÚpids   &&r   Ú__init__ÚSymbolCache.__init__E   s/   € Ü×)Ò)Ø”R—W’W˜T¤2§:¢:Ô.?Ó#@ÓAóCˆŽ
r   c                ó  € \        4       pV'       d8   \        P                  ! V P                  V\        P
                  ! V4      4      pM6\        P                  ! V P                  V\        P
                  ! V4      4      pV^ 8  dp   VP                  '       dY   VP                  '       dG   RVP                  \        P                  ! VP                  \        P                  4      P                  3# RVR3# V'       d8   VP                  p\        P                  ! \        P
                  ! V4      4       MVP                  pWSP                  \        P                  ! VP                  \        P                  4      P                  3# )aœ  
Return a tuple of the symbol (function), its offset from the beginning
of the function, and the module in which it lies. For example:
    ("start_thread", 0x202, "/usr/lib/.../libpthread-2.24.so")
If the symbol cannot be found but we know which module it is in,
return the module name and the offset from the beginning of the
module. If we don't even know the module, return the absolute
address as the offset.
N)r   r   Úbcc_symcache_resolver(   r%   ÚbyrefÚ bcc_symcache_resolve_no_demangleÚmoduleÚoffsetr&   Úc_char_pÚvalueÚdemangle_nameÚbcc_symbol_free_demangle_nameÚname)r)   ÚaddrÚdemangleÚsymÚresÚname_ress   &&&   r   ÚresolveÚSymbolCache.resolveI   sý   € ô ‹lˆßÜ×*Ò*¨4¯:©:°t¼R¿XºXÀc»]ÓK‰Cä×6Ò6°t·z±zÀ4Ü79·x²xÀ³}óFˆCà�Œ7Ø�z�zˆz˜cŸjŸj˜jØ˜cŸj™jÜŸš §
¡
¬B¯K©KÓ8×>Ñ>ð@ð @à˜$ Ð%Ð%ßØ×(Ñ(ˆHÜ×-Ò-¬b¯hªh°s«mÕ<à—x‘xˆHØŸ*™*¤b§g¢g¨c¯j©j¼"¿+¹+Ó&F×&LÑ&LÐMÐMr   c                óê   € \        V4      p\        V4      p\        P                  ! 4       p\        P                  ! V P
                  W\        P                  ! V4      4      ^ 8  d   R# VP                  # )r   éÿÿÿÿ)r   r%   Úc_ulonglongr   Úbcc_symcache_resolve_namer(   r/   r4   )r)   r1   r7   r8   s   &&& r   Úresolve_nameÚSymbolCache.resolve_namef   sZ   € Ü! &Ó)ˆÜ Ó%ˆÜ�~Š~ÓˆÜ×(Ò(¨¯©°VÜ—’˜“ó Ø"#ô$àˆIØ�z‰zÐr   )r(   N)	Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__r+   r=   rC   Ú__static_attributes__Ú__classdictcell__©Ú__classdict__s   @r   r"   r"   D   s   ø‡ € òCòN÷:ð r   r"   c                   ó.   € ] tR t^ot^ t^t^t^t^t^t	Rt
R# )ÚPerfTyper   N)rE   rF   rG   rH   ÚHARDWAREÚSOFTWAREÚ
TRACEPOINTÚHW_CACHEÚRAWÚ
BREAKPOINTrI   r   r   r   rN   rN   o   s    † à€HØ€HØ€JØ€HØ
€CØ„Jr   rN   c                   ó>   € ] tR t^xt^ t^t^t^t^t^t	^t
^t^t^	tRtR# )ÚPerfHWConfigr   N)rE   rF   rG   rH   Ú
CPU_CYCLESÚINSTRUCTIONSÚCACHE_REFERENCESÚCACHE_MISSESÚBRANCH_INSTRUCTIONSÚBRANCH_MISSESÚ
BUS_CYCLESÚSTALLED_CYCLES_FRONTENDÚSTALLED_CYCLES_BACKENDÚREF_CPU_CYCLESrI   r   r   r   rV   rV   x   s8   † à€JØ€LØÐØ€LØÐØ€MØ€JØÐØÐØ„Nr   rV   c                   óB   € ] tR t^…t^ t^t^t^t^t^t	^t
^t^t^	t^
tRtR# )ÚPerfSWConfigr   N)rE   rF   rG   rH   Ú	CPU_CLOCKÚ
TASK_CLOCKÚPAGE_FAULTSÚCONTEXT_SWITCHESÚCPU_MIGRATIONSÚPAGE_FAULTS_MINÚPAGE_FAULTS_MAJÚALIGNMENT_FAULTSÚEMULATION_FAULTSÚDUMMYÚ
BPF_OUTPUTrI   r   r   r   rb   rb   …   s<   † à€IØ€JØ€KØÐØ€NØ€OØ€OØÐØÐØ€EØ„Jr   rb   c                   óz   € ] tR t^“t^t^t^t^t^t^ t	^@t
^€tRtRtRtRtRtRtR	tR
tRtRtRtRtRtRtRtRtRtRtR# )ÚPerfEventSampleFormatr   Né   i   é   i   i   i    i @  i €  i   i   i   i   i   i    i  @ i  € i   )rE   rF   rG   rH   ÚIPÚTIDÚTIMEÚADDRÚREADÚ	CALLCHAINÚIDÚCPUÚPERIODÚ	STREAM_IDrS   ÚBRANCH_STACKÚ	REGS_USERÚ
STACK_USERÚWEIGHTÚDATA_SRCÚ
IDENTIFIERÚTRANSACTIONÚ	REGS_INTRÚ	PHYS_ADDRÚAUXÚCGROUPÚDATA_PAGE_SIZEÚCODE_PAGE_SIZEÚWEIGHT_STRUCTrI   r   r   r   ro   ro   “   s   † à
€BØ€CØ€DØ€DØ€DØ€IØ
€BØ€CØ€FØ€IØ€CØ€LØ€IØ€JØ€FØ€HØ€JØ€KØ€IØ€IØ€CØ€FØ€NØ€NØ„Mr   ro   c                   ój   € ] tR t^¯t^t^t^t^t^t^t	^t
^t^	t^
t^t^t^t^t^t^t^t^t^t^t^tRtR# )ÚBPFProgTyper   N)rE   rF   rG   rH   ÚSOCKET_FILTERÚKPROBEÚ	SCHED_CLSÚ	SCHED_ACTrQ   ÚXDPÚ
PERF_EVENTÚ
CGROUP_SKBÚCGROUP_SOCKÚLWT_INÚLWT_OUTÚLWT_XMITÚSOCK_OPSÚSK_SKBÚCGROUP_DEVICEÚSK_MSGÚRAW_TRACEPOINTÚCGROUP_SOCK_ADDRÚCGROUP_SOCKOPTÚTRACINGÚLSMrI   r   r   r   r‹   r‹   ¯   sl   † à€MØ€FØ€IØ€IØ€JØ
€CØ€JØ€JØ€KØ€FØ€GØ€HØ€HØ€FØ€MØ€FØ€NØÐØ€NØ€GØ
„Cr   r‹   c                   ó²   € ] tR t^Çt^ t^t^t^t^t^t	^t
^t^t^	t^
t^t^t^t^t^t^t^t^t^t^t^t^t^t^t^t^t^t^t ^t!^t"^t#^ t$^!t%^"t&^#t'^$t(^%t)^&t*Rt+R# )ÚBPFAttachTyper   N),rE   rF   rG   rH   ÚCGROUP_INET_INGRESSÚCGROUP_INET_EGRESSÚCGROUP_INET_SOCK_CREATEÚCGROUP_SOCK_OPSÚSK_SKB_STREAM_PARSERÚSK_SKB_STREAM_VERDICTr™   ÚSK_MSG_VERDICTÚCGROUP_INET4_BINDÚCGROUP_INET6_BINDÚCGROUP_INET4_CONNECTÚCGROUP_INET6_CONNECTÚCGROUP_INET4_POST_BINDÚCGROUP_INET6_POST_BINDÚCGROUP_UDP4_SENDMSGÚCGROUP_UDP6_SENDMSGÚ
LIRC_MODE2ÚFLOW_DISSECTORÚCGROUP_SYSCTLÚCGROUP_UDP4_RECVMSGÚCGROUP_UDP6_RECVMSGÚCGROUP_GETSOCKOPTÚCGROUP_SETSOCKOPTÚTRACE_RAW_TPÚTRACE_FENTRYÚTRACE_FEXITÚMODIFY_RETURNÚLSM_MACÚ
TRACE_ITERÚCGROUP_INET4_GETPEERNAMEÚCGROUP_INET6_GETPEERNAMEÚCGROUP_INET4_GETSOCKNAMEÚCGROUP_INET6_GETSOCKNAMEÚ
XDP_DEVMAPÚCGROUP_INET_SOCK_RELEASEÚ
XDP_CPUMAPÚ	SK_LOOKUPr�   ÚSK_SKB_VERDICTrI   r   r   r   r¡   r¡   Ç   sÛ   † àÐØÐØÐØ€OØÐØÐØ€MØ€NØÐØÐØÐØÐØÐØÐØÐØÐØ€JØ€NØ€MØÐØÐØÐØÐØ€LØ€LØ€KØ€MØ€GØ€JØ!ÐØ!ÐØ!ÐØ!ÐØ€JØ!ÐØ€JØ€IØ
€CØ„Nr   r¡   c                   ó*   € ] tR t^ñt^ t^t^t^t^tRt	R# )Ú	XDPActionr   N)
rE   rF   rG   rH   ÚXDP_ABORTEDÚXDP_DROPÚXDP_PASSÚXDP_TXÚXDP_REDIRECTrI   r   r   r   rÈ   rÈ   ñ   s   † à€KØ€HØ€HØ€FØ„Lr   rÈ   c                   ó*   € ] tR t^ùt^t^t^t^t^tRt	R# )ÚXDPFlagsr   N)
rE   rF   rG   rH   ÚUPDATE_IF_NOEXISTÚSKB_MODEÚDRV_MODEÚHW_MODEÚREPLACErI   r   r   r   rÏ   rÏ   ù   s   † ð  ÐØ€HØ€HØ€GØ„Gr   rÏ   c                   óp
  a € ] tR tRt o ]P
                  t]P                  t]P                  t]P                  t]P                  t	]P                  t
]P                  t]P                  t]P                  t]P                  t]P                  t]P                   t]P"                  t]P$                  t]P&                  t]P(                  t]P*                  t]P,                  t]P.                  t]P0                  t]P4                  t]P6                  t]P8                  t]P:                  t]P<                  t]P@                  t!]PD                  t#]PH                  t%]PL                  t']PP                  t)]*PV                  ! R4      t,/ t-].P^                  ! 4       t0RR.RRR.RR	R
.RR.RRR./t1. R‘Ot2^t3 ! R R]4Pj                  4      t6]4Pn                  ! RRR7      t8]8Pr                  t:]4Pv                  ]4Px                  ! ]64      .]:n=        ]>R 4       t?]>R 4       t@]AtA ! R R]B4      tC]DR 4       tE]DR 4       tFRRR^ . . RRR3	R ltG]3R ltHR’R  ltIR! tJR" tKR“R# ltL/ R$]4Pš                  bR%]4Pœ                  bR&]4Pž                  bR']4P                   bR(]4P¢                  bR)]4P¤                  bR*]4Pv                  bR+]4P¦                  bR,]4P¨                  bR-]4Pª                  bR.]4P¬                  bR/]4P®                  bR0]4P°                  bR1]4P²                  bR2]4P´                  bR3]4P¶                  ^,          bR4]4P¸                  ^,          bt]]DR5 4       t^R”R6 lt_R7 t`R8 taR9 tbR: tcR; td]DR•R< l4       te]DR= 4       tf]DR> 4       tg]DR? 4       thR@ ti]DRA 4       tjRB tkRC tlRD tmRE tnRF toRG tpRH tqR–RI ltrR—RJ ltsRK ttRL tuR˜RM ltvR˜RN ltw]DR•RO l4       tx]DR•RP l4       ty]>R•RQ l4       tz]DR•RR l4       t{]DRS 4       t|]DRT 4       t}R™RU lt~RšRV ltR›RW lt€]DRX 4       t�]DRY 4       t‚]DRZ 4       tƒ]DR[ 4       t„R›R\ lt…R›R] lt†R›R^ lt‡R›R_ ltˆR›R` lt‰R›Ra ltŠR›Rb lt‹R›Rc ltŒ]DRd 4       t�]DRe 4       tŽ]DRf 4       t�]DRg 4       t�R›Rh lt‘Ri t’RœRj lt“Rk t”R�Rl lt•RžRm lt–]DRn 4       t—]DRo 4       t˜]DRp 4       t™Rq tšRŸRr lt›R Rs ltœRt t�R¡Ru ltžR¢Rv ltŸRw t R“Rx lt¡R“Ry lt¢R“Rz lt£R˜R{ lt¤]DR| 4       t¥]DR£R} l4       t¦]DR¤R~ l4       t§]DR 4       t¨R€ t©R� tªR‚ t«R¥Rƒ lt¬R„ t­R¥R… lt®R˜R† lt¯R¥R‡ lt°Rˆ t±R‰ t²]DRŠ 4       t³R‹ t´RŒ tµR� t¶RŽ t·R� t¸R�t¹V tºR# )¦ÚBPFi  s   [^a-zA-Z0-9_]zlinux/time.hÚtimez
linux/fs.hÚfsÚfilezlinux/blkdev.hÚbioÚrequestzlinux/slab.hÚalloczlinux/netdevice.hÚsk_buffÚ
net_devicec                   óN   € ] tR tRtR]P
                  3R]P
                  3.tRtR# )ÚBPF.timespeciE  Útv_secÚtv_nsecr   N)rE   rF   rG   rH   r%   Úc_longÚ_fields_rI   r   r   r   Útimespecrà   E  s   † Ø˜rŸy™yÐ)¨I°r·y±yÐ+AÐBŒr   rå   z
librt.so.1T)Ú	use_errnoc                ó>  € V P                  4       pV P                  V P                  \        P                  ! V4      4      ^ 8w  d6   \        P
                  ! 4       p\        V\        P                  ! V4      4      hVP                  R,          VP                  ,           # )z�monotonic_time()
Returns the system monotonic time from clock_gettime, using the
CLOCK_MONOTONIC constant. The time returned is in nanoseconds.
g    eÍÍA)rå   Ú_clock_gettimeÚCLOCK_MONOTONICr%   r/   Ú	get_errnoÚOSErrorÚosÚstrerrorrá   râ   )ÚclsÚtÚerrnos   &  r   Úmonotonic_timeÚBPF.monotonic_timeL  sj   € ð �L‰L‹NˆØ×Ñ˜c×1Ñ1´2·8²8¸A³;Ó?À1ÔDÜ—L’L“NˆEÜ˜%¤§¢¨UÓ!3Ó4Ð4Ø�x‰x˜#�~ §	¡	Õ)Ð)r   c                ó´   € RpV P                   P                  4        F7  w  r4V F,  pV F#  pWV9   g   K  W29  g   K  VRV,          ,          pK%  	  K.  	  K9  	  V# )a	  
Generates #include statements automatically based on a set of
recognized types such as sk_buff and bio. The input is all the words
that appear in the BPF program, and the output is a (possibly empty)
string of #include statements, such as "#include <linux/fs.h>".
Ú z#include <%s>
)Ú_auto_includesÚitems)rî   Úprogram_wordsÚheadersÚheaderÚkeywordsÚkeywordÚwords   &&     r   Úgenerate_auto_includesÚBPF.generate_auto_includesX  sZ   € ð ˆØ #× 2Ñ 2× 8Ñ 8Ö :ÑˆFÛ#�Û)�DØ–¨6Ö+@ØÐ#4°vÕ#=Õ=šó *ó $ñ !;ð
 ˆr   c                   ó&   a € ] tR tRt o R tRtV tR# )ÚBPF.Functionik  c                ó*   € Wn         W n        W0n        R # r   )Úbpfr7   Úfd)r)   r  r7   r  s   &&&&r   r+   ÚBPF.Function.__init__l  s   € ØŒHØŒIØŽGr   )r  r  r7   N)rE   rF   rG   rH   r+   rI   rJ   rK   s   @r   ÚFunctionr   k  s   ø‡ € ÷	ð 	r   r  c                óÌ  € V '       dÜ   \         P                  P                  V 4      '       g·   \        \        P
                  ^ ,          4      pRP                  \         P                  P                  \         P                  P                  VP                  4       4      4      V .4      p\         P                  P                  V4      '       d   Tp V # \        RV ,          4      hV # )z0If filename is invalid, search in ./ of argv[0] ó   /zCould not find file %s)rì   ÚpathÚisfiler   ÚsysÚargvÚjoinÚabspathÚdirnameÚ	__bytes__Ú	Exception)ÚfilenameÚargv0rï   s   &  r   Ú
_find_fileÚBPF._find_fileq  s˜   € ÷ Ü—7‘7—>‘> (×+Ò+Ü!¤#§(¡(¨1¥+Ó.�Ø—I‘IœrŸw™wŸ™¬r¯w©w¯©¸u¿¹Ó?PÓ/QÓRÐT\Ð]Ó^�Ü—7‘7—>‘> !×$Ò$Ø �Hð ˆô $Ð$<¸xÕ$GÓHÐHØˆr   c                óœ  € R p\         P                  P                  V 4      w  r#V'       d   V! V 4      '       d   V #  R# \         P                  R,          P                  \         P                  4       FT  pVP                  R4      p\         P                  P                  VP                  4       V 4      pV! V4      '       g   KR  Vu # 	  R# )a\  
find_exe(bin_path)

Traverses the PATH environment variable, looking for the first
directory that contains an executable file named bin_path, and
returns the full path to that file, or None if no such file
can be found. This is meant to replace invocations of the
"which" shell utility, which doesn't have portable semantics
for skipping aliases.
c                 óš   € \         P                  P                  V 4      ;'       d&    \         P                  ! V \         P                  4      # r   )rì   r  r	  ÚaccessÚX_OK)Úfpaths   &r   Úis_exeÚBPF.find_exe.<locals>.is_exe‹  s3   € Ü—7‘7—>‘> %Ó(÷ *ð *Ü—	’	˜%¤§¡Ó)ð*r   ÚPATHÚ"N)rì   r  ÚsplitÚenvironÚpathsepÚstripr  Úencode)Úbin_pathr  r  Úfnamer  Úexe_files   &     r   Úfind_exeÚBPF.find_exe~  sš   € ò	*ô —w‘w—}‘} XÓ.‰ˆßÙ�h×ÒØ�ð  ñ ô Ÿ
™
 6Õ*×0Ñ0´·±Ö<�Ø—z‘z #“�ÜŸ7™7Ÿ<™<¨¯©«°xÓ@�Ù˜(×#Ô#Ø#’Oñ	 =ñ
 r   r   NFc
                óP  € \        V4      p\        V4      p\        V4      pV'       d   V'       d   Q h\        P                  ! 4       p
V
R8X  Ed!    \        P                  ! RR.\        P
                  R7      pVP                  R4      P                  R4      p\        P                  P                  V4      '       g   Rp \        P                  ! R	R.\        P
                  R7      pTP                  R4      P                  R4      p\        P                  P                  T4      '       g   RpT'       d   TP                  R
T,           4       T'       d   TP                  R
T,           4       / V n        / V n        / V n        / V n        / V n        / V n        / V n        / V n        / V n        / V n        RV n        RV n        \2        P4                  ! V P6                  4       W@n        / V n        / V n        RV n        \@        PB                  \E        V4      ,          ! 4       p\G        V4       F  w  pp\I        \K        V4      4      VV&   K  	  V'       d+   \L        PO                  V4      p\L        PO                  V4      pV'       d/   \Q        VRR7      ;_uu_ 4       pVPS                  4       pRRR4       \@        PT                  \E        V4      ,          ! 4       p\G        V4       F-  w  pp\@        PT                  ! VPW                  4       4      VV&   K/  	  \X        PZ                  ! V\E        V4      4      pVf   \        R4      hVV,           p\X        P\                  ! VV P8                  V\E        V4      Wx4      V n        V P>                  '       g   \        RT;'       g    R,          4      hV F  pVP_                  W	4       K  	  V Pa                  4        R#   \         d   pRp Rp?EL0Rp?ii ; i  \         d   pRp Rp?ELÛRp?ii ; i  + '       g   i     ELl; i)a
  Create a new BPF module with the given source code.

Note:
    All fields are marked as optional, but either `src_file` or `text`
    must be supplied, and not both.

Args:
    src_file (Optional[str]): Path to a source file for the module
    hdr_file (Optional[str]): Path to a helper header file for the `src_file`
    text (Optional[str]): Contents of a source file for the module
    debug (Optional[int]): Flags used for debug prints, can be |'d together
                           See "Debug flags" for explanation
Úloongarch64Úclangz-print-file-name=include)Ústderrúutf-8Ú
FNÚgccz-IÚrb)ÚmodezFailed to compile BPF module %sz<text>zycan't generate USDT probe arguments; possible cause is missing pid when a probe in a shared object has multiple locations)1r   ÚplatformÚmachineÚ
subprocessÚcheck_outputÚSTDOUTÚdecoder!  rì   r  Úexistsr  ÚappendÚ
kprobe_fdsÚ
uprobe_fdsÚtracepoint_fdsÚraw_tracepoint_fdsÚkfunc_entry_fdsÚkfunc_exit_fdsÚfmod_ret_fdsÚlsm_fdsÚperf_buffersÚopen_perf_eventsÚ_ringbuf_managerÚ	tracefileÚatexitÚregisterÚcleanupÚdebugÚfuncsÚtablesr1   r%   r3   ÚlenÚ	enumerateÚbytesr   rÖ   r  ÚopenÚreadÚc_void_pÚget_contextr   Úbcc_usdt_genargsÚbpf_module_create_c_from_stringÚattach_uprobesÚ_trace_autoload)r)   Úsrc_fileÚhdr_fileÚtextrH  ÚcflagsÚusdt_contextsÚallow_rlimitÚdeviceÚattach_usdt_ignore_pidÚarchitectureÚclang_include_path_outputÚclang_include_path_strÚeÚgcc_include_path_outputÚgcc_include_path_strÚcflags_arrayÚiÚsrÙ   Ú	ctx_arrayÚusdtÚ	usdt_textÚusdt_contexts   &&&&&&&&&&              r   r+   ÚBPF.__init__›  sj  € ô" $ HÓ-ˆÜ# HÓ-ˆÜ Ó%ˆçŸXÐ&Ð&ô  ×'Ò'Ó)ˆØ˜=Õ(ð/Ü,6×,CÒ,CÀWÐNhÐDiÔr|÷  sDñ  sDô  -EÐ)Ø)B×)IÑ)IÈ'Ó)R×)XÑ)XÐY]Ó)^Ð&Ü—w‘w—~‘~Ð&<×=Ò=Ø-2Ð*ð-Ü*4×*AÒ*AÀ5ÐJdÐBeÔnx×nÑnô  +AÐ'Ø'>×'EÑ'EÀgÓ'N×'TÑ'TÐUYÓ'ZÐ$Ü—w‘w—~‘~Ð&:×;Ò;Ø+0Ð(÷ &Ø—‘˜dÐ%;Õ;Ô<ß#Ø—‘˜dÐ%9Õ9Ô:àˆŒØˆŒØ ˆÔØ"$ˆÔØ!ˆÔØ ˆÔØˆÔØˆŒØˆÔØ "ˆÔØ $ˆÔØˆŒÜ�Š˜Ÿ™Ô%àŒ
ØˆŒ
ØˆŒØˆŒÜŸ™¤c¨&£kÖ1Ó4ˆÜ˜fÖ%‰DˆAˆq¼¼yÈ»|Ó9L |°A£Ñ%çÜ—~‘~ hÓ/ˆHÜ—~‘~ hÓ/ˆHçô �h T×*Õ*¨dØ—y‘y“{�÷ +ô —[‘[¤3 }Ó#5Ö5Ó8ˆ	Ü  Ö/‰GˆAˆtÜŸ;š; t×'7Ñ'7Ó'9Ó:ˆI�a‹Lñ 0ä×(Ò(¨´C¸Ó4FÓGˆ	ØÒÜð (ó )ð )ð ˜4Õˆô ×9Ò9¸$Ø:>¿*¹*Ø:FÌÈLÓHYØ:FóPˆŒð �{�{ˆ{ÜÐ=À×AUÐAUÈXÕVÓWÐWã)ˆLØ×'Ñ'¨ÖEñ *ð 	×ÑÖøôQ ô /Ø).Ö&ûð/ûô ô -Ø',Ö$ûð-ú÷H +×*Ð*úsJ   ÁA,O Â?O ÃA,O9 Ä/O9 Ê PÏO6Ï)O1Ï1O6Ï9PÐPÐPÐP%	c                óî   € . p\        ^ \        P                  ! V P                  4      4       FD  p\        P                  ! V P                  V4      pVP                  V P                  WA4      4       KF  	  V# )z€load_funcs(prog_type=KPROBE)

Load all functions in this BPF module with the given type.
Returns a list of the function handles.)Úranger   Úbpf_num_functionsr1   Úbpf_function_namer8  Ú	load_func)r)   Ú	prog_typeÚfnsre  Ú	func_names   &&   r   Ú
load_funcsÚBPF.load_funcs  s[   € ð ˆÜ�qœ#×/Ò/°·±Ó<Ö=ˆAÜ×-Ò-¨d¯k©k¸1Ó=ˆIØ�J‰J�t—~‘~ iÓ;Ö<ñ >ð ˆ
r   c                ó  € \        V4      pWP                  9   d   V P                  V,          # \        P                  ! V P                  V4      '       g   \        R V,          4      h^ pV P                  \        ,          '       d   ^pMV P                  \        ,          '       d   ^p\        P                  ! V P                  W!\        P                  ! V P                  V4      \        P                  ! V P                  V4      \        P                  ! V P                  4      \        P                  ! V P                  4      VR^ W44      pV^ 8  d�   \        P                  ! V P                  4       \         P"                  ! 4       \$        P&                  8X  d   \        R4      h\(        P*                  ! \         P"                  ! 4       4      p\        RV: RV: 24      h\,        P/                  WV4      pW€P                  V&   V# )úUnknown program %sNz!Need super-user privileges to runzFailed to load BPF program ú: )r   rI  r   Úbpf_function_startr1   r  rH  ÚDEBUG_BPF_REGISTER_STATEÚ	DEBUG_BPFÚbcc_func_loadÚbpf_function_sizeÚbpf_module_licenseÚbpf_module_kern_versionrE  rF  Ú	donothingr%   rê   rð   ÚEPERMrì   rí   rÖ   r  )	r)   rs  rq  r\  Úattach_typeÚ	log_levelr  ÚerrstrÚfns	   &&&&&    r   rp  ÚBPF.load_func  sm  € Ü$ YÓ/ˆ	ØŸ
™
Ô"Ø—:‘:˜iÕ(Ð(Ü×%Ò% d§k¡k°9×=Ò=ÜÐ0°9Õ<Ó=Ð=Øˆ	Ø�J‰JÔ1×1Ô1Ø‰IØ�j‰jœ9×$Ô$ØˆIÜ×Ò˜tŸ{™{¨IÜ×&Ò& t§{¡{°IÓ>Ü×%Ò% d§k¡k°9Ó=Ü×&Ò& t§{¡{Ó3Ü×+Ò+¨D¯K©KÓ8Ø˜4  Fó9ˆð �Œ6Ü�OŠO˜DŸN™NÔ+Ü�|Š|‹~¤§¡Ô,ÜÐ CÓDÐDä—[’[¤§¢£Ó0ˆFÝÛ&ªð0ó 1ð 1ô �\‰\˜$¨2Ó.ˆØ "�
‰
�9Ñàˆ	r   c                ó:  € \        V4      p\        P                  ! V P                  V4      '       g   \	        RV,          4      h\        P                  ! V P                  V4      p\        P
                  ! V P                  V4      p\        P                  ! W#4      # )zB
Return the eBPF bytecodes for the specified function as a string
rw  )r   r   ry  r1   r  r}  r%   Ú	string_at)r)   rs  ÚstartÚsizes   &&  r   Ú	dump_funcÚBPF.dump_func2  sq   € ô % YÓ/ˆ	Ü×%Ò% d§k¡k°9×=Ò=ÜÐ0°9Õ<Ó=Ð=ä×'Ò'¨¯©°YÓ?ˆÜ×%Ò% d§k¡k°9Ó=ˆÜ�|Š|˜EÓ(Ð(r   c                ó:   € V P                  V4      p\        W4      # r   )r‹  r   )r)   rs  Úbpfstrs   && r   Údisassemble_funcÚBPF.disassemble_func>  s   € Ø—‘ 	Ó*ˆÜ 	Ó2Ð2r   c                ó‚   € W,          p\         P                  ! V P                  VP                  4      p\	        WWBR 7      # ))Úsizeinfo)r   Úbpf_table_type_idr1   Úmap_idr   )r)   Ú
table_namer’  Ú	table_objÚ
table_types   &&&  r   Údecode_tableÚBPF.decode_tableB  s3   € ØÕ$ˆ	Ü×*Ò*¨4¯;©;¸	×8HÑ8HÓIˆ
Ü˜*°ÔOÐOr   Ú_BoolÚcharÚwchar_tzunsigned charÚshortzunsigned shortÚintzunsigned intÚlongzunsigned longz	long longzunsigned long longÚfloatÚdoublezlong doubleÚ__int128zunsigned __int128c           
     ó(  € \        V \        4      '       d   \        P                  V ,          # . p. pV ^,           EFõ  p\	        V4      ^8X  d7   VP                  V^ ,          \        P                  V^,          4      34       KJ  \	        V4      ^8X  Edƒ   \        V^,          \        4      '       dL   VP                  V^ ,          \        P                  V^,          4      V^,          ^ ,          ,          34       KÃ  \        V^,          \        4      '       d@   VP                  V^ ,          \        P                  V^,          4      V^,          34       EK  \        V^,          \        4      '       d‡   V^,          R8X  g   V^,          R8X  g   V^,          R8X  d]   V^ ,          pVR8X  d$   R\	        V4      ,          pVP                  V4       VP                  V\        P                  V4      34       EKÂ  \        R\        V4      ,          4      h\        R\        V4      ,          4      h	  \        P                  pRp\	        V 4      ^8”  d_   V ^,          R8X  d   \        P                  pM?V ^,          R8X  d   \        P                  pM V ^,          R8X  d   \        P                  pRpV'       d-   \        \        V ^ ,          4      V3\        V^VR	7      4      pV# \        \        V ^ ,          4      V3\        VVR
7      4      pV# )é   ÚunionÚstructÚstruct_packedrô   z__anon%dzFailed to decode type %sFT)Ú_anonymous_Ú_pack_rä   )r¨  rä   )Ú
isinstanceÚ
basestringrÖ   Ú	str2ctyperK  r8  Ú_decode_table_typeÚlistrž  r  Ústrr%   Ú	StructureÚUnionÚtypeÚdict)ÚdescÚanonÚfieldsrï   r7   ÚbaseÚ	is_packedrî   s   &       r   r­  ÚBPF._decode_table_typeZ  sO  € ä�dœJ×'Ò'Ü—=‘= Õ&Ð&ØˆØˆØ�a—‘ˆAÜ�1‹v˜Œ{Ø—‘˜q �t¤S×%;Ñ%;¸A¸a½DÓ%AÐBÖCÜ�Q“˜1•Ü˜a �d¤D×)Ò)Ø—M‘M 1 Q¥4¬×)?Ñ)?ÀÀ!ÅÓ)EÈÈ!ÍÈQÍÕ)OÐ"PÖQÜ  !¥¤c×*Ò*Ø—M‘M 1 Q¥4¬×)?Ñ)?ÀÀ!ÅÓ)EÀqÈÅtÐ"L×MÜ  !¥¤j×1Ò1Ø˜!� Ô(¨A¨a­D°IÔ,=Ø˜!�Ð 0Ô0Ø˜Q�4�DØ˜r”zØ)¬C°«IÕ5˜ØŸ™ DÔ)Ø—M‘M 4¬×)?Ñ)?ÀÓ)BÐ"C×Dä#Ð$>ÄÀQÃÕ$GÓHÐHäÐ :¼SÀ»VÕ CÓDÐDñ' ô( �|‰|ˆØˆ	Üˆt‹9�qŒ=Ø�A�w˜(Ô"Ü—x‘x‘Ø�a•˜IÔ%Ü—|‘|‘Ø�a•Ð,Ô,Ü—|‘|�Ø �	ßÜ”s˜4 �7“| d W¬d¸tÈAØô/!ó "ˆCð
 ˆ
ô ”s˜4 �7“| d W¬d¸tØô/!ó "ˆCàˆ
r   c           
     ó,  € \        V4      p\        P                  ! V P                  V4      p\        P                  ! V P                  V4      p\        P
                  ! V P                  V4      \        \        39   pV^ 8  d   \        hV'       g|   V'       gt   \        P                  ! V P                  V4      P                  R4      pV'       g   \        RV,          4      h\        P                  \        P                  ! V4      4      pV'       gt   \        P                   ! V P                  V4      P                  R4      p	V	'       g   \        RV,          4      h\        P                  \        P                  ! V	4      4      p\#        WWbW1VR7      # )r   r,  z$Failed to load BPF Table %s key descz%Failed to load BPF Table %s leaf desc)Úreducer)r   r   Úbpf_table_idr1   Úbpf_table_fdr“  r   r   ÚKeyErrorÚbpf_table_key_descr6  r  rÖ   r­  ÚjsonÚloadsÚbpf_table_leaf_descr	   )
r)   r7   ÚkeytypeÚleaftyper»  r”  Úmap_fdÚis_queuestackÚkey_descÚ	leaf_descs
   &&&&&     r   Ú	get_tableÚBPF.get_table†  s  € Ü Ó%ˆÜ×!Ò! $§+¡+¨tÓ4ˆÜ×!Ò! $§+¡+¨tÓ4ˆÜ×-Ò-¨d¯k©k¸6ÓBÔGYÔ[mÐFnÑnˆØ�AŒ:ÜˆNßŸ}Ü×-Ò-¨d¯k©k¸4Ó@×GÑGÈÓPˆHßÜÐ FÈÕ MÓNÐNÜ×,Ñ,¬T¯ZªZ¸Ó-AÓBˆGßÜ×/Ò/°·±¸TÓB×IÑIÈ'ÓRˆIßÜÐ GÈ$Õ NÓOÐOÜ×-Ñ-¬d¯jªj¸Ó.CÓDˆHÜ�T 6°HÈGÔTÐTr   c                ó„   € WP                   9  d   V P                  V4      V P                   V&   V P                   V,          # r   )rJ  rÉ  ©r)   Úkeys   &&r   Ú__getitem__ÚBPF.__getitem__™  s2   € Ø—k‘kÔ!Ø#Ÿ~™~¨cÓ2ˆD�K‰K˜ÑØ�{‰{˜3ÕÐr   c                ó"   € W P                   V&   R # r   ©rJ  )r)   rÍ  Úleafs   &&&r   Ú__setitem__ÚBPF.__setitem__ž  s   € Ø�‰�CÓr   c                ó,   € \        V P                  4      # r   )rK  rJ  ©r)   s   &r   Ú__len__ÚBPF.__len__¡  s   € Ü�4—;‘;ÓÐr   c                ó    € V P                   V R # r   rÑ  rÌ  s   &&r   Ú__delitem__ÚBPF.__delitem__¤  s   € Ø�K‰K˜Òr   c                ó6   € V P                   P                  4       # r   )rJ  Ú__iter__rÖ  s   &r   rÝ  ÚBPF.__iter__§  s   € Ø�{‰{×#Ñ#Ó%Ð%r   c                ó  € \        V \        P                  4      '       g   \        R 4      h\        P
                  ! V P                  WV4      pV^ 8  d1   \        RP                  V\        P                  ! V) 4      4      4      hR# )ú"arg 1 must be of type BPF.Functionz7Failed to attach BPF function with attach_type {0}: {1}N)
rª  rÖ   r  r  r   Úbpf_prog_attachr  Úformatrì   rí   )r…  Úattachable_fdr‚  Úflagsr;   s   &&&& r   Úattach_funcÚBPF.attach_funcª  sn   € ä˜"œcŸl™l×+Ò+ÜÐ@ÓAÐAä×!Ò! "§%¡%¨ÀUÓKˆØ�Œ7Üð 'ß'-¡v¨k¼2¿;º;ÈÀtÓ;LÓ'MóOð Oñ r   c                ó  € \        V \        P                  4      '       g   \        R 4      h\        P
                  ! V P                  W4      pV^ 8  d1   \        RP                  V\        P                  ! V) 4      4      4      hR# )rà  z7Failed to detach BPF function with attach_type {0}: {1}N)
rª  rÖ   r  r  r   Úbpf_prog_detach2r  râ  rì   rí   )r…  rã  r‚  r;   s   &&& r   Údetach_funcÚBPF.detach_func´  sl   € ä˜"œcŸl™l×+Ò+ÜÐ@ÓAÐAä×"Ò" 2§5¡5¨-ÓEˆØ�Œ7Üð 'ß'-¡v¨k¼2¿;º;ÈÀtÓ;LÓ'MóOð Oñ r   c                óö  € \        V4      p\        V \        P                  4      '       g   \	        R 4      h\
        P                  ! V4      pV^ 8  d=   \        P                  ! \        P                  ! 4       4      p\	        RV: RV: 24      h\
        P                  ! W P                  4      pV^ 8  d=   \        P                  ! \        P                  ! 4       4      p\	        RV: RV: 24      hW n        R# )rà  zFailed to open raw device rx  úFailed to attach BPF to device N)r   rª  rÖ   r  r  r   Úbpf_open_raw_sockrì   rí   r%   rê   Úbpf_attach_socketr  Úsock)r…  Údevrï  r„  r;   s   &&   r   Úattach_raw_socketÚBPF.attach_raw_socket¾  s¯   € ä˜sÓ#ˆÜ˜"œcŸl™l×+Ò+ÜÐ@ÓAÐAÜ×$Ò$ SÓ)ˆØ�!Œ8Ü—[’[¤§¢£Ó0ˆFÝÃ#ÂvÐNÓOÐOÜ×#Ò# D¯%©%Ó0ˆØ�Œ7Ü—[’[¤§¢£Ó0ˆFÝÛšFð$ó %ð %àŽr   c           	     óf  € R \         ,          p \        VR4      ;_uu_ 4       p\        V Uu. uF'  q3P                  4       P	                  4       ^,          NK)  	  up4      pRRR4       R\         ,          p \        TR4      ;_uu_ 4       p\        T Uu. uF'  q3P                  4       P	                  4       ^ ,          NK)  	  up4      pRRR4       . p	^ p
^ p\        RR4      ;_uu_ 4       pT EF^  pTP                  4       P	                  4       R,          w  rÞT
^ 8X  d   TR8X  d   ^p
K=  MT
^8X  d   TR8X  d   ^p
KP  T^ 8X  d   TR8X  d   ^pKb  TR	8X  d   ^pKm  MT^8X  d   TR	8X  d   ^pK€  TP                  R
4      '       d   K™  TP                  R4      '       g   TP                  R4      '       d   KÉ  TP                  R4      '       d   Kâ  \        P                  ! RT4      '       d   EK  TP                  4       R9   g   EK  \        P                  ! Y4      '       g   EK9  TX9  g   EKC  TX9   g   EKM  T	P                  T4       EKa  	  RRR4       \        T	4      # u upi   + '       g   i     EL; i  \
         d8   pTP                  \        P                  8w  d   Th\        . 4      p Rp?ELQRp?ii ; iu upi   + '       g   i     EL; i  \
         d8   pTP                  \        P                  8w  d   Th\        . 4      p Rp?ELGRp?ii ; i  + '       g   i     L×; i)z%s/kprobes/blacklistr/  Nz%%s/tracing/available_filter_functionsú/proc/kallsyms:r¤  é   Ns   __init_begins
   __init_ends   __irqentry_text_starts   __irqentry_text_ends
   _kbl_addr_s   __perfs   perf_s   __SCT__s   ^.*\.cold(\.\d+)?$)ó   tó   w)ÚDEBUGFSrN  ÚsetÚrstripr  ÚIOErrorrð   r�  Ú
startswithÚreÚmatchÚlowerÚ	fullmatchr8  )Úevent_reÚblacklist_fileÚblacklist_fÚlineÚ	blacklistra  Úavail_filter_fileÚavail_filter_fÚavail_filterrr  Úin_init_sectionÚin_irq_sectionÚ
avail_filerï   r…  s   &              r   Úget_kprobe_functionsÚBPF.get_kprobe_functionsÎ  s¥  € à/´'Õ9ˆð	 Ü�n d×+Ô+¨{ÜÁkÓ RÁk¸d§¡£×!4Ñ!4Ó!6°q×!9Ð!9ÁkÑ RÓS�	÷ ,ð DÄgÕMÐð	#ÜÐ'¨×.Ô.°.Ü"ÉÓ#XÉÀ§K¡K£M×$7Ñ$7Ó$9¸!×$<Ð$<ÉÑ#XÓY�÷ /ð ˆàˆØˆÜÐ" D×)Ô)¨ZÜ"�ØŸ+™+›-×-Ñ-Ó/°Õ4‘�ð # aÔ'Ø˜_Ô,Ø*+˜Ù ð -ð %¨Ô)Ø˜]Ô*Ø*+˜Ùð " QÔ&ØÐ5Ô5Ø)*˜Ù ð Ð5Ô5Ø)*˜Ù ð 6ð $ qÔ(ØÐ3Ô3Ø)*˜Ùð
 —=‘= ×/Ò/Ùð —]‘] 9×-Ò-°·±¸x×1HÒ1HÙð —]‘] :×.Ò.Ùä—X’XÐ4°b×9Ò9ÚØ—G‘G“I ×-´2·<²<À×3MÕ3MØ )×+Ø˜l×*Ø—J‘J˜r—Nña #÷ *ôd �3‹xˆùòK !S÷ ,×+Ð+ûäô 	 Ø�w‰wœ%Ÿ+™+Ô%Ø�Ü˜B›ŽIûð	 üò $Y÷ /×.Ð.ûäô 	#Ø�w‰wœ%Ÿ+™+Ô%Ø�Ü˜r›7ŽLûð	#ú÷ *×)úsÐ   �I= £
I)­-I$ÁI)Á!I= Á7K Â
KÂ-KÃKÃ	K Ã+BL ÆL ÆL Æ5L ÇL Ç-L ÈL È'L È1L È;L É$I)É)I:	É4I= É:I= É=J?Ê,J:Ê:J?ËKËK	ËK ËK ËLË&,LÌLÌ L0	c                ód   € \         V,           \        P                  4       8”  d   \        R 4      hR# )z/Number of open probes would exceed global quotaN)r   rÖ   Úget_probe_limitr  )r)   Únum_new_probess   &&r   Ú_check_probe_quotaÚBPF._check_probe_quota  s*   € ä˜nÕ,¬s×/BÑ/BÓ/DÔDÜÐMÓNÐNñ Er   c                 óž   € \         P                  P                  R 4      p V '       d"   V P                  4       '       d   \	        V 4      # \
        # )ÚBCC_PROBE_LIMIT)rì   r  ÚgetÚisdigitrž  Ú_default_probe_limit)Úenv_probe_limits    r   r  ÚBPF.get_probe_limit  s7   € äŸ*™*Ÿ.™.Ð):Ó;ˆß˜×6Ñ6×8Ò8Ü�Ó'Ð'ä'Ð'r   c                óˆ   € WP                   9  d   / V P                   V&   W0P                   V,          V&   \        ^,          sR# ©r¤  N©r9  r   )r)   Úev_nameÚfn_namer  s   &&&&r   Ú_add_kprobe_fdÚBPF._add_kprobe_fd'  s6   € àŸ/™/Ô)Ø')ˆD�O‰O˜GÑ$Ø,.�‰˜Õ  Ñ)Ü˜AÕÒr   c                óH   € V P                   V,          V \        ^,          sR# r  r  )r)   r  r  s   &&&r   Ú_del_kprobe_fdÚBPF._del_kprobe_fd.  s   € à�O‰O˜GÕ$ WÐ-Ü˜AÕÒr   c                ó<   € W P                   V&   \        ^,          sR# r  ©r:  r   )r)   r7   r  s   &&&r   Ú_add_uprobe_fdÚBPF._add_uprobe_fd3  s   € à "�‰˜ÑÜ˜AÕÒr   c                ó:   € V P                   V \        ^,          sR# r  r%  ©r)   r7   s   &&r   Ú_del_uprobe_fdÚBPF._del_uprobe_fd8  s   € à�O‰O˜DÐ!Ü˜AÕÒr   c                ó�   € V P                    F$  pV P                  R V,          4      R8w  g   K"  Vu # 	  V P                   ^ ,          # )s   %sbpfr@   )Ú_syscall_prefixesÚksymname)r)   Úprefixs   & r   Úget_syscall_prefixÚBPF.get_syscall_prefix@  s@   € Ø×,Ô,ˆFØ�}‰}˜X¨Õ.Ó/°2Ö5Ø’ñ -ð ×%Ñ% aÕ(Ð(r   c                óF   € \        V4      pV P                  4       V,           # r   )r   r0  r)  s   &&r   Úget_syscall_fnnameÚBPF.get_syscall_fnnameI  s    € Ü Ó%ˆØ×&Ñ&Ó(¨4Õ/Ð/r   c                ó®   € \        V4      pV P                   F9  pVP                  V4      '       g   K  V P                  V\	        V4      R  4      u # 	  V# r   )r   r-  rü  r3  rK  )r)   r7   r/  s   && r   Úfix_syscall_fnnameÚBPF.fix_syscall_fnnameP  sN   € Ü Ó%ˆØ×,Ô,ˆFØ�‰˜v×&Ô&Ø×.Ñ.¨t´C¸³K°LÐ/AÓBÒBñ -ð ˆr   c                óü  € \        V4      p\        V4      p\        V4      pV'       d…   \        P                  V4      pV P                  \	        V4      4       ^ p. pV F  p V P                  WƒR7       K  	  V\	        V4      8X  d$   \        RV: RRP                  V4      : R24      hR# V P                  ^4       V P                  V\        P                  4      p	RVP                  RR	4      P                  R
R	4      ,           p
\        P                  ! V	P                  ^ W¡V^ 4      pV^ 8  d   \        RV: RV: R24      hV P                  W£V4       V #    T^,          pTP                  T4        EK  ; i)r   ©Úeventr  úFailed to attach BPF program z to kprobe Ú/úK, it's not traceable (either non-existing, inlined, or marked as "notrace")Nó   p_ó   +ó   _ó   .)r   rÖ   r  r  rK  Úattach_kprober8  r  r  rp  r�   Úreplacer   Úbpf_attach_kprober  r  )r)   r:  Ú	event_offr  r  ÚmatchesÚfailedÚprobesr  r…  r  r  s   &&&&&       r   rB  ÚBPF.attach_kprobeW  sX  € Ü  Ó'ˆÜ" 7Ó+ˆÜ# HÓ-ˆ÷ Ü×.Ñ.¨xÓ8ˆGØ×#Ñ#¤C¨£LÔ1ØˆFØˆFÛ�ð(Ø×&Ñ&¨TÐ&ÖCñ  ð œ˜W›Ô%Ýã!(¨#¯(©(°6Ö*:ð!<ó =ð =ñ à×Ñ Ô"Ø�^‰^˜G¤S§Z¡ZÓ0ˆØ˜%Ÿ-™-¨¨dÓ3×;Ñ;¸DÀ$ÓGÕGˆÜ×"Ò" 2§5¡5¨!¨W¸YÈÓJˆØ�Œ6Ýã$£eð-ó .ð .ð 	×Ñ˜G¨bÔ1Øˆøð%(Ø˜a•K�FØ—M‘M $×'Ð'ús   Á#EÅE;c                óÊ  € \        V4      p\        V4      p\        V4      pV'       dl   \        P                  V4      p^ p. pV F  p V P                  W‚VR7       K  	  V\        V4      8X  d$   \        RV: RRP                  V4      : R24      hR# V P                  ^4       V P                  V\        P                  4      p	RVP                  RR	4      P                  R
R	4      ,           p
\        P                  ! V	P                  ^W¡^ V4      pV^ 8  d   \        RV: RV: R24      hV P                  W¢V4       V #    T^,          pTP	                  T4        EK  ; i)r   )r:  r  Ú	maxactiver;  z to kretprobe r<  r=  Nó   r_r?  r@  rA  )r   rÖ   r  Úattach_kretprober8  rK  r  r  r  rp  r�   rC  r   rD  r  r  )r)   r:  r  r  rK  rF  rG  rH  r  r…  r  r  s   &&&&&       r   rM  ÚBPF.attach_kretprobey  sM  € Ü  Ó'ˆÜ" 7Ó+ˆÜ# HÓ-ˆ÷ Ü×.Ñ.¨xÓ8ˆGØˆFØˆFÛ�ð(Ø×)Ñ)°Ø4=ð *ö ?ñ  ð œ˜W›Ô%Ýã!(¨#¯(©(°6Ö*:ð!<ó =ð =ñ à×Ñ Ô"Ø�^‰^˜G¤S§Z¡ZÓ0ˆØ˜%Ÿ-™-¨¨dÓ3×;Ñ;¸DÀ$ÓGÕGˆÜ×"Ò" 2§5¡5¨!¨W¸QÀ	ÓJˆØ�Œ6Ýã$£eð-ó .ð .ð 	×Ñ˜G¨bÔ1Øˆøð%(Ø˜a•K�FØ—M‘M $×'Ð'ús   Á	EÅE"c                ó¤   € \        V4      p\        V P                  V,          P                  4       4      pV F  pV P	                  W4       K  	  R # r   )r   r®  r9  ÚkeysÚdetach_kprobe_event_by_fn)r)   r  Úfn_namesr  s   &&  r   Údetach_kprobe_eventÚBPF.detach_kprobe_event›  s@   € Ü" 7Ó+ˆÜ˜Ÿ™¨Õ0×5Ñ5Ó7Ó8ˆÛˆGØ×*Ñ*¨7Ö<ó  r   c                ó®  € \        V4      p\        V4      pWP                  9  d   \        R V,          4      h\        P                  ! V P                  V,          V,          4      pV^ 8  d   \        R4      hV P                  W4       \        V P                  V,          4      ^ 8X  d+   \        P                  ! V4      pV^ 8  d   \        R4      hR# R# )zKprobe %s is not attachedzFailed to close kprobe FDz Failed to detach BPF from kprobeN)r   r9  r  r   Úbpf_close_perf_event_fdr"  rK  Úbpf_detach_kprobe)r)   r  r  r;   s   &&& r   rQ  ÚBPF.detach_kprobe_event_by_fn¡  s³   € Ü" 7Ó+ˆÜ" 7Ó+ˆØŸ/™/Ô)ÜÐ7¸'ÕAÓBÐBÜ×)Ò)¨$¯/©/¸'Õ*BÀ7Õ*KÓLˆØ�Œ7ÜÐ7Ó8Ð8Ø×Ñ˜GÔ-Üˆt�‰˜wÕ'Ó(¨AÔ-Ü×'Ò'¨Ó0ˆCØ�QŒwÜÐ BÓCÐCñ ñ .r   c                óÜ   € \        V4      pR VP                  RR4      P                  RR4      ,           pV'       d   \        V4      pV P                  W24       R# V P                  V4       R# )r>  r?  r@  rA  N©r   rC  rQ  rS  ©r)   r:  r  r  s   &&& r   Údetach_kprobeÚBPF.detach_kprobe¯  óW   € Ü  Ó'ˆØ˜%Ÿ-™-¨¨dÓ3×;Ñ;¸DÀ$ÓGÕGˆßÜ& wÓ/ˆGØ×*Ñ*¨7Ö<à×$Ñ$ WÖ-r   c                óÜ   € \        V4      pR VP                  RR4      P                  RR4      ,           pV'       d   \        V4      pV P                  W24       R# V P                  V4       R# )rL  r?  r@  rA  NrZ  r[  s   &&& r   Údetach_kretprobeÚBPF.detach_kretprobe¸  r^  r   c                ó~  € \        V 4      p \        V\        P                  4      '       g   \	        R4      h\
        P                  ! WP                  V4      pV^ 8  d_   \        P                  ! 4       pV\        P                  8X  d   \	        R4      h\        P                  ! V4      p\	        RV : RV: 24      hR# )zT
This function attaches a BPF function to a device on the device
driver level (XDP)
rà  rì  rx  NzMInternal error while attaching BPF to device, try increasing the debug level!)r   rª  rÖ   r  r  r   Úbpf_attach_xdpr  r%   rê   rð   ÚEBADMSGrì   rí   )rð  r…  rä  r;   Úerr_nor„  s   &&&   r   Ú
attach_xdpÚBPF.attach_xdpÁ  s�   € ô ˜sÓ#ˆÜ˜"œcŸl™l×+Ò+ÜÐ@ÓAÐAÜ× Ò  §e¡e¨UÓ3ˆØ�Œ7Ü—\’\“^ˆFØœŸ™Ô&Üð !7ó 8ð 8ô Ÿš VÓ,�ÝÛ"¢Fð!,ó -ð -ñ r   c                óÒ   € \        V 4      p \        P                  ! V RV4      pV^ 8  d=   \        P                  ! \
        P                  ! 4       4      p\        RV : RV: 24      hR# )zW
This function removes any BPF function from a device on the
device driver level (XDP)
z!Failed to detach BPF from device rx  Nr@   )r   r   rc  rì   rí   r%   rê   r  )rð  rä  r;   r„  s   &&  r   Ú
remove_xdpÚBPF.remove_xdpÕ  sY   € ô ˜sÓ#ˆÜ× Ò   b¨%Ó0ˆØ�Œ7Ü—[’[¤§¢£Ó0ˆFÝÛ"¢Fð,ó -ð -ñ r   c                óh  € \        V4      p\        V4      p\        4       pVR8X  d   ^ MTp\        P                  ! YT;'       g    ^ V\        P
                  ! R\        P                  ! \        4      4      \        P                  ! V4      4      ^ 8  d0   \        RVP                  4       : RVP                  4       : 24      hVP                  V,           p\        P
                  ! VP                  \        P                  4      P                  p	\        P                  ! VP                  4       W˜3# )r¤  Nz&could not determine address of symbol z in r@   )r   r   r   Úbcc_resolve_symnamer%   r&   r'   r   r/   r  r6  r2   r1   r3   r4   Úbcc_procutils_free)
rî   r1   Úsymnamer8   r*   Úsym_offr:   Úc_pidÚnew_addrÚmodule_paths
   &&&&&&    r   Ú_check_path_symbolÚBPF._check_path_symbolâ  sã   € ä! &Ó)ˆÜ" 7Ó+ˆÜ‹lˆØ˜B”Y‘ CˆÜ×"Ò"ØØ�KˆK�C˜Ü�GŠG�Dœ"Ÿ*š*Ô%6Ó7Ó8Ü�HŠH�S‹Mó	
ð
 ôõ Ø&Ÿ~™~Ö/°·±µðBó Cð Cà—:‘: Õ'ˆÜ—g’g˜cŸj™j¬"¯+©+Ó6×<Ñ<ˆÜ×Ò˜sŸz™zÔ*ØÐ$Ð$r   c                ó&  € \        V 4      p V'       d   \        P                  ! W4      pM\        P                  ! V ^ 4      pV'       g   R# \        P
                  ! V\        P                  4      P                  p\        P                  ! V4       V# )aæ  
Find the full path to the shared library whose name starts with "lib{libname}".

If non-zero pid is given, search only the shared libraries mapped by the process with this pid.
Otherwise, search the global ldconfig cache at /etc/ld.so.cache.

Examples:
    BPF.find_library(b"c", pid=12345)  # returns b"/usr/lib/x86_64-linux-gnu/libc.so.6"
    BPF.find_library(b"pthread")       # returns b"/lib/x86_64-linux-gnu/libpthread.so.0"
    BPF.find_library(b"nonexistent")   # returns None
N)	r   r   Ú!bcc_procutils_which_so_in_processÚbcc_procutils_which_sor%   r&   r3   r4   rm  )Úlibnamer*   r;   Úlibpaths   &&  r   Úfind_libraryÚBPF.find_libraryõ  sf   € ô # 7Ó+ˆßÜ×7Ò7¸ÓE‰Cä×,Ò,¨W°aÓ8ˆCßÙÜ—'’'˜#œrŸ{™{Ó+×1Ñ1ˆÜ×Ò˜sÔ#Øˆr   c                óŒ  € . p\         P                  P                  \        R 4      p\         P                  ! V4       EF  p\         P                  P                  W#4      p\         P                  P                  V4      '       g   KJ  \         P                  ! V4       Fž  p\         P                  P                  WE4      p\         P                  P                  V4      '       g   KI  V: RV: 2p\        P                  ! V P                  4       V4      '       g   K  VP                  VP                  4       4       K   	  EK  	  V# )ÚeventsÚ:)rì   r  r  ÚTRACEFSÚlistdirÚisdirrý  rþ  r6  r8  r"  )Útp_reÚresultsÚ
events_dirÚcategoryÚcat_dirr:  Úevt_dirÚtps   &       r   Úget_tracepointsÚBPF.get_tracepoints  sÈ   € àˆÜ—W‘W—\‘\¤'¨8Ó4ˆ
ÜŸ
š
 :×.ˆHÜ—g‘g—l‘l :Ó8ˆGÜ—7‘7—=‘= ×)Ò)ÙÜŸš GÖ,�ÜŸ'™'Ÿ,™, wÓ6�Ü—7‘7—=‘= ×)Ô)Û%-ªuÐ5�BÜ—x’x §¡£°×3Ô3ØŸ™ r§y¡y£{Ö3ô -ñ	 /ð ˆr   c                óŠ   € \         P                  P                  \        R W4      p\         P                  P	                  V4      # )r}  )rì   r  r  r  r�  )r…  r:  r‡  s   && r   Útracepoint_existsÚBPF.tracepoint_exists  s+   € ä—'‘'—,‘,œw¨°(ÓBˆÜ�w‰w�}‰}˜WÓ%Ð%r   c                ó°  € \        V4      p\        V4      p\        V4      pV'       d1   \        P                  V4       F  pV P                  WR7       K  	  R# V P	                  V\        P
                  4      pVP                  R4      w  rV\        P                  ! VP                  WV4      pV^ 8  d   \        RV: RV: 24      hWpP                  V&   V # )aO  attach_tracepoint(tp="", tp_re="", fn_name="")

Run the bpf function denoted by fn_name every time the kernel tracepoint
specified by 'tp' is hit. The optional parameters pid, cpu, and group_fd
can be used to filter the probe. The tracepoint specification is simply
the tracepoint category and the tracepoint name, separated by a colon.
For example: sched:sched_switch, syscalls:sys_enter_bind, etc.

Instead of a tracepoint name, a regular expression can be provided in
tp_re. The program will then attach to tracepoints that match the
provided regular expression.

To obtain a list of kernel tracepoints, use the tplist tool or cat the
file /sys/kernel/debug/tracing/available_events.

Examples:
    BPF(text).attach_tracepoint(tp="sched:sched_switch", fn_name="on_switch")
    BPF(text).attach_tracepoint(tp_re="sched:.*", fn_name="on_switch")
©rˆ  r  Nó   :r;  z to tracepoint )r   rÖ   r‰  Úattach_tracepointrp  rQ   r  r   Úbpf_attach_tracepointr  r  r;  )r)   rˆ  r‚  r  r…  Útp_categoryÚtp_namer  s   &&&&    r   r‘  ÚBPF.attach_tracepoint"  s¹   € ô* ˜bÓ!ˆÜ  Ó'ˆÜ" 7Ó+ˆßÜ×)Ñ)¨%Ö0�Ø×&Ñ&¨"Ð&Ö>ñ 1áà�^‰^˜G¤S§^¡^Ó4ˆØ!#§¡¨$£ÑˆÜ×&Ò& r§u¡u¨kÓCˆØ�Œ6ÝÛ$¢bð*ó +ð +à"$×Ñ˜BÑØˆr   c                ó8  € \        V4      pWP                  9   d   \        RV,          4      h\        V4      pV P                  V\        P
                  4      p\        P                  ! VP                  V4      pV^ 8  d   \        R4      hW@P                  V&   V # )a|  attach_raw_tracepoint(self, tp=b"", fn_name=b"")

Run the bpf function denoted by fn_name every time the kernel tracepoint
specified by 'tp' is hit. The bpf function should be loaded as a
RAW_TRACEPOINT type. The fn_name is the kernel tracepoint name,
e.g., sched_switch, sys_enter_bind, etc.

Examples:
    BPF(text).attach_raw_tracepoint(tp="sched_switch", fn_name="on_switch")
z#Raw tracepoint %s has been attachedz&Failed to attach BPF to raw tracepoint)	r   r<  r  rp  rÖ   r›   r   Úbpf_attach_raw_tracepointr  )r)   rˆ  r  r…  r  s   &&&  r   Úattach_raw_tracepointÚBPF.attach_raw_tracepointH  s‡   € ô ˜bÓ!ˆØ×(Ñ(Ô(ÜÐAÀBÕFÓGÐGä" 7Ó+ˆØ�^‰^˜G¤S×%7Ñ%7Ó8ˆÜ×*Ò*¨2¯5©5°"Ó5ˆØ�Œ6ÜÐDÓEÐEØ&(×Ñ Ñ#Øˆr   c                óÈ   € \        V4      pWP                  9  d   \        RV,          4      h\        P                  ! V P                  V,          4       V P                  V R# )z­detach_raw_tracepoint(tp="")

Stop running the bpf function that is attached to the kernel tracepoint
specified by 'tp'.

Example: bpf.detach_raw_tracepoint("sched_switch")
z!Raw tracepoint %s is not attachedN)r   r<  r  rì   Úclose)r)   rˆ  s   &&r   Údetach_raw_tracepointÚBPF.detach_raw_tracepoint`  sP   € ô ˜bÓ!ˆØ×,Ñ,Ô,ÜÐ?À"ÕDÓEÐEÜ
�Š�×(Ñ(¨Õ,Ô-Ø×#Ñ# BÒ'r   c                óD   € VP                  V 4      '       g	   W,           pV# r   )rü  )r/  r7   s   &&r   Ú
add_prefixÚBPF.add_prefixo  s   € à�‰˜v×&Ò&Ø•=ˆDØˆr   c                 ó°   € \         P                  ! 4       R 8w  d   R# \        P                  ! 4       '       g   R# \        P                  R4      R8w  d   R# R# )Úx86_64FÚbpf_trampoline_link_progTr@   )r1  r2  r   Úbpf_has_kernel_btfrÖ   r.  r   r   r   Úsupport_kfuncÚBPF.support_kfuncu  sB   € ô ×ÒÓ Ô)ÙÜ×%Ò%×'Ò'Ùä�<‰<Ð2Ó3°rÔ9ÙÙr   c                 óx   € \         P                  ! 4       '       g   R # \        P                  R4      R8w  d   R# R # )Fs   bpf_lsm_bpfTr@   )r   r¤  rÖ   r.  r   r   r   Úsupport_lsmÚBPF.support_lsm�  s+   € ä×%Ò%×'Ò'Ùä�<‰<˜Ó'¨2Ô-ÙÙr   c                 ó4   € \         P                  R R4      ^8H  # )Úbpf_attach_typeÚBPF_MODIFY_RETURN)rÖ   Úkernel_enum_has_valr   r   r   Úsupport_fmod_retÚBPF.support_fmod_retŠ  s   € ô ×&Ñ&Ð'8Ð:MÓNÐRSÑSÐSr   c                óô   € \        V4      p\        P                  R V4      pWP                  9  d   \	        RV,          4      h\
        P                  ! V P                  V,          4       V P                  V R# )ó   kfunc__z$Kernel entry func %s is not attachedN)r   rÖ   rŸ  r=  r  rì   r›  ©r)   r  s   &&r   Údetach_kfuncÚBPF.detach_kfunc�  s^   € Ü" 7Ó+ˆÜ—.‘. ¨WÓ5ˆà×.Ñ.Ô.ÜÐBÀWÕLÓMÐMÜ
�Š�×%Ñ% gÕ.Ô/Ø× Ñ  Ò)r   c                óô   € \        V4      p\        P                  R V4      pWP                  9  d   \	        RV,          4      h\
        P                  ! V P                  V,          4       V P                  V R# )ó
   kmod_ret__z Fmod_ret func %s is not attachedN)r   rÖ   rŸ  r?  r  rì   r›  r²  s   &&r   Údetach_fmod_retÚBPF.detach_fmod_ret™  s^   € Ü" 7Ó+ˆÜ—.‘. °Ó8ˆà×+Ñ+Ô+ÜÐ>ÀÕHÓIÐIÜ
�Š�×"Ñ" 7Õ+Ô,Ø×Ñ˜gÒ&r   c                óô   € \        V4      p\        P                  R V4      pWP                  9  d   \	        RV,          4      h\
        P                  ! V P                  V,          4       V P                  V R# )ó
   kretfunc__z#Kernel exit func %s is not attachedN)r   rÖ   rŸ  r>  r  rì   r›  r²  s   &&r   Údetach_kretfuncÚBPF.detach_kretfunc¢  s^   € Ü" 7Ó+ˆÜ—.‘. °Ó8ˆà×-Ñ-Ô-ÜÐAÀGÕKÓLÐLÜ
�Š�×$Ñ$ WÕ-Ô.Ø×Ñ Ò(r   c                óL  € \        V4      p\        P                  R V4      pWP                  9   d   \	        RV,          4      hV P                  V\        P                  4      p\        P                  ! VP                  4      pV^ 8  d   \	        R4      hW0P                  V&   V # )r±  z&Kernel entry func %s has been attachedz)Failed to attach BPF to entry kernel func)
r   rÖ   rŸ  r=  r  rp  rž   r   Úbpf_attach_kfuncr  ©r)   r  r…  r  s   &&  r   Úattach_kfuncÚBPF.attach_kfunc«  s‡   € Ü" 7Ó+ˆÜ—.‘. ¨WÓ5ˆà×*Ñ*Ô*ÜÐDÀwÕNÓOÐOà�^‰^˜G¤S§[¡[Ó1ˆÜ×!Ò! "§%¡%Ó(ˆØ�Œ6ÜÐGÓHÐHØ(*×Ñ˜WÑ%Øˆr   c                óL  € \        V4      p\        P                  R V4      pWP                  9   d   \	        RV,          4      hV P                  V\        P                  4      p\        P                  ! VP                  4      pV^ 8  d   \	        R4      hW0P                  V&   V # )r¶  z"Fmod_ret func %s has been attachedz,Failed to attach BPF to fmod_ret kernel func)
r   rÖ   rŸ  r?  r  rp  rž   r   r¾  r  r¿  s   &&  r   Úattach_fmod_retÚBPF.attach_fmod_ret¹  s‡   € Ü" 7Ó+ˆÜ—.‘. °Ó8ˆà×'Ñ'Ô'ÜÐ@À7ÕJÓKÐKà�^‰^˜G¤S§[¡[Ó1ˆÜ×!Ò! "§%¡%Ó(ˆà�Œ6ÜÐJÓKÐKØ%'×Ñ˜'Ñ"àˆr   c                óL  € \        V4      p\        P                  R V4      pWP                  9   d   \	        RV,          4      hV P                  V\        P                  4      p\        P                  ! VP                  4      pV^ 8  d   \	        R4      hW0P                  V&   V # )rº  z%Kernel exit func %s has been attachedz(Failed to attach BPF to exit kernel func)
r   rÖ   rŸ  r>  r  rp  rž   r   r¾  r  r¿  s   &&  r   Úattach_kretfuncÚBPF.attach_kretfuncÉ  s‡   € Ü" 7Ó+ˆÜ—.‘. °Ó8ˆà×)Ñ)Ô)ÜÐCÀgÕMÓNÐNà�^‰^˜G¤S§[¡[Ó1ˆÜ×!Ò! "§%¡%Ó(ˆØ�Œ6ÜÐFÓGÐGØ')×Ñ˜GÑ$Øˆr   c                óô   € \        V4      p\        P                  R V4      pWP                  9  d   \	        RV,          4      h\
        P                  ! V P                  V,          4       V P                  V R# )ó   lsm__zLSM %s is not attachedN)r   rÖ   rŸ  r@  r  rì   r›  r²  s   &&r   Ú
detach_lsmÚBPF.detach_lsm×  sX   € Ü" 7Ó+ˆÜ—.‘. ¨7Ó3ˆàŸ,™,Ô&ÜÐ4°wÕ>Ó?Ð?Ü
�Š�—‘˜gÕ&Ô'Ø�L‰L˜Ò!r   c                óL  € \        V4      p\        P                  R V4      pWP                  9   d   \	        RV,          4      hV P                  V\        P                  4      p\        P                  ! VP                  4      pV^ 8  d   \	        R4      hW0P                  V&   V # )rÉ  zLSM %s has been attachedzFailed to attach LSM)
r   rÖ   rŸ  r@  r  rp  rŸ   r   Úbpf_attach_lsmr  r¿  s   &&  r   Ú
attach_lsmÚBPF.attach_lsmà  sƒ   € Ü" 7Ó+ˆÜ—.‘. ¨7Ó3ˆà—l‘lÔ"ÜÐ6¸Õ@ÓAÐAà�^‰^˜G¤S§W¡WÓ-ˆÜ×Ò §¡Ó&ˆØ�Œ6ÜÐ2Ó3Ð3Ø "�‰�WÑØˆr   c                 ór   € \         P                  R 4      R8w  g   \         P                  R4      R8w  d   R# R# )Úbpf_find_raw_tracepointÚbpf_get_raw_tracepointTFr@   )rÖ   r.  r   r   r   Úsupport_raw_tracepointÚBPF.support_raw_tracepointî  s.   € ô �<‰<Ð1Ó2°bÔ8Ü�<‰<Ð0Ó1°RÔ7ÙÙr   c                 ó  € R p \        V 4      ;_uu_ 4       pV FP  pVP                  4       P                  R^4      w   r4VP                  R4      ^ ,          pVR8X  g   KG   RRR4       R# 	   RRR4       R#   + '       g   i     R# ; i)rô  Ú Ú	Úbpf_trace_modulesNTF)rN  rú  r  )ÚkallsymsÚsymsr  Ú_r7   s        r   Ú support_raw_tracepoint_in_moduleÚ$BPF.support_raw_tracepoint_in_moduleö  so   € ð $ˆÜ�(�^Œ^˜tÛ�Ø#Ÿ{™{›}×2Ñ2°3¸Ó:‘��AØ—z‘z $Ó'¨Õ*�ØÐ.Ö.Ø÷ ‰^Ùð
 ÷ �^�^Š^ús   –AA8Á A8Á+A8Á8B		c                óZ   € \        V 4      p \        V4      p\        P                  ! W4      # r   )r   r   Úkernel_struct_has_field)Ústruct_nameÚ
field_names   &&r   rß  ÚBPF.kernel_struct_has_field  s'   € ä& {Ó3ˆÜ% jÓ1ˆ
Ü×*Ò*¨;ÓCÐCr   c                óZ   € \        V 4      p \        V4      p\        P                  ! W4      # r   )r   r   r­  )Ú	enum_nameÚ
value_names   &&r   r­  ÚBPF.kernel_enum_has_val  s'   € ä$ YÓ/ˆ	Ü% jÓ1ˆ
Ü×&Ò& yÓ=Ð=r   c                ób  € \        V4      pWP                  9  d   \        RV,          4      h\        P                  ! V P                  V,          4      pV^ 8  d   \        R4      hVP                  R4      w  r4\        P                  ! W44      pV^ 8  d   \        R4      hV P                  V R# )z©detach_tracepoint(tp="")

Stop running a bpf function that is attached to the kernel tracepoint
specified by 'tp'.

Example: bpf.detach_tracepoint("sched:sched_switch")
zTracepoint %s is not attachedz$Failed to detach BPF from tracepointr�  N)r   r;  r  r   rV  r  Úbpf_detach_tracepoint)r)   rˆ  r;   r“  r”  s   &&   r   Údetach_tracepointÚBPF.detach_tracepoint  sš   € ô ˜bÓ!ˆØ×(Ñ(Ô(ÜÐ;¸bÕ@ÓAÐAÜ×)Ò)¨$×*=Ñ*=¸bÕ*AÓBˆØ�Œ7ÜÐBÓCÐCØ!#§¡¨$£ÑˆÜ×'Ò'¨Ó=ˆØ�Œ7ÜÐBÓCÐCØ×Ñ Ò#r   c	           
     ó^   € \         P                  ! WVWEWgV4      p	V	^ 8  d   \        R4      hV	# )r   z"Failed to attach BPF to perf event)r   Úbpf_attach_perf_eventr  )
r)   ÚprogfdÚev_typeÚ	ev_configÚsample_periodÚsample_freqr*   ÚcpuÚgroup_fdr;   s
   &&&&&&&&& r   Ú_attach_perf_eventÚBPF._attach_perf_event#  s6   € ä×'Ò'¨¸Ø¨C°hó@ˆà�Œ7ÜÐ@ÓAÐAØˆ
r   c	                ó4  € \        V4      pV P                  V\        P                  4      p	/ p
V^ 8¼  d#   V P	                  V	P
                  WWEWgV4      W§&   M2\        4        F$  pV P	                  V	P
                  WWEWkV4      W«&   K&  	  W P                  W3&   R# ©r   N)r   rp  rÖ   r‘   rô  r  r   rB  )r)   rî  rï  r  rð  rñ  r*   rò  ró  r…  r;   re  s   &&&&&&&&&   r   Úattach_perf_eventÚBPF.attach_perf_event+  s’   € ä" 7Ó+ˆØ�^‰^˜G¤S§^¡^Ó4ˆØˆØ�!Œ8Ø×.Ñ.¨r¯u©u°gØ!°¸(óDˆCŠHô %Ö&�Ø×0Ñ0°·±¸Ø%°C¸HóF�“ñ 'ð 7:×Ñ˜wÐ2Ó3r   c                ó†   € \         P                  ! V\        P                  ! V4      VWE^ 4      pV^ 8  d   \	        R4      hV# )r   z&Failed to attach BPF to perf raw event)r   Úbpf_attach_perf_event_rawr%   r/   r  )r)   rí  Úattrr*   rò  ró  r;   s   &&&&&& r   Ú_attach_perf_event_rawÚBPF._attach_perf_event_raw9  s=   € Ü×+Ò+¨F´B·H²H¸T³NÀCØ˜qó"ˆà�Œ7ÜÐDÓEÐEØˆ
r   c                óZ  € \        V4      pV P                  V\        P                  4      p/ pV^ 8¼  d"   V P	                  VP
                  VW4V4      Wt&   M1\        4        F#  pV P	                  VP
                  VW8V4      Wx&   K%  	  WpP                  VP                  VP                  3&   R# r÷  )
r   rp  rÖ   r‘   rý  r  r   rB  r²  Úconfig)	r)   rü  r  r*   rò  ró  r…  r;   re  s	   &&&&&&   r   Úattach_perf_event_rawÚBPF.attach_perf_event_raw@  s–   € Ü" 7Ó+ˆØ�^‰^˜G¤S§^¡^Ó4ˆØˆØ�!Œ8Ø×2Ñ2°2·5±5¸$Ø˜hó(ˆCŠHô %Ö&�Ø×4Ñ4°R·U±U¸DØ ó*�“ñ 'ð ;>×Ñ˜tŸy™y¨$¯+©+Ð6Ó7r   c                ó4  €  V P                   W3,          p^ pTP	                  4        F#  p\
        P                  ! T4      ;'       g    TpK%  	  T^ 8w  d   \        R4      hT P                   Y3 R#   \         d    \        R P                  Y4      4      hi ; i)z)Perf event type {} config {} not attachedz$Failed to detach BPF from perf eventN)rB  r¾  r  râ  Úvaluesr   rV  )r)   rî  rï  Úfdsr;   r  s   &&&   r   Údetach_perf_eventÚBPF.detach_perf_eventM  sœ   € ð	%Ø×'Ñ'¨Ð(<Õ=ˆCð
 ˆØ—*‘*–,ˆBÜ×-Ò-¨bÓ1×8Ð8°SŠCñ à�!Œ8ÜÐBÓCÐCØ×!Ñ! 7Ð"6Ò7øô ô 	%ÜÐG×NÑNØó$ó %ð %ð	%ús   ‚A1 Á1&Bc                ór   € \        \        P                  W4       U Uu. uF  w  rV NK	  	  upp 4      # u upp i r   ©rù  rÖ   Ú get_user_functions_and_addresses)r7   Úsym_rerÛ  s   && r   Úget_user_functionsÚBPF.get_user_functions[  sA   € äÜ×8Ñ8¸ÔFôHÙFñ '˜d“DÙFòHó Ið 	Iùó Hó   ž3
c                ór   € \        \        P                  W4       UUu. uF  w  r#VNK	  	  upp4      # u uppi )a—  
We are returning addresses here instead of symbol names because it
turns out that the same name may appear multiple times with different
addresses, and the same address may appear multiple times with the same
name. We can't attach a uprobe to the same address more than once, so
it makes sense to return the unique set of addresses that are mapped to
a symbol that matches the provided regular expression.
r	  )r7   r  rÛ  Úaddresss   &&  r   Úget_user_addressesÚBPF.get_user_addresses`  sC   € ô Ü×8Ñ8¸ÔFôHÙFñ !- “GÙFòHó Ið 	Iùó Hr  c                ó¼   aa€ \        V 4      p \        S4      o. oVV3R  lp\        P                  ! V \        V4      4      pV^ 8  d   \	        RW03,          4      hS# )c                 ój   <€ T p\         P                  ! SV4      '       d   SP                  W!34       ^ # ©r   )rý  rþ  r8  )Úsym_namer8   ÚdnameÚ	addressesr  s   && €€r   Úsym_cbÚ4BPF.get_user_functions_and_addresses.<locals>.sym_cbr  s,   ø€ ØˆEÜ�xŠx˜ ×&Ò&Ø× Ñ  % Ô/Ùr   z"Error %d enumerating symbols in %s)r   r   Úbcc_foreach_function_symbolr   r  )r7   r  r  r;   r  s   &f  @r   r
  Ú$BPF.get_user_functions_and_addressesm  sZ   ù€ ä Ó%ˆÜ! &Ó)ˆØˆ	ö	ô ×-Ò-¨d´LÀÓ4HÓIˆØ�Œ7ÜÐ@ÀCÀ;ÕNÓOÐOØÐr   c                ó  € VR8X  dC   RWP                   P                  R\        P                  P	                  V4      4      V3,          # RWP                   P                  R\        P                  P	                  V4      4      W43,          # )r¤  s
   %s_%s_0x%xr@  s   %s_%s_0x%x_%dr@   )Ú_probe_replÚsubrì   r  Úbasename)r)   r/  r  r8   r*   s   &&&&&r   Ú_get_uprobe_evnameÚBPF._get_uprobe_evname}  ss   € Ø�"Œ9Ø  F×,<Ñ,<×,@Ñ,@ÀÄrÇwÁw×GWÑGWÐX\ÓG]Ó,^Ð`dÐ#eÕeÐeð $ v×/?Ñ/?×/CÑ/CÀDÌ"Ï'É'×JZÑJZÐ[_ÓJ`Ó/aÐcgÐ&mÕmÐmr   c                ó„  € V^ 8¼  g   Q hVe   V^ 8X  g   Q R4       h\        V4      p\        V4      p\        V4      p\        V4      pV'       dN   \        P                  W4      pV P                  \	        V4      4       V F  p	V P                  WWVR7       K  	  R# \        P                  WWFV4      w  r¤V P                  ^4       V P                  V\        P                  4      pV P                  RW¤V4      p\        P                  ! VP                  ^ WÊWF4      pV^ 8  d   \        R4      hV P                  WÍ4       V # )ac  attach_uprobe(name="", sym="", sym_re="", addr=None, fn_name=""
                 pid=-1, sym_off=0)

Run the bpf function denoted by fn_name every time the symbol sym in
the library or binary 'name' is encountered. Optional parameters pid,
cpu, and group_fd can be used to filter the probe.

If sym_off is given, attach uprobe to offset within the symbol.

The real address addr may be supplied in place of sym, in which case sym
must be set to its default value. If the file is a non-PIE executable,
addr must be a virtual address, otherwise it must be an offset relative
to the file load address.

Instead of a symbol name, a regular expression can be provided in
sym_re. The uprobe will then attach to symbols that match the provided
regular expression.

Libraries can be given in the name argument without the lib prefix, or
with the full path (/usr/lib/...). Binaries can be given only with the
full path (/bin/sh). If a PID is given, the uprobe will attach to the
version of the library used by the process.

Example: BPF(text).attach_uprobe("c", "malloc")
         BPF(text).attach_uprobe("/usr/bin/python", "main")
Nz!offset with addr is not supported©r7   r8   r  r*   ó   pzFailed to attach BPF to uprobe)r   rÖ   r  r  rK  Úattach_uprobers  rp  r�   r!  r   Úbpf_attach_uprober  r  r&  )r)   r7   r:   r  r8   r  r*   ro  r  Úsym_addrr  r…  r  r  s   &&&&&&&&      r   r&  ÚBPF.attach_uprobe…  s(  € ð: ˜!Œ|Ðˆ|ØÒØ˜a”<ÐDÐ!DÓD�<ä Ó%ˆÜ˜sÓ#ˆÜ! &Ó)ˆÜ" 7Ó+ˆçÜ×.Ñ.¨tÓ<ˆIØ×#Ñ#¤C¨	£NÔ3Û%�Ø×"Ñ"¨Ø+2ð #ö =ñ &ñ ä×-Ñ-¨d¸ÀGÓL‰ˆà×Ñ Ô"Ø�^‰^˜G¤S§Z¡ZÓ0ˆØ×)Ñ)¨$°¸CÓ@ˆÜ×"Ò" 2§5¡5¨!¨W¸DÓFˆØ�Œ6ÜÐ<Ó=Ð=Ø×Ñ˜GÔ(Øˆr   c                ó  € \        V4      p\        V4      p\        V4      p\        V4      pV'       d2   \        P                  W4       F  pV P                  WWVR7       K  	  R# \        P	                  WWF4      w  r„V P                  ^4       V P                  V\        P                  4      p	V P                  RW„V4      p
\        P                  ! V	P                  ^W¨WF4      pV^ 8  d   \        R4      hV P                  W«4       V # )a  attach_uretprobe(name="", sym="", sym_re="", addr=None, fn_name=""
                    pid=-1)

Run the bpf function denoted by fn_name every time the symbol sym in
the library or binary 'name' finishes execution. See attach_uprobe for
meaning of additional parameters.
r$  Nó   rz!Failed to attach BPF to uretprobe)r   rÖ   r  Úattach_uretprobers  r  rp  r�   r!  r   r'  r  r  r&  )r)   r7   r:   r  r8   r  r*   r(  r  r…  r  r  s   &&&&&&&     r   r,  ÚBPF.attach_uretprobe¾  sí   € ô   Ó%ˆÜ˜sÓ#ˆÜ! &Ó)ˆÜ" 7Ó+ˆçÜ×2Ñ2°4Ö@�Ø×%Ñ%¨4Ø.5ð &ö @ñ Añ ä×-Ñ-¨d¸ÓC‰ˆà×Ñ Ô"Ø�^‰^˜G¤S§Z¡ZÓ0ˆØ×)Ñ)¨$°¸CÓ@ˆÜ×"Ò" 2§5¡5¨!¨W¸DÓFˆØ�Œ6ÜÐ?Ó@Ð@Ø×Ñ˜GÔ(Øˆr   c                ó.  € WP                   9  d   \        R V,          4      h\        P                  ! V P                   V,          4      pV^ 8  d   \        R4      h\        P                  ! V4      pV^ 8  d   \        R4      hV P                  V4       R# )zUprobe %s is not attachedz Failed to detach BPF from uprobeN)r:  r  r   rV  Úbpf_detach_uprober*  )r)   r  r;   s   && r   Údetach_uprobe_eventÚBPF.detach_uprobe_eventÞ  sz   € ØŸ/™/Ô)ÜÐ7¸'ÕAÓBÐBÜ×)Ò)¨$¯/©/¸'Õ*BÓCˆØ�Œ7ÜÐ>Ó?Ð?Ü×#Ò# GÓ,ˆØ�Œ7ÜÐ>Ó?Ð?Ø×Ñ˜GÖ$r   c                ó¬   € \        V4      p\        V4      p\        P                  WW4V4      w  rcV P                  RWcV4      pV P	                  V4       R# )z�detach_uprobe(name="", sym="", addr=None, pid=-1)

Stop running a bpf function that is attached to symbol 'sym' in library
or binary 'name'.
r%  N©r   rÖ   rs  r!  r0  )r)   r7   r:   r8   r*   ro  r  r  s   &&&&&&  r   Údetach_uprobeÚBPF.detach_uprobeé  sP   € ô   Ó%ˆÜ˜sÓ#ˆÜ×-Ñ-¨d¸ÀGÓL‰ˆØ×)Ñ)¨$°¸CÓ@ˆØ× Ñ  Ö)r   c                óª   € \        V4      p\        V4      p\        P                  WW44      w  rSV P                  RWSV4      pV P	                  V4       R# )z�detach_uretprobe(name="", sym="", addr=None, pid=-1)

Stop running a bpf function that is attached to symbol 'sym' in library
or binary 'name'.
r+  Nr3  )r)   r7   r:   r8   r*   r  r  s   &&&&&  r   Údetach_uretprobeÚBPF.detach_uretprobeö  sN   € ô   Ó%ˆÜ˜sÓ#ˆä×-Ñ-¨d¸ÓC‰ˆØ×)Ñ)¨$°¸CÓ@ˆØ× Ñ  Ö)r   c                ó>  € \        ^ \        P                  ! V P                  4      4       EFm  p\        P                  ! V P                  V4      pVP                  R4      '       dV   V P                  V\        P                  4      pV P                  V P                  VR,          4      VP                  R7       K‘  VP                  R4      '       dV   V P                  V\        P                  4      pV P                  V P                  VR,          4      VP                  R7       Ký  VP                  R4      '       dh   V P                  V\        P                  4      pVP                  \        R4      R P                  RR	4      pV P!                  WCP                  R
7       EK{  VP                  R4      '       dX   V P                  V\        P"                  4      pVP                  \        R4      R pV P%                  WCP                  R
7       EKé  VP                  R4      '       d   V P'                  VR7       EK  VP                  R4      '       d   V P)                  VR7       EKA  VP                  R4      '       g   EK[  V P+                  VR7       EKp  	  R# )r   s   kprobe__:é   NNr9  s   kretprobe__:é   NNs   tracepoint__Ns   __r�  r�  s   raw_tracepoint__r±  )r  rº  rÉ  )rm  r   rn  r1   ro  rü  rp  rÖ   r�   rB  r6  r7   rM  rQ   rK  rC  r‘  r›   r˜  rÀ  rÆ  rÎ  )r)   re  rs  r…  rˆ  s   &    r   rU  ÚBPF._trace_autoload  sò  € Ü�qœ#×/Ò/°·±Ó<×=ˆAÜ×-Ò-¨d¯k©k¸1Ó=ˆIØ×#Ñ# K×0Ò0Ø—^‘^ I¬s¯z©zÓ:�Ø×"Ñ"Ø×1Ñ1°)¸Bµ-Ó@ØŸG™Gð #ö %ð ×%Ñ% n×5Ò5Ø—^‘^ I¬s¯z©zÓ:�Ø×%Ñ%Ø×1Ñ1°)¸Cµ.ÓAØŸG™Gð &ö %ð ×%Ñ% o×6Ò6Ø—^‘^ I¬s¯~©~Ó>�Ø—W‘WœS Ó1Ð2Ð3×;Ñ;¸EÀ4ÓH�Ø×&Ñ&¨"·g±gÐ&×>Ø×%Ñ%Ð&9×:Ò:Ø—^‘^ I¬s×/AÑ/AÓB�Ø—W‘WœSÐ!4Ó5Ð6Ð7�Ø×*Ñ*¨b¿'¹'Ð*×BØ×%Ñ% j×1Ò1Ø×!Ñ!¨)Ð!×4Ø×%Ñ% m×4Ò4Ø×$Ñ$¨YÐ$×7Ø×%Ñ% h×/Õ/Ø—‘¨	�×2ó3 >r   c                óz  € V P                   '       gŸ   \        R\        ,          R4      V n         V'       d{   V P                   P                  4       p\        P                  ! V\        P
                  4      p\        P                  ! V\        P                  V\        P                  ,          4       V P                   # )zGtrace_open(nonblocking=False)

Open the trace_pipe if not already open
z%s/trace_piper/  )	rD  rN  r  ÚfilenoÚfcntlÚF_GETFLÚF_SETFLrì   Ú
O_NONBLOCK)r)   Únonblockingr  Úfls   &&  r   Ú
trace_openÚBPF.trace_open   sp   € ð
 �~�~ˆ~Ü! /´GÕ";¸TÓBˆDŒNßØ—^‘^×*Ñ*Ó,�Ü—[’[ ¤U§]¡]Ó3�Ü—’˜B¤§¡¨r´B·M±MÕ/AÔBØ�~‰~Ðr   c                ó  €  V P                  V4      pV'       g   V'       d   R# VP                  R4      '       d   K=  VR,          P                  4       pVR,          pVP                  R4      p VRV P	                  4       w  rVrxT^R pY$^,           R pTP                  R4      p
Y*^,           R p T\        T4      \        T4      T\        T4      T3#   \
         d   p	 Rp	?	Kæ  Rp	?	ii ; i  \
         d   p	Ru Rp	?	# Rp	?	ii ; i)	z¿trace_fields(nonblocking=False)

Read from the kernel debug trace pipe and return a tuple of the
fields (task, pid, cpu, flags, timestamp, msg) or None if no
line was read (nonblocking=True)
Ns   CPU::Né   N:é   NNr�  )NNNNNNr@   )ÚUnknownr   r   rJ  g        rJ  )Útrace_readlinerü  ÚlstripÚfindr  r  rž  r   )r)   rC  r  ÚtaskÚts_endr*   rò  rä  Útsra  Úsym_endÚmsgs   &&          r   Útrace_fieldsÚBPF.trace_fields-  s  € ð Ø×&Ñ& {Ó3ˆDßŸK°Ð);à�‰˜w×'Ò'©Ø˜•9×#Ñ#Ó%ˆDØ˜•9ˆDØ—Y‘Y˜t“_ˆFðØ&*¨7¨F m×&9Ñ&9Ó&;Ñ#�˜%ð �a˜�)ˆCð  �
˜Ð$ˆDØ—i‘i “oˆGØ •{�|Ð$ˆCðDØœc #›h¬¨C«°%¼¸r»ÀCÐHÐHøô ô Ýûðûô ô DØCÕCûðDús0   Á0C Â3"C/ ÃC,Ã'C,Ã/DÃ:DÃ;DÄDc                ó�   € V P                  V4      pRp VP                  R4      P                  4       pV#   \         d     T# i ; i)zŸtrace_readline(nonblocking=False)

Read from the kernel debug trace pipe and return one line
If nonblocking is False, this will block until ctrl-C is pressed.
Nrq   )rE  Úreadlinerú  rû  )r)   rC  Útracer  s   &&  r   rK  ÚBPF.trace_readlineP  sS   € ð —‘ Ó,ˆàˆð	Ø—>‘> $Ó'×.Ñ.Ó0ˆDð ˆøô ô 	ØØˆð	ús   •6 ¶AÁAc                óè   €  V'       d.   V P                  RR7      pV'       g   K%  VP                  ! V!  pMV P                  RR7      p\        V4       \        P
                  P                  4        Ks  )zòtrace_print(self, fmt=None)

Read from the kernel debug trace pipe and print on stdout.
If fmt is specified, apply as a format string to the output. See
trace_fields for the members of the tuple
example: trace_print(fmt="pid {1}, msg = {5}")
F)rC  )rS  râ  rK  Úprintr
  ÚstdoutÚflush)r)   Úfmtr¶  r  s   &&  r   Útrace_printÚBPF.trace_print`  sZ   € ð ßØ×*Ñ*°uÐ*Ó=�ß™xØ—z’z 6Ñ*‘à×*Ñ*°uÐ*Ó=�Ü�$ŒKÜ�J‰J×ÑÖr   c                ó²   € V ^ 8  d
   V R8w  d   Rp V \         P                  9   g   \        V 4      \         P                  V &   \         P                  V ,          # )zˆ_sym_cache(pid)

Returns a symbol cache for the specified PID.
The kernel symbol cache is accessed by providing any PID less than zero.
r@   )rÖ   Ú_sym_cachesr"   )r*   s   &r   Ú
_sym_cacheÚBPF._sym_caches  sD   € ð �Œ7�s˜b”yØˆCØ”c—o‘oÔ%Ü#.¨sÓ#3ŒC�O‰O˜CÑ Ü�‰˜sÕ#Ð#r   c                óD  € \        \        V 4      4      pVP                  R4      R8w  Edi   \        4       p\	        4       pV P
                  Vn        V P                  Vn        V P                  VP                  n        \        P                  ! \        P                  \        P                  ! V4      \        P                  ! V4      4      pV^ 8  dr   VP                  '       dZ   VP                  '       dH   RVP                  \        P                   ! VP                  \        P"                  4      P$                  rºp	M~RT Rrºp	MxVP&                  VP                  \        P                   ! VP                  \        P"                  4      P$                  rºp	M'\        P)                  V4      P+                  W4      w  ršpV'       d   V	e
   RV
,          MRp
T	;'       g    Rp	Wš,           p	V'       d+   Ve'   R\,        P.                  P1                  V4      ,          MRpW›,           # )a)  sym(addr, pid, show_module=False, show_offset=False)

Translate a memory address into a function name for a pid, which is
returned. When show_module is True, the module name is also included.
When show_offset is True, the instruction offset as a hexadecimal
number is also included in the string.

A pid of less than zero will access the kernel symbol cache.

Example output when both show_module and show_offset are True:
    "start_thread+0x202 [libpthread-2.24.so]"

Example output when both show_module and show_offset are False:
    "start_thread"
Úbpf_stack_build_idNs   +0x%xr   s	   [unknown]s    [%s]r@   )r¯  r²  rM  r   r   ÚstatusÚbuild_idr2   Úur   Úbcc_buildsymcache_resolverÖ   Ú
_bsymcacher%   r/   r1   r&   r3   r4   r7   rb  r=   rì   r  r   )r8   r*   Úshow_moduleÚshow_offsetr9   Ú
typeofaddrr:   Úbr;   r7   r2   r1   s   &&&&&       r   r:   ÚBPF.sym€  s„  € ô( œ˜d›“_ˆ
Ø�?‰?Ð/Ó0°BÕ6Ü“ˆ#Ü%Ó'ˆ!Ø—[‘[ˆ!Œ(Ø—}‘}ˆ!Œ*Ø—{‘{ˆ!�#‰#Œ*Ü×-Ò-¬c¯n©nÜ.0¯hªh°q«kÜ.0¯hªh°s«mó=ˆ#ð �1ŒWØ�z�zˆz˜cŸjŸj˜jØ$(¨#¯*©*ÜŸš §
¡
¬B¯K©KÓ8×>Ñ>ð !ˆd˜&ð '+¨D°$˜Fˆd˜Fà$'§H¡H¨c¯j©jÜ$&§G¢G¨C¯J©J¼¿¹Ó$D×$JÑ$Jð !ˆD˜&ô "%§¡°Ó!4×!<Ñ!<¸TÓ!LÑ
ˆ$˜ç&1°dÒ6F�˜FÖ"ÈCˆØ×#Ð#�|ˆØ�}ˆç˜vÒ1ð œBŸG™G×,Ñ,¨VÓ4Ö4Ø7:ð 	à�}Ðr   c                ó2   € \         P                  V RWR4      # )an  ksym(addr)

Translate a kernel memory address into a kernel function name, which is
returned. When show_module is True, the module name ("kernel") is also
included. When show_offset is true, the instruction offset as a
hexadecimal number is also included in the string.

Example output when both show_module and show_offset are True:
    "default_idle+0x0 [kernel]"
Fr@   )rÖ   r:   )r8   rk  rl  s   &&&r   ÚksymÚBPF.ksym±  s   € ô �w‰w�t˜R ¸5ÓAÐAr   c                óL   € \         P                  R4      P                  RV 4      # )zƒksymname(name)

Translate a kernel name into an address. This is the reverse of
ksym. Returns -1 when the function name is unknown.Nr@   )rÖ   rb  rC   )r7   s   &r   r.  ÚBPF.ksymname¿  s    € ô �~‰~˜bÓ!×.Ñ.¨t°TÓ:Ð:r   c                ó,   € \        V P                  4      # )z’num_open_kprobes()

Get the number of open K[ret]probes. Can be useful for scenarios where
event_re is used while attaching and detaching probes.
)rK  r9  rÖ  s   &r   Únum_open_kprobesÚBPF.num_open_kprobesÇ  s   € ô �4—?‘?Ó#Ð#r   c                ó,   € \        V P                  4      # )z9num_open_uprobes()

Get the number of open U[ret]probes.
)rK  r:  rÖ  s   &r   Únum_open_uprobesÚBPF.num_open_uprobesÏ  s   € ô
 �4—?‘?Ó#Ð#r   c                ó,   € \        V P                  4      # )z<num_open_tracepoints()

Get the number of open tracepoints.
)rK  r;  rÖ  s   &r   Únum_open_tracepointsÚBPF.num_open_tracepointsÖ  s   € ô
 �4×&Ñ&Ó'Ð'r   c                ó  € \         P                  \        V P                  4      ,          ! 4       p\	        V P                  P                  4       4       F	  w  r4WBV&   K  	  \        P                  ! \        V4      W!4       R# )z“perf_buffer_poll(self)

Poll from all open perf ring buffers, calling the callback that was
provided when calling open_perf_buffer for each entry.
N)r%   rP  rK  rA  rL  r  r   Úperf_reader_poll)r)   ÚtimeoutÚreadersre  Úvs   &&   r   Úperf_buffer_pollÚBPF.perf_buffer_pollÝ  s[   € ô —;‘;¤ T×%6Ñ%6Ó!7Ö7Ó:ˆÜ˜d×/Ñ/×6Ñ6Ó8Ö9‰DˆAØ�A‹Jñ :ä×ÒœS ›\¨7Ö<r   c                ó  € \         P                  \        V P                  4      ,          ! 4       p\	        V P                  P                  4       4       F	  w  r#W1V&   K  	  \        P                  ! \        V4      V4       R# )zÓperf_buffer_consume(self)

Consume all open perf buffers, regardless of whether or not
they currently contain events data. Necessary to catch 'remainder'
events when wakeup_events > 1 is set in open_perf_buffer
N)r%   rP  rK  rA  rL  r  r   Úperf_reader_consume)r)   r�  re  r‚  s   &   r   Úperf_buffer_consumeÚBPF.perf_buffer_consumeè  s[   € ô —;‘;¤ T×%6Ñ%6Ó!7Ö7Ó:ˆÜ˜d×/Ñ/×6Ñ6Ó8Ö9‰DˆAØ�A‹Jñ :ä×Ò¤ G£¨gÖ6r   c                ó(   € V P                  V4       R# )z=kprobe_poll(self)

Deprecated. Use perf_buffer_poll instead.
N)rƒ  ©r)   r€  s   &&r   Úkprobe_pollÚBPF.kprobe_pollô  s   € ð
 	×Ñ˜gÖ&r   c                ó  € V P                   '       g<   \        P                  ! WV4      V n         V P                   '       g   \        R 4      hR# \        P                  ! V P                   WV4      pV^ 8  d   \        R 4      hR# )zCould not open ring bufferN)rC  r   Úbpf_new_ringbufr  Úbpf_add_ringbuf)r)   rÅ  r…  ÚctxÚrets   &&&& r   Ú_open_ring_bufferÚBPF._open_ring_bufferû  st   € Ø×$×$Ð$Ü$'×$7Ò$7¸ÀCÓ$HˆDÔ!Ø×(×(Ð(ÜÐ <Ó=Ð=ñ )ô ×%Ò% d×&;Ñ&;¸VÈÓMˆCØ�QŒwÜÐ <Ó=Ð=ñ r   c                ó‚   € V P                   '       g   \        R4      h\        P                  ! V P                   V4       R# )z‘ring_buffer_poll(self)

Poll from all open ringbuf buffers, calling the callback that was
provided when calling open_ring_buffer for each entry.
úNo ring buffers to pollN)rC  r  r   Úbpf_poll_ringbufrŠ  s   &&r   Úring_buffer_pollÚBPF.ring_buffer_poll  s2   € ð ×$×$Ð$ÜÐ5Ó6Ð6Ü×Ò˜T×2Ñ2°GÖ<r   c                ó€   € V P                   '       g   \        R4      h\        P                  ! V P                   4       R# )a  ring_buffer_consume(self)

Consume all open ringbuf buffers, regardless of whether or not
they currently contain events data. This is best for use cases
where low latency is desired, but it can impact performance.
If you are unsure, use ring_buffer_poll instead.
r•  N)rC  r  r   Úbpf_consume_ringbufrÖ  s   &r   Úring_buffer_consumeÚBPF.ring_buffer_consume  s0   € ð ×$×$Ð$ÜÐ5Ó6Ð6Ü×Ò × 5Ñ 5Ö6r   c                ó,   € \         P                  ! 4       # r   )r   Úbcc_free_memoryrÖ  s   &r   Úfree_bcc_memoryÚBPF.free_bcc_memory  s   € Ü×"Ò"Ó$Ð$r   c                óÖ   €  \         P                  ! \        P                  V P	                  4       4       R#   \
         d'   p\        R\        T4      ,           4        Rp?R# Rp?ii ; i)z<add_module(modname)

Add a library or exe to buildsym cache
z&Error adding module to build sym cacheN)r   Úbcc_buildsymcache_add_modulerÖ   rj  r"  r  rZ  r¯  )Úmodnamera  s   & r   Ú
add_moduleÚBPF.add_module  sG   € ð?Ü×(Ò(¬¯©¸¿¹Ó9IÖJøÜô ?ÜÐ6´s¸1³vÕ=×>Ò>ûð?ús   ‚37 ·A(ÁA#Á#A(c                ó   € R# )zthe do nothing exit handlerNr   rÖ  s   &r   r€  ÚBPF.donothing)  s   ‚ r   c                ó.  € \        V P                  P                  4       4       F2  w  r\        P                  ! VP
                  4       V P                  V K4  	  V P                  '       d*   \        P                  ! V P                  4       RV n        R# R# )z^close(self)

Closes all associated files descriptors. Attached BPF programs are not
detached.
N)	r®  rI  rö   rì   r›  r  r1   r   Úbpf_module_destroy)r)   r7   r…  s   &  r   r›  Ú	BPF.close-  sf   € ô ˜TŸZ™Z×-Ñ-Ó/Ö0‰HˆDÜ�HŠH�R—U‘UŒOØ—
‘
˜4Ò ñ 1ð �;�;ˆ;Ü×"Ò" 4§;¡;Ô/ØˆDŽKñ r   c                ó  € \        V P                  P                  4       4       F  w  rV P                  V4       K  	  \        V P                  P                  4       4       F  w  rV P                  V4       K  	  \        V P                  P                  4       4       F  w  rV P                  V4       K  	  \        V P                  P                  4       4       F  w  rV P                  V4       K  	  \        V P                  P                  4       4       F  w  rV P                  V4       K  	  \        V P                  P                  4       4       F  w  rV P                  V4       K  	  \        V P                  P                  4       4       F  w  rV P                  V4       K  	  \        V P                   P                  4       4       F  w  rV P#                  V4       K  	  \        V P$                  P'                  4       4      pV F9  p\)        V P$                  V,          \*        4      '       g   K,  V P$                  V K;  	  \        V P,                  P'                  4       4       F  w  rVV P/                  WV4       K  	  V P0                  '       d"   V P0                  P3                  4        R V n        V P3                  4        V P4                  '       d*   \6        P8                  ! V P4                  4       R V n        R # R # r   )r®  r9  rö   rS  r:  r0  r;  ré  r<  rœ  r=  r³  r>  r»  r@  rÊ  r?  r·  rJ  rP  rª  r
   rB  r  rD  r›  rC  r   Úbpf_free_ringbuf)r)   Úkr‚  Ú
table_keysrÍ  rî  rï  s   &      r   rG  ÚBPF.cleanup:  s9  € ä˜Ÿ™×.Ñ.Ó0Ö1‰DˆAØ×$Ñ$ QÖ'ñ 2ä˜Ÿ™×.Ñ.Ó0Ö1‰DˆAØ×$Ñ$ QÖ'ñ 2ä˜×,Ñ,×2Ñ2Ó4Ö5‰DˆAØ×"Ñ" 1Ö%ñ 6ä˜×0Ñ0×6Ñ6Ó8Ö9‰DˆAØ×&Ñ& qÖ)ñ :ä˜×-Ñ-×3Ñ3Ó5Ö6‰DˆAØ×Ñ˜aÖ ñ 7ä˜×,Ñ,×2Ñ2Ó4Ö5‰DˆAØ× Ñ  Ö#ñ 6ä˜Ÿ™×+Ñ+Ó-Ö.‰DˆAØ�O‰O˜AÖñ /ä˜×*Ñ*×0Ñ0Ó2Ö3‰DˆAØ× Ñ  Ö#ñ 4ô ˜$Ÿ+™+×*Ñ*Ó,Ó-ˆ
ÛˆCÜ˜$Ÿ+™+ cÕ*¬N×;Ô;Ø—K‘K Ò$ñ ô %)¨×)>Ñ)>×)CÑ)CÓ)EÖ$FÑ ˆWØ×"Ñ" 7Ö6ñ %Gà�>�>ˆ>Ø�N‰N× Ñ Ô"Ø!ˆDŒNà�
‰
Œð × × Ð Ü× Ò  ×!6Ñ!6Ô7Ø$(ˆDÖ!ñ !r   c                ó   € V # r   r   rÖ  s   &r   Ú	__enter__ÚBPF.__enter___  s   € Øˆr   c                ó&   € V P                  4        R # r   )rG  )r)   Úexc_typeÚexc_valÚexc_tbs   &&&&r   Ú__exit__ÚBPF.__exit__b  s   € Ø�‰Žr   )rC  rH  r?  rI  r=  r>  r9  r@  r1   rB  rA  r<  rJ  rD  r;  r:  )s   sys_s
   __x64_sys_s   __x32_compat_sys_s   __ia32_compat_sys_s   __arm64_sys_s   __s390x_sys_s   __s390_sys_s   __riscv_sys_)Nr@   )F)NNNr  )r   r   r   r   )r   r   r   r   r   )r   r   r   )r   r   )r   )r@   r@   r   r   r   r@   r@   r@   )r@   r   r@   r@   r@   )r@   r@   )r   r   r   Nr   r@   r   )r   r   r   Nr   r@   )r   r   Nr@   r   )r   r   Nr@   )FFT)FF)r@   )»rE   rF   rG   rH   r‹   rŒ   r�   rŽ   r�   rQ   r�   r‘   r’   r“   r”   r•   r–   r—   r˜   r™   rš   r›   rœ   rž   rŸ   rÈ   rÉ   rÊ   rË   rÌ   rÍ   rÏ   rÐ   ÚXDP_FLAGS_UPDATE_IF_NOEXISTrÑ   ÚXDP_FLAGS_SKB_MODErÒ   ÚXDP_FLAGS_DRV_MODErÓ   ÚXDP_FLAGS_HW_MODErÔ   ÚXDP_FLAGS_REPLACErý  Úcompiler  ra  r   Úbcc_buildsymcache_newrj  rõ   r-  ré   r%   r°  rå   ÚCDLLÚ_librtÚclock_gettimerè   Úc_intr'   ÚargtypesÚclassmethodrñ   rý   r	   Úobjectr  Ústaticmethodr  r&  r+   rt  rp  r‹  r�  r˜  Úc_boolÚc_charÚc_wcharÚc_ubyteÚc_shortÚc_ushortÚc_uintrã   Úc_ulongÚ
c_longlongrA   Úc_floatÚc_doubleÚc_longdoubleÚc_int64Úc_uint64r¬  r­  rÉ  rÎ  rÓ  r×  rÚ  rÝ  rå  ré  rñ  r  r  r  r  r"  r&  r*  r0  r3  r6  rB  rM  rS  rQ  r\  r`  rf  ri  rs  rz  r‰  rŒ  r‘  r˜  rœ  rŸ  r¥  r¨  r®  r³  r·  r»  rÀ  rÃ  rÆ  rÊ  rÎ  rÓ  rÜ  rß  r­  ré  rô  rø  rý  r  r  r  r  r
  r!  r&  r,  r0  r4  r7  rU  rE  rS  rK  r^  rb  r:   rq  r.  rv  ry  r|  rƒ  r‡  r‹  r’  r—  r›  rŸ  r¤  r€  r›  rG  r±  r·  rI   rJ   rK   s   @r   rÖ   rÖ     sL  ø‡ € ð  ×-Ñ-€MØ×Ñ€FØ×%Ñ%€IØ×%Ñ%€IØ×'Ñ'€JØ
�/‰/€CØ×'Ñ'€JØ×'Ñ'€JØ×)Ñ)€KØ×Ñ€FØ×!Ñ!€GØ×#Ñ#€HØ×#Ñ#€HØ×Ñ€FØ×-Ñ-€MØ×Ñ€FØ ×/Ñ/€NØ"×3Ñ3ÐØ×!Ñ!€GØ
�/‰/€Cà×'Ñ'€KØ×!Ñ!€HØ×!Ñ!€HØ×Ñ€FØ×)Ñ)€Là"*×"<Ñ"<ÐØ!×*Ñ*ÐØ!×*Ñ*ÐØ ×(Ñ(ÐØ ×(Ñ(Ðð —*’*Ð-Ó.€KØ€KØ×*Ò*Ó,€Jð 	˜˜Ø�t˜V�nØ˜5 )Ð,Ø˜˜	Ø˜i¨Ð6ð€Nò	Ðð €OôC�2—<‘<ô Cð �WŠW�\¨TÔ2€FØ×)Ñ)€NØ!Ÿx™x¨¯ª°HÓ)=Ð>€NÔàñ	*ó ð	*ð ñó ðð  €Eô�6ô ð ñ
ó ð
ð ñó ðð8 !$¨c¸ÀAØ R°dÀ4Ø#(ôhðT $*ô ôò@
)ò3ôPð
Ø�"—)‘)ðà�—‘ðð 	�B—J‘Jðð 	˜"Ÿ*™*ð	ð
 	�"—*‘*ðð 	˜2Ÿ;™;ðð 	�—‘ðð 	˜Ÿ™ðð 	�—‘ðð 	˜"Ÿ*™*ðð 	�b—m‘mðð 	˜rŸ~™~ðð 	�"—*‘*ðð 	�2—;‘;ðð 	˜Ÿ™ðð  	�R—Z‘Z !•^ð!ð" 	˜bŸk™k¨A�oð#€Ið& ñ)ó ð)ôVUò& ò
 ò òò&ð óOó ðOð ñOó ðOð ñó ðð ñIó ðIòVOð
 ñ(ó ð(òòò
ò
ò)ò0òô ôD òD=òDô.ô.ð ó-ó ð-ð& ó
-ó ð
-ð ó%ó ð%ð$ óó ðð. ñó ðð ñ&ó ð&ô$ôLô0(ð ñó ðð
 ñ	ó ð	ð ñó ðð ñTó ðTô
*ô'ô)ôôô ô"ôð ñó ðð ñ	ó ð	ð ñDó ðDð
 ñ>ó ð>ô
$ò*ô:òô>ô8ð ñIó ðIð ñ
Ió ð
Ið ñó ðònô7ôrò@	%ô*ô*ò3ô8ô!DôFô ð& ñ
$ó ð
$ð ó.ó ð.ð` óBó ðBð ñ;ó ð;ò$ò$ò(ô	=ò
7ô'ô>ô=ò
7ò%ð ñ?ó ð?ò*òò#)òJ÷ð r   rÖ   )EÚ
__future__r   rE  Úctypesr%   r?  rÀ  rì   rý  rð   r
  r1  r3  Úlibbccr   r   r   r   r   Útabler	   r
   r   r   r   Úperfr   Úutilsr   r   r   r   r   Úversionr   Údisassemblerr   r   rh  r   r   r«  Ú	NameErrorr¯  r  r   r   rø  r  r  r  r7  ÚDEBUG_LLVM_IRr{  ÚDEBUG_PREPROCESSORÚDEBUG_SOURCErz  Ú	DEBUG_BTFrÆ  r"   rN   rV   rb   ro   r‹   r¡   rÈ   rÏ   rÖ   r   r   r   Ú<module>rã     s9  ðõ &Û Û Û Û Û 	Û 	Û Û 
Û Û ç ]Õ ]ß YÕ YÝ ß VÕ VÝ  ß 6ß %ðÙð Ð ØÐ òð €Ø
�'‰'�,‰,�w 	Ó
*€Ø	‡w�w‡~�~�g×ÒØ#€Gð
 €à€	àÐ à€àÐ à€	ô)�&ô )÷Vñ ÷ñ ÷ñ ÷ñ ÷8ñ ÷0(ñ (÷Tñ ÷ñ ô`ˆ&ö `øð} ô Ø‚Jðús   Á6D4 Ä4	E Ä?E 