§
    ÎÐj›  ã                  ón  — d Z ddlmZ ddlZddlZddlZddlZddlZddlm	Z	 ddl
mZ ddlZddlZddlmZmZmZmZmZmZmZmZmZ ddlmZmZmZmZ d	\  ZZZ d
\  Z!Z" ej#        ej$        ¦  «        d ej#        ej%        ¦  «        d ej#        ej&        ¦  «        d ej#        ej'        ¦  «        d ej#        ej(        ¦  «        d ej#        ej)        ¦  «        diZ*d„ e* +                    ¦   «         D ¦   «         Z,ddddddœZ-dddddœZ.h d£Z/dƒd!„Z0d„d&„Z1 G d'„ d(¦  «        Z2d)dd*œd…d1„Z3d†d)dd*œd‡d6„Z4d7d)dd8œdˆd>„Z5d‰d@„Z6d7dAœdŠdD„Z7d‹dE„Z8d‹dF„Z9dŒdJ„Z:d�dL„Z;dŽdQ„Z<d�dR„Z=d†d�dU„Z>d†d‘dX„Z?d†d’dY„Z@d“d”d[„ZAd•d_„ZBd“d–da„ZCd—dg„ZDd˜dj„ZEd™dn„ZFd†dšdp„ZGdqddrœd›ds„ZHdœdu„ZIdvZJdwZKdqddrœd›dx„ZLd‹dy„ZMd+dzd{d)d|œd�d‚„ZNdS )žaþ  glTF 2.0 container code: GLB writing and reading (and .gltf reading), generation metadata in asset.extras, quick file
statistics, and the format dispatchers load_mesh / export_mesh / mesh_file_stats (OBJ, PLY and STL are in formats.py).

Written GLB files follow the Mesh conventions (Y-up, +Z front, metres): one node, mesh, primitive and material;
little-endian buffers; a JSON chunk padded with spaces and a BIN chunk padded with zeros; every bufferView 4-byte aligned;
POSITION with min/max, NORMAL (computed when the mesh has none), TEXCOORD_0, linear COLOR_0 (float); uint16 or uint32
indices; a PBR metallic-roughness material whose textures (base colour sRGB, metallic-roughness and normal map linear) are
embedded as PNG or JPEG (RGBA textures always PNG).
é    )ÚannotationsN)ÚPath)Úunquoteé   )	Ú
MIME_TYPESÚbytes_readerÚdecode_imageÚencode_imageÚfile_readerÚ
image_sizeÚpack_texturesÚ	remap_uvsÚto_channels)ÚMeshÚlinear_to_srgbÚsrgb_to_linearÚvertex_normals)iglTFiJSONiBIN )i’ˆ  i“ˆ  é   é  é  é  i  é  c                ó@   — i | ]\  }}||                      d ¦  «        “ŒS )ú<)Únewbyteorder)Ú.0ÚdtypeÚcodes      ú9C:\Users\johnn\OneDrive\Documents\AI\shared\mesh3d\glb.pyú
<dictcomp>r       s,   € Ð	SÐ	SÐ	S©K¨E°4ˆ$�×"Ò" 3Ñ'Ô'Ð	SÐ	SÐ	Só    é   é   é   é   )ÚSCALARÚVEC2ÚVEC3ÚVEC4ÚMAT4g     À_@g     ào@g    Àÿß@g    àÿï@)r   r   r   r   >   ÚKHR_texture_basisuÚEXT_meshopt_compressionÚKHR_draco_mesh_compressionÚtensorútorch.TensorÚreturnú
np.ndarrayc                ó    — |                       ¦   «                              d¬¦  «                             ¦   «                              |d¬¦  «        S )NÚcpu©ÚdeviceF)Úcopy)ÚdetachÚtoÚnumpyÚastype)r.   r   s     r   Ú_numpyr;   %   s@   € Ø�=Š=‰?Œ?×Ò UÐÑ+Ô+×1Ò1Ñ3Ô3×:Ò:¸5ÀuÐ:ÑMÔMÐMr!   ÚgltfÚdictÚchunksÚbytesc           	     óD  — t          j        | ddd¬¦  «                             d¦  «        }|dt          |¦  «         dz  z  z  }t	          j        dt          |¦  «        t          ¦  «        |z   |z   }t	          j        dt          d	d
t          |¦  «        z   ¦  «        |z   S )zYGLB file from the JSON document and the already framed chunks that follow the JSON chunk.F)ú,ú:)Úensure_asciiÚ
separatorsÚ	allow_nanúutf-8ó    r$   ú<IIú<IIIr"   é   )ÚjsonÚdumpsÚencodeÚlenÚstructÚpackÚ
CHUNK_JSONÚ	GLB_MAGIC)r<   r>   ÚtextÚbodys       r   Ú	_pack_glbrU   )   s�   € åŒ:�d¨¸:ÐQVÐWÑWÔW×^Ò^Ð_fÑgÔg€DØˆD•S˜‘Y”Y�J ‘NÑ#Ñ#€DÝŒ;�u�c $™iœi­Ñ4Ô4°tÑ;¸fÑD€DÝŒ;�v�y¨!¨Rµ#°d±)´)©^Ñ<Ô<¸tÑCÐCr!   c                  óH   — e Zd ZdZdd„Zd d!d„Zd"d#d„Zd$d„Zd d%d„Zd&d„Z	dS )'Ú_GltfWriterzžAccumulates the binary buffer and the glTF objects of one GLB file: one node, mesh, primitive and material per
    added Mesh, all nodes in the default scene.Úimage_formatÚstrc           	     óR   — |g dc| _         | _        | _        g g g g g g g g dœ| _        d S )Nr   )ÚnodesÚmeshesÚ	materialsÚimagesÚtexturesÚ
animationsÚbufferViewsÚ	accessors)rX   ÚpartsÚsizer<   )ÚselfrX   s     r   Ú__init__z_GltfWriter.__init__5   sJ   € Ø3?ÀÀQÐ0ˆÔ˜4œ: t¤yØ ¨B¸RÈ2Ð[]Ðmoð  ACð  RTð  Uð  UˆŒ	ˆ	ˆ	r!   NÚdatar?   Útargetú
int | Noner0   Úintc                ó°  — | j          dz  x}r7| j                             t          |¦  «        ¦  «         | xj         |z  c_         | j        d                              d| j         t          |¦  «        dœ|rd|ini z  ¦  «         | j                             |¦  «         | xj         t          |¦  «        z  c_         t          | j        d         ¦  «        dz
  S )Nr$   ra   r   )ÚbufferÚ
byteOffsetÚ
byteLengthrh   r   )rd   rc   Úappendr?   r<   rN   )re   rg   rh   Úpads       r   Úviewz_GltfWriter.view9   sê   € Ø”9�*˜q‘.Ð ˆ3ð 	ØŒJ×Ò�e C™jœjÑ)Ô)Ð)ØˆIŒI˜ÑˆIŒIØŒ	�-Ô ×'Ò'°1ÀDÄIÕ]`ÐaeÑ]fÔ]fÐ(gÐ(gð  BHð  lPÐltÐv|Ðk}Ðk}ð  NPñ  )Qñ  	Rô  	Rð  	RØŒ
×Ò˜$ÑÔÐØˆ	Œ	•S˜‘Y”YÑˆ	Œ	Ý�4”9˜]Ô+Ñ,Ô,¨qÑ0Ð0r!   FÚarrayr1   ÚboundsÚboolc                óÀ  — t          j        ||j                             d¦  «        ¬¦  «        }|                      |                     ¦   «         |¦  «        t          t          j        |j        j        ¦  «                 t          |¦  «        |j	        dk    rdnd|j
        d         › �dœ}|rv|t          j        |                     d¦  «        ¦  «                             ¦   «         t          j        |                     d¦  «        ¦  «                             ¦   «         dœz  }| j        d	                              |¦  «         t          | j        d	         ¦  «        dz
  S )
Nr   ©r   r   r&   ÚVEC)Ú
bufferViewÚcomponentTypeÚcountÚtyper   )ÚminÚmaxrb   )ÚnpÚascontiguousarrayr   r   rq   ÚtobytesÚCOMPONENT_TYPESr{   rN   ÚndimÚshapeÚ
atleast_1dr|   Útolistr}   r<   ro   )re   rr   rh   rs   Úaccessors        r   r†   z_GltfWriter.accessorB   s;  € ÝÔ$ U°%´+×2JÒ2JÈ3Ñ2OÔ2OÐPÑPÔPˆØ"&§)¢)¨E¯MªM©O¬O¸VÑ"DÔ"DÕWfÕgiÔgoÐpuÔp{ô  qAñ  hBô  hBô  XCÝ  ™ZœZ¸U¼ZÈ1º_¸_°°ÐRhÐX]ÔXcÐdeÔXfÐRhÐRhðjð jˆàð 	sØ¥¤¨e¯iªi¸©l¬lÑ ;Ô ;× BÒ BÑ DÔ DÍRÌ]Ð[`×[dÒ[dÐefÑ[gÔ[gÑMhÔMh×MoÒMoÑMqÔMqÐrÐrÑrˆHØŒ	�+Ô×%Ò% hÑ/Ô/Ð/Ý�4”9˜[Ô)Ñ*Ô*¨QÑ.Ð.r!   r.   r/   r=   c                óÂ  — t          |t          j        ¦  «        }|j        d         dk    rdn| j        }| j        d                              |                      t          ||¦  «        ¦  «        t          |         dœ¦  «         | j        d                              dt          | j        d         ¦  «        dz
  d	œ¦  «         d
t          | j        d         ¦  «        dz
  iS )Nr"   r$   Úpngr^   )rx   ÚmimeTyper_   r   r   )ÚsamplerÚsourceÚindex)r;   r~   Úuint8rƒ   rX   r<   ro   rq   r
   r   rN   )re   r.   rr   Úfmts       r   Útexturez_GltfWriter.textureK   sÇ   € Ý�v�rœxÑ(Ô(ˆØ”{ 1”~¨Ò*Ð*ˆeˆe°Ô0AˆØŒ	�(Ô×"Ò"°$·)²)½LÈÐPSÑ<TÔ<TÑ2UÔ2UÕcmÐnqÔcrÐ#sÐ#sÑtÔtÐtØŒ	�*Ô×$Ò$°½cÀ$Ä)ÈHÔBUÑ>VÔ>VÐYZÑ>ZÐ%[Ð%[Ñ\Ô\Ð\Ø�˜TœY zÔ2Ñ3Ô3°aÑ7Ð8Ð8r!   Úmeshr   Únameú
str | Nonec                ób  — t          |j        ¦  «        dk    rt          d¦  «        ‚|j        €:t	          d„ |j        |j        |j        fD ¦   «         ¦  «        rt          d¦  «        ‚|j        €t          |j
        |j        ¦  «        n|j        }|                      t          |j
        t          j        ¦  «        t          d¬¦  «        |                      t          |t          j        ¦  «        t          ¦  «        dœ}|j        �;|                      t          |j        t          j        ¦  «        t          ¦  «        |d	<   d
}|j        �ó|j                             ¦   «         }t%          j        t)          |dd…dd…f                              dd¦  «        ¦  «        |dd…dd…f                              dd¦  «        gd¦  «        }|                      t          |t          j        ¦  «        t          ¦  «        |d<   |j        d         dk    o.t/          |dd…df         dk                          ¦   «         ¦  «        }t          |j
        ¦  «        dk    rt          j        nt          j        }g d¢dddœ}|r|› d�nd|dœ}	|j        �f|                      |j        ¦  «        |d<   ||j        j        d         dk    o/t/          |j        d         dk                          ¦   «         ¦  «        z  }|j        � |d|                      |j        ¦  «        dœz  }|j        �|                      |j        ¦  «        |	d<   |rd|	d<   | j        d                              |	¦  «         ||                      t          |j        |¦  «                             d ¦  «        t<          ¦  «        t          | j        d         ¦  «        dz
  dd!œ}
|rd"|ini }| j        d#                              |d$|
giz  ¦  «         | j        d%                              |d&t          | j        d#         ¦  «        dz
  iz  ¦  «         |
