+
    `ØjŠD  ã                   ó|  € ^ RI t ^ RIHt ^ RIHt ^ RIHt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 ^ RIHt R tR	 R
 ltR R ltR R ltR R ltR R ltR R ltR R ltR R ltR R lt R R lt!R R lt"R R  lt#R! R" lt$R# R$ lt%R% R& lt&R' R( lt'R) R* lt(R+ R, lt)R- R. lt*R/ R0 lt+R1 R2 lt,R3 R4 lt-R5 R6 lt.R7 R8 lt/R9 R: lt0R; R< lt1R= R> lt2R? R@ lt3RA RB lt4RC RD lt5RE RF lt6RG RH lt7RI RJ lt8RK RL lt9RM RN lt:RO RP lt;RQ RR lt<RS RT lt=RU RV lt>RW RX lt?RY RZ lt@R[ R\ ltAR# )]é    N)ÚHTTPException©ÚAsyncSession)ÚselectÚfunc)ÚVehicleModelMaster)
ÚBodyTypeMasterÚCustomerSegmentMasterÚ	RtoMasterÚSpecialFeatureMasterÚSpecialFeatureOptionMasterÚModelBodyTypeMapÚModelSegmentMapÚSeatingLayoutMasterÚFeatureSegmentMapÚSeatModelConfiguration)ÚProductMasterc              ƒ   óx   "  € VP                  R R7      P                  4        F  w  r#\        WV4       K  	  R# 5i)T©Úexclude_unsetN)Ú
model_dumpÚitemsÚsetattr)ÚobjÚpayloadÚfieldÚvalues   &&  ÚH/var/www/html/audi_dev/backend/app/modules/production_masters/service.pyÚ_apply_updater      s3   é € Ø×*Ñ*¸Ð*Ó>×DÑDÖF‰ˆÜ�˜EÖ"ó Gùs   ‚8:c                ó$   € V ^8„  d   QhR\         /# ©é   Údbr   )Úformats   "r   Ú__annotate__r%      s   € ÷ dñ dœlñ dó    c              ƒ   óÌ   "  € V P                  \        \        4      P                  \        P                  4      4      G R j  x€L
 P                  4       P                  4       #  L 5i©N)Úexecuter   r	   Úorder_byÚnameÚscalarsÚall©r#   s   &r   Úlist_body_typesr/      sB   é € Ø—*‘*œV¤NÓ3×<Ñ<¼^×=PÑ=PÓQÓR×R×[Ñ[Ó]×aÑaÓcÐcÑRùó   ‚?A$ÁA"Á!A$c                ó0   € V ^8„  d   QhR\         R\        /# ©r"   r#   Úreturn)r   r	   )r$   s   "r   r%   r%      s   € ÷ ñ œ|ð ¼ñ r&   c              ƒ   óö   "  € \        RR \        P                  ! 4       /VP                  4       B pV P	                  V4       V P                  4       G Rj  x€L
  V P                  V4      G Rj  x€L
  V#  L L5i)Úbody_type_idN© )r	   ÚuuidÚuuid4r   ÚaddÚcommitÚrefresh©r#   r   Úrows   && r   Úcreate_body_typer>      s^   é € Ü
Ñ
K¤d§j¢j£lÐ
K°g×6HÑ6HÓ6JÑ
K€CØ‡F�Fˆ3„KØ
�)‰)‹+×ÐØ
�*‰*�S‹/×ÐØ€Jñ Ùùó$   ‚AA9ÁA5ÁA9Á.A7Á/A9Á7A9c                óP   € V ^8„  d   QhR\         R\        P                  R\        /# )r"   r#   r5   r3   )r   r7   ÚUUIDr	   )r$   s   "r   r%   r%   #   s&   € ÷ ñ œ|ð ¼4¿9¹9ð ÔR`ñ r&   c              ƒ   ó  "  € V P                  \        V4      G R j  x€L
 pV'       g   \        RRR7      h\        W24      G R j  x€L
  V P	                  4       G R j  x€L
  V P                  V4      G R j  x€L
  V#  L_ L9 L# L5i)Né”  úBody type not found©Ústatus_codeÚdetail)Úgetr	   r   r   r:   r;   )r#   r5   r   r=   s   &&& r   Úupdate_body_typerI   #   sl   é € Ø—‘”~ |Ó4×
4€CßÜ¨Ð4IÔJÐJÜ
˜Ó
%×%Ð%Ø
�)‰)‹+×ÐØ
�*‰*�S‹/×ÐØ€Jñ 5ñ &ÙÙùóJ   ‚BœA<�B©BÁA>ÁBÁB ÁBÁ5BÁ6BÁ>BÂ BÂBc                óD   € V ^8„  d   QhR\         R\        P                  /# )r"   r#   r5   ©r   r7   rA   )r$   s   "r   r%   r%   -   s"   € ÷ 	jñ 	jœ|ð 	j¼4¿9¹9ñ 	jr&   c              ƒ   óN  "  € V P                  \        V4      G R j  x€L
 pV'       g   \        RRR7      h V P                  V4      G R j  x€L
  V P	                  4       G R j  x€L
  R #  LM L  L
  \
         d(    T P                  4       G R j  x€L 
  \        RRR7      hi ; i5i)NrC   rD   rE   é�  z2Cannot delete this body type because it is in use.)rH   r	   r   Údeleter:   Ú	ExceptionÚrollback)r#   r5   r=   s   && r   Údelete_body_typerR   -   s‰   é € Ø—‘”~ |Ó4×
