
    ;e_                        d Z ddlmZ ddlZddlZddlZddlZddlZddlZej	        dk    Z
d Z G d d          Zddd	Zd
 ZdddZd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z d Z!d Z"d Z#d  Z$d! Z%d" Z&d# Z'd$ Z(d% Z)d& Z*d' Z+d( Z,d) Z-d* Z.d.d+Z/d, Z0e1d-k    r e0             dS dS )/zK
Collect various information about Python to help debugging test failures.
    )print_functionNwin32c                 |    | d S t          |           } t          j        dd|           } |                                 S )Nz\s+ )strresubstrip)texts    &/usr/lib/python3.11/test/pythoninfo.pynormalize_textr      s8    |tt99D6&#t$$D::<<    c                        e Zd Zd Zd Zd ZdS )
PythonInfoc                     i | _         d S N)infoselfs    r   __init__zPythonInfo.__init__   s    			r   c                     || j         v rt          d|z            |d S t          |t                    s<t          |t                    st	          |          }|                                }|sd S || j         |<   d S )Nzduplicate key: %r)r   
ValueError
isinstanceintr   r
   )r   keyvalues      r   addzPythonInfo.add   s    $)036777=F%%% 	eS)) #E

KKMME 	#r   c                 H    d | j                                         D             S )zU
        Get information as a key:value dictionary where values are strings.
        c                 4    i | ]\  }}|t          |          S  )r   ).0r   r   s      r   