S )'zhAdds a node, mesh, primitive and material for `mesh`; returns the primitive (e.g. to add morph targets).r   zCannot write an empty meshNc              3  ó   K  — | ]}|d uV — Œ	d S ©N© )r   Úts     r   ú	<genexpr>z'_GltfWriter.add_mesh.<locals>.<genexpr>V   s&   è è € Ð#wÐ#w°a A¨T MÐ#wÐ#wÐ#wÐ#wÐ#wÐ#wr!   zTextured mesh without uvsT©rs   )ÚPOSITIONÚNORMALÚ
TEXCOORD_0Fr#   r   ÚCOLOR_0r$   iÿÿ  ©ç      ð?rŸ   rŸ   rŸ   ç        rŸ   )ÚbaseColorFactorÚmetallicFactorÚroughnessFactorÚ	_materialÚmaterial)r‘   ÚpbrMetallicRoughnessÚbaseColorTexturer"   ©.r#   éÿ   )r¢   ÚmetallicRoughnessTextureÚnormalTextureÚBLENDÚ	alphaModer]   éÿÿÿÿ)Ú
attributesÚindicesr¥   Úmoder‘   r\   Ú
primitivesr[   r�   )rN   ÚfacesÚ
ValueErrorÚuvsÚanyÚ
base_colorÚmetallic_roughnessÚ
normal_mapÚnormalsr   Úverticesr†   r;   r~   Úfloat32ÚARRAY_BUFFERÚcolorsÚfloatÚtorchÚcatr   Úclamprƒ   rt   Úuint16Úuint32r�   r<   ro   ÚreshapeÚELEMENT_ARRAY_BUFFER)re   r�   r‘   rº   r¯   Úblendr¾   Úindex_dtypeÚpbrr¥   Ú	primitiveÚnameds               r   Úadd_meshz_GltfWriter.add_meshR   sø  € åˆtŒz‰?Œ?˜aÒÐÝÐ9Ñ:Ô:Ð:ØŒ8Ð¥Ð#wÐ#w¸D¼OÈTÔMdÐfjÔfuÐ;vÐ#wÑ#wÔ#wÑ wÔ wÐÝÐ8Ñ9Ô9Ð9Ø?C¼|Ð?S•. ¤°´
Ñ;Ô;Ð;ÐY]ÔYeˆØ"&§-¢-µ°t´}ÅbÄjÑ0QÔ0QÕS_Ðhl -Ñ"mÔ"mØ $§¢­f°W½b¼jÑ.IÔ.IÍ<Ñ XÔ XðZð Zˆ
àŒ8ÐØ'+§}¢}µV¸D¼HÅbÄjÑ5QÔ5QÕS_Ñ'`Ô'`ˆJ�|Ñ$ØˆØŒ;Ð"Ø”[×&Ò&Ñ(Ô(ˆFÝ”Y¥¨v°a°a°a¸¸!¸°e¬}×/BÒ/BÀ1ÀaÑ/HÔ/HÑ IÔ IÈ6ÐRSÐRSÐRSÐUVÐUWÐUWÐRWÌ=×K^ÒK^Ð_`ÐbcÑKdÔKdÐeÐghÑiÔiˆFØ$(§M¢Mµ&¸ÅÄÑ2LÔ2LÍlÑ$[Ô$[ˆJ�yÑ!Ø”L ”O qÒ(ÐK­T°6¸!¸!¸!¸Q¸$´<À!Ò3C×2HÒ2HÑ2JÔ2JÑ-KÔ-KˆEÝ#& t¤}Ñ#5Ô#5¸Ò#>Ð#>•b”i�iÅBÄIˆØ"6Ð"6Ð"6È#ÐbeÐfÐfˆØ26ÐF˜tÐ.Ð.Ð.Ð.¸JÐ`cÐdÐdˆØŒ?Ð&Ø&*§l¢l°4´?Ñ&CÔ&CˆCÐ"Ñ#Ø�T”_Ô*¨1Ô-°Ò2Ðbµt¸T¼_ÈVÔ=TÐWZÒ=Z×<_Ò<_Ñ<aÔ<aÑ7bÔ7bÑbˆEØÔ"Ð.Ø cÀtÇ|Â|ÐTXÔTkÑGlÔGlÐmÐmÑmˆCØŒ?Ð&Ø(,¯ª°T´_Ñ(EÔ(EˆH�_Ñ%Øð 	,Ø$+ˆH�[Ñ!ØŒ	�+Ô×%Ò% hÑ/Ô/Ð/Ø#-¸$¿-º-ÍÈtÌzÐ[fÑHgÔHg×HoÒHoÐprÑHsÔHsõ  vJñ  ;Kô  ;KÝ!$ T¤Y¨{Ô%;Ñ!<Ô!<¸qÑ!@È!ðMð Mˆ	à"&Ð.�˜��¨BˆØŒ	�(Ô×"Ò" 5¨L¸9¸+Ð+FÑ#FÑGÔGÐGØŒ	�'Ô×!Ò! %¨6µ3°t´yÀÔ7JÑ3KÔ3KÈaÑ3OÐ*PÑ"PÑQÔQÐQØÐr!   Úextrasúdict | Nonec                ó<  — dddœ|rd|ini z  ddt          t          t          | j        d         ¦  «        ¦  «        ¦  «        igdœ}| j                             ¦   «         D ]!\  }}|dk    r|r	d	d
dœg|d<   |r	|dvr|||<   Œ"d                     | j        ¦  «        t          | j         dz  ¦  «        z   }|dt          |¦  «        ig| j        d         | j        d         dœz  }t          |t          j        dt          |¦  «        t          ¦  «        |z   ¦  «        S )Nú2.0zWanGP mesh3d)ÚversionÚ	generatorrÍ   r   r[   )ÚassetÚsceneÚscenesr^   i&  i'  )Ú	magFilterÚ	minFilterÚsamplers)ra   rb   r!   r$   rn   ra   rb   )Úbuffersra   rb   rH   )ÚlistÚrangerN   r<   ÚitemsÚjoinrc   r?   rd   rU   rO   rP   Ú	CHUNK_BIN)re   rÍ   r<   ÚkeyÚvalueÚbinarys         r   Úglbz_GltfWriter.glbw   sR  € Ø%*¸ÐHÐHÐbhÐLpÈXÐW]ÐL^ÐL^ÐnpÑqØ¨µµe½CÀÄ	È'Ô@RÑ<SÔ<SÑ6TÔ6TÑ1UÔ1UÐ'VÐ&WðYð Yˆàœ)Ÿ/š/Ñ+Ô+ð 	"ð 	"‰JˆC�Ø�hŠˆ 5ˆØ26ÀTÐ$JÐ$JÐ#K��ZÑ Øð "˜Ð$@Ð@Ð@Ø!��S‘	øØ—’˜$œ*Ñ%Ô%­¨t¬y¨j¸1©nÑ(=Ô(=Ñ=ˆØ˜l­C°©K¬KÐ8Ð9È$Ì)ÐTaÔJbÐquÔqzð  |Gô  rHð  Ið  Iñ  	IˆÝ˜�vœ{¨5µ#°f±+´+½yÑIÔIÈFÑRÑSÔSÐSr!   )rX   rY   r•   )rg   r?   rh   ri   r0   rj   )F)rr   r1   rh   ri   rs   rt   r0   rj   )r.   r/   r0   r=   )r�   r   r‘   r’   r0   r=   )rÍ   rÎ   r0   r?   )
Ú__name__Ú
__module__Ú__qualname__Ú__doc__rf   rq   r†   r�   rÌ   râ   r–   r!   r   rW   rW   1   s°   € € € € € ð3ð 3ðUð Uð Uð Uð1ð 1ð 1ð 1ð 1ð/ð /ð /ð /ð /ð9ð 9ð 9ð 9ð#ð #ð #ð #ð #ðJ
Tð 
Tð 
Tð 
Tð 
Tð 
Tr!   rW   rˆ   )rX   rÍ   r�   r   rX   rY   rÍ   rÎ   c               ót   — t          |¦  «        }|                     | ¦  «         |                     |¦  «        S )a®  Binary glTF 2.0 of a Mesh (see the module docstring). image_format "png" or "jpeg" applies to RGB textures.

    The material is PBR metallic-roughness: baseColorFactor 1, metallic/roughness factors 1 with a metallic-roughness
    texture, otherwise metallic 0 and roughness 1; alphaMode BLEND when the base colour texture or the vertex colours
    have a non-opaque alpha channel. extras (JSON-serializable) becomes asset.extras.)rW   rÌ   râ   )r�   rX   rÍ   Úwriters       r   Úmesh_to_glbré   „   s5   € õ ˜Ñ&Ô&€FØ
‡O‚O�DÑÔÐØ�:Š:�fÑÔÐr!   rc   ú
list[Mesh]Únamesúlist[str] | Nonec               óº   — t          |¦  «        }t          | ¦  «        D ](\  }}|                     ||r||         nd|› �¦  «         Œ)|                     |¦  «        S )a  Multi-part GLB: one node, mesh and material per part (each part keeps its own textures and colours), named
    names[i] or part_0, part_1, ... All parts share the scene's coordinate frame (no node transforms). glb_to_mesh
    merges them back into one Mesh.Úpart_)rW   Ú	enumeraterÌ   râ   )rc   rë   rX   rÍ   rè   ÚiÚparts          r   Úmeshes_to_glbrò   �   sj   € õ ˜Ñ&Ô&€FÝ˜UÑ#Ô#ð Bð B‰ˆˆ4Ø�Š˜¨%Ð@˜e Aœh˜h°[¸Q°[°[ÑAÔAÐAÐAØ�:Š:�fÑÔÐr!   T)rº   rX   rÍ   Úvertex_framesÚfpsr¿   rº   rt   c          	     óz  — t          |¦  «        }|                     |r|                      d¬¦  «        n| ¦  «        }| j                             ¦   «         t          | j        | j        ¦  «        }	}g }
|D ]Ã}d|                     t          |                     ¦   «         |z
  t          j
        ¦  «        t          d¬¦  «        i}|r^|                     t          t          |                     ¦   «         | j        ¦  «        |	z
  t          j
        ¦  «        t          ¦  «        |d<   |
                     |¦  «         ŒÄ|
|d<   t          |
¦  «        }dg|z  |j        d	         d
         d<   |                     t          j        |t          j
        ¬¦  «        t          j
        |¦  «        z  dd¬¦  «        }|                     t          j        |t          j
        ¬¦  «                             d¦  «        d¦  «        }|j        d                              d||ddœgd
d
ddœdœgdœ¦  «         |                     |¦  «        S )a  Animated GLB of a mesh whose vertices move: vertex_frames [F, V, 3] are the vertex positions of each frame (same
    vertices and faces as mesh). Each frame becomes a morph target (POSITION displacement from mesh.vertices, plus the
    NORMAL displacement of the recomputed smooth normals when normals is True), and one animation named "animation"
    drives the target weights: frame i, at time i / fps, has weight 1 on target i, interpolated linearly between frames,
    so playback is smooth at any display rate. The rest pose (all weights 0) is mesh.vertices. Supported by glTF
    viewers including model-viewer (three.js handles up to 256 morph targets on every WebGL2 device: subsample longer
    clips). File size grows by 12 (24 with normals) bytes per vertex and frame.N©rº   rš   Tr™   r›   Útargetsr    r\   r   Úweightsrv   r®   r`   Ú	animationÚLINEAR)ÚinputÚoutputÚinterpolation)ÚnodeÚpath)rŠ   rh   )r‘   rØ   Úchannels)rW   rÌ   Úreplacer»   r¿   r   r³   r†   r;   r~   r¼   r½   ro   rN   r<   ÚarangeÚeyerÅ   râ   )r�   ró   rô   rº   rX   rÍ   rè   rÊ   ÚbaseÚbase_normalsr÷   Úframerh   rz   Útimesrø   s                   r   Úanimated_mesh_to_glbr  ™   s+  € õ ˜Ñ&Ô&€FØ—’¸gÐ O §¢°T Ñ :Ô :Ð :È4ÑPÔP€IØœ×,Ò,Ñ.Ô.µ¸t¼}ÈdÌjÑ0YÔ0Yˆ,€DØ€GØð ð ˆØ˜fŸošo­f°U·[²[±]´]ÀTÑ5IÍ2Ì:Ñ.VÔ.VÕXdÐmq˜oÑrÔrÐsˆØð 	KØ%Ÿš­vµnÀUÇ[Â[Á]Ä]ÐTXÔT^Ñ6_Ô6_ÐbnÑ6nÕprÔpzÑ/{Ô/{õ  ~Jñ   Kô   KˆF�8ÑØ�Š�vÑÔÐÐØ"€IˆiÑÝ�‰LŒL€EØ+.¨%°%©-€F„K�Ô˜!Ô˜YÑ'Ø�OŠO�BœI eµ2´:Ð>Ñ>Ô>ÅÄÈCÁÄÑPÐRVÐ_cˆOÑdÔd€EØ�oŠo�bœf Uµ"´*Ð=Ñ=Ô=×EÒEÀbÑIÔIÈ4ÑPÔP€GØ
„K�Ô×$Ò$¨kÐRWÐcjð  ~Fð  IGð  IGð  HHØ?@ÐUVÐ`iÐLjÐLjÐ3kÐ3kÐ2lð&nð &nñ oô oð oà�:Š:�fÑÔÐr!   útuple[dict, bytes | None, int]c                óÜ  — t          | ¦  «        dk     rt          d¦  «        ‚t          j        d| d¦  «        \  }}}|t          k    s|dk    rt          d¦  «        ‚t          j        d| d¦  «        \  }}|t
          k    rt          d	¦  «        ‚t          j        t          | dd|z   …         ¦  «         	                    d
