+
    +Û¿jèƒ  ã                   ój	  € ^ RI H t HtHt ^ RIt^ RIt^ RIt^ RIt^ RIt^ RIH	t	H
t
HtHtHt ^ RIHtHtHtHt ^ RIHt ^ RIHt ^ RIHtHtHtHtHt ^ RIHt ^ R	IH t  ^ R
I!H"t"H#t#H$t$H%t%H&t&H't'H(t(H)t)H*t*H+t+H,t, ^ RI-H.t. ^ RI/H0t0H1t1 ^ RI2H3t3H4t4 ^ RI-H5t5 ^ RI6t6^ RI7t7]	! ]! ] ! RRR4      4      .R7      t8]6Pr                  Pu                  ]6Pr                  Pu                  ]6Pr                  Pu                  ]6Pr                  Pw                  ]<4      4      4      4      t=]! ]6Pr                  P}                  ]=R4      R7      t?]P€                  ! 4       tAROR R lltBROR R lltCR R ltDROR R lltER R ltF]8P�                  R]R 7      RRR]! ]4      ]! ] ! RRR4      4      3R! R" ll4       tH]8P�                  R#4      R]! ]4      ]! ] ! RRR4      4      3R$ R% ll4       tI]8P�                  R&4      ]! ]4      ]! ] ! RRR4      4      3R' R( ll4       tJ]8P—                  R)4      ]! R*4      ]! R*4      ]! R*4      ]! R*4      ]! R*4      ]! R+4      ]! R,4      ]! ^4      ]! ^4      ]! R-4      ]! R*4      ]! ]4      ]! ] ! RR4      4      3R. R/ ll4       tL]8P—                  R04      ]! ]4      ]! ] ! RR1R4      4      3R2 R3 ll4       tM]8P�                  R44      ]! ]4      3R5 R6 ll4       tN]8P—                  R74      ]! R4      ]! R4      ]! R4      ]! R*4      ]! R4      ]! R84      ]! ^4      ]! R94      ]! R4      ]! R4      ]! R4      ]! R4      ]! R4      ]! R4      ]! R4      ]! ]4      ]! ] ! RRR4      4      3R: R; ll4       tO]8P�                  R<]R 7      ]8P�                  R=]R 7      R> 4       4       tP]8P�                  R?]]! ] ! RRR4      4      .R@7      ]! ]4      3RA RB ll4       tQ]8P—                  RC4      ]! R*4      ]! ]4      ]! ] ! RRR4      4      3RD RE ll4       tR]8P—                  RF4      ]! ]4      ]! ] ! RRR4      4      3RG RH ll4       tS]8P—                  RI4      ]! ]4      ]! ] ! RRR4      4      3RJ RK ll4       tT]8P�                  RL]]! ] ! RRR4      4      .R@7      ]! ]4      3RM RN ll4       tUR# )Pé    )ÚdatetimeÚtimezoneÚ	timedeltaN)Ú	APIRouterÚRequestÚFormÚDependsÚHTTPException)ÚHTMLResponseÚRedirectResponseÚStreamingResponseÚJSONResponse)ÚJinja2Templates)ÚAsyncSession)ÚselectÚupdateÚor_ÚfuncÚcase)Úget_db)Úrequire_roles)ÚVoucherÚVoucherAgentÚHotspotProfileÚVoucherBatchÚMikrotikDeviceÚDeviceCredentialÚSiteÚUserÚPaymentÚWalletTransactionÚAgentCommission)Údecrypt_secret)ÚRealMikrotikAdapterÚMikrotikProvisioningError)Úgenerate_credentialsÚCredentialPolicyError)Úencrypt_secretÚagen_voucherÚadmin_csÚsuper_admin)Údependencieszapp/templates)Ú	directoryc                ól   € V ^8„  d   QhR\         R\        R,          R\        \        \        3,          /# ©é   ÚdbÚ	device_idNÚreturn)r   ÚintÚtupler   r   )Úformats   "Ú,/var/www/html/bestweb/app/routes/vouchers.pyÚ__annotate__r8   =   s2   € ÷ ñ ¤,ð ¼3À½:ð ÔQVÔWeÔgwÐWwÕQxñ ó    c              ƒ   ó¤  "  € V'       dG   V P                  \        V4      G R j  x€L
 pV'       d   VP                  '       g   \        RRR7      hMV P	                  \        \        4      P                  \        P                  R8H  4      P                  \        P                  4      4      G R j  x€L
 P                  4       P                  4       pV'       d   VP                  '       g   \        RRR7      hV P                  \        VP                  4      G R j  x€L
 pV'       d   VP                  '       g   \        RRR7      hW#3#  EL% Lœ L35i)Né”  z:Perangkat MikroTik tujuan tidak ditemukan atau tidak aktif©Ústatus_codeÚdetailTi÷  zDMikroTik Hotspot belum terkonfigurasi atau tidak memiliki kredensialzKredensial MikroTik tidak aktif)Úgetr   Ú	is_activer
   Úexecuter   ÚwhereÚorder_byÚidÚscalarsÚfirstÚcredential_idr   ©r1   r2   ÚmkÚcreds   &&  r7   Ú_get_hotspot_devicerK   =   s  é € çà—6‘6œ.¨)Ó4×4ˆç˜ŸŸ˜ä¨CÐ8tÔuÐuð &ð —J‘Jœv¤nÓ5×;Ñ;¼N×<TÑ<TÐX\Ñ<\Ó]×fÑfÔgu×gxÑgxÓyÓz×z÷  Dñ  Dó  F÷  Lñ  Ló  Nˆç�R×%×%Ð%ä¨Ð4zÔ{Ð{à—‘Ô(¨"×*:Ñ*:Ó;×;€Dç�T—^—^�^ä¨Ð4UÔVÐVàˆ8€Oò) 5ñ {ñ <ùsW   ‚"E¤E	¥E±EÁA,EÂ/EÂ0'EÃEÃ*0EÄEÄEÄ'EÄ9EÅEÅEc                óJ   € V ^8„  d   QhR\         R\        R,          R\        /# r/   )r   r4   r$   )r6   s   "r7   r8   r8   [   s+   € ÷ Sñ Sœ|ð S¼¸d½
ð SÔNañ Sr9   c              ƒ   óÌ   "  € \        W4      G R j  x€L
 w  r#\        VP                  VP                  \	        VP
                  4      VP                  ;'       g    RR7      #  LP5i)Ni"  )ÚhostÚusernameÚpasswordÚapi_port)rK   r$   rN   rO   r#   Úencrypted_secretrQ   rH   s   &&  r7   Ú_hotspot_adapterrS   [   sl   é € ä(¨Ó7×7�H€Bä B§G¡G°d·m±mÌnÐ]a×]rÑ]rÓNsð  A÷  Jñ  J÷  Rð  Rð  NRô  Sð  Sñ 8ùs   ‚A$‘A"’AA$c                ót   € V ^8„  d   QhR\         R\        \        ,          R\        \        \
        3,          /# )r0   r1   Úvouchersr3   )r   Úlistr   Údictr4   r$   )r6   s   "r7   r8   r8   e   s0   € ÷ ñ œlð ´d¼7µmð ÌÌSÔReÐMeÕHfñ r9   c              ƒ   ó„  "  € V Uu0 uF"  q"P                   '       g   K  VP                   kK$  	  pp/ pV'       g[   \        V 4      G R j  x€L
 w  rV\        WP                  4      G R j  x€L
 WEP                  &   V F  pVP                  Vn         K  	  V# V F  p\        W4      G R j  x€L
 WG&   K  	  V# u upi  Lp LS L5i©N)r2   rK   rS   rD   )r1   rU   ÚvÚ
device_idsÚadaptersÚ
default_mkÚ_Údev_ids   &&      r7   Ú_batch_adaptersr`   e   s¢   é € á'/Ó?¡x !·;µ;”+�!—+”+¡x€JÐ?à/1€Hçä1°"Ó5×5‰ˆ
ä(8¸¿]¹]Ó(K×"Kˆ—‘ÑãˆAà$Ÿ-™-ˆAŽKñ ð ˆãˆä!1°"Ó!=×=ˆÓñ ð €Oùò) @ñ 6á"Kñ >ùsD   ‚C ‡B5ŸB5¯C Á	B:Á
C Á(B<Á)?C Â(B>Â)C Â<C Â>C c                óX   € V ^8„  d   QhR\         R,          R\        R,          R\         /# )r0   Ú
uptime_strNÚduration_daysr3   )Ústrr4   )r6   s   "r7   r8   r8   ƒ   s*   € ÷ ñ ¤ t¥ð ¼CÀ$½Jð ÔRUñ r9   c                 óL  € V '       g   V'       d   V R 2# V '       g   R# \        V 4      P                  4       P                  4       pVP                  R4      '       d	   VRR  R2# VP                  R4      '       d	   VRR  R 2# VP                  R4      '       d	   VRR  R2# V # )	z Hariz24 JamÚhNz JamÚdÚmz Menitéÿÿÿÿ)rd   ÚstripÚlowerÚendswith)rb   rc   Úus   && r7   Ú_format_validityrn   ƒ   sš   € çŸ-à� Ð&Ð&çáäˆJ‹×ÑÓ×%Ñ%Ó'€Aà‡z�z�#‡‚à�C�R�&�˜ˆÐà	
�‰�C�Šà�C�R�&�˜ÐÐà	
�‰�C�Šà�C�R�&�˜Ð Ð àÐr9   c                ó0   € V ^8„  d   QhR\         R\         /# )r0   Úcontentr3   )rd   )r6   s   "r7   r8   r8   Ÿ   s   € ÷ *ñ *¤3ð *¬3ñ *r9   c                 ó`  € \         P                  ! ^^^R7      pVP                  V 4       VP                  RR7       VP	                  RRR7      p\
        P                  ! 4       pVP                  VRR7       \        P                  ! VP                  4       4      P                  R	4      pR
V 2# )é   )ÚversionÚbox_sizeÚborderT)ÚfitÚblackÚwhite)Ú
fill_colorÚ
back_colorÚPNG)r6   Úasciizdata:image/png;base64,)ÚqrcodeÚQRCodeÚadd_dataÚmakeÚ
make_imageÚioÚBytesIOÚsaveÚbase64Ú	b64encodeÚgetvalueÚdecode)rp   ÚqrÚimgÚbufÚb64s   &    r7   Ú_generate_qr_data_urir�   Ÿ   s‰   € ä	�Š˜q¨1°QÔ	7€Bà‡K�K�Ôà‡G�G�€GÔà
�-‰- 7°wˆ-Ó
?€Cä
�*Š*‹,€Cà‡H�HˆS˜€HÔä
×
Ò
˜3Ÿ<™<›>Ó
*×
1Ñ
1°'Ó
:€Cà# C 5Ð)Ð)r9   z	/vouchers)Úresponse_classc                óŠ   € V ^8„  d   QhR\         R\        R,          R\        R,          R\        R,          R\        R\        /# )r0   ÚrequestÚqNÚbatchÚ
profile_idr1   Úactor)r   rd   r4   r   r   )r6   s   "r7   r8   r8   ·   sV   € ÷ Mñ MäðMä˜t�ðMä36¸µ:ðMô �d•
ð	Mô 	ðMô 04ñMr9   c               ƒ   ó4  "  € R pV'       d‚   VP                  4       '       d'   VP                  4       '       d   \        V4      ^ 8:  d   \        RRR7      hVP	                  \
        \        V4      4      G R j  x€L
 pVf   \        RRR7      hVP                  \        \        4      P                  \        P                  R8H  4      P                  \        P                  4      4      G R j  x€L
 P                  4       P                  4       pVP                  \        \        4      P                  \        P                  4      4      G R j  x€L
 P                  4       P                  4       pVP                  \        \         4      P                  \         P                  R8H  4      P                  \         P                  4      4      G R j  x€L
 P                  4       P                  4       p	VP                  \        \
        4      P                  \
        P"                  P%                  4       4      P'                  ^d4      4      G R j  x€L
 P                  4       P                  4       p
