
    h                    	   S SK Jr  S SKJrJrJrJrJrJr  S SK	J
r
  S SKrS SKrS SKrS SKJr  S SKJr  S SKJr  S SKJrJrJrJrJr  S S	KJr  S S
KJr  S SKJrJ r J!r!J"r"J#r#J$r$J%r%J&r&J'r'  S SK(J)r)  S SK*J+r+  S SK,J-r-J.r.  S SK/J0r0  SSK1J2r2J3r3  SSK4J5r5  SSK6J7r7J8r8  SSK9J:r:  SSK;J<r<  SSKJ=r=  \(       a2  S SK>J?r?  S SK@JArA  S SKBJCrCJDrD  S SKEJFrF  S SKGJHrH  S SKJIrI  S SKJJKrK  S SK(JLrL  / SQrM\R                  " S 5      rO\" S!0 S"\" S#S$S%9_S&\" S'5      _S(\" S)5      _S*\" S+SS%9_S,\" S-\)R                  S%9_S.\" S/5      _S0\" S1\R                  S%9_S2\" S3SS%9_S4\" S5SS%9_S6\" S7S8S%9_S9\" S:5      _S;\" S<S=S%9_S>\" S?S$S%9_S@\" SA5      _SB\" SCSS%9_SD\" SESS%9_SF\" SGSS%9_0 SH\" SIS$S%9_SJ\" SK\)R                  S%9_SL\" SMS S%9_SN\" SO5      _SP\" SQ\)R                  S%9_SR\" SS\R                  \" SSS5      ST9_SU\" SVS S%9_SW\" SXS S%9_SY\" SZS S%9_S[\" S\S \R                  S]9_S^\" S_S \R                  S]9_S`\" SaS\R                  S]9_Sb\" ScS\R                  S]9_Sd\" SeS \R                  S]9_Sf\" SgSh\R                  S]9_Si\" SjSh\R                  S]9_Sk\" SlS \R                  S]9_E5      rV\" \V5      rWSmrXSnrYSorZSpr[Sqr\Srr]Ssr^Str_Sur`      SSv jra\" SwSx5      rb\" SySz5      rc\: " S{ S|\75      5       rd\: " S} S~\d5      5       re " S S5      rf " S S5      rg " S S5      rh " S S5      ri " S S5      rj\" S0 S\" SaS$S%9_S>\" S+S$S%9_S\" S1SS%9_S\" S?S S%9_S\" S)S$S%9_S\" SSS%9_S\" S7SS%9_S*\" SCSS%9_S,\" S-\)R                  S%9_S.\" S'5      _S0\" SKSS%9_S2\" S3SS%9_S\" S<SS%9_S4\" S5SS%9_S6\" SVS8S%9_S\" SSS%9_S9\" S/5      _0 S;\" SS=S%9_S\" SpSS%9_S@\" S:5      _SB\" SGSS%9_SF\" SISS%9_SH\" SXS S%9_SD\" S_SS%9_SJ\" SQ\)R                  S%9_S\" ScS=S%9_SL\" SMS S%9_S\" SS S%9_S\" SS=S%9_S\" SZ5      _SN\" SA5      _SP\" S\)R                  S%9_S\" SSS%9_S\" SSS%9_E\" SSS%9\" S\SS%9\" SS S%9\" SS S%9\" SSS%9\" SlS S%9\" SS S%9\" SSS%9\" SeS S%9\" SgShS%9\" SjShS%9\" SSS9S.E5      rk\" \k5      rlSrm\: " S S\55      5       rn " S S\<\n   5      rog)    )annotations)TYPE_CHECKINGUnionOptionalIterableAnyIterator)SelfN)
namedtuple)const)
cast_value)DXFAttrDXFAttributesDefSubclassXTypegroup_code_mapping)Tags)EXT_MAX_STR_LEN)	Vec3NULLVECX_AXISY_AXISZ_AXISMatrix44WCSTransformOCSTransformNonUniformScalingError)colors)ProxyGraphicError)safe_stringscale_mtext_inline_commands)safe_handle   )
base_classSubclassProcessor)	DXFObject)
DXFGraphicacdb_entity)register_entity)ObjectCollection)default_copy)Auditor)Drawing)DXFNamespace	DXFEntity)
BaseLayout)AbstractTagWriter)DXFTag)EntityQuery)xref)MultiLeaderMLeaderMLeaderStyleMLeaderStyleCollectionMLeaderContext	MTextData	BlockData
LeaderData
LeaderLineArrowHeadData
AttribDataezdxfAcDbMLeaderversion     )defaultstyle_handleT  property_override_flagsZ   leader_type   leader_line_color[   leader_linetype_handleU  leader_lineweight   has_landing"  
has_dogleg#  dogleg_length)      arrow_head_handleV  arrow_head_size*      content_type   text_style_handleW  text_left_attachment_type   text_right_attachment_type_   text_angle_type   text_alignment_type   
text_color\   has_text_frame$  block_record_handleX  block_color]   block_scale_vector
   )xtyperE   block_rotation+   block_connection_type   is_annotative%  is_text_direction_negative&  )rE   