¦  «         
                    d¦  «        ¦  «        }dd|z   t          |t          | ¦  «        ¦  «        }	}}|dz   |	k    rWt          j        d| |¦  «        \  }
}|t          k    r"|€ t          | ¦  «        |dz   |dz   |
z   …         }|d|
z   z  }|dz   |	k    °W||d|z   fS )z[(JSON document, BIN chunk payload or None, offset of the first chunk after the JSON chunk).é   zTruncated GLB filerI   r   r"   z Not a glTF 2.0 binary (GLB) filerH   rJ   z%GLB file without a leading JSON chunks     rF   Né   )rN   r´   rO   Úunpack_fromrR   rQ   rK   Úloadsr?   ÚrstripÚdecoder|   rÞ   Ú
memoryview)rg   ÚmagicrÑ   ÚlengthÚjson_lengthÚkindr<   rá   ÚposÚendÚchunk_lengths              r   Ú
_split_glbr  ¶   s  € å
ˆ4�y„y�2‚~€~ÝÐ-Ñ.Ô.Ð.Ý#Ô/°¸¸aÑ@Ô@Ñ€Eˆ7�FØ•	ÒÐ˜W¨š\˜\ÝÐ;Ñ<Ô<Ð<ÝÔ*¨5°$¸Ñ;Ô;Ñ€K�Ø�zÒÐÝÐ@ÑAÔAÐAÝŒ:•e˜D  B¨Ñ$4Ð!4Ô5Ñ6Ô6×=Ò=¸fÑEÔE×LÒLÈWÑUÔUÑVÔV€DØ˜R +Ñ-­s°6½3¸t¹9¼9Ñ/EÔ/E�ˆC€FØ
�‰'�SŠ.ˆ.Ý#Ô/°°t¸SÑAÔAÑˆ�dØ•9ÒÐ  Ý Ñ%Ô% c¨A¡g¨c°A©g¸Ñ.DÐ&DÔEˆFØˆq�<ÑÑˆð	 �‰'�SŠ.ˆ.ð
 �˜˜kÑ)Ð)Ð)r!   )Úmergerg   r  c               ó^  — t          | ¦  «        \  }}}|                     dddi¦  «        }|                     d¦  «        }|rt          |t          ¦  «        ri |¥|¥nt	          |¦  «        |d<   t          |t          | |t          j        d| d¦  «        d         …         ¦  «        ¦  «        S )zßGLB with asset.extras set to extras (merged into the existing asset.extras dict when merge is True). Only the JSON
    chunk is rewritten (re-padded to 4 bytes); the following chunks, including BIN, are kept byte-identical.rÓ   rÑ   rÐ   rÍ   ú<Ir  r   )	r  Ú
setdefaultÚgetÚ
isinstancer=   rU   r?   rO   r  )rg   rÍ   r  r<   Ú_Újson_endrÓ   Úolds           r   Úglb_write_extrasr#  Ê   s¯   € õ # 4Ñ(Ô(Ñ€Dˆ!ˆXØ�OŠO˜G i°Ð%7Ñ8Ô8€EØ
�)Š)�HÑ
Ô
€CØ+0Ð\µZÀÅTÑ5JÔ5JÐ\Ð'˜Ð' Ð'Ð'ÕPTÐU[ÑP\ÔP\€Eˆ(�OÝ�T�5  h­vÔ/AÀ$ÈÈaÑ/PÔ/PÐQRÔ/SÐ&SÔ!TÑUÔUÑVÔVÐVr!   c                óÂ  — t          | t          t          t          f¦  «        rdt          | dd…         ¦  «        dk    rt	          | ¦  «        d         n3t          j        t          | ¦  «                             d¦  «        ¦  «        S t          | d¦  «        5 }| 	                    d¦  «        }|dd…         dk    rHt          j        || 	                    ¦   «         z                        d¦  «        ¦  «        cddd¦  «         S t	          || 	                    t          j        d|d	¦  «        d         ¦  «        z   ¦  «        d         cddd¦  «         S # 1 swxY w Y   dS )
zTglTF JSON of a GLB or .gltf path / bytes, reading only the JSON chunk of a GLB file.Nr$   ó   glTFr   rF   Úrbr  r  rJ   )r  r?   Ú	bytearrayr  r  rK   r  r  ÚopenÚreadrO   r  )r‹   ÚhandleÚheads      r   Ú_read_documentr,  Ô   s¨  € å�&�5¥)­ZÐ8Ñ9Ô9ð tÝ(-¨f°R°a°R¬jÑ(9Ô(9¸WÒ(DÐ(D�z˜&Ñ!Ô! !Ô$Ð$Í$Ì*ÕUZÐ[aÑUbÔUb×UiÒUiÐjqÑUrÔUrÑJsÔJsÐsÝ	ˆf�dÑ	Ô	ð X˜vØ�{Š{˜2‰ŒˆØ���Œ8�wÒÐÝ”:˜t f§k¢k¡m¤mÑ3×;Ò;¸GÑDÔDÑEÔEðXð Xð Xð Xñ Xô Xð Xð Xõ ˜$ §¢­VÔ-?ÀÀdÈBÑ-OÔ-OÐPQÔ-RÑ!SÔ!SÑSÑTÔTÐUVÔWð	Xð Xð Xð Xñ Xô Xð Xð Xð Xð Xð Xð Xøøøð Xð Xð Xð Xð Xð Xs   ÂAEÄAEÅEÅEc                ó    — t          | ¦  «                             di ¦  «                             d¦  «        }t          |t          ¦  «        r|ni S )z\asset.extras of a GLB/.gltf file (path or bytes), {} when absent. Reads only the JSON chunk.rÓ   rÍ   )r,  r  r  r=   )r‹   rÍ   s     r   Úglb_read_extrasr.  ß   sF   € å˜FÑ#Ô#×'Ò'¨°Ñ4Ô4×8Ò8¸ÑBÔB€FÝ ­Ñ-Ô-Ð5ˆ6ˆ6°2Ð5r!   Úurir  úPath | Nonec                óê  — |                       d¦  «        rd|                      d¦  «        \  }}}|                     d¦  «        rt          j        |¦  «        n!t          |¦  «                             d¦  «        S |€t          d| ›d�¦  «        ‚|t          | ¦  «        z                       ¦   «         }|                     ¦   «         |j	        vrt          d| ›d�¦  «        ‚| 
                    ¦   «         S )	Núdata:rA   z;base64zlatin-1zExternal glTF resource z without a base folderzglTF resource z) lies outside the folder of the glTF file)Ú
startswithÚ	partitionÚendswithÚbase64Ú	b64decoder   rM   r´   ÚresolveÚparentsÚ
read_bytes)r/  r  Úheaderr   Úpayloadrÿ   s         r   Ú
_uri_bytesr=  æ   sè   € Ø
‡~‚~�gÑÔð oØ Ÿ]š]¨3Ñ/Ô/Ñˆ��7Ø,2¯OªO¸IÑ,FÔ,FÐn�vÔ Ñ(Ô(Ð(ÍGÐT[ÑL\ÔL\×LcÒLcÐdmÑLnÔLnÐnØ€|ÝÐP°3ÐPÐPÐPÑQÔQÐQØ•7˜3‘<”<Ñ×(Ò(Ñ*Ô*€DØ‡|‚|�~„~˜Tœ\Ð)Ð)ÝÐZ¨#ÐZÐZÐZÑ[Ô[Ð[Ø�?Š?ÑÔÐr!   útuple[dict, list, Path | None]c                ó¦  ‡‡— t          | t          t          t          f¦  «        r| d c}Šn6t	          | ¦  «                             ¦   «         t	          | ¦  «        j        c}Št          |d d…         ¦  «        dk    rt          |¦  «        d d…         n5t          j	        t          |¦  «         
                    d¦  «        ¦  «        d f\  }Št          t          |                     dg ¦  «        ¦  «        z  x}r2t          dd                     t!          |¦  «        ¦  «        › �¦  «        ‚ˆˆfd„|                     d	g ¦  «        D ¦   «         }||‰fS )
Nr$   r%  r"   rF   ÚextensionsRequiredzUnsupported glTF extensions: z, c                óH   •— g | ]}d |v rt          |d          ‰¦  «        n‰‘ŒS )r/  )r=  )r   Úbr  rá   s     €€r   ú
<listcomp>z"_load_document.<locals>.<listcomp>ú   s4   ø€ ÐeÐeÐeÈ¨U°a¨Z¨Z�z˜!˜Eœ( DÑ)Ô)Ð)¸VÐeÐeÐer!   rÙ   )r  r?   r'  r  r   r:  Úparentr  rK   r  r  ÚUNSUPPORTED_EXTENSIONSÚsetr  r´   rÝ   Úsorted)r‹   rg   r<   ÚunsupportedrÙ   r  rá   s        @@r   Ú_load_documentrI  ò   s@  øø€ Ý�&�5¥)­ZÐ8Ñ9Ô9ð DØ˜Tˆ
ˆˆdˆdå˜&‘\”\×,Ò,Ñ.Ô.µ°V±´Ô0Cˆ
ˆˆdÝ+0°°b°q°b´©?¬?¸gÒ+EÐ+E•:˜dÑ#Ô# B Q BÔ'Ð'ÍDÌJÕW\Ð]aÑWbÔWb×WiÒWiÐjqÑWrÔWrÑLsÔLsÐuyÐKz�L€Dˆ&Ý,­s°4·8²8Ð<PÐRTÑ3UÔ3UÑ/VÔ/VÑVÐV€{ð [ÝÐY¸¿ºÅ6È+ÑCVÔCVÑ9WÔ9WÐYÐYÑZÔZÐZØeÐeÐeÐeÐeÈTÏXÊXÐV_ÐacÑMdÔMdÐeÑeÔe€GØ�˜$ÐÐr!   rÙ   rÚ   rŒ   rj   c                ó¢   — | d         |         }|                      dd¦  «        }t          ||d                  ¦  «        |||d         z   …         S )Nra   rm   r   rl   rn   )r  r  )r<   rÙ   rŒ   rq   Ústarts        r   Ú_view_bytesrL  þ   sO   € Ø�Ô˜uÔ%€DØ�HŠH�\ 1Ñ%Ô%€EÝ�g˜d 8œnÔ-Ñ.Ô.¨u°U¸TÀ,Ô=OÑ5OÐ/OÔPÐPr!   c           
     óž  — | d         |         }|d         t           |d                  |d         }}}t          |         }d|v r‘| d         |d                  }|                     d¦  «        p	||j        z  }	t	          j        ||f|t          | ||d         ¦  «        |                     dd	¦  «        |	|j        f¬
¦  «                             ¦   «         }
nt	          j        ||f|¦  «        }
|                     d¦  «        x}rÇ|d         |d         }}t	          j	        t          | ||d         ¦  «        t          |d                  |d         |                     dd	¦  «        ¦  «        }t	          j	        t          | ||d         ¦  «        ||d         |z  |                     dd	¦  «        ¦  «         
                    d|¦  «        |
|<   |                     d¦  «        r#t	          j        |
t          |         z  d¦  «        }
|dk    s|                     d¦  «        r|
                     t          j        ¦  «        }
|dk    r|
dd…d	f         n|
S )z_Accessor data as [count] (SCALAR) or [count, n]; float32 for float and normalized integer data.rb   ry   r{   rz   rx   ra   Ú
byteStriderm   r   )rl   ÚoffsetÚstridesÚsparser°   Úvaluesr®   Ú
normalizedg      ð¿r   r   N)Ú
TYPE_SIZESÚDTYPESr  Úitemsizer~   ÚndarrayrL  r6   ÚzerosÚ
frombufferrÅ   ÚmaximumÚNORMALIZERSr:   r¼   )r<   rÙ   rŒ   r†   r   rd   rz   r   rq   Ústriderr   rQ  r°   rR  Úrowss                  r   Ú	_accessorr^    sÃ  € à�KÔ  Ô'€HØ  Ô1µ:¸hÀvÔ>NÔ3OÐQYÐZaÔQb�ˆ$€DÝ�4ŒL€EØ�xÐÐØ�MÔ" 8¨LÔ#9Ô:ˆØ—’˜,Ñ'Ô'Ð@¨4°%´.Ñ+@ˆÝ”
˜E 4˜=¨%½ÀDÈ'ÐS[Ð\hÔSiÑ8jÔ8jÐs{×sÒsð  AMð  OPñ  tQô  tQð  \bð  diô  drð  [sð  tñ  tô  t÷  yò  yñ  {ô  {ˆˆå”˜% ˜¨Ñ.Ô.ˆØ—’˜hÑ'Ô'Ð'€vð dØ  Ô+¨V°HÔ-=�ˆÝŒ}�[¨¨w¸ÀÔ8MÑNÔNÕPVÐW^Ð_nÔWoÔPpÐrxð  zAô  sBð  DK÷  DOò  DOð  P\ð  ^_ñ  D`ô  D`ñ  aô  aˆÝ”m¥K°°g¸vÀlÔ?SÑ$TÔ$TÐV[Ð]cÐdkÔ]lÐosÑ]sÐu{×uÒuð  AMð  OPñ  vQô  vQñ  Rô  R÷  Zò  Zð  []ð  _cñ  dô  dˆˆd‰Ø‡|‚|�LÑ!Ô!ð <Ý”
˜5¥;¨tÔ#4Ñ4°dÑ;Ô;ˆØˆt‚|€|�x—|’| LÑ1Ô1€|Ø—’�RœZÑ(Ô(ˆØ !š)˜)ˆ5����A�Œ;ˆ;¨Ð.r!   rþ   Úposec                ó4  — d| v r>t          j        | d         t           j        ¦  «                             dd¦  «        j        S |pi }|                     d|                      dd¦  «        ¦  «        \  }}}}t          j        dd||z  ||z  z   z  z
  d||z  ||z  z
  z  d||z  ||z  z   z  gd||z  ||z  z   z  dd||z  ||z  z   z  z
  d||z  ||z  z
  z  gd||z  ||z  z
  z  d||z  ||z  z   z  dd||z  ||z  z   z  z
  gg¦  «        }t          j        d¦  «        }|t          j        |                     d|                      dd¦  «        ¦  «        ¦  «        z  |d	d