4€CßÜ¨Ð4IÔJÐJðjØ�i‰i˜‹n×ÐØ�i‰i‹k×Òñ 5ñ 	ÙøÜô jØ�k‰k‹m×ÑÜ¨Ð4hÔiÐiðjüó[   ‚B%œA*�B%©B%·A0 ÁA,ÁA0 Á#A.Á$A0 Á(B%Á,A0 Á.A0 Á0B"ÂBÂB"Â"B%c                ó$   € V ^8„  d   QhR\         /# r!   r   )r$   s   "r   r%   r%   :   s   € ÷ rñ rœLñ rr&   c              ƒ   óÌ   "  € V P                  \        \        4      P                  \        P                  4      4      G R j  x€L
 P                  4       P                  4       #  L 5ir(   )r)   r   r
   r*   r+   r,   r-   r.   s   &r   Úlist_segmentsrV   :   sD   é € Ø—*‘*œVÔ$9Ó:×CÑCÔDY×D^ÑD^Ó_Ó`×`×iÑiÓk×oÑoÓqÐqÑ`ùr0   c                ó0   € V ^8„  d   QhR\         R\        /# r2   )r   r
   )r$   s   "r   r%   r%   >   s   € ÷ ñ œ\ð Ô7Lñ r&   c              ƒ   óö   "  € \        RR \        P                  ! 4       /VP                  4       B pV P	                  V4       V P                  4       G Rj  x€L
  V P                  V4      G Rj  x€L
  V#  L L5i)Ú
segment_idNr6   )r
   r7   r8   r   r9   r:   r;   r<   s   && r   Úcreate_segmentrZ   >   s^   é € Ü
Ñ
P¬4¯:ª:«<Ð
P¸7×;MÑ;MÓ;OÑ
P€CØ‡F�Fˆ3„KØ
�)‰)‹+×ÐØ
�*‰*�S‹/×ÐØ€Jñ Ùùr?   c                óP   € V ^8„  d   QhR\         R\        P                  R\        /# )r"   r#   rY   r3   )r   r7   rA   r
   )r$   s   "r   r%   r%   F   s&   € ÷ ñ œ\ð ´t·y±yð ÔNcñ r&   c              ƒ   ó  "  € V P                  \        V4      G R j  x€L
 pV'       g   \        RRR7      h\        W24      G R j  x€L
  V P	                  4       G R j  x€L
  V P                  V4      G R j  x€L
  V#  L_ L9 L# L5i)NrC   úSegment not foundrE   )rH   r
   r   r   r:   r;   )r#   rY   r   r=   s   &&& r   Úupdate_segmentr^   F   sm   é € Ø—‘Ô,¨jÓ9×
9€CßÜ¨Ð4GÔHÐHÜ
˜Ó
%×%Ð%Ø
�)‰)‹+×ÐØ
�*‰*�S‹/×ÐØ€Jñ :ñ &ÙÙùrJ   c                óD   € V ^8„  d   QhR\         R\        P                  /# )r"   r#   rY   rL   )r$   s   "r   r%   r%   P   s"   € ÷ 	hñ 	hœ\ð 	h´t·y±yñ 	hr&   c              ƒ   óN  "  € V P                  \        V4      G R j  x€L
 pV'       g   \        RRR7      h V P                  V4      G R j  x€L
  V P	                  4       G R j  x€L
  R #  LM L  L
  \
         d(    T P                  4       G R j  x€L 
  \        RRR7      hi ; i5i)NrC   r]   rE   rN   z0Cannot delete this segment because it is in use.)rH   r
   r   rO   r:   rP   rQ   )r#   rY   r=   s   && r   Údelete_segmentra   P   sŠ   é € Ø—‘Ô,¨jÓ9×
9€CßÜ¨Ð4GÔHÐHðhØ�i‰i˜‹n×ÐØ�i‰i‹k×Òñ :ñ 	ÙøÜô hØ�k‰k‹m×ÑÜ¨Ð4fÔgÐgðhürS   c                ó$   € V ^8„  d   QhR\         /# r!   r   )r$   s   "r   r%   r%   ]   s   € ÷ Zñ Zœñ Zr&   c              ƒ   óÌ   "  € V P                  \        \        4      P                  \        P                  4      4      G R j  x€L
 P                  4       P                  4       #  L 5ir(   )r)   r   r   r*   r+   r,   r-   r.   s   &r   Ú	list_rtosrd   ]   s@   é € Ø—*‘*œV¤IÓ.×7Ñ7¼	¿¹ÓGÓH×H×QÑQÓS×WÑWÓYÐYÑHùr0   c                ó0   € V ^8„  d   QhR\         R\        /# r2   )r   r   )r$   s   "r   r%   r%   a   s   € ÷ ñ œð ´9ñ r&   c              ƒ   óö   "  € \        RR \        P                  ! 4       /VP                  4       B pV P	                  V4       V P                  4       G Rj  x€L
  V P                  V4      G Rj  x€L
  V#  L L5i)Úrto_idNr6   )r   r7   r8   r   r9   r:   r;   r<   s   && r   Ú
create_rtorh   a   s^   é € Ü
Ñ
@œ4Ÿ:š:›<Ð
@¨7×+=Ñ+=Ó+?Ñ
@€CØ‡F�Fˆ3„KØ
�)‰)‹+×ÐØ
�*‰*�S‹/×ÐØ€Jñ Ùùr?   c                óP   € V ^8„  d   QhR\         R\        P                  R\        /# )r"   r#   rg   r3   )r   r7   rA   r   )r$   s   "r   r%   r%   i   s%   € ÷ ñ œð ¬t¯y©yð Äiñ r&   c              ƒ   ó  "  € V P                  \        V4      G R j  x€L
 pV'       g   \        RRR7      h\        W24      G R j  x€L
  V P	                  4       G R j  x€L
  V P                  V4      G R j  x€L
  V#  L_ L9 L# L5i)NrC   úRTO not foundrE   )rH   r   r   r   r:   r;   )r#   rg   r   r=   s   &&& r   Ú
update_rtorl   i   sk   é € Ø—‘”y &Ó)×
)€CßÜ¨°OÔDÐDÜ
˜Ó
%×%Ð%Ø
�)‰)‹+×ÐØ
�*‰*�S‹/×ÐØ€Jñ *ñ &ÙÙùrJ   c                óD   € V ^8„  d   QhR\         R\        P                  /# )r"   r#   rg   rL   )r$   s   "r   r%   r%   s   s"   € ÷ 	dñ 	dœð 	d¬t¯y©yñ 	dr&   c              ƒ   óN  "  € V P                  \        V4      G R j  x€L
 pV'       g   \        RRR7      h V P                  V4      G R j  x€L
  V P	                  4       G R j  x€L
  R #  LM L  L
  \
         d(    T P                  4       G R j  x€L 
  \        RRR7      hi ; i5i)NrC   rk   rE   rN   z,Cannot delete this RTO because it is in use.)rH   r   r   rO   r:   rP   rQ   )r#   rg   r=   s   && r   Ú
delete_rtoro   s   sˆ   é € Ø—‘”y &Ó)×
)€CßÜ¨°OÔDÐDðdØ�i‰i˜‹n×ÐØ�i‰i‹k×Òñ *ñ 	ÙøÜô dØ�k‰k‹m×ÑÜ¨Ð4bÔcÐcðdürS   c                ó$   € V ^8„  d   QhR\         /# r!   r   )r$   s   "r   r%   r%   €   s   € ÷ tñ tœ,ñ tr&   c              ƒ   óÌ   "  € V P                  \        \        4      P                  \        P                  4      4      G R j  x€L
 P                  4       P                  4       #  L 5ir(   )r)   r   r   r*   Úmodel_numberr,   r-   r.   s   &r   Úlist_modelsrs   €   sD   é € Ø—*‘*œVÔ$6Ó7×@Ñ@ÔAS×A`ÑA`ÓaÓb×b×kÑkÓm×qÑqÓsÐsÑbùr0   c                ó0   € V ^8„  d   QhR\         R\        /# r2   )r   r   )r$   s   "r   r%   r%   „   s   € ÷ 
ñ 
œ<ð 
Ô5Gñ 
r&   c              ƒ   óà  "  € V P                  \        \        4      P                  \        P                  VP                  8H  4      4      G R j  x€L
 P                  4       pV'       d   \        RRR7      h\        RR\        P                  ! 4       /VP                  4       B pV P                  V4       V P                  4       G R j  x€L
  V P                  V4      G R j  x€L
  V#  L™ L! L
5i)NrN   z'A model with this number already existsrE   Úmodel_idr6   )r)   r   r   Úwhererr   Úscalar_one_or_noner   r7   r8   r   r9   r:   r;   ©r#   r   Úexistingr=   s   &&  r   Úcreate_modelr{   „   s»   é € Ø—j‘jÜÔ!Ó"×(Ñ(Ô);×)HÑ)HÈG×L`ÑL`Ñ)`Óaó÷ çÑÓð ÷ Ü¨Ð4]Ô^Ð^Ü
Ñ
K¤d§j¢j£lÐ
K°g×6HÑ6HÓ6JÑ
K€CØ‡F�Fˆ3„KØ
�)‰)‹+×ÐØ
�*‰*�S‹/×ÐØ€Jññ Ùùs=   ‚AC.ÁC(ÁC.Á)AC.ÃC*Ã	C.Ã!C,Ã"C.Ã*C.Ã,C.c                óP   € V ^8„  d   QhR\         R\        P                  R\        /# )r"   r#   rv   r3   )r   r7   rA   r   )r$   s   "r   r%   r%   ‘   s&   € ÷ ñ œ<ð ´4·9±9ð ÔJ\ñ r&   c              ƒ   ó  "  € V P                  \        V4      G R j  x€L
 pV'       g   \        RRR7      h\        W24      G R j  x€L
  V P	                  4       G R j  x€L
  V P                  V4      G R j  x€L
  V#  L_ L9 L# L5i)NrC   úModel not foundrE   )rH   r   r   r   r:   r;   )r#   rv   r   r=   s   &&& r   Úupdate_modelr   ‘   sm   é € Ø—‘Ô)¨8Ó4×
