
    hGk                     V   d dl Z d dlmZmZ d dlmZmZmZmZm	Z	m
Z
mZmZmZ ddlmZ dZe j"                  dk(  r ed       ed	e      Zd	ed
Z eed      r ed      ed   dk(  rd dlmZmZmZmZ  G d de      Zd Zn	d dlmZ d Z G d de      Z e       Z  G d de      Z!y)    N)tobytesis_native_int)	backendload_libget_raw_bufferget_c_stringnull_pointercreate_string_bufferc_ulongc_size_tc_uint8_ptr   )IntegerBaseaY  typedef unsigned long UNIX_ULONG;
        typedef struct { int a; int b; void *c; } MPZ;
        typedef MPZ mpz_t[1];
        typedef UNIX_ULONG mp_bitcnt_t;

        void __gmpz_init (mpz_t x);
        void __gmpz_init_set (mpz_t rop, const mpz_t op);
        void __gmpz_init_set_ui (mpz_t rop, UNIX_ULONG op);

        UNIX_ULONG __gmpz_get_ui (const mpz_t op);
        void __gmpz_set (mpz_t rop, const mpz_t op);
        void __gmpz_set_ui (mpz_t rop, UNIX_ULONG op);
        void __gmpz_add (mpz_t rop, const mpz_t op1, const mpz_t op2);
        void __gmpz_add_ui (mpz_t rop, const mpz_t op1, UNIX_ULONG op2);
        void __gmpz_sub_ui (mpz_t rop, const mpz_t op1, UNIX_ULONG op2);
        void __gmpz_addmul (mpz_t rop, const mpz_t op1, const mpz_t op2);
        void __gmpz_addmul_ui (mpz_t rop, const mpz_t op1, UNIX_ULONG op2);
        void __gmpz_submul_ui (mpz_t rop, const mpz_t op1, UNIX_ULONG op2);
        void __gmpz_import (mpz_t rop, size_t count, int order, size_t size,
                            int endian, size_t nails, const void *op);
        void * __gmpz_export (void *rop, size_t *countp, int order,
                              size_t size,
                              int endian, size_t nails, const mpz_t op);
        size_t __gmpz_sizeinbase (const mpz_t op, int base);
        void __gmpz_sub (mpz_t rop, const mpz_t op1, const mpz_t op2);
        void __gmpz_mul (mpz_t rop, const mpz_t op1, const mpz_t op2);
        void __gmpz_mul_ui (mpz_t rop, const mpz_t op1, UNIX_ULONG op2);
        int __gmpz_cmp (const mpz_t op1, const mpz_t op2);
        void __gmpz_powm (mpz_t rop, const mpz_t base, const mpz_t exp, const
                          mpz_t mod);
        void __gmpz_powm_ui (mpz_t rop, const mpz_t base, UNIX_ULONG exp,
                             const mpz_t mod);
        void __gmpz_pow_ui (mpz_t rop, const mpz_t base, UNIX_ULONG exp);
        void __gmpz_sqrt(mpz_t rop, const mpz_t op);
        void __gmpz_mod (mpz_t r, const mpz_t n, const mpz_t d);
        void __gmpz_neg (mpz_t rop, const mpz_t op);
        void __gmpz_abs (mpz_t rop, const mpz_t op);
        void __gmpz_and (mpz_t rop, const mpz_t op1, const mpz_t op2);
        void __gmpz_ior (mpz_t rop, const mpz_t op1, const mpz_t op2);
        void __gmpz_clear (mpz_t x);
        void __gmpz_tdiv_q_2exp (mpz_t q, const mpz_t n, mp_bitcnt_t b);
        void __gmpz_fdiv_q (mpz_t q, const mpz_t n, const mpz_t d);
        void __gmpz_mul_2exp (mpz_t rop, const mpz_t op1, mp_bitcnt_t op2);
        int __gmpz_tstbit (const mpz_t op, mp_bitcnt_t bit_index);
        int __gmpz_perfect_square_p (const mpz_t op);
        int __gmpz_jacobi (const mpz_t a, const mpz_t b);
        void __gmpz_gcd (mpz_t rop, const mpz_t op1, const mpz_t op2);
        UNIX_ULONG __gmpz_gcd_ui (mpz_t rop, const mpz_t op1,
                                     UNIX_ULONG op2);
        void __gmpz_lcm (mpz_t rop, const mpz_t op1, const mpz_t op2);
        int __gmpz_invert (mpz_t rop, const mpz_t op1, const mpz_t op2);
        int __gmpz_divisible_p (const mpz_t n, const mpz_t d);
        int __gmpz_divisible_ui_p (const mpz_t n, UNIX_ULONG d);
        win32zNot using GMP on Windowsgmp)libraryapi__mpir_versionzMPIR library detectedr   ctypes)	Structurec_intc_void_pbyrefc                   "    e Zd ZdefdefdefgZy)_MPZ	_mp_alloc_mp_size_mp_dN)__name__