<dictcomp>z(PythonInfo.get_infos.<locals>.<dictcomp>2   s$    DDDJCSZZDDDr   )r   itemsr   s    r   	get_infoszPythonInfo.get_infos.   s%     ED$)//2C2CDDDDr   N)__name__
__module____qualname__r   r   r$   r    r   r   r   r      sF            $E E E E Er   r   	formatterc                v    |D ]5}t          ||d           }|||z  }| |||          } | ||           6d S r   )getattr)info_addobjname_fmt
attributesr)   attrr   names           r   copy_attributesr2   5   si      T4((=$ IdE**Eu r   c                 d    	 t          ||          }n# t          $ r Y d S w xY w | ||           d S r   r+   AttributeError)r,   r1   mod	attr_namer   s        r   	copy_attrr8   @   sR    Y''   HT5    
!!c                    	 t          ||          }n# t          $ r Y d S w xY w |            }| ||          } | ||           d S r   r4   )r,   r1   r6   	func_namer)   funcr   s          r   	call_funcr=   H   sr    sI&&   DFFE	%  HT5r9   c                    d}t          | t          d|           t          | dt          d           t          | dt          d           t          j                    }t	          t          d          r|dt          j                    } | d	|           d
D ]W}t          t          |          }|t          |dd           }|s.t          |dd           }|r|d|} | d|z  |           Xt	          t          d          }|rd}nd} | d|           t	          t          d          }|rd}nd} | d|           d S )N)_emscripten_info
_frameworkabiflagsapi_versionbuiltin_module_names	byteorderdont_write_bytecode
executableflags
float_infofloat_repr_style	hash_info
hexversionimplementationint_infomaxsize
maxunicodepathplatform
platlibdirprefixthread_infoversionversion_infowinverzsys.%szsys.androidapilevelgetandroidapilevelzsys.windowsversiongetwindowsversiongetfilesystemencodeerrors/zsys.filesystem_encoding)stdinstdoutstderrencodingerrorszsys.%s.encodinggettotalrefcountz$Yes (sys.gettotalrefcount() present)z#No (sys.gettotalrefcount() missing)zbuild.Py_DEBUG
getobjectszYes (sys.getobjects() present)zNo (sys.getobjects() missing)zbuild.Py_TRACE_REFS)r2   sysr=   getfilesystemencodinghasattrrZ   r+   )	r,   r/   r_   r1   streamr`   Py_DEBUGr   Py_TRACE_REFSs	            r   collect_sysri   S   s   J6 Hc8Z888h-s4HIIIh,c3FGGG(**Hs/00 I&hh(E(G(G(GHH&111- 
5 
5d##>6:t44 	400 	4"*((FF3H"T)84444 s.//H 554Ht$$$ C..M //.H"D)))))r   c                    dd l }|                                }d                    t          t          |                    } | d|            | d|                                            | d|                     d                     d|                                z                                  }|r | d	|           d S d S )
Nr   r   zplatform.architecturezplatform.python_implementationzplatform.platformT)aliasedz%s %szplatform.libc_ver)rQ   architecturejoinfilterboolpython_implementationlibc_verr
   )r,   rQ   archrq   s       r   collect_platformrs      s    OOO  ""D88F4&&''DH$d+++H-++--/ / /H t,,. . . (++---4466H 0$h/////0 0r   c                 J    dd l } | d|                                           d S )Nr   zlocale.getencoding)localegetencoding)r,   ru   s     r   collect_localerw      s0    MMMH!6#5#5#7#788888r   c                      | dt                               d                      | dt                               d                     d S )Nzbuiltins.float.float_formatfloatzbuiltins.float.double_formatdouble)ry   __getformat__)r,   s    r   collect_builtinsr|      sJ    H*E,?,?,H,HIIIH+U-@-@-J-JKKKKKr   c                    dd l }t          |d          rx	 	 |                    d|j                   d}n# t          $ r}d|z  }Y d }~nd }~ww xY w | d|           d S # t
          $ r!}|j        t          j        k    r Y d }~d S d }~ww xY wd S )Nr   	getrandom   zready (initialized)znot seeded yet (%s)zos.getrandom)osre   r~   GRND_NONBLOCKBlockingIOErrorOSErrorerrnoENOSYS)r,   r   stateexcs       r   collect_urandomr      s    IIIr; 	4Q 0111-" 4 4 4-34H^U+++++ 	 	 	 yEL(( )(((((	 s7   5 A 
AA	A 	AA 
B
)BB
c                    dd l }d }d}t          | |d||           dD ]}t          | d|z  ||           d }t          | d|d	|           t          |d
          r2	 |                                } | d|           n# t
          $ r Y nw xY wt          d          }|j                                        D ]k\  }}	|	                                }
|
|v s?|

                    d          s*|

                    d          r$|
                    d          r | d|z  |	           lt          |d          r;|                    d          }|                    |            | dd|z             d S d S )Nr   c                 Z    | dv r&t          t          d |D                                 S |S )N)supports_follow_symlinkssupports_fdsupports_effective_idsc              3   $   K   | ]}|j         V  d S r   )r%   )r!   r<   s     r   	<genexpr>z2collect_os.<locals>.format_attr.<locals>.<genexpr>   s$      >>dm>>>>>>r   )r   sortedr0   r   s     r   format_attrzcollect_os.<locals>.format_attr   s>     . . .v>>>>>>>???Lr   )r1   supports_bytes_environr   r   r   zos.%sr(   )
	cpu_countgetcwdgetegidgeteuidgetgid
getloadavg	getresgid	getresuidgetuidunamec                 R    d                     t          t          |                     S )N, )rm   mapr   )groupss    r   format_groupsz!collect_os.<locals>.format_groups   s    yyS&))***r   zos.getgroups	getgroupsgetloginzos.login)>APPDATAAR	ARCHFLAGSARFLAGSAUDIODEVCCCFLAGSCOLUMNSCOMPUTERNAMECOMSPECCPPCPPFLAGSDISPLAYDISTUTILS_DEBUGDISTUTILS_USE_SDKDYLD_LIBRARY_PATHENSUREPIP_OPTIONSHISTORY_FILEHOME	HOMEDRIVEHOMEPATHIDLESTARTUPLANGLDFLAGSLDSHAREDLD_LIBRARY_PATHLINESMACOSX_DEPLOYMENT_TARGETMAILCAPS	MAKEFLAGSMIXERDEVMSSDKPATHPATHEXTPIP_CONFIG_FILEPLATPOSIXLY_CORRECTPY_SAX_PARSERProgramFileszProgramFiles(x86)RUNNING_ON_VALGRINDSDK_TOOLS_BINSERVER_SOFTWARESHELLSOURCE_DATE_EPOCH
SYSTEMROOTTEMPTERMTILE_LIBRARYTIX_LIBRARYTMPTMPDIRTRAVISTZUSERPROFILEVIRTUAL_ENVWAYLAND_DISPLAYWINDIR_PYTHON_HOST_PLATFORM_PYTHON_PROJECT_BASE_PYTHON_SYSCONFIGDATA_NAME__PYVENV_LAUNCHER__)PYTHONLC_VS	COMNTOOLSzos.environ[%s]umaskzos.umaskz0o%03o)r   r2   r=   re   r   r   	frozensetenvironr#   upper
startswithendswithr   )r,   r   r   r/   r<   r   loginENV_VARSr1   r   r   masks               r   
collect_osr      s   III  J Hb':MMMM 6 6 	(GdNB5555+ + + hK=QQQQr: (	(KKMME HZ''''  	 	 	 D	  ? ? ?H@ z'')) 5 5e

X011  %%	  +0..*E*E	 
 H%,e444r7 .xx{{
X_-----. .s    B 
BBc                    	 dd l }n# t          $ r Y d S w xY wdd l}|                                }	 |                    |          }n# t
          $ r d }Y nw xY w | d|z  ||nd           |d S t          |d          rV|                    |j        |j	                  }d
                    t          t          |                    } | d|           d S d S )Nr   zpwd.getpwuid(%s)z
<KeyError>getgrouplistr   zos.getgrouplist)pwdImportErrorr   r   getpwuidKeyErrorre   r   pw_namepw_gidrm   r   r   )r,   r   r   uidentryr   s         r   collect_pwdr   H  s%   



   III
))++CS!!    H$'UU\; ; ; } 	r>"" ,==3sF++,,"F+++++, ,s    
A AAc                     	 dd l }n# t          $ r Y d S w xY wd }d}t          | |d||           t          |d          s5t	          |dd          }d	|v r | d
d	           d S d|v r | d
d           d S d S d S )Nr   c                 :    t          |t                    rd|z  S |S )Nz%#x)r   r   r   s     r   r   z%collect_readline.<locals>.format_attri  s#    eS!! 	5= Lr   )_READLINE_VERSION_READLINE_RUNTIME_VERSION_READLINE_LIBRARY_VERSIONzreadline.%sr(   r   __doc__ zlibedit readlinezreadline.libraryzGNU readline)readliner   r2   re   r+   )r,   r  r   r/   docs        r   collect_readliner  c  s         J
 Hhz)+ + + + 8899 9h	2..$$H');<<<<<s""H'888889 9
 #"    
c                    dd l }	 |                    g d|j        |j        d          }|                                d         }|j        rd S n# t
          $ r Y d S w xY w|                                d         } | d|           d S )Nr   )gdbz-nx	--versionTr]   r^   universal_newlinesgdb_version)
subprocessPopenPIPEcommunicate
returncoder   
splitlines)r,   r  procrU   s       r   collect_gdbr    s    
 ; ; ;'1'137   9 9 ""$$Q'? 	F	       ""1%GH]G$$$$$s   AA 
AAc                     	 dd l }d}t          | |d|           n# t          $ r Y nw xY w	 dd l}|                                }|                    dd          } | d|           d S # t          $ r Y d S w xY w)Nr   )
TK_VERSIONTCL_VERSIONz
tkinter.%sr   
patchlevelztkinter.info_patchlevel)_tkinterr2   r   tkinterTclcall)r,   r  r/   r  tclr  s         r   collect_tkinterr    s    F 3
(L*EEEE	    8 kkmmXXfl33
*J77777    s    
((A( (
A65A6c                 d   dd l } | d|                                            d}t          | |d|           t          |d          rgdD ]f}	 t          j        d          5  |                    |          }d d d            n# 1 swxY w Y    | d	|z  |           U# t          $ r Y aw xY wd S d S )
Nr   z	time.time)altzonedaylighttimezonetznameztime.%sget_clock_info)clock	monotonicperf_counterprocess_timethread_timetimeT)recordztime.get_clock_info(%s))r)  r2   re   warningscatch_warningsr#  r   )r,   r)  r/   r$  
clock_infos        r   collect_timer.    sB   KKKH[$))++&&&J HdIz:::t%&& H= 
	H 
	HEH,D999 < <!%!4!4U!;!;J< < < < < < < < < < < < < < < 2U:JGGGG	    H H
	H 
	Hs6   B!B7BB	B
B	B
B+*B+c                 X    	 dd l }n# t          $ r Y d S w xY wt          | d|d           d S )Nr   zcurses.ncurses_versionncurses_version)cursesr   r8   )r,   r1  s     r   collect_cursesr2    sR        h0&:KLLLLLr  c                 z    	 dd l }n# t          $ r Y d S w xY w | d|j                                                    d S )Nr   zdatetime.datetime.now)datetimer   now)r,   r4  s     r   collect_datetimer6    s^        H$h&7&;&;&=&=>>>>>r  c                 ^   t           rd S dd l}dD ]>}|                    |          }|dk    r|s t          |          } | d|z  |           ?|                    d          }|od|v }|rd}nd} | d	|           d
D ]-}|                    |          }|rd}nd} | d| |           .d S )Nr   )ABIFLAGSANDROID_API_LEVELr   CCSHAREDr   CFLAGSFORSHAREDCONFIG_ARGSHOST_GNU_TYPEMACHDEP	MULTIARCHOPT	PY_CFLAGSPY_CFLAGS_NODISTPY_CORE_LDFLAGS
PY_LDFLAGSPY_LDFLAGS_NODISTPY_STDMODULE_CFLAGSrg   Py_ENABLE_SHAREDr   SOABIrS   r9  zsysconfig[%s]rA  z-DNDEBUGz!ignore assertions (macro defined)z$build assertions (macro not defined)zbuild.NDEBUG)WITH_DOC_STRINGSWITH_DTRACEWITH_FREELISTSWITH_PYMALLOCWITH_VALGRINDYesNozbuild.)
MS_WINDOWS	sysconfigget_config_varr   )r,   rQ  r1   r   rA  NDEBUGr   s          r   collect_sysconfigrT    s%      0 00 ((..&&&u&u%%4'////((55I3J)3F 524H^D!!! ( ( ((.. 	DDD$$''''( (r   c                 h   dd l }	 dd l}n# t          $ r Y d S w xY w	 dd l}n# t          $ r d }Y nw xY wd }d}t	          | |d||           d|                    |j                  fd|                                fd|                                ffD ]\  }}d	}t	          | |d
| d|           ddg}|Gt          |d          r7|
                                }	|                    |	d         |	d         f           |D ]0}	 |j        |         }
n# t          $ r Y w xY w | d|z  |
           1d S )Nr   c                 :    |                      d          rd|z  S |S )NOP_z%#8xr   r   s     r   r   z collect_ssl.<locals>.format_attr  s%    ??5!! 	E>!Lr   )OPENSSL_VERSIONOPENSSL_VERSION_INFOHAS_SNIOP_ALLOP_NO_TLSv1_1zssl.%sr(   
SSLContextdefault_https_contextstdlib_context)minimum_versionmaximum_versionprotocoloptionsverify_modezssl.z.%sOPENSSL_CONFSSLKEYLOGFILEget_default_verify_paths   zssl.environ[%s])r   sslr   _sslr2   r^  PROTOCOL_TLS_CLIENT_create_default_https_context_create_stdlib_contextre   rh  extendr   r   )r,   r   rj  rk  r   r/   r1   ctx	env_namespartsr   s              r   collect_sslrs    s   III



        J Hc8Z;OOOO 
s~~c&=>>?	 #"C"C"E"EF	355778 E E	c


 	#'7d'7'7'7DDDD1IGD*DEE--//%(E!H-... 2 2	Jt$EE 	 	 	H	"T)511112 2s*    
" 11D
DDc                     	 dd l }n# t          $ r Y d S w xY w	 |                                } | d|           d S # t          t          f$ r t
          j        dk    r Y d S w xY w)Nr   zsocket.hostnamewasi)socketr   gethostnamer   r5   rc   rQ   )r,   rv  hostnames      r   collect_socketry  G  s       .%%'' 	"H----- ^$   <6!! "!!s    
; "A! A!c                 \    	 dd l }n# t          $ r Y d S w xY wd}t          | |d|           d S )Nr   )rU   sqlite_versionz
sqlite3.%s)sqlite3r   r2   )r,   r|  r/   s      r   collect_sqliter}  W  sU        /JHg|Z@@@@@r  c                 \    	 dd l }n# t          $ r Y d S w xY wd}t          | |d|           d S )Nr   )ZLIB_VERSIONZLIB_RUNTIME_VERSIONzzlib.%s)zlibr   r2   )r,   r  r/   s      r   collect_zlibr  a  sU        :JHdIz:::::r  c                 `    	 ddl m} n# t          $ r Y d S w xY wd}t          | |d|           d S )Nr   )expat)EXPAT_VERSIONzexpat.%s)xml.parsersr  r   r2   )r,   r  r/   s      r   collect_expatr  k  s_    %%%%%%%    $JHeZ<<<<<   	 
c                 \    	 dd l }n# t          $ r Y d S w xY wd}t          | |d|           d S )Nr   )__libmpdec_version__z_decimal.%s)_decimalr   r2   )r,   r  r/   s      r   collect_decimalr  u  sU        +JHhzBBBBBr  c                 X    	 dd l }n# t          $ r Y d S w xY wt          | d|d           d S )Nr   zpymem.allocatorpymem_getallocatorsname)	_testcapir   r=   )r,   r  s     r   collect_testcapir    sV        h)96OPPPPPr  c                     	 dd l }n# t          $ r Y d S w xY wd t          |          D             }|D ]6}t          ||          }|                    |          } | d|z  |           7t          | d|d           d S )Nr   c                 <    g | ]}|                     d           |S )RLIMIT_rX  )r!   r0   s     r   
<listcomp>z$collect_resource.<locals>.<listcomp>  s)    KKKt	0J0JKdKKKr   zresource.%szresource.pagesizegetpagesize)resourcer   dirr+   	getrlimitr=   )r,   r  limitsr1   r   r   s         r   collect_resourcer    s        LKs8}}KKKF . .h%%""3''%u----h+X}EEEEEr  c                     	 ddl m} n# t          t          j        f$ r Y d S w xY wd t          |          D             }t          | |d|           d S )Nr   )test_socketc                 <    g | ]}|                     d           |S )HAVE_rX  )r!   r1   s     r   r  z'collect_test_socket.<locals>.<listcomp>  s8     / / /4__W--/$ / / /r   ztest_socket.%s)testr  r   unittestSkipTestr  r2   )r,   r  r/   s      r   collect_test_socketr    s    $$$$$$$*+   / /3{#3#3 / / /JHk+;ZHHHHHs   	 ##c                 h   	 ddl m} n# t          $ r Y d S w xY wd}t          | |d|           t	          | d|d           t	          | d|d            | d	|                    d
                      | d|                    d
                      | d|                    d
                     d S )Nr   )support)IPV6_ENABLEDztest_support.%sztest_support._is_gui_available_is_gui_availablez test_support.python_is_optimizedpython_is_optimizedz*test_support.check_sanitizer(address=True)T)addressz)test_support.check_sanitizer(memory=True))memoryz%test_support.check_sanitizer(ub=True))ub)r  r  r   r2   r=   check_sanitizer)r,   r  r/   s      r   collect_test_supportr    s              #JHg'8*EEEh8'CVWWWh:GEZ[[[H9$$T$224 4 4H8$$D$113 3 3H4$$$--/ / / / /r  c                    dd l }dd l}|                    d          }|sd S 	 dd l}|                    |          }n$# t
          $ r |                                }Y nw xY w|                    d           	 |                    ||j        |j	        d          }n# t          $ r Y d S w xY w|                                d         }|j        rd S |                                d         }t          |          } | d|           d S )Nr   r   r  Tr	  z
