
    XfS!              
          d Z ddlZddlZddlZdZej        j        ed         k    sBej        j        ed         k     s,ej        j        ed         k    r)ej        j        ed         k     r e	 dj
        e           ddlZddlZddlZddlZddlZddlmZmZmZmZmZmZmZ ddlmZmZ d	eeeef         fd
Z ej        e          ZddZ  G d de!          Z"ded	efdZ# ed          Z$dee$         d	eee$         ddf         fdZ%dde&d	ee'         fdZ(de'fdZ)dde'de'de&d	ee'         fdZ*de'fdZ+d	ee'eej,        j-                 f         fdZ.ddZ/dS )zVolatility 3 framework.    N)      r         z@Volatility framework requires python version {}.{}.{} or greater)AnyDict	GeneratorListTupleTypeTypeVar)	constants
interfacesreturnc                  H    t           j        t           j        t           j        fS )z.Provides the so version number of the library.)r   VERSION_MAJORVERSION_MINORVERSION_PATCH     P/home/panchajanya/Development/work/volatility3/volatility3/framework/__init__.pyinterface_versionr   .   s    "I$;Y=TTTr   c                  4   t          |           r| d         t                      d         k    r;t          d                    t                      d         | d                             t          |           dk    r| d         t                      d         k    r}t          d                    d                    d t                      dd         D                       d                    d | dd         D                                           d	S d	S d	S )
z(Checks the required version of a plugin.r   zGFramework interface version {} is incompatible with required version {}r   zPFramework interface version {} is an older revision than the required version {}.c                 ,    g | ]}t          |          S r   str.0xs     r   
<listcomp>z-require_interface_version.<locals>.<listcomp>C   s    !K!K!KQ#a&&!K!K!Kr   r   c                 ,    g | ]}t          |          S r   r   r   s     r   r!   z-require_interface_version.<locals>.<listcomp>D   s    !<!<!<Q#a&&!<!<!<r   N)lenr   RuntimeErrorformatjoin)argss    r   require_interface_versionr(   6   s    
4yy 7'))!,,,Y``%''*DG   
 t99q==Aw*,,Q///"fmm!K!K2C2E2Eac2J!K!K!KLL!<!<$qs)!<!<!<==     =//r   c                   8    e Zd ZdededdfdZd	dededefdZdS )
NonInheritablevalueclsr   Nc                 "    || _         || _        d S N)default_valuer,   )selfr+   r,   s      r   __init__zNonInheritable.__init__J   s    "r   objget_typec                     t           | j        k    r7t          | j        d          r| j                            ||          S | j        S t
          )N__get__)typer,   hasattrr/   r5   AttributeError)r0   r2   r3   s      r   r5   zNonInheritable.__get__N   sM    48t)955 A)11#x@@@%%r   r.   )__name__
__module____qualname__r   r   r1   r5   r   r   r   r*   r*   I   sk        c       3 $ #      r   r*   r,   c                 0    t          d|           | _        | S )NT)r*   hidden)r,   s    r   hide_from_subclassesr>   V   s    c**CJJr   Tc              #      K   t          j        |           st          d|            |                                 D ]3}t	          |d          r|j        s|V  t          |          D ]}|V  4dS )z8Returns all the (recursive) subclasses of a given class.z.class_subclasses parameter not a valid class: r=   N)inspectisclass	TypeError__subclasses__r7   r=   class_subclasses)r,   clazzreturn_values      r   rE   rE   ^   s      ?3 PNNNOOO##%%  uh'' 	u| 	KKK,U33 	 	L		 r   Fignore_errorsc                    g }t          | j        t                    st          d          t                              t          j        dd                    | j                              | j        D ]}t          j
        |d          D ]\  }}}|                    d          r|D ]}t          j        t          j                            ||                    r| }|t          |          t          t          j        j                  z   d                             t          j        j        d          }	|	                    d          D ]2}
|
r.	 t'          ||
          }# t(          $ r ||dz   |
z   gz  }Y .w xY w3t          j                            ||          g|j        z   |_        t+          t          j                            ||                    D ]\  }}|D ]}t-          |          r}|d|                    d                                       t          j        j        d          }|t1          |j        dz   |z   t          j                            |||                    z  }t-          |          rt          j                            |t          |          t          t          j        j                  z   d         |d|                    d                             }|                    t          j        j        d          }|t1          | j        dz   |z   t          j                            ||          |          z  }А|S )	z;Imports all plugins present under plugins module namespace.z.[base_module].__path__ must be a list of pathsz$Importing from the following paths: z, T)followlinks__pycache__Nr   )
isinstance__path__listrC   volloglogr   LOGLEVEL_VVVVr&   oswalkendswithzipfile
is_zipfilepathr#   sepreplacesplitgetattrr8   _zipwalk_filter_filesrfindimport_filer9   )base_modulerH   failuresrW   root_filesfilename
new_module
premodules	componentziprootzipfileszfile	submodulemodpaths                   r   import_filesrn   j   sl   Hk*D11 JHIII
JJPtyy9M/N/NPP   $ * * gd=== )	 )	ND!U}}]++ ! % %%bgll4&B&BCC $!,J!%c$ii#bgk2B2B&B&D&D!E!M!MS" "J &0%5%5c%:%: K K	$ KK-4Z-K-K