…d	d
…f<   |                     d|                      dd¦  «        ¦  «        |d	d
…d
f<   |S )z]Local matrix of a node; pose overrides its translation / rotation / scale (animation sample).Úmatrixr$   Úrotation)r    r    r    rŸ   r   r"   Úscale)rŸ   rŸ   rŸ   Nr#   Útranslation)r    r    r    )r~   rr   Úfloat64rÅ   ÚTr  r  )rþ   r_  ÚxÚyÚzÚwrb  ra  s           r   Ú_local_matrixrk    sÖ  € à�4ÐÐÝŒx˜˜Xœ­¬
Ñ3Ô3×;Ò;¸A¸qÑAÔAÔCÐCØˆ:�2€DØ—’˜* d§h¢h¨zÐ;OÑ&PÔ&PÑQÔQ�J€A€qˆ!ˆQÝŒx˜!˜a 1 q¡5¨1¨q©5¡=Ñ1Ñ1°1¸¸A¹ÀÀAÁ¹Ñ3FÈÈQÐQRÉUÐUVÐYZÑUZÉ]ÑH[Ð\Ø˜q 1™u q¨1¡u™}Ñ-¨q°1¸¸A¹ÀÀAÁ¹Ñ3FÑ/FÈÈQÐQRÉUÐUVÐYZÑUZÉ]ÑH[Ð\Ø˜q 1™u q¨1¡u™}Ñ-¨q°A¸±E¸AÀ¹E±MÑ/BÀAÈÈQÐQRÉUÐUVÐYZÑUZÉ]ÑH[ÑD[Ð\ð^ñ _ô _€Hõ ŒV�A‰YŒY€FØ¥¤¨¯ª°'¸4¿8º8ÀGÈ_Ñ;]Ô;]Ñ)^Ô)^Ñ _Ô _Ñ_€Fˆ2ˆAˆ2ˆr�ˆrˆ6�NØ—H’H˜]¨D¯HªH°]ÀOÑ,TÔ,TÑUÔU€Fˆ2ˆAˆ2ˆqˆ5�MØ€Mr!   Úposesúdict[int, np.ndarray]c           	     óv  ‡‡‡	— | d         }|                       d¦  «        }|r1||                       dd¦  «                                       dg ¦  «        }n4d„ |D ¦   «         Šˆfd„t          t          |¦  «        ¦  «        D ¦   «         }i d„ t          |¦  «        D ¦   «         cŠ	}|r“|                     ¦   «         \  Š}|t          |‰         |pi                       ‰¦  «        ¦  «        z  ‰	‰<   |                     ˆˆ	fd„t          |‰                               d	g ¦  «        ¦  «        D ¦   «         ¦  «         |°“‰	S )
zfWorld matrix of every node of the default scene (all root nodes without scenes), in depth-first order.r[   rÕ   rÔ   r   c                óD   — h | ]}|                      d g ¦  «        D ]}|’ŒŒS )Úchildren)r  )r   rþ   Úcs      r   ú	<setcomp>z"_world_matrices.<locals>.<setcomp>0  s3   € ÐJÐJÐJ˜$°·²¸*ÀbÑ1IÔ1IÐJÐJ¨A�AÐJÐJÐJÐJr!   c                ó   •— g | ]}|‰v¯|‘Œ	S r–   r–   )r   rð   rp  s     €r   rC  z#_world_matrices.<locals>.<listcomp>1  s#   ø€ ÐCÐCÐC�q°¸(Ð1BÐ1B�Ð1BÐ1BÐ1Br!   c                ó:   — g | ]}|t          j        d ¦  «        f‘ŒS )r$   ©r~   r  ©r   rð   s     r   rC  z#_world_matrices.<locals>.<listcomp>2  s$   € ÐCÐCÐC¨a˜A�rœv a™yœy˜>ÐCÐCÐCr!   c              3  ó,   •K  — | ]}|‰‰         fV — Œd S r•   r–   )r   rq  rŒ   Úmatricess     €€r   r˜   z"_world_matrices.<locals>.<genexpr>6  s,   øè è € Ð^Ð^¨a�a˜ %œÐ)Ð^Ð^Ð^Ð^Ð^Ð^r!   rp  )r  rÛ   rN   ÚreversedÚpoprk  Úextend)
r<   rl  r[   rÕ   ÚrootsÚstackrD  rp  rŒ   rx  s
          @@@r   Ú_world_matricesr~  )  sN  øøø€ à�ŒM€EØ�XŠX�hÑÔ€FØð DØ�t—x’x ¨Ñ+Ô+Ô,×0Ò0°¸"Ñ=Ô=ˆˆàJÐJ %ÐJÑJÔJˆØCÐCÐCÐC�E¥# e¡*¤*Ñ-Ô-ÐCÑCÔCˆØÐCÐCµ8¸E±?´?ÐCÑCÔC€O€HˆeØ
ð _ØŸ	š	™œ‰ˆˆvØ ¥=°°u´ÀÀÈ×?PÒ?PÐQVÑ?WÔ?WÑ#XÔ#XÑXˆ�‰Ø�ŠÐ^Ð^Ð^Ð^Ð^µ8¸EÀ%¼L×<LÒ<LÈZÐY[Ñ<\Ô<\Ñ3]Ô3]Ð^Ñ^Ô^Ñ^Ô^Ð^ð ð _ð €Or!   c           	   #  óH  K  — |                       dg ¦  «        }|sBd„ t          t          |                       dg ¦  «        ¦  «        ¦  «        D ¦   «         E d{V —† dS t          | |¦  «                             ¦   «         D ]"\  }}d||         v r|||         d         |fV — Œ#dS )z[(node index or None, mesh index, world matrix) of every mesh instance of the default scene.r[   c              3  óD   K  — | ]}d |t          j        d¦  «        fV — Œd S )Nr$   ru  rv  s     r   r˜   z"_mesh_instances.<locals>.<genexpr>>  s1   è è € ÐUÐU¨Q�T˜1�bœf Q™iœiÐ(ÐUÐUÐUÐUÐUÐUr!   r\   Nr�   )r  rÛ   rN   r~  rÜ   )r<   rl  r[   rŒ   ra  s        r   Ú_mesh_instancesr�  :  sÉ   è è € à�HŠH�W˜bÑ!Ô!€EØð ØUÐUµ%½¸D¿HºHÀXÈrÑ<RÔ<RÑ8SÔ8SÑ2TÔ2TÐUÑUÔUÐUÐUÐUÐUÐUÐUÐUØˆÝ(¨¨uÑ5Ô5×;Ò;Ñ=Ô=ð 6ð 6‰ˆˆvØ�U˜5”\Ð!Ð!Ø˜˜uœ fÔ-¨vÐ5Ð5Ð5Ð5øð6ð 6r!   rù   c                ó  ‡ — ‰                       dg ¦  «        }|t          |¦  «        k    rdS ˆ fd„||         d         D ¦   «         }||                               dd¦  «        dddddœ}|rt          d	„ |D ¦   «         ¦  «        s|S t          d
„ |D ¦   «         ¦  «        t	          d„ |D ¦   «         ¦  «        }}d„ |D ¦   «         }|rt	          |¦  «        nd}i |¥|r%t          t          ||z
  |z  ¦  «        ¦  «        dz   nd|||z
  |dœ¥S )aU  Frames of a glTF animation, from the min / max / count of its sampler inputs (glTF requires their bounds, so
    only the JSON is read): the densest track sets the frame rate (WanGP's animated GLBs key every frame), and frame i
    is at start + i / fps. None without animation; frames, fps and duration are None when the bounds are missing.r`   Nc                ó8   •— g | ]}‰d          |d                  ‘ŒS )rb   rû   r–   )r   rŠ   r<   s     €r   rC  z$animation_timing.<locals>.<listcomp>M  s(   ø€ ÐcÐcÐc°gˆd�;Ô ¨Ô 0Ô1ÐcÐcÐcr!   rØ   r‘   Ú r    )r‘   Úframesrô   ÚdurationrK  c              3  ó&   K  — | ]}d |v od|v V — ŒdS )r|   r}   Nr–   ©r   Úas     r   r˜   z#animation_timing.<locals>.<genexpr>O  s/   è è € ÐGÐG¸1˜U a˜ZÐ6¨E°Q¨JÐGÐGÐGÐGÐGÐGr!   c              3  ó2   K  — | ]}|d          d         V — ŒdS )r|   r   Nr–   rˆ  s     r   r˜   z#animation_timing.<locals>.<genexpr>Q  s*   è è € Ð1Ð1 Q�Q�u”X˜a”[Ð1Ð1Ð1Ð1Ð1Ð1r!   c              3  ó2   K  — | ]}|d          d         V — ŒdS )r}   r   Nr–   rˆ  s     r   r˜   z#animation_timing.<locals>.<genexpr>Q  s*   è è € Ð6SÐ6SÀq°q¸´xÀ´{Ð6SÐ6SÐ6SÐ6SÐ6SÐ6Sr!   c                ó´   — g | ]U}|d          dk    ¯|d         d         |d         d         k    ¯,|d          dz
  |d         d         |d         d         z
  z  ‘ŒVS )rz   r   r}   r   r|   r–   rˆ  s     r   rC  z$animation_timing.<locals>.<listcomp>R  sl   € Ð|Ð|Ð|ÀÈqÐQXÌzÐ\]Ê~È~ÐbcÐdiÔbjÐklÔbmÐpqÐrwÔpxÐyzÔp{Òb{Ðb{ˆa�Œj˜1‰n  5¤¨!¤¨q°¬x¸¬{Ñ!:Ñ;Ðb{Ðb{Ðb{r!   r   )r…  rô   r†  rK  )r  rN   Úallr|   r}   rj   Úround)	r<   rù   r`   ÚinputsÚtimingrK  r  Úratesrô   s	   `        r   Úanimation_timingr’  F  sj  ø€ ð —’˜,¨Ñ+Ô+€JØ•C˜
‘O”OÒ#Ð#ØˆtØcÐcÐcÐcÀÈIÔAVÐWaÔAbÐcÑcÔc€FØ  Ô+×/Ò/°¸Ñ;Ô;ÀtÐTXÐfjÐuxÐyÐy€FØð �ÐGÐGÀÐGÑGÔGÑGÔGð ØˆÝÐ1Ð1¨&Ð1Ñ1Ô1Ñ1Ô1µ3Ð6SÐ6SÈFÐ6SÑ6SÔ6SÑ3SÔ3Sˆ3€EØ|Ð|ÀVÐ|Ñ|Ô|€EØÐ
'�#ˆe‰*Œ*ˆ* 4€Cð Hˆfð  HÀsÐ Q¥¥E¨3°©;¸#Ñ*=Ñ$>Ô$>Ñ ?Ô ?À!Ñ CÐ CÐPQÐZ]ÐknÐqvÑkvð  BGð  Hð  Hð  Hð  Hr!   rŠ   Útimerb  c           	     ó"  — t          | ||d         ¦  «                             t          j        ¦  «        }|                     dd¦  «        }|dk    }t          | ||d         ¦  «                             t          j        ¦  «                             t          |¦  «        |rdndd¦  «        }|rdnd	}	t          t          j        t          j	        ||d
¬¦  «        dz
  d	t          |¦  «        dz
  ¦  «        ¦  «        }
||d	         k    s|
t          |¦  «        dz
  k    s|dk    r
||
|	f         S |||
         z
  ||
dz            ||
         z
  z  }||
|	f         ||
dz   |	f         }}|r}||
dz            ||
         z
  }d|dz  z  d|dz  z  z
  dz   |z  |dz  d|dz  z  z
  |z   |z  ||
df         z  z   d|dz  z  d|dz  z  z
  |z  z   |dz  |dz  z
  |z  ||
dz   d	f         z  z   S |s||||z
  z  z   S t          t          j        ||¦  «        ¦  «        }|d	k     r| | }}|dk    r||||z
  z  z   S t          j        |¦  «        }t          j        d|z
  |z  ¦  «        |z  t          j        ||z  ¦  «        |z  z   t          j        |¦  «        z  S )zqValue of an animation sampler at `time` (clamped to its keys): STEP, LINEAR (slerp for rotations) or CUBICSPLINE.rû   rý   rú   ÚCUBICSPLINErü   r#   r   r®   r   Úright)ÚsideÚSTEPr"   g–C‹lçûï?)r^  r:   r~   re  r  rÅ   rN   rj   ÚclipÚsearchsortedr¿   ÚdotÚmathÚacosÚsin)r<   rÙ   rŠ   r“  rb  r  rý   ÚcubicrR  ÚmiddlerŒ   Úur‰  rB  Úspanr›  Úangles                    r   Ú_sample_trackr¤  W  sN  € å�d˜G W¨WÔ%5Ñ6Ô6×=Ò=½b¼jÑIÔI€EØ—K’K °Ñ:Ô:€MØ˜]Ò*€EÝ�t˜W g¨hÔ&7Ñ8Ô8×?Ò?ÅÄ
ÑKÔK×SÒSÕTWÐX]ÑT^ÔT^ÐejÐ`qÐ`aÐ`aÐpqÐsuÑvÔv€FØÐˆQˆQ˜Q€FÝ•”�œ¨¨t¸'ÐBÑBÔBÀQÑFÈÍ3ÈuÉ:Ì:ÐXYÉ>ÑZÔZÑ[Ô[€EØˆu�QŒxÒÐ˜5¥C¨¡J¤J°¡NÒ2Ð2°mÀvÒ6MÐ6MØ�e˜V�mÔ$Ð$Ø	��e”Ñ	  u¨q¡yÔ!1°E¸%´LÑ!@ÑA€AØ�%˜�-Ô  &¨°©°FÐ):Ô";€q€AØð yØ�U˜Q‘YÔ %¨¤,Ñ.ˆØ�A˜‘F‘
˜Q  a¡™ZÑ'¨!Ñ+¨qÑ0°A¸±F¸QÀÀaÁ¹ZÑ4GÈ!Ñ4KÈtÑ3SÐV\Ð]bÐdeÐ]eÔVfÑ3fÑfÐjkÐnoÐstÑntÑjtÐwxÐ{|ð  ABñ  |Bñ  xBñ  kBð  FGñ  jGñ  Gð  KLð  PQñ  KQð  TUð  YZñ  TZñ  KZð  ^bñ  Jbð  ekð  lqð  tuñ  luð  wxð  lxô  eyñ  Jyñ  yð  	yØð Ø�1˜˜A™‘;‰ÐÝ
•”�q˜!‘”Ñ
Ô
€CØ
ˆQ‚w€wØ��c�Tˆ3ˆØ
ˆV‚|€|Ø�1˜˜A™‘;‰ÐÝŒI�c‰NŒN€EÝŒH�a˜!‘e˜u‘_Ñ%Ô%¨Ñ)­D¬H°Q¸±YÑ,?Ô,?À!Ñ,CÑCÅtÄxÐPUÁÄÑVÐVr!   údict[int, dict]c           	     ón  — | d         |         i }}|d         D ]›}|d         }d|vs
|d         dvrŒt          | ||d         |d                  ||d         d	k    ¦  «        }|d         d	k    r"|t          j                             |¦  «        z  n||                     |d         i ¦  «        |d         <   Œœ|S )
zfAnimated node properties at `time`: {node: {"translation" | "rotation" | "scale" | "weights": value}}.r`   r   rh   rþ   rÿ   )rd  rb  rc  rø   rØ   rŠ   rb  )r¤  r~   ÚlinalgÚnormr  )	r<   rÙ   r“  rù   r™  rl  Úchannelrh   rà   s	            r   Ú_animation_posesrª  q  sÝ   € à�|Ô$ YÔ/°ˆ%€DØ˜
Ô#ð Hð HˆØ˜Ô"ˆØ˜ÐÐ 6¨&¤>Ð9hÐ#hÐ#hØÝ˜d G¨T°*Ô-=¸gÀiÔ>PÔ-QÐSWÐY_Ð`fÔYgÐkuÒYuÑvÔvˆØ`fÐgmÔ`nÐr|Ò`|Ð`|¸uÅrÄyÇ~Â~ÐV[ÑG\ÔG\Ñ?\Ð?\ð  CHˆ×Ò˜ œ¨Ñ,Ô,¨V°F¬^Ñ<Ð<Ø€Lr!   ÚpointsÚjointsrø   rx  Ú	translatec           	     ó,  — t          j        | ¦  «        }t          |j        d         ¦  «        D ]d}||dd…|f                  }t          j        d|dd…dd…dd…f         | ¦  «        }||dd…||dz   …f         |r||dd…dd…df         z   n|z  z  }Œe|S )zgLinear blend skinning of points [V, 3] with joint matrices [J, 4, 4] (translation dropped for normals).r   Nz
vij,vj->vir#   )r~   Ú
zeros_likerÛ   rƒ   Úeinsum)	r«  r¬  rø   rx  r­  ÚresultÚkra  Úmoveds	            r   Ú_skinr´  }  s¾   € åŒ]˜6Ñ"Ô"€FÝ�6”< ”?Ñ#Ô#ð [ð [ˆØ˜&    A œ,Ô'ˆÝ”	˜,¨¨q¨q¨q°"°1°"°b°q°b¨yÔ(9¸6ÑBÔBˆØ�'˜!˜!˜!˜Q˜q 1™u˜W˜*Ô%ÀYÐ)Y¨°¸¸¸¸2¸A¸2¸q¸Ô1AÑ)AÐ)AÐTYÑZÑZˆˆØ€Mr!   r°   r±   c           	     óþ  — |dk    r1| d t          | ¦  «        dz  dz  …                              dd¦  «        S t          j        t	          t          | ¦  «        dz
  d¦  «        ¦  «        }|dk    r;|dz  }t          j        | |         | |dz   |z            | |dz   |z
           gd¦  «        S t          j        | |dz            | |dz            t          |¦  «        rt          j        || d         ¦  «        n|gd¦  «        S )Nr$   r#   r®   r"   r   é   r   )rN   rÅ   r~   r  r}   r}  Ú	full_like)r°   r±   rð   Úodds       r   Ú