CC.version)r  rQ  rR  shlexsplitr   appendr  r  STDOUTr   r  r  r  r   )	r,   r  rQ  r   r  argsr  r]   r   s	            r   
collect_ccr    sP   		!	!$	'	'B {{2   xxzzKK	'1'1'837   9 9     		 "F q!D$DH\4     s!   = AA7#B 
B)(B)c           	          	 ddl m} n# t          $ r Y d S w xY w | dd                    t	          t
          |                               d S )Nr   )_GDBM_VERSIONzgdbm.GDBM_VERSION.)_gdbmr  r   rm   r   r   )r,   r  s     r   collect_gdbmr    so    '''''''    H #((3sM+B+B"C"CDDDDDr  c           	          	 ddl m} n# t          $ r Y d S w xY w |            }t          |          D ]A}||         }t          |          D ]'} | |d|dt	          ||                              (Bd S )Nr   )get_configs[])_testinternalcapir  r   r   repr)r,   r  all_configsconfig_typeconfigr   s         r   collect_get_configr    s    1111111    +--Kk** G G[)&>> 	G 	GCHccc2D4E4EFFFF	GG Gr  c                 2    dd l }t          | |dd           d S )Nr   zsubprocess.%s)_USE_POSIX_SPAWN)r  r2   )r,   r  s     r   collect_subprocessr    s)    Hj/;PQQQQQr   c                     	 dd l }n# t          $ r Y d S w xY wt          |d          sd S |                    d          }|j        }	 |j        }||_        d|_        t           |                      }n# t          $ r d}Y nw xY w | d|           	 dd l
}|                    t          j                  } | d|           n# t          t          f$ r Y nw xY wdd l}	 |                    g d|j        |j        d	d
          }	|	                                \  }
}|	j        rd}
|
                                D ]}|                                }|                    d          r6|                    d                                          }|r | d|           a|                    d          r5|                    d                                          }|r | d|           n# t.          $ r Y nw xY w	 |                    dgd
