+
    SjV              
          ^ RI t ^ RIt^ RIt^ RIHt ^ RIHt ^ RIHt ^ RI	H
t
 ^ RIHt ^ RIHt ^ RIHt ^ R	IHtHt ^ R
IHt ^ RIHt ^ RIHt ^ RIHtHt ^ RIHtHt ^ RI H!t! ^ RI"H#t# ^ RI$H%t% ^ RI&H't' ^ RI(H)t) ^ RI(H*t+ R U u/ uF  q RV ,          bK  	  up t,],P[                  4        UUu/ uF  w  rV].! V4      bK  	  uppt/]%! RRPa                  ]/ Uu. uF  q3R,          NK  	  up4      ,          4      t1 ! R R]24      t3R t4R t5R6R lt6R t7R  t8R! t9R" t:R# t;R$ t< ! R% R&]4      t=R' t>R7R( lt?R7R) lt@R* tAR8R+ ltBR, tCR9R- ltDR9R. ltE ! R/ R0]24      tFR1 tGR2 tHR3 tIR4 tJR5 tKR# u up i u uppi u upi ):    N)defaultdict)reduce)or_)get_user_model)render_password_as_hash)FieldDoesNotExist)EMPTY_VALUES)modelsrouter)
LOOKUP_SEP)	Collector)pretty_name)NoReverseMatchreverse)formatstimezone)make_hashable)format_html)_lazy_re_compile)capfirst)ngettext)overrides   ":/_#?;@&=+$,"[]<>%
\z_%02Xz_(?:%s)|:   NNc                       ] tR t^tRtRtR# )FieldIsAForeignKeyColumnNamez/A field is a foreign key attname, i.e. <FK>_id. N)__name__
__module____qualname____firstlineno____doc____static_attributes__r       O/var/www/idalgo/venv/lib/python3.14/site-packages/django/contrib/admin/utils.pyr   r      s    9r$   r   c                   VP                  \        4      pV F  pVR8X  d   V P                  P                  p V P	                  V4      p\        VR4      '       d_   VP                  pVR,          P                  p \        ;QJ d    R V 4       F  '       g   K   RM	  RM! R V 4       4      '       d    R# K  K  	  R#   \         d     K  i ; i)z9
Return True if the given lookup path spawns duplicates.
pk
path_infosc              3   8   "   T F  qP                   x  K  	  R # 5iN)m2m).0paths   & r%   	<genexpr>+lookup_spawns_duplicates.<locals>.<genexpr>7   s     6IDxxI   TF)
splitr   r'   name	get_fieldhasattrr(   to_optsanyr   )optslookup_pathlookup_fields
field_namefield	path_infos   &&    r%   lookup_spawns_duplicatesr>   $   s      %%j1M#
J	 NN:.E
 ul++!,,	 },,36I63336I666   7	 , $"  ! 		s   C  CCc                 f    V P                  V4      p\        V\        4      '       d
   VR,          # T# )r   r1   )get
isinstancelist)
parameterskeyvalues   && r%   get_last_value_from_parametersrF   >   s+    NN3E"5$//59:U:r$   c           	        \        V\        4      '       d   V Uu. uF  p\        WVR7      NK  	  up# V P                  R4      '       d   VP	                  V4      pV# V P                  R4      '       d   VP                  4       R9  pV# u upi )zB
Return a lookup value prepared to be used in queryset filtering.
)	separator__in__isnull) false0)rA   rB   prepare_lookup_valueendswithr2   lower)rD   rE   rH   vs   &&& r%   rN   rN   C   s     %KPQ5a$SyA5QQ
||FI&
 L 