_trianglesr¹  ‡  sù   € Øˆq‚y€yØÐ-�˜G™œ¨Ñ)¨AÑ-Ð-Ô.×6Ò6°r¸1Ñ=Ô=Ð=Ý
Œ	•#•c˜'‘l”l QÑ&¨Ñ*Ô*Ñ+Ô+€AØˆq‚y€yØ�!‰eˆÝŒx˜ œ W¨Q°©U°S©[Ô%9¸7À1ÀqÁ5È3Á;Ô;OÐPÐRSÑTÔTÐTÝŒ8�W˜Q ™U”^ W¨Q°©U¤^ÕTWÐXYÑTZÔTZÐ5aµR´\À!ÀWÈQÄZÑ5PÔ5PÐ5PÐ`aÐbÐdeÑfÔfÐfr!   Úinfor   únp.ndarray | Nonec                ó®  — |€d S | d         |d                  }|                      di ¦  «                              di ¦  «                              d|                      d¦  «        ¦  «        }|€d S | d         |         }d|v rt          | ||d         ¦  «        nt          |d         |¦  «        }t          t	          t          |¦  «        ¦  «        |¦  «        S )	Nr_   rŒ   Ú
extensionsÚEXT_texture_webpr‹   r^   rx   r/  )r  rL  r=  r   r	   r?   )	r<   rÙ   r  rº  r   r�   r‹   Úimagerg   s	            r   Ú_texture_arrayrÀ  ‘  sÑ   € Ø€|ØˆtØ�:Ô˜t Gœ}Ô-€GØ�[Š[˜ rÑ*Ô*×.Ò.Ð/AÀ2ÑFÔF×JÒJÈ8ÐU\×U`ÒU`ÐaiÑUjÔUjÑkÔk€FØ€~ØˆtØ�ŒN˜6Ô"€EØ>JÈeÐ>SÐ>S�;�t˜W e¨LÔ&9Ñ:Ô:Ð:ÕYcÐdiÐjoÔdpÐrvÑYwÔYw€DÝ•|¥E¨$¡K¤KÑ0Ô0°(Ñ;Ô;Ð;r!   úfloat | Nonec                óð  ‡ ‡‡‡‡+‡,‡-‡.‡/‡0‡1— |�&‰                       d¦  «        rt          ‰ ‰|¦  «        nd }|�%‰                       d¦  «        rt          ‰ |¦  «        nd Š1g }t          ‰ |¦  «        D �]»\  }}}	|€i n‰ d         |         }
‰ d         |         }|€d nnt	          j        |                      |i ¦  «                              d|
                      d|                      dg ¦  «        ¦  «        ¦  «        t          j        ¦  «        }‰1�d|
v r‰ d         |
d                  nd }|�ˆd|v rAt          ‰ ‰|d         ¦  «                             dd	d	¦  «         	                    d
dd¦  «        nt	          j
        d	¦  «        d          }t	          j        ˆ1fd„|d         D ¦   «         ¦  «        |z  }|d u o.t          j                             |	d d…d d…f         ¦  «        d
k     }t          j                             |	d d…d d…f         ¦  «        j        }|d         D �]}|                      dd	¦  «        }|dvrŒt           t#          |                      di ¦  «        ¦  «        z  rt%          d¦  «        ‚|d         Š,t          ‰ ‰‰,d         ¦  «                             t          j        ¦  «        Š/d‰,v r4t          ‰ ‰‰,d         ¦  «                             t          j        ¦  «        nd }t)          |�|ng |                      dg ¦  «        ¦  «        D ]U\  }}|d
k    r!d|v r‰/|t          ‰ ‰|d         ¦  «        z  z  Š/|d
k    r#d|v r|�||t          ‰ ‰|d         ¦  «        z  z  }ŒVd|v r4t          ‰ ‰|d         ¦  «                             t          j        ¦  «        n t	          j        t/          ‰/¦  «        ¦  «        }t1          ||¦  «        }|�ˆ,fd„t3          d	¦  «        D ¦   «         ng }|rst	          j        ˆ,ˆˆ ˆ/fd„|D ¦   «         d¦  «        }t	          j        ˆ,ˆˆ ˆ/fd„|D ¦   «         d¦  «        }t7          ‰/|||d¦  «        }|€d nt7          ||||d¦  «        }n1‰/|	d d…d d…f         j        z  |	d d…df         z   }|€d n	||j        z  }||r|d d …d d d…f         n||                      d¦  «        d œ}|�;|t	          j        t          j                             |dd¬!¦  «        d"¦  «        z  |d#<   |d         �‰ d$         |d                  ni }|                      d%i ¦  «        }|                      d&i ¦  «                              d'd
¦  «        } d(| › �‰,v rt          ‰ ‰‰,d(| › �         ¦  «        |d)<   d*‰,v rt          ‰ ‰‰,d*         ¦  «        |d+<   t	          j        |                      d,d-¦  «        t          j        ¦  «        |d.<   |                      d&¦  «        |                      d/¦  «        |                      d0¦  «        d1œ|d2<   |                      |¦  «         �Œ�Œ½|st%          d3¦  «        ‚i d }"}!t/          d4„ |D ¦   «         ¦  «        dk    r‹tC          d5„ |D ¦   «         ¦  «        rrtE          d6„ |d
         d2          #                    ¦   «         D ¦   «         ¦  «        r;ˆˆˆ fd7„|d
         d2          $                    ¦   «         D ¦   «         }!d8„ |D ¦   «         }"nºtE          d9„ |D ¦   «         ¦  «        r¡d:„ |D ¦   «         }#tK          tL           '                    d;„ |#D ¦   «         ¦  «        ¦  «        Š.tQ          ˆˆˆ fd<„‰.D ¦   «         t	          j)        d=d>t          j*        ¦  «        gz   ¦  «        \  Š+Š-ˆ+ˆ-ˆ.fd?„t)          ||#¦  «        D ¦   «         }"d@‰+i}!|!                      d@¦  «        �K|!d@         dA         d>k     !                    ¦   «         r't	          j+        |!d@         dBd d…f         ¦  «        |!d@<   g }$|D ]Š}t	          j,        |d.         t/          |dC         ¦  «        d	f¦  «         -                    ¦   «         }%d+|v r-|%d d …d |d+         j.        d         …fxx         |d+         z  cc<   |$                      |%¦  «         Œ‹tC          dD„ |$D ¦   «         ¦  «        rd }$t	          j/        d