__module____qualname__r   r   _fields_     b/var/www/html/retail-simulation-api/retail/lib/python3.12/site-packages/Crypto/Math/_IntegerGMP.pyr   r   p   s!     %('h')r$   r   c                  (    t        t                     S N)r   r   r#   r$   r%   new_mpzr(   u   s    TV}r$   )ffic                  ,    t        j                  d      S )NzMPZ*)r)   newr#   r$   r%   r(   r(   |   s    wwvr$   c                       e Zd Zd Zy)_GMPc                     |j                  d      r	d|dd  z   }n(|j                  d      r	d|dd  z   }nt        d|z        t        t        |      }t	        | ||       |S )Nmpz___gmpz_   gmp___gmp_zAttribute %s is invalid)
startswithAttributeErrorgetattrlibsetattr)selfname	func_namefuncs       r%   __getattr__z_GMP.__getattr__   sh    ??6"!DH,I__V$ 48+I !:T!ABBsI&dD!r$   N)r   r    r!   r=   r#   r$   r%   r-   r-      s    	r$   r-   c                      e Zd ZdZ e       Zej                  e ed             d Z	d Z
d Zd Zd Zd Zd8d	Zed9d
       Zd Zd Zd Zd Zd Zd Zd Zd ZeZd Zd Zd Zd Zd Zd Z d:dZ!d:dZ"d Z#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) Z0d* Z1d+ Z2d, Z3d- Z4d. Z5d/ Z6d0 Z7d1 Z8d2 Z9d3 Z:d4 Z;ed5        Z<ed6        Z=d7 Z>y);
IntegerGMPz#A fast, arbitrary precision integerr   c           	         t               | _        d| _        t        |t              rt        d      t        |      r>t        j                  | j                         d| _        |dk(  ryt               }t        j                  |       	 |dk\  }t        |      }|j                         dz
  dz  dz   }|dkD  r|dz
  }t        j                  |t        d||dz  z	  z               t        j                  ||t        |dz               t        j                  | j                  | j                  |       |dkD  rt        j                  |       |s+t        j!                  | j                  | j                         yyt        |t"              r2t        j%                  | j                  |j                         d| _        yt&        # t        j                  |       w xY w)	z*Initialize the integer to the given value.Fz-A floating point type is not a natural numberTr   Nr           )r(   _mpz_p_initialized
isinstancefloat
ValueErrorr   _gmpmpz_initabs
bit_length
mpz_set_uir   mpz_mul_2expmpz_add	mpz_clearmpz_negr?   mpz_init_setNotImplementedError)r9   valuetmppositivereduceslotss         r%   __init__zIntegerGMP.__init__   s{    i!eU#LMMMM$++& $Dz)CMM#$ A:U**,q0R7!;ai!AIEOOC$+J&URZ:P,Q$RT%%c3
0CDLLdkk3? ai s#T[[$++6  z*dkk5<<8 $D%% s#s   
B.G Gc                    t               }t        j                  || j                         	 d}d}t        j	                  || j
                        dk7  rlt        j                  |      dz  }|||dz  z  z  }t        j                  ||t        d             |dz   }t        j	                  || j
                        dk7  rlt        j                  |       | dk  r| }t        |      S # t        j                  |       w xY w)Nr   rB   rA   r   )r(   rH   rQ   rC   mpz_cmp_zero_mpz_p