VP                  \        \(        4      P                  \(        P                  R8H  4      P                  \(        P                  4      4      G R j  x€L
 P                  4       P                  4       pVP+                  \        \,        P.                  ! \0        P"                  4      4      4      G R j  x€L
 ;'       g    ^ p/ pV EFÈ  pVP+                  \        \,        P.                  ! \
        P"                  4      4      P                  \
        P2                  VP"                  8H  4      P                  \
        P4                  R8g  4      P                  \        \0        P"                  4      P                  \0        P6                  \
        P"                  8H  4      P                  \0        P8                  R8g  4      P;                  4       4      4      G R j  x€L
 ;'       g    ^ pVP+                  \        \,        P.                  ! \0        P"                  4      4      P                  \0        P2                  VP"                  8H  4      P                  \0        P8                  R8g  4      4      G R j  x€L
 ;'       g    ^ pRVR	V/WÞP"                  &   EKË  	  R
.pVP<                  R9   p\>        PA                  T RRTRTRT	RT
RTRTRT;'       g    RRV'       d"   VP                  4       '       d   \        V4      MR RVRVRVRVRVRV/R7      #  EL EL• EL9 EL½ ELD ELÈ ELk ELL L¶5i)Né¦  zID batch tidak validr<   r;   úBatch voucher tidak ditemukanTÚdeletedÚbatchesrU   Údefaultzvouchers.htmlÚprofilesÚsitesÚdevicesÚagentsÚcurrent_userr‘   Ú r’   Úselected_batchÚselected_profile_idÚtotal_vouchersÚprofile_usageÚprotected_profilesÚcan_delete_profile©r�   ÚnameÚcontext)r+   Úadminr*   )!ÚisasciiÚisdigitr4   r
   r?   r   rA   r   r   rB   r@   rC   r¨   rE   Úallr   r   rD   ÚdescÚlimitr   Úscalarr   Úcountr   r“   Úsync_statusÚbatch_idÚstatusÚexistsÚroleÚ	templatesÚTemplateResponse)r�   r‘   r’   r“   r1   r”   r¡   r›   rœ   r�   r™   rž   Útotal_countr¤   ÚpÚnum_batchesÚnum_vouchersr¥   r¦   s   &&&&&&             r7   Úvouchers_pager½   µ   s3  é € ð €Nçà�}‰}�Š e§m¡m§o¢o¼¸U»Àq¼ä¨CÐ8NÔOÐOà!Ÿv™v¤l´C¸³JÓ?×?ˆàÒ!ä¨CÐ8WÔXÐXð —j‘j¤¬Ó!7×!=Ñ!=¼n×>VÑ>VÐZ^Ñ>^Ó!_×!hÑ!hÔiw×i|Ñi|Ó!}Ó~×~÷  Hñ  Hó  J÷  Nñ  Nó  P€Hà—:‘:œf¤T›l×3Ñ3´D·I±IÓ>Ó?×?×HÑHÓJ×NÑNÓP€Eà—Z‘Z¤¤~Ó 6× <Ñ <¼^×=UÑ=UÐY]Ñ=]Ó ^× gÑ gÔhv×h{Ñh{Ó |Ó}×}÷  Gñ  Gó  I÷  Mñ  Mó  O€Gà—Z‘Z¤¤|Ó 4× =Ñ =¼l¿o¹o×>RÑ>RÓ>TÓ U× [Ñ [Ð\_Ó `Óa×a×jÑjÓl×pÑpÓr€Gà—J‘Jœv¤lÓ3×9Ñ9¼,×:PÑ:PÐTXÑ:XÓY×bÑbÔco×ctÑctÓuÓv×v×Ñó  B÷  Fñ  Fó  H€FàŸ	™	¤&¬¯ª´G·J±JÓ)?Ó"@ÓA×A×FÐFÀQ€Kà€MÜˆØŸI™IÜ”4—:’:œlŸo™oÓ.Ó/ß‰U”<×*Ñ*¨a¯d©dÑ2Ó3ß‰U”<×+Ñ+¨yÑ8Ó9ß‰UÜ”w—z‘zÓ"ß‘”w×'Ñ'¬<¯?©?Ñ:Ó;ß‘”w—~‘~¨Ñ2Ó3ß‘“ó	ó	

÷ 

÷ 
ð 
ð ð 	ð  ŸY™YÜ”4—:’:œgŸj™jÓ)Ó*ß‰U”7×%Ñ%¨¯©Ñ-Ó.ß‰U”7—>‘> YÑ.Ó/ó
÷ 
÷ ð ð ð	 	ð
  )¨+°zÀ<ÐPˆ—d‘dÔñ# ð& $˜ÐàŸ™Ð'KÑKÐä×%Ñ%¨g¸Oà�H˜g u¨i¸à�7˜H f¨n¸eàˆQ�WˆW�"�g¯U°u·}±}·²œs 5œzÈDà˜.Ð*?Àà˜+Ø˜ØÐ0ØÐ0ðVÐ%ó ð òY @ò â?â}âaâvâAò

ñ
ùsÒ   ‚ V£V¹?VÁ8U>Á9A3VÃ,VÃ-AVÅVÅA>VÇ
VÇA;VÉV
ÉA>VËVËAVÌ%VÌ&
VÌ1DVÑVÑ
VÑBVÓVÓ 
VÓ+AVÕ	VÕ VÖVÖVÖVÖ
VÖVÖVÖVÖVz/api/vouchers/batchesc                óJ   € V ^8„  d   QhR\         R,          R\        R\        /# )r0   r“   Nr1   r”   ©r4   r   r   )r6   s   "r7   r8   r8     s1   € ÷ ^ ñ ^ ä�d•
ð^ ô 	ð	^ ô ñ^ r9   c              ƒ   ó  "  € \        \        P                  \        P                  \        P                  \        P
                  \        P                  \        P                  \        P                  ! \        P                  4      P                  R 4      \        P                  ! \        \        P                  R8H  ^3^ R7      4      P                  R4      \        P                  ! \        \        P                  R8H  ^3^ R7      4      P                  R4      \        P                  4
      P!                  \        \        P"                  \        P                  8H  4      P%                  \        P                  4      P'                  \        P                  P)                  4       4      pV '       d#   VP+                  \        P
                  V 8H  4      pVP-                  V4      G Rj  x€L
 P/                  4       p. pV EF}  pVP                  '       d;   VP                  P1                  4       '       d   VP                  P1                  4       MVP                  pVP                  ;'       g    RpVP2                  e   VP2                  MVP4                  p	V RV R	V	 R
2P1                  4       p
TP7                  RVP                  RVP                  RVP                  RVP
                  RVP                  ;'       g    RRT
RVP                  R VP4                  RVP2                  ;'       g    ^ RVP8                  ;'       g    ^ RVP                  '       d   VP                  P;                  R4      MR/4       EK€  	  RV/#  EL�5i)Úvoucher_countÚ	available)Úelse_Úavailable_countÚsoldÚ
sold_countNr    Ú z [Ú]rD   Ú
batch_codeÚprofiler“   ÚcommentÚdisplay_labelÚquantityÚ
created_atz%Y-%m-%d %H:%Mr™   )r   r   rD   rÉ   rÊ   r“   rË   rÍ   r   r±   r   ÚlabelÚsumr   r´   rÎ   Újoinr³   Úgroup_byrC   r®   rB   rA   r­   rj   rÄ   rÁ   ÚappendrÆ   Ústrftime)r“   r1   r”   ÚstmtÚresultsr™   ÚrÚcomment_partÚprofile_partÚ	remainingrÏ   s   &&&        r7   Úlist_voucher_batches_apirÛ   
  sƒ  é € ô 	ä�O‰Oä×#Ñ#ä× Ñ ä×#Ñ#ä× Ñ ä×!Ñ!ä�JŠJ”w—z‘zÓ"×(Ñ(¨Ó9ä�HŠH”Tœ7Ÿ>™>¨[Ñ8¸!Ð<ÀAÔFÓG×MÑMÐN_Ó`ä�HŠH”Tœ7Ÿ>™>¨VÑ3°QÐ7¸qÔAÓB×HÑHÈÓVä×#Ñ#ó)	
÷0 
‰Œg”w×'Ñ'¬<¯?©?Ñ:Ó	;ç	‰”,—/‘/Ó	"ç	‰”,—/‘/×&Ñ&Ó(Ó	)ð= 	÷D à�z‰zœ,×1Ñ1°ZÑ?Ó@ˆð —Z‘Z Ó%×%×*Ñ*Ó,€Gà€Gäˆà,-¯I¯I¨I¸!¿)¹)¿/¹/×:KÒ:K�q—y‘y—‘Ô(ÐQR×Q]ÑQ]ˆà—y‘y—� Bˆð *+×):Ñ):Ò)F�A×%Ò%ÈAÏOÉOˆ	à�.  , ¨r°)°¸AÐ>×DÑDÓFˆà�‰à�!—$‘$à˜!Ÿ,™,à�q—y‘yà˜!Ÿ,™,à�q—y‘y—� Bà˜Uà˜Ÿ
™
à˜QŸ_™_à˜q×0Ñ0×5Ð5°Aà˜!Ÿ,™,×+Ð+¨!àÀQÇ\Ç\À\˜!Ÿ,™,×/Ñ/Ð0@ÔAÐWYð-
÷ 	ñ ðP �wÐÐòY &ùs8   ‚G#NÇ%NÇ&ANÈ28NÉ+BNË</NÌ,NÍNÍ,Nz/api/vouchers/datatablec                ó<   € V ^8„  d   QhR\         R\        R\        /# )r0   r�   r1   r”   )r   r   r   )r6   s   "r7   r8   r8   r  s-   € ÷ Dñ DäðDô 	ð	Dô ñDr9   c              ƒ   ó¨  "  € V P                   p \        VP                  R ^4      4      p \        ^ \        VP                  R^ 4      4      4      p \        VP                  R^
4      4      pV^ 8:  g   V^d8”  d   ^
pTP                  R4      ;'       g    TP                  R4      ;'       g    RP                  4       pTP                  R4      ;'       g    TP                  R4      pTP                  R4      p	TP                  R	4      p
 \        TP                  R
^ 4      4      pTP                  RR4      P                  4       p^ \        P                  ^\        P                  ^\        P                  ^\        P                  ^\        P                  ^\        P                  ^\        P                  ^\        P                  /pTP                  T\        P                  4      pTR8X  d   TP                  4       MTP!                  4       pTP#                  \%        \&        P(                  ! \        P                  4      4      4      G Rj  x€L
 ;'       g    ^ p. pT'       d[   \+        T4      P-                  4       '       d<   \        T4      ^ 8”  d,   TP/                  \        P                  \        T4      8H  4       T	'       d[   \+        T	4      P-                  4       '       d<   \        T	4      ^ 8”  d,   TP/                  \        P0                  \        T	4      8H  4       T
'       dG   T
P                  4       '       d1   TP/                  \        P                  T
P                  4       8H  4       T'       d¶   RT R2pTP/                  \3        \        P4                  P7                  T4      \        P                  P7                  T4      \        P8                  P7                  T4      \        P                  P7                  T4      \        P                  P7                  T4      4      4       \%        \&        P(                  ! \        P                  4      4      pT'       d   TP:                  ! T!  pTP#                  T4      G Rj  x€L
 ;'       g    ^ p\%        \        4      pT'       d   TP:                  ! T!  pTP=                  T\        P                  P                  4       4      P?                  T4      PA                  T4      pTPC                  T4      G Rj  x€L
 PE                  4       PG                  4       p. pT EF  pTP/                  RTP                  RTP                  ;'       g    TP4                  R\I        TPJ                  4      RTP                  ;'       g    RRTP                  ;'       g    ^ RTP                  e!   RTP                  R 2PM                  RR4      MRR	TP                  RTP                  RTPN                  '       d   TPN                  PQ                  R4      MRRTP8                  ;'       g    R/
4       EK  	  R TRTRTRT/#   \        \        3 d    ^p ELLi ; i  \        \        3 d    ^ p EL@i ; i  \        \        3 d    ^
p EL.i ; i  \        \        3 d    ^ p ELži ; i ELz ELD EL±5i) ÚdrawÚstartÚlengthzsearch[value]r‘   r    r’   r³   r“   r´   zorder[0][column]zorder[0][dir]r®   NÚ%rD   rO   Úhas_passwordrÊ   Ú-ÚpriceÚprice_formattedúRp Ú,Ú.zRp 0Ú
expires_atz%Y-%m-%drË   ÚrecordsTotalÚrecordsFilteredÚdata))Úquery_paramsr4   r?   Ú
ValueErrorÚ	TypeErrorÚmaxrj   rk   r   rD   rO   rÊ   rä   r´   r³   r®   Úascr°   r   r   r±   rd   r¬   rÓ   r“   r   ÚcodeÚilikerË   rB   rC   Úoffsetr¯   rA   rE   r­   ÚboolÚpassword_ciphertextÚreplaceré   rÔ   )r�   r1   r”   ÚparamsrÞ   rß   rà   Úsearch_valueÚbatch_paramÚprofile_paramÚstatus_paramÚorder_col_idxÚ	order_dirÚcol_mapÚ	order_colÚorder_clauseÚrecords_totalÚfiltersÚneedleÚ
count_stmtÚrecords_filteredrÕ   rU   rì   rZ   s   &&&                      r7   Úvouchers_datatabler  p  s1  é € ð ×!Ñ!€Fðä�6—:‘:˜f aÓ(Ó)ˆðä�A”s˜6Ÿ:™: g¨qÓ1Ó2Ó3ˆð
ä�V—Z‘Z ¨"Ó-Ó.ˆà�QŒ;˜& 3œ,àˆFð —J‘J˜Ó/×HÐH°6·:±:¸c³?×HÐHÀb×OÑOÓQ€Là—*‘*˜WÓ%×?Ð?¨¯©°JÓ)?€Kà—J‘J˜|Ó,€Mà—:‘:˜hÓ'€Lðä˜FŸJ™JÐ'9¸1Ó=Ó>ˆð —
‘
˜?¨FÓ3×9Ñ9Ó;€Ið 	
Œ7�:‰:à	Œ7×Ñà	Œ7�:‰:à	Œ7�?‰?à	Œ7�=‰=à	Œ7�>‰>à	Œ7×Ñà	Œ7�:‰:ð!€Gð( —‘˜M¬7¯:©:Ó6€Ià'0°FÔ':�9—>‘>Ô#À	ÇÁÃ€Lð Ÿ)™)¤F¬4¯:ª:´g·j±jÓ+AÓ$BÓC×C×HÐHÀq€Mð €Gç”s˜;Ó'×/Ñ/×1Ò1´c¸+Ó6FÈÔ6Jà�‰”w×'Ñ'¬3¨{Ó+;Ñ;Ô<çœ˜]Ó+×3Ñ3×5Ò5¼#¸mÓ:LÈqÔ:Pà�‰”w×)Ñ)¬S°Ó-?Ñ?Ô@ç˜×*Ñ*×,Ò,à�‰”w—~‘~¨×);Ñ);Ó)=Ñ=Ô>÷ à�\�N !Ð$ˆà�‰ää—‘×"Ñ" 6Ó*ä× Ñ ×&Ñ& vÓ.ä—‘×%Ñ% fÓ-ä—‘×%Ñ% fÓ-ä—‘×$Ñ$ VÓ,óô	
ô( œŸ
š
¤7§:¡:Ó.Ó/€Jçà×%Ò% wÑ/ˆ
àŸY™Y zÓ2×2×7Ð7°aÐô ”'‹?€Dçà�zŠz˜7Ñ#ˆà�=‰=˜¤w§z¡z§¡Ó'8Ó9×@Ñ@ÀÓG×MÑMÈfÓU€Dà—j‘j Ó&×&×/Ñ/Ó1×5Ñ5Ó7€Hð €Däˆà�‰à�!—$‘$à˜Ÿ
™
×,Ð, a§f¡fàœD ×!6Ñ!6Ó7à�q—y‘y×'Ð' Cà�Q—W‘W—\�\ àÀaÇgÁgÒFY  Q§W¡W¨Q KÐ0×8Ñ8¸¸cÔBÐ_eà�a—h‘hà˜Ÿ
™
à¸q¿|¿|¸|˜!Ÿ,™,×/Ñ/°
Ô;ÐQUà�q—y‘y—� Bð)
÷ 	ñ ð< 	�à˜àÐ+à�ð
ð 
øôU œ	Ð"ô à‹ðûô œ	Ð"ô à‹ðûô œ	Ð"ô à‹ðûô( œ	Ð"ô à‹ðúòD Dòd 3ò 'ùs  ‚[�Y! ¬%Y; Á+Z Á=[Â[Â.([Ã4[ÄZ/ Ä'D([É[	É
[É[É(A![Ë
A![Ì,[Í7[Í:D[Ò[Ò	
[ÒB
[Ô[ÔA[Õ24[Ö'[Ö=A[Ø/[Ù
[Ù!Y8Ù4[Ù7Y8Ù8[Ù;ZÚ[ÚZÚ[ÚZ,Ú([Ú+Z,Ú,[Ú/[Û[Û[Û[Û[Û[z/hotspot-profiles.Ú12hÚ5mÚdaysc                ó´   € V ^8„  d   QhR\         R\         R\        R\        R\        R\         R\         R\        R	\        R
\         R\        R\        R\        /# )r0   r¨   Úlocal_profilerä   Ú	rate_downÚrate_upÚsession_timeoutÚidle_timeoutÚsharedÚvoucher_expiry_valueÚvoucher_expiry_unitr2   r1   r”   )rd   r4   r   r   )r6   s   "r7   r8   r8   >  sª   € ÷ IJñ IJä
ðIJä*-ðIJäBEðIJô ð	IJô *-ð	IJô LOð	IJô ðIJô -0ðIJô ðIJô @CðIJô ðIJô %1ðIJô ñIJr9   c              ƒ   ó$  "  € V P                  4       VP                  4       rV '       d   V'       d   V^ 8  g   V^ 8:  g   V^ 8:  d   \        RRR7      h^Tu;8:  d   ^8:  d   M MV^8  d   \        RRR7      hV	R8X  d2   \        ^\        P                  ! V^,          4      4      pVR,          pM2V	R8X  d   ^pV^<,          pM\        ^\        VR4      4      pVR	,          p\        Wº4      G R
j  x€L
 w  pp\        Wº4      G R
j  x€L
 pV RV R2p \        P                  ! VP                  VVWVV4      G R
j  x€L
  TP                  \        \        4      P                  \        P                   T 8H  \        P"                  TP"                  8H  4      4      G R
j  x€L
 P%                  4       P'                  4       pTf)   \        YP"                  YÞR7      pTP)                  T4       TTn        Y4uTn        Tn        YVuTn        Tn        YruTn        Tn        TTn        TTn        RRuTn        Tn        TPA                  4       G R
j  x€L
  \C        RRR7      #  ELm ELZ EL(  \         d   p\        RRT 2R7      ThR
p?ii ; i Lì L@5i)r   r–   z Data Hotspot Profile tidak validr<   z,Batas pengguna atau masa berlaku tidak validÚhoursi  Úminutesém  é€Q Nzk/Úkéö  z&Profile gagal diterapkan ke MikroTik: )r¨   Úsite_idÚvoucher_expiry_daysÚvoucher_expiry_secondsTÚsyncedz/vouchers?profile_saved=1é/  ©r=   )"rj   r
   rð   ÚmathÚceilÚminrK   rS   ÚasyncioÚ	to_threadÚupsert_hotspot_profiler%   rA   r   r   rB   r¨   r  rE   rF   Úaddr  r  r  r  r  r  rä   r  r  r@   r²   Úcommitr   )r¨   r  rä   r  r  r  r  r  r  r  r2   r1   r”   r  r  rI   r^   ÚadapterÚ
rate_limitÚexcrÊ   s   &&&&&&&&&&&&&        r7   Úcreate_hotspot_profiler,  <  s…  é € ð$ Ÿ*™*›,¨×(;Ñ(;Ó(=ˆ-ç—}¨°¬	°YÀ!´^ÀwÐRSÄ|ä¨Ð4VÔWÐWà�Ö˜"×Ð 4°qÔ 8ä¨Ð4bÔcÐcð
 ˜gÔ%Ü! !¤T§Y¢YÐ/CÀbÕ/HÓ%IÓJÐØ!5¸Õ!<ÑØ	 	Ô	)ØÐØ!5¸Õ!:Ñä! !¤SÐ)=¸sÓ%CÓDÐØ!4°uÕ!<Ðô & bÓ4×4�E€Bˆä$ RÓ3×3€Gà�;˜b  	¨Ð+€JðmÜ×Ò × >Ñ >ÀÈzÐ[jð  {Aó  B÷  	Bð  	Bð —Z‘Z¤¤~Ó 6× <Ñ <¼^×=PÑ=PÐTXÑ=XÔZh×ZpÑZpÐtv×t~Ñt~ÑZ~Ó ó  A÷  A÷  Jñ  Jó  L÷  Rñ  Ró  T€Gà‚ä  d·J±JÐTgô  Xˆà
�‰ˆwŒà)€GÔà)2Ð&€GÔ�w”à4CÐ1€GÔ˜WÔ1à$*Ð!€G„N�G”Mà"5€GÔØ%;€GÔ"à-1°8Ð*€GÔ�wÔ*à
�)‰)‹+×ÐäÐ7ÀSÔIÐIòA 5â3ò 	BøÜ$ô mÜ¨Ð6\Ð]`Ð\aÐ4bÔcÐilÐlûðmúñ Añ* ùs   ‚/J²C JÃ2IÃ3JÄI"Ä	JÄ'I( Ä=I%Ä>I( ÅAJÆJÆ B-JÉJÉJÉ"JÉ%I( É(J	É3JÊJ	Ê	JÊJz%/hotspot-profiles/{profile_id}/deleterª   c                ó<   € V ^8„  d   QhR\         R\        R\        /# )r0   r“   r1   r”   r¿   )r6   s   "r7   r8   r8   Ž  s+   € ÷ ;iñ ;iÜð;iäð;iô ñ;ir9   c              ƒ   óÜ  "  € VP                  \        V 4      G R j  x€L
 pVf   \        RRR7      hVP                  ;'       g    VP                  pVR9   d   \        RRR7      hVP                  \        \        P                  ! \        P                  4      4      P                  \        P                  VP                  8H  4      P                  \        P                  R8g  4      P                  \        \        P                  4      P                  \        P                  \        P                  8H  4      P                  \        P                   R8g  4      P#                  4       4      4      G R j  x€L
 ;'       g    ^ pVP                  \        \        P                  ! \        P                  4      4      P                  \        P                  VP                  8H  4      P                  \        P                   R8g  4      4      G R j  x€L
 ;'       g    ^ pV'       g	   V'       d   \        RRV R	V R
2R7      h \%        VR 4      G R j  x€L
 p\&        P(                  ! VP*                  V4      G R j  x€L
  RTn        RTn        TP1                  4       G R j  x€L
  \3        RTP                   2RR7      #  ELž ELL L¶ Lu LN  \,         d   p\        RRT 2R7      ThR p?ii ; i LN5i)Nr;   zProfil hotspot tidak ditemukanr<   i“  z*Profil bawaan RouterOS tidak dapat dihapusr˜   é™  zProfil masih dipakai z	 batch / z voucher dan tidak bisa dihapusr  z$Gagal menghapus profil di MikroTik: Fz)/vouchers?profile_deleted=1&profile_name=r  r   )rš   )r?   r   r
   r  r¨   r°   r   r   r±   r   rD   rB   r“   r²   r   r³   r´   rµ   rS   r$  r%  Údelete_hotspot_profiler%   r@   r(  r   )	r“   r1   r”   rÊ   Ú
local_namer»   r¼   r)  r+  s	   &&&      r7   r0  r0  �  sT  é € ð —F‘Fœ>¨:Ó6×6€Gà‚ä¨Ð4TÔUÐUà×&Ñ&×6Ð6¨'¯,©,€Jà�\Ô!ä¨Ð4`ÔaÐað Ÿ	™	ÜŒt�zŠzœ,Ÿ/™/Ó*Ó+ß	‰Œ|×&Ñ&¨'¯*©*Ñ4Ó	5ß	‰Œ|×'Ñ'¨9Ñ4Ó	5ß	‰Ü”7—:‘:Óß‰U”7×#Ñ#¤|§¡Ñ6Ó7ß‰U”7—>‘> YÑ.Ó/ß‰V‹Xó	

ó	
÷ 
÷ 
ð 
ð 
ð ð Ÿ™ÜŒt�zŠzœ'Ÿ*™*Ó%Ó&ß	‰Œw×!Ñ! W§Z¡ZÑ/Ó	0ß	‰Œw�~‰~ Ñ*Ó	+ó÷ ÷ ð ð 
ð	 ÷ —läØØ*¨;¨-°yÀÀÐNmÐnô
ð 	
ð
kä(¨¨TÓ2×2ˆä×Ò × >Ñ >À
ÓK×KÐKð €GÔà#€GÔà
�)‰)‹+×ÐäÐGÈÏÉÀ~ÐVÐdgÔhÐhòm 7ò
ññ 3áKøä$ô kä¨Ð6ZÐ[^ÐZ_Ð4`ÔaÐgjÐjûðkúñ ùs§   ‚K,œJ:�'K,ÁD,K,Å1J=Å2
K,Å=BK,È	K È

K,È
K,È K,È(K,È=K ÉKÉ(K É5KÉ6K É:!K,ÊK*ÊK,Ê=K,Ë K,ËK ËK ËK'ËK"Ë"K'Ë'K,z)/api/voucher-targets/{device_id}/profilesc                ó0   € V ^8„  d   QhR\         R\        /# )r0   r2   r1   )r4   r   )r6   s   "r7   r8   r8   Ð  s   € ÷ :ñ :¬#ð :´<ñ :r9   c              ƒ   óz  "  € \        W4      G R j  x€L
 p \        P                  ! VP                  4      G R j  x€L
 pTP                  \        \        4      P                  \        P                  R8H  4      4      G R j  x€L
 P                  4       P                  4       pT Uu/ uF#  qfP                  ;'       g    TP                  TbK%  	  ppRT Uu. uEF'  qˆP                  R4      '       g   K  RTP                  R4      RTP                  R4      T9   RTP                  R4      T9   d"   YxP                  R4      ,          P                   MR R	TP                  R4      T9   d"   YxP                  R4      ,          P"                  MR R
TP                  R4      T9   d"   YxP                  R4      ,          P$                  MR RTP                  R4      T9   d"   YxP                  R4      ,          P&                  MR /NEK*  	  up/#  ELö ELÐ  \         d   p\        RRR7      ThR p?ii ; i EL®u upi u upi 5i)Nr  z#Profile MikroTik tidak dapat dimuatr<   Tr›   r¨   Ú
configuredrD   rä   r  r  )rS   r$  r%  Úlist_hotspot_profilesr%   r
   rA   r   r   rB   r@   rE   r­   r  r¨   r?   rD   rä   r  r  )	r2   r1   r)  Úremote_profilesr+  r4  rº   Úby_localÚitems	   &&       r7   Úload_target_profilesr9  Î  sä  é € ô % RÓ3×3€Gðdä '× 1Ò 1°'×2OÑ2OÓ P×Pˆð Ÿ
™
¤6¬.Ó#9×#?Ñ#?Ä×@XÑ@XÐ\`Ñ@`Ó#aÓb×b×kÑkÓm×qÑqÓs€Já6@ÓA±j°—‘×)Ð) 1§6¡6¨1Ò,±j€HÐAàñ $ó
9ò $ˆD§x¡x°×'7ôy˜& $§(¡(¨6Ó"2°LÀ$Ç(Á(È6ÓBRÐV^ÑB^à¨t¯x©x¸Ó/?À8Ô/Kˆh—x‘x Ó'Õ(×+Ò+ÐQUà°T·X±X¸fÓ5EÈÔ5Q�Ÿ(™( 6Ó*Õ+×1Ò1ÐW[àÈÏÉÐRXÓIYÐ]eÔIe˜8§H¡H¨VÓ$4Õ5×EÒEÐkoàÐQU×QYÑQYÐZ`ÓQaÐemÔQm˜x¯©°Ó(8Õ9×MÒMÐswôyñ $ñ
9ð 
:ð 
:ò 4ò Qøä$ô dä¨Ð4YÔZÐ`cÐcûðdúò cùâAùò
9ùsy   ‚H;‘H’H;—#H ºH
»H ¿AH;Â H.Â$H;Â%H1Â<H1ÃH;ÃH6Ã3DH6ÈH;È
H ÈH+ÈH&È&H+È+H;È1
H;z/vouchers/generateÚsameÚmixed_alnumc          "      ó~  € V ^8„  d   Qh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\        /# )r0   r“   NrÊ   r2   rÍ   Úagent_idÚ	user_modeÚcharacter_lengthÚcharacter_moderä   rc   Úlimit_uptimeÚlimit_idle_timerÉ   rË   r  r1   r”   )r4   rd   r   r   )r6   s   "r7   r8   r8   ò  s  € ÷ `\ñ `\ä�d•
ð`\ä25¸µ*ð`\ô �T�zð	`\ô 36ð	`\ô �D�jð`\ô ð`\ô 69ð`\ô UXð`\ô ��:ð`\ô 47¸µ:ð`\ô [^Ð`dÕZdð`\ô ˜4•Zð`\ô ;>À½*ð`\ô ]`ÐbfÕ\fð`\ô �4�Zð`\ô +7ð`\ô  ñ!`\r9   c           
   ƒ   ó  a("  € ^Tu;8:  d   R8:  g   M \        RRR7      h \        WVV4       \	        Yò4      G Rj  x€L
 w  ppTe-   TP
                  e   TTP
                  8w  d   \        RRR7      hT '       d   TP                  \        T 4      G Rj  x€L
 MRpT '       d(   T'       d   TP                  '       g   \        RRR7      hT'       d¨   TP                  ;'       g    TP                  p\        TP                  ;'       g    ^ 4      pTP                  ;'       g    RpTP                  p\        TP                  ;'       g    ^4      p\        TP                   ;'       g
    TR	,          4      pM{T;'       g    R
P#                  4       p\        T;'       g    ^ 4      pT
;'       g    RP#                  4       pTp\%        ^\'        \        T	;'       g    ^4      R4      4      R	,          p\)        TTP*                  4      G Rj  x€L
 pRpT'       d   TP                  \,        T4      G Rj  x€L
 pT;'       gM    R\.        P0                  ! 4       P3                  R4       R\4        P6                  ! ^4      P9                  4        2P#                  4       pT;'       g    RP#                  4       pT'       ge   T'       d]   TP                   RTP:                  ;'       g    R R\.        P0                  ! 4       P3                  R4      P9                  4        RT R2p\=        RD/ RTbRTbRTbRTbRT'       d   TP*                  MRbRTP
                  bRTP*                  bRTP*                  bRTbRRbRT'       d   TP*                  MRbR XbR!TbR"TbR#TbR$TbR%TbR&Tb pTP?                  T4       TPA                  4       G Rj  x€L
  \.        P0                  ! \B        PD                  4      \G        TR'7      ,           p . p!. p"\I        T4       Fh  p \        YVT4      w  o(p#\J        ;QJ d    T(3R) lT" 4       F  '       g   K   R(M	  R*M! T(3R) lT" 4       4      '       d   KR  T"PM                  S(T#34       Kj  	  T" EF	  w  o(p#\O        RD/ R+S(bR,S(bR-TR.8X  d   \Q        T#4      MRbR/TbR0TbR&TbRTbRT'       d   TP*                  MRbRTbR1T'       d   R2MR3bRT'       d   TP*                  MRbR4T'       d%   \.        P0                  ! \B        PD                  4      MRbR5T bR"TbR#TbRTbRRbR6TP*                  bRTP*                  bRTP
                  bRTP*                  b p$TP?                  T$4       T!PM                  T$4       EK  	  TPA                  4       G Rj  x€L
  \S        T!4       Fð  w  p%p$T"T%,          w  o(p#\        T \.        P0                  ! \B        PD                  4      ,
          PU                  4       4      p&R7T& R8TP*                   R9T$PV                   2T'       d   R:TP                   2MR,           p' \X        PZ                  ! TP\                  S(T#TTTT'4      G Rj  x€L
  R;T$n/        \.        P0                  ! \B        PD                  4      T$n0        Kò  	  R;Tn/        TTn4        TPe                  4       G Rj  x€L
  \k        R@TP*                   RA2RBRC7      #   \         d   p\        R\        T4      R7      ThRp?ii ; i ELÙ ELƒ EL ELè ELS EL~ Lµ  \b         dK   pR<T$n/        R<Tn/        TPe                  4       G Rj  x€L 
  \        R=R>T$Pf                   R?T 2R7      ThRp?ii ; i Lµ5i)Err   i�  r–   z!Jumlah voucher harus 1 sampai 400r<   Nz(Site tidak cocok dengan perangkat tujuanz0Hotspot Profile tidak aktif atau tidak ditemukanr  r  rš   r  ÚBz%y%m%d%H%M%Srã   r    ÚGENr^   z%d%b%yÚpcsrÉ   rÊ   rÍ   rä   r=  r  r2   Ú
created_byrË   r²   Úpendingr“   rc   Úduration_secondsrA  rB  r>  r?  r@  )ÚsecondsTc              3   ó:   <"  € T F  q^ ,          S8H  x € K  	  R# 5i)r   N© )Ú.0r8  rm   s   & €r7   Ú	<genexpr>Ú$generate_vouchers.<locals>.<genexpr>p  s   øé € Ð@±¨˜A•w !–|³ùs   ƒFrò   rO   rö   ÚseparateÚcredential_modeÚcredential_lengthr´   rÅ   rÂ   Úsold_atré   r³   zbw:v1;validity=z;b:z c:z ag:r  Úfailedr  zGagal push user z ke RouterOS: ú/vouchers?batch=z&generated=1r  ©Úurlr=   rL  )6r
   r&   r'   rd   rK   r  r?   r   r@   r  r¨   r4   rä   r  r  r  r  rj   rð   r#  rS   rD   r   r   ÚnowrÔ   ÚsecretsÚ	token_hexÚupperÚarear   r'  Úflushr   Úutcr   ÚrangeÚanyrÓ   r   r(   Ú	enumerateÚtotal_secondsrò   r$  r%  Úadd_hotspot_userr²   Úsync_updated_atr%   r(  rO   Úgenerated_countr   ))r“   rÊ   r2   rÍ   r=  r>  r?  r@  rä   rc   rA  rB  rÉ   rË   r  r1   r”   r+  rI   r^   Úprofile_rowÚprofile_nameÚresolved_priceÚresolved_uptimeÚresolved_idleÚresolved_daysÚresolved_secondsr)  ÚagentÚgenerated_batch_codeÚresolved_commentr’   ré   Úcreated_vouchersÚgenerated_credsrº   rZ   ÚidxÚvalidity_secondsÚcomment_textrm   s)   &&&&&&&&&&&&&&&&&                       @r7   Úgenerate_vouchersru  ð  s.  øé € ð, �Ö˜CÖä¨Ð4WÔXÐXðGä˜Y¸.ÔIô & bÓ4×4�E€BˆàÒ˜rŸz™zÒ5¸'ÀRÇZÁZÔ:Oä¨Ð4^Ô_Ð_÷ ?I˜Ÿ™œ~¨zÓ:×:Ð:Èd€KçŸ;¨k×.C×.CÐ.Cä¨Ð4fÔgÐgçØ"×0Ñ0×DÐD°K×4DÑ4DˆÜ˜[×.Ñ.×3Ð3°!Ó4ˆØ%×5Ñ5×>Ð>¸ˆØ#×0Ñ0ˆÜ˜K×;Ñ;×AÐA¸rÓBˆÜ˜{×AÑA×\Ð\ÀmÐV[ÕF[Ó]Ñà×,Ð, 9×3Ñ3Ó5ˆÜ˜UŸZ˜Z a›ˆØ'×0Ð0¨5×7Ñ7Ó9ˆØ'ˆÜ˜q¤#¤c¨-×*=Ð*=¸2Ó&>ÀÓ"DÓEÈÕMÐô % R¨¯©Ó/×/€Gð €Eçà—f‘fœ\¨8Ó4×4ˆð '×vÐv¨A¬h¯lªl«n×.EÑ.EÀnÓ.UÐ-VÐVWÔX_×XiÒXiÐjkÓXl×XrÑXrÓXtÐWuÐ*v×}Ñ}ÓÐð  Ÿ˜ 2×,Ñ,Ó.Ðç§à#Ÿj™j˜\¨¨5¯:©:×+>Ð+>¸Ð*?¸qÄÇÂÃ×AXÑAXÐYaÓAb×AhÑAhÓAjÐ@kÐklÐmuÐlvÐvyÐzÐô ò á'ðá1=ðáHPðáXfð÷ #�—’¨øð	ð 79·j²jð	ð MOÏEÊEð	ð _d×^fÒ^fð	ñ !ðñ /8ð÷ WbÀKÇNÂNÐgkøðñ $ðñ 7Gðñ Veðñ wDðñ ðñ /?ðñ P^ð€Eð ‡F�Fˆ5„Mà
�(‰(‹*×Ðô —’œhŸl™lÓ+¬iÐ@PÔ.QÕQ€Jà&(Ðà-/€Oô �8Ž_ˆàä'¨	À^ÓT‰DˆAˆqç“3Ô@±Ó@—3—3’3Ô@±Ó@×@Ô@à×&Ñ&¨¨1 vÔ.áñ ô  ‰ˆˆ1äò *
áð*
áð*
ð 6?À*Ô5L¤¨qÔ 1ÐRVøð	*
ñ &ð*
ñ /ð*
ñ *ð*
ñ !ð*
÷ *5�{—~’~¸$øð*
ñ  !ð!*
÷$ #‘6¨øð%*
÷( "'�U—X’X¨Døð)*
÷, 38”H—L’L¤§¡Ô.¸Tøð-*
ñ0 "ð1*
ñ4 )ð5*
ñ8 *ð9*
ñ< %ð=*
ñ@ "ðA*
ðD —X’XðE*
ðH —e’eðI*
ðL —J’JðM*
ðP —x’xðQ*
ˆðX 	�‰ˆqŒ	à×Ñ ×"ña  ðh �(‰(‹*×Ðô Ð,Ö-‰ˆˆQà˜sÕ#‰ˆˆ1ä 
¬X¯\ª\¼(¿,¹,Ó-GÕ G×VÑVÓXÓYÐà(Ð)9Ð(:¸#¸e¿h¹h¸ZÀsÈ1Ï6É6È(ÐS×nsÐY]Ð^c×^hÑ^hÐ]iÑWjÐy{Õ|ˆð	uä×#Ò# G×$<Ñ$<¸aÀÀLÐRaÐcpÐr~Ó×Ðà$ˆAŒMä (§¢¬X¯\©\Ó :ˆAÖñ .ð8 !€EÔà$€EÔà
�)‰)‹+×ÐäÐ"2°5·8±8°*¸LÐ IÐWZÔ[Ð[øôI !ô Gä¨´C¸³HÔ=À3ÐFûðGúò 5ò ;ò, 0ò 5òD ò\ ñ @øô )ô 	uà$ˆAŒMà (ˆEÔà—)‘)“+×Ñä¨CÐ:JÈ1Ï:É:È,ÐVdÐehÐdiÐ8jÔkÐqtÐtûð	uúñ  ùs}  ƒ^£[, ¯^½\¾>^Á=^Â\Â^Â%^Â-^Â?^Ã^Ã'$^Ä^Ä&&^Å^Å,^Æ^Æ#^Æ3A^È\È^È^È7\È8^ÉA#^Ê)^Ë^Ë
^Ë*B^ÎA	^Ï\"ÏA:^Ñ^Ñ-A^Ó^Ó^Ó+^ÔB%^Ö'\%Ö(B ^Ù	)\*Ù2\(Ù34\*Ú'%^Û^Û^Û,\Û7\Ü\Ü^Ü^Ü^Ü^Ü"^Ü%^Ü(\*Ü*]?Ü5!]:Ý]Ý#]:Ý:]?Ý?^z/vouchers/batches//printz/vouchers/batches/printc               ƒ   ó$   "  € \        R RR7      # 5i)z/vouchers?notice=select_batchr  rV  )r   rL  r9   r7   Úmissing_batch_printrw  Ø  s   é € ô Ð ?ÈSÔQÐQùs   ‚z"/vouchers/batches/{batch_id}/print)rŽ   r,   c                ó<   € V ^8„  d   QhR\         R\        R\        /# )r0   r³   r�   r1   ©r4   r   r   )r6   s   "r7   r8   r8   æ  s&   € ÷ qñ q¬ð q´gð qÄ<ñ qr9   c              ƒ   óŠ  "  € VP                  \        V 4      G R j  x€L
 pVf   \        RRR7      hVP                  \	        \
        4      P                  \
        P                  VP                  8H  4      P                  \
        P                  P                  4       4      4      G R j  x€L
 P                  4       P                  4       pRpRpVP                  '       d~   VP                  \        VP                  4      G R j  x€L
 pV'       dM   VP                  '       d;   RVP                  P!                  4       9  d   RVP                   2MVP                  pM°VP"                  '       dŸ   VP                  \$        VP"                  4      G R j  x€L
 pV'       do   VP                  '       d]   VP                  P'                  RR	4      P'                  R
R	4      p	RVP                  P!                  4       9  d   RV	 2MVP                  p. p
\)        V4       EFå  w  r¼R pVP*                  '       d    \-        VP*                  4      pVP0                  R8H  ;'       g`    VP0                  R8H  ;'       gI    VP2                  R8H  ;'       g2    V'       * ;'       g#    YÜP4                  ;'       g    VP6                  8H  p\9        VP:                  ;'       g    VP:                  VP<                  4      pVP>                  e   VP>                  MVP>                  pRVR 2P'                  RR4      pT
PA                  RVP                  RV^,           RVP4                  ;'       g    VP6                  RTRTRVPB                  RTRTRTRVPD                  ;'       g    VPD                  ;'       g    R	RVP4                  ;'       g    VP6                  R\G        VP4                  ;'       g    VP6                  4      /4       EKè  	  \H        PK                  VRRVRVR VR!V
/R"7      #  EL EL~ EL' EL›  \.         d    R p ELöi ; i5i)#Nr;   r—   r<   ú	Munara.Idúhttp://munara.netÚmunaraú
Munara.Id_úMK-SITE-r    úMK-Úlegacy_samer:  ræ   ú,.0frç   rè   rD   ÚindexrO   rP   Úis_same_moderÊ   rä   rå   ÚvalidityrË   Ú
qr_contentÚqr_data_uriúvoucher_batch_print.htmlr’   Ú	site_nameÚ	login_urlrU   r§   )&r?   r   r
   rA   r   r   rB   r³   rD   rC   rñ   rE   r­   r  r   r¨   rk   r2   r   r÷   ra  rö   r#   Ú	ExceptionrQ  r>  rO   rò   rn   rA  rc   rä   rÓ   rÊ   rË   r�   r·   r¸   )r³   r�   r1   r’   rU   r‰  rŠ  ÚsiteÚdevÚdev_cleanedÚ	printablerr  ÚvoucherrP   r„  r…  Ú	price_valrå   s   &&&               r7   Úprint_voucher_batchr’  ä  s–  é € ð —&‘&œ xÓ0×0€Eà‚}ä¨Ð4SÔTÐTà—j‘j¤¬£×!6Ñ!6´w×7GÑ7GÈ5Ï8É8Ñ7SÓ!T×!]Ñ!]Ô^e×^hÑ^h×^lÑ^lÓ^nÓ!oÓp×p×yÑyÓ{×Ñó  B€Hð €Ià#€Ià‡}‡}€}à—V‘VœD %§-¡-Ó0×0ˆç�D—I—I�Ià4<ÀDÇIÁIÇOÁOÓDUÔ4U˜* T§Y¡Y KÑ0Ð[_×[dÑ[dˆIøà	��ˆà—F‘Fœ>¨5¯?©?Ó;×;ˆç�3—8—8�8àŸ(™(×*Ñ*¨:°rÓ:×BÑBÀ5È"ÓMˆKà6>ÀcÇhÁhÇnÁnÓFVÔ6V˜* [ MÑ2Ð\_×\dÑ\dˆIð €Iä! (×+‰ˆàˆà×&×&Ð&ð ä)¨'×*EÑ*EÓF�ð  ×/Ñ/°=Ñ@÷ Gð Gà×/Ñ/°6Ñ9÷Gð Gð Ÿ™¨6Ñ1÷	Gð Gð %œ÷Gð Gð !×%5Ñ%5×%EÐ%E¸¿¹ÑFð 	ô $ G×$8Ñ$8×$NÐ$N¸E×<NÑ<NÐPU×PcÑPcÓdˆà%,§]¡]Ò%>�G—M’MÀEÇKÁKˆ	à 	¨$Ð/Ð0×8Ñ8¸¸cÓBˆð 	×Ñà�'—*‘*à�S˜1•Wà˜×(Ñ(×8Ð8¨G¯L©Là˜à˜Là�w—‘à�Yà˜à˜à�w—‘×=Ð=¨%¯-©-×=Ð=¸2à˜'×*Ñ*×:Ð:¨g¯l©lØÔ0°×1AÑ1A×1QÐ1QÀWÇ\Á\ÓRð/
÷ 	ñI ,ôB ×%Ñ%¨gÐ<Và�à�Yà�Yà�Ið
aÐ%ó 
ð 
òK 1ò qò 1ò <øô, ô  à“ð üsÓ   ‚QœP#�BQÂ(P&Â)5QÃ#QÄP)ÄQÄQÄ!AQÅ.#QÆP,ÆQÆQÆ0BQÈ4P/É	QÉQÉ6QÊQÊQÊ0&QËBQÍ#5QÎQÎ-QÏ$QÏ(<QÐ&QÐ)QÐ,QÐ/Q Ð<QÐ?Q Ñ Qz!/vouchers/batches/{batch_id}/sellc                óH   € V ^8„  d   QhR\         R\         R\        R\        /# )r0   r³   r=  r1   r”   r¿   )r6   s   "r7   r8   r8   _  s6   € ÷ ,iñ ,iäð,iä ð,iô 	ð	,iô 04ñ	,ir9   c           
   ƒ   óÞ  "  € \         ;_uu_4       GR j  x€L
  VP                  \        V 4      G R j  x€L
 pVP                  \        V4      G R j  x€L
 pV'       d   V'       d   VP                  '       g   \        RRR7      hVP                  \        \        4      P                  \        P                  V 8H  \        P                  R8H  4      4      G R j  x€L
 P                  4       P                  4       pV'       g   \        RRR7      h\        P                  ! \         P"                  4      pV F2  pVP$                  Vn        RVn        Wxn        VP*                  Vn        K4  	  VP$                  Vn        VP/                  4       G R j  x€L
  \1        RV  R	\3        V4       2R
R7      uuR R R 4      GR j  x€L
  #  EL¬ EL‘ ELv Lñ L= L  + GR j  x€L 
 '       g   i     R # ; i5i)Nr;   z+Batch atau agen tidak ditemukan/tidak aktifr<   rÂ   r/  z/Tidak ada voucher yang tersedia dalam batch inirÅ   rU  z&sold=r  rV  )Ú_batch_action_lockr?   r   r   r@   r
   rA   r   r   rB   r³   r´   rE   r­   r   rX  r   r^  rD   r=  rS  rä   Ú
sold_pricer(  r   Úlen)	r³   r=  r1   r”   r’   rm  rU   rX  rZ   s	   &&&&     r7   Úsell_voucher_batchr˜  ]  se  é € ÷ "×!Ö!à—f‘fœ\¨8Ó4×4ˆà—f‘fœ\¨8Ó4×4ˆçŸE¨¯¯¨ä¨CÐ8eÔfÐfàŸ*™*¤V¬G£_×%:Ñ%:¼7×;KÑ;KÈxÑ;WÔY`×YgÑYgÐkvÑYvÓ%wÓx×x÷  Bñ  Bó  D÷  Hñ  Hó  Jˆçä¨CÐ8iÔjÐjô �lŠlœ8Ÿ<™<Ó(ˆãˆAàŸ™ˆAŒJàˆAŒHàŒIàŸ7™7ˆAŽLñ ð Ÿ™ˆŒà�i‰i‹k×ÐäÐ&6°x°jÀÄsÈ8Ã}ÀoÐ$VÐdgÔh÷I "×!Õ!â4â4ñ yñ0 	÷E "×!×!Ó!üsª   ‚G-•G–G-™G³G´GÁGÁGÁGÁ&GÁ8A GÃG
Ã'GÄBGÆGÆGÆ.G-Æ;GÆ<G-ÇGÇGÇ
GÇGÇG-ÇG*	ÇGÇ
G*	Ç"G*	Ç$	G-z#/vouchers/batches/{batch_id}/deletec                ó<   € V ^8„  d   QhR\         R\        R\        /# )r0   r³   r1   r”   r¿   )r6   s   "r7   r8   r8   �  s+   € ÷ !Rñ !RÜð!Räð!Rô ñ!Rr9   c              ƒ   ó  "  € \         ;_uu_4       GR j  x€L
  VP                  \        V 4      G R j  x€L
 pVf   \        RRR7      hVP	                  \        \        4      P                  \        P                  V 8H  4      P                  \        P                  P                  4       4      4      G R j  x€L
 P                  4       P                  4       pV'       dá   \        YP                  ;'       g    V^ ,          P                  4      G R j  x€L
 p. pV Ff  pVP                   ;'       g    VP"                  p \$        P&                  ! VP(                  V4      G R j  x€L
 '       g   VP+                  V4       Kf  Kh  	  V'       d3   \        RR\/        V4       RRP1                  VR,          4       2R7      hV F  pVP3                  V4      G R j  x€L
  K  	  VP3                  V4      G R j  x€L
  VP5                  4       G R j  x€L
  \7        R	R
R7      uuR R R 4      GR j  x€L
  #  EL EL  EL� EL( LÙ  \,         d    TP+                  T4        EKD  i ; i LŠ Lo LY L=  + GR j  x€L 
 '       g   i     R # ; i5i)Nr;   r—   r<   r  z0Batch belum dihapus. Gagal menghapus/verifikasi z user di RouterOS: z, :Né   Nz/vouchers?batch_deleted=1r  rV  )r•  r?   r   r
   rA   r   r   rB   r³   rC   rD   rñ   rE   r­   rS   r2   rO   rò   r$  r%  Údelete_hotspot_userrÓ   r%   r—  rÑ   Údeleter(  r   )	r³   r1   r”   r’   rU   r)  rT  r�  rO   s	   &&&      r7   Údelete_voucher_batchrž  Ž  s   é € ÷ "×!Ö!Ø—f‘fœ\¨8Ó4×4ˆØŠ=Ü¨CÐ8WÔXÐXØŸ*™*Ü”7‹O×!Ñ!¤'×"2Ñ"2°hÑ">Ó?×HÑHÌÏÉÏÉÓIYÓZó
÷ 
ç‰7‹9—S‘S“Uð 	÷ Ü,¨R·±×1YÐ1YÀHÈQÅK×DYÑDYÓZ×ZˆGØ "ˆFÛ#�Ø"×+Ñ+×;Ð;¨w¯|©|�ð,Ü!(×!2Ò!2°7×3NÑ3NÐPXÓ!Y×YÖYØŸ™ hÖ/ñ Zñ $÷ Ü#Ø #ØMÌcÐRXËkÈ]ÐZmÐnr×nwÑnwÐx~ð  @Bõ  yCó  oDð  nEð  Fôð ó
  ˆGØ—)‘)˜GÓ$×$Ò$ñ  à�i‰i˜Ó×ÐØ�i‰i‹k×ÐÜÐ$?ÈSÔQ÷9 "×!Õ!Ú4ò
ò
 [ñ
 Zøä0ô ,Ø—M‘M (×+Ð+ð,úñ %ÙÙ÷7 "×!×!Ó!üs  ‚J•H0–J™I*³H3´BI*Â5H6Â6'I*ÃI*Ã6I*ÄH9ÄI*Ä0I*Ä>$H>Å"H<
Å#	H>Å-H>Å>I*ÆAI*ÇI"
ÇI*Ç4I$Ç5I*ÈI&ÈI*ÈJÈ*I(È+JÈ3I*È6I*È9I*È<H>È>I	ÉI*ÉI	ÉI*É$I*É&I*É(JÉ*J	É0I3É1
J	É<J	É>	Jz/vouchers/{voucher_id}/deletec                ó<   € V ^8„  d   QhR\         R\        R\        /# )r0   Ú
voucher_idr1   r”   r¿   )r6   s   "r7   r8   r8   ³  s+   € ÷ Hñ HÜðHäðHô ñHr9   c              ƒ   óø  "  € VP                  \        V 4      G R j  x€L
 pVf   \        RRR7      hVP                  ;'       g    VP                  pV'       dH    \        WP                  4      G R j  x€L
 p\        P                  ! VP                  V4      G R j  x€L
  VP                  V4      G R j  x€L
  VP                  4       G R j  x€L
  \        RRR7      #  LÂ Lm LF  \         d     LQi ; i L@ L*5i)Nr;   úVoucher tidak ditemukanr<   z/vouchers?deleted=1r  rV  )r?   r   r
   rO   rò   rS   r2   r$  r%  rœ  r‹  r�  r(  r   )r   r1   r”   r�  rO   r)  s   &&&   r7   Údelete_single_voucherr£  ²  sÔ   é € ð —F‘Fœ7 JÓ/×/€GØ‚Ü¨Ð4MÔNÐNà×Ñ×/Ð/ 7§<¡<€Hßð	Ü,¨R×1BÑ1BÓC×CˆGÜ×#Ò# G×$?Ñ$?ÀÓJ×JÐJð �)‰)�GÓ
×ÐØ
�)‰)‹+×ÐÜÐ 5À3ÔGÐGñ 0ñ DÙJøÜô 	Ùð	úñ Ùùs{   ‚C:œC�'C:ÁC:ÁC% Á3C!Á4(C% ÂC#ÂC% Â!C:Â5C6Â6C:ÃC8ÃC:Ã!C% Ã#C% Ã%C3Ã0C:Ã2C3Ã3C:Ã8C:z/vouchers/{voucher_id}/printc                ó<   € V ^8„  d   QhR\         R\        R\        /# )r0   r   r�   r1   ry  )r6   s   "r7   r8   r8   Ê  s!   € ÷ 8ñ 8¬3ð 8¼ð 8Älñ 8r9   c              ƒ   ó  "  € VP                  \        V 4      G R j  x€L
 pVf   \        RRR7      hVP                  '       d)   VP                  \        VP                  4      G R j  x€L
 MR pRpRpVP
                  '       d~   VP                  \        VP
                  4      G R j  x€L
 pV'       dM   VP                  '       d;   RVP                  P                  4       9  d   RVP                   2MVP                  pM°VP                  '       dŸ   VP                  \        VP                  4      G R j  x€L
 pV'       do   VP                  '       d]   VP                  P                  RR	4      P                  R
R	4      p	RVP                  P                  4       9  d   RV	 2MVP                  pR p
VP                  '       d    \        VP                  4      p
VP                  R8H  ;'       gj    VP                  R8H  ;'       gS    T;'       d    VP                   R8H  ;'       g2    V
'       * ;'       g#    Y£P"                  ;'       g    VP$                  8H  p\'        VP(                  ;'       g    V'       d   VP(                  MR V'       d   VP*                  MR 4      pVP,                  e   VP,                  MV'       d   VP,                  M^ pRVR 2P                  RR4      pRVP.                  R^RVP"                  ;'       g    VP$                  RT
RTRVP0                  RTRTRTRVP2                  ;'       g    V'       d   VP2                  MR	RVP"                  ;'       g    VP$                  R\5        VP"                  ;'       g    VP$                  4      /.pT;'       g    \	        RVP.                   2R7      p\6        P9                  VRR VR!VR"VR#V/R$7      #  ELÊ EL‚ ELE EL¹  \         d    R p
 EL'i ; i5i)%Nr;   r¢  r<   r{  r|  r}  r~  r  r    r€  r�  r:  ræ   r‚  rç   rè   rD   rƒ  rO   rP   r„  rÊ   rä   rå   r…  rË   r†  r‡  zVOUCHER-)rÉ   rˆ  r’   r‰  rŠ  rU   r§   )r?   r   r
   r³   r   r  r   r¨   rk   r2   r   r÷   rö   r#   r‹  rQ  r>  rO   rò   rn   rA  rc   rä   rD   rÊ   rË   r�   r·   r¸   )r   r�   r1   r�  r’   r‰  rŠ  rŒ  r�  rŽ  rP   r„  r…  r‘  rå   r�  Ú
mock_batchs   &&&              r7   Úprint_single_voucherr§  É  ss  é € à—F‘Fœ7 JÓ/×/€GØ‚Ü¨Ð4MÔNÐNØ<C×<L×<LÐ<L�"—&‘&œ w×'7Ñ'7Ó8×8Ð8ÐRV€Eà€IØ#€IØ‡‡€Ø—V‘VœD '§/¡/Ó2×2ˆß�D—I—I�IØ4<ÀDÇIÁIÇOÁOÓDUÔ4U˜* T§Y¡Y KÑ0Ð[_×[dÑ[dˆIøØ	×	×	Ð	Ø—F‘Fœ>¨7×+<Ñ+<Ó=×=ˆß�3—8—8�8ØŸ(™(×*Ñ*¨:°rÓ:×BÑBÀ5È"ÓMˆKØ6>ÀcÇhÁhÇnÁnÓFVÔ6V˜* [ MÑ2Ð\_×\dÑ\dˆIà€HØ×"×"Ð"ð	Ü% g×&AÑ&AÓBˆHð ×+Ñ+¨}Ñ<÷ Cð CØ×+Ñ+¨vÑ5÷Cð Cà×8Ð8˜uŸ™°&Ñ8÷Cð Cð !”L÷Cð Cð ×!1Ñ!1×!AÐ!A°W·\±\ÑBð	 ô   × 4Ñ 4× _Ð _Ïu¸×9KÒ9KÐZ^×x}Ðaf×atÒatð  DHó  I€HØ!(§¡Ò!:�—’×PUÀÇÂÐ[\€IØ˜I dÐ+Ð,×4Ñ4°S¸#Ó>€Oð 	ˆg�j‰jØ�Ø�G×$Ñ$×4Ð4¨¯©Ø�HØ˜Ø�7—?‘?Ø�Ø˜?Ø�HØ�7—?‘?×FÐF¿ u§}¢}À2Ø�g×&Ñ&×6Ð6¨'¯,©,ØÔ,¨W×-=Ñ-=×-MÐ-MÀÇÁÓNðð €Ið ×JÐJœ,°H¸W¿Z¹Z¸LÐ2IÔJ€JÜ×%Ñ%¨gÐ<VØ�Ø�YØ�YØ�Ið	aÐ%ó ð òe 0ò 9ò
 3ò >øô ô 	Ø‹Hð	üsö   ‚PœO&�&PÁ#PÁ'O)Á(PÂ#PÂ'O,Â(PÂ4PÃAPÄ#PÄ6O/Ä7PÅPÅA/PÇO2 ÇPÇ1PÈ	PÈPÈ)PÈ8PÉ&PÉ3PÉ<PÊ3PËAPÌ5PÍPÍ
 PÍ+$PÎPÎ,;PÏ)PÏ,PÏ/PÏ2PÏ?PÐPÐPrY   )Vr   r   r   rY  r‚   r…   r$  r!  Úfastapir   r   r   r	   r
   Úfastapi.responsesr   r   r   r   Úfastapi.templatingr   Úsqlalchemy.ext.asyncior   Ú
sqlalchemyr   r   r   r   r   Úapp.core.databaser   Úapp.core.securityr   Úapp.models.modelsr   r   r   r   r   r   r   r   r    r!   r"   Úapp.core.device_credentialsr#   Úapp.core.mikrotikr$   r%   Úapp.core.voucher_generationr&   r'   r(   Úosr}   ÚrouterÚpathÚdirnameÚabspathÚ__file__ÚBASE_DIRrÑ   r·   ÚLockr•  rK   rS   r`   rn   r�   r?   r½   rÛ   r  Úpostr,  r0  r9  ru  rw  r’  r˜  rž  r£  r§  rL  r9   r7   Ú<module>r¼     sò  ðß 2Ñ 2ã ã 	ã ã ã ç DÕ Dç ]Ó ]å .å /ç 6Õ 6å $å +÷÷ ÷ ñ õ 7ç Lç Så 6ã 	ã ñ 
¡©°~ÀzÐS`Ó)aÓ!bÐ cÔ	d€à�7‰7�?‰?˜2Ÿ7™7Ÿ?™?¨2¯7©7¯?©?¸2¿7¹7¿?¹?È8Ó;TÓ+UÓVÓW€á b§g¡g§l¡l°8¸_Ó&MÔN€	à—\’\“^Ð ÷÷<Sõ÷<õ8*ð, ‡�ˆK¨€Ó5ð '+Àà!á˜v“±g¹mÈNÐ\fÐhuÓ>vÓ6wöMó 6ðMðf ‡�Ð#Ó$ð "á˜v“á™-¨¸
ÀMÓRÓSö^ ó %ð^ ðH ‡�Ð%Ó&ñ ˜v“á™-¨¸
ÀMÓRÓSöDó 'ðDðT ‡�Ð Ó!ñ �S“	±°S³	ÉÈSË	á˜#“Y©t°C«yÑQUÐV[ÓQ\á˜T›
±$°q³'á $ R£ÁTÈ&Ã\á˜#“Y±7¸6³?á™-¨°zÓBÓCöIJó "ðIJð^ ‡�Ð4Ó5ñ ˜v“Ù™-¨°wÀ
ÓKÓLö;ió 6ð;ið@ ‡�Ð7Ó8áBIÈ&Ã/ö :ó 9ð:ð@ ‡�Ð!Ó"ñ " $›Z¹tÀD»zá  ›J¹¸S»	á ›:á˜&“\¹4À»7ÑZ^Ð_lÓZmá˜T›
ÁÀTÃ
ÑgkÐlpÓgqá"& t£*ÁtÈDÃzÑimÐnrÓisá˜t›*¹À»á™-¨¸
ÀMÓRÓSö!`\ó #ð`\ðL ‡�Ð&°|€ÓDà‡�Ð%°l€ÓCñRó Dó EðRð ‡�Ð0ÀÑ]dÑerð  tBð  DNð  P]ó  f^ó  ^_ð  ]`€ó  aáRYÐZ`ÓRaö qó aðqðn ‡�Ð0Ó1ñ $(¨£9á˜v“±g¹mÈNÐ\fÐhuÓ>vÓ6wö	,ió 2ð,ið^ ‡�Ð2Ó3ñ ˜v“Ù™-¨¸
ÀMÓRÓSö!Ró 4ð!RðF ‡�Ð,Ó-ñ ˜v“Ù™-¨¸
ÀMÓRÓSöHó .ðHð, ‡�Ð*¸<ÑW^Ñ_lÐm{ð  ~Hð  JWó  `Xó  XYð  WZ€ó  [ÙU\Ð]cÓUdö 8ó [ò8r9   