gdE„ |D ¦   «         z   ¦  «        }&ˆfdF„}'ta           |'dG„ |D ¦   «         t          j        ¦  «         |'dH„ t)          ||&¦  «        D ¦   «         t          j        ¦  «        ¬I¦  «        }(tC          dJ„ |D ¦   «         ¦  «        r% |'dK„ |D ¦   «         t          j        ¦  «        |(_1        |"�o |'|"t          j        ¦  «        |(_2        |! $                    ¦   «         D ]?\  })}*tg          |(|)|*€d n&ti          j5        |*¦  «         6                    ‰¦  «        ¦  «         Œ@|$��to          dL„ |$D ¦   «         ¦  «        Š0ti          j5        t	          j        ˆ0fdM„|$D ¦   «         ¦  «                             t          j        ¦  «        ¦  «        }$‰0d	k    r=tq          |$d d …df         dk     !                    ¦   «         ¦  «        r|$d d …d d…f         }$ti          j9        tu          |$d d …d d…f          ;                    d
d¦  «        ¦  «        |$d d …dd …f         gd¦  «         6                    ‰¦  «        |(_<        |(S )NNr`   Úskinsr[   r\   rø   ÚskinÚinverseBindMatricesr®   r$   r   r"   r   c                ó    •— g | ]
}‰|         ‘ŒS r–   r–   )r   ÚjointÚworldss     €r   rC  z!_gltf_to_mesh.<locals>.<listcomp>©  s   ø€ Ð&QÐ&QÐ&Q¸ v¨e¤}Ð&QÐ&QÐ&Qr!   r¬  r#   r²   r±   ©r$   r¶  é   r½  z,Compressed glTF primitives are not supportedr¯   rš   r›   r÷   r°   c                ó0   •— g | ]}d |› �‰v ¯	d|› �‰v ¯|‘ŒS )ÚJOINTS_ÚWEIGHTS_r–   )r   Únr¯   s     €r   rC  z!_gltf_to_mesh.<locals>.<listcomp>¼  s;   ø€ ÐhÐhÐh˜!¨=°Q¨=¨=¸JÐ+FÐ+FÈ>ÐVWÈ>È>Ð]gÐKgÐKg�AÐKgÐKgÐKgr!   c           	     óÀ   •— g | ]Z}t          ‰‰‰d |› �         ¦  «                             t          ‰¦  «        d¦  «                             t          j        ¦  «        ‘Œ[S )rÌ  r®   )r^  rÅ   rN   r:   r~   Úint64©r   rÎ  r¯   rÙ   r<   Ú	positionss     €€€€r   rC  z!_gltf_to_mesh.<locals>.<listcomp>¾  sƒ   ø€ ð  )Yð  )Yð  )Yð  OP­°4¸À*È]ÐWXÈ]È]ÔB[Ñ)\Ô)\×)dÒ)dÕehÐirÑesÔesÐuwÑ)xÔ)x×)Ò)õ  ACô  AIñ  *Jô  *Jð  )Yð  )Yð  )Yr!   c           	     ó†   •— g | ]=}t          ‰‰‰d |› �         ¦  «                             t          ‰¦  «        d¦  «        ‘Œ>S )rÍ  r®   )r^  rÅ   rN   rÑ  s     €€€€r   rC  z!_gltf_to_mesh.<locals>.<listcomp>¿  sl   ø€ ð  0Pð  0Pð  0Pð  FGµ	¸$ÀÈÐTbÐ_`ÐTbÐTbÔIcÑ0dÔ0d×0lÒ0lÕmpÐqzÑm{Ôm{Ð}ñ  1Aô  1Að  0Pð  0Pð  0Pr!   TFr¥   )r»   r³   r¥   )ÚaxisÚkeepdimsgê-�™—q=rº   r]   r¦   r§   ÚtexCoordÚ	TEXCOORD_rµ   r�   r¾   r¡   rž   Úfactorrª   r«   )r·   r¸   r¹   r_   z'The glTF file contains no triangle meshc                ó   — h | ]
}|d          ’ŒS )r¥   r–   ©r   Úps     r   rr  z _gltf_to_mesh.<locals>.<setcomp>Ù  s   € Ð)Ð)Ð)˜aˆAˆjŒMÐ)Ð)Ð)r!   c              3  ó   K  — | ]}d |v V — Œ	dS )rµ   Nr–   rÚ  s     r   r˜   z _gltf_to_mesh.<locals>.<genexpr>Ù  s&   è è € Ð7RÐ7RÀq¸À¸
Ð7RÐ7RÐ7RÐ7RÐ7RÐ7Rr!   c              3  ó   K  — | ]}|d uV — Œ	d S r•   r–   )r   Úvs     r   r˜   z _gltf_to_mesh.<locals>.<genexpr>Ù  sJ   è è € ð  [Qð  [QÐmnÐ[\ÐdhÐ[hð  [Qð  [Qð  [Qð  [Qð  [Qð  [Qr!   c                óN   •— i | ]!\  }}|t          ‰‰‰||d k    rdnd¦  «        “Œ"S )r·   r$   r#   ©rÀ  )r   r²  rº  r  rÙ   r<   s      €€€r   r    z!_gltf_to_mesh.<locals>.<dictcomp>Ú  sS   ø€ ð  Mð  Mð  MÑdkÐdeÐgk�A•~ d¨G°T¸4ÀaÈ<ÒFWÐFWÀÀÐ]^Ñ_Ô_ð  Mð  Mð  Mr!   c                ó   — g | ]
}|d          ‘ŒS )rµ   r–   rÚ  s     r   rC  z!_gltf_to_mesh.<locals>.<listcomp>Û  s   € Ð'Ð'Ð'˜Aˆq�ŒxÐ'Ð'Ð'r!   c              3  ó>   K  — | ]}|d          d         duod|v V — ŒdS )r_   r·   Nrµ   r–   rÚ  s     r   r˜   z _gltf_to_mesh.<locals>.<genexpr>Ü  s9   è è € ÐSÐSÈˆQˆzŒ]˜<Ô(°Ð4ÐC¸À!¸ÐSÐSÐSÐSÐSÐSr!   c                ó^   — g | ]*}|d          d         �d|v r|d          d         d         nd‘Œ+S )r_   r·   Nrµ   rŒ   r–   rÚ  s     r   rC  z!_gltf_to_mesh.<locals>.<listcomp>Ý  s]   € ð  Kð  Kð  Kð  @A¸!¸J¼-ÈÔ:UÐ:aÐfkÐopÐfpÐfp�!�J”- Ô-¨gÔ6Ð6Ðvzð  Kð  Kð  Kr!   c              3  ó   K  — | ]}|®|V — Œ	d S r•   r–   )r   r²  s     r   r˜   z _gltf_to_mesh.<locals>.<genexpr>Þ  s"   è è € Ð!EÐ!E¨°q°} !°}°}°}°}Ð!EÐ!Er!   c           	     ó:   •— g | ]}t          ‰‰‰d |id¦  «        ‘ŒS )rŒ   r$   rà  )r   r²  r  rÙ   r<   s     €€€r   rC  z!_gltf_to_mesh.<locals>.<listcomp>ß  s0   ø€ Ð%iÐ%iÐ%iÐ_`¥n°T¸7ÀDÈ7ÐTUÈ,ÐXYÑ&ZÔ&ZÐ%iÐ%iÐ%ir!   )r$   r$   r$   r©   c           
     ó  •— g | ]€\  }}|�5t          |d         ‰‰                     |¦  «                 ‰j        ¦  «        nCt          t          j        t          |d         ¦  «        dfd¦  «        ‰d         ‰j        ¦  «        ‘Œ�S )Nrµ   r»   r"   g      à?r®   )r   rŒ   rƒ   r~   ÚfullrN   )r   rÛ  r²  ÚatlasÚboxesÚkeyss      €€€r   rC  z!_gltf_to_mesh.<locals>.<listcomp>à  sÒ   ø€ ð /ð /ð /Ù�1�að JKÈ�y˜˜5œ 5¨¯ª°A©¬Ô#7¸¼ÑEÔEÐEÕ\eÕfhÔfmÕorÐstÐuô  tAñ  pBô  pBð  DEð  oFð  HKñ  gLô  gLð  NSð  TVô  NWð  Y^ô  Ydñ  ]eô  ]eð /ð /ð /r!   r·   r¨   .r»   c              3  óF   K  — | ]}|d k                          ¦   «         V — ŒdS ©r   N)r�  ©r   rq  s     r   r˜   z _gltf_to_mesh.<locals>.<genexpr>ë  s.   è è € Ð
*Ð
*˜aˆA�ŠF�<Š<‰>Œ>Ð
*Ð
*Ð
*Ð
*Ð
*Ð
*r!   c                ó8   — g | ]}t          |d          ¦  «        ‘ŒS ©r»   )rN   rÚ  s     r   rC  z!_gltf_to_mesh.<locals>.<listcomp>î  s$   € ÐAÐAÐA°a�s 1 Z¤=Ñ1Ô1ÐAÐAÐAr!   c                óœ   •— t          j        t          j        | ¦  «                             |¦  «        ¦  «                             ‰¦  «        S r•   )rÀ   Ú
from_numpyr~   Úconcatenater:   r8   )Úarraysr   r5   s     €r   ú<lambda>z_gltf_to_mesh.<locals>.<lambda>ï  s:   ø€ ¥5Ô#3µB´NÀ6Ñ4JÔ4J×4QÒ4QÐRWÑ4XÔ4XÑ#YÔ#Y×#\Ò#\Ð]cÑ#dÔ#d€ r!   c                ó   — g | ]
}|d          ‘ŒS rï  r–   rÚ  s     r   rC  z!_gltf_to_mesh.<locals>.<listcomp>ð  s   € Ð >Ð >Ð >°1  :¤Ð >Ð >Ð >r!   c                ó*   — g | ]\  }}|d          |z   ‘ŒS )r³   r–   )r   rÛ  Úos      r   rC  z!_gltf_to_mesh.<locals>.<listcomp>ð  sD   € ð  [Kð  [Kð  [KÑnrÐnoÐqrÐ[\Ð]dÔ[eÐhiÑ[ið  [Kð  [Kð  [Kr!   )r»   r³   c              3  ó   K  — | ]}d |v V — Œ	dS )rº   Nr–   rÚ  s     r   r˜   z _gltf_to_mesh.<locals>.<genexpr>ñ  s&   è è € Ð
)Ð
)˜aˆ9˜ˆ>Ð
)Ð
)Ð
)Ð
)Ð
)Ð
)r!   c                ó   — g | ]
}|d          ‘ŒS rö   r–   rÚ  s     r   rC  z!_gltf_to_mesh.<locals>.<listcomp>ò  s   € Ð;Ð;Ð;°˜q œ|Ð;Ð;Ð;r!   c              3  ó0   K  — | ]}|j         d          V — ŒdS rì  )rƒ   rí  s     r   r˜   z _gltf_to_mesh.<locals>.<genexpr>ø  s(   è è € Ð/Ð/ 1�A”G˜A”JÐ/Ð/Ð/Ð/Ð/Ð/r!   c           
     ób   •— g | ]+}t          j        |d d‰|j        d         z
  ffd¬¦  «        ‘Œ,S ))r   r   r   r   rŸ   )Úconstant_values)r~   rp   rƒ   )r   rq  Úwidths     €r   rC  z!_gltf_to_mesh.<locals>.<listcomp>ù  sW   ø€ ð  2Eð  2Eð  2EÐxyµ"´&¸¸VÀaÈÐQRÔQXÐYZÔQ[ÑI[ÐE\Ð<]ÐorÐ2sÑ2sÔ2sð  2Eð  2Eð  2Er!   )=r  rª  r~  r�  r~   Úasarrayre  r^  rÅ   Ú	transposer  r}  r§  ÚdetÚinvrf  rE  rF  r´   r:   ÚziprÐ  r  rN   r¹  rÛ   rò  r´  rZ  r¨  rr   r¼   ro   r�  r¶   rR  rÜ   rÚ   r=   Úfromkeysr   rç  r�   r   Úbroadcast_tor6   rƒ   Úcumsumr   rº   rµ   ÚsetattrrÀ   rñ  r8   r}   rt   rÁ   r   rÂ   r¾   )2r<   rÙ   r  r5   r“  rl  rc   Ú