4€CßÜ¨Ð4EÔFÐFÜ
˜Ó
%×%Ð%Ø
�)‰)‹+×ÐØ
�*‰*�S‹/×ÐØ€Jñ 5ñ &ÙÙùrJ   c                óD   € V ^8„  d   QhR\         R\        P                  /# ©r"   r#   rv   rL   )r$   s   "r   r%   r%   ›   s"   € ÷ 	fñ 	fœ<ð 	f´4·9±9ñ 	fr&   c              ƒ   óN  "  € V P                  \        V4      G R j  x€L
 pV'       g   \        RRR7      h V P                  V4      G R j  x€L
  V P	                  4       G R j  x€L
  R #  LM L  L
  \
         d(    T P                  4       G R j  x€L 
  \        RRR7      hi ; i5i)NrC   r~   rE   rN   z.Cannot delete this model because it is in use.)rH   r   r   rO   r:   rP   rQ   )r#   rv   r=   s   && r   Údelete_modelrƒ   ›   sŠ   é € Ø—‘Ô)¨8Ó4×
4€CßÜ¨Ð4EÔFÐFðfØ�i‰i˜‹n×ÐØ�i‰i‹k×Òñ 5ñ 	ÙøÜô fØ�k‰k‹m×ÑÜ¨Ð4dÔeÐeðfürS   c                ó$   € V ^8„  d   QhR\         /# r!   r   )r$   s   "r   r%   r%   ¨   s   € ÷ ñ œLñ r&   c              ƒ   óR  "  € V P                  \        \        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/ pV F.  pVP                  VP                  . 4      P                  V4       K0  	  V F$  pVP                  VP                  . 4      Vn        K&  	  V#  Lá L„5ir(   )r)   r   r   r*   Úsequence_nor,   r-   r   Ú
setdefaultÚ
feature_idÚappendrH   Úoptions)r#   ÚfeaturesrŠ   Ú
by_featureÚoÚfs   &     r   Úlist_featuresr�   ¨   sâ   é € Ø—j‘jÜÔ#Ó$×-Ñ-Ô.B×.NÑ.NÓOó÷ ç�wƒy—‘“ð ð —Z‘ZÜÔ)Ó*×3Ñ3Ô4N×4ZÑ4ZÓ[ó÷ ç�wƒy—‘“ð ð €JÛˆØ×Ñ˜aŸl™l¨BÓ/×6Ñ6°qÖ9ñ ãˆØ—N‘N 1§<¡<°Ó4ˆŽ	ñ à€Oññùs%   ‚?D'ÁD#ÁAD'Â D%Â!BD'Ä%D'c                ó0   € V ^8„  d   QhR\         R\        /# r2   )r   r   )r$   s   "r   r%   r%   ·   s   € ÷ ñ œ\ð Ô7Kñ r&   c              ƒ   ó  "  € \        RR \        P                  ! 4       /VP                  4       B pV P	                  V4       V P                  4       G Rj  x€L
  V P                  V4      G Rj  x€L
  . Vn        V#  L& L5i)rˆ   Nr6   )r   r7   r8   r   r9   r:   r;   rŠ   r<   s   && r   Úcreate_featurer’   ·   se   é € Ü