mpz_get_uimpz_tdiv_q_2expr   rO   int)r9   rT   rS   slotlsbs        r%   __int__zIntegerGMP.__int__   s    i#t{{+		 ED,,sD$4$45:ooc*Z7++$$S#wr{;ax	 ,,sD$4$45: NN3!8FE5z	 NN3s   BC' 'C>c                 *    t        t        |             S r'   )strr^   r9   s    r%   __str__zIntegerGMP.__str__       3t9~r$   c                     dt        |       z  S )NzInteger(%s))rc   rd   s    r%   __repr__zIntegerGMP.__repr__   s    s4y((r$   c                 *    t        t        |             S r'   )hexr^   rd   s    r%   __hex__zIntegerGMP.__hex__   rf   r$   c                     t        |       S r'   )r^   rd   s    r%   	__index__zIntegerGMP.__index__   s    4yr$   c           
         | dk  rt        d      t        j                  | j                  d      dz   dz  }||cxkD  rdkD  rt        d       t	        |      }t        j                  |t        dt        d      dt        d      | j                         dt        d||z
        z  t        |      z   }|d	k(  r	 |S |d
k(  r(t        |      }|j                          t        |      }|S t        d      )a  Convert the number into a byte string.

        This method encodes the number in network order and prepends
        as many zero bytes as required. It only works for non-negative
        values.

        :Parameters:
          block_size : integer
            The exact size the output byte string must have.
            If zero, the string has the minimal length.
          byteorder : string
            'big' for big-endian integers (default), 'little' for litte-endian.
        :Returns:
          A byte string.
        :Raise ValueError:
          If the value is negative or if ``block_size`` is
          provided and the length of the byte string would exceed it.
        r   .Conversion only valid for non-negative numbers         z@Number is too big to convert to byte string of prescribed lengthr       biglittleIncorrect byteorder)rG   rH   mpz_sizeinbaserC   r
   
mpz_exportr	   r   maxr   	bytearrayreversebytes)r9   
block_size	byteorderbuf_lenbufresults         r%   to_byteszIntegerGMP.to_bytes   s   ( !8MNN&&t{{A6:q@Z#!# 5 6 6 $ #7+ 		 3q*w"677.:MM  ("v&FNN6]F  233r$   c                 $   t        d      }|dk(  rn,|dk(  rt        |       } | j                          nt        d      t        j                  |j                  t        t        |             dt        d      dt        d      t        |              |S )a  Convert a byte string into a number.

        :Parameters:
          byte_string : byte string
            The input number, encoded in network order.
            It can only be non-negative.
          byteorder : string
            'big' for big-endian integers (default), 'little' for litte-endian.

        :Return:
          The ``Integer`` object carrying the same value as the input.
        r   rt   ru   rv   r   )
r?   rz   r{   rG   rH   
mpz_importrC   r   lenr   )byte_stringr~   r   s      r%   
from_byteszIntegerGMP.from_bytes  s     A("#K0K!233 [!12  #K0	2 r$   c                 r    t        |t              st        |      } || j                  |j                        S r'   )rE   r?   rC   )r9   r<   terms      r%   _apply_and_returnzIntegerGMP._apply_and_return7  s+    $
+d#DDKK--r$   c                     t        |t              st        |      sy| j                  t        j
                  |      dk(  S )NFr   rE   r?   r   r   rH   rZ   r9   r   s     r%   __eq__zIntegerGMP.__eq__<  s2    4,d0C%%dllD9Q>>r$   c                     t        |t              st        |      sy| j                  t        j
                  |      dk7  S )NTr   r   r   s     r%   __ne__zIntegerGMP.__ne__A  s2    4,d0C%%dllD9Q>>r$   c                 H    | j                  t        j                  |      dk  S Nr   r   rH   rZ   r   s     r%   __lt__zIntegerGMP.__lt__F      %%dllD9A==r$   c                 H    | j                  t        j                  |      dk  S r   r   r   s     r%   __le__zIntegerGMP.__le__I      %%dllD9Q>>r$   c                 H    | j                  t        j                  |      dkD  S r   r   r   s     r%   __gt__zIntegerGMP.__gt__L  r   r$   c                 H    | j                  t        j                  |      dk\  S r   r   r   s     r%   __ge__zIntegerGMP.__ge__O  r   r$   c                 \    t         j                  | j                  | j                        dk7  S r   rH   rZ   rC   r[   rd   s    r%   __nonzero__zIntegerGMP.__nonzero__R  s"    ||DKK)9)9:a??r$   c                 \    t         j                  | j                  | j                        dk  S r   r   rd   s    r%   is_negativezIntegerGMP.is_negativeV  s"    ||DKK)9)9:Q>>r$   c                     t        d      }t        |t               s	 t        |      }t        j                  |j                  | j                  |j                         |S # t        $ r	 t        cY S w xY wr   )r?   rE   rR   NotImplementedrH   rN   rC   r9   r   r   s      r%   __add__zIntegerGMP.__add__Z  d    A$