node_indexÚ
mesh_indexra  rþ   Úmesh_defrø   rÄ  Úinverse_bindÚjoint_matricesÚflipÚnormal_matrixrÊ   r±   rº   Úweightrh   r°   r³   Úsetsr¬  Újoint_weightsr»   rñ   r¥   rÉ   Úuv_setr_   rµ   r‹   r¾   ÚcolorÚoffsetsr.   r�   rß   rr   rè  r¯   ré  rê  rÒ  rý  rÈ  s2   ````                                       @@@@@@@r   Ú_gltf_to_meshr  �  s  øøøøøøøøøøø€ Ø59Ð5EÈ$Ï(Ê(ÐS_ÑJ`ÔJ`Ð5EÕ˜T 7¨DÑ1Ô1Ð1Ðfj€EØ-2Ð->À4Ç8Â8ÈGÑCTÔCTÐ->�_˜T 5Ñ)Ô)Ð)ÐZ^€FØ€EÝ*9¸$ÀÑ*FÔ*Fð 0ñ 0Ñ&ˆ
�J ØÐ'ˆrˆr¨T°'¬]¸:Ô-FˆØ˜”> *Ô-ˆà˜-�$�$­R¬Z¸¿	º	À*ÈbÑ8QÔ8Q×8UÒ8UÐV_Ðae×aiÒaiÐjsÐu}÷  vBò  vBð  CLð  NPñ  vQô  vQñ  bRô  bRñ  9Sô  9Sõ  UWô  U_ñ  .`ô  .`ˆØ.4Ð.@ÀVÈtÀ^À^ˆt�GŒ}˜T &œ\Ô*Ð*ÐY]ˆØÐð zOð  SWð  zWð  zW�9 T¨7°DÐ9NÔ4OÑPÔP×XÒXÐY[Ð]^Ð`aÑbÔb×lÒlÐmnÐpqÐstÑuÔuÐuõ  ]_ô  ]cð  deñ  ]fô  ]fð  gkô  ]lˆLÝœXÐ&QÐ&QÐ&QÐ&QÀ$ÀxÄ.Ð&QÑ&QÔ&QÑRÔRÐUaÑaˆNØ�tˆ|ÐA¥¤	§¢¨f°R°a°R¸¸!¸°V¬nÑ =Ô =ÀÒ AˆÝœ	Ÿš f¨R¨a¨R°°!°¨V¤nÑ5Ô5Ô7ˆØ! ,Ô/ð %	ñ %	ˆIØ—=’= ¨Ñ+Ô+ˆDØ˜9Ð$Ð$ØÝ%­¨I¯MªM¸,ÈÑ,KÔ,KÑ(LÔ(LÑLð QÝ Ð!OÑPÔPÐPØ" <Ô0ˆJÝ! $¨°¸JÔ1GÑHÔH×OÒOÕPRÔPZÑ[Ô[ˆIØ[cÐgqÐ[qÐ[q•i  g¨z¸(Ô/CÑDÔD×KÒKÍBÌJÑWÔWÐWÐw{ˆGÝ"%°Ð1D g gÈ"ÈiÏmÊmÐ\eÐgiÑNjÔNjÑ"kÔ"kð Sð S‘�˜Ø˜Q’;�; :°Ð#7Ð#7Ø ­)°D¸'À6È*ÔCUÑ*VÔ*VÑ!VÑV�IØ˜Q’;�; 8¨vÐ#5Ð#5¸'Ð:MØ˜v­	°$¸ÀÈÔAQÑ(RÔ(RÑRÑR�GøØYbÐfoÐYoÐYo•i  g¨y¸Ô/CÑDÔD×KÒKÍBÌHÑUÔUÐUÕuwÔu~õ  @Cð  DMñ  @Nô  @Nñ  vOô  vOˆGÝ˜w¨Ñ-Ô-ˆEØlpÐl|ÐhÐhÐhÐh�u Q™xœxÐhÑhÔhÐhð  CEˆDØð QÝœð  )Yð  )Yð  )Yð  )Yð  )Yð  )Yð  )Yð  TXð  )Yñ  )Yô  )Yð  [\ñ  ]ô  ]�Ý "¤ð  0Pð  0Pð  0Pð  0Pð  0Pð  0Pð  0Pð  KOð  0Pñ  0Pô  0Pð  RSñ  !Tô  !T�Ý  ¨F°MÀ>ÐSWÑXÔX�Ø") /˜$˜$µu¸WÀfÈmÐ]kÐmrÑ7sÔ7s��à$ v¨b¨q¨b°"°1°"¨f¤~Ô'7Ñ7¸&ÀÀ!ÀÀQÀ¼-ÑG�Ø") /˜$˜$°wÀÄÑ7P�Ø (ÀTÐ3T°5¸¸¸¸D¸D¸b¸D¸´>°>ÈuÐbk×boÒboÐpzÑb{Ôb{Ð|Ð|ˆDØÐ"Ø")­B¬Jµr´y·~²~ÀgÐTUÐ`d°~Ñ7eÔ7eÐglÑ,mÔ,mÑ"m��Y‘Ø>BÀ:Ô>NÐ>Z�t˜KÔ(¨¨jÔ)9Ô:Ð:Ð`bˆHØ—,’,Ð5°rÑ:Ô:ˆCØ—W’WÐ/°Ñ4Ô4×8Ò8¸ÀQÑGÔGˆFØ#˜6Ð#Ð# zÐ1Ð1Ý'¨¨g°zÐBVÈfÐBVÐBVÔ7WÑXÔX��U‘Ø˜JÐ&Ð&Ý!*¨4°¸*ÀYÔ:OÑ!PÔ!P��X‘ÝœX c§g¢gÐ.?ÐAUÑ&VÔ&VÕXZÔXbÑcÔcˆD�‰NØ.1¯gªgÐ6HÑ.IÔ.IÐad×ahÒahð  jDñ  bEô  bEð  U]÷  Uaò  Uað  bqñ  Urô  Urð   sð   sˆD�ÑØ�LŠL˜ÑÔÐÑñK%	ðL ð DÝÐBÑCÔCÐCð
 ˜ˆc€HÝ
Ð)Ð) 5Ð)Ñ)Ô)Ñ*Ô*¨aÒ/Ð/µCÐ7RÐ7RÈEÐ7RÑ7RÔ7RÑ4RÔ4RÐ/ÕWZð  [Qð  [QÐrwÐxyÔrzð  |Fô  sG÷  sNò  sNñ  sPô  sPð  [Qñ  [Qô  [Qñ  XQô  XQÐ/ð Mð  Mð  Mð  Mð  Mð  MÐotÐuvÔowð  yCô  pD÷  pJò  pJñ  pLô  pLð  Mñ  Mô  MˆØ'Ð' Ð'Ñ'Ô'ˆˆÝ	ÐSÐSÈUÐSÑSÔSÑ	SÔ	Sð )ð Kð  Kð  EJð  Kñ  Kô  KˆÝ•D—M’MÐ!EÐ!E¨VÐ!EÑ!EÔ!EÑEÔEÑFÔFˆÝ$Ð%iÐ%iÐ%iÐ%iÐ%iÐ%iÐdhÐ%iÑ%iÔ%iÕmoÔmtÐu~ð  ADõ  FHô  FNñ  nOô  nOð  mPñ  &Pñ  Qô  Q‰ˆˆuð/ð /ð /ð /ð /ð /Ý˜u fÑ-Ô-ð/ñ /ô /ˆà  %Ð(ˆØ‡|‚|�LÑ!Ô!Ð-°8¸LÔ3IÈ&Ô3QÐUXÒ3X×2]Ò2]Ñ2_Ô2_Ð-Ý!#Ô!5°h¸|Ô6LÈSÐRTÐSTÐRTÈWÔ6UÑ!VÔ!Vˆ�ÑØ€FØð ð ˆÝ”  X¤µ°T¸*Ô5EÑ1FÔ1FÈÐ0JÑKÔK×PÒPÑRÔRˆØ�tÐÐØ�!�!�!Ð-�d˜8”nÔ*¨1Ô-Ð-Ð-Ð.Ð.Ô.°$°x´.Ñ@Ð.Ð.Ñ.Ø�Š�eÑÔÐÐÝ
Ð
*Ð
* 6Ð
*Ñ
*Ô
*Ñ*Ô*ð ØˆåŒi˜˜ÐAÐA¸5ÐAÑAÔAÑAÑBÔB€GØdÐdÐdÐd€FÝ˜˜Ð >Ð >¸Ð >Ñ >Ô >ÅÄ
ÑKÔKÐSYÐSYð  [Kð  [KÕvyÐzð  BIñ  wJô  wJð  [Kñ  [Kô  [Kõ  MOô  MUñ  TVô  TVð  Wñ  Wô  W€DÝ
Ð
)Ð
) 5Ð
)Ñ
)Ô
)Ñ)Ô)ð IØ�vÐ;Ð;°UÐ;Ñ;Ô;½R¼ZÑHÔHˆŒØ
€Ø�6˜#�rœzÑ*Ô*ˆŒØ"Ÿ.š.Ñ*Ô*ð 	^ð 	^‰JˆC�Ý�D˜# u }˜t˜t½%Ô:JÈ5Ñ:QÔ:Q×:TÒ:TÐU[Ñ:\Ô:\Ñ]Ô]Ð]Ð]ØÑÝÐ/Ð/¨Ð/Ñ/Ô/Ñ/Ô/ˆÝÔ!¥"¤.ð  2Eð  2Eð  2Eð  2Eð  ~Dð  2Eñ  2Eô  2Eñ  #Fô  #F÷  #Mò  #Mõ  NPô  NXñ  #Yô  #Yñ  Zô  ZˆØ�AŠ:ˆ:�$  q q q¨! t¤°Ò 1×6Ò6Ñ8Ô8Ñ9Ô9ˆ:Ø˜A˜A˜A˜r ˜r˜E”]ˆFÝ”i¥°°q°q°q¸"¸1¸"°u´×0CÒ0CÀAÀqÑ0IÔ0IÑ!JÔ!JÈFÐSTÐSTÐSTÐVWÐVXÐVXÐSXÌMÐ ZÐ\]Ñ^Ô^×aÒaÐbhÑiÔiˆŒØ€Kr!   r3   ©r5   r“  c               ó<   — t          g t          | ¦  «        ¢|‘|‘R Ž S )a   Mesh from a GLB (path or bytes) or .gltf file (path; external buffers and images must lie in its folder).

    Every triangle primitive of the default scene is merged with its node transform applied. All textures are kept when
    the primitives share one material; with several materials, their base colour textures are packed into one atlas
    (uvs remapped) and their metallic-roughness / normal maps dropped. Base colour factors x COLOR_0 become sRGB vertex
    colours unless all white. Points and lines are ignored. Without `time`, morph targets and skins are ignored (rest
    pose); with `time` (seconds, see animation_timing), the first animation is sampled there: node translations,
    rotations and scales, morph target weights and linear blend skinning. Tensors are created on `device`.)r  rI  )r‹   r5   r“  s      r   Úglb_to_meshr     s*   € õ Ð?�.¨Ñ0Ô0Ð?°&Ð?¸$Ð?Ð?Ð?Ð?r!   rÿ   c                óÜ
  — t          | d¦  «        5 }|                     d¦  «        }|d d…         dk    r]t          ||                     t          j        d|d¦  «        d         ¦  «        z   ¦  «        d         }|                     ¦   «         dz   }n>t          j        ||                     ¦   «         z                        d	¦  «        ¦  «        d }}dx}}d
x}}t          j
        dt          j        ¦  «        t          j
        dt          j         ¦  «        }
}	|                     dg ¦  «        }t          |¦  «        D �]|\  }}}|d         |         d         D �]_}|                     dd¦  «        }|dvrŒ|d         }||d                  }d|v r||d                  d         n|d         }||d         z  }||dk    r|dz  nt          |dz
  d¦  «        z  }|d|v z  }|d|v z  }d|v rÍd|v rÉt          j        t          j        t#          |d         |d         ¦  «        ddiŽ¦  «                             dd¦  «        j        }||d d…d d…f         j        z  |d d…df         z   }t          j        |	|                     d¦  «        ¦  «        t          j        |
|                     d¦  «        ¦  «        }
}	�Œa�Œ~g }|                     dg ¦  «        D �]©}d|v r§|d         |d                  }|d          |d!                                       d"¦  «        €V|�T||                     d#d¦  «        z   }|                     t1          t3          ||||d$         z   ¦  «        ¦  «        ¦  «         Œ˜|                     d ¦  «         Œ®|                     d"d%¦  «                             d&¦  «        rE|                     t1          t7          t9          |d"         d ¦  «        ¦  «        ¦  «        ¦  «         �Œt          t;          | ¦  «        j        t?          |                     d"d%¦  «        ¦  «        z  d¦  «        5 }|                     t1          t3          |¦  «        ¦  «        ¦  «         d d d ¦  «         n# 1 swxY w Y   �Œ«	 d d d ¦  «         n# 1 swxY w Y   |d d…         dk    rd'nd(||tA          |                     d)g ¦  «        ¦  «        |t          j!        |	¦  «         "                    ¦   «         r(|	 #                    ¦   «         |
 #                    ¦   «         gnd ||tA          |                     d*g ¦  «        ¦  «        tI          |¦  «        dtJ          j&         '                    | ¦  «        d+œS ),Nr&  r  r$   r%  r  rJ   r   r  rF   Fr#   rb   r\   r²   r±   rÉ  r¯   rš   r°   rz   r"   rœ   r�   r|   r}   ÚindexingÚijr®   r^   rx   ra   rÙ   rl   r/  rm   rn   r„  r2  râ   r<   r]   r`   )Úformatr»   r³   r]   r_   ÚbboxÚhas_uvÚ