Ñ
O¬$¯*ª*«,Ð
O¸'×:LÑ:LÓ:NÑ
O€CØ‡F�Fˆ3„KØ
�)‰)‹+×ÐØ
�*‰*�S‹/×ÐØ€C„KØ€Jñ Ùùs$   ‚AB ÁA<ÁB Á.A>Á/B Á>B c                óP   € V ^8„  d   QhR\         R\        P                  R\        /# ©r"   r#   rˆ   r3   )r   r7   rA   r   )r$   s   "r   r%   r%   À   s&   € ÷ ñ œ\ð ´t·y±yð ÔNbñ r&   c              ƒ   ó  "  € V P                  \        V4      G R j  x€L
 pV'       g   \        RRR7      h\        W24      G R j  x€L
  V P	                  4       G R j  x€L
  V P                  V4      G R j  x€L
  V P                  \        \        4      P                  \        P                  V8H  4      P                  \        P                  4      4      G R j  x€L
 P                  4       P                  4       Vn        V#  Lã L½ L§ L� L/5i)NrC   úFeature not foundrE   )rH   r   r   r   r:   r;   r)   r   r   rw   rˆ   r*   r†   r,   r-   rŠ   )r#   rˆ   r   r=   s   &&& r   Úupdate_featurer—   À   sÍ   é € Ø—‘Ô+¨ZÓ8×
8€CßÜ¨Ð4GÔHÐHÜ
˜Ó
%×%Ð%Ø
�)‰)‹+×ÐØ
�*‰*�S‹/×ÐØŸ™ÜÔ)Ó*×0Ñ0Ô1K×1VÑ1VÐZdÑ1dÓeß	‰Ô,×8Ñ8Ó	9ó÷ ÷ �wƒy—‘“ð „Kð €Jñ 9ñ &ÙÙñùs]   ‚D
œD �D
©D
ÁDÁD
ÁDÁD
Á5DÁ6A"D
ÃDÃ(D
ÄD
ÄD
ÄD
ÄD
c                óD   € V ^8„  d   QhR\         R\        P                  /# )r"   r#   rˆ   rL   )r$   s   "r   r%   r%   Î   s"   € ÷ [ñ [œ\ð [´t·y±yñ [r&   c              ƒ   óâ  "  € V P                  \        V4      G R j  x€L
 pV'       g   \        RRR7      h ^ RIHp V P                  V! R4      RV/4      G R j  x€L
  V P                  V! R4      RV/4      G R j  x€L
  V P                  V! R4      RV/4      G R j  x€L
  V P                  V! R	4      RV/4      G R j  x€L
  V P                  V! R
4      R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 #  Lý LÁ L¡ L� La LA L* L  \         d8   pT P                  4       G R j  x€L 
  \        RR\        T4       2R7      hR p?ii ; i5i)NrC   r–   rE   ©Útextz@DELETE FROM dealer_order_vehicle_feature WHERE feature_id = :fidÚfidzCDELETE FROM dealer_vehicle_template_feature WHERE feature_id = :fidz7DELETE FROM feature_segment_map WHERE feature_id = :fidz€DELETE FROM special_feature_bom WHERE option_id IN (SELECT option_id FROM special_feature_option_master WHERE feature_id = :fid)zADELETE FROM special_feature_option_master WHERE feature_id = :fidrN   zFailed to delete feature: )rH   r   r   Ú
sqlalchemyr›   r)   rO   r:   rP   rQ   Ústr)r#   rˆ   r=   r›   Úes   &&   r   Údelete_featurer    Î   sp  é € Ø—‘Ô+¨ZÓ8×
8€CßÜ¨Ð4GÔHÐHð[Ý#Ø�j‰j™Ð`ÓaÐdiÐkuÐcvÓw×wÐwØ�j‰j™ÐcÓdÐglÐnxÐfyÓz×zÐzØ�j‰j™ÐWÓXÐ[`ÐblÐZmÓn×nÐnØ�j‰j™ð  aó  bð  ejð  lvð  dwó  x÷  	xð  	xØ�j‰j™ÐaÓbÐejÐlvÐdwÓx×xÐxØ�i‰i˜‹n×ÐØ�i‰i‹k×Òñ 9ñ
 	xÙzÙnñ 	xÙxÙÙøÜô [Ø�k‰k‹m×ÑÜ¨Ð6PÔQTÐUVÓQWÐPXÐ4YÔZÐZûð[üsÁ   ‚E/œD�E/©E/·#D* ÁDÁ!D* Á<DÁ=!D* ÂD Â!D* Ã D"Ã!D* Ã"D$Ã#D* Ã;D&Ã<D* ÄD(ÄD* ÄE/ÄD* ÄD* Ä D* Ä"D* Ä$D* Ä&D* Ä(D* Ä*E,Ä5E'ÅEÅ	E'Å'E,Å,E/c                óP   € V ^8„  d   QhR\         R\        P                  R\        /# r”   ©r   r7   rA   r   )r$   s   "r   r%   r%   à   s&   € ÷ ñ ¤Lð ¼d¿i¹ið ÔUoñ r&   c              ƒ   ód  "  € V P                  \        V4      G R j  x€L
 pV'       g   \        RRR7      h\        RR\        P
                  ! 4       RV/VP                  4       B pV P                  V4       V P                  4       G R j  x€L
  V P                  V4      G R j  x€L
  V#  L� L! L
5i)NrC   r–   rE   Ú	option_idrˆ   r6   )
rH   r   r   r   r7   r8   r   r9   r:   r;   )r#   rˆ   r   Úfeaturer=   s   &&&  r   Úcreate_feature_optionr¦   à   sŽ   é € Ø—F‘FÔ/°Ó<×<€GßÜ¨Ð4GÔHÐHÜ
$Ñ
k¬t¯zªz«|Ð
kÈ
Ð
kÐV]×VhÑVhÓVjÑ
k€CØ‡F�Fˆ3„KØ
�)‰)‹+×ÐØ
�*‰*�S‹/×ÐØ€Jñ =ñ
 Ùùs9   ‚B0œB*�B0©A!B0Â
B,ÂB0Â#B.Â$B0Â,B0Â.B0c                óp   € V ^8„  d   QhR\         R\        P                  R\        P                  R\        /# )r"   r#   rˆ   r¤   r3   r¢   )r$   s   "r   r%   r%   ë   s8   € ÷ ñ ¤Lð ¼d¿i¹ið ÔTX×T]ÑT]ð ô  lFñ r&   c              ƒ   ó.  "  € V P                  \        V4      G R j  x€L
 pV'       d   VP                  V8w  d   \        RRR7      h\	        WC4      G R j  x€L
  V P                  4       G R j  x€L
  V P                  V4      G R j  x€L
  V#  Lp L9 L# L5i)NrC   zOption not foundrE   )rH   r   rˆ   r   r   r:   r;   )r#   rˆ   r¤   r   r=   s   &&&& r   Úupdate_feature_optionr©   ë   sx   é € Ø—‘Ô1°9Ó=×