|j        |j        d
          }	|	                                d         }
|	j        rd}
|
                                }
|
                                d         }|r | d|           d S d S # t.          $ r Y d S w xY w)Nr   WinDLLntdllr    z<function not available>zwindows.RtlAreLongPathsEnabledzwindows.dll_path)wmicr   getzCaption,Versionz/valueoemT)r]   r^   r_   r   r  zCaption=zwindows.version_captionzVersion=zwindows.versionver)shellr]   r^   r   zwindows.ver)ctypesr   re   r  c_ubyteRtlAreLongPathsEnabledrestypeargtypesro   r5   _winapiGetModuleFileNamerc   	dllhandler  r  r  r  r  r  r
   r   removeprefixr   )r,   r  r  BOOLEANr  resr  dll_pathr  r  outputr^   lines                r   collect_windowsr    sb       68$$ MM'""EnG-!&!= *1&*,'))++,,  ) ) )() H-s333,,S];;#X....(    6  R R R'1'1).%)	   + +
 ))++? 	F %%'' 		6 		6D::<<Dz** 6((44::<< >H6===,, 6((44::<< 6H.555		6    *t'1'1%)   + + !!##A&? 	F   ""1% 	*H]D)))))	* 	*    sV    
A4 4BB/C CCAG& &
G32G37AI? ?
JJc                 @   	 dd l }n# t          $ r d }Y nw xY w|t          | d|d           	 t          dd          5 }|                                                                }d d d            n# 1 swxY w Y   |r | d|           d S d S # t          $ r Y d S w xY w)Nr   zfips.openssl_fips_modeget_fips_modez/proc/sys/crypto/fips_enabledzutf-8)r_   zfips.linux_crypto_fips_enabled)_hashlibr   r=   openr  rstripr   )r,   r  fpr  s       r   collect_fipsr  >  s&       (4hPPP1GDDD 	*;;==''))D	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	*  	=H5t<<<<<	= 	=   s@    B 'A2&B 2A66B 9A6:B 
BBc                    d}| j         }t          t          t          t          t
          t          t          t          t          t          t          t          t          t          t          t           t"          t$          t&          t(          t*          t,          t.          t0          t2          t4          t6          t8          t:          t<          fD ]}	  ||           # t>          $ r d}tA          d|j!        z  tD          j#                   tI          j%        tD          j#                   tA          tD          j#                   tD          j#        &                                 Y w xY w|S )NFTzERROR: %s() failedfile)'r   r   r|   r  r2  r6  r  r  r  r  r  r  rw   r   rs   r   r  r  ry  r}  rs  r  ri   rT  r  r.  r  r  r  r  r  	Exceptionprintr%   rc   r^   	traceback	print_excflush)r   errorr,   collect_funcs       r   collect_infor  Q  s(   ExH 	 	I% . .L	L"""" 	 	 	E&,*?@z# # # #SZ0000sz""""J	 Ls   CBEEc                 l   d}t          |           t          dt          |          z             t                       |                                 }t          |                                          }|D ]/\  }}|                    dd          }t          |d|           0t                       d S )NzPython debug information=
r   z: )r  lenr$   r   r#   replace)r   r  titleinfosr   r   s         r   	dump_infor    s    &E	%LLL	#E


	GGGNNE5;;==!!E ' '
UdC((###uu%&&&&	GGGGGr   c                      t                      } t          |           }t          |            |r1t          dt          j                   t	          j        d           d S d S )Nz"Collection failed: exit with errorr  r   )r   r  r  r  rc   r^   exit)r   r  s     r   mainr    s\    <<DEdOOO 2DDDD r   __main__r   )2r   
__future__r   r   r   rc   r  r  r+  rQ   rP  r   r   r2   r8   r=   ri   rs   rw   r|   r   r   r   r  r  r  r.  r2  r6  rT  rs  ry  r}  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r%   r    r   r   <module>r     s@    & % % % % %  				 



       lg%
  E E E E E E E E: GK        <@     @* @* @*F0 0 0"9 9 9L L L
  &@. @. @.F, , ,69 9 9:% % %(8 8 8&H H H6M M M? ? ?;( ;( ;(|22 22 22j. . . A A A; ; ;= = =C C CQ Q QF F F	I 	I 	I/ / /( !  !  !FE E EG G GR R R
E* E* E*P  &4 4 4n      zDFFFFF r   