j	!	!%77L Rs   B
c                    a \         P                  ! 4       pV P                  4        F'  w  opV\        \        V3R  lV 4       4      ,          pK)  	  V# )c              3   T   <"   T F  p\         P                  ! SV34      x  K  	  R # 5ir*   )r
   Q)r,   itemparams   & r%   r.   8build_q_object_from_lookup_parameters.<locals>.<genexpr>V   s!      U_T5$-!8!8_s   %()r
   rT   itemsr   r   )rC   q_objectparam_item_listrV   s   &  @r%   %build_q_object_from_lookup_parametersr[   S   sB    xxzH","2"2"4F3 U_ UVV #5Or$   c                \    \        V \        4      '       d   V P                  \        4      # T # )a  
Ensure that primary key values do not confuse the admin URLs by escaping
any '/', '_' and ':' and similarly problematic characters.
Similar to urllib.parse.quote(), except that the quoting is slightly
different so that it doesn't get automatically unquoted by the web browser.
)rA   str	translate	QUOTE_MAPss   &r%   quoterb   Z   s$     &03%7%71;;y!>Q>r$   c                0    \         P                  R V 4      # )zUndo the effects of quote().c                 *    \         V ^ ,          ,          # )r   )UNQUOTE_MAP)ms   &r%   <lambda>unquote.<locals>.<lambda>f   s    K!$5r$   )
UNQUOTE_REsubr`   s   &r%   unquoterk   d   s    >>5q99r$   c                    . pV  FC  p\        V\        \        34      '       d   VP                  V4       K2  VP	                  V4       KE  	  V# )zK
Return a list which is a single level of flattening of the original list.
)rA   rB   tupleextendappend)fieldsflatr<   s   &  r%   flattenrr   i   sC     DedE]++KKKK	 
 Kr$   c                b    . pV  F&  w  r#VP                  \        VR,          4      4       K(  	  V# )z?Return a list of field names from an admin fieldsets structure.rp   )rn   rr   )	fieldsetsfield_namesr3   r8   s   &   r%   flatten_fieldsetsrv   v   s0    K
74>23  r$   c                $  aaa  V ^ ,          p\         P                  ! VP                  P                  4      p\        Y@R7      pTP                  T 4       \        4       oTTT3R lpTP                  T4      pTP                   Uu. uF
  q6! T4      NK  	  ppTP                  P                  4        U	U u/ uF%  w  rT	P                  P                  \        T 4      bK'  	  p
p	p YzST3#   \         d    . / \        4       . 3u # i ; iu upi u up p	i )z
Find all objects related to ``objs`` that should also be deleted. ``objs``
must be a homogeneous iterable of objects (e.g. a QuerySet).

Return a nested list of strings suitable for display in the
template with the ``unordered_list`` filter.
)usingoriginc                    < V P                   pV P                  p\        VP                  4      : R V : 2pSP	                  V4      '       d   SP                  V4      P                  SV 4      '       g   SP                  VP                  4        \        SP                  : RVP                  : RVP                  : R2R\        V P                  4      34      p\        R\        TP                  4      Y@4      # V#   \         d    Tu # i ; i)z: :__changeNz{}: <a href="{}">{}</a>)	__class___metar   verbose_nameis_registeredget_model_adminhas_delete_permissionaddr   r3   	app_label
model_namerb   r'   r   r   )objmodelr8   no_edit_link	admin_url
admin_siteperms_neededrequests   &    r%   format_callback,get_deleted_objects.<locals>.format_callback   s    yy#+D,=,=#>D##E**--e4JJ    !2!23	$#!I366]$		 )8D4E4E+F	    " $##$s   AC= =DD)r   db_for_writer   r   
IndexErrorsetNestedObjectscollectnested	protected
model_objsrX   verbose_name_plurallen)objsr   r   r   rx   	collectorr   	to_deleter   r   model_countr   s   &ff        @r%   get_deleted_objectsr   ~   s   51g ##CIIOO4E7Id5L >   1I1:1D1DE1D#%1DIE %//5577KE 	''T27  
 <::_  !2sub  !R Fs   	C( D5+D(DDc                   j   a a ] tR t^t oV 3R ltR tR	V 3R lltV 3R ltR tR
R lt	R t
RtVtV ;t# )r   c                |   < \         SV `  ! V/ VB  / V n        \        4       V n        \        \        4      V n        R # r*   )super__init__edgesr   r   r   r   )selfargskwargsr~   s   &*,r%   r   NestedObjects.__init__   s1    $)&)
%c*r$   c                \    V P                   P                  V. 4      P                  V4       R # r*   )r   
setdefaultro   )r   sourcetargets   &&&r%   add_edgeNestedObjects.add_edge   s!    