=€Cß�#—.‘. JÔ.Ü¨Ð4FÔGÐGÜ
˜Ó
%×%Ð%Ø
�)‰)‹+×ÐØ
�*‰*�S‹/×ÐØ€Jñ >ñ &ÙÙùsJ   ‚BœB�B©,BÁBÁBÁ-BÁ.BÂBÂBÂBÂBÂBc                ód   € V ^8„  d   QhR\         R\        P                  R\        P                  /# )r"   r#   rˆ   r¤   rL   )r$   s   "r   r%   r%   ô   s1   € ÷ ^ñ ^¤Lð ^¼d¿i¹ið ^ÔTX×T]ÑT]ñ ^r&   c              ƒ   ó  "  € V P                  \        V4      G R j  x€L
 pV'       d’   VP                  V8X  d    ^ RIHp V P                  V! R4      RV/4      G R j  x€L
  V P                  V! R4      R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 #  LŸ L_ L? L( L  \         d8   pT P                  4       G R j  x€L 
  \        RR\        T4       2R7      hR p?ii ; i5i)Nrš   zGDELETE FROM dealer_order_vehicle_feature WHERE feature_option_id = :oidÚoidzJDELETE FROM dealer_vehicle_template_feature WHERE feature_option_id = :oidrN   zFailed to delete option: rE   )rH   r   rˆ   r�   r›   r)   rO   r:   rP   rQ   r   rž   )r#   rˆ   r¤   r=   r›   rŸ   s   &&&   r   Údelete_feature_optionr­   ô   s  é € Ø—‘Ô1°9Ó=×
=€Cß
ˆs�~‰~ Ô+ð	^Ý'Ø—*‘*™TÐ"kÓlÐotÐvð  oAó  B÷  Bð  BØ—*‘*™TÐ"nÓoÐrwð  zCð  rDó  E÷  Eð  EØ—)‘)˜C“.× Ð Ø—)‘)“+×Òñ ,�sñ >ñ Bñ EÙ ÙøÜô 	^Ø—+‘+“-×ÑÜ¨CÐ:SÔTWÐXYÓTZÐS[Ð8\Ô]Ð]ûð	^üs‹   ‚DœB<�D©D»#C ÁB>Á!C Â C ÂC ÂCÂC Â1CÂ2C Â6DÂ>C Ã C ÃC ÃC ÃDÃDÃ$C'Ã%DÄDÄDc                ó$   € V ^8„  d   QhR\         /# r!   r   )r$   s   "r   r%   r%     s   € ÷ Hñ H¤Lñ Hr&   c              ƒ   ó’   "  € V P                  \        \        4      4      G R j  x€L
 P                  4       P	                  4       #  L 5ir(   )r)   r   r   r,   r-   r.   s   &r   Úlist_model_body_typesr°     s2   é € Ø—*‘*œVÔ$4Ó5Ó6×6×?Ñ?ÓA×EÑEÓGÐGÑ6ùó   ‚"A¤A¥!Ac                óD   € V ^8„  d   QhR\         R\        P                  /# r�   rL   )r$   s   "r   r%   r%     s   € ÷ ñ ´Lð ÌDÏIÉIñ r&   c           	   ƒ   ó  "  € V P                  \        V4      G R j  x€L
 pV'       g   R # V P                  \        \        4      P                  \        \        P                  \        P                  8H  4      P                  \        P                  V8H  4      4      G R j  x€L
 P                  4       P                  4       pV P                  \        \        4      P                  \        \        P                  \        P                  8H  4      P                  \        P                  V8H  4      4      G R j  x€L
 P                  4       P                  4       pR pV EF   pV Fö  pV! VP                  4       RV! VP                  4       RV! VP                   4       2pVP                   RVP                   RVP                    2p	V P                  \        \"        4      P                  \"        P$                  V8H  4      4      G R j  x€L
 P'                  4       p
V
'       d   KÃ  \#        \(        P*                  ! 4       V	VRR7      pV P-                  V4       Kø  	  EK  	  V P/                  4       G R j  x€L
  R #  EL] ELÝ ELK L{ L5i)Nc                 ó„   € V '       d8   \        V 4      P                  4       P                  R R4      P                  4       # R# )Ú Ú_Ú )rž   ÚstripÚreplaceÚupper)Úvals   &r   ÚsanitizeÚ7ensure_product_combinations_for_model.<locals>.sanitize  s0   € ß=@Œs�3‹x�~‰~Ó×'Ñ'¨¨SÓ1×7Ñ7Ó9ÐHÀbÐHr&   Ú___z - ÚNOS)Ú
product_idr+   Úproduct_codeÚunit_of_measurement)rH   r   r)   r   r	   Újoinr   r5   rw   rv   r,   r-   r
   r   rY   r+   rr   r   rÁ   rx   r7   r8   r9   r:   )r#   rv   ÚmodelÚ