#1 K K K (Z#-=	-I,J JKK T844+"++,J' .6bgll46R6R-S-S 	" 	")%- " "E,U33 ",12DEKK4D4D2D,E,M,M$&GK-" -"	 !)K$.$7#$=	$I$&GLLw$F$F-" -" !""	" %X.. 
"$',, TS-=-=!=!?!?@$%:x~~c':':%:;# # %,OOBGK$E$E	 K'036BGLLx88)% % C%	)	V Os   E''F ?F re   c                     |                      d          p)|                      d          p|                      d          o|                     d           S )z>Ensures that a filename traversed is an importable python filez.pyz.pycz.pyo__)rT   
startswith)re   s    r   r]   r]      sa     	%   	%V$$	%V$$( !!$''
'	(r   modulerW   c                    g }| t           j        vr	 t          j        |            n# t          $ r}t
                              d                    t          j	        
                    |                              d                               t
                              d                    | |                     |                    |            |s Y d}~nd}~ww xY w|S )a   Imports a python file based on an existing module, a submodule and a filepath for error messages

    Args
        module: Module name to be imported
        path: File to be imported from (used for error messages)

    Returns
        List of modules that may have failed to import

     T)chainz,Failed to import module {} based on file: {}N)sysmodules	importlibimport_moduleImportErrorrO   debugr&   	tracebackTracebackExceptionfrom_exceptionr%   append)rr   rW   rH   ra   es        r   r_   r_      s    HS[  	#F++++ 	 	 	LL0??BBIIPTIUU   
 LL>EEfdSS   OOF###      	 Os   ' 
CB$CCc           
   #   .  K   i }t          j        |           5 }|j        D ]}|                                s|                    t
          j                            |j                  g           }|	                    t
          j        
                    |j                             ||t
          j                            | t
          j                            |j                            <   	 ddd           n# 1 swxY w Y   |D ]}|||         fV  dS )z1Walks the contents of a zipfile just like os.walkN)rU   ZipFilefilelistis_dirgetrR   rW   dirnamere   r   basenamer&   )rW   zip_resultsarchivefiledirlistr+   s         r   r\   r\      s=     K			 '$ 	 	D;;== %//"'//$-*H*H"MMrw//>>??? BGLLrwt}/M/MNNO		                ( ([''''''( (s   CC99C= C=c                      i } t          t          j        j                  D ]E}|j        dz   |j        z   }|                    d          r|t          d          d          }|| |<   F| S )Nr   zvolatility3.plugins.)rE   r   pluginsPluginInterfacer:   r9   rq   r#   )plugin_listpluginplugin_names      r   list_pluginsr      s|    K":#5#EFF * *'#-?!!"899 	E%c*@&A&A&C&CDK#)K  r   c                     	 t          j        t           j                            t          j        t          j                             d S # t          $ r) t          	                    t          j
        d           Y d S w xY w)Nz(Attempting to clear a non-existant cache)rR   unlinkrW   r&   r   
CACHE_PATHIDENTIFIERS_FILENAMEFileNotFoundErrorrO   rP   rQ   )completes    r   clear_cacher      st    X
	"',,y3Y5STTUUUUU X X X

9*,VWWWWWWXs   AA
 
/A=<A=)r   N)F)0__doc__globrv   rU   required_python_versionversion_infomajorminormicror$   r%   rx   rA   loggingrR   r|   typingr   r   r	   r
   r   r   r   volatility3.frameworkr   r   intr   	getLoggerr9   rO   r(   objectr*   r>   r?   rE   boolr   rn   r]   r_   r\   r   r   r   r   r   r   r   <module>r      s      



 # 5a888
 7 :::"9!"<<<"%<Q%??? ,QJQ$	
         				     C C C C C C C C C C C C C C C C C C 7 7 7 7 7 7 7 7U5c3/ U U U U
 
	8	$	$   &
 
 
 
 
V 
 
 
d t    
 GCLL	$q' 	iQt0C&D 	 	 	 	5 5T 5d3i 5 5 5 5p(C ( ( ( (  3 t S	    <(3 ( ( ( (d3Z%7%G HHI    X X X X X Xr   