dxfversiontext_IPE_align   text_attachment_point   scale-   text_attachment_direction  text_bottom_attachment_type  	   text_top_attachment_type  leader_extend_to_text'  zCONTEXT_DATA{zLEADER{zLEADER_LINE{i,  i-  .  i/  0  i1  c                R   ^^ SUU4S jjm[        U 5      mT" [        T5      U5      $ )Nc                  > U /n[        T5      n U R                  U:w  a  U R                  [        :X  a  UR                  T" U [        5      5        OVU R                  [
        :X  a1  U R                  [        :X  a  UR                  T" U [        5      5        OUR                  U 5        [        T5      n U R                  U:w  a  M  U$ N)	nextcodeSTART_LEADERappend
END_LEADERSTART_LEADER_LINEvalueLEADER_LINE_STREND_LEADER_LINE)tagstop	collectorbuild_structuretagss      H/var/www/html/env/lib/python3.13/site-packages/ezdxf/entities/mleader.pyr   -compile_context_tags.<locals>.build_structure   s    E	4jhh$xx<'  j!AB ..3993O  o!FG  %t*C hh$     )r   r2   r   intreturnlist[Union[DXFTag, list]])iterr   )data	stop_coder   r   s     @@r   compile_context_tagsr      s)      :D4:y11r   r>   zindex, handler?   zhandle, index, width, textc                    ^  \ rS rSrSr\" \\\5      r	\
R                  rSU 4S jjr\S S j5       rS!S jrS"S jr\S S j5       rS#S jrS$S	 jr\4S%S
 jjr S&   S'U 4S jjjr\S(S j5       r\S)S j5       r\S*S j5       r\S+S j5       rS,S jrS-U 4S jjrS-S jrS-S jr S.U 4S jjr!S/U 4S jjr"S0S jr#S0S jr$S1S jr%S&S2S jjr&S1S jr'S3S jr(S4S jr)S r*Sr+U =r,$ )5r5   i  MULTILEADERc                \   > [         TU ]  5         [        5       U l        / U l        / U l        g r   )super__init__r9   contextarrow_headsblock_attribs)self	__class__s    r   r   MultiLeader.__init__	  s(    %'02/1r   c                2    U R                   R                  SL$ )z*``True`` if MULTILEADER has MTEXT content.N)r   mtextr   s    r   has_mtext_contentMultiLeader.has_mtext_content       ||!!--r   c                N    U R                   R                  nUb  UR                  $ g)zIGet MTEXT content as string, return "" if MULTILEADER has
BLOCK content.
 )r   r   default_content)r   r   s     r   get_mtext_contentMultiLeader.get_mtext_content  s(     ""(((r   c                b    U R                   R                  nUb  [        U[        5      Ul        gg)zLSet MTEXT content as string, does nothing if MULTILEADER has
BLOCK content.
N)r   r   r    r   r   )r   textr   s      r   set_mtext_contentMultiLeader.set_mtext_content  s-     ""$/o$FE! r   c                2    U R                   R                  SL$ )z*``True`` if MULTILEADER has BLOCK content.N)r   blockr   s    r   has_block_contentMultiLeader.has_block_content%  r   r   c                   U R                   c   S5       eU R                   R                  n[        5       nU R                   HE  nUR	                  UR
                  5      nUc  M#  UR                  X$R                  R                  '   MG     U$ )zxGet BLOCK attributes as dictionary of (tag, value) pairs.
Returns an empty dictionary if MULTILEADER has MTEXT content.
valid DXF document required)	docentitydbdictr   gethandler   dxfr   )r   r   r   attrattdefs        r   get_block_contentMultiLeader.get_block_content*  ss     xx#B%BB#88$$#v&&D\\$++.F!'+yyZZ^^$ ' r   c                   U R                   c   S5       eU R                   R                  n[        5       nU R                  n[	        U5       Hp  u  pVUR                  UR                  5      nUc  M%  UR                  R                  n[        UR                  U5      [        5      n	U	c  M_  UR                  U	S9XE'   Mr     U$ )zkSet BLOCK attributes by a dictionary of (tag, value) pairs.
Does nothing if MULTILEADER has MTEXT content.
r   )r   )r   r   r   r   	enumerater   r   r   r   r    r   _replace)
r   contentr   r   r   indexr   r   r   new_texts
             r   set_block_contentMultiLeader.set_block_content7  s     xx#B%BB#88$$#v**$]3KE\\$++.F!jjnn&w{{3'7I'+/==h=+GM( 4 r   c                   [        U[        5      (       d   e[        R                  " U R                  5      Ul        [        R                  " U R
                  5      Ul        [        R                  " U R                  5      Ul        g)zCopy leadersN)
isinstancer5   copydeepcopyr   r   r   )r   entitycopy_strategys      r   	copy_dataMultiLeader.copy_dataH  sW    &+....t||4!]]4+;+;<#}}T-?-?@r   c                  > [         TU ]  U5      nUc  U$ UR                  S5      nU(       a1  U R                  U5      nU(       a   U R	                  U5      U l        O%O$[        R                  " SUR                   S35      eU R                  U5      U l        U R                  U5      U l        UR                  U[         USS9  U$ ! [        R                   a&    [        R                  SUR                   S35         N}f = f)NrD   z/Context structure error in entity MULTILEADER(#)z/missing 'AcDbMLeader' subclass in MULTILEADER(#T)subclassrecover)r   load_dxf_attribssubclass_by_indexextract_context_dataload_contextr   r   DXFStructureErrorloggerinfor   extract_arrow_headsr   extract_block_attribsr   fast_load_dxfattribsacdb_mleader_group_codes)r   	processorr   r   r   r   s        r   r   MultiLeader.load_dxf_attribsO  s    g&y1J**1-//5G#'#4#4W#=DL  ))A#**QO   33D9!77=&&)D$ 	' 	
 
 .. KKI#**UVWs   C 7D Dc                    Su  p/ n[        U 5       H8  u  pEUR                  [        :X  a  UnM  UR                  [        :X  d  M3  US-   nM:     U(       a  U(       a  XU nXU2	 U$ )N)NNr#   )r   r   START_CONTEXT_DATAEND_CONTEXT_DATA)r   startendcontext_datar   r   s         r   r    MultiLeader.extract_context_datal  se    
#D/JExx----ai	 * Sc?L3Yr   c                     [        U [        5      n[        R                  U5      $ ! [         a    [
        R                  ef = fr   )r   r   r9   loadStopIterationr   r   )r   r   s     r   r   MultiLeader.load_context|  sD    	0*41ABG "&&w//  	*)))	*s	   ' Ac                  ^^ UU4S jn/ m U R                  S5      nUn[        5       mU R	                  SS1U5       H  u  pEUS-  nUTU'   US:X  d  M  U" 5         M      XU2	 T$ ! [        R                   a    Ts $ f = f)Nc            	        > TR                  [        T R                  SS5      T R                  SS5      5      5        T R                  5         g )N^   r   Y  0)r   r>   r   clear)r   headss   r   