+&!$' 	V]][[[[	"  ' &%%&   A A10A1c                     t        d      }t        |t               s	 t        |      }t        j                  |j                  | j                  |j                         |S # t        $ r	 t        cY S w xY wr   )r?   rE   rR   r   rH   mpz_subrC   r   s      r%   __sub__zIntegerGMP.__sub__f  r   r   c                     t        d      }t        |t               s	 t        |      }t        j                  |j                  | j                  |j                         |S # t        $ r	 t        cY S w xY wr   )r?   rE   rR   r   rH   mpz_mulrC   r   s      r%   __mul__zIntegerGMP.__mul__r  r   r   c                 ,   t        |t              st        |      }t        j                  |j                  | j
                        dk(  rt        d      t        d      }t        j                  |j                  | j                  |j                         |S )Nr   Division by zero)rE   r?   rH   rZ   rC   r[   ZeroDivisionError
mpz_fdiv_q)r9   divisorr   s      r%   __floordiv__zIntegerGMP.__floordiv__~  su    ':. )G<<((*-./#$677A	( r$   c                 P   t        |t              st        |      }t        j                  |j                  | j
                        }|dk(  rt        d      |dk  rt        d      t        d      }t        j                  |j                  | j                  |j                         |S Nr   r   Modulus must be positive	rE   r?   rH   rZ   rC   r[   r   rG   mpz_mod)r9   r   compr   s       r%   __mod__zIntegerGMP.__mod__  s    ':. )G||GNN ,,.19#$677!8788AV]][[^^	% r$   Nc           	         |_|dk  rt        d      |dkD  rt        d      t        j                  | j                  | j                  t	        t        |                   | S t        |t              st        |      }|st        d      |j                         rt        d      t        |      rb|dk  rt        d      |dk  rAt        j                  | j                  | j                  t	        |      |j                         | S t        |      }n|j                         rt        d      t        j                  | j                  | j                  |j                  |j                         | S )Nr   zExponent must not be negative   zExponent is too bigr   r      )rG   rH   
mpz_pow_uirC   r   r^   rE   r?   r   r   r   mpz_powm_uimpz_powm)r9   exponentmoduluss      r%   inplace_powzIntegerGMP.inplace_pow  s<   ?!| !@AA #~ !677OODKK KK#CM28 - gz2$W-'(:;;""$ !;<<X&a<$%DEEe#$$T[[%)[[%,X%6%,^^5  K%h/%%' !@AAMM$++++"//!..* r$   c                 <    t        |       }|j                  ||      S r'   )r?   r   )r9   r   r   r   s       r%   __pow__zIntegerGMP.__pow__  s    D!!!(G44r$   c                 p    t        d      }t        j                  |j                  | j                         |S r   )r?   rH   mpz_absrC   )r9   r   s     r%   __abs__zIntegerGMP.__abs__  s&    AV]]DKK0r$   c                    |G| dk  rt        d      t        d      }t        j                  |j                  | j                         |S |dk  rt        d      t        |      }t        | j                  t        |       |z  |            }|S )zGReturn the largest Integer that does not
        exceed the square rootr   zSquare root of negative valuer   )rG   r?   rH   mpz_sqrtrC   r^   _tonelli_shanksr9   r   r   s      r%   sqrtzIntegerGMP.sqrt  s     ?ax !@AA]FMM&--++'  !| !;<<'lG 4 4SY5H' RSFr$   c                    t        |      rd|cxk  rdk  r9n n6t        j                  | j                  | j                  t	        |             | S d|cxk  rdk  r:n n7t        j                  | j                  | j                  t	        |              | S t        |      }t        j                  | j                  | j                  |j                         | S Nr   r    )r   rH   