body_typesÚsegmentsr¼   ÚbtÚsegÚp_codeÚp_namerz   Únew_prods   &&          r   Ú%ensure_product_combinations_for_modelrÌ     sð  é € Ø—&‘&Ô+¨XÓ6×6€Eß‘&àŸ
™
ÜŒ~Ó×#Ñ#Ô$4Ô6F×6SÑ6SÔWe×WrÑWrÑ6rÓsß	‰Ô×(Ñ(¨HÑ4Ó	5ó÷ ÷ �wƒy—‘“ð ð
 —j‘jÜÔ$Ó%×*Ñ*¬?¼O×<VÑ<VÔZo×ZzÑZzÑ<zÓ{ß	‰Œ×'Ñ'¨8Ñ3Ó	4ó÷ ÷ �wƒy—‘“ð ò
Iô ˆÛˆCÙ  §¡Ó)Ð*¨#©h°s·x±xÓ.@Ð-AÀÁXÈe×N`ÑN`ÓEaÐDbÐcˆFØŸ™�y  C§H¡H :¨S°×1CÑ1CÐ0DÐEˆFà Ÿj™j¬´Ó)>×)DÑ)DÄ]×E_ÑE_ÐciÑEiÓ)jÓk×k×Ñó  BˆHß‘8Ü(Ü#Ÿzšz›|ØØ!'Ø(-ô	�ð —‘�xÖ ô ñ ð �)‰)‹+×Òò= 7òò
ñ lñ ùsf   ‚JœI9�J©A6JÂI<Â BJÄ4I?Ä5CJÈJÈJÈ#AJÉ2JÉ3JÉ<JÉ?JÊJÊJc                ó0   € V ^8„  d   QhR\         R\        /# r2   )r   r   )r$   s   "r   r%   r%   *  s   € ÷ ñ ¤,ð Ô<Lñ r&   c              ƒ   óN  "  € V P                  \        \        4      P                  \        P                  VP                  8H  \        P
                  VP
                  8H  4      4      G R j  x€L
 P                  4       pV'       d   V# \        \        P                  ! 4       VP                  VP
                  R7      pV P                  V4       V P                  4       G R j  x€L
  V P                  V4      G R j  x€L
  \        WP                  4      G R j  x€L
  V#  L² L> L' L5i)N)Úidrv   r5   )r)   r   r   rw   rv   r5   rx   r7   r8   r9   r:   r;   rÌ   ry   s   &&  r   Úadd_model_body_typerÐ   *  sâ   é € Ø—j‘jÜÔÓ ×&Ñ&Ü×%Ñ%¨×)9Ñ)9Ñ9Ô;K×;XÑ;XÐ\c×\pÑ\pÑ;pó	
ó÷ ÷ ÑÓð	 ÷
 ØˆÜ
œdŸjšj›l°W×5EÑ5EÐT[×ThÑThÔ
i€CØ‡F�Fˆ3„KØ
�)‰)‹+×ÐØ
�*‰*�S‹/×ÐÜ
/°×4DÑ4DÓ
E×EÐEØ€Jññ ÙÙEùóO   ‚A(D%Á*DÁ+D%ÂAD%Ã DÃ!D%Ã9D!Ã:D%ÄD#ÄD%ÄD%Ä!D%Ä#D%c                óD   € V ^8„  d   QhR\         R\        P                  /# ©r"   r#   Úlink_idrL   )r$   s   "r   r%   r%   :  ó   € ÷ ñ ¤\ð ¼D¿I¹Iñ r&   c              ƒ   óÌ   "  € V P                  \        V4      G R j  x€L
 pV'       d4   V P                  V4      G R j  x€L
  V P                  4       G R j  x€L
  R # R #  LA L" L5ir(   )rH   r   rO   r:   ©r#   rÔ   r=   s   && r   Úremove_model_body_typerØ   :  sL   é € Ø—‘Ô'¨Ó1×
1€Cß
Ø�i‰i˜‹n×ÐØ�i‰i‹k×Òñ ñ 2áÙùó6   ‚A$œA�A$©A$½A ¾A$ÁA"Á	A$Á A$Á"A$c                ó$   € V ^8„  d   QhR\         /# r!   r   )r$   s   "r   r%   r%   A  s   € ÷ Gñ G¤,ñ Gr&   c              ƒ   ó’   "  € V P                  \        \        4      4      G R j  x€L
 P                  4       P	                  4       #  L 5ir(   )r)   r   r   r,   r-   r.   s   &r   Úlist_model_segmentsrÜ   A  s1   é € Ø—*‘*œV¤OÓ4Ó5×5×>Ñ>Ó@×DÑDÓFÐFÑ5ùr±   c                ó0   € V ^8„  d   QhR\         R\        /# r2   )r   r   )r$   s   "r   r%   r%   E  s   € ÷ ñ ¤ð ¼/ñ r&   c              ƒ   óN  "  € V P                  \        \        4      P                  \        P                  VP                  8H  \        P
                  VP
                  8H  4      4      G R j  x€L
 P                  4       pV'       d   V# \        \        P                  ! 4       VP                  VP
                  R7      pV P                  V4       V P                  4       G R j  x€L
  V P                  V4      G R j  x€L
  \        WP                  4      G R j  x€L
  V#  L² L> L' L5i)N)rÏ   rv   rY   )r)   r   r   rw   rv   rY   rx   r7   r8   r9   r:   r;   rÌ   ry   s   &&  r   Úadd_model_segmentrß   E  sà   é € Ø—j‘jÜŒÓ×%Ñ%Ü×$Ñ$¨×(8Ñ(8Ñ8¼/×:TÑ:TÐX_×XjÑXjÑ:jó	
ó÷ ÷ ÑÓð	 ÷
 ØˆÜ
œTŸZšZ›\°G×4DÑ4DÐQX×QcÑQcÔ
d€CØ‡F�Fˆ3„KØ
�)‰)‹+×ÐØ
�*‰*�S‹/×ÐÜ
/°×4DÑ4DÓ
E×EÐEØ€Jññ ÙÙEùrÑ   c                óD   € V ^8„  d   QhR\         R\        P                  /# rÓ   rL   )r$   s   "r   r%   r%   U  s   € ÷ ñ ¤<ð ¼$¿)¹)ñ r&   c              ƒ   óÌ   "  € V P                  \        V4      G R j  x€L
 pV'       d4   V P                  V4      G R j  x€L
  V P                  4       G R j  x€L
  R # R #  LA L" L5ir(   )rH   r   rO   r:   r×   s   && r   Úremove_model_segmentrâ   U  sK   é € Ø—‘”¨Ó0×
0€Cß
Ø�i‰i˜‹n×ÐØ�i‰i‹k×Òñ ñ 1áÙùrÙ   c                ó$   € V ^8„  d   QhR\         /# r!   r   )r$   s   "r   r%   r%   [  s   € ÷ Iñ I¤Lñ Ir&   c              ƒ   ó’   "  € V P                  \        \        4      4      G R j  x€L
 P                  4       P	                  4       #  L 5ir(   )r)   r   r   r,   r-   r.   s   &r   Úlist_feature_segmentsrå   [  s2   é € Ø—*‘*œVÔ$5Ó6Ó7×7×@Ñ@ÓB×FÑFÓHÐHÑ7ùr±   c                ó0   € V ^8„  d   QhR\         R\        /# r2   )r   r   )r$   s   "r   r%   r%   ^  s   € ÷ ñ ¤,ð Ô<Mñ r&   c              ƒ   ó  "  € V P                  \        \        4      P                  \        P                  VP                  8H  \        P
                  VP
                  8H  4      4      G R j  x€L
 P                  4       pV'       d   V# \        \        P                  ! 4       VP                  VP
                  R7      pV P                  V4       V P                  4       G R j  x€L
  V P                  V4      G R j  x€L
  V#  L• L! L