fb)008r$   c                  < V F  pV'       di   VP                  R 4      '       gR   VRVP                  P                  RVP                  P                  /,          pV P	                  \        WV4      V4       MV P	                  RV4       V P                  VP                  P                  ,          P                  V4       K  	   \        SV `(  ! V3RV/VB #   \        P                   d1   pT P                  P                  TP                  4        Rp?R# Rp?i\        P                    d1   pT P                  P                  TP"                  4        Rp?R# Rp?ii ; i)+classr   Nsource_attr)rO   r   r   r   r   getattrr   r   r   r   r   r
   ProtectedErrorr   updateprotected_objectsRestrictedErrorrestricted_objects)	r   r   r   r   r   r   related_nameer~   s	   &&&&,   r%   r   NestedObjects.collect   s   C;#7#7#<#<*V\\44!7!7.   gc8#>dC(OOCIIOO,005 	87?4K[KFKK$$ 	7NN!!!"5"566%% 	8NN!!!"6"677	8s*   C E,%DE.E/%EEc                   < \         SV `  WV4      pVP                  ! V Uu. uF  qUP                  NK  	  up!  # u upi r*   )r   related_objectsselect_relatedr3   )r   related_modelrelated_fieldsr   qsrelated_fieldr~   s   &&&&  r%   r   NestedObjects.related_objects   s@    W$]DI  6DEn]  nE
 	
Es   ;c                    W9   d   . # VP                  V4       . pV P                  P                  VR4       F$  pVP                  V P	                  WRV4      4       K&  	  V'       d   V! V4      .pMV.pV'       d   VP                  V4       V# )Nr   )r   r   r@   rn   _nestedro   )r   r   seenr   childrenchildrets   &&&&   r%   r   NestedObjects._nested   sw    ;IZZ^^C,EOODLLoFG -"3'(C%CJJx 
r$   c                    \        4       p. pV P                  P                  RR4       F$  pVP                  V P	                  WBV4      4       K&  	  V# )z$
Return the graph as a nested list.
Nr   )r   r   r@   rn   r   )r   r   r   rootsroots   &&   r%   r   NestedObjects.nested   sE     uJJNN4,DLLd/BC -r$   c                    R# )zi
We always want to load the objects into memory so that we can display
them to the user in confirm page.
Fr   )r   r   r   s   &*,r%   can_fast_deleteNestedObjects.can_fast_delete   s    
 r$   )r   r   r   )NNr*   )r   r   r    r!   r   r   r   r   r   r   r   r#   __classdictcell____classcell__)r~   __classdict__s   @@r%   r   r      s-     +98$
 r$   r   c                J   \        V \        P                  \        P                  P                  34      '       d   V P
                  pMC\        V \        P                  P                  4      '       d   V P                  P
                  pMT pRVP                  RVP                  /# )z
Return a `dict` with keys 'verbose_name' and 'verbose_name_plural',
typically for use with string formatting.

`obj` may be a `Model` instance, `Model` subclass, or `QuerySet` instance.
r   r   )rA   r
   Modelbase	ModelBaser   queryQuerySetr   r   r   )r   r8   s   & r%   model_format_dictr      sv     #fkk&;&;<==yy	C..	/	/yy))t77 r$   c                    \        V \        P                  P                  4      '       d!   Vf   V P	                  4       pV P
                  p \        V 4      pVR,          VR,          rC\        Y4T;'       g    ^ 4      # )a  
Return the appropriate `verbose_name` or `verbose_name_plural` value for
`obj` depending on the count `n`.