mpz_add_uirC   r   
mpz_sub_uir?   rN   r   s     r%   __iadd__zIntegerGMP.__iadd__      D 5  $ '/  q  $ '0 d#DT[[[[[[	" r$   c                    t        |      rd|cxk  rdk  r9n n6t        j                  | j                  | j                  t	        |             | S d|cxk  rdk  r:n n7t        j                  | j                  | j                  t	        |              | S t        |      }t        j                  | j                  | j                  |j                         | S r   )r   rH   r   rC   r   r   r?   r   r   s     r%   __isub__zIntegerGMP.__isub__  r   r$   c                    t        |      rd|cxk  rdk  r9n n6t        j                  | j                  | j                  t	        |             | S d|cxk  rdk  rdn nat        j                  | j                  | j                  t	        |              t        j                  | j                  | j                         | S t        |      }t        j                  | j                  | j                  |j                         | S r   )r   rH   
mpz_mul_uirC   r   rP   r?   r   r   s     r%   __imul__zIntegerGMP.__imul__  s    D 5  $ '/  q  $ '0 T[[$++6d#DT[[[[[[	" r$   c                 :   t        |t              st        |      }t        j                  |j                  |j
                        }|dk(  rt        d      |dk  rt        d      t        j                  | j                  | j                  |j                         | S r   r   )r9   r   r   s      r%   __imod__zIntegerGMP.__imod__  s    ':. )G||GNN#//119#$677!8788T[[[[^^	% r$   c                     t        d      }t        |t               st        |      }t        j                  |j                  | j                  |j                         |S r   )r?   rE   rH   mpz_andrC   r   s      r%   __and__zIntegerGMP.__and__!  F    A$
+d#DV]][[[[	" r$   c                     t        d      }t        |t               st        |      }t        j                  |j                  | j                  |j                         |S r   )r?   rE   rH   mpz_iorrC   r   s      r%   __or__zIntegerGMP.__or__*  r   r$   c           	          t        d      }|dk  rt        d      |dkD  r| dk  ryyt        j                  |j                  | j                  t        t        |                   |S Nr   znegative shift countr   )r?   rG   rH   r]   rC   r   r^   r9   posr   s      r%   
__rshift__zIntegerGMP.__rshift__3  s`    A7344;axV]]![[$SX.	0 r$   c           	          |dk  rt        d      |dkD  r| dk  ryyt        j                  | j                  | j                  t	        t        |                   | S r   )rG   rH   r]   rC   r   r^   r9   r   s     r%   __irshift__zIntegerGMP.__irshift__A  sW    7344;axT[[![[$SX.	0 r$   c           	          t        d      }d|cxk  rdk  st        d       t        d      t        j                  |j                  | j                  t        t        |                   |S Nr   r   zIncorrect shift count)r?   rG   rH   rM   rC   r   r^   r   s      r%   
__lshift__zIntegerGMP.__lshift__N  sc    AC%455  455&--++!#c(+	- r$   c           	          d|cxk  rdk  st        d       t        d      t        j                  | j                  | j                  t	        t        |                   | S r   )rG   rH   rM   rC   r   r^   r   s     r%   __ilshift__zIntegerGMP.__ilshift__W  sZ    C%455  455$++++!#c(+	- r$   c           
          | dk  rt        d      |dk  rt        d      |dkD  ryt        t        j                  | j                  t        t        |                        S )zPReturn True if the n-th bit is set to 1.
        Bit 0 is the least significant.r   z)no bit representation for negative valuesznegative bit countr   )rG   boolrH   
mpz_tstbitrC   r   r^   )r9   ns     r%   get_bitzIntegerGMP.get_bit_  s]     !8HIIq5122u9DOODKK$+CFO5 6 	6r$   c                 H    t         j                  | j                  d      dk(  S )Nr   r   rH   r   rC   rd   s    r%   is_oddzIntegerGMP.is_oddm      t{{A.!33r$   c                 H    t         j                  | j                  d      dk(  S r   r   rd   s    r%   is_evenzIntegerGMP.is_evenp  r   r$   c                 b    | dk  rt        d      t        j                  | j                  d      S )z=Return the minimum number of bits that can encode the number.r   ro   rp   )rG   rH   rw   rC   rd   s    r%   size_in_bitszIntegerGMP.size_in_bitss  s.     !8MNN""4;;22r$   c                 4    | j                         dz
  dz  dz   S )z>Return the minimum number of bytes that can encode the number.r   rr   )r   rd   s    r%   size_in_byteszIntegerGMP.size_in_bytesz  s     !!#a'A-11r$   c                 F    t         j                  | j                        dk7  S r   )rH   mpz_perfect_square_prC   rd   s    r%   is_perfect_squarezIntegerGMP.is_perfect_square~  s    ((5::r$   c                     t        |      rNd|cxk  rdk  r8n n5t        j                  | j                  t	        |            rt        d      yt        |      }t        j                  | j                  |j                        rt        d      y)z3Raise an exception if the small prime is a divisor.r   r   zThe value is compositeN)r   rH   mpz_divisible_ui_prC   r   rG   r?   mpz_divisible_p)r9   small_primes     r%   fail_if_divisible_byzIntegerGMP.fail_if_divisible_by  s}     %;&&**4;;+2;+?A$%=>>$[1K + 2 245664r$   c                    t        |t              st        |      }t        |      rd|cxk  rdk  r9n n6t        j	                  | j
                  |j
                  t        |             | S d|cxk  rdk  r:n n7t        j                  | j
                  |j
                  t        |              | S t        |      }t        j                  | j
                  |j
                  |j
                         | S )z/Increment the number by the product of a and b.r   r   r   )	rE   r?   r   rH   mpz_addmul_uirC   r   mpz_submul_ui
mpz_addmul)r9   abs      r%   multiply_accumulatezIntegerGMP.multiply_accumulate  s     !Z(1A1}u}""4;;#$88#*1:/ ~A~""4;;#$88#*A2;0 1A	" r$   c                     t        |t              st        |      }t        j                  | j                  |j                         | S )z'Set the Integer to have the given value)rE   r?   rH   mpz_setrC   )r9   sources     r%   setzIntegerGMP.set  s6     &*-'FT[[]]	$r$   c                 T   t        |t              st        |      }t        j                  |j                  | j
                        }|dk(  rt        d      |dk  rt        d      t        j                  | j                  | j                  |j                        }|st        d      | S )zCompute the inverse of this number in the ring of
        modulo integers.

        Raise an exception if no inverse exists.
        r   Modulus cannot be zeror   z No inverse value can be computed)	rE   r?   rH   rZ   rC   r[   r   rG   
mpz_invert)r9   r   r   r   s       r%   inplace_inversezIntegerGMP.inplace_inverse  s     ':. )G||GNN ,,.19#$<==!8788!%!(1 ?@@r$   c                 >    t        |       }|j                  |       |S r'   )r?   r  r   s      r%   inversezIntegerGMP.inverse  s    D!w'r$   c                 :   t        d      }t        |      rOd|cxk  rdk  r9n n6t        j                  |j                  | j                  t        |             |S t        |      }t        j                  |j                  | j                  |j                         |S )zUCompute the greatest common denominator between this
        number and another term.r   i  )r?   r   rH   
mpz_gcd_uirC   r   mpz_gcdr   s      r%   gcdzIntegerGMP.gcd  st     A4% $ '/ d#DV]]DKK=r$   c                     t        d      }t        |t               st        |      }t        j                  |j                  | j                  |j                         |S )zQCompute the least common multiplier between this
        number and another term.r   )r?   rE   rH   mpz_lcmrC   r   s      r%   lcmzIntegerGMP.lcm  sB     A$
+d#DV]]DKK=r$   c                    t        | t              st        |       } t        |t              st        |      }|dk  s|j                         rt        d      t        j                  | j                  |j                        S )zCompute the Jacobi symbolr   z,n must be positive odd for the Jacobi symbol)rE   r?   r   rG   rH   
mpz_jacobirC   )r  r   s     r%   jacobi_symbolzIntegerGMP.jacobi_symbol  s^     !Z(1A!Z(1A6QYY[KLLqxx22r$   c                 n   t        | t              st        |       } t        |t              st        |      }t        |t              st        |      }|dk  rt        d      |dk(  rt        d      |dz  dk(  rt        d      t	        |j                               }| |z  |z  j                  |      }|S )Nr   r   r  r   zOdd modulus is required)rE   r?   rG   r   r   r   )term1term2r   numbers_lenr   s        r%   _mult_modulo_byteszIntegerGMP._mult_modulo_bytes  s    %,u%E%,u%E':. )GQ;788a<#$<==aKA677'**,-5=G+55kBr$   c                     	 | j                   +| j                  rt        j                  | j                          d | _         y # t        $ r Y y w xY wr'   )rC   rD   rH   rO   r5   rd   s    r%   __del__zIntegerGMP.__del__  sC    	{{&$$NN4;;/DK 		s   >A 	AA)r   rt   )rt   r'   )?r   r    r!   __doc__r(   r[   rH   mpz_init_set_uir   rX   ra   re   rh   rk   rm   r   staticmethodr   r   r   r   r   r   r   r   r   __bool__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  r"  r'  r)  r#   r$   r%   r?   r?      s[   -)Kgaj1'&V&)0d  @.
?
?
>?>?@H?



%N5
$$$&64432;7,0
 	3 	3  (	r$   r?   )"sysCrypto.Util.py3compatr   r   Crypto.Util._raw_apir   r   r   r   r	   r
   r   r   r   _IntegerBaser   gmp_defsplatformImportErrorr7   implementationhasattrr   r   r   r   r   r   r(   r)   objectr-   rH   r?   r#   r$   r%   <module>r8     s   >  8B B B
 &5n <<7
0
11uh"73
3 !
-
..
 %H$88)y )

 )
6  v|	 |	r$   