ÿØÿà JFIF      ÿÛ „ 	 ( %!1!%)+//.383,7(-.+



-%%-////---/-.+/--+------/------/--0+--/-/-----.-----ÿÀ  ¥2" ÿÄ               ÿÄ J  	     ! 1AQ"aq2‘#BR‚¡ÁÑ3br’¢±Âð$CSƒ²á4c“%DsÓñÿÄ              ÿÄ *        !1AQa‘"2q3±ð#b¡ÿÚ   ? ¼QxJQaÍuò¸Zö Úü8,ÐÚú
"SSn<rçù–´âE—^ªBÖ9À\†¸ÔÁT­ÃÛ5
ëd´³Í#Ý;Þ38œî ¶H£M:wÎ3…³…âpÔF&‚FK¸9„â4àGEõªfÿ ‘ñ(ßw­pŽF|È¥ù®häðÍÑ¶¹‘[ÒinÙW¶ùñY˜Q{›K"išÒ[Ú8žë\F¹@-?v"ÔU”,ìöžkÿ {I‡£šÍ?e
ríV
..............................................................................................................................................................................
.............................................................................                                                  
                                                                                                                                                                                     ÿØÿà JFIF      ÿÛ „ 	 ( %!1!%)+//.383,7(-.+



-%%-////---/-.+/--+------/------/--0+--/-/-----.-----ÿÀ  ¥2" ÿÄ               ÿÄ J  	     ! 1AQ"aq2‘#BR‚¡ÁÑ3br’¢±Âð$CSƒ²á4c“%DsÓñÿÄ              ÿÄ *        !1AQa‘"2q3±ð#b¡ÿÚ   ? ¼QxJQaÍuò¸Zö Úü8,ÐÚú
"SSn<rçù–´âE—^ªBÖ9À\†¸ÔÁT­ÃÛ5
ëd´³Í#Ý;Þ38œî ¶H£M:wÎ3…³…âpÔF&‚FK¸9„â4àGEõªfÿ ‘ñ(ßw­pŽF|È¥ù®häðÍÑ¶¹‘[ÒinÙW¶ùñY˜Q{›K"išÒ[Ú8žë\F¹@-?v"ÔU”,ìöžkÿ {I‡£šÍ?e
ríV
..............................................................................................................................................................................
.............................................................................                                                  
                                                                                                                                                                                     3
ft`                 @   s   d dl mZ d dl mZ ddlmZ d dlmZ d dlZd dl	Zd dl
Z
dd Zd	d
 Zdd ZedJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd[d\d]d^d_d`dEZdFdG ZdHdI ZdS )a    )absolute_import)unicode_literals   )transaction)is_py3bytesNc          )   C   s  t j| d}|jtjtjB   xztjjD ]l}tj	j
rDt|d}y|jd|}W n< ttjfk
r } ztjjdt| W Y dd}~X nX t|sq,yt|}W n$ tk
r   d}tjj|Y nX |d }yy|tj j|}W n, tk
r   |tj j|jd}Y nX |tj | }	|tj | }
|	tjkrd|
rd|d	 ||jdfkrd|
}W n tttfk
r   Y nX t|rt|d}|S W dS )
z-Calculate the release version for the system.)rootzutf-8Zprovidesz	Error: %sNz:Error: rpmdb failed to list provides. Try: rpm --rebuilddbversionutf8name)r   initReadOnlyTransactionZpushVSFlagsrpmZ_RPMVSF_NOSIGNATURESZ_RPMVSF_NODIGESTSdnfconstZDISTROVERPKGZpycompZPY3bytesZdbMatch	TypeErrorerror
exceptionsErrorstrlennextStopIterationZRPMTAG_PROVIDENAMEindex
ValueErrordecodeZRPMTAG_PROVIDEFLAGSZRPMTAG_PROVIDEVERSIONZRPMSENSE_EQUALKeyError
IndexErrorr   )ZinstallroottsZdistroverpkgidxehdrmsgZ
releaseverZoffflagZver r#   /usr/lib/python3.6/__init__.pydetect_releasever   sB    
&

r%   c             C   sp   t j }t| V}|j }y|j|}W n8 tjk
r` } ztjj	dj
|| W Y dd}~X nX |S Q R X dS )zReturn RPM header of the file.z
{0}: '{1}'N)r   r   openfilenoZhdrFromFdnor   r   r   r   r   format)pathr   packageZfdnor    r   r#   r#   r$   _headerI   s    
&r+   c                s    fdd D S )Nc                s    i | ]} | D ]
}||qqS r#   r#   ).0kv)dctr#   r$   
<dictcomp>V   s    z_invert.<locals>.<dictcomp>r#   )r/   r#   )r/   r$   _invertU   s    r1   aarch64alphaalphaev4	alphaev45alphaev5	alphaev56alphaev6	alphaev67	alphaev68alphaev7
alphapca56	armv5tejlarmv5telarmv5tlarmv6larmv7larmv8larmv6hlarmv7hlarmv7hnlarmv8hli386athlongeodei486i586i686ia64mipsmipselmips64mips64elnoarchppcppc64ppc64iseriesppc64p7ppc64pseriesppc64leriscv32riscv64riscv128s390s390xsh3sh4sh4asparcsparc64sparc64vsparcv8sparcv9sparcv9vx86_64amd64ia32e)r2   r3   ZarmZarmhfprG   rM   rN   rO   rP   rQ   rR   rS   rT   rX   rY   rZ   r[   r\   r]   r^   r_   ra   rg   c             C   s   t |  S )N)_BASEARCH_MAP)Zarchr#   r#   r$   basearchu   s    rk   c             C   s   | | }t |rt|d}|S )z
    Returns value of rpm_hdr[key] as a string. Rpm has switched from bytes to str
    and we need to handle both properly.
    zutf-8)r   r   )Zrpm_hdrkeyvaluer#   r#   r$   	getheaderz   s    
rn   )r2   )
r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   )r=   r>   r?   r@   rA   rB   )rC   rD   rE   rF   )rG   rH   rI   rG   rJ   rK   rL   )rM   )rN   )rO   )rP   )rQ   )rR   )rS   )rT   rU   rV   rW   )rX   )rY   )rZ   )r[   )r\   )r]   )r^   )r_   r`   )ra   rb   rc   rd   re   rf   )rg   rh   ri   )Z
__future__r   r    r   Z
dnf.pycompr   Z	dnf.constr   Zdnf.exceptionsr   r%   r+   r1   rj   rk   rn   r#   r#   r#   r$   <module>   sJ   ,  