store_head3MultiLeader.extract_arrow_heads.<locals>.store_head  s?    LLMM"a(MM#s+ OOr   r  r  r#   )	tag_indexr   DXFValueErrorr   collect_consecutive_tags)r   r  r   r   r   r   r   r  s         @@r   r   MultiLeader.extract_arrow_heads  s    	 &(	NN2&E F	88"cEJKD1HC#IdOs{	 K sO "" 	L	s   A& &A?>A?c                N  ^^ UU4S jn/ m U R                  S5      nUn[        5       mU R	                  1 SkU5       H,  u  pEUS-  nUS:X  a  [        T5      (       a  U" 5         UTU'   M.     [        T5      (       a  U" 5         XU2	 T$ ! [        R                   a    Ts $ f = f)Nc                    > T R                  [        TR                  SS5      TR                  SS5      TR                  SS5      TR                  SS5      5      5        TR                  5         g )	NJ  r     r   ,         ?r   r   )r   r?   r   r  )attribsr   s   r   store_attrib7MultiLeader.extract_block_attribs.<locals>.store_attrib  s[    NNMM#s+MM#q)MM"c*MM#r*	 OOr   r  >   r  r   r  r  r#   )r	  r   r
  r   r  len)r   r  r   r   r   r   r  r   s         @@r   r   !MultiLeader.extract_block_attribs  s    		 %'	NN3'E $(F	889LeTKD1HCs{s9~~#IdO	 U
 y>>N sO "" 	N	s   B B$#B$c                    U R                   R                  (       a  g[        R                  S[	        U 5       S35        g)NTzIgnore z% at DXF export, invalid context data.F)r   is_validr   debugstr)r   	tagwriters     r   preprocess_exportMultiLeader.preprocess_export  s/    <<  LL73t9+-RSTr   c                  >^^ S'UU4S jjn[         TU ]  U5        U R                  mUR                  nUR                  mT" S[
        R                  5        T" STR                  5        U R                  R                  U5        T" STR                  5        T" STR                  5        T" STR                  5        T" STR                  5        T" STR                  5        T" S	TR                  5        T" S
TR                   5        T" STR"                  5        T" STR$                  5        U" SS5        T" STR&                  5        T" STR(                  5        T" STR*                  5        T" STR,                  5        T" STR.                  5        T" STR0                  5        T" STR2                  5        T" STR4                  5        T" STR6                  5        U" SS5        T" STR8                  5        UR;                  STR<                  5        T" STR>                  5        T" STR@                  5        T" STRB                  5        U[D        RF                  :  an  U RI                  U5        U RK                  U5        T" STRL                  5        T" S TRN                  5        T" S!TRP                  5        T" S"TRR                  5        U[D        RT                  :  a9  T" S#TRV                  5        T" S$TRX                  5        T" S%TRZ                  5        U[D        R\                  :  a  T" S&TR^                  5        g g )(Nc                @   > TR                  U5      nUb	  T" X5        g g r   )r   )r   namer   r   
write_tag2s      r   write_handle_if_exist8MultiLeader.export_entity.<locals>.write_handle_if_exist  s#    WWT]F!4( "r   d   rC   rG   rI   rK   rM   rO   rQ   rS   rU   rW   rZ   rY   r\   r_   ra   rc   re   rg   ri   rk   rm   ro   rn   rq   rs   rv   rx   rz   r|   r   r   r   r   r   r   r   )r   r   r!  r  )0r   export_entityr   r}   r"  acdb_mleaderr!  rB   r   
export_dxfrF   rH   rJ   rL   rN   rP   rR   rT   rV   r[   r^   r`   rb   rd   rf   rh   rj   rl   rp   write_vertexrr   ru   rw   ry   r   DXF2007export_arrow_headsexport_block_attribsr{   r~   r   r   DXF2010r   r   r   DXF2013r   )r   r  r#  rB   r   r"  r   s       @@r   r&  MultiLeader.export_entity  s   	) 	)
 	i(hh&&))
3))*3$	*
 	3(()2s2233(2s,,-32233--.3(3'2s(()c#672s**+3(()3--.35562s5563++,3//02s~~&3**+c#892s'r3#9#9:2s))*31123))*emm###I.%%i0sC::;sC../sC556r399%emm#sC99:sC;;<sC889emm#sC556 $r   c                v    U R                    H)  u  p#UR                  SU5        UR                  SU5        M+     g )Nr  r  )r   r"  )r   r  r   r   s       r   r+  MultiLeader.export_arrow_heads  s4    !--ME  U+  f- .r   c                &   U R                    H  nUR                  SUR                  5        UR                  SUR                  5        UR                  SUR                  5        UR                  S[        UR                  [        5      5        M     g )Nr  r  r  r   )r   r"  r   r   widthr    r   r   )r   r  attribs      r   r,   MultiLeader.export_block_attribs  si    ((F  fmm4  fll3  V\\2  k&++&OP	 )r   c                  > [         TU ]  U5        U R                  nUR                  UR                  5        UR                  UR
                  5        UR                  UR                  5        UR                  UR                  5        UR                  UR                  5        U R                   H  nUR                  UR                  5        M      U R                  R                  U5        gz5Register required resources to the resource registry.N)r   register_resourcesr   
add_handlerF   rN   rY   r`   rn   r   r   r   )r   registryr   
arrow_headr   s       r   r8  MultiLeader.register_resources  s    "8,hhC,,-C667C112C112C334**J
 1 12 + 	''1r   c                <  > [        U[        5      (       d   e[        TU ]  X5        U R                  nUR                  nUR                  UR                  5      Ul        UR                  UR                  5      Ul        UR                  UR                  5      Ul        UR                  UR                  5      Ul	        UR                  UR                  5      Ul
        UR                  U5        UR                  U5        UR                  R                  U5        gz3Translate resources from self to the copied entity.N)r   r5   r   map_resourcesr   
get_handlerF   rN   rY   r`   rn   map_arrow_head_handlesmap_block_attrib_handlesr   )r   clonemappingr   	clone_dxfr   s        r   r?  MultiLeader.map_resources!  s    %----e-hhII	!(!3!3C4D4D!E	+2+=+=&&,
	( '.&8&89N9N&O	#&-&8&89N9N&O	#(/(:(:3;R;R(S	%$$W-&&w/##G,r   c                    U R                    Vs/ s H+  nUR                  UR                  UR                  5      S9PM-     snU l         g s  snf N)r   )r   r   r@  r   )r   rD  arrows      r   rA  "MultiLeader.map_arrow_head_handles2  sI     ))
) NN'"4"4U\\"BNC)
 
   2A
c                    U R                    Vs/ s H+  nUR                  UR                  UR                  5      S9PM-     snU l         g s  snf rH  )r   r   r@  r   )r   rD  r4  s      r   rB  $MultiLeader.map_block_attrib_handles8  sI     ,,
, OO7#5#5fmm#DOE,
 
rK  c                "    U R                  5       $ )zYields the graphical representation of MULTILEADER as virtual DXF
primitives.

These entities are located at the original location, but are not stored
in the entity database, have no handle and are not assigned to any
layout.

)__virtual_entities__r   s    r   virtual_entitiesMultiLeader.virtual_entities>  s     ((**r   c                    SSK Jn  U" X5      $ )aW  Explode MULTILEADER as DXF primitives into target layout,
if target layout is ``None``, the target layout is the layout of the
source entity.

Returns an :class:`~ezdxf.query.EntityQuery` container with all DXF
primitives.

Args:
    target_layout: target layout for the DXF primitives, ``None`` for
        same layout as the source entity.

r   )explode_entity)ezdxf.exploderS  )r   target_layoutrS  s      r   explodeMultiLeader.explodeI  s     	1d22r   c                p    SSK Jn   UR                  U SS9$ ! [         a    UR                  U SS9s $ f = f)z'Support for "VirtualEntities" protocol.r   )mleaderTproxy_graphicF)ezdxf.renderrY  rP  r   )r   rY  s     r   rO   MultiLeader.__virtual_entities__Z  sH    (	G++D+EE  	G++D+FF	Gs    55c              #  *  #    S H(  nU R                   R                  US5      nUc  M$  Uv   M*     U R                   H  nUR                  v   M     U R                  R
                  b)  U R                  R
                  R                  nUb  Uv   ggg7fz(Support for "ReferencedBlocks" protocol.)rn   rY   N)r   r   r   r   r   r   rn   )r   r!  r   r;  s       r   __referenced_blocks__!MultiLeader.__referenced_blocks__c  s      ADXX\\$-F! A **J### + <<)\\'';;F! " *s   #BA*Bc                   U R                   nU R                  n[        U5      nUR                  (       d  [	        S5      e[        UR                  R                  5      S:  d#  [        UR                  R                  5      S:  a  UR                  (       d  [	        S5      eUR                  U5        UR                  Ul        UR                  Ul        U=R                  UR                  -  sl        UR                  (       a6  UR                  R                   Ul        UR                  R                  Ul        U R'                  U5        U R)                  5         U $ )zTransform the MULTILEADER entity by transformation matrix `m` inplace.

Non-uniform scaling is not supported.

Args:
    m: transformation :class:`~ezdxf.math.Matrix44`

Raises:
    NonUniformScalingError: for non-uniform scaling

z0MULTILEADER does not support non-uniform scaling-q=)r   r   r   has_uniform_xy_scalingr   absplane_x_axiszplane_y_axishas_uniform_xyz_scaling	transformr[   r   rV   uniform_scaler   rotationru   rr   post_transformupdate_proxy_graphic)r   mr   r   wcss        r   rj  MultiLeader.transformu  s    hh,,1o))(B  w##%%&.#g6J6J6L6L2MPU2U..,F  	#%55MM	S...==!(!7!7C%,]]%8%8C" 	A 	!!#r   c                    S U l         g r   rZ  r   s    r   rn   MultiLeader.update_proxy_graphic  s
    !r   )r   r   r   r[  r   Noner   bool)r   r  )r   r  )r   dict[str, str])r   rx  )r   r/   r   ru  r   r   zOptional[SubclassProcessor]r   r.   )r   r   r   list[DXFTag])r   rz  r   r9   )r   r   r   zlist[ArrowHeadData])r   r   r   zlist[AttribData])r  r1   r   rw  r  r1   r   ru  r:  zxref.Registryr   ru  rC  r
   rD  xref.ResourceMapperr   ru  )rD  r~  )r   zIterator[DXFGraphic])rU  zOptional[BaseLayout]r   r3   r   zIterable[str])ro  r   r   r5   )-__name__
__module____qualname____firstlineno__DXFTYPEr   r$   r(   r'  
DXFATTRIBSr   DXF2000MIN_DXF_VERSION_FOR_EXPORTr   propertyr   r   r   r   r   r   r+   r   r   staticmethodr   r   r   r   r  r&  r+  r,  r8  r?  rA  rB  rP  rV  rO  r`  rj  rn  __static_attributes____classcell__r   s   @r   r5   r5     s-   Gz;EJ!&2 . .G . ." :F A 8<4	 :   0 0  8  @;7z.
Q2-"

	+3"G$,\" "r   r5   c                      \ rS rSrSrSrg)r6   i  MLEADER N)r  r  r  r  r  r  r  r   r   r6   r6     s    Gr   r6   c                      \ rS rSrSSSSSSSS	S
SSSSSSS.rSS jr\SS j5       rSS jrS S jr	\
S!S j5       r\
S"S j5       rS#S jrS$S jrS%S jrSrg)&r9   i  r   
base_pointchar_heightr[   landing_gap_sizeleft_attachmentright_attachmenttext_align_typeattachment_typeplane_originrf  rh  plane_normal_reversedtop_attachmentbottom_attachment)(   rs   rW         rg   ri   rx   r  n   o   p   )  r   r   c                    / U l         SU l        [        U l        SU l        SU l        SU l        SU l        SU l        SU l	        SU l
        S U l        S U l        [        U l        [        U l        [         U l        SU l        SU l        SU l        g )Nr  g      @       @r#   r   r   )leadersr   r   r  r  r[   r  r  r  r  r  r   r   r  r   rf  r   rh  r  r  r  r   s    r   r   MLeaderContext.__init__  s    )+
  !(" #  !  *.
*.
")"("(*+"!"r   c                &   US   [         [        4:X  d   eU " 5       nS nU H  n[        U[        5      (       a0  UR                  R                  [        R                  U5      5        MH  Uu  pVU(       a  UR                  XV5      (       a  Mk  S nUS:X  a  US:X  a  [        5       nX2l
        M  US:X  a  US:X  a  [        5       nX2l        M  [        R                  R                  U5      nU(       d  M  UR!                  U[#        XV5      5        M     U$ )Nr   rS   r#   (  )r   CONTEXT_STRr   listr  r   r<   r   parser:   r   r;   r   r9   ATTRIBSr   __setattr__r   )clsr   ctxr   r   r   r   r!  s           r   r   MLeaderContext.load  s    qz0+>>>>e04C#t$$"":??3#78KD==--"Gs{uz#+#	!#+#	%--11$74OOD*T*AB+ , 
r   c                    U R                   b  U R                   R                  U5        U R                  b  U R                  R                  U5        ggr7  )r   r8  r   r   r:  s     r   r8  !MLeaderContext.register_resources   s?    ::!JJ))(3::!JJ))(3 "r   c                    U R                   b  U R                   R                  U5        U R                  b  U R                  R                  U5        ggr>  )r   r?  r   r   rD  s     r   r?  MLeaderContext.map_resources  s?    ::!JJ$$W-::!JJ$$W- "r   c                    g)NTr  r   s    r   r  MLeaderContext.is_valid  s    r   c                    U R                   R                  U R                  5      R                  5       nU R                  (       a  U* nU$ r   )rf  crossrh  	normalizer  )r   z_axiss     r   plane_z_axisMLeaderContext.plane_z_axis  s<    ""(():):;EEG%%WFr   c                *   UR                   nUR                  nU" [        [        5        U" SU R                  5        U" SU R
                  5        U" SU R                  5        U" SU R                  5        U" SU R                  5        U" SU R                  5        U" SU R                  5        U" SU R                  5        U" S	U R                  5        U R                  (       a%  U" S
S5        U R                  R                  U5        O	U" S
S5        U R                  (       a%  U" SS5        U R                  R                  U5        O	U" SS5        U" SU R                   5        U" SU R"                  5        U" SU R$                  5        U" SU R&                  5        U R(                   H  nUR                  U5        M     UR*                  [,        R.                  :  a&  U" SU R0                  5        U" SU R2                  5        U" [4        S5        g )Nr  rs   rW   r  r  rg   ri   rx   r  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  rf  rh  r  r  r}   r   r-  r  r  r   )r   r  r"  r)  leaders        r   r(  MLeaderContext.export_dxf  s   ))
 --%{32tzz"R)2t''(3,,-3--.3,,-3--.3,,-3,,-::sAJJ!!),sA::sAJJ!!),sAS$++,S$++,S$++,3223 llFi( # 5==0sD//0sD223#S)r   c                H   UR                   nUR                  nU =R                  U-  sl        UR                  U R                  5      U l        U =R
                  U-  sl        U =R                  U-  sl        U =R                  U-  sl        UR                  U R                  5      U l        UR                  U R                  SS9U l
        UR                  U R                  SS9U l        SU l        UR                  [        SS9nUR                  U R                  * 5      (       a  SU l        U R                    H  nUR                  U5        M     U R"                  b  U R"                  R                  U5        U R$                  b  U R$                  R                  U5        g g )NTr  r   r#   )ro  rk  r   rj  r  r  r[   r  r  transform_directionrf  rh  r  r   iscloser  r  r   r   )r   rp  ro  r   r  r  s         r   rj  MLeaderContext.transformC  sT   EE!!

e
++doo6E!%&KK(9(9:11$2C2Ct1T11$2C2Ct1T%&"&&v&>>>4,,,--)*D&llFS! #::!JJ  %::!JJ  % "r   c                     XR                   -  nXl         U =R                  U-  sl        U =R                  U-  sl        U =R                  U-  sl        g ! [         a     g f = fr   )r   ZeroDivisionErrorr  r[   r  )r   r   conversion_factors      r   	set_scaleMLeaderContext.set_scaleZ  se    	 %

 2 
-- 11!22 ! 		s   A 
A#"A#)r[   r  r  r   r  r  r  r  r  r   r  r  rf  rh  r  r   r  r  Nrt  )r   r   r   r9   r|  rD  r~  r   ru  rv  )r   r   r{  rp  r   r   ru  )r   float)r  r  r  r  r  r   classmethodr   r8  r?  r  r  r  r(  rj  r  r  r  r   r   r9   r9     s    $ G$!#F  84.    (*T&.3r   r9   c            
          \ rS rSr0 SS_SS_SS_SS	_S
S_SS_SS_SS_SS_SS_SS_SS_SS_SS_SS_S S!_S"S#_S$S%S&S'S(S)S*S+S,.ErS6S- jrS7S. jrS8S/ jrS9S0 jrS:S1 jr	S;S2 jr
S<S3 jrS4rg5)=r:   ie  r   r      	extrusionrG   rF      insert   text_directionr\   rl  rv   r3  r  defined_heightr   line_spacing_factorrK   line_spacing_stylerI   colorrQ   	alignmentr_   flow_directionrM   bg_color   bg_scale_factorrk   bg_transparencyrU   use_window_bg_colorhas_bg_fillcolumn_typeuse_auto_heightcolumn_widthcolumn_gutter_widthcolumn_flow_reversedcolumn_sizesuse_word_break)rm   rc   rz         r|      r   c                   SU l         [        U l        SU l        [        U l        [        U l        SU l        SU l	        SU l
        SU l        SU l        [        R                  U l        SU l        SU l        [        R$                  U l        SU l        SU l        SU l        SU l        SU l        SU l        SU l        SU l        SU l        / U l        SU l        g )Nr   r          r  r#   g      ?r   )r   r   r  rF   r   r  r   r  rl  r3  r  r  r  r   BY_BLOCK_RAW_VALUEr  r  r  WINDOW_BG_RAW_VALUEr  r  r  r  r  r  r  r  r  r  r  r  r   s    r   r   MTextData.__init__  s    $&%!$#$*"
%(*- '( 33
#$#77&)$%()  ! !$%#&*- )*!)+#$r   c                :    UR                  U R                  5        gr7  )r9  rF   r  s     r   r8  MTextData.register_resources  s    D--.r   c                D    UR                  U R                  5      U l        gr>  )r@  rF   r  s     r   r?  MTextData.map_resources  s    #..t/@/@Ar   c                    US:X  a%  U R                   R                  [        U5      5        g[        R                  R                  U5      nU(       a  U R                  U[        X5      5        [        U5      $ )Nr  T)	r  r   r  r:   r  r   r  r   rw  r   r   r   r4  s       r   r  MTextData.parse  s\    3;$$U5\2""&&t,VZ%<=F|r   c                *   UR                   nUR                  nU" S[        U R                  [        5      5        U" SU R
                  5        U" S[        U R                  5      5        U" SU R                  5        U" SU R                  5        U" SU R                  5        U" SU R                  5        U" SU R                  5        U" S	U R                  5        U" S
U R                  5        U" SU R                  5        U" SU R                   5        U" SU R"                  5        U" SU R$                  5        U" SU R&                  5        U" SU R(                  5        U" SU R*                  5        U" SU R,                  5        U" SU R.                  5        U" SU R0                  5        U" SU R2                  5        U" SU R4                  5        U" SU R6                  5        U R8                   H  nU" SU5        M     U" SU R:                  5        g )Nr   r  rG   r  r  r\   rv   r  r   rK   rI   rQ   r_   rM   r  rk   rU   rm   rc   rz   r  r  r|   r  r   )r"  r)  r    r   r   r  r"   rF   r  r  rl  r3  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  )r   r  r"  r)  sizes        r   r(  MTextData.export_dxf  s   ))
 --3D$8$8/JKR(3D$5$567R%R,,-2t}}%2tzz"2t**+2t//03//02tzz"3'3++,2t}}%3,,-2t++,30013(()3(()3,,-3))*30013112%%DsD! &3++,r   c                   UR                   n[        U R                  U5      nUR                  U l        UR	                  U R
                  5      U l        UR                   R                  U R                  SS9U l        UR                  U R                  5      U l	        UR                  n[        R                  " US5      (       d  [        U5      S::  a  g U =R                  U-  sl        U =R                  U-  sl        U =R                   U-  sl        U =R"                  U-  sl        U R$                   Vs/ s H  oUU-  PM	     snU l        ['        U R(                  U5      U l        g s  snf )NTr  r  rc  )ro  r   r  new_extrusionrj  r  r  r  transform_anglerl  rk  mathr  re  r3  r  r  r  r  r!   r   )r   rp  ro  ocsr   r  s         r   rj  MTextData.transform  s#   EE4>>1-**kk$++.!ee774 8 
 ++DMM:!!<<s##s5zU':

e
u$U"  E) 6:6G6GH6GdE\6GH:4;O;OQVW Is   7E)c                   [         R                  " US5      (       d  [        U5      S::  a  g U =R                  U-  sl        U =R                  U-  sl        U =R
                  U-  sl        U =R                  U-  sl        U R                   Vs/ s H  o"U-  PM	     snU l        [        U R                  U5      U l	        g s  snf )Nr  rc  )
r   r  re  r3  r  r  r  r  r!   r   )r   r  hs      r   apply_conversion_factor!MTextData.apply_conversion_factor  s    <<)3//37H3IU3R

''
00..  $55 <@<M<MN<Mq!22<MN:  "3 
 Os   C)r  r  r  r  r  r  r  r  r  r  r   r  r  r  r  r  r  r  rl  rF   r  r  r  r  r3  Nrt  r|  r  r   r   r   rw  r{  r  r  r  )r  r  r  r  r  r   r8  r?  r  r(  rj  r  r  r  r   r   r:   r:   e  s   
K 	^ 	H	
 	 	J 	G 	 	! 	! 	G 	[ 	 	J 	  	!" 	"#$ "#3G8%6/B-<X*
r   r:   c                      \ rS rSrSSSSSSS.rSS	 jrSS
 jrSS jr\SS j5       r	\	R                  SS j5       r	SS jrSS jrSS jrSS jrSrg)r;   i  rn   r  r  r   rl  r  )rO            .   rq   c                    S U l         [        U l        [        U l        [        SSS5      U l        SU l        [        R                  U l
        / U l        g )Nr#   r   )rn   r   r  r   r  r   r   rl  r   r  r  _matrixr   s    r   r   BlockData.__init__  sD    26 %#1a=
  33
 %'r   c                :    UR                  U R                  5        gr7  )r9  rn   r  s     r   r8  BlockData.register_resources  s    D445r   c                b    U R                   c   eUR                  U R                   5      U l         gr>  )rn   r@  r  s     r   r?  BlockData.map_resources	  s-    ''333#*#5#5d6N6N#O r   c                    [        U R                  5      S:X  a  [        U R                  5      nO
[        5       nUR                  5         U$ )Nr  )r  r  r   	transposer   ro  s     r   matrix44BlockData.matrix44  s6    t||"&A
A	r   c                d    UR                  5       nUR                  5         [        U5      U l        g r   )r   r  r  r  r  s     r   r  r    s!    FFH	Awr   c                    [         R                  R                  U5      nU(       a  U R                  U[	        X5      5        gUS:X  a%  U R
                  R                  [        U5      5        gg)N/   FT)r;   r  r   r  r   r  r   r  r  s       r   r  BlockData.parse  s^    ""&&t,VZ%<=  RZLLe-  r   c                   UR                   nUR                  nU R                  (       a  U" SU R                  5        O	U" SS5        U" SU R                  5        U" SU R                  5        U" SU R
                  5        U" SU R                  5        U" SU R                  5        U R                  n[        U5      S:w  a  [        [        5       5      nU H  nU" SU5        M     g )	NrO   r  r
  r  r  r  rq   r  )r"  r)  rn   r  r  r   rl  r  r  r  r  r   )r   r  r"  r)  ro  r   s         r   r(  BlockData.export_dxf(  s    ))
 --##sD445 sC R(R%R$2t}}%2tzz"LLq6R<
 XZ AEr5! r   c                R   UR                   n[        U R                  U5      nUR                  U l        UR	                  U R
                  5      U l        UR                  U R                  5      U l        UR                  U R                  5      U l	        U R                  U-  U l
        g r   )ro  r   r  r  rj  r  transform_scale_vectorr   r  rl  r  )r   rp  ro  r  s       r   rj  BlockData.transform@  sx    EE4>>1-**kk$++.//

;
++DMM:)r   c                .    U =R                   U-  sl         g r   )r   )r   r  s     r   r  !BlockData.apply_conversion_factorJ  s    

''
r   )r  rn   r  r  r  r  rl  r   Nrt  r|  r  )r   r   )ro  r   r   ru  r  r{  r  r  )r  r  r  r  r  r   r8  r?  r  r  setterr  r(  rj  r  r  r  r   r   r;   r;     sk    "G	'6P
   __ 
	"0*(r   r;   c                  Z    \ rS rSrS	S jr\S
S j5       r\SS j5       rSS jr	SS jr
Srg)r<   iO  c                    / U l         SU l        SU l        [        U l        [
        U l        SU l        SU l        SU l	        / U l
        g )Nr   r  )lineshas_last_leader_linehas_dogleg_vectorr   last_leader_pointr   dogleg_vectorrV   r   attachment_directionbreaksr   s    r   r   LeaderData.__init__P  sK    ')
 *+!&''.#)$'
 *+!"$r   c                6    [        U R                  5      (       + $ r   )rw  r-  r   s    r   has_horizontal_attachment$LeaderData.has_horizontal_attachment`  s    11222r   c                &   US   [         [        4:X  d   eU " 5       nU H  n[        U[        5      (       a0  UR                  R                  [        R                  U5      5        MH  Uu  pEUS:X  a  XRl        MZ  US:X  a  XRl	        Mh  US:X  a  [        U5      Ul        M  US:X  a  [        U5      Ul        M  US:X  a  XRl        M  US:X  a  XRl        M  US:X  a  XRl        M  US	;   d  M  UR                   R                  [        U5      5        M     U$ )
Nr   rS   rU   rs   r  r  rI   r   )r  r  )r   
LEADER_STRr   r  r(  r   r=   r   r)  r*  r   r+  r,  rV   r   r-  r.  )r  r   r  r   r   r   s         r   r   LeaderData.loadd  s    qzlJ7777C#t$$##JOOC$89KDs{.3++0(+/;('+E{$',$$.3+!$$T%[1+ . r   c                J   UR                   nUR                  nU" [        [        5        U" SU R                  5        U" SU R
                  5        U" SU R                  5        U" SU R                  5        SnU R                   H  nU" SU-   U5        SU-
  nM     U" SU R                  5        U" S	U R                  5        U R                   H  nUR                  U5        M     UR                  [        R                  :  a  U" S
U R                   5        U" ["        S5        g )NrS   rU   rs   r  r   r  r#   rI   r  r   r  )r"  r)  r   r4  r)  r*  r+  r,  r.  r   rV   r(  r(  r}   r   r-  r-  r   )r   r  r"  r)  r   vertexlines          r   r(  LeaderData.export_dxf  s    ))
 --<,31123../R//0R++,kkFdF+t8D " 	2tzz"2t))* JJDOOI&  5==0sD556:s#r   c                   UR                   nUR                  U R                  5      U l         UR                  U R                  R                  U R                  5      5      nUR                  5       U l        UR                  U l        [        UR                  U R                  5      5      U l        U R                   H  nUR                  U5        M     g ! [         a)    UR                  [        U R                  SS5      5      n Nf = fNr   )ro  rj  r+  r  r,  r  rV   r  r   	magnituder  transform_verticesr.  r(  )r   rp  ro  dog_legleader_lines        r   rj  LeaderData.transform  s    EE!"T-C-C!D	L++"",,T-?-?@G
 %..0$..1//<=::K!!#& & ! 	L++D1C1CQ,JKG	Ls   4C 0D	D	)	r-  r.  rV   r,  r*  r)  r   r+  r(  Nrt  rv  )r   r   r{  r  )r  r  r  r  r   r  r1  r  r   r(  rj  r  r  r   r   r<   r<   O  s9    %  3 3  8$4'r   r<   c                  F    \ rS rSrSS jr\S	S j5       rS
S jrSS jrSr	g)r=   i  c                X    / U l         / U l        SU l        [        R                  U l        g r;  )verticesr.  r   r   r  r  r   s    r   r   LeaderLine.__init__  s&    $&.0 
 33
r   c                P   US   [         [        4:X  d   e[        5       nUR                  n/ nU He  u  pVUS:X  a  UR	                  [        U5      5        M'  US;   a  UR	                  [        XV5      5        MI  US:X  a  Xbl        MW  US:X  d  M_  Xbl        Mg     U(       a  XBl	        U$ )Nr   rs   )rI   r  r  rM   rk   )
r   r   r=   rC  r   r   r   r   r  r.  )r  r   r8  rC  r.  r   r   s          r   r   LeaderLine.load  s    Aw,o>>>>|==KDrzU,%j56"
"
    Kr   c                   UR                   nUR                  nU" [        [        5        U R                   H  nU" SU5        M     U R
                  (       aF  SnU R
                   H4  n[        U[        5      (       a  U" SU5        M#  U" SU-   U5        SU-
  nM6     U" SU R                  5        U" SU R                  5        U" [        S5        g )	Nrs   r   rI   r  r#   rM   rk   r  )r"  r)  r   r   rC  r.  r   r   r   r  r   )r   r  r"  r)  r7  r   r   s          r   r(  LeaderLine.export_dxf  s    ))
 --$o6mmFV$ $;;DeS))r5) !dE2t8D % 	2tzz"2tzz"?C(r   c                X   UR                   n[        UR                  U R                  5      5      U l        U R                  (       ad  / nU R                   HK  n[        U[        5      (       a"  UR                  UR                  U5      5        M:  UR                  U5        MM     X0l        g g r   )	ro  r  r=  rC  r.  r   r   r   rj  )r   rp  ro  r.  r   s        r   rj  LeaderLine.transform  sz    EEQ11$--@A;;-/FeT**MM!++e"45MM%(	 %
 !K r   )r.  r  r   rC  Nrt  )r   rz  r{  r  )
r  r  r  r  r   r  r   r(  rj  r  r  r   r   r=   r=     s%    	4  $),
!r   r=   AcDbMLeaderStyleunknown1draw_mleader_order_typedraw_leader_order_typemax_leader_segments_pointsfirst_segment_angle_constraintr  r  second_segment_angle_constraintr  r  r!     Standardr  default_text_contentr   r  text_align_always_leftr  align_spacer  has_block_scalingr  block_scale_xr  block_scale_y1   r  r  r  r  r  r  g      @i*  T)optional)block_scale_zhas_block_rotationru   rw   r   overwrite_property_valuery   break_gap_sizer   r   r   unknown2)rN   rY   r`   rn   c                    ^  \ rS rSrSr\" \\5      r\	R                  r S   SU 4S jjjrSU 4S jjrSU 4S jjrSS jr\R"                  S\	R$                  S4       SS	 jjrSSS
 jjrSU 4S jjrSS jrSU 4S jjrSrU =r$ )r7   i3  MLEADERSTYLEc                ^   > [         TU ]  U5      nU(       a  UR                  U[        SS9  U$ )Nr#   )r   )r   r   r   acdb_mleader_style_group_codes)r   r   r   r   s      r   r   MLeaderStyle.load_dxf_attribs9  s9     g&y1**3a +  
r   c                   > [         TU ]  U5        U R                  n[         H$  nUR	                  UR                  US5      5        M&     g )Nr  )r   r8  r   MLEADER_STYLE_HANDLE_ATTRIBSr9  r   )r   r:  r   attrib_namer   s       r   r8  MLeaderStyle.register_resourcesC  s<    "8,hh7KS 9: 8r   c           	     .  > [         TU ]  X5        U R                  n[         Ho  nUR	                  U5      (       a;  UR                  R                  XBR                  UR                  U5      5      5        MT  UR                  R                  U5        Mq     g r   )	r   r?  r   rh  hasattrsetr@  r   discard)r   rC  rD  r   ri  r   s        r   r?  MLeaderStyle.map_resourcesI  sh    e-hh7K{{;''		k+=+=cggk>R+ST		!!+.	 8r   c                    U R                   c   S5       eU R                   R                  R                  U5      nUb&  UR                  R                  U R                  l        g [        SU S35      e)Nr   ztext style 'z' does not exist)r   stylesr   r   r   r`   
ValueError)r   r!  styles      r   set_mtext_styleMLeaderStyle.set_mtext_styleR  sa    xx#B%BB###D)).)9)9DHH&|D61ABCCr   BYBLOCKr#   c                   U R                   c   S5       e[        R                  " U5      U R                  l        U R                   R
                  R                  U5      nUc  [        SU S35      eUR                  R                  U R                  l	        [        U5      U R                  l        [        U5      U R                  l        g )Nr   zinvalid linetype name '')r   r   encode_raw_colorr   rL   	linetypesr   rr  r   rN   r   rP   rJ   )r   r  linetype
lineweightrJ   	linetype_s         r   set_leader_properties"MLeaderStyle.set_leader_propertiesZ  s     xx#B%BB#%+%<%<U%C"HH&&**84	6xjBCC*3--*>*>'%(_"";/r   c                    SSK Jn  U R                  c   S5       eU(       a6  UR                  U R                  R                  U5      U R
                  l        g U R
                  ?g )Nr   )ARROWSr   )ezdxf.render.arrowsr  r   arrow_handleblocksr   rY   )r   r!  r  s      r   set_arrow_headMLeaderStyle.set_arrow_headj  sK    .xx#B%BB#)/)<)<TXX__d)SDHH& *r   c                   > [         TU ]  U5        UR                  [        R                  [
        R                  5        U R                  R                  U[
        R                  R                  5       5        g r   )r   r&  r"  r   SUBCLASS_MARKERacdb_mleader_styler!  r   export_dxf_attribsr  keys)r   r  r   s     r   r&  MLeaderStyle.export_entityu  sQ    i(U224F4K4KL##I/A/I/I/N/N/PQr   c              #  h   #    S H(  nU R                   R                  US5      nUc  M$  Uv   M*     g7fr_  )r   r   )r   r!  r   s      r   r`  "MLeaderStyle.__referenced_blocks__z  s/     @DXX\\$-F! As   #2	2c           	       > SSK Jn  U R                  (       d  g [        T	U ]  U5        UR
                  nU R                  n[        U 5      nUR                  SS 5      nUb  Xc;  a  UR                  R                  R                  S5      nUbI  UR                  R                  U R                  l        UR                  UR                  U SU S3U 5        OR[        R!                  S5        U R                  R#                  S5        UR                  UR                  U SU 3U 5        S	 H\  nUR                  U5      nUb  US
:X  a  M  Xc;  d  M&  UR#                  U5        UR                  UR$                  U SU SU 3U 5        M^     g )Nr   )
AuditErrorr`   rT  z: text_style_handle=z0 is not valid, replaced by 'Standard' text stylez-required text style 'Standard' does not existz$: removed invalid text_style_handle=)rY   rn   r  z: removed invalid =)ezdxf.auditr  is_aliver   auditr   r   r  r   r   rq  r   r`   fixed_errorUNDEFINED_TEXT_STYLEr   warningrn  UNDEFINED_BLOCK)
r   auditorr  r   r   r!  r   standardr4  r   s
            r   r  MLeaderStyle.audit  sp   *}}g##hh4y,d3&"8{{))--j9H#-5\\-@-@*##33f0 9, -	 NO  !45##33f@I
 CFWWV_F~3%F###..f.vhax@ Cr   r  r   ry  r|  r}  )r!  r  r   ru  )r  zUnion[int, colors.RGB]r{  r  r|  r   rJ   r   )r   )r!  r  r{  r  )r  r,   r   ru  )r  r  r  r  r  r   r$   r  r  r   r  r  r   r8  r?  rt  r   rv  LINEWEIGHT_BYBLOCKr~  r  r&  r`  r  r  r  r  s   @r   r7   r7   3  s    Gz+=>J!& 8<4	 ;/D )/!220%0 0 	0
 0 	+R
& &r   r7   c                  6   ^  \ rS rSrSU 4S jjrSS jrSrU =r$ )r8   i  c                D   > [         TU ]  USSS9  U R                  5         g )NACAD_MLEADERSTYLErc  )	dict_nameobject_type)r   r   create_required_entries)r   r   r   s     r   r   MLeaderStyleCollection.__init__  s$    (;X$$&r   c                    SU ;  a\  U R                  S5      nU R                  R                  R                  S5      nUR                  R
                  UR                  l        g g )NrT  )newr   rq  r   r   r   r`   )r   mleader_style
text_styles      r   r  .MLeaderStyleCollection.create_required_entries  sM    T! HHZ0M,,Z8J2<..2G2GM/	 "r   r  )r   r-   rt  )r  r  r  r  r   r  r  r  r  s   @r   r8   r8     s    'H Hr   r8   )r   rz  r   r   r   r   )p
__future__r   typingr   r   r   r   r   r	   typing_extensionsr
   r   loggingr   collectionsr   ezdxf.lldxfr   ezdxf.lldxf.typesr   ezdxf.lldxf.attributesr   r   r   r   r   ezdxf.lldxf.tagsr   ezdxf.lldxf.constr   
ezdxf.mathr   r   r   r   r   r   r   r   r   r@   r   ezdxf.proxygraphicr   ezdxf.tools.textr    r!   ezdxf.tools.handler"   	dxfentityr$   r%   dxfobjr&   dxfgfxr'   r(   factoryr)   objectcollectionr*   r+   r  r,   ezdxf.documentr-   ezdxf.entitiesr.   r/   ezdxf.layoutsr0   ezdxf.lldxf.tagwriterr1   r2   ezdxf.queryr3   r4   __all__	getLoggerr   r  r  point3dr*  r-  r.  r'  r   r  r4  r   r   r   r   r   r   r   r   r>   r?   r5   r6   r9   r:   r;   r<   r=   r  re  rh  r7   r8   r  r   r   <module>r     s@   # J J "    "  (  " -
 
 
  0 E * 4  + $ . #&6(7(' 
		7	# |73*||
 	"72;|R 	wsA.S|T 	WR1J1JKU|V 	!'#,W|X 	WS%2J2JKY|Z 	wsA.[|\ 	gc1-]|^ 	Q/_|b 	WS\c|f 	72q1g|h 	Q/i|t 	WS\u|v 	$WS!%<w|P 	%gb!&<Q|R 	732S|\ 	wsA6]|^ 	gb&*C*CD_|` 	'#q1a|d 	ws|e|f 	wr6+D+DEg|h 	gbtAqRS}Ui|j 	'"a0k|l 	 a!8m|r 	a0s|J 	%gc1&WK|L 	'#qU]]KM|N 	 aEMM!RO|V 	Q5==AW|` 	$WS!%Va|h 	&wu}}(
i|t 	#GCu}}$Uu|v 	 aEMM!Rw|Z .l; 
   
 2
2#&22, ?O<&BC
 a"* a" a"H k  u3 u3pH
 H
V\( \(~Y' Y'x@! @!F !7GC+7Q/7 	"73#:7 	!'#q"9	7
 	%gb!&<7 	)'"c*B7 	*72s+C7 	wsA.7 	WR1J1JK7 	!'#,7 	WR47  	wsA.!7" 	GB4#7$ 	gc1-%7& 	Q/'7( 	:.)7, 	WS\-7. 	72q1/70 	R 8172 	WS\374 	$WS!%<576 	732778 	wsA697: 	%gc1&=;7< 	gb&*C*CD=7> 	wr1-?7@ 	'#q1A7B 	!'#q"9C7D 	wr1-E7F 	WS\G7H 	ws|I7J 	wr6+D+DEK7L 	Q/M7N 	Q/O7P !a0%c15!#q1!(a!8a($+C$; a0!#t4%,S!%<'.sA'>$+C$;C$/m7: v "44F!G    s9 s sl
H-l; 
Hr   