From 58c9416d16d30f33a535f69c2fcda0750da774fc Mon Sep 17 00:00:00 2001 From: Sayyid Hamid Mahdavi Date: Tue, 20 May 2025 15:55:58 +0330 Subject: [PATCH] method get instead of post for confirm --- apps/pg/admin.py | 2 +- apps/pg/models.py | 10 ++++- apps/pg/views.py | 67 ++++++++++++------------------- main/settings.py | 4 +- static/image/icon.png | Bin 0 -> 15792 bytes static/image/pna.png | Bin 0 -> 25259 bytes templates/base.html | 16 ++++---- templates/pg/charge-confirm.html | 33 +++++++++++++++ templates/pg/charge-request.html | 21 ++++++---- utils/wallet_client.py | 3 +- 10 files changed, 95 insertions(+), 61 deletions(-) create mode 100644 static/image/icon.png create mode 100644 static/image/pna.png create mode 100644 templates/pg/charge-confirm.html diff --git a/apps/pg/admin.py b/apps/pg/admin.py index a8d164f..ec9a153 100644 --- a/apps/pg/admin.py +++ b/apps/pg/admin.py @@ -3,6 +3,6 @@ from .models import ChargeRequest class ChargeRequestAdmin(admin.ModelAdmin): - pass + list_display = ['uuid', 'id'] admin.site.register(ChargeRequest, ChargeRequestAdmin) \ No newline at end of file diff --git a/apps/pg/models.py b/apps/pg/models.py index 32d763f..8d5fffc 100644 --- a/apps/pg/models.py +++ b/apps/pg/models.py @@ -1,5 +1,8 @@ +import urllib.parse + from django.conf import settings from django.db import models +from django.urls import reverse from oauth2_provider.settings import oauth2_settings from apps.core.models import BaseModel @@ -49,8 +52,11 @@ class ChargeRequest(models.Model): def request_sale(self): pna_client = PNAClient() + description = 'from addwin ipg' - pna_callback_url = f'https://ipg.addwin.ir/page/pna_callback/{self.uuid}/' + pna_callback_url = urllib.parse.urljoin( + settings.IPG_BASE_PUBLIC_URL, + reverse("pg:charge-confirm-view", kwargs={"uuid": self.uuid})) response = pna_client.request_normal_sale(self.amount, description, pna_callback_url, order_id=self.id) self.pna_status_code = response['status'] @@ -70,6 +76,8 @@ class ChargeRequest(models.Model): pna_client = PNAClient() description = 'from addwin ipg' response = pna_client.request_normal_sale_confirm(self.pna_token) + # response = {'status': 0, 'cardNumberMasked': '504172******9210', 'rrn': 511629210215, 'appToken': 4101434578524, 'token': 'NDEwMTQzNDU3ODUyNA=='} + if response['status'] == 0: self.pna_status = StateChoices.SUCCESS.value diff --git a/apps/pg/views.py b/apps/pg/views.py index 658f18b..32f14ec 100644 --- a/apps/pg/views.py +++ b/apps/pg/views.py @@ -40,8 +40,9 @@ class ChargeRequestView(UpdateView): slug_url_kwarg = 'uuid' def get_queryset(self): - return ChargeRequest.objects.all() + # return ChargeRequest.objects.all() # return Charge.objects.filter(state__in=[StateChoices.CREATED.value, StateChoices.SUCCESS.value]) + return ChargeRequest.objects.filter(state__in=[StateChoices.CREATED.value]) def form_valid(self, form): self.object = form.save() @@ -57,35 +58,13 @@ class ChargeRequestView(UpdateView): # TODO: redirect to error page return HttpResponseRedirect(reverse('pg:charge-request-view', kwargs={'uuid': charge_request.uuid})) - charge_request.charge_wallet_balance() - # transaction = Transaction.objects.create( - # uuid=charge.uuid, - # payee_id=charge.user.pk, - # payee_type=1, - # payer_id=payer_pk, - # payer_type=2, - # amount=amount, - # details={'description': 'شارژ مجازی کیف پول'} - # ) - # transaction.submit() - # transaction.verify() - # charge.change_state(from_state=StateChoices.PENDING.value, to_state=StateChoices.SUCCESS.value) - messages.success(self.request, 'شارژ انجام شد') - - # except Exception as e: - # print(e) - # messages.error(self.request, 'خطایی رخ داده است') - # charge_request.change_state(from_state=StateChoices.PENDING.value, to_state=StateChoices.EXPECTED_FAILURE.value) - # - # return HttpResponseRedirect(self.get_success_url()) - def get_success_url(self): return self.object.callback_url # return reverse('pg:charge-request-view', kwargs={'pk': self.object.pk}) @method_decorator(csrf_exempt, name='dispatch') class ChargeConfirmView(UpdateView): - template_name = 'pg/charge-request.html' + template_name = 'pg/charge-confirm.html' form_class = ChargeRequestForm # pk_url_kwarg = 'uuid' slug_field = 'uuid' @@ -97,16 +76,11 @@ class ChargeConfirmView(UpdateView): def get(self, request, *args, **kwargs): print('get') - print(args) print(kwargs) - self.object = self.get_object() - charge_request: ChargeRequest = self.get_object() - charge_request.charge_wallet_balance() - charge_request.confirm_sale() - context = self.get_context_data(object=self.object) - messages.success(self.request, 'شارژ انجام شد') + context = self.get_context_data() + messages.info(self.request, 'در پردازش صفحه خطایی وجود دارد.') return self.render_to_response(context) @@ -118,13 +92,25 @@ class ChargeConfirmView(UpdateView): # post = - self.object = self.get_object() - charge_request: ChargeRequest = self.get_object() - charge_request.charge_wallet_balance() - charge_request.confirm_sale() - context = self.get_context_data(object=self.object) - messages.success(self.request, 'شارژ انجام شد') - return self.render_to_response(context) + if 'redirect-to-app' in request.POST: + return super().post(request, *args, **kwargs) + else: + self.object = self.get_object() + + # post = + if request.POST.get('status') == 0: + try: + charge_request: ChargeRequest = self.get_object() + charge_request.charge_wallet_balance() + charge_request.confirm_sale() + messages.success(self.request, 'شارژ انجام شد') + + except Exception as e: + print(e) + messages.success(self.request, str(e)) + + context = self.get_context_data(object=self.object) + return self.render_to_response(context) # def form_valid(self, form): @@ -152,6 +138,5 @@ class ChargeConfirmView(UpdateView): # # return HttpResponseRedirect(self.get_success_url()) - # def get_success_url(self): - # return self.object.callback_url - # return reverse('pg:charge-request-view', kwargs={'pk': self.object.pk}) + def get_success_url(self): + return self.object.callback_url diff --git a/main/settings.py b/main/settings.py index ae083ce..fa0e768 100644 --- a/main/settings.py +++ b/main/settings.py @@ -244,4 +244,6 @@ CACHES = { } } -PNA_CORPORATION_PIN = config('PNA_CORPORATION_PIN') \ No newline at end of file +PNA_CORPORATION_PIN = config('PNA_CORPORATION_PIN') +WALLET_BASE_PUBLIC_URL = config('WALLET_BASE_PUBLIC_URL') +IPG_BASE_PUBLIC_URL = config('IPG_BASE_PUBLIC_URL') diff --git a/static/image/icon.png b/static/image/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..8049773f5dd7fcd9a438c5ecfddc3140337b236a GIT binary patch literal 15792 zcmeHucT`hL_co${h>CO&DTWJ(5K8DBCG=h{MLJ19q=XWLP{jgB6{VM;(m_Oe48p`_29BDK~Ku9XdKvGKfDj1I<;0(pq6wwLWi52CE@C|MMHst z3bvRdCAxIGfrz~T+ zN1gkTrqQJ@j@0$<>K~>_8c7G^6 zyi3A1va*^k+6s4>mE>fF_(X+-zz}Xe!1~0bXg6J*A?kpxYT;_lm)C+KyKV1l<11dN zR*c}j%}0Dq`Qr;bkPuYY5vmoDei3r(>!TFehi*$GVqK2RD{&Ow?`v|D@N)NIwCPjd6*?%>UfqtqPuvx}59x^Fp@RT>8!9}L#dDgK z#{nJYJa|C`Sl6rGPK*^^rrPyWT-Ka9qoc+u=aOwXc;;3QlCS#8nt63;W5-s%Texq& z5_yT@lQk7~u<}TU);D)fIqqMcNeE;eeW2qcKR z>o2pH9KT0ecal0(9{qfHkE}b|06*>Kbr~NzApXG*kcL8wOK=LdwXsI+x;)?%@kC#IHGrur;PMh~C z<`Ku*rFNNXPoFhkqtXsQG0QgJD0pV@g8tii0$DQ68<7`TW$!BDQ^_p8*3P_*IM_<52!qdSa^xkYwvv^vm+=p*ATfF_LQc!Wep<2#QnJRW0d20 zuWKt$HR@u%k{Mi*_RAo9bd5~xZ7?qx^(Xne5$?YblikdDL7s|lBQyMhF_o!2NHHR# z*@%)*PL5AgHIk&2iR#(Z+vqoXZ-i2^wTLv6GNt-|?Z5Tl(l(izyzSeLp3XTu6qguX zQZTo?{_BKphPlEyvMrGVD#9mkU?F^Aw7#l0*r*Ee3+W2!`@%$@(KUuxq~{yF6C1p- z7<8q<`Gch$U&$rUYo6qu1ma=dPgtfy#uDm*ob|tcz30g8sP9NoMps2Xer+{` zv|)3tZ5^>E??vi!Q93O7<}Hd4;`dJ#@7}fmzj@g$FQQVW;(q5B^6fzNddIhq%KQzK zB%l%+H(0T(T8dV`2yyuRa?}3iGJ6te3{=hhszn}7>MUWXI)2xIE&1jIdyUrX+XlBU z+*+g5gxQhqgLVaWK50?>Rp=zXdt4IB-1>{}ueJ#;@1~wgI65&g{H_ znM`!%`har(@PK^(cou)ZcYj}hX_i~oM4yaJtj$x~Zx5DwL~_um0MkrtrE@b~d#W z=6|W~RYYede2Xs~CFpwW%385q@uY&^qtQdl2^(7Vnmcz;!df9} z{A2bWLzjgLg;n@+_~;=49SrRRGnE|y;BIPl>bt>&!St%+eXru`>=0r1dcjY?B;ZP} zWJ5ZG1|$2zh0=rj_Q)iMvHRXl{+1N?b?*1UHgj_0z@JMRcZQ8Oj3>%-W*>HWJ6Jn3 zm5#vN`Y;ceENg19pHH4VNqN%zro*DQ=ObTF{@^-caN{MIy;YLiU2(K%?nAMet-+yM z!zHgT`!qD^D)B18Z7Jx+&ArX*v!Ue+<<7>7CTR|rOQEIJ4%%)eZegBJ4$qT%lVTKJ zH9gJ9vd*5p(`9WsXbQ@^n)lhxdPjMO16e=PRax)Z9WX`lU1!;4LcdFRsC2-swQC&t zY=XnL$oIvm&?)`7d*?&sRm?BocOR^*%}~R>>%{Tj5@zzz`vckS|wTd1f_! zDQAmfmsEbJHja^qo5E;EZ0LTZ)+NDY9ApfpVbw|0Mv`|pB-yGZ&&Nc>I_WBsr4t`Q ziupGo0fp^_L4~Ppi80H@Ladj_1rf4C!3C8K0z+N>kLsZXrjYpQXq{J^Y{Fu@iWp}M zFVehxXhW@yeZzaR#?mOS%mn|{>H9LuU&6)aB*a`l;M^>cNY)S2xCFD3lU7AB`iif zW~oZkLSL&i_=8G;$~`*cArpjVaq)t;tMayDsJ@zKuGMn-@aIZ&W!}>Imp;9WU-j?p zI^>zJc6ihrbP}fc2YJVOiykrx$qVoJb{tfcE2U%=&DZ%%`po+Up7-tu>*xT-gAuuo zIjOE2=AUZYCft4d#v1K%kQt>hjQ9b+1Tgw0>@9EC-3jmv{}5K>ZM|n=PgIl&zxBbY zRXkP`pG&&r@>C($?7D|GXT7?T=69E*(c{}k`6Qh*VWx1CrHXHkSuP)aUQZJpGKmo~ z5Q+!f2&mu@H(8;>2zyNh9Y*!(SLb0WsU4Sln~x$U7qvbk#}&(NR<~5{&*>fH&X&43 zbd4Ii(0G@A!}L}M9mem{`v@H8n=CL(N-ao=t(n(85r>WDvr8jRw|uJRZthz&Jne*T zvWzG+v3axeNSp4tA1MvKipyw_<~%h%Z2vaoR^xsI;iVE6JTcxn>dQ+o%dGiw+Pi{S zMSa;i)~Cy}GL5Oy@^$$NUbH{0jCG^nFJH}H<&=)~ncJt`T3^Ws(Ma|=zx#CaFx=7V zHn2H%w*fZ625PEeFr+=V1srLK;C8on1a`-GcoNd?jutRm1d7=bVQu3e30keJ0WsUa zB|-XvYP@QWvWWXOiXP4g9S?O~n1?M)6b_P>x+LK)1_0P2P!`PY_I3^~V(yZlGh8v? zJ8qZ<#C#@#vXulGsA)3GBApS;0^9=JykI$Zn}-mP)FoyKXSkJ^HdOvM2%skkx{pFR zit+Hcxw&z>@pB`ct$FxFMMZgdAv_QW7?1$FpdC;a?qCNO797M63@E|{=4|7LvOzj9 z<1j5Ok*+975D2)={L?;rM>VzI;T>FlV*%iU$KAq_hmV_=$KIaj&l)Z$xrYGAZwCEC z4HsSDS%OC!;evE^h9Tr0A{=Tm zN`i3ni@}jF8@SlnS7C%Ggx?Aw02Z*c5CRMELSSGKh_EG?56&whB*H5s41+`d1f}HQ zg0gUcA#hLtIJXUegAfvd@WLQ)FwDZr3M?SVYXP>ff(e1G_$);%`Gu@t2!TICXgJ#d zS!rSSXRB~fZ~#g`L`Yb`5+(u`vH+4pfY(X{EP~(_0wb(M_^d1;q5`58urq7mFfnTc9kU7AOP&$_o(`ra7hEhJ zBH(B90$4vT!R}i)SR;Vd>Tf`Bdf5kUMz_<6yi{CsdQ+!Dw# zVIZR*d_Tzh9o+?Kg>tiSM%=Lmcm%it(({Zf=38fh;`pmAZub$mC;)_kdHKPA5GMK? zVLZP%%!6AqetImy^LLy`oC*ACkpc96i~)-muom+Cz8L<-8DQ`K%fH`Z@&9rPX6FA+ z@*na0U%LKF*MG#oe;D>Em;QL1LO1}sAUEJ)NqnXJ4e+2v zXsMzA#nZ=A#WTJSuAKlzh#eITUGVU@S#Y0o?rG8wfk7galA0XR{CUPp%;GGQ8;y8) z%y>%BJG$<}%VX%oF<0-^^{&4<=%$?1f4&(6fn_(FNWqW|5$wabXQ^_WE0!GPIc7Zz&}4(1o)Z62ps zmJ*x8=L`y`QbC=$OkuuW%7(Jg#JQ1+A772KeWcarJBNn{qQJw8AjW&teBt+229AH$ z$F{3ezpMIe+v7zaJc?YxS#F+5cXeLDIvHG@YFwm zKts3U=xP1p)f{!p)c%%r+HD90UgYO-a7JhQ?R~h4CgDKjHiNKl8@I~ka1Y>;ep=Q> zC)e#5gU68jA!Ym^Q}}a>3Ln06GFc2l=h7mK$K}}Y>QE^Ol|5+^kO&UQIokI|Cc+hw z&)X`SFPOVu?+fK-eff6eB8cMA>wLgPt;M0sMcDxUv# zqwseJFS^ZwX5&trBSvu!UK|Zb9qw72y{NK`&!Idp)0G&G2;z@x@x^^+ZJ=?S~7njhM^_qYnrGU@gbdw_}nVQw}P;gbbs5inDI*0GNn!f#S-t#gbA_ zz85;k`75UgAioJX6ieURPq_T}b`r%n1Os+#3-ZV<3|{7ucg4TS+Q8 zddMLTcp-nF_E32>A3sH&ktwnGs8$N+nta*dP*N$hJ}KIq@<_QTZ#en*2?H=u3KZB|tXMbz zpOQzc6kK3w9>=h(3tQ2~0mZhaD~WZfeW|SHrVs5me3AlA+nO-4b~`C#m1o<9@F!au7j5pHR3<<+Q`c zUealU>6fT0eR=b^HdA-Qf9BwUiEN#@iL7_-`~3IA-J_bh$oF|d0>W2;k1lZk|2$eIc+aza45m6AiVhq-4<SZ@#RB&*|VB)5&g#QqPy(t#|KXES7FTbFJD7%7%7b z8~wkwJusoKtbFK$Y9Z&re$5;yb(y3xjIJIaznqUW*`M#+)X!5d=YXa+KQ()8bJs;R zalLLXQN&wY_2BvGds{EPyc!SPVUky`q zOQkGDpzjr0ca817GsRXtKm~2g4H6Vyr(eWUkmTAd;+^7JHz zq2?P=HBea~3i(!2mo##I8qBpqQxS1>V~NEftmU!wa#&zjdZvk+jZs_m;7r!NLbe>= zaV3(PYlcVZf_qdYH|D##q%3M@ynldX`p-0q*tEQh-TovBgs8pQe}~;0raXUe&-b7` zdp7hGTfF}(t#8Y@A%xm+MF5qzdCTb_?B zhJEB?R}a>(w2g18F*SlOIr)Z~ELwhZK>C`;sE|#gbf#!+QZ2P0J z=oy6)B+@qi-sin}uBm~+TS=aT+7rkd!k$gAGxwF>qI=6?PdEB3S2lD~uvtEV8X6PL zw(A%wl15j9_`tw{oWfQF4Nn!Mz`!E(rQ&*r*M}X?z8U2D-8(=!y$QK)6mL1MLL)z- zLVfl7Z2D>QaO6}q=S+CzkU}FFSw3<$%Qp@YRg+(Du-djanxZh}NiRXQrQi@Mcn)_k^trW)z!>YEM=IR&Sor~IDfg$L%a6tLNbRAW^+yw_Mh+xs*v z3~&es0NNjYG0%2zpsMc4qZ>-Bwv=4i4&WTu`&)*EF8J+hy` zR#7 zUk$3o)&jLF3OdQQStttCciTRyNNcn87)kfkv0n?JTo<(sxwLqAxM@Zadlcvi@w2uc z{kFb-6xZZhIdo~UZ;{ay^jsU`stMJiXXG)QaHI~i!VeLS&P<-EV4 zTTCQ9g;D)#DDM10cx7)d-oSGi%;yMiPJZlap~JdTlfKw&%VlDkTPW=7^K}hNz%hkn zvFrx1{KCWHoj#a6qb7;yBO+jv#3>UU!lHyP~<^LdZb=S=So!r41<$}L%*L1+N5!2r8mz~^BkPpuZQ%7#oxa&Yk z-6q(?RA(0T5RjJO2}e1ly7zKPG)OEbc1kD;D;i7X>*+yn8$hz@(V(#x zXwS#|IDm?}eku1KJ=w3J~)*QQFMz<`eI z71u_{75RGC;>dB|r6qNyFyOgNzGPZMnj`vTz8tub*<^;Vbm+Xh$CtNHp~nWY{9Mh> z#P4L;hA@og4sN~&-iX|m3)0vk{pKs~QacmS?g!|HuIt>JYCwwcgeCE(1WxB^JPF_~ zM@?=ys8Eot8_e2JEF|oc=78h6!slc4aBH z7}fbAISI5vpE~sWZD}B)flp8AIAV$u-TK~h&V2TB zG?&u2FJ%OA$d%yJkvIZL4Sq=x0|trH0v&cVH=VTg=lE9%>`5Xgr7UgSVO*wkWZQ__ zZIt;^D)SX9<16$Smjl^D6VSD|kFf%$-!qyvdBh3>QW5Rq$D!+PdDr+qQ;s1f(L|uWh{gOd?SAwSW~kiGs&#OjIk2ej_Kf4qcz4S0w1! zci$&1KwKk13@d7ek$Y&`TJYVl{?lYd(v5>mRZ=MRf2#nJbxhgVr3e%kTq zVI`-*1XJ?uP}!4agfFI-DKA!dMV@mLB{7H|cG~XP--txaA|k4P0nLPb@wE$5(1~{F z0FCK&aN4GK4Heb7U5g-IOC5Zb(Nvyes#R}v<2%PxM@)&J83KXH@;2F2Z@zscBZI3L zLFU5JHj@!p!ZlS-iwziJQXw;mu(XZtEs-dAADIU3o3$H{&{oE(1gbtVv+Q+hs^4hq z3XjgB@IP6jT*abJ%4(cp?V29&I^yX?c6FPaytdhl%pwFCKgd!WZleuV4Qys>Af2G~ z`Sj{^WP_r#rkbpWfh+(trJ2ff;?~;xCUCA(d&fQK3nLm^oRMdpK(oLMkz-rq3K36d z?W{aH0&cmH`05%=HOp9E-@Z^96Wu}qg}Q|SL&SHcb|gB}+BUiL3hqvA9xE7z406%K zR=p6m*B~=nm?+&9M523?6u7Qvh6E8min#x}RC>^BZgG9@d^pwm$o8s0srum&y|CT= z4+201D5r~QhVF!Wv0Po2()>6-#7U!Jy!V`|4We=$2re8b>**3wZ%L2cT}r1TCX>SD zW}@87%n(2Fg|P{WQt!FNo{2uQ`t=yI5!Y|NhIGLD3|7?rUBCM^8}wQXnbeLRI~d!N z?dtJX;I+lAH{PUD)Qj({SvQ7X)N~-C5$ip+rQ4?W5x{Gb$nKTS)uyD=QAUEQBo7mK zRF`S>_hwN&!fSCd#FD7p&b<{iH!3HTOB(m#hC+o0^^eJlmW>iDH$Sg%PR+G!YwZ^2 zlx!#2{lN1!D`S87e)0CyT%4<6#eUFXMTXItfm_SI<&umO`v&LOtzC>72PXCw5*)G% zAvikN1~$r$VWslEZZ}uopjS3#j|a_uX!Tdtu&*4=?%eI{EZ7UqDcMOv{+Ne_o++%u ztfuD0VoQax@$RlkHM_wNB2H<9>&F>9gG3I#%w&2!+>RIAKJ%v~RU&*u`k~R58}OuZ zG}ISvb|C!2Q3la&ibd%jt$KERIqLN=fE{D=-`G(jZHmsL*^pn3YF?1??nq~0|Bdd` z7%YWnDb2=FyNw}iXGqxLOZN{Q)z;0jV@<-A)+5|Q*KJ^suCA`<$+Vh_z51Tc3?8H(5X-un`ns8U z7uUo`ZR7L#D68mRzqFS*6RF**<65-z;`7EkA>aCXQ)O>wi{mp{AqXbTkwr0ll zJx>N|Ya4Q?)kp0RkC-;+sn$40UAh#ASf)O{^7Z*PB7JyjRJ9ir{hT6U25N#(N;QZ^ zIO###sW2>cJ7Kv_tpz2qVz$GYOkCFMi)B> z6b-Jl^w66?=}|`^4C@Ue8uIqb#g(;#kf&|S>p`c-BM}JMkz+&ZS>x*5-6@rkM(^Qn zpbjp%9WEn1xj<5<-;&)YN%9=*9|Y;ADIXkj6@2$04ERhzD#<85Xct;O3#Q#DENniR zD5fX%`TnwxeYI5Jk$z0whl<7bREJ_>dR|`3@libC64Fu{^Dh;hY@z+{_$5{jrzCsa z<`l^kG{VyxcMWJ|;GeVxdh#EvR_sKbcK2YX(w-a-P-rV7!vj|h(+!>|5KdJJkC}AO z57Flh4Ibii0;Nw&HkjwTi78&@%rh9lx;^~19v@iNcDrH7^>f&lLRYt&pR)}0%6A5Y z$8@a`K-IIzE9c}eFmOtJ&bMmleUJ?f4)nc3nnp8)=^7AppDGIW2M(c|V9$PYY$Bm6Zg@MMs)vUXm^a!DByq38phtWi0!}?Vv z@f&Gm`GX+YjLn=~`H4v^C=8Q0pnsD0>>O|tbayMttEhx^1i5TPo|-~YhTn#AuIj=@ zN`i_E%vm?!Q#A%Y%$&sw?Gc1&3(e%eM}~{ zC6q4i)W`~twl{j5=YcIv)JoYjSbVUgG&w>0NDg}W-naRogAO$<`di;NmCqo zx884Gj)r|3xGP047pp{(pl@*I?B|~Rw>gLAt~T!5`#KN5$!JJ8dTJr>#GCjuc!!r5 zoWbmlt(y9n+aHdbg)8bCPG=1rZ6C7aQEd=on!@OX_tmIz;bKcIsu<3<`ko!QrYELx zrwdz`zxbYkz+}=2X;N*aUl@gp6&-`Eo|oo*DM6!}{QS%m>&{s8D3c-1kXVwA$SM2i zy*vglxUWS1;=1M4t|<+!%Ymxq?S>=Rsa1>@kJH7)O{vIA|dLc6GEcy-IM>5bO zCY2-S%9U|CAmd8;TMPWlzI*~!^~TgNLC*06?W)h@HD6>jd?lPu>j;uC+?@qng%BVv zd^RRc<8JcxFx{I@a#I{n2#fE0ByQlE+U7zH$5v^us%7ry23NlTFQO$ z1Nxoo;8kwd3Fd8>Zx(L0$j0HF>d(;nhbl+iDMpMOGhex) z^GvIUxA_1yXGI%VLAeud;2I`3oYEC#yO=Y9ZN?d*3^O^z(t{d~qi^k?r%_$fNryFQ zn9RH+1dKvux5&P3g^%uHV=(#pr+G)xnaVTkAz0y(M zPh`UxxgLz7xh-%cWbs__(tNs3J*&H7TuRag-{vO&sWom(0 zxcwtq{mO^wO98t#f+8=8k4v6Oa;Du{mYpfCeX!+5v%{^AKY5mz zAgAg)gbx@qULT^nKy!MTnlg^V@~sLD5S-p@d5;hMX1-3lz~&d==zG+aR9VEy0ns60 zkk~yqE_IyXR_GQMmk*gKa%_OchQ|hfJ5k%gw!R!2VCW^6vUg_ge!K9JcR+T!3IGxi z&ecr_NfkT4ZMFHpg%~gZ%NkwIUKsc&3DPM$gNsjY(JuVz4h>D*l`P;q0^rp!J9?Xw zXKivL6Pna~0m>#rN44*WW~7P$QuGnz_6DY%%lYiPw)~8YQx|1(fn60Y8~<{82Tb(m z!$6FGBtrf#CxW=6I^a$C*@+-b9ec(DP$2nf}D=~&&@)>25OCnMszjQ9O3@V`R8AOHQ0JwFdC|HiJrm;{`%{7aL5 zJM;XX98%&u`!n3X^7P-p;$U!A|AhP5{v_}Qc$@7jdxz)zr~4QQpXRRIE02I%M)Q!Y;qL`{)Zlr5`T35 z5xM3eYryH{Ptbou>TlREnV@flZRh?RouB#l&jA`AaUrBCZ~Qr<&SEsHe;SB~cOet^ zTY!HNFW_d+)%?ji=KP-niR0mNz6HAAWHb5n4UA3w-DwA?6N5f@?$W3c#|z8s9I2i^ zogz83DlvE-5Yy+vAf=TL@BT9{*sIOf7vYxF-)EzDy9)zxy6pW*)50`y?~ zxzLlOf37zfcsy|I4%9XvrOdp!;QZHY6gc~30t_9y-IZ={NB zy!uk32Z;;Y#i0duD$vVU_w&h&LP?GuFZxdiGoe@}=Txn;z_>F^teNQi1 zWu%Q-a&)vemUO!uI2Kq-&`AE!^yzPZuJHd?|Ko>d|7jk>-yU7f%z>Yx+_QU}GG$8f zvH8QpQ+FmzkdAFT6Wg|J+qP}{&BRV7wryJz+qSKpZ!h;3>_u0dzUb3+s;a9`J@rH> z%1gk*;J^R@0l`a2iYoupWB)BEkbjbxn```^0(McB5C&cwrw#bGfp(PCasdK@Mg4C9 z17&7o0Rb5+N{I@odS+jCLk8+CxzTrRP_@c4;J87%A>q?{H`Xy3nvAv$v$d#PTJU)F zevL8=2Yizs|i zwXrku9ZAHI59GVOvYkP>VT7U0!U>Pr7}wBs)quoCazJIwuZgDS;wYB9sZh=O1)| zGJ$i(cF(gxIwBi1jnQ>i6j=#$l9&_6Q(8&u#O>A`(83x1sEavPqFXOWC=*;GeqYe ztRj-u=U3N}UAGPAmbG|DV1@J`{H!J1exF&|s@(BXIxtRSsX$8zc9to>v_vtfI`h<2 z0JW)z9HGMD;0cdarql*Tu1+*n*}G(W=Pw`Nf@D8>o7o?R^-bz|c!wnD^!OTH$qpE2 zD=pRW9jsj3I;Sco1Gmima0+)2_P z&7<&=2R@XnM6;S;<2cfe2)W1x_;c)Q6CvBr!EG|1FTwf>aAN5|`l0 zoic9j{R}AT>N5JQ!CmQU^P05i{j7h^pt75r1yf^6k%if59zpi|4YQN!eZLHX@h5^Q zd^K^x3;=JnHw*r9OBf|99>ieYbYpRshD-?=BCAg`YGT4*MsCGV0{|ki2faw&>2Z-s zi4w~rv{Gv-%T$&hf0E;_J^YJ!Pj(}uJ^CYR=^m$-y_%zD9 zxA-q%8@UMxdddLq_rde1|JPXF*A=D~#8eYf4Wn81+{~};nFJlDYc+NxoWh} zP(KATBLC}9I6Q7gXJ-(9XANv!5{ijNhV018*BfSIYc=;rwo96Yj_zN?VCc$1@&I~l zC&f5txT@K79und?NyVuK2%Lv-Sv@Q;P)Ls}TD;fBS--E!pW86sPDBQo)lU5A7Vihf z{%sTDQT#g9B^V}USm$}ucyX0QM#c~1LcEYA95vuy;%QP=l-mtn8zb;pxnAC1eg5Sg z>&jQE!L*@N6UdOGsL20WOB_R&4i{mWYwJ!Kb$1?_&WKY18OfP(>!Y+l{&(8Oob+z8nVvu`G*GtV)Di@?0Bd z@9QdO^8rhdBkZxZn}+R807F;J5O*y)FjEJ$Jbtr2T~}pnHg~ zuc(oil+Xk-CD2yu@iEJ><9cD2_c;(T(_^dUrxOB_%0SF&%I;h)g@Qp*%drVwfe4*i zENhqmtgnvUIAPBLK0$vM4AMs6WqwtHY2bVP5OCLTR_YEVV8Z#@q!V&-7zQ#^;W1j1n& zM-@qpVvpWfIP{PV<7`_e1Fa+}ra}x*N;+gr_SyEqEi}{=db%D;>sd_!I&7 zh3CEQC)%T`WVxW*cdV_IYyJh^7c_5Ow9C740HP86zB~ z@FXYPKx|$bx9P}MgVRc_|8w6-&nNJdupzs);HWKPuY8Zl=p~Vjn7-5uE1Za8g_R8-Gnl#R{QZsQ~i^|E0yLeJ*MMHWH8 zX^(_i{WP+heume;NkbwtI4M-JB2uWXA_D#P-V`K~aRe;-86!Z@foUStoYWESuIVwa zv-Kf-%H-zj%O#tY+{}m>#9ZW8TIo1DiN3Hx=zvT3I;tZgKmyD1uYkL9Rhp%P6DOV# z|0#9Cy>iWdFeg>S&n=g7jO)f4FuC?VH1Wb)GY+b{d`CF z&QE97J2xcX@~&cuh*sWAeoFnBEISM|j${W_g^(H5aOBVW4QPj;4KyXPFew*1Oakb` z#JujQU~T)&SrWs!ruPJ|sgxl@xhUdX=IXlsoG1wJ2({s#aM`5X8vY#_6Z=8S+!QB0 z22~<)i@k6*wLdb=j@g?p-+Pz=9`gg?05oP+`%|>ZN$#0IvI7*(Kuh3Ih9(jd7ek3R zjg_5;v8{{DRolFlirx=Y!$xgG1yzEGSM|lj$GR#{HrFi>CWYej+wuOj5s5 z_&0f6M;TV=_}mEeH7Omx?L@l@epO=UMNr%;2kBT-;gB%gY+BWiiKEv2W%(1_o}L!w zr1XlwXKX!RoPVF^e`gc$!VsXfk}7O$UV_mAU@?SFlS1zRNU*Ayt*@+kj4I^$KYm;2 zYGDo;?)iRL$}FK9#F51M|AvOBLN#2QMvW<(V=c2bt~;Ks-62SeJirF^JgRWkQ-Lka zjGCkK(ZZ@G-qPbkPx}p6R}2p){7cJp6CYG93gwbo;9GaMp#S~d80WyjREqN7 z{lKLti$uE+VO2ghvxq-$BXJ6sHM49=2R5G9tou~?Zg$2=*_h!K5cr<@MCRe$$2x!h zl6qhhnbGPHqlYQM_qvSuAR;*Iv;~}L(J{klO~k&36g_`OK-SkGGcvaIOV$P40Qc`* zk1(=W|K7+S3NPqZZA09ZftO{hPe5$+t4Tgb-1m`85_?iE6YY+j*@w~UGK5e0~))e2CN-~xdOLXdJOTJ0&EOj zs5G%xBeSLKW%z1%`*(J^_oqn4rmO;tAHdf2&q2dPG>B;g0gi*SKSw3BHqNHp)I(Mr zbQ#f}l)UAeilaSCQj6g!oaY28JO~N4uhzJP0d(~^lj$(kL2IJXA*U6l6+m0Z;tkzC z&q1At)(utC!JWOs>cpoSR!z`L+c`NRgM(Ho8a(jHzQ85F_kdwV*<%HRLMG;iolj$$ z6dH6VChFqAS7f?G&A0p7`WPJ4S_d-H6S7YY`WhR0X-)zSp*s( z*s0@ba*tt zu@GeEPRBY=ScHS z$(h)~xknts5umFuju_)8_XXL+sFW2ppD(%6au99`{rb2J5wZA73oV8dIrw>j(?$Oo z&z#ceQmBGx4x}qsE;7NDCe-ze>Er+Q-*0zi9n4UzHHwJ99ZR&+?>(r8%#*9{ ziUP){uL&Rc>#3qQzRFyc_=V6n&>8D!`HCAbO*cE`pu>7l)FDZ|2Lw=*K~<3oVr*V= zL^G2HjxpACp2`S=(Nhc_v=#fjgUtK6L$tq>?a`z?cIJA${OD1R*n09Y5n*PNs3T7S ztujKRwav@
    YOskzXL2PAd{13Im*LPHUpe%^XE2oNTyv!uDE7M$p|tP5aGCXel2 zc3v*x=>p>AjF!_YoJ>*5Dd<&TG}*NpxucSYz$_~kgO?KmZ8w@82z%c{FdWFsYQn?A zdwTf$)bU0oVwF_~;R_3Blz>dExKpCj6nHL*hWN^Q0CC#crUwjf)^LXvhUKeb^urwy zExk?kjnzi}tj5?V$2!B!lX8d81Bq*G{yGM;l3QKb^U;nM1?oyUhgZFBY|H6K8NYF| z@P~Ev*dg6tzCI;dIZQJT5~s|!7~vY%Y|B;ed2b@0nreot$13GvxUK2++AM{h(xlLg zA5&65OG@@%wMtz-pQ=T{pH?&7s2DIMw58i@&g$yF$#Np+rM)utCC~bLK;O8y=s90O zM|nkTV1Q#{kLj_jQQv=qk2d)@?8NtaJ+#0>DtG89LwkZeoai76iz>N_hTl_T{8pVy z{M3iunbO%*RkI!!=z@U8y{ovy#mORJ+ODe?jknwAGWjymDSsSHf0bW1(w*!R=cp>c zeX=l+(M=^dJ=tjH#_jsxpjUy?^t7KLKrn1mqsTzseaH&@x+Sy^I6L#h zE)4_gxfsfn9?=x82B1|aS}T+UKOf@jVa6K&?Z0GC&!^VgjJH31$f9d59$TK_ zbk4h5jEknvRs=~x*J)(KA;fOJhm^+nHI&z=fqt!!k30xh;B?i7ek1ZMI}SOX3w#{P zX!yVDBJjt~~F#Fn??;B?t7EbQaqKXqqgZtHtVG56RH%ucAFNRja&Q98Z%Q-cMLJv!K z+MmjsXW158NAp?h@9>lWperOxE_zt&ODQb8qhsXq zM27iT`%n~cGT1veTYR#tKQkNw%X9n;ILTZ)h|xj&(F9A5aOJ~&eV6Ml{G!rJe^-&( zLnvsoD#@;;2Wy*{Y`e}_hhp=ki%@h84T~A&71-K;YA77K_nzOTEy9DMg4jyVf#3lo zwnc^RH8#R+hM_zIJDmXz2D6SA*_)&SfjiPANOiGs4uca9WtAfHo2njL0la9jMQ%cz zBUEX|CeZ^DMk#N-W>Pv_<#O|bLfF~8)~R#uKzG zG3P`ekxf?@3d~Zb#+}piSfSFMcZqAHjQ}xZ6E;W9RTCkezw3HBQjV zuBo1eDZ03m08S@pMaEmfzTqWlC|OZ+IUal|5=W>>WDK2`Ez z?~Hy?ahjl$_Hs=C+DA-VTOdAI$;YooP5>8y&(>O`-!L_nc~qP<2KchwHZY zS2qc0F+?eFlitKE5;M_hR|_dPm?L5r8Xh~>^Xb^Xl)%_F%>6raJk68m>ng&{SExxF z1yffs4kRH{%W|d2YmJu=8euI(sZT(A^L}pNf88X5Ax>>Rf!W+erHrqqCZoERk!naB z7Ex*if405wG2Q$1?HEwbzo2~`!;-thvw3qwZggY_kFS|5o7U&Ftg=7$_3zeJSUk_$ zE>%cK2aZ3> zM7$gzDh_3n2_@sPucx0d;G(2|reShH8hZAHxcc$1+@z8+4$0QK$V86JkZHngN>(t> z-!^HIg|(<^AV9+4KAhP|Ki*Nf1-jHq&Xnc(T*wZ~)4a_0^6-nPN(mBv{-P&Pqi{e&k3ToB$2roH?Ag#nFt2 z?vEUF4DdPu=y`Duy7j-L4qeNsj!i1z%Z#;SijEbTs1OVL@1ow==gt{Q_C+3WvI3$! z%6gdEP=~=W=0})V;N6k%#)Yk}@Mrn%|C)H!g3lhgaKw_KPCae)C*=DoXI{ibO?ULo z8rpW$; zVdl6`gvmg~P(HyED2YY`51A-CEU=@v(7I@Td0{E zGTU{55W?~doE}X5$_=zEjD#4?IKFV^EKa%meV5->7~NP7PK%!iuh9J)#f|s5h%btn zKkxZ8W8hmD@d%ql+Km4-YF5wbE~OMnpOG{Sx}Z!;gh#&?r=h|9Z{Un$B!(0{&4O)P z=i_wkm+8WL8gC}c)X{)S1Bw{>x?>>LQc@xl92RDFTrw<+h5IV%qW9+zx%qpU^LsfM ztuTal!4^*k7IGgp7^cj3R zO^`H916-8jxS_}1$&atcNz7K9KhGv4lP-#Ef1xM%G#tTnVBSbl{Sy^fscg#R5tqv` zN){C#z84{d9^^+fiP7rUnsw+-e4pgxloZ((ry@>f8~X?J8y=c01x2zk%d>cC zx+4uu%&Z)HSO#9t9n=fLov}hRGfjp9yy2RY-H`$@!p7!Aib>A?2asa$#oFrjl=Sse zK(Q>Dp;d#;sD2@qBI@X!tf}~myVZRgU|X0r`3rS6{inRP$~w0?B@)UlB`%_&s4{Fn zvfk;0ol&vC1Rq^BV5bkU*X5x0#>cka1%=^5TX8(@;EgGUO)WhDK2ruoqHr6QVo=a1 znq8^Ue7fpJQmsM=&n82<55#<73l|+a!OE6ap^ln>A0W-!-d zM7R|lsTu*OcbtTQ@C48>Q)+-kk7|LUa;ffB!2Uv7^NiGvL`i-QB?g`Ow@Gm^i0G1x@xn# zGg?TdG_%j8*kExkI*t5@9VvoL;5w;@eA40zH7ai=b90~?J$hk-DQP8o#}(M@T#!L} z|Jf)BFyqSrUhdVr#)muJ`mJX!JpURMCzxcHEr85K; z6m@cw69QLB4GR~H4)>R3s5R6-7`kl7%?Ptos%3176VNmsu4L`VuTld4LPg6%)Hz~X zqF&@MxP4uIw8B59wLO2SMu!-bQG}hwI@cH32r8?WXZptz9(n!)$d~H>L}`}}1UCNK z)Q)~+g0}is@YXzIVVgj$rC!8B*9+aYt-8JG|O=G)#Lga3|(RfakAYv z_)9w7pM%bu-lGiLiWxFD1SeA@i?6B#!Lp1+2i~%F&zMgP!cu67~e&9Z;Dtt%;pTnJ>2{yN@;9Dbc-U~v*jQJrcpqU6VC%Vzm>-KOpVgg{V$K$7+_jd(f zjx>*rfnb@ws9~!V<%ly^oI08~uY>48abr|g;4Zo@EcpH3J_S`VH7C!H9tI!v0{t3L zaQWETszzh0#^4TjbojzJndfxV#v|U!?}|Lk{ly%BiV$ljJdRW)q~su{!P*HSEG!b{ ziRq!duPwyxo0l0_a@N=B2RTtS-A6yi}-B&5m$!17j|m{WZHIgj>(6b_ziP zlzoM!0nhf19;-@RPS6|W}XM$VLa&?@lF0N8uL@`9V*tV>ZWR_T#*P)T%U4c8M( zfU}vOXVEE9r22t8Oi6D%?a`fQT{e0x5fU_gaT(>>tjea0hH!MY( z&8?OtHCej#z!2^UU4Ls}Sc1_g8ilTlj!{h*j)fvMEr;90<$gG!8^sErPVbtw`+b+~ zX5+cAtMxfR*BFF)!u4B=x&}gdT`WCQ8r@0x!$H&T&R1evK-hYC;rtH zOJ=C2su?x#ELIJ>8bgtQ`&i^zwVVHK5}oOkZL}iB5LvE;$9*vO}DPS{5s%f3c&cED_fw zQp|r)xzpCzP!1`1`zwehbKO~7L-?}gvh8bUalgG8YkCfWU-n#upnwX(xBVff%f&XO+ zmVf+cs>>8|`1QzocLRWjTX=YdY2sjM>}}lSYS>V&L4&Vpw3ExOExi)Qnvnc}g=R)A zpn1vjf}f`M@#bNPjHHCtRL+ejG;&m@e$ zStgSBJwaTrp(el!=<9Up2Pb6`FXP2k`Av2|){PtRoTD=VN}X53aTE=~EI~@IDxxOW zyl4zYo#P%IhV==FO+BcF_1rWq-TN|l@+-W}W>v}T2sN1stZLo-uDp~^&*cP_Uj{wq z2yJqKY0sSY!6LrF1VGO3C6AIA_Y@-9@K;9Ym)z>&X5GW?aoD8!*V51TO?$>O1Ibix z;o=dSkJ^@ti=F`ue4A_EULqKO67k!`&t0toUyHx~r1AdXj&xA{YcvxMe3IOH&cfUW zAv&v(^avSt(SlnYLGXYf_kkO{$JZU9zwPn7_~lc%R#AC?ErLN$>c4+Hh&n$}x!!R+ zSnGlNz14_MzzmP~Sl*abP?bfw;lmXK*C??Fvqb0P;V`d(!bC;(?UTiz`#h0m_UWO1 zp2#gsl1rIs0~}%1ZirUYjUhH@cBGE2=hEY%|p~|fF#J?Vt(3$C^hqt z-;r8;`@c7(1!kn0%rld+qFeW!FaKxCO&`~jw>}m;_W;y*2AJ&6Ph5%SJXBfQU+swS zh-ifA+=b=&xz~uF2NB|W?H0Z)kS9}~3!Ew^BuCnGKzBFg^Q%cqF37T`=W&9ahyKrP z3#LBARjLfzd|-(dU@ZwbTOGwvd_j$TVbVJVq-F6LR76e8swy&VBEp=}9Q4L_w)p02 z$c%nu+c4p;vZg!U4rzC6Y5G4ytu~x=INPG6RUYGe9(#IUtt}X_z?^I+?QMAN--y6^>6jb$Vns@d~dR2G`77S zLPAY>0cIp2W2RlINJf5sdn{5UsnKieO!7xe?k$eUwW9^e=_s`ax zK0Ko+_M{D?MogJAoE4+BsFImiW_G?hE5F3;J)`c?$Uj#fx}O~YcR|@2DOBLJjGFYh z#LF=7`q4cvg_u_YZ59hAKGJ)U080^j^?b%Yy$LY745Q--tp^>3_V;~Q2L8DILiv!e z7^~v0_HswNEY<<3d7;b?T6_scEg|XlS-!@v8G{M%Zhvr&T z1hHm}9!47<0^VzhNyjG^MM5M>@uK1=m@yDuZE3a@Sq;m!Yq>`3JV03L-fgXpC-8{d zJ|~4o!n&h6Qilbp`)$J|PRiwJ_XCpT>qWi`%TpfDh#f{aV zriscqO~AwW&G#%%u0b!!4QnY*A?%F6)1!;Lw*NWrBNTpts43QPoZz|T#o=26j^l{9 z4Ab>hAwwD+V#W;LR`2WF0t0U|lb)kq!W~JhAu@G(NxFS)_42(K7Z#KIvu!-7UBy|S zD1`<0B|>e+kl^y^aXj5hTz!WvJM6*Rt^|GW?F&YdH*^g3)^A*@30d}tmfU1JlFE1K zlT)d(AI5R!us|`}6FZ-KYz0^nan3@jxy=Os8wzy`on9gJ1}3ZVPLjG2l-LsHqtHS9#Gr66>#$OCb(&V|IGZ zKW*e${bi$W{VugmdgmBE2xk%lY1-iZyI@#^l{#Hu2V{~K5 zC?xtPgrYOWqJujn`{sN`s{4eK^eyEhq?Mp9sfCj>y-Q1O{jHa}NYObGLiCuIhPf_k zy2{gFo~yh3+)U&5`aVx7LRSZfNZlJ$_r&R(IdNP|tH}HVnDwcuI$)2r`fGpttPL`= zPosV-bV@1z8REsQRP@bMCVCRexB!oxCxCu=D#x=Z>8q3IhG88 zAr<{AIPRcpJs~$vD8(4-TQ$~cvs|f#6v@3s%)I$~FYV_2h{UJm5y2h(z8s;D71X_k z*bZbw*KkC_=(Z{`!lV@w6-%v(q%tRXSy+^tU6&e}(IDV_;YP>p3?-LBTRa-f@FZS} zeF-vqfGb43J^e_p9oH*Krr^Rf)9 zlvy4Lu6W*_35z;qVr_8_NZon89YYJ>MWwJ>vhT{#*TG=rn~S39=SaY>#m|4le0z{i z>KZG8XSB*{95<;Pfi^JtfHO+2=zx3hbi%xDq~o^F#!TsId$I8<%1JkiVJ?mN zb->6#piKW_%H$fVLXYvON`LTS^kxZ1urORE7tA)c5xX~0B57zUx1lE^9MO%>vYz$5 zKg;j-UO~nLpTNzm1_QxIxTPlNOMC9h3c)kZycDD+MTY;?^UMVuGI)&fMDtg%Y^(J8>lc=24M!)UI>KafR=1fsyzSYT!c)0nEV|*pr}E631@;#?FHnr zgG7_I|AqBT_BbR@*YEj_#)59j2vigY<$=ev0QW@QkHFq&n!+OczhsG5s;>`v=4FQ zKbmG)$l0wd6)L5ka#yGYiEg9o_@#{cKc39+!$GW*V+2Gipef2JYXl)>1GN4aD;p{s zk83+H%vgLW5v|M^?P2?fg0ADXK}EjX(aX<;4{q=-5g&vWS1V5HuIK_< zjvpYRns9)sIi6HA6a0%Jo6};ZOY7ly#@A@;x;dVAZbe1bhYGZZ|H+qvM8uXd{qWIf z9i#d15(*3*SV|bmXBB73h&(C5HvL|?YU0TA@8oGqM*EV6fzQA^my3cWi@#F6QC*a{ z4@PLVYOqC9B9D{remVIlZXI=r5i1eExw`n#<#S2~qi^)a|88@XaP@BND_)@YZrB+* zUbT(Yj=G$Fl_e%_ zKyt$LrR6(~-QLUT;CQb`xn3e|!U!oDO>MEhb8FL{0|kHBj4I{kr~+KLjv1;9sa%*g z*hFSJy5S=oK@ZXauNqo9c2^^cw9yw zXs8tF5}AvFb#|xi(ot_CHH>M%tfPU!kE24qPXOm%9#&>mtW(^}3tUPJ@dA}tjBHI+rtAd;xJ{ zIM(u5&!kfF1Q+LsP!tDx%}h{xDa5FrueB&jg;mxRG)JD*c6{H)U`dn?!iN8dvNdRg zxHM8g-)bO5&52S`<2=4;4(b;$_CFPw?z%oNCMx`v6=PY*ng=KMNVaq5E#qyN-Odpw zbw2zDfRWzy3xhjy2P&^dP#PtH+EYuW8r>>##G z6c%!(zp7jRa60NlQv`AboR5JDF;kPq7X5NxYW)+ZJl=qYdbm1^p)@|BtMYQC=NW z^|4;3mo;U6w;|B_M@m=4oT92Cs8Mas#aGcU31V9cbFuGisVm|=Ym>%M(JTpa!-G=C zZNgyW(s!?lU?KYNNLmp&jJwyci#op__C&64NHF*qqzm+KTF!Zf+0{CKx?@#hLdes%5MDh|N2Ov~6k_t=x4k4r?C zY7|*4h;Ke+pyan|EOuf8XpMRq^TBI_8%or zjLu6ReJyHY=W&(3kSFqn5UDsSNu!_oVv++%?$x%GTVld>>e`=S{JgJ;QL#cL+KNRQ zj%?M1zVxcp=RtY%@$UP>(C;!lJ<4x&9GlBr|K{7t%Bh*v&P>*t@=LcIX*!lEgkoi? zek;7un%jLSex6%*`iCY(@^V|5(b$Odxj8&x4RHsG@|z4p88VCU#7_@(pEIzQrWEq} zWCSvT2em4^>!D`|+c(_H-;!>!q80DkDRYvxgL_;xlxd`e$L+Y!o9|yA63%)b9t66I z94g3R6cN^LN;cTbDR)`cejNM=H4-@&3Q(E{=aCBw-*eS>Lj1a?YrU;L z{o{?6#T)}fYq8CFaXgc&Y%*SdO>@BDJe(-Wr+nqADCEA)97b(m7<4 zntqr&PhPK`>uv5@t_@*XNlOGB*}#aI)zt#J!WYFadMjb3l0PQkUC%2e+T8i?9_kKq zr|Dqs=5x_1FKcW%2L4VrW*Rw3_AfL!C_dR)mHYh^=n;XF!%=Y}NWz z!xqajYEMO3Du^mlxW~Xul1GMQll(T`?SI}f(0YRcsZmGpo=(c?NB%8L?t6dw6Jx z(-}B^S*!uW**?CP&4As$e)HP3m(OaQ)|OVkSSRyjZr5kY=^8ZxzGXk6RRLalDM;P- zbV&hsIKp$PcG*|0l|Y+xwtDE$gVof#DWiziaKone_XwCl&s_;>=x6V>;5UnGukhWz zzKkY0RK#i=W5T2wcgnKL%1QHw5Ld9BxjRnJ!Tl6O6iO{qR>VQht9K@MLI`^cEcW>k zfJ?D5SinWk{3(G{#%)%d5xHld?qK49xV3p7O1|>SdJV2ELbMxzOM#hjT9bqs`fq`0 z*S(2n4}NYD3EmFZgI%fgo9ygNZkGam+iP~mNcLQQzvNh(dG}IKoc^LEJk2k_V|Zz9 zo`8+Mj1J#+KGUqj=4NlB=M0&}Vryx=QM{vVhF3M&_PtSlag&p;)0ISxy@G@9zu5!g z<&MYs+Q|pkD3%ne^$#w!oeFo0Lp%1v-Fad4-* zVRP0XYR-TmcJ6@SnDO3{3khCeMrt%q@WDt(zKQ(0+-4GYwraB964ha-kp;PkY7hU% zoPh63@r~yOynwIoRyZ5s&n5ceXvZ(1LfxY!7IIbsM+{jiVgy2Ll-#U)bJOjway8hr z8Q`D9A?4NORTA1hcT3$r z2MaKZQ5? zFMaP6J?|$0f0;T7Bt`J39zC&gY*iDa0~cepSF!MksF`fBMws0*W*114!Xfdc@!RBE zFqZHL2iZ&#AbNCe`uq7de6pR_S-7wxCNXl7Cl`50bMA1&qqivNxVUzpD#-h+Ezu5e z3@P9CVCptdQW9aN+hf^$fixs-HaQIanXR#ZYrvYRL1@7bZv-byxOd5m#w+!`YK;WC zA?kbX=*8o2_LkOGzP$9@5>(xiUuDieo@$(X>y>!Kx>!EVbx7pi++YJaudc86T%TDK z1`@wHLZ`d#>MXq6(t-dTBF=Ci?e>#g&gCCem-ti)BSIuJ_YtX3!nw4A*rSLi<%U%sy-U{5#(;XND6 z7KFa9_Y`c`o(DFE;p+u}>h|Xk>Sygpj{l&2XhHh<<|k7HL;eDbubY>xz!Md2D-e9= ziTDWjE-%#K$-L0sOvVK&l_Ds0I&Z-cb=DH}oVio}sP3sIIx zRUHu3l%+^Oe1)*pE8~2)ZhvdZFm|Gz2@3YU#O%hGo9#Xrtc)!sQHR*L0PiuaKPDA+ zNZ@Xf%r{AQYpmm8FU)7_Cm_yMr=WC)0eAb+o2}|Omv!V>4W-eLhtf39mXq1k`xEk* ziKyRTya$c=xq^DZUd8uwRT&jxvk0t0nK9aD#p)!~FU+wjgTfPRtO>SA=o;=l zX5e@90|y63tIzH-dJ6J$~hxH6qM(Znji+#)vst^q9MEp(W1f72)hBk z4Y|Doc? zHbv+U*3B2n0qOQH(^vmGVjLK*f+7^*ej0}7*oQ+(BkpuxpCjr8P6AwFlVCYi^9Px4 zGpmxKCl2?ra=Tu_*+fXlh9ymGOfIIvX#_myvcszFQ#%plkiZ<2w>+ABX1U$NVs^-v zwmqBS4G9i~ouP#69cjH$yH3yGo0ieH#dLU3~lGrE~ONCA(nCqp72UV?fI} zv#>`98Vys8Ctx+8{sWu$qrFH%RyVzP1d5EnljRhl-a8;NxzClo7|iQK_>8QJ zr}j!Vul@Xf?q61JcD5);o>sSTHL@E5Nvq#1*+9a{sx^5F5M15S!^L?s?K74%cP<$z zavp(`>z?s&iy$5ca9%`DuCE_2$BG+4SJ^B5z&s={tz6FJ*j3A;`rVJJMT!#1f zv7XMb$mKIhfb7A1VnoS@1NDyAl}zmPe_q8G=#q&4D_f$E<9=K0ywY;t5z)IbuipDU zp?0F@Z|o<-4?@wQ)kykVp2-y?hH9KlN*EhLr(<2cRtmNPO#FF_uKJNUJTDM_Z@^>c zdj__v?PzqTXHL#+Uy+mdg~8xwPUHLe;LO}sA`}99`S-kR8=g8pM_&heDcy8a zQTt>amS^#RZ?Ji5ufyR+K)`~_Y!@8$SJa0A_fc#Zs>2bt5I}9{K2sC0*?NwN#um%y z?i?>e|zp4RuFa86@PE;6pH69>Y zo*5M}y`sA);IAcGs+z2i7SZUW>ZO9SNb?Zu{XA|Q?DU@L@ICt^YYdal7jAHKHF5lv zBAy47$GA)g)(PVo(rF^q3Ddb|*a}6R^JHs|*e1>21~IT;(QDG5ikY_gZy2Uk|63_w zXJ!v`xz~4@j3Stc36JAMPr|T6T(BT`z1i!f*5BJl#%2Th3OmX>yHa{Uj#=pXS}!My z4hyq=+EQrn0CxSeMne!eLo;)+OkJ_*wtKT+&CJ^tM1B~qHA}g=$ zyQ6cUt?7L$ZAyQ!zgj2JHLTJue9AIwZt<@!-Y@tJ-<9j`Vfy_gWbHGAmd+N34gaH$S)F$4gxk>R#%ORXy$N9}-86b0E3FwFP<@)efc}u9 zpqagr;-{uWM4`LgE~ice*AQwl{u}`ZA!TN{kOJrQa@*BD)+9#i_8JF|T52h`Y%Yk6 zm`3Az-$^--0b==#%juP!hW9O+Y&=V0xT27^5iCF1Tz^BClVv{q#!Md{1NykYnwr^? zEMi4Zf9ORcB)CnVjT*Q3?!U{+-uLK}@;rWK8;N-R{agS?YQFQ7t%->8Wp!ZUl>KFV z>4q*r6(^M_+TfBR!|Q{x)0L=rzq`!u{u+3j7;+%x;fJ zX0Ow&Zr_gBB!pUWMGIkOzM#=aA| z%Vzee?I!z=-M+s!Cjxc1huD#J5(OWK7jmBUqz}ilycSDT@qA5_2mVH7i%T4vXh%t% zLnHR{n9Kg zAl-tL(nxoAERBS;bS$-WN_ThHQc_FD(yZjtT>r%VI)7kh&YAO!35A0YWh2^hq|k~d zI#-x1f9_bNknIpyCBDQP*1O@j?iaF163_uiS!lbl(0k2w4(Owvwz z5Pfr@h)N%yiMaf3anjMogZqMF-L1z0my;gxyMar(g5;W-xbK@1^ArmzQZlC$VMd%`LF%;hL=G4Z-F=125qXYOoIii3FeX zZn3#!arpf>HDKIp^}za42W8OLV zTB*5ux6aJ3H~fn;Lqoo_QU|9}pL3nAxc&eodW=u)tD6{Ed_a;wwfhOobYM4QJ)^G* zXG~~-_Q&VR{lIqvObef!`c?a7hyG?p-kLKsyq^arU9sdOvN$Fv$L>nZQrIo$NR&cH*d()7DRuK zK`b5#@Ug(__4&yupp$z|lNC0PW}Y~QSFAmTS&cOChl);HJ5kLUiE1TTBQ-b9i~HD6!4sMO`Ts;)RAYhTGa+*HVb{32_fOT6X2fL(2>X^GMvtr+(phv#Zz#2H#^71N^oZu!SIr(wmm zmDB!IW)6eE5Vq>Ti}JJ0$I_;bmN$T3%%K|Ov2Xjtln&hJX7^oM+w$*ma$o67*dGRw zTc&=Buy4CB;;RaCe`0-e<0q_WPQ|HRx-qbY+&|eThBYIk?8Q+bauEwN-mGKawTKBQ z?oPK2AZeXMK92>N4aA1SK21H|;-QSd&)CBZ7vPc`!&S_Km56O&@&KpogK49M&a0K` zMkT-Y4yMS8C=?~7Yp+|cbMz|GlrIOlesP{>9*h_hzTE}&G!fv><~X$_DReTm-F_Vp zE*o{hnCD}RoOCdWvSnm|u>kzv&JKOOQjMtJ-c~2HOCQ6H7^-mYwxtq13pMNtdS2)9 z@yvr?kGw!D9&mdu+B-xgD2Mk}JRem*0ZZ1!D_rnC(<<89+al(VUZ}Sw(L+NijsWd? zi#OO4eWNaYz!Q9rTaUAo6VOuS4^|vs1sFZmMz;4>6fGtIC>mJ;Jjmy+rspyj1K$H6VY{gFa?Ei5 z9&fQ{Yji$AVCRR#bsca6_{d=TW>4pI-M#jx(kr&j#iUPgckSCDho~-@wqh9k=h?0MyTm|63M!I=)E^8e2ai}!ujMf_5a5_|qs2JUBDMj$FbG`@t z`HEy~VKt=J0Plt>!XXiL20dQ8SV~!BIefW097*IGcu(Jg1G!^OhbLiX<)<(qAF{=b``uD2 zf^X~uv^MAB616?*&JxM1j;noAq8vMckJSi>wR(Q*7Ur3#aZN#*^VeQeZ z_GTym;}+lR{J0?cPcd)aYnCpP$$%62WadY9zuSK?qVAJDKDA+TYF)=4ncwnjS01<% zZRy&0kUWbP%bHdw;zGnClhWou8i?-ZYlq25~=;fDLqh)Knw2&d?ZC&GUSw{LjOI4#at+xOJjLxgcG}6_GQ8XMe(rcNA=Hzmx;kXY zh|36&0$a?m<>`*@RcA$69OH%1%LA#JQtsQ~+Zdi+x>QEAn$EjPlDFZ)8ZLO{Kk%+Q z3iL*wS|kuAC#NatCHb7?AuRaldcsB6Oly{be_zE3(dk-sxx=@&`?wdj{f_NOJkDvjbM=&k`h9!sNtSL} zL9GEk&b|>BXRvw5zY_qf@=gufXSyeCG99B@{~M8M{qCo*a5QnEKVS?6gV`ZVFCFAc zqe@#{mt8k8m4VY$N!lso29DI2aZ1(l#bB|a+~=ueGLO0D#YF?A!U7wMS`U-W;PjUB zjfRefj^9hBGq3yn(bwvo#$MZAZ`Ww1^4)+Y=N1_(n-Fmc&OxAY$Z@1VN2dXCik3)j1g9F_T zPVf*GGq>u(fYDm~6gx7r{wB2gw;FTQDAVr)lj@xGb8s~Zs9OP_MR?1H8;s7_M~wc) z$|yZOx053mQDN!e=tW}L&y17iwa`+(ja(v~1mQn1?Q%C%+idQ?`o}nG@6}YVZY3y^ zp7`iU3 z1A3E@f@M+1fqlgET0b!@0;gh!idYHoU+PRFd8g}E_N{u+p4_x8Qr|_9+c>GQe$5Jg zxApj_TqhY$RQW3ux(f|_!TiciyTJ)d``iDOmBW0aL7SDC^hDEk@kt)UL?O6xH3?A%T%g9>R2_MVD$F1WPPNwcRC&MhzJ|flG^8ZKdA*(? zPUY=!+#x zIt!#Rvk0+%vc)?ADWJ0c&aVh_qx4h9NIq(-wV zdyRsB)t;J_x21c2_!=f0mw^)WQR|Ic*JY6p&1<1OLxI1E?ili5QDqrjgX&+2r=M3Z zHzyLMaT+t0eLn^gx7GR8(GQHwCb-knW2l>7c3S(0N9xqauXri^jj9-F)#Os-*{3r} zNjra08eOkHu<){S6=$ISj)dZ|qJm4w({^Z=pF!w1fVTI1Zc8s4@ab%*_U3VZ#E9Zs z^T(W}z}uf?5_zaMeD&_>(o_9uHh+VfhOQy?5*0eYU9CzEYI>L!MT!!->`S9d8Bi1(zhKL-LTZ~hlPB$RO>e1 zLqOV1@iT^6;o zx#`5qR~%u|CAKzde_Gw12)ymmSDqA7<~l?IyM;l@*;BE{x9VW!T_UKu7-v89R~R%w z+x?Os(3R3S10jz!;?FyJ7YSD_#?YIc5p3z;6{y+gcgg;1qNURRyel7lk{9XJ*GFFgQ6GmM!3z*@(pouw{vI#cw4{-(tj6 z_!8S!|Lej@ubEMaFLNJ&Sl{s5^y4cWvSLwIRecnXw^Z`=^>v5C0}+TSU}wX*FTsEmWtJ!nB-flH4G1NO&lK5{dr{K8|d%7ul4&pz+oc0jV{la zDfuA?kK?zbn;wG>OPTt0|7hzEF#@uAGwDK|l_P4#km#G+fde(Rq^JE68Zp=7nL6NS z&bX4RdtCXi1agJ5GxZ-Qv}=rsZO!}}kQz~3um@xRzVTGdXNoFLiRgJ)NtP+>0Q&*5 zcr>*Ht3oWk+`C)Y95xcCIck=v&{vvgNe;Z(F6%a#?Ogmcl_h}So0948JV#}VvlTIW z`ErgLP9PvJ=x7MMp{ZQING8L7MU*G<9gRgf2uQF_oO5+g*H%%M+AM^atybK8<6+f^(kC^J#oiTF9|b=w&g zsk-eJI`Di;jF_$hoU>cWC*FX2DW<^5_SqfhuR@5|F$WD=UOqd=hX|mNP9Y=EDadwj z4~?0DQeO2>28H$NpNjG-N1HPJWf8<}hx5WQRpf^tW6Ma>@603ci9lf5d60YLY}HRO zsum~c-NV*a2H(Ju$10r_e`X|O<~vS9ewXKZZ*{>O(LcC>G~BxeKM7Dcrt>URgFa+| zMfiqMA-o}Fx^{axY6A$0lASh6Y7hx6admP&pMY2O?;5A0Vb3%)PL;i3KJ(Z;KHWbH z!wKQ7-(eIpNZbTG(B-#eiIRztiNi$2_A2%E`v9-t1LJYgbu7`xvvp@`QIm|@UOc6m zjw;BTPa}!^Rn4qgH6tJ7j)ID(0H;HtZM=-=X@_SbtP_@*0treYfzavPrXG zH`Qn49p0>B;$v?^t1F^p=`&}P4;8T8@&v!?nx}Q1S>Yn@<*{Oorl-dJEPqKI^DcA} zvc+YT_R%gIjQ>ZtlW1=&ud>=aH&*GiSFvh%`(2?$ny1P~b-p4vI4#biHO`h=+SEu( z^RO(1gp}km9?N7`L*^g?630eicdD6gK&3D0^6cHtE#S4`iW|6St%8Tmu=H_Qh&msA zXRt@T98>qJWj5It3OPOBO8@2Hy%-N;j<#Y)5j>E^I zWBMtDY$t~WMpvpba|)#t{Z9^P3>kRbqgNp&T479g3Y3$F7TDiD3#f@&VZYx>C_yT* z?k!Hf|EG3xERyX0oK?xHIXaDzS@}Dy`VQHQ8o7jbf1hVkzC{iTOmlNP7Aq;9phZ3W zb+_!3raK}eKH&psayf14xBK1qVBEx{3RXLE`k%RSm}}g^jb&x)gm}jMCC{2UU8MS0 zg(V7(BxOWpt_@-h#F|ki{G$+Xe?5xq6~9EN&22`1!Da9Y#Uy>(RYS{9e!L3FWO81I zK{0e`WbA*ra4q+Dh94u8kz#D(~u1o16iBDV$gnbku^d4Ohlcg2DfTWH*Q z2{0bado@`w({uBO#^GV~_~l0F`zi_jYuv0Mc-+I(`*ILk7_lkbVm}gWAi!ns+c)kA zZAP=h?+s%f`pA*9{>&^c)YVdRYkWhmX70PPb0g?r5cL_9;H=#{DB5T$c#S>D_3Rl)F^C;D zpW)iZpjHAX-C_hnk*G7@U2qUhhiC+brpuqgXoZFrsT#xV&dY|D#k`Y^ILW$n4<`j+ zncjRw4{-b2sDnxYZm;FiKH*Iscd3)W z7rVzcl3h%)Jy4t1l{5wKiaZu5dfzrgA3i-+ z)x3T__ipA^T>yCvOi?D_%kio$|3Mc;?^9#5sF?U`?StLq_Isu?>S|bF5D-0PydPB` zw_`XuMRJHvZgasj&kLWx6Nw|;$(@Xre7_g1bFX;k@&K7;+fY5{#AdPkkC6aYO}t;N zRwpGR-5NI{N(~VpM-%Z!-DVHX66nMXrm^sUI=qL!+?>ZSs|+bFU)EJ290Y7Pyymc> zsXy$Mxl5vOes+cpy?$zmHff#`D!MdMNFBo7mxipCoQvJ~;eV*XYkKQuC7L#wO)lc{ z(CAoOn$*fiMJC-UP&sJd?~7mR?!ht3B5_yTk?c;7ZgxuZJI#0JZ0v!_a84`PwU2zG z;i{z+V$i<3VV@%!X+vlCqrdgyI$1<`HQk`e>1QV4#Rx8oa&OQ5a9jXaPemc@x+p_= z==%Fyk16#MYm$qvn|U7$S528kQ&c!M=JPk{Z|!(%yiQ=W3Ah29s{5KG<;`}l5!z zdP*v+<9~@h5A+pxu`fC+V$s}1P|ejvAuHQLnVo`mt%Gz%_ZW-RRQEt71#e`9hGuy0 zl@T}z+0lpQ!vpG-+pZpe@LnR*&=0Ky z#wpW5k(wiiPvntgJ_p0(GHV|8kQ-o?eKt)&Qej!WROGL{KC<{D`H3Uc3}?|>1nNok zYOU+d*t2!k4q&+TqRaVZK3Du@q)Tkw?;p?gkcd!QnB`a82Y&hZ51;?pryuR!!NG(m zb3<#R0r7#p_f4!t(AYwD1tKZQW<)V^EE1usy`FW3O3g*8cPeaH?uY&wvO(CxmkG{u zuaLgBGuCJ*E2*pVd=J)T3-e@^!SSY#)w6!xQ@feTHv-{aW7J|^(V(W*b=*YYuTeZ9 zaSyvw-D-wK72d@oL3s!j1!P>_z)?<;Q7>v~J#$xZeYwRyfMzjK%G=-%Ia<$#C%=Q& z%XKc0W*PWbjk?2h)4gY|vNn1L^6KsE*D$x3Q;}_{b?9R~D&@o8a(WwAQ`xn6rr!BvfH_%EWT=>%@%?+ByQ!zs^lq8=@&GCu#%$(=N9J&&)J#7)cFgt>8B z4tFwXIwQGegcp~w;@xV9=`?X)|= z)jeL>RvhbVZ*ub7Qn|9$aYFXk?9dgw!rpAbSHU1xtS|1l9(^O`Q0Q-MW45C%JX-{; zu~BXkZ1NK5Bdqao3Epoe!Iwmj7A3mNQ8lP(LTOoZor?ZV_A6WX^(4TWH{FIMT;1_w zz;Ash*+)N3LZYRyVcBw2#LG&ReW3ewPvFHW3^1`WmHFMAK+N|sii8=tsfhxmmO&sQ zx`^IHG1A$)vxdMeAy)Re2v4&oBnilB-ujjHR+!<+;oFwe8zXh(20c?0k1D6LR<lmEZ5zT4^Q%SgBnV{n?I1N;PD zkM*>=yLoO0?}U|*Qn~9Vf(u7?axmG_ur-p0&X1d-7)z!Y#(8%*B96#o-m>hf>XvkN zk6O@J%3YLxXm`Y;Q*#wu!w1CKc(K?gNJ@+C57Q25lyhtPz=(m9JXVsCwOyd2;-8FA zI+QBiwfT81W9P0&GY-fqttVC+oRJbFXZg{rN-!Ixm$FOSe8UrG%rJv&+ znkd7&`!XHzR1Z_jlzx!&4aE4zrJ6P0SF3)wu~ZMXF&oZNWRKHAxGjUx^=R&Jm5+NK ziwpmxXrVf`T7JQh`KQ()diwvKqKF7)bqBRUfGD{{mN0>RIq^;%4ldVicrvB6XeaE} zo%qj;0h&f^B3))_q@OU~gUgEqnIKNy-qDO_jtD>2z8Dx(Oregc#*r_)BphdZAlq1X z_+gt%QQJYFcF+XmZU1UIJkAf`@rT_N<0OY8NA#ahh^!s*^ce{qvJnZYSW zQzwS7_lJM+6eEetnqW_D+plFX!+D}t#FpXuH1X;>>-NVB)q_dFvjpY^`A4&>q=>t@ zMvP|0)`8Xu$aF2MnsfUmg=2^a6 zOInRPIJMd8QSFb+q;xEm)u582%A}aI4Aba086M&oxBa>>sHA7%n=>m^&)@e``q|5- zqyQ)}f0vusexWZbwerrupQe^PiySsJdNBMay5p)okWI^JT?w-`kdQ= zr~OH{(b4OfbPW^+Hlrg?qn^$R9N9)IG_&=z=`s-URT$D+naf_sXvttQQ0d0%zK^_c z!}Qe~vnXk02OD#6=b(NLUD*%BHqCS1$hePi3T0FJY~u@A^~?aZ>I6f+~USG}8Cj|=D yltVE=QzymxL8_qjACfk$Rw9z_|Gl^uganhVS5A>--}?7(0!dL$Rkm8%B; -
    -
    -
    - {% block page_action %} - {% endblock %} -
    -
    -
    +{#
    #} +{#
    #} +{#
    #} +{# {% block page_action %}#} +{# {% endblock %}#} +{#
    #} +{#
    #} +{#
    #}
    diff --git a/templates/pg/charge-confirm.html b/templates/pg/charge-confirm.html new file mode 100644 index 0000000..3e87bfc --- /dev/null +++ b/templates/pg/charge-confirm.html @@ -0,0 +1,33 @@ +{% extends "base.html" %} +{% load static %} +{% load crispy_forms_tags %} +{% load jalali_tags %} + +{% block title %}بازگشت{% endblock %} +{% block page_title %}بازگشت{% endblock %} + + +{% block content %} + مبلغ {{ object.amount }} ریال با وضعیت {{ object.get_state_display }}
    +
    + {% csrf_token %} +
    +
    + {#
    #} + {#
    #} + {{ form|crispy }} + {#
    #} + {#
    #} +
    +
    بازگشت به برنامه
    +
    +
    + +
    +
    +
    +
    + +{% endblock %} \ No newline at end of file diff --git a/templates/pg/charge-request.html b/templates/pg/charge-request.html index 3fb3c2c..c6e7631 100644 --- a/templates/pg/charge-request.html +++ b/templates/pg/charge-request.html @@ -8,19 +8,24 @@ {% block content %} -مبلغ {{ object.amount }} ریال با وضعیت {{ object.get_state_display }}
    + مبلغ {{ object.amount }} ریال
    {% csrf_token %}
    -{#
    #} -{#
    #} - {{ form|crispy }} -{#
    #} -{#
    #} + {#
    #} + {#
    #} + {{ form|crispy }} + {#
    #} + {#
    #}
    -
    - +
    پرداخت با:
    +
    +
    + +
    diff --git a/utils/wallet_client.py b/utils/wallet_client.py index e5ae9bf..0762eaa 100644 --- a/utils/wallet_client.py +++ b/utils/wallet_client.py @@ -14,6 +14,7 @@ from gooyal_wallet_client.api.wallet import (wallet_api_application_deposit_crea wallet_api_application_withdraw_verify_retrieve) from gooyal_wallet_client.types import Response +from django.conf import Settings class ContentTypeChoices(models.IntegerChoices): IMAGE = 1, 'image' @@ -66,7 +67,7 @@ def log_response(response): def get_client(): access_token = login_as_client_credentials()['access_token'] - client = AuthenticatedClient(base_url="https://wallet.gooyal.com", token=access_token, + client = AuthenticatedClient(base_url=settings.WALLET_BASE_PUBLIC_URL, token=access_token, httpx_args={"event_hooks": {"request": [log_request], "response": [log_response]}}, ) return client