`obj` may be a `Model` instance, `Model` subclass, or `QuerySet` instance.
If `obj` is a `QuerySet` instance, `n` is optional and the length of the
`QuerySet` is used.
r   r   )rA   r
   r   r   countr   r   r   )r   ndsingularplurals   &&   r%   model_ngettextr     sc     #v||,,--9		Aii#A(!,A*BfHaff1--r$   c                 v   VP                   p \        W04      pR p\        W4      pYET3#   \        \        3 d    \        T 4      '       d   T pT! T4      pM\        Y 4      '       d   T R8w  d   \        Y 4      pT! T4      pM\        4       p\        YT4      p\        T4      '       d	   T! 4       pM<YWJ d6   TpT P                  \        4       F  p\        YXT4      pYWJ g   K  Ru u # 	  Tp\        TR4      '       d3   \        TP                  T 4      '       d   \        TP                  T 4      pR p ELi ; i)N__str__r   )NNN)r   _get_non_gfk_fieldr   r   r   callabler5   objectr2   r   r   )	r3   r   model_adminr8   fattrrE   sentinelparts	   &&&      r%   lookup_fieldr   "  s    99D#t*6 "E>9 ;<  D>>DIE[''DI,=;-DIExH3h/D~~#D $

: 6&t8<+#33 !7 {G,,9J9JD1Q1Q{00$71s   * B5D8$D8*A
D87D8c                n   V P                  V4      pVP                  '       dA   VP                  '       d   VP                  '       d   VP                  '       d   \        4       hVP                  '       d@   VP                  '       g.   \        VR4      '       d   VP                  V8X  d   \        4       hV# )a   
For historical reasons, the admin app relies on GenericForeignKeys as being
"not found" by get_field(). This could likely be cleaned up.

Reverse relations should also be excluded as these aren't attributes of the
model (rather something like `foo_set`).
attname)
r4   is_relationmany_to_oner   one_to_manyr   many_to_manyr5   r   r   )r8   r3   r<   s   && r%   r   r   E  s     NN4 E 