has_colorsr`   rù   ÚsplatsÚ	file_size)(r(  r)  r  rO   r  ÚtellrK   r  r  r~   rç  Úinfr  r�  r}   rr   Úmeshgridr  rÅ   rf  Úminimumr|   rZ  ro   r   r   r3  r   r=  r   rD  r   rN   Úisfiniter�  r…   r’  Úosrÿ   Úgetsize)rÿ   r*  r+  r<   Ú	bin_startr»   r³   r  r  ÚlowÚhighrb   Ú_noder  ra  rÊ   r±   r¯   Úpositionrz   Úcornersr_   r¿  rq   rK  Ú
image_files                             r   Ú_gltf_statsr/    s  € Ý	ˆd�DÑ	Ô	ð (I˜VØ�{Š{˜2‰ŒˆØ���Œ8�wÒÐÝ˜d V§[¢[µÔ1CÀDÈ$ÐPRÑ1SÔ1SÐTUÔ1VÑ%WÔ%WÑWÑXÔXÐYZÔ[ˆDØŸš™œ¨Ñ)ˆIˆIå"œj¨$°·²±´Ñ*>×)FÒ)FÀwÑ)OÔ)OÑPÔPÐRV�)ˆDØÐˆ�5Ø#Ð#ˆ�Ý”G˜A�rœvÑ&Ô&­¬°µB´F°7Ñ(;Ô(;ˆTˆØ—H’H˜[¨"Ñ-Ô-ˆ	Ý)8¸Ñ)>Ô)>ð 	bñ 	bÑ%ˆE�:˜vØ! (œ^¨JÔ7¸ÔEð bñ b�	Ø —}’} V¨QÑ/Ô/�Ø˜yÐ(Ð(ØØ& |Ô4�
Ø$ Z°
Ô%;Ô<�ØDMÐQZÐDZÐDZ˜	 )¨IÔ"6Ô7¸Ô@Ð@Ð`hÐipÔ`q�Ø˜H WÔ-Ñ-�Ø t¨q¢y y˜ !™˜µc¸%À!¹)ÀQÑ6GÔ6GÑG�Ø˜,¨*Ð4Ñ4�Ø˜i¨:Ð5Ñ5�
Ø˜HÐ$Ð$¨°(Ð):Ð):Ý œh¥r¤{µC¸À¼ÈÐRWÌÑ4YÔ4YÐ'iÐdhÐ'iÐ'iÑjÔj×rÒrÐstÐvxÑyÔyÔ{�GØ%¨¨r°¨r°2°A°2¨v¬Ô(8Ñ8¸6À"À1À"ÀaÀ%¼=ÑH�GÝ "¤
¨3°·²¸A±´Ñ ?Ô ?ÅÄÈDÐRY×R]ÒR]Ð^_ÑR`ÔR`ÑAaÔAa˜�Cùñbð ˆØ—X’X˜h¨Ñ+Ô+ð 	Iñ 	IˆEØ˜uÐ$Ð$Ø˜MÔ*¨5°Ô+>Ô?�Ø˜	”? 4¨¤>Ô2×6Ò6°uÑ=Ô=ÐEÈ)ÐJ_Ø%¨¯ª°¸qÑ(AÔ(AÑA�EØ—O’O¥J­{¸6À5È%ÐRVÐWcÔRdÑJdÑ/eÔ/eÑ$fÔ$fÑgÔgÐgÐgà—O’O DÑ)Ô)Ð)Ð)Ø—’˜5 "Ñ%Ô%×0Ò0°Ñ9Ô9ð IØ—’¥
­<½
À5ÈÄ<ÐQUÑ8VÔ8VÑ+WÔ+WÑ XÔ XÑYÔYÐYÑYå�$˜t™*œ*Ô+­g°e·i²iÀÀrÑ6JÔ6JÑ.KÔ.KÑKÈTÑRÔRð IÐV`Ø—O’O¥J­{¸:Ñ/FÔ/FÑ$GÔ$GÑHÔHÐHðIð Ið Iñ Iô Ið Ið Ið Ið Ið Ið Iøøøð Ið Ið Ið Iùð	Ið9(Ið (Ið (Iñ (Iô (Ið (Ið (Ið (Ið (Ið (Ið (Iøøøð (Ið (Ið (Ið (IðR  $ B Q Bœx¨7Ò2Ð2�e�e¸ÈHÐ_dÕsvÐw{×wÒwð  ALð  NPñ  xQô  xQñ  tRô  tRØ Í2Ì;ÐWZÑK[ÔK[×K_ÒK_ÑKaÔKaÐ*k¨3¯:ª:©<¬<¸¿º¹¼Ð*GÐ*GÐgkØ¨JÅcÈ$Ï(Ê(ÐS_ÐacÑJdÔJdÑFeÔFeõ  uEð  FJñ  uKô  uKð  WXÝœŸš¨Ñ.Ô.ð0ð 0ð 0s6   ‘P#R
Ð40Q0Ñ$R
Ñ0Q4Ñ4R
Ñ7Q4Ñ8R
Ò
RÒR©ú.glbú.gltfz.objz.plyz.stl)râ   ÚobjÚstlÚplyc               ó  — ddl m} t          t          |j        |j        |j        dœ}t          | ¦  «        j                             ¦   «         }||vrt          d| ›�¦  «        ‚|dv rt          | ||¬¦  «        n ||         | |¬¦  «        S )z»Mesh from a .glb, .gltf, .obj (+ .mtl and textures), .ply or .stl file, with tensors on `device`; `time` poses an
    animated glTF (see glb_to_mesh), the other formats have no animation.r   ©Úformatsr0  úUnsupported mesh file )r1  r2  r  r4   )
r„  r8  r  Úread_objÚread_plyÚread_stlr   ÚsuffixÚlowerr´   )rÿ   r5   r“  r8  Úreadersr=  s         r   Ú	load_meshr@  B  s¸   € ð ÐÐÐÐÐÝ"­[À'ÔBRÐ\cÔ\lÐv}ô  wGð  Hð  H€GÝ�$‰ZŒZÔ×$Ò$Ñ&Ô&€FØ�WÐÐÝÐ:°$Ð:Ð:Ñ;Ô;Ð;Ø:@ÐDUÐ:UÐ:U�;�t F°Ð6Ñ6Ô6Ð6Ð[jÐ[bÐciÔ[jÐkoÐx~Ð[Ñ[Ô[Ðr!   c                ó  — ddl m} t          | ¦  «        j                             ¦   «         }t
          t
          |j        |j        |j        dœ}||vrt          d| ›�¦  «        ‚ ||         t          | ¦  «        ¦  «        S )aÓ  Quick statistics without decoding textures: format, vertices, faces (triangles), materials, textures [(w, h) or
    None], bbox [[x, y, z] min, max] or None, has_uv, has_colors, animations (glTF animations), animation (timing of the
    first one, see animation_timing; glTF only), splats (Gaussians of a
    3DGS splat PLY, else 0), file_size (bytes of the file itself).

    GLB/glTF: counts per mesh instance from the accessors, bbox from the POSITION min/max under the node transforms,
    texture sizes from the image headers. OBJ: positions ("v" lines) and triangles after fan triangulation. PLY: header
    counts (polygons count as faces) and the bbox of the vertex positions. STL: triangles and distinct positions.r   r7  r0  r9  )r„  r8  r   r=  r>  r/  Ú	obj_statsÚ	ply_statsÚ	stl_statsr´   rY   )rÿ   r8  r=  Ústatss       r   Úmesh_file_statsrF  M  s”   € ð ÐÐÐÐÐÝ�$‰ZŒZÔ×$Ò$Ñ&Ô&€FÝ ­;ÀÔ@QÐ[bÔ[lÐv}ô  wHð  Ið  I€EØ�UÐÐÝÐ:°$Ð:Ð:Ñ;Ô;Ð;Øˆ5�Œ=�˜T™œÑ#Ô#Ð#r!   FrŸ   )r‘   Úz_uprc  rX   rŽ   r‘   rG  rc  údict[str, bytes]c               ó’  — |t           vrt          d|›�¦  «        ‚|r|dk    rt          d¦  «        ‚|s|dk    rG|rd„ nd„ }|                       || j        ¦  «        |z  | j        €dn || j        ¦  «        ¬¦  «        } |dk    r|› d	�t          | |¬
¦  «        iS ddlm}  |j        |j	        |j
        dœ|         | |¦  «        S )aš  Files of a mesh export, as {file name: bytes}:
    - "glb": {name.glb} (always Y-up);
    - "obj": {name.obj, name.mtl, name_basecolor.png, name_roughness.png, name_metallic.png, name_normal.png} (textures
      present only; v = 1 - glTF v; welded positions/uvs/normals with separate indices);
    - "stl": {name.stl} binary STL (geometry only);
    - "ply": {name.ply} binary little-endian PLY with vertex normals, uvs (s, t) and colours (vertex colours, or the base
      colour texture sampled at the vertices).
    z_up rotates Y-up to Z-up (front -Y, Blender/printing convention) for obj/stl/ply; scale multiplies the positions
    (e.g. 1000 for millimetres).zUnsupported export format râ   zglTF is always Y-uprŸ   c                óp   — t          j        | d d …df         | d d …df          | d d …df         gd¦  «        S )Nr   r"   r   )rÀ   r}  ©rÞ  s    r   rô  zexport_mesh.<locals>.<lambda>m  s?   € �EœK¨¨1¨1¨1¨a¨4¬°1°Q°Q°Q¸°T´7°(¸A¸a¸a¸aÀ¸d¼GÐ(DÀaÑHÔH€ r!   c                ó   — | S r•   r–   rK  s    r   rô  zexport_mesh.<locals>.<lambda>m  s   € Ðbc€ r!   N)r»   rº   r1  )rX   r   r7  )r3  r4  r5  )ÚEXPORT_FORMATSr´   r  r»   rº   ré   r„  r8  Ú	write_objÚ	write_stlÚ	write_ply)r�   rŽ   r‘   rG  rc  rX   Úrotater8  s           r   Úexport_meshrR  ^  s(  € ð •.Ð Ð ÝÐ=°cÐ=Ð=Ñ>Ô>Ð>Øð 0��u’�ÝÐ.Ñ/Ô/Ð/Øð Dˆu˜Š|ˆ|ØMQÐdÐHÐHÐHÐXcÐXcˆØ�|Š| V V¨D¬MÑ%:Ô%:¸UÑ%BÐTXÔT`ÐThÈDÈDÐntÐntÐuyô  vBñ  oCô  oCˆ|ñ  Dô  DˆØ
ˆe‚|€|Ø����{¨4¸lÐKÑKÔKÐLÐLØÐÐÐÐÐØ^�7Ô$¨WÔ->ÀwÔGXÐYÐYÐZ]Ô^Ð_cÐeiÑjÔjÐjr!   )r.   r/   r0   r1   )r<   r=   r>   r?   r0   r?   )r�   r   rX   rY   rÍ   rÎ   r0   r?   r•   )
rc   rê   rë   rì   rX   rY   rÍ   rÎ   r0   r?   )r�   r   ró   r/   rô   r¿   rº   rt   rX   rY   rÍ   rÎ   r0   r?   )r0   r	  )rg   r?   rÍ   r=   r  rt   r0   r?   )r0   r=   )r/  rY   r  r0  r0   r?   )r0   r>  )r<   r=   rÙ   rÚ   rŒ   rj   )r<   r=   rÙ   rÚ   rŒ   rj   r0   r1   )rþ   r=   r_  rÎ   r0   r1   )r<   r=   rl  rÎ   r0   rm  )r<   r=   rl  rÎ   )r   )r<   r=   rù   rj   r0   rÎ   )r<   r=   rÙ   rÚ   rŠ   r=   r“  r¿   rb  rt   r0   r1   )
r<   r=   rÙ   rÚ   r“  r¿   rù   rj   r0   r¥  )r«  r1   r¬  r1   rø   r1   rx  r1   r­  rt   r0   r1   )r°   r1   r±   rj   r0   r1   )r<   r=   rÙ   rÚ   r  r0  rº  rÎ   r   rj   r0   r»  )
r<   r=   rÙ   rÚ   r  r0  r“  rÁ  r0   r   )r“  rÁ  r0   r   )rÿ   rY   r0   r=   )r�   r   rŽ   rY   r‘   rY   rG  rt   rc  r¿   rX   rY   r0   rH  )Oræ   Ú
__future__r   r6  rK   rœ  r&  rO   Úpathlibr   Úurllib.parser   r9   r~   rÀ   r^   r   r   r	   r
   r   r   r   r   r   r�   r   r   r   r   rR   rQ   rÞ   r½   rÆ   r   Úint8r�   Úint16rÃ   rÄ   r¼   r�   rÜ   rU  rT  r[  rE  r;   rU   rW   ré   rò   r  r  r#  r,  r.  r=  rI  rL  r^  rk  r~  r�  r’  r¤  rª  r´  r¹  rÀ  r  r  r/  ÚMESH_EXTENSIONSrM  r@  rF  rR  r–   r!   r   ú<module>rY     sÂ  ððð ð #Ð "Ð "Ð "Ð "Ð "à €€€Ø €€€Ø €€€Ø 	€	€	€	Ø €€€Ø Ð Ð Ð Ð Ð Ø  Ð  Ð  Ð  Ð  Ð  à Ð Ð Ð Ø €€€ð Ið  Ið  Ið  Ið  Ið  Ið  Ið  Ið  Ið  Ið  Ið  Ið  Ið  Ið  Ið  Ið  Ið  Ið  Ið  Ið  Ið  IØ FÐ FÐ FÐ FÐ FÐ FÐ FÐ FÐ FÐ FÐ FÐ Fà#EÑ  €	ˆ:�yØ%1Ñ "€Ð"Ø�2”8˜BœGÑ$Ô$ d¨H¨B¬H°R´XÑ,>Ô,>ÀÀhÀbÄhÈrÌxÑFXÔFXÐZ^Ð`hÐ`bÔ`hÐikÔirÑ`sÔ`sÐuyð  |DÐ{}ô  |Dð  EGô  ENñ  |Oô  |Oð  QUð  W_ð  WYô  W_ð  `bô  `jñ  Wkô  Wkð  mqð  r€Ø	SÐ	S¸?×;PÒ;PÑ;RÔ;RÐ	SÑ	SÔ	S€Ø 1¨a¸ÀBÐGÐG€
Ø %¨w¸gÐFÐF€ØhÐhÐhÐ ðNð Nð Nð NðDð Dð Dð DðPTð PTð PTð PTð PTñ PTô PTð PTðf 49ÐPTð ð ð ð ð ð ðÐ\aÐy}ð ð ð ð ð ð ð bfð  |AØ/3ðð ð ð ð ð ð:*ð *ð *ð *ð( BFð Wð Wð Wð Wð Wð WðXð Xð Xð Xð6ð 6ð 6ð 6ð	ð 	ð 	ð 	ð	ð 	ð 	ð 	ðQð Qð Qð Qð/ð /ð /ð /ð,ð ð ð ð ðð ð ð ð ð"6ð 6ð 6ð 6ð 6ðHð Hð Hð Hð Hð"Wð Wð Wð Wð4	ð 	ð 	ð 	ð 	ðð ð ð ðgð gð gð gð	<ð 	<ð 	<ð 	<ð`ð `ð `ð `ð `ðF #(¸dð 	@ð 	@ð 	@ð 	@ð 	@ð 	@ð-0ð -0ð -0ð -0ðb <€Ø-€ð $¸$ð @ð @ð @ð @ð @ð @ð$ð $ð $ð $ð" 6<È%Ð`cÐy~ð kð kð kð kð kð kð kð kr!   