
    Q?hE                        S SK r S SKr S SKJr   \   " S S5      r " S S\5      r " S S	\5      r	 " S
 S\5      r
 " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S5      r " S S5      r " S S5      r " S S5      r " S  S!5      r\" S"5       V s/ s H  o PM     sn r\" S"5       V s/ s H  o PM     sn r\" S#5       H  rS$\-  \\'   M     \" S#S"5       H)  r\\S%-
     \\S&-
     -  \\S'-
     -  \\S#-
     -  \\'   M+     \" S(5       H  r\\\\   '   M      " S) S*5      r " S+ S,5      r " S- S.5      rg!   S SKJr   GN`= f! \ a    \r GNkf = fs  sn f s  sn f )/    N)zip_longest)izip_longestc                   Z    \ rS rSrSrSrSrS rS r\	S 5       r
S rS rS	 rS
 rS rSrg)QR%   Nr   c                 j    U R                   (       a  U R                  U5      (       d  [        eXl        g N)valid
ValueErrordataselfr   s     V/var/www/html/env/lib/python3.13/site-packages/reportlab/graphics/barcode/qrencoder.py__init__QR.__init__*   s"    ::djj..	    c                 ,    [        U R                  5      $ r	   lenr   r   s    r   __len__
QR.__len__/       499~r   c                     U R                   c  g[        [        U 5      [        U R                   5      5      u  pU[        U R                   5      -  [        U R                   S U 5      -   $ Nr   )bitsdivmodr   sum)r   qrs      r   	bitlengthQR.bitlength2   sP    99c$iTYY03tyy>!C		"1$666r   c                     SUs=:  a  S:  a  O  OU R                   S   $ US:  a  U R                   S   $ US:  a  U R                   S   $ [        SU-   5      e)Nr   
         )      zUnknown version: )
lengthbitsr   )r   vers     r   getLengthBitsQR.getLengthBits9   sY    s<R<??1%%2X??1%%2X??1%%,s233r   c                 ,    [        U R                  5      $ r	   r   r   s    r   	getLengthQR.getLengthB   r   r   c                 ,    [        U R                  5      $ r	   )reprr   r   s    r   __repr__QR.__repr__E   s    DIIr   c                     UR                  U R                  S5        U R                  U5      nU(       a&  UR                  [        U R                  5      U5        g g )N   putmoder+   r   r   r   bufferversionlenbitss       r   write_headerQR.write_headerH   sB    

499a $$W-JJs499~w0 r   c                    U R                  X5        [        [        U R                  5      /U R                  -  6  H  nSnSn[        U R                  5       HR  nX6   c  M
  U[        U R                  5      -  nXPR                  R                  X6   5      -  nX@R                  U   -  nMT     UR                  XT5        M     g r   )r=   r   iterr   groupranger   charsindexr   r7   )r   r:   r;   gr   nis          r   writeQR.writeN   s    &*tDII/$**<=ADA4::&4#TZZ(A))!$//AIIaL(D	 '
 JJq >r   r   )__name__
__module____qualname____firstlineno__r
   r   rA   r   r   propertyr!   r+   r.   r2   r=   rH   __static_attributes__ r   r   r   r   %   sH    EDE
 7 741
 r   r   c                   `    \ rS rSr\R
                  " S5      R                  rSrSr	Sr
SrSrSrg	)
QRNumberZ   z[0-9]*$
0123456789)r5      rV   rV   r&   )r$         rQ   NrK   rL   rM   rN   recompilematchr
   rC   r   rA   r8   r)   rP   rQ   r   r   rS   rS   Z   s/    JJz"((EEDEDJr   rS   c                   `    \ rS rSr\R
                  " S5      R                  rSrSr	Sr
SrSrSrg)	
QRAlphaNumb   z[-0-9A-Z $%*+./:]*$z-0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ $%*+-./:)      r(   )	         rQ   NrY   rQ   r   r   r^   r^   b   s0    JJ-.44E<EDEDJr   r^   c                   0    \ rS rSrSrSrSrSrS rS r	Sr
g	)

QR8bitBytej   )   r&   r5   )rh      ri   c                 h    [        U[        5      (       a  UR                  S5      U l        g Xl        g )Nzutf-8)
isinstanceunicodeencoder   r   s     r   r   QR8bitByte.__init__p   s$    dG$$G,DIIr   c                     U R                  X5        U R                   H5  n[        U[        5      (       a  [	        U5      nUR                  US5        M7     g )Nrh   )r=   r   rk   strordr7   )r   r:   r;   cs       r   rH   QR8bitByte.writev   sB    &*A!S!!FJJq! r   rJ   N)rK   rL   rM   rN   r   rA   r8   r)   r   rH   rP   rQ   r   r   rf   rf   j   s     DEDJr   rf   c                   6    \ rS rSrSrSrSrSrS rS r	S r
S	rg
)QRKanji}   rd   r&   rh   rh   r$   rW   c                 d     U R                  U5      U l        g ! [         a    [        S5      ef = f)NzNot valid kanji)unicode_to_qrkanjir   UnicodeEncodeErrorr   r   s     r   r   QRKanji.__init__   4    	0//5DI! 	0.//	0    /c           
      (   / n[        U5       H  u  p4 UR                  S5      n [        [        U5      u  pEUS-  U-  nSUs=::  a  S::  a  O  OUS-  nUS	-  S-	  S
-  US-  -   nO8SUs=::  a  S::  a  O  OUS-  nUS	-  S-	  S
-  US-  -   nO[        SXUS-   S5      eUR                  U5        M     U$ ! [         a    Uu  pE Nf = f! [
         a#  n[        SXUS-   UR                  S   5      eS nAf[         a    [        SXUS-   S5      ef = f)Nz	shift-jisqrkanjir&   r5   illegal multibyte sequencerh   i@  i           i@  i  i@  		enumeraterm   maprq   	TypeErrorr{   argsr   appendr   r   codesrG   rr   des          r   rz   QRKanji.unicode_to_qrkanji   sM   T?CAGHH[)c1+CA Q
A#V#V6za'4/AH=1&&V6za'4/AH=(DQqS)EG GLLO/ #0 ' ! CAa & M(DQqS!&&)LL G(DQqS)EG GG4   C
B66CC
CC


DC22Dc                 p    U R                  X5        U R                   H  nUR                  US5        M     g Nrd   r=   r   r7   r   r:   r;   r   s       r   rH   QRKanji.write   ,    &*AJJq" r   rJ   N)rK   rL   rM   rN   r   rA   r8   r)   r   rz   rH   rP   rQ   r   r   ru   ru   }   s%    DEDJ08r   ru   c                   <    \ rS rSrSrSrSrSrS rS r	S r
S	 rS
rg)QRHanzi   rw   r&   rd   rx   c                 d     U R                  U5      U l        g ! [         a    [        S5      ef = f)NzNot valid hanzi)unicode_to_qrhanzir   r{   r   r   s     r   r   QRHanzi.__init__   r}   r~   c           
      (   / n[        U5       H  u  p4 UR                  S5      n [        [        U5      u  pEUS-  U-  nSUs=::  a  S::  a  O  OUS-  nUS	-  S-	  S
-  US-  -   nO8SUs=::  a  S::  a  O  OUS-  nUS	-  S-	  S
-  US-  -   nO[        SXUS-   S5      eUR                  U5        M     U$ ! [         a    Uu  pE Nf = f! [
         a#  n[        SXUS-   UR                  S   5      eS nAf[         a    [        SXUS-   S5      ef = f)Ngb2312qrhanzir&   r5   r   rh   i  i  r   `   r   i  i  i  r   r   s          r   r   QRHanzi.unicode_to_qrhanzi   sM   T?CAGHHX&c1+CA Q
A#V#V6za'4/AH=1&&V6za'4/AH=(DQqS)EG GLLO/ #0 ' ! CAa & M(DQqS!&&)LL G(DQqS)EG GGr   c                     UR                  U R                  S5        UR                  SS5        U R                  U5      nU(       a&  UR                  [        U R                  5      U5        g g )Nr5   r&   r6   r9   s       r   r=   QRHanzi.write_header   sP    

499a 

1a$$W-JJs499~w0 r   c                 p    U R                  X5        U R                   H  nUR                  US5        M     g r   r   r   s       r   rH   QRHanzi.write   r   r   rJ   N)rK   rL   rM   rN   r   rA   r8   r)   r   r   r=   rH   rP   rQ   r   r   r   r      s*    DEDJ081r   r   c                   (    \ rS rSrSrSrS rS rSrg)QRECI      r   r   r   c                 D    SUs=:  a  S:  d  O  [        S5      eXl        g )Nr   i?B zECI out of range)r   r   r   s     r   r   QRECI.__init__   s     4 & /00	r   c                 @   U R                  X5        U R                  S::  a  UR                  U R                  S5        g U R                  S::  a   UR                  U R                  S-  S5        g U R                  S::  a   UR                  U R                  S-  S5        g g )	N   rh   i?  i   ri   i i      r   r   r:   r;   s      r   rH   QRECI.write   sy    &*99JJtyy!$YY& JJtyy6)2.YY("JJtyy8+R0 #r   rJ   N	rK   rL   rM   rN   r8   r)   r   rH   rP   rQ   r   r   r   r      s    DJ1r   r   c                   (    \ rS rSrSrSrS rS rSrg)QRStructAppend   rV   r   c                     SUs=:  a  S::  d  O  [        S5      eSUs=:  a  S::  d  O  [        S5      eXl        X l        X0l        g )Nr   ri   zpart out of range [1,16]ztotal out of range [1,16])r   parttotalparity)r   r   r   r   s       r   r   QRStructAppend.__init__   s?    4~2~7885B899	
r   c                     U R                  X5        UR                  U R                  S5        UR                  U R                  S5        UR                  U R                  S5        g )Nr5   rh   )r=   r7   r   r   r   r   s      r   rH   QRStructAppend.write   sF    &*

499a 

4::q!

4;;"r   )r   r   r   Nr   rQ   r   r   r   r      s    DJ#r   r   c                   (    \ rS rSrSrSrS rS rSrg)QRFNC1Firsti  ra   r   c                     g r	   rQ   r   s    r   r   QRFNC1First.__init__
  s    r   c                 &    U R                  X5        g r	   )r=   r   s      r   rH   QRFNC1First.write  s    &*r   rQ   Nr   rQ   r   r   r   r     s    DJ+r   r   c                   Z    \ rS rSr\R
                  " S5      R                  rSrSr	S r
Srg)QRFNC1Secondi  z^([A-Za-z]|[0-9][0-9])$rb   r   c                     U R                  X5        U R                  n[        U5      S:X  a  [        U5      S-   nO[	        U5      nUR                  US5        g )Nr&   d   rh   )r=   r   r   rq   intr7   r   s       r   rH   QRFNC1Second.write  sH    &*IIq6Q;AAAA

1ar   rQ   N)rK   rL   rM   rN   rZ   r[   r\   r
   r8   r)   rH   rP   rQ   r   r   r   r     s&    JJ0177EDJr   r   c                       \ rS rSrS rS rS rS rS rS r	S r
/ S	Q/ S
Q/ SQ/ SQ/ SQ/ S
Q/ S	Q/rS rS rS r/ SQ/ SQ/ SQ/ SQ/ SQ/rS rS rS rS rSrS rS rSrS rS rSrSr\S 5       r\S 5       rSrg) QRCodei  c                 T    Xl         X l        S U l        SU l        S U l        / U l        g r   )r;   errorCorrectLevelmodulesmoduleCount	dataCachedataList)r   r;   r   s      r   r   QRCode.__init__   s*    !2r   c                     [        U[        5      (       a  UnO,[        [        [        [
        4 H  n U" U5      n  O   [        eU R                  R                  U5        S U l	        g ! [         a     MF  f = fr	   )
rk   r   rS   r^   ru   rf   r   r   r   r   )r   r   newDataconvs       r   addDataQRCode.addData(  sn    dBG!:w
C"4jG D ! W% " s   A((
A65A6c                 &    U R                   U   U   $ r	   )r   )r   rowcols      r   isDarkQRCode.isDark8  s    ||C %%r   c                     U R                   $ r	   )r   r   s    r   getModuleCountQRCode.getModuleCount;  s    r   c                    [        SS5       Hz  n[        R                  XR                  5      n[	        S U 5       5      nSnU R
                   H)  nUS-  nXER                  U5      -  nXER                  -  nM+     XCS-  ::  d  My    U$    W$ )Nr&   (   c              3   8   #    U  H  oR                   v   M     g 7fr	   )	dataCount).0blocks     r   	<genexpr>+QRCode.calculate_version.<locals>.<genexpr>B  s      GhUh   r   r5   rh   )rB   	QRRSBlockgetRSBlocksr   r   r   r+   r!   )r   r;   rsBlockstotalDataCountlengthr   s         r   calculate_versionQRCode.calculate_version>  s    Q|G ,,W6L6LMH  Gh GGNF!,,W55..( & !++ $ r   c                     U R                   c  U R                  5       U l         U R                  SU R                  5       5        g )NF)r;   r   makeImplgetBestMaskPatternr   s    r   makeQRCode.makeL  s3    <<113DLeT4467r   c                    U R                   S-  S-   U l        [        U R                  5       Vs/ s H  nS/U R                  -  PM     snU l        U R	                  SS5        U R	                  U R                  S-
  S5        U R	                  SU R                  S-
  5        U R                  5         U R                  5         U R                  X5        U R                   S:  a  U R                  U5        U R                  S :X  a:  [        R                  U R                   U R                  U R                  5      U l	        U R                  U R                  U5        g s  snf )Nr5      Fr   r   )r;   r   rB   r   setupPositionProbePatternsetupPositionAdjustPatternsetupTimingPatternsetupTypeInfosetupTypeNumberr   r   
createDatar   r   mapData)r   testmaskPatternxs       r   r   QRCode.makeImplQ  s"   <<!+b0"'(8(8"9<"9Q  4#3#33"9<&&q!,&&t'7'7!';Q?&&q$*:*:Q*>?'')!4-LLA  &NNd"#..t||/3/E/E/3}}>DN 	T^^[1<s   E)TTTTTTT)TFFFFFT)TFTTTFTc                    US:X  aS  S/S-  U R                   US-      X"S-   & US:X  a  SU R                   US-      US-   '   O4SU R                   US-      US-
  '   OS/S-  U R                   US-
     X"S-   & [        U R                  5       HP  u  p4X@R                   X-      X"S-   & US:X  a  SU R                   X-      US-   '   M9  SU R                   X-      US-
  '   MR     g )Nr   Fr   r&   rh   )r   r   _positionProbePattern)r   r   r   r    r   s        r   r    QRCode.setupPositionProbePatternm  s    !8.3Wq[DLLQE*ax-2SU#CE*-2SU#CE* /4Wq[DLLQE* !;!;<GA-1LLE*ax-2SU#CE*-2SU#CE* =r   c                     SnSn[        S5       H;  nU R                  SU5        [        R                  U 5      nUS:X  d  X:  d  M7  UnUnM=     U$ )Nr   rh   T)rB   r   QRUtilgetLostPoint)r   minLostPointpatternrG   	lostPoints        r   r   QRCode.getBestMaskPattern  sU    qAMM$"++D1IQ,2(  r   c                 "   [        SU R                  S-
  5       H  nUS-  S:H  U R                  U   S'   M     [        R                  " [        R
                  " SS/5      U R                  S-
  5      U R                  S   SU R                  S-
  & g )Nrh   r(   r   r`   TFri   )rB   r   r   	itertoolsislicecycle)r   r    s     r   r   QRCode.setupTimingPattern  s    q$**Q./A"#a%1*DLLOA 02;2B2BOOT5M*D,<,<r,A3CQ$**Q./r   )TTTTT)TFFFT)TFTFTc                 R   [         R                  U R                  5      nU R                  S-
  n[        R
                  " X5       H_  u  p4US::  a  US::  d  X2:  a  M  XB:  a  US::  a  M%  [        U R                  5       H!  u  pVX`R                  X5-   S-
     US-
  US-   & M#     Ma     g )Nrh   r(   rV   )	r  getPatternPositionr;   r   r  productr   _positionAdjustPatternr   )r   posmaxposr   r   r    r   s          r   r   !QRCode.setupPositionAdjustPattern  s    ''5!!A%!))#3HCaxSAX3!8$T%@%@A9=SWq[)#a%A6 B 4r   c                    [         R                  U R                  5      n[        S5       HE  nU(       + =(       a
    X#-	  S-  S:H  nX@R                  US-     US-  U R
                  -   S-
  S-
  '   MG     [        S5       HE  nU(       + =(       a
    X#-	  S-  S:H  nX@R                  US-  U R
                  -   S-
  S-
     US-  '   MG     g )N   r&   rV   rh   )r  getBCHTypeNumberr;   rB   r   r   )r   r   r   rG   mods        r   r   QRCode.setupTypeNumber  s    &&t||4rA8749/a 7CEHLLa Q)9)9!9A!=!AB  rA8749/a 7CEHLLQ!1!11A59:16B r   c                    U R                   S-  U-  n[        R                  U5      n[        S5       Hq  nU(       + =(       a
    XE-	  S-  S:H  nUS:  a  X`R                  U   S'   M4  US:  a  X`R                  US-      S'   MP  X`R                  U R
                  S-
  U-      S'   Ms     [        S5       H}  nU(       + =(       a
    XE-	  S-  S:H  nUS:  a#  X`R                  S   U R
                  U-
  S-
  '   MD  US:  a  X`R                  S   SU-
  S-
  S-   '   Mf  X`R                  S   SU-
  S-
  '   M     U(       + U R                  U R
                  S-
     S'   g )NrV      r&   r`   rh   rb   )r   r  getBCHTypeInforB   r   r   )r   r   r   r   r   rG   r  s          r   r   QRCode.setupTypeInfo  sK   &&!+{:$$T*rA8749/a 7CA%(Q"a%),QU#A&=@T--2Q67:  rA8749/a 7CA<?Q 0 01 4q 89a%25QQ
Q/.1QQ
+  6:T%%)*1-r   c           
   #     #    [         R                  " [        U R                  S-
  SS5      [        SSS5      5      n[	        [        SU R                  S-
  5      5      [	        [         R                  " [        S5      [        SU R                  5      5      5      [	        [        SU R                  5      5      4n[        S	 U 5       5      n[        R                  U R                  5      n[        [         R                  R                  S
 U 5       5      5      nU R                  S-
  nU H  nX2p2US::  a  SnOX`R                  S-
  :  a  SnOSnX'    H  n[        S5       H~  n	Xi-
  n	U R                  S:  a4  US:  a  XR                  S-
  :  a  M1  US:  a  XR                  S-
  :  a  MK  X;   a)  X;   a$  US:  a  U	S:  d  X:  d  U	S:  a  US:  d  X:  d  My  X4v   M     M     M     g 7f)Nr&   r`   ra   r   rb   rh   r   c              3   J   #    U  H  n[        [        U5      5      v   M     g 7fr	   )listreversed)r   r    s     r   r   *QRCode._dataPosIterator.<locals>.<genexpr>  s     7$QtHQK(($s   !#c              3   D   #    U  H  oS -
  US-
  XS-   US -   4v   M     g7f)r(   r&   NrQ   )r   ps     r   r   r%    s*      13-1qS!A#qA#qs#Ts    rc   r(   )r  chainrB   r   r#  tupler  r  r;   setfrom_iterable)
r   colsrowsrrowspposr  r   rowidxr   rr   s
             r   _dataPosIteratorQRCode._dataPosIterator  s    uT%5%5%91bA$Q20U1d..234Y__U1XuQ8H8H/IJKU1d../02 7$77((69??00 13-113 3 4!!B&C%ax!((1,,qf&|qAA||q(7q,<,<r,A'A$ 1W0@0@20E)E${qy #ba"f
FbCL$(N " $ s   G+G-Nc                 x    U R                   (       d  [        U R                  5       5      U l         U R                   $ r	   )_dataPosListr#  r1  r   s    r   dataPosIteratorQRCode.dataPosIterator  s-       $T%:%:%< =D   r   c              #   N   #    U H  nS H  n[        X#-  5      v   M     M     g 7f)N)   @       ri   rh   r5   r(   r&   )bool)r   r   bytebits       r   _dataBitIteratorQRCode._dataBitIterator  s(     D04:&&0 s   #%c                     U R                   (       d  [        U R                  U5      5      U l         [        U R                   5      $ r	   )_dataBitListr#  r>  r@   r   s     r   dataBitIteratorQRCode.dataBitIterator  s4       $T%:%:4%@ ADD%%&&r   c                     U R                  U5      n[        R                  U5      n[        U R	                  5       USS9 H"  u  u  pVnXt" Xe5      -  U R
                  U   U'   M$     g )NF	fillvalue)rB  r  getMaskr   r5  r   )r   r   r   r   maskr   r   darks           r   r   QRCode.mapData  sb    ##D)~~k* +D,@,@,BD6;!=JS%)DN%:DLLc"!=r      r   c                     [         R                  X5      n[        5       nU H  nUR                  X@5        M     SnU H  nXgR                  -  nM     UR                  5       US-  :  a!  [        SUR                  5       US-  4-  5      eUR                  5       S-   US-  ::  a  UR                  SS5        UR                  5       S-  S:w  a*  UR                  S5        UR                  5       S-  S:w  a  M*   UR                  5       US-  :  a  OZUR                  [        R                  S5        UR                  5       US-  :  a  O"UR                  [        R                  S5        Mr  [        R                  XC5      $ )Nr   rh   zcode length overflow. (%d > %d)r5   F)r   r   QRBitBufferrH   r   getLengthInBits	Exceptionr7   putBitr   PAD0PAD1createBytes)r;   r   r   r   r:   r   r   r   s           r   r   QRCode.createData  sh   ((DDJJv'  Eoo-N ""$~'99=#335~7IJK L L ""$q(NQ,>>JJq!%%'!+q0MM%  %%'!+q0 &&(NQ,>>JJv{{A&&&(NQ,>>JJv{{A&  !!&33r   c           	         SnSnSnSn/ n/ nU GH  nXXR                   -  nUR                  n	UR                   U	-
  n
[        X95      n[        XJ5      nUR                  U R                  X"U	-    5        X)-  n[
        R                  U
5      n[        US   UR                  5       S-
  5      nUR                  U5      nUR                  5       S-
  nUR                  5       nUR                  [        X-
  U5       Vs/ s H  nUS:  a  UR                  U5      OSPM     sn5        GM     [        R                  " [        U6 [        U6 5       VVs/ s H  nU  H
  nUc  M  UPM     M     nnnU$ s  snf s  snnf )Nr   r&   )
totalCountr   maxr   r:   r  getErrorCorrectPolynomialQRPolynomialr.   r  rB   getr  r(  r   )r:   r   offset
maxDcCount
maxEcCounttotalCodeCountdcdataecdatar   dcCountecCountrsPolyrawPolymodPolyrLenmLenrG   ddr   r   s                       r   rS  QRCode.createBytes   s   

E...NooG&&0GZ1JZ1JMM&--g~>?F55g>F"6":v/?/?/AA/EFGkk&)G##%)D$$&DMM#(d#;>#;a 01AvW[[^1<#;> ?   '__V$k6&:< / <rQ   < / >/s   :#E/
E4 
E4)rA  r4  r   r   r   r   r   r;   ) rK   rL   rM   rN   r   r   r   r   r   r   r   r  r   r   r   r  r   r   r   r1  r4  r5  r>  rA  rB  r   rQ  rR  staticmethodr   rS  rP   rQ   r   r   r   r     s     & 8
2& 	9888888
3$	C 	+****
	>J;0#B L!
' L'
; DD4 48  r   r   c                   $    \ rS rSrSrSrSrSrSrg)QRErrorCorrectLeveli>  r&   r   rV   r(   rQ   N)	rK   rL   rM   rN   LMQHrP   rQ   r   r   rm  rm  >  s    	A	A	A	Ar   rm  c                   4    \ rS rSrSrSrSrSrSrSr	Sr
S	rS
rg)QRMaskPatterniD  r   r&   r(   rV   r5   ra   r`   r   rQ   N)rK   rL   rM   rN   
PATTERN000
PATTERN001
PATTERN010
PATTERN011
PATTERN100
PATTERN101
PATTERN110
PATTERN111rP   rQ   r   r   rs  rs  D  s*    JJJJJJJJr   rs  c            	       @   \ rS rSr/ / PSS/PSS/PSS/PSS/PSS/P/ SQP/ S	QP/ S
QP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ S QP/ S!QP/ S"QP/ S#QP/ S$QP/ S%QP/ S&QP/ S'QP/ S(QP/ S)QPrS*rS+rS,r\S- 5       r	\S. 5       r
\S/ 5       r\S0 5       rS1 S2 S3 S4 S5 S6 S7 S8 S9.r\S: 5       r\S; 5       r\S< 5       r\S= 5       r\/ S>Q4S? j5       r\S@ 5       r\SA 5       rSBrgC)Dr  iN  r`   r           "   )r`   r}  &   )r`   r   *   )r`   r~  .   )r`      2   )r`   r  6   )r`   r:  :   )r`   r  >   )r`   r~  r  B   )r`   r~  0   F   )r`   r~  r  J   )r`   r  r  N   )r`   r  8   R   )r`   r  r  V   )r`   r  r  rT   )r`   r  r  H   ^   )r`   r~  r  r  r_   )r`   r  r  r  f   )r`   r  r  P   rg   )r`   r:  r  T   n   )r`   r  r  r  r   )r`   r  r  rT   v   )r`   r~  r  r  r_   z   )r`   r  r  r  r  ~   )r`   r~  4   r  h      )r`   r  r  r  l      )r`   r  <   r  p      )r`   r  r  r  r     )r`   r  r  rT   r     )r`   r  r  r  r  r     )r`   r   r  L   r  r8     )r`   r  r  r  rg         )r`   r:  r  r  r        )r`   r~  r  r  r  r     )r`   r  r  r  r  r  r   i7  i%  iT  c                    U S-  n[         R                  U5      [         R                  [         R                  5      -
  S:  a  U[         R                  [         R                  U5      [         R                  [         R                  5      -
  -  -  n[         R                  U5      [         R                  [         R                  5      -
  S:  a  M  U S-  U-  [         R                  -  $ )Nr$   r   )r  getBCHDigitG15G15_MASKr   r   s     r   r  QRUtil.getBCHTypeInfo  s    BJ!!!$v'9'9&**'EEJ&**!3!3A!6!'!3!3FJJ!?"@ B DA !!!$v'9'9&**'EEJ "*!V__44r   c                    U S-  n[         R                  U5      [         R                  [         R                  5      -
  S:  a  U[         R                  [         R                  U5      [         R                  [         R                  5      -
  -  -  n[         R                  U5      [         R                  [         R                  5      -
  S:  a  M  U S-  U-  $ )NrW   r   )r  r  G18r  s     r   r  QRUtil.getBCHTypeNumber  s    BJ!!!$v'9'9&**'EEJ&**!3!3A!6!'!3!3FJJ!?"@ B DA !!!$v'9'9&**'EEJ 
ar   c                 :    SnU S:w  a  US-  nU S-  n U S:w  a  M  U$ Nr   r&   rQ   )r   digits     r   r  QRUtil.getBCHDigit  s0    qyQJEQJD qy r   c                 .    [         R                  U S-
     $ Nr&   )r  PATTERN_POSITION_TABLE)r;   s    r   r  QRUtil.getPatternPosition  s    ,,Wq[99r   c                     X-   S-  S:H  $ Nr(   r   rQ   rG   js     r   <lambda>QRUtil.<lambda>      {a'r   c                     U S-  S:H  $ r  rQ   r  s     r   r  r        q1uzr   c                     US-  S:H  $ NrV   r   rQ   r  s     r   r  r    r  r   c                     X-   S-  S:H  $ r  rQ   r  s     r   r  r    r  r   c                 $    U S-  US-  -   S-  S:H  $ Nr(   rV   r   rQ   r  s     r   r  r    s    Qa1,1r   c                 &    X-  S-  X-  S-  -   S:H  $ r  rQ   r  s     r   r  r    s    Qw!#q(A-r   c                 ,    X-  S-  X-  S-  -   S-  S:H  $ r  rQ   r  s     r   r  r        !%1{2a71<r   c                 ,    X-  S-  X-   S-  -   S-  S:H  $ )NrV   r(   r   rQ   r  s     r   r  r    r  r   )r   r&   r(   rV   r5   ra   r`   r   c                      U R                   U   $ r	   )r   )clsr   s     r   rG  QRUtil.getMask  s    {++r   c           	          [        S/S5      n[        U 5       H3  nUR                  [        S[        R	                  U5      /S5      5      nM5     U$ )Nr&   r   )rZ  rB   multiplyQRMathgexp)errorCorrectLengtharG   s      r   rY   QRUtil.getErrorCorrectPolynomial  sG    !a )*A

<FKKN(;Q?AA +r   c                    SnS/nS nU H  nU(       a  [        XT5       VVs/ s H	  u  pgXg-  PM     nnn[        XSS9 VVs/ s H  u  pgUS:  d  M  U=(       a    US-
  S-   PM      n	nnU[        U	5      -  n[        XSS9 VVs/ s H  u  pgU(       a  SOUS-   PM     nnnUnM     U[        U Vs/ s H  owS:  d  M
  US-
  S-   PM     sn5      -  nU$ s  snnf s  snnf s  snnf s  snf )Nr   rE  r5   rV   r&   )zipr   r   )
r  r   score	lastCountlastRowr   r  bchangedscoress
             r   maskScoreRule1vertQRUtil.maskScoreRule1vert  s!   C	C,/,=>,=SQ15,=>%gAF%F -0A!V (!-1Q-F  % V$(3G>?)AB)A #$QQ.)A  B G  	Y9Yq&eac!eY9:: ?%B
 :s#   CCCC"2	C(
?C(
c                     SnUS   nUSS   HF  nUS   US   pe[        USS  USS  5       H"  u  pxXxs=:X  a  Us=:X  a  U:X  a  O  OUS-  nXxpeM$     UnMH     U$ )Nr   r&   rV   )r  )	r  r   r  r  r   lastCol0lastCol1col0col1s	            r   maskScoreRule2QRUtil.maskScoreRule2  sz    !*12;C!$Qh!#ab'712;7
787x7QJE%)( 8 G  r   )TFTTTFTFFFFc                     [        U5      nSnU H:  nSn[        U5      U-
  nXg:  d  M  XVXc-    U:X  a
  US-  nXc-  nOUS-  nXg:  a  M   M<     U$ )Nr   r   r&   )r   )r  r   r  
patternlenr  r   r  maxjs           r   maskScoreRule3horQRUtil.maskScoreRule3hor  sj    
 \
CAs8j(D(&'1RKEOAFA (  r   c                 v    [        U5      S-  n[        S U 5       5      nS[        SU-  U-  S-
  5      S-  -  $ )Nr(   c              3   8   #    U  H  n[        U5      v   M     g 7fr	   )r   )r   r   s     r   r   (QRUtil.maskScoreRule4.<locals>.<genexpr>  s     0CHHr   r$   r   r  ra   )r   r   abs)r  r   	cellCountcounts       r   maskScoreRule4QRUtil.maskScoreRule4  sB    L!O	000Su	1B671<==r   c                 ~   SnX R                  UR                  5      -  nX R                  [        UR                  6 5      -  nX R                  UR                  5      -  nX R	                  UR                  5      -  nX R	                  [        UR                  6 5      -  nX R                  UR                  5      -  nU$ r   )r  r   r  r  r  r  )r  qrCoder	  s      r   r  QRUtil.getLostPoint  s    	++FNN;;	++C,@AA	''77	**6>>::	**3+?@@	''77	r   rQ   N)rK   rL   rM   rN   r  r  r  r  rk  r  r  r  r  r   classmethodrG  rY  r  r  r  r  r  rP   rQ   r   r   r  r  N  s   )
)	
B) 
B) 
B	)
 
B) 
B) 	) 	) 	) 	) 	) 	) 	) 	) 	)  	!)" 	#)$ 	%)& 	')( 	))* 	+), 	-). 	/)0 	1)2 	3)4 	5)6 	7)8 	!9): 	";)< 	"=)> 	"?)@ 	"A)B 	"C)D 	"E)F 	'G)H 	'I)J 	'K)L 	'M)N 	'O)P 	'Q)VC*CFH5 5       : : (!!'1-<<	
K , ,    (   / $ > >
  r   r  c                   4    \ rS rSr\S 5       r\S 5       rSrg)r  i  c                 B    U S:  a  [        SU -   S-   5      e[        U    $ )Nr&   zglog())rO  	LOG_TABLErF   s    r   glogQRMath.glog  s'    EGaK#-..|r   c                 `    U S:  a  U S-  n U S:  a  M  U S:  a  U S-  n U S:  a  M  [         U    $ )Nr   r      )	EXP_TABLEr   s    r   r  QRMath.gexp  s>    !eHA !e3hHA 3h|r   rQ   N)rK   rL   rM   rN   rk  r  r  rP   rQ   r   r   r  r    s(     
  r   r  r  rh   r&   r5   ra   r`   r   c                   2    \ rS rSrS rS rS rS rS rSr	g)	rZ  i  c                     [        U5      S:X  a  [        [        U5      S-   U-   5      eSnU[        U5      :  a&  X   S:X  a  US-  nU[        U5      :  a
  X   S:X  a  M  XS  S/U-  -   U l        g )Nr   /r&   )r   rO  num)r   r
  shiftr\  s       r   r   QRPolynomial.__init__  su    HMCHsNU233s3xCK1$4aKF s3xCK1$4w<1#e)+r   c                      U R                   U   $ r	   r
  )r   rD   s     r   r[  QRPolynomial.get  s    xxr   c                 ,    [        U R                  5      $ r	   )r   r
  r   s    r   r.   QRPolynomial.getLength"  s    488}r   c                    S/U R                  5       UR                  5       -   S-
  -  n[        U R                  5       5       H  n[        UR                  5       5       Hl  nX#U-   ==   [        R                  [        R	                  U R                  U5      5      [        R	                  UR                  U5      5      -   5      -  ss'   Mn     M     [        US5      $ r  )r.   rB   r  r  r  r[  rZ  )r   r   r
  rG   r  s        r   r  QRPolynomial.multiply%  s    cT^^%59:t~~'(A1;;=)E
fkk&++dhhqk*C*0++aeeAh*@+A C C
 * ) C##r   c           
         U R                  5       UR                  5       :  a  U $ [        R                  U R                  S   5      [        R                  UR                  S   5      -
  n[	        U R                  UR                  5       VVs/ s H3  u  p4U[        R                  [        R                  U5      U-   5      -  PM5     nnnXPR                  UR                  5       S  -  n[        US5      R                  U5      $ s  snnf r   )r.   r  r  r
  r  r  rZ  r  )r   r   rationnenr
  s         r   r  QRPolynomial.mod-  s    NNq{{},KDHHQK)FKKa,BB!%%02052 FKKB% 7880 	 2xx''C#''**	2s   :Dr  N)
rK   rL   rM   rN   r   r[  r.   r  r  rP   rQ   r   r   rZ  rZ    s    ,%,r   rZ  c                   >   \ rS rSr/ / SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ S	QP/ S
QP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ S QP/ S!QP/ S"QP/ S#QP/ S$QP/ S%QP/ S&QP/ S'QP/ S(QP/ S)QP/ S*QP/ S+QP/ S,QP/ S-QP/ S.QP/ S/QP/ S0QP/ S1QP/ S2QP/ S3QP/ S4QP/ S5QP/ S6QP/ S7QP/ S8QP/ S9QP/ S:QP/ S;QP/ S<QP/ S=QP/ S>QP/ S?QP/ S@QP/ SAQP/ SBQP/ SCQP/ SDQP/ SEQP/ SFQP/ SGQP/ SHQP/ SIQP/ SJQP/ SKQP/ SLQP/ SMQP/ SNQP/ SOQP/ SPQP/ SQQP/ SRQP/ SSQP/ STQP/ SUQP/ SVQP/ SWQP/ SXQP/ SYQP/ SZQP/ S[QP/ S\QP/ S]QP/ S^QP/ S_QP/ S`QP/ SaQP/ SbQP/ ScQP/ SdQP/ SeQP/ SfQP/ SgQP/ ShQP/ SiQP/ SjQP/ SkQP/ SlQP/ SmQP/ SnQP/ SoQP/ SpQP/ SqQP/ SrQP/ SsQP/ StQP/ SuQP/ SvQP/ SwQP/ SxQP/ SyQP/ SzQP/ S{QP/ S|QP/ S}QP/ S~QP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQP/ SQPrS r\S 5       r\S 5       rSr	g)r   i7  )r&   r~     )r&   r~  ri   )r&   r~  rd   )r&   r~  rb   )r&   ,   r  )r&   r  r  )r&   r  r}  )r&   r  ri   )r&   r  7   )r&   r  r  )r(   #   r   )r(   r  rd   )r&   r   r  )r(   r  r:  )r(   r  r   )r5      rb   )r&   r  r  )r(   C   +   )r(   !   r  r(   r  ri   )r(   r!  rc   r(   r  rW   )r(   r  D   )r5   r   r%   )r5   r   r  )r5   r   r  )r(   r_   r  )r5   1      )r(   r:  rX   r5   r!  r  )r5   '   rd   r&   r   rX   )r(   y   a   )r(   r  r  r(   =   r%  )r5   r   r  r(   r'   r  )r5   r   rX   r(   r'   r  )r(   r  t   )rV   r  $   r(   ;   r   )r5   r*  ri   r5   r   r   )r5   r*  rW   r5   r   rd   )r(   r  r"  r(   W   E   )r5   r-  r   r&   r  r  )r`   r   r  r(   r     )r`   r   r  r(   r  ri   )r5   e   Q   )r&   r  r  r5   r0  3   )r5   r  r}  r5   r1     )rV   r*  rW   rh   r   rd   )r(   r)  \   r(   u   ]   )r`   r  r*  r(   r+  r   )r5   r  r.  r`   /      )r   r  rX   r5   r   r  )r5      k   )rh   r+  r   r&   r  r  )rh   r  r.  r5   -   r7  )rW   r!  rc   r5   r  rW   )rV      s   r&   r  r)  )r5   r9  r   ra   A   r'   )rc   r*  ri   ra   r   r   )rc   r*  rW   ra   r   rd   )ra   m   r,  r&   r  X   )ra   r=  r'   ra   r  r  )ra   r  r   r   r  r  )rc   r*  rW   )ra   r  r_   r&   {   c   )r   I   r:  rV   r  r  )r  r   r  r(   r  r.  )rV   r:  r  rd   r  ri   )r&      r9  ra   r  r  )r$   r  r  r&   K   r6  )r&   r  r}  r  r1  r2  )r(   r  rX   r   r   r  )ra   r  x   r&      r&  )rb   r-  r   r5   r  r  )r   r  r}  r&   r1  r2  )r(   r  rX   r  r   r  )rV      q   r5   r  r  )rV   r  r  rc   G   r:  )r   r6  r7  r5   r  r}  )rb   r%  rd   ri   r   rX   )rV   rC  r9  ra   r  r  )rV   r  r'   rd   r"  r  )r  r  r   ra   r  r  )r  r   r  r$   r  ri   )r5      r)  r5   r;  r4  )r   r"  r  )r   r  r}  r`   r1  r2  )r  r  ri   r`   r6  r   )r(      o   r      r  )r   r  r  )r   r  r   ri   r  r  )r  r   rd   )r5   rF  r&  ra      r  )r5   rD  r6  rX   r  r  )rc   r  r   rX   r  r  )ri   r:  r  rX   r  ri   )r`      r4  r5      r  )r`   rB  r:  rX   r  r  )rc   r  r   ri   r  r  )r  r  ri   r(   r6  r   )rh   r  rg   r5   r8  r9  )rh   rD  r6  rd   r  r  )r   r  r   r}  r  r  )r}  r:  r  rd   r  ri   )r$   r  r  r(      r<  )r  r  r  r5   rD  r6  )r  r  r}  r`   r1  r2  )r!  r  ri   r5   r6  r   )rh   rN  r  r5      r@  )r}  rB  r:  rV   r  r  )rh   5   r2  r~  r  r   )rW   r:  r  r  r  ri   )rV   rO  r4  r$   rP  r  )rV   rB  r:  r2  r  r  )r5   r  r   r$  r  r  )rc   r:  r  r$  r  ri   )r   r  r)  r   rO  r4  )r7  rB  r:  r   r  r  )r&   rS  r2  r   r  r   )r  r:  r  r~  r  ri   )ra   r;  r<  r$   r  r)  )r  rD  r6  r$   r  r  )r  r  r   r  r  r  )r2  r:  r  r  r  ri   )rd   r;  r<  rV   r  r)  )r(   r  r     rD  r6  )r  r  r   r&   r  r  )r2  r:  r  r  r  ri   )r   r;  r<  )r$   r  r  r2  rD  r6  )r$   r  r   r  r  r  )r  r:  r  r  r  ri   )r   r;  r<  r&   r  r)  )rX   r  r  r7  rD  r6  )rT  r  r   r  r  r  )rc   r:  r  r  r  ri   )rd   r;  r<  r`   r  r)  )rX   r  r  r2  rD  r6  )r  r  r   r   r  r  )r+  r  ri   r&   r6  r   )rW   rF  r&  r   rN  r  )rW   rD  r6  r~  r  r  )r%  r  r   rX   r  r  )r}  r:  r  r'   r  ri   )r`   rF  r&  rX   rN  r  )r`   rD  r6  r  r  r  )r  r  r   r$   r  r  )r(   r:  r  r9  r  ri   )r   rN  r  r5   rR  r@  )rT  r  r  rX   rD  r6  )r#  r  r   r$   r  r  )r   r:  r  r  r  ri   )r5   rN  r  r  rR  r@  )rd   r  r  r:  rD  r6  )r  r  r   rX   r  r  )r  r:  r  r:  r  ri   )r.  rO  r4  r5   rP  r  )r   rD  r6  r   r  r  )r   r  r   r}  r  r  )r$   r:  r  r  r  ri   )r  rP  r  r`      w   )r  rD  r6  r$  r  r  )r  r  r   r  r  r  )r.  r:  r  r(  r  ri   c                     Xl         X l        g r	   )rW  r   )r   rW  r   s      r   r   QRRSBlock.__init__0  s    $"r   c                 <   [         R                  X5      nUS :X  a  [        SU -   S-   U-   5      e[        U5      S-  n/ n[	        U5       HM  nX%S-  S-      nX%S-  S-      nX%S-  S-      n[	        U5       H  n	UR                  [        Xx5      5        M     MO     U$ )Nzbad rs block @ version:z/errorCorrectLevel:rV   r   r&   r(   )r   getRsBlockTablerO  r   rB   r   )
r;   r   rsBlockr   r#  rG   r  rW  r   r  s
             r   r   QRRSBlock.getRSBlocks4  s    ++GGd?5?124EF G GW"vAEAI&E Q+J Q+I5\Ij<= "	  r   c                    U[         R                  :X  a  [        R                  U S-
  S-  S-      $ U[         R                  :X  a  [        R                  U S-
  S-  S-      $ U[         R
                  :X  a  [        R                  U S-
  S-  S-      $ U[         R                  :X  a  [        R                  U S-
  S-  S-      $ g )Nr&   r5   r   r(   rV   )rm  rn  r   RS_BLOCK_TABLEro  rp  rq  )r;   r   s     r   rZ  QRRSBlock.getRsBlockTableD  s     3 5 55++Wq[A,=,ABB"5"7"77++Wq[A,=,ABB#6#8#88++Wq[A,=,ABB#6#8#88++Wq[A,=,ABBr   )r   rW  N)
rK   rL   rM   rN   r^  r   rk  r   rZ  rP   rQ   r   r   r   r   7  s6   v 	v 	v 	v 	v 	v 	v 	v  	!v& 	'v( 	)v* 	+v, 	-v2 	3v4 	5v6 	7v8 	9v> 	?v@ 	AvB 	CvD 	EvJ 	KvL 	MvN 	OvP 	QvV 	WvX 	YvZ 	[v\ 	]vb 	cvd 	evf 	gvh 	ivn 	ovp 	qvr 	svt 	uvz 	{v| 	}v~ 	v@ 	AvF 	GvH 	IvJ 	KvL 	MvR 	!SvT 	UvV 	WvX 	Yv^ 	_v` 	avb 	cvd 	 evj 	#kvl 	mvn 	 ovp 	 qvv 	!wvx 	yvz 	{v| 	}vB 	!CvD 	EvF 	 GvH 	 IvN 	#OvP 	 QvR 	 SvT 	 UvZ 	#[v\ 	]v^ 	 _v` 	 avf 	#gvh 	 ivj 	 kvl 	 mvr 	#svt 	 uvv 	 wvx 	!yv~ 	#v@ 	AvB 	 CvD 	 EvJ 	#KvL 	MvN 	 OvP 	QvV 	#WvX 	 YvZ 	![v\ 	!]vb 	#cvd 	 evf 	!gvh 	 ivn 	#ovp 	 qvr 	 svt 	!uvz 	${v| 	 }v~ 	 v@ 	 AvF 	#GvH 	 IvJ 	 KvL 	!MvR 	$SvT 	 UvV 	 WvX 	!Yv^ 	#_v` 	 avb 	 cvd 	!evj 	$kvl 	!mvn 	!ovp 	!qvv 	$wvx 	 yvz 	 {v| 	!}vB 	CvD 	!EvF 	!GvH 	!IvN 	$OvP 	!QvR 	!SvT 	!UvZ 	$[v\ 	!]v^ 	 _v` 	 avf 	$gvh 	!ivj 	!kvl 	!mvr 	$svt 	 uvv 	!wvx 	 yv~ 	$v@ 	!AvB 	!CvD 	!EvJ 	$KvL 	!MvN 	!OvP 	!QvV 	$WvX 	 YvZ 	![v\ 	!]vb 	$cvd 	!evf 	!gvh 	!ivNp#   
 
r   r   c                   8    \ rS rSrS rS rS rS rS rS r	Sr
g	)
rM  iQ  c                      / U l         SU l        g r   r:   r   r   s    r   r   QRBitBuffer.__init__R  s    r   c                 v    SR                  U R                   Vs/ s H  n[        U5      PM     sn5      $ s  snf )N.)joinr:   rp   )r   rF   s     r   r2   QRBitBuffer.__repr__V  s+    xx5AQ5665s   6c                 H    US-  nU R                   U   SUS-  -
  -	  S-  S:H  $ )Nrh   r   r&   )r:   )r   rD   bufIndexs      r   r[  QRBitBuffer.getY  s1    A:++h'A	M:q@QFFr   c                 f    [        U5       H"  nU R                  XU-
  S-
  -	  S-  S:H  5        M$     g r  )rB   rP  )r   r
  r   rG   s       r   r7   QRBitBuffer.put]  s1    vAKKCQJN39a?@ r   c                     U R                   $ r	   )r   r   s    r   rN  QRBitBuffer.getLengthInBitsa  s    {{r   c                    U R                   S-  n[        U R                  5      U::  a  U R                  R                  S5        U(       a'  U R                  U==   SU R                   S-  -	  -  ss'   U =R                   S-  sl         g )Nrh   r   r8  r&   )r   r   r:   r   )r   r=  ri  s      r   rP  QRBitBuffer.putBitd  se    ;;!#t{{x'KKq!KK!dt{{Q&?A!qr   rb  N)rK   rL   rM   rN   r   r2   r[  r7   rN  rP  rP   rQ   r   r   rM  rM  Q  s"    7GAr   rM  )rZ   r  r   r   rl   	NameErrorrp   r   rS   r^   rf   ru   r   r   r   r   r   r   rm  rs  r  r  rB   r  r  rG   rZ  r   rM  )r   s   0r   <module>rr     s  0 
 6%
3  3 jr   &+b +Z2b 2l1B 1&#R #&+" +2 \ \~
 
 m m^  c
#
1Q
#	c
#
1Q
#		qA6IaL 
	q#Aa!e$yQ'77a!e$%'0Q'78IaL 
 
sA Iil 
, ,BX Xt k!655  GV $#s(   E% E3 <FF%E03E?>E?