5i)N)rÏ   rˆ   rY   )r)   r   r   rw   rˆ   rY   rx   r7   r8   r9   r:   r;   ry   s   &&  r   Úadd_feature_segmentrè   ^  sË   é € Ø—j‘jÜÔ Ó!×'Ñ'Ü×(Ñ(¨G×,>Ñ,>Ñ>Ô@Q×@\Ñ@\Ð`g×`rÑ`rÑ@ró	
ó÷ ÷ ÑÓð	 ÷
 ØˆÜ
œtŸzšz›|¸×8JÑ8JÐW^×WiÑWiÔ
j€CØ‡F�Fˆ3„KØ
�)‰)‹+×ÐØ
�*‰*�S‹/×ÐØ€Jññ Ùùs=   ‚A(DÁ*D Á+DÂADÃ DÃ!DÃ9DÃ:DÄDÄDc                óD   € V ^8„  d   QhR\         R\        P                  /# rÓ   rL   )r$   s   "r   r%   r%   l  rÕ   r&   c              ƒ   óÌ   "  € V P                  \        V4      G R j  x€L
 pV'       d4   V P                  V4      G R j  x€L
  V P                  4       G R j  x€L
  R # R #  LA L" L5ir(   )rH   r   rO   r:   r×   s   && r   Úremove_feature_segmentrë   l  sL   é € Ø—‘Ô(¨'Ó2×
2€Cß
Ø�i‰i˜‹n×ÐØ�i‰i‹k×Òñ ñ 3áÙùrÙ   c                ó$   € V ^8„  d   QhR\         /# r!   r   )r$   s   "r   r%   r%   t  s   € ÷ sñ s¤<ñ sr&   c              ƒ   óÌ   "  € V P                  \        \        4      P                  \        P                  4      4      G R j  x€L
 P                  4       P                  4       #  L 5ir(   )r)   r   r   r*   Ú	layout_nor,   r-   r.   s   &r   Úlist_seating_layoutsrï   t  sD   é € Ø—*‘*œVÔ$7Ó8×AÑAÔBU×B_ÑB_Ó`Óa×a×jÑjÓl×pÑpÓrÐrÑaùr0   c                ó`   € V ^8„  d   QhR\         R\        R\        R\        R\        R\        /# )r"   r#   Úchassis_modelÚ	body_typeÚsegmentÚ	door_typeÚ	seat_type)r   rž   )r$   s   "r   r%   r%   w  s>   € ÷ 1ñ 1¤\ð 1Ä#ð 1ÔRUð 1Ô`cð 1Ôpsð 1ô  ADñ 1r&   c           	   ƒ   óf  "  € V'       d   VP                  4       MR pRV9   g   RV9   g   VR8X  d   RpMRV9   g   RV9   g   RV9   d   RpV'       d   VP                  4       MR pR	V9   g   R
V9   d   RpMRV9   g   VR8X  d   RpM	RV9   d   RpV'       d   VP                  RR 4      MR p\        \        4      P	                  \
        P                  ! \        P                  RR 4      P                  RV R24      \        P                  P                  V4      \        P                  P                  V4      \        P                  P                  V4      \        P                  P                  V4      4      p	V P                  V	4      G Rj  x€L
 P                  4       P                  4       #  L 5i)r·   zsingle doorz
first doorzjk doorzSingle doorzdouble doorzboth jk doorz	both doorzDouble doorÚregularzlow backzLow Backz	push backÚpbz	Push BackÚhhrÚHHRrµ   Ú%N)Úlowerr¹   r   r   rw   r   rñ   Úilikerò   ró   rô   rõ   r)   r,   r-   )
r#   rñ   rò   ró   rô   rõ   Údt_lowerÚst_lowerÚcmÚqs
   &&&&&&    r   Úsearch_seating_layoutsr  w  s_  é € ß$-ˆy�‰Ô °2€HØ˜Ô  L°HÔ$<ÀÈIÔ@UØ!‰	Ø	˜(Ô	" n¸Ô&@ÀKÐS[ÔD[Ø!ˆ	ç$-ˆy�‰Ô °2€HØ�HÔ 
¨hÔ 6Ø‰	Ø	˜Ô	  H°Ô$4Ø‰	Ø	�(Ô	Øˆ	ç+8ˆ×	Ñ	˜s BÔ	'¸b€BÜÔ"Ó#×)Ñ)Ü�ŠÔ(×6Ñ6¸¸RÓ@×FÑFÈÈ2È$ÈaÀyÓQÜ×%Ñ%×+Ñ+¨IÓ6Ü×#Ñ#×)Ñ)¨'Ó2Ü×%Ñ%×+Ñ+¨IÓ6Ü×%Ñ%×+Ñ+¨IÓ6ó	€Að —*‘*˜Q“-××(Ñ(Ó*×.Ñ.Ó0Ð0Ñùs    ‚AF1ÁAF1ÂC5F1ÆF/Æ!F1c                ó0   € V ^8„  d   QhR\         R\        /# r2   )r   r   )r$   s   "r   r%   r%   �  s   € ÷ 
ñ 
¤Lð 
Ô>Qñ 
r&   c              ƒ   óä  "  € V P                  \        \        4      P                  \        P                  VP                  8H  4      4      G R j  x€L
 P                  4       pV'       d   \        RRR7      h\        RR\        P                  ! 4       /VP                  RR7      B pV P                  V4       V P                  4       G R j  x€L
  V P                  V4      G R j  x€L
  V#  L› L! L
5i)NrN   z(A layout with this number already existsrE   Ú	layout_idTr   r6   )r)   r   r   rw   rî   rx   r   r7   r8   r   r9   r:   r;   ry   s   &&  r   Úcreate_seating_layoutr  �  sÁ   é € Ø—j‘jÜÔ"Ó#×)Ñ)Ô*=×*GÑ*GÈ7×K\ÑK\Ñ*\Ó]ó÷ çÑÓð ÷ Ü¨Ð4^Ô_Ð_Ü
Ñ
_¬¯
ª
«Ð
_¸×8JÑ8JÐY]Ð8JÓ8^Ñ
_€CØ‡F�Fˆ3„KØ
�)‰)‹+×ÐØ
�*‰*�S‹/×ÐØ€Jññ Ùùs=   ‚AC0ÁC*ÁC0Á)A!C0Ã
C,ÃC0Ã#C.Ã$C0Ã,C0Ã.C0c                óP   € V ^8„  d   QhR\         R\        P                  R\        /# )r"   r#   r  r3   )r   r7   rA   r   )r$   s   "r   r%   r%   œ  s&   € ÷ ñ ¤Lð ¼T¿Y¹Yð ÔTgñ r&   c              ƒ   ó  "  € V P                  \        V4      G R j  x€L
 pV'       g   \        RRR7      h\        W24      G R j  x€L
  V P	                  4       G R j  x€L
  V P                  V4      G R j  x€L
  V#  L_ L9 L# L5i©NrC   zSeating layout not foundrE   )rH   r   r   r   r:   r;   )r#   r  r   r=   s   &&& r   Úupdate_seating_layoutr
  œ  sm   é € Ø—‘Ô*¨IÓ6×