E$7$7$7E<M<M<M!! 	"""E9%%MMT!*,,Lr$   c                F   Rp \        VP                  V 4      p VP                  pT'       d   Yu3# T#   \         d$    TP                  P                  P                  p L:i ; i  \
         Ed    T R8X  d(   \        TP                  P                  4      p\        p Lx\        T 4      '       d   T pEM\        Y 4      '       d   \        Y 4      pM\        Y4      '       d   \        Y4      pMT'       d%   YP                  9   d   TP                  T ,          pM \        Y4      R
,          pM  \
        \        3 dy    RT  RTP                  P                   2pT'       d!   TRTP                  P                   2,          pT'       d!   TRTP                  P                   2,          p\        T4      hi ; i\        TR4      '       d   TP                   p EL\#        T\$        4      '       dH   \        TR4      '       d6   \        TP&                  R4      '       d   TP&                  P                   p EL\        T4      '       d/   TP                  R8X  d   R	p EL8\)        TP                  4      p ELP\)        T 4      p EL^\*         d    \)        T 4      pT p ELxi ; i)au  
Return a sensible label for a field name. The name can be a callable,
property (but not created with @property decorator), or the name of an
object's attribute, as well as a model field, including across related
objects. If return_attr is True, also return the resolved attribute
(which could be a callable). This will be None if (and only if) the name
refers to a field.
Nr   zUnable to lookup 'z' on z or short_descriptionfgetz<lambda>z--r1   )r   r   r   AttributeErrorr   r   r]   r   r5   r   rp   get_fields_from_pathNotRelationFieldobject_namer~   r   r   rA   propertyr   r   r   )	r3   r   r   return_attrformr   r<   labelmessages	   &&&&&    r%   label_for_fieldr   b  s    D0"5;;5	;&&E^ }c  	;''--::E	;  &*9001ED~~++{1%%u+$++-{{4(2/<R@D)+;< 2 24&ekk>U>U=VWG"T+*?*?*H*H)I#JJT$..*A*A)B#CC(112 t011..4**D&))DII':;;		33$==J. E'6E#D)' D!s   A% 4 +A"A% !A""A% %8J AJ 6$J D.-J .4F7#'F7,F77!J AJ 8$J J 7J J J J c                     R p \        VP                  V 4      p\        VR4      '       d   VP                  pV#   \        \
        3 d     T# i ; i)rK   	help_text)r   r   r5   r  r   r   )r3   r   r  r<   s   &&  r%   help_text_for_fieldr    s\    I("5;;5 5+&&I ;<  s   : AAc                 
   ^ RI Hp VP                  R8X  d%   VP                  \	        4       8X  d   \        V 4      # \        VRR4      '       d&    \        VP                  4      P                  W4      # \        V\        P                  4      '       d	   V! V 4      # WP                  9   d   V# \        V\        P                   4      '       d+   \"        P$                  ! \&        P(                  ! V 4      4      # \        V\        P*                  \        P,                  34      '       d   \"        P$                  ! V 4      # \        V\        P.                  4      '       d!   \"        P0                  ! WP2                  4      # \        V\        P4                  \        P6                  34      '       d   \"        P0                  ! V 4      # \        V\        P8                  4      '       d(   V '       d    V'       g   \;        RV P<                  V 4      # \        V\        P>                  4      '       d   V '       d   V'       g   \;        RW 4      # \        V\        P@                  4      '       d-   V '       d%    \B        PD                  ! V RVPF                  R7      # \I        W4      #   \         d>    \        TP                  4      p\        T 4      p \        T4      P                  Y4      u # i ; i  \         d    \I        Y4      u # i ; i)r   _boolean_iconpasswordflatchoicesNz<a href="{}">{}</a>F)ensure_asciicls)%,django.contrib.admin.templatetags.admin_listr  r3   r   r   r   r   dictr  r@   	TypeErrorr   rA   r
   BooleanFieldempty_valuesDateTimeFieldr   localizer   template_localtime	DateField	TimeFieldDecimalFieldnumber_formatdecimal_placesIntegerField
FloatField	FileFieldr   urlURLField	JSONFieldjsondumpsencoderdisplay_for_value)rE   r<   empty_value_display
avoid_linkr  r  s   &&&&  r%   display_for_fieldr#    s1   JzzZEKK>3C$C&u--	t	,	,	E))*..uJJ 
E6..	/	/U##	$$	$""	E6//	0	0 ; ;E BCC	EF,,f.>.>?	@	@&&	E6..	/	/$$U,@,@AA	EF//1B1BC	D	D$$U++	E6++	,	,z0%))UCC	E6??	+	+j0%??	E6++	,	,	A::e%U]]KK !<<=  	E'(9(9:K!%(E$((DD		E6  	A$U@@	As%   #J 0"K) AK&%K&)LLc                    ^ RI Hp V'       d	   V! V 4      # V \        9   d   V# \        V \        4      '       d   \        V 4      # \        V \        P                  4      '       d+   \        P                  ! \        P                  ! V 4      4      # \        V \        P                  \        P                  34      '       d   \        P                  ! V 4      # \        V \        \        P                  \         34      '       d   \        P"                  ! V 4      # \        V \$        \&        34      '       d   RP)                  R V  4       4      # \        V 4      # )r   r  z, c              3   8   "   T F  p\        V4      x  K  	  R # 5ir*   )r]   )r,   rQ   s   & r%   r.   $display_for_value.<locals>.<genexpr>  s     /AQr0   )r
  r  r	   rA   boolr]   datetimer   r  r   r  datetimeintdecimalDecimalfloatr  rB   rm   join)rE   r!  booleanr  s   &&& r%   r   r     s    JU##	,	""	E4	 	 5z	E8,,	-	- ; ;E BCC	EHMM8==9	:	:&&	EC%8	9	9$$U++	ED%=	)	)yy////5zr$   c                       ] tR tRtRtR# )r   i  r   N)r   r   r    r!   r#   r   r$   r%   r   r     s    r$   r   c                     \        V R 4      '       d(   V P                  R,          P                  P                  # \        h)r(   r1   )r5   r(   r6   r   r   )r<   s   &r%   get_model_from_relationr3    s2    ul###++111r$   c                L   . pT pVP                  \        4      pV F  pVP                  P                  V4      p\	        V4      \	        V4      ^,
          8X  d    \        V4       VP                  '       dL   VP                  '       d   VP                  '       d(   VP                  4       pVP                  P                  pM"VP                  P                  pVP                  pVP!                  ^ V4       K  	  V\        P"                  ! V4      3#   \         d      K'  i ; i)zCreate a reversed field path.

E.g. Given (Order, "user__groups"),
return (Group, "user__order").

Final field must be a related model, not a data field.
)r2   r   r   r4   r   r3  r   r   auto_createdconcreterelated_query_nameremote_fieldr   r<   r3   r   insertr/  )r   r-   reversed_pathparentpiecespiecer<   r   s   &&      r%   reverse_field_pathr>    s     MFZZ
#F&&u-}Vq0'.
 e&8&8&8 335L''--F ;;++L((FQ-! " JOOM233 $ s   DD#"D#c                    VP                  \        4      p. pV FJ  pV'       d   \        VR,          4      pMT pVP                  VP                  P                  V4      4       KL  	  V# )a"  Return list of Fields given path relative to model.

e.g. (ModelX, "user__groups__name") -> [
    <django.db.models.fields.related.ForeignKey object at 0x...>,
    <django.db.models.fields.related.ManyToManyField object at 0x...>,
    <django.db.models.fields.CharField object at 0x...>,
]
r1   )r2   r   r3  ro   r   r4   )r   r-   r<  rp   r=  r;  s   &&    r%   r   r     sY     ZZ
#FF,VBZ8FFfll,,U34  Mr$   c                   V P                   p\        R4      ;_uu_ 4        \        W4      pRRR4       . pV'       d   VP                  R/ /4       M'V P                   '       d   VP                  RRX//4       V'       Ed9   \        R4      ;_uu_ 4        V EF  pVP                   F@  pVP                  RR\        VP                  P                  4      R\        V4      //4       KB  	  VP                   F_  w  rVP                  RR\        VP                  P                  4      R\        V4      R\        VP                  ^ ,          V	4      //4       Ka  	  VP                   F@  p
VP                  RR\        V
P                  P                  4      R\        V
4      //4       KB  	  EK  	  RRR4       V# V#   + '       g   i     EL; i  + '       g   i     T# ; i)z
Construct a JSON structure describing changes from a changed object.
Translations are deactivated so that strings are stored untranslated.
Translation happens later on LogEntry access.
Naddedchangedrp   r3   r   deleted)changed_datatranslation_override#_get_changed_field_labels_from_formro   new_objectsr]   r   r   changed_objectsformsdeleted_objects)r   formsetsr   rD  changed_field_labelschange_messageformsetadded_objectchanged_objectchanged_fieldsdeleted_objects   &&&        r%   construct_change_messagerS  ,  s    $$L	d	#	#  C4V	 
$ N
wm,				y85I*JKLx!$''#$+$7$7L"))# &L,>,>,K,K(L (#l*;& %8 7>6M6M2N"))% &N,@,@,M,M(N (#n*= (*M$+MM!$4n+"(
 7N '.&=&=N"))% &N,@,@,M,M(N (#n*=( '>- $ (@ >Y 
$	#	# ('@ s   F<DG<G	G!	c                     . pV FE  p V P                   V,          P                  ;'       g    TpVP                  \	        V4      4       KG  	  V#   \         d    Tp L/i ; ir*   )rp   r   KeyErrorro   r]   )r   rD  rL  r;   verbose_field_names   &&   r%   rF  rF  f  si    "
	,!%Z!8!>!>!L!L* 	##C(:$;< #    	,!+	,s   #AAA A ),r*   )NFN)F)Lr(  r,  r  collectionsr   	functoolsr   operatorr   django.contrib.authr   %django.contrib.auth.templatetags.authr   django.core.exceptionsr   django.core.validatorsr	   	django.dbr
   r   django.db.models.constantsr   django.db.models.deletionr   django.forms.utilsr   django.urlsr   r   django.utilsr   r   django.utils.hashabler   django.utils.htmlr   django.utils.regex_helperr   django.utils.textr   django.utils.translationr   r   rE  r_   rX   chrre   r/  ri   	Exceptionr   r>   rF   rN   r[   rb   rk   rr   rv   r   r   r   r   r   r   r   r  r#  r   r   r3  r>  r   rS  rF  )ikrQ   xs   0000r%   <module>ro     s\      #   . I 4 / $ 1 / * / * / ) 6 & - E%?@%?!^%?@	%.__%67%6TQq#a&y%67i#((;3O;abEE;3O*PPQ
	9 	4;
 ?:

9;x@I @F&.$ F:?D	&=R*	y 	4>(7t [ A73Os   	E.1E3E9