6€CßÜ¨Ð4NÔOÐOÜ
˜Ó
%×%Ð%Ø
�)‰)‹+×ÐØ
�*‰*�S‹/×ÐØ€Jñ 7ñ &ÙÙùrJ   c                óD   € V ^8„  d   QhR\         R\        P                  /# )r"   r#   r  rL   )r$   s   "r   r%   r%   ¥  s   € ÷ ñ ¤Lð ¼T¿Y¹Yñ r&   c              ƒ   óâ   "  € V P                  \        V4      G R j  x€L
 pV'       g   \        RRR7      hV P                  V4      G R j  x€L
  V P	                  4       G R j  x€L
  R #  LL L  L
5ir	  )rH   r   r   rO   r:   )r#   r  r=   s   && r   Údelete_seating_layoutr  ¥  sW   é € Ø—‘Ô*¨IÓ6×
6€CßÜ¨Ð4NÔOÐOØ
�)‰)�C‹.×ÐØ
�)‰)‹+×Òñ	 7ñ Ùùó8   ‚A/œA)�A/©!A/Á
A+ÁA/Á"A-Á#A/Á+A/Á-A/c                ó$   € V ^8„  d   QhR\         /# r!   r   )r$   s   "r   r%   r%   ®  s   € ÷ zñ z¤lñ zr&   c              ƒ   óÌ   "  € V P                  \        \        4      P                  \        P                  4      4      G R j  x€L
 P                  4       P                  4       #  L 5ir(   )r)   r   r   r*   Ú
created_atr,   r-   r.   s   &r   Úlist_seat_model_configsr  ®  sD   é € Ø—*‘*œVÔ$:Ó;×DÑDÔE[×EfÑEfÓgÓh×h×qÑqÓs×wÑwÓyÐyÑhùr0   c                ó0   € V ^8„  d   QhR\         R\        /# r2   )r   r   )r$   s   "r   r%   r%   ±  s   € ÷ ñ ¤|ð ÔAWñ r&   c              ƒ   óú   "  € \        RR \        P                  ! 4       /VP                  RR7      B pV P	                  V4       V P                  4       G Rj  x€L
  V P                  V4      G Rj  x€L
  V#  L L5i)rÏ   Tr   Nr6   )r   r7   r8   r   r9   r:   r;   r<   s   && r   Úcreate_seat_model_configr  ±  sd   é € Ü
 Ñ
[¤D§J¢J£LÐ
[°G×4FÑ4FÐUYÐ4FÓ4ZÑ
[€CØ‡F�Fˆ3„KØ
�)‰)‹+×ÐØ
�*‰*�S‹/×ÐØ€Jñ Ùùs$   ‚AA;ÁA7ÁA;Á0A9Á1A;Á9A;c                óP   € V ^8„  d   QhR\         R\        P                  R\        /# )r"   r#   Ú	config_idr3   )r   r7   rA   r   )r$   s   "r   r%   r%   ¸  s&   € ÷ ñ ¤|ð ÄÇ	Á	ð ÔWmñ r&   c              ƒ   ó  "  € V P                  \        V4      G R j  x€L
 pV'       g   \        RRR7      h\        W24      G R j  x€L
  V P	                  4       G R j  x€L
  V P                  V4      G R j  x€L
  V#  L_ L9 L# L5i©NrC   z"Seat model configuration not foundrE   )rH   r   r   r   r:   r;   )r#   r  r   r=   s   &&& r   Úupdate_seat_model_configr  ¸  sm   é € Ø—‘Ô-¨yÓ9×
9€CßÜ¨Ð4XÔYÐYÜ
˜Ó
%×%Ð%Ø
�)‰)‹+×ÐØ
�*‰*�S‹/×ÐØ€Jñ :ñ &ÙÙùrJ   c                óD   € V ^8„  d   QhR\         R\        P                  /# )r"   r#   r  rL   )r$   s   "r   r%   r%   Á  s   € ÷ ñ ¤|ð ÄÇ	Á	ñ r&   c              ƒ   óâ   "  € V P                  \        V4      G R j  x€L
 pV'       g   \        RRR7      hV P                  V4      G R j  x€L
  V P	                  4       G R j  x€L
  R #  LL L  L
5ir  )rH   r   r   rO   r:   )r#   r  r=   s   && r   Údelete_seat_model_configr  Á  sW   é € Ø—‘Ô-¨yÓ9×
9€CßÜ¨Ð4XÔYÐYØ
�)‰)�C‹.×ÐØ
�)‰)‹+×Òñ	 :ñ Ùùr  )Br7   Úfastapir   Úsqlalchemy.ext.asyncior   r�   r   r   Úapp.models.yard_modelsr   Úapp.models.dealer_modelsr	   r
   r   r   r   r   r   r   r   r   Úapp.models.bom_modelsr   r   r/   r>   rI   rR   rV   rZ   r^   ra   rd   rh   rl   ro   rs   r{   r   rƒ   r�   r’   r—   r    r¦   r©   r­   r°   rÌ   rÐ   rØ   rÜ   rß   râ   rå   rè   rë   rï   r  r  r
  r  r  r  r  r  r6   r&   r   Ú<module>r#     s  ðÛ Ý !Ý /ß #å 5÷÷ ÷ õ 0ò#õdõõõ	jõrõõõ	hõZõõõ	dõtõ
õõ	fõõõõ[õ$õõ^õ HõõDõ õGõõ õIõõõsõ1õ2
õõõzõõ÷r&   