� ,�Renb� ��dZddlZddlZddlZddlZddlmZddlmZddlmZddl m Z m Z m Z m Z mZmZmZmZmZmZmZddlmZmZddlmZmZdd lmZmZdd lmZdd l m!Z!d d l"m#Z#e r ddl$m%Z%ddl&m'Z'ee(ej)fZ*e dede ffZ+ e de+fZ,eded���Z- d4de*de.fd�Z/ddde*ddfd�Z0 d5ddde*dee*de1dedf d�Z2d e-d!e(fd"�Z3d#edde.fd$�Z4 d6d%dd&e,ded'fd(�Z5d)e(d*e(d+e6fd,�Z7Gd-�d.ee-��Z8Gd/�d0e8d1��Z9Gd2�d3e8d��Z:dS)7ze Load setuptools configuration from ``setup.cfg`` files. **API will be made private in the future** �N)� defaultdict)�partial��wraps) � TYPE_CHECKING�Callable�Any�Dict�Generic�Iterable�List�Optional�Tuple�TypeVar�Union)�DistutilsOptionError�DistutilsFileError)� Requirement�InvalidRequirement)�Version�InvalidVersion)� SpecifierSet)�SetuptoolsDeprecationWarning�)�expand�� Distribution)�DistributionMetadata�str�Target)rr)�boundF�filepath�returnc��ddlm}|��}|r|���ng}t||||��}t |��S)a,Read given configuration file and returns options from it as a dict. :param str|unicode filepath: Path to configuration file to get options from. :param bool find_others: Whether to search for other configuration files which could be on in various places. :param bool ignore_option_errors: Whether to silently ignore options, values of which could not be resolved (e.g. due to exceptions in directives such as file:, attr:, etc.). If False exceptions are propagated as expected. :rtype: dict rr)�setuptools.distr�find_config_files�_apply�configuration_to_dict)r"� find_others�ignore_option_errorsr�dist� filenames�handlerss ��/builddir/build/BUILDROOT/alt-python311-setuptools-65.6.3-2.el8.x86_64/opt/alt/python311/lib/python3.11/site-packages/setuptools/config/setupcfg.py�read_configurationr/(s^��(-�,�,�,�,�,� �<�>�>�D�,7�?��&�&�(�(�(�R�I��d�H�i�1E�F�F�H� �� *� *�*�r+rc�N�t||��|���|S)z`Apply the configuration from a ``setup.cfg`` file into an existing distribution object. )r'�_finalize_requires)r+r"s r.�apply_configurationr3Ds+�� �4����������� �Kr0�� other_filesr*)� ConfigHandler.c�(�ddlm}tj�|��}tj�|��st d|z���tj��}tjtj� |����g|�|�} |� ||���t||j |���}|� ��tj|��n#tj|��wxYw|S)zHRead configuration from ``filepath`` and applies to the ``dist`` object.r)� _Distributionz%Configuration file %s does not exist.)r,)r*)r%r8�os�path�abspath�isfiler�getcwd�chdir�dirname�parse_config_files�parse_configuration�command_options�_finalize_license_files)r+r"r5r*r8�current_directoryr,r-s r.r'r'Ms�� .�-�-�-�-�-��w���x�(�(�H� �7�>�>�(� #� #�U� �!H�8�!S�T�T�T�� � � ���H�R�W�_�_�X� &� &�'�'�'�(�+�(�x�(�I�$��(�(���(�C�C�C�&� �$�&�=Q� � � �� �$�$�&�&�&� ��"�#�#�#�#����"�#�#�#�#���� �Os �"AC9�9D� target_obj�keyc��djdit����}tjt||��}t |||��}|��S)z� Given a target object and option key, get that option from the target object, either through a get_{key} method or from an attribute directly. z get_{key}r4)�format�locals� functoolsr�getattr)rErF� getter_name� by_attribute�getters r.� _get_optionrOjsP�� %�+�$�0�0�v�x�x�0�0�K��$�W�j�#�>�>�L� �Z��l� ;� ;�F� �6�8�8�Or0r-c��tt��}|D]1}|jD]'}t|j|��}|||j|<�(�2|S)z�Returns configuration data gathered by given handlers as a dict. :param list[ConfigHandler] handlers: Handlers list, usually from parse_configuration() :rtype: dict )r�dict� set_optionsrOrE�section_prefix)r-� config_dict�handler�option�values r.r(r(vsk��$�D�)�)�K��@�@���)� @� @�F��� 2�F�;�;�E�:?�K��.� /�� 7� 7� @� �r0� distributionrB)�ConfigMetadataHandler�ConfigOptionsHandlerc �B�tj|��5}t||||��}|���|js |j|_t |j||||j|j��}|���ddd��n #1swxYwY||fS)a�Performs additional parsing of configuration options for a distribution. Returns a list of used option handlers. :param Distribution distribution: :param dict command_options: :param bool ignore_option_errors: Whether to silently ignore options, values of which could not be resolved (e.g. due to exceptions in directives such as file:, attr:, etc.). If False exceptions are propagated as expected. :rtype: list N)r�EnsurePackagesDiscoveredrZ�parse� package_dirrY�metadata�src_root)rXrBr*�ensure_discovered�options�metas r.rArA�s���$ � (�� 6� 6��:K�&� � � � �  � �� � � �����'� ;�'.�':�L� $�$� � !� � � � � $� � !�  � �� � � � � � �)������������������, ��=�s�A1B�B�B�label� orig_value�parsedc�D�d|vst|��dkrdStjt��5d�|��}t |��}|j�)d|�d|d�d�}tj|t��ddd��dS#1swxYwYdS) amBecause users sometimes misinterpret this configuration: [options.extras_require] foo = bar;python_version<"4" It looks like one requirement with an environment marker but because there is no newline, it's parsed as two requirements with a semicolon as separator. Therefore, if: * input string does not contain a newline AND * parsed result contains two requirements AND * parsing of the two parts from the result (";") leads in a valid Requirement with a valid marker a UserWarning is shown to inform the user about the possible problem. � �N�;z#One of the parsed requirements in `z*` looks like a valid environment marker: 'rz}' Make sure that the config is correct and check https://setuptools.pypa.io/en/latest/userguide/declarative_config.html#opt-2) �len� contextlib�suppressr�joinr�marker�warnings�warn� UserWarning)rdrerf�original_requirements_str�req�msgs r.�%_warn_accidental_env_marker_misconfigrv�s��" �z���S��[�[�A�-�-��� � �/� 0� 0� ,� ,�$'�H�H�V�$4�$4�!��3�4�4�� �:� !�_�e�_�_�;A�!�9�_�_�_� � �M�#�{� +� +� +� ,� ,� ,� ,� ,� ,� ,� ,� ,� ,� ,� ,���� ,� ,� ,� ,� ,� ,s�AB�B�Bc�R�eZdZUdZeed< iZeeefed< dede de j fd�Z e d���Zd �Zedd ���Zed ���Zed ���Zed���Zedefd���Zdefd�Zed���Zed���Zedd���Zd�Zd�Zd�ZdS)r6z1Handles metadata supplied in configuration files.rS�aliasesrErbrac��i}|j}|���D]I\}}|�|��s�|�|d���d��}|||<�J||_||_||_g|_||_ dS)N��.) rS�items� startswith�replace�stripr*rE�sectionsrRra) �selfrErbr*rar�rS� section_name�section_optionss r.�__init__zConfigHandler.__init__�s���')���,��-4�]�]�_�_� 5� 5� )�L�/��*�*�>�:�:� ��'�/�/���C�C�I�I�#�N�N�L�%4�H�\� "� "�$8��!�$��� �� �&(���!2����r0c�:�td|jjz���)�.Metadata item name to parser function mapping.z!%s must provide .parsers property)�NotImplementedError� __class__�__name__)r�s r.�parserszConfigHandler.parsers�s#��"� /�$�.�2I� I� � � r0c���t��}|j}|j�||��}t |||��}||urt |���|rdSd}|j�|��}|r' ||��}n#t$r d}|js�YnwxYw|rdSt |d|zd��}|�t|||��n ||��|j � |��dS)NFTzset_%s) �tuplerErx�getrK�KeyErrorr�� Exceptionr*�setattrrR�append) r�� option_namerW�unknownrE� current_value� skip_option�parser�setters r.� __setitem__zConfigHandler.__setitem__s9���'�'���_� ��l�&�&�{�K�@�@� �� �K��A�A� � �G� #� #��;�'�'� '� � � �F�� ���!�!�+�.�.�� � � ���u� � ����� � � �"� ��0����� ���� � � �F���X� �%;�T�B�B�� �>� �J� �U� 3� 3� 3� 3� �F�5�M�M�M� ���� �,�,�,�,�,s�8 B�B�B�,c��t|t��r|Sd|vr|���}n|�|��}d�|D��S)z�Represents value as a list. Value is split either by separator (defaults to comma) or by lines. :param value: :param separator: List items separator character. :rtype: list rhc�^�g|]*}|����|�����+Sr4�r)�.0�chunks r.� z-ConfigHandler._parse_list..:s-��B�B�B�%�E�K�K�M�M�B�� � � � �B�B�Br0)� isinstance�list� splitlines�split)�clsrW� separators r.� _parse_listzConfigHandler._parse_list(s\�� �e�T� "� "� ��L� �5�=�=��$�$�&�&�E�E��K�K� �*�*�E�B�B�5�B�B�B�Br0c���d}i}|�|��D]\}|�|��\}}}||krtd|z���|���||���<�]|S)zPRepresents value as a dict. :param value: :rtype: dict �=z(Unable to parse option value to dict: %s)r�� partitionrr)r�rWr��result�linerF�sep�vals r.� _parse_dictzConfigHandler._parse_dict<s���� ����O�O�E�*�*� .� .�D� �N�N�9�5�5�M�C��c��i���*�>��F����#&�)�)�+�+�F�3�9�9�;�;� � �� r0c�2�|���}|dvS)zQRepresents value as boolean. :param value: :rtype: bool )�1�true�yes)�lower�r�rWs r.� _parse_boolzConfigHandler._parse_boolOs��� � � � ���,�,�,r0c����fd�}|S)z�Returns a parser function to make sure field inputs are not files. Parses a value after getting the key so error messages are more informative. :param key: :rtype: callable c�z��d}|�|��r"td�������|S)N�file:zCOnly strings are accepted for the {0} field, files are not accepted)r}� ValueErrorrH)rW�exclude_directiverFs �r.r�z3ConfigHandler._exclude_files_parser..parseresI��� '� ���� 1�2�2� � �-�-3�V�C�[�[�����Lr0r4)r�rFr�s ` r.�_exclude_files_parserz#ConfigHandler._exclude_files_parserYs#��� � � � � �� r0�root_dirc���d}t|t��s|S|�|��s|S|t|��d�}d�|�d��D��}t j||��S)aORepresents value as a string, allowing including text from nearest files using `file:` directive. Directive is sandboxed and won't reach anything outside directory with setup.py. Examples: file: README.rst, CHANGELOG.md, src/file.txt :param str value: :rtype: str r�Nc3�>K�|]}|���V��dS�Nr�)r�r:s r.� z,ConfigHandler._parse_file..�s*����>�>�d�T�Z�Z�\�\�>�>�>�>�>�>r0r�)r�rr}rkr�r� read_files)r�rWr��include_directive�spec� filepathss r.� _parse_filezConfigHandler._parse_fileps���$���%��%�%� ��L���� 1�2�2� ��L��S�*�+�+�-�-�.��>�>�d�j�j��o�o�>�>�>� �� ��H�5�5�5r0c���d}|�|��s|S|�|d��}|�|jj��t j|||��S)z�Represents value as a module attribute. Examples: attr: package.attr attr: package.module.attr :param str value: :rtype: str zattr:rz)r}r~�updaterar^r� read_attr)r�rWr^r��attr_directive� attr_descs r.� _parse_attrzConfigHandler._parse_attr�sh��!������/�/� ��L��M�M�.�"�5�5� � ���4�1�=�>�>�>��� �;��A�A�Ar0c����fd�}|S)z�Returns parser function to represents value as a list. Parses a value applying given methods one after another. :param parse_methods: :rtype: callable c�,��|}�D] }||��}�|Sr�r4)rWrf�method� parse_methodss �r.r]z1ConfigHandler._get_parser_compound..parse�s+����F�'� (� (����������Mr0r4)r�r�r]s ` r.�_get_parser_compoundz"ConfigHandler._get_parser_compound�s#��� � � � � �� r0c�b�i}|���D]\}\}}|||��||<�|S)aParses section options into a dictionary. Applies a given parser to each option in a section. :param dict section_options: :param callable values_parser: function with 2 args corresponding to key, value :rtype: dict )r|)r�r�� values_parserrWrF�_r�s r.�_parse_section_to_dict_with_keyz-ConfigHandler._parse_section_to_dict_with_key�sH����,�2�2�4�4� 1� 1�M�C��!�S�&��s�C�0�0�E�#�J�J�� r0Nc�D���r�fd�nd�}|�||��S)aParses section options into a dictionary. Optionally applies a given parser to each value. :param dict section_options: :param callable values_parser: function with 1 arg corresponding to option value :rtype: dict c����|��Sr�r4)r��vr�s �r.�z6ConfigHandler._parse_section_to_dict..�s���}�}�Q�/�/�r0c��|Sr�r4)r�r�s r.r�z6ConfigHandler._parse_section_to_dict..�s��UV�r0�r�)r�r�r�r�s ` r.�_parse_section_to_dictz$ConfigHandler._parse_section_to_dict�s7���5B�W�/�/�/�/�/�����2�2�?�F�K�K�Kr0c��|���D]>\}\}}tjt��5|||<ddd��n #1swxYwY�?dS)zQParses configuration file section. :param dict section_options: N)r|rlrmr�)r�r��namer�rWs r.� parse_sectionzConfigHandler.parse_section�s��� #2�"7�"7�"9�"9� #� #� �T�:�A�u��$�X�.�.� #� #�"��T� � #� #� #� #� #� #� #� #� #� #� #���� #� #� #� #�� #� #s�A�A �A c���|j���D]^\}}d}|rd|z}t|d|z�dd��d��}|�t d|j�d|�d����||���_dS) zTParses configuration file items from one or more related sections. rzz_%szparse_section%sr{�__Nz*Unsupported distribution option section: [�])r�r|rKr~rrS)r�r�r��method_postfix�section_parser_methods r.r]zConfigHandler.parse�s��� .2�]�-@�-@�-B�-B� 3� 3� )�L�/��N�� 6�!&��!5��8?��"�^�3�<�<�S�$�G�G�� 9�9� !�%�,�*�*��*�*�*�L�L�L�:���� "� !�/� 2� 2� 2� 2�' 3� 3r0c�D����t������fd���}|S)z�this function will wrap around parameters that are deprecated :param msg: deprecation message :param warning_class: class of warning exception to be raised :param func: function to be wrapped around c�>��tj�����|i|��Sr�)rprq)�args�kwargs�funcru� warning_classs ���r.�config_handlerz@ConfigHandler._deprecated_config_handler..config_handler�s*��� �M�#�}� -� -� -��4��(��(�(� (r0r)r�r�rur�r�s ``` r.�_deprecated_config_handlerz(ConfigHandler._deprecated_config_handler�sB����� �t��� )� )� )� )� )� )� �� )��r0)r�r�)r�� __module__� __qualname__�__doc__r�__annotations__rxr r �AllCommandOptionsrr\r��propertyr�r�� classmethodr�r�r�r��_Pathr�r�r�r�r�r�r]r�r4r0r.r6r6�s��������;�;������ !�G�T�#�s�(�^� � � �� 3��3�#�3� "�:� 3�3�3�3�.� � ��X� � $-�$-�$-�L�C�C�C��[�C�&����[��$�-�-��[�-�����[��,�6�%�6�6�6��[�6�2B��B�B�B�B�(����[��&� � ��[� �� L� L� L��[� L�#�#�#�3�3�3�4 � � � � r0r6c ���eZdZdZddddd�ZdZ dejfd d d ed e d e j de e def �fd� Zed���Zd�Z�xZS)rYr_�url� description� classifiers� platforms)� home_page�summary� classifier�platformFNrErrbr*rar^r�c�l��t���||||��||_||_dSr�)�superr�r^r�)r�rErbr*rar^r�r�s �r.r�zConfigMetadataHandler.__init__s8��� ������W�.B�DU�V�V�V�&��� �� � � r0c�@�|j}t|j|j���}|j}|j}||||�|dt��||�||��|d��|�|d��dt��||||j |d� S)r��r�z[The requires parameter is deprecated, please use install_requires for runtime dependencies.�license� license_filezDThe license_file parameter is deprecated, use license_files instead.) r��keywords�provides�requires� obsoletesr�rr� license_filesr��long_description�version� project_urls) r�rr�r�r�r�r�rr��_parse_version)r�� parse_list� parse_file� parse_dict�exclude_files_parsers r.r�zConfigMetadataHandler.parsers s����%� ��T�-�� �F�F�F� ��%� �#�9��$�"�"��7�7��=�,� �� $��4�4�Z��L�L�+�+�I�6�6� �;�;�$�$�^�4�4�-�,� �� (�%� *��*�&�/ � � r0c �d�|�||j��}||kr]|���} t|��n6#t$r)d}t |jdit�������wxYw|Stj |� ||j |j����S)zSParses `version` option value. :param value: :rtype: str zCVersion loaded from {value} does not comply with PEP 440: {version}r4) r�r�rrrrrHrIrr r�r^)r�rWr �tmpls r.r z$ConfigMetadataHandler._parse_versionBs����"�"�5�$�-�8�8�� �e� � ��m�m�o�o�G� D��� � � � ��!� D� D� D�5��+�;�4�;�+B�+B����+B�+B�C�C�C�  D�����N��~�d�.�.�u�d�6F�� �V�V�W�W�Ws �A�3A:)r�r�r�rSrx� strict_moder9�curdirr��boolrr\rrQr�r�r�r�r � __classcell__�r�s@r.rYrYs���������N�� �#�� ��G��K��'+��)� !� !�*� !�#� !�#� !� "�:� !� �d�^� !�� !� !� !� !� !� !�� � ��X� �BX�X�X�X�X�X�Xr0rYrc���eZdZdZdddededejf�fd� Ze d���Z d�Z d e d e fd �Z ed ���Zd �Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Z�xZS)rZrbrErr*rac�v��t���||||��|j|_i|_dSr�)r�r�r`r�r^)r�rErbr*rar�s �r.r�zConfigOptionsHandler.__init__as=��� ������W�.B�DU�V�V�V�"�+�� �+-����r0c�0�|�|d���S)Nrj)r�)r�r�s r.�_parse_list_semicolonz*ConfigOptionsHandler._parse_list_semicolonls�����u���4�4�4r0c�:�|�||j���S)Nr)r�r�)r�rWs r.�_parse_file_in_rootz(ConfigOptionsHandler._parse_file_in_rootps������� ��>�>�>r0rdrWc��|�|�|����}t|||��d�|D��S)Nc�<�g|]}|�d���|��S)�#)r})r�r�s r.r�zAConfigOptionsHandler._parse_requirements_list..ys)��D�D�D��t���s�/C�/C�D��D�D�Dr0)rrrv)r�rdrWrfs r.�_parse_requirements_listz-ConfigOptionsHandler._parse_requirements_listssL���+�+�D�,D�,D�U�,K�,K�L�L��-�e�U�F�C�C�C�E�D��D�D�D�Dr0c���|j}|j}|j}|j}|||||||�|dt ��t |jd��|j|j|j |j |t|d�S)r�zeThe namespace_packages parameter is deprecated, consider using implicit namespaces instead (PEP 420).�install_requires)�zip_safe�include_package_datar^�scripts�eager_resources�dependency_links�namespace_packagesr"�setup_requires� tests_require�packages� entry_points� py_modules�python_requires�cmdclass) r�r�r��_parse_cmdclassr�rrr r�_parse_packagesrr)r�r � parse_boolr�parse_cmdclasss r.r�zConfigOptionsHandler.parsers{s����%� ��%� ��%� ��-��#�$.�%�!�)� *�"&�"A�"A��H�,� #�#� !(��-�/A�!�!�#�8�!�7��,� �4�$�+�&�- � � r0c�v�|jj}tj|�|��||j��Sr�)rar^rr/r�r�)r�rWr^s r.r0z$ConfigOptionsHandler._parse_cmdclass�s1���,�8� ���t�/�/��6�6� �T�]�S�S�Sr0c�:�ddg}|���}||vr|�|��S|�|j�di����}|�||dk|j|j���tj di|��S)zTParses `packages` option value. :param value: :rtype: list zfind:zfind_namespace:z packages.findr)� namespacesr��fill_package_dirr4) rr��parse_section_packages__findr�r�r�r�r^r� find_packages)r�rW�find_directives� trimmed_value� find_kwargss r.r1z$ConfigOptionsHandler._parse_packages�s��� #�$5�6��� � � � � � �� /� /��#�#�E�*�*� *��7�7� �M� � �o�r� 2� 2� � � � ���%���);�;��]�!�-� � � � � �#�2�2�k�2�2�2r0c����|�||j��}gd��t�fd�|���D����}|�d��}|� |d|d<|S)z�Parses `packages.find` configuration file section. To be used in conjunction with _parse_packages(). :param dict section_options: )�where�include�excludec�*��g|]\}}|�v� |� ||f��Sr4r4)r��kr�� valid_keyss �r.r�zEConfigOptionsHandler.parse_section_packages__find..�s*��� N� N� N���1��Z���A��a��V���r0r>Nr)r�r�rQr|r�)r�r�� section_datar<r>rCs @r.r8z1ConfigOptionsHandler.parse_section_packages__find�s�����2�2�?�D�DT�U�U� �4�4�4� �� N� N� N� N� � 2� 2� 4� 4� N� N� N� � � �����(�(�� � �#(��8�K�� ��r0c�F�|�||j��}||d<dS)z`Parses `entry_points` configuration file section. :param dict section_options: r,N)r�r��r�r�rfs r.�parse_section_entry_pointsz/ConfigOptionsHandler.parse_section_entry_points�s,�� �,�,�_�d�>N�O�O��%��^���r0c�`�|�||j��}tj|��Sr�)r�r�r�canonic_package_data)r�r�� package_datas r.�_parse_package_dataz(ConfigOptionsHandler._parse_package_data�s+���2�2�?�D�DT�U�U� ��*�<�8�8�8r0c�6�|�|��|d<dS)z`Parses `package_data` configuration file section. :param dict section_options: rJN�rK�r�r�s r.�parse_section_package_dataz/ConfigOptionsHandler.parse_section_package_data�s"�� $�7�7��H�H��^���r0c�6�|�|��|d<dS)zhParses `exclude_package_data` configuration file section. :param dict section_options: �exclude_package_dataNrMrNs r.�"parse_section_exclude_package_dataz7ConfigOptionsHandler.parse_section_exclude_package_data�s#�� (,�'?�'?��'P�'P�� #�$�$�$r0c�D����|�fd���}|�d<dS)zbParses `extras_require` configuration file section. :param dict section_options: c�8����d|�d�|��S)Nzextras_require[r�)r )rBr�r�s �r.r�zCConfigOptionsHandler.parse_section_extras_require..�s#����6�6�7M��7M�7M�7M�q�Q�Q�r0�extras_requireNr�rFs` r.�parse_section_extras_requirez1ConfigOptionsHandler.parse_section_extras_require�s<��� �5�5� � Q� Q� Q� Q� � �� "(�� ���r0c�v�|�||j��}tj||j��|d<dS)z^Parses `data_files` configuration file section. :param dict section_options: � data_filesN)r�r�r�canonic_data_filesr�rFs r.�parse_section_data_filesz-ConfigOptionsHandler.parse_section_data_files�s;�� �,�,�_�d�>N�O�O��#�6�v�t�}�M�M��\���r0)r�r�r�rSr�rrr\r�r�rrrr r�r�r0r1r8rGrKrOrRrVrZrrs@r.rZrZ]sp��������N� .�"� .�#� .�#� .� "�:� .� .� .� .� .� .��5�5��[�5�?�?�?�E�c�E�#�E�E�E�E�� � ��X� �@T�T�T�3�3�3�2���*&�&�&�9�9�9�I�I�I�Q�Q�Q� (� (� (�N�N�N�N�N�N�Nr0rZ)FF)r4F)F);r�r9rlrJrp� collectionsrrr�typingrrr r r r r rrrr�distutils.errorsrr�(setuptools.extern.packaging.requirementsrr�#setuptools.extern.packaging.versionrr�&setuptools.extern.packaging.specifiersr�setuptools._deprecation_warningrrzrr%r�distutils.distrr�PathLiker��SingleCommandOptionsr�r rQr/r3rr'rOr(rAr�rvr6rYrZr4r0r.�res'����  � � � �������������#�#�#�#�#�#�������������5�5�5�5�5�5�5�5�5�5�5�5�5�5�5�5�5�5�5�5�5�5�5�5�5�5�F�E�E�E�E�E�E�E�T�T�T�T�T�T�T�T�G�G�G�G�G�G�G�G�?�?�?�?�?�?�H�H�H�H�H�H��������4�,�,�,�,�,�,�3�3�3�3�3�3� �c�2�;�����E�5����#4�4�5��� �� 4�4�5�� ����'M�!N� O� O� O�� ��+�+��+� � +�+�+�+�8�n����.�����$&�!&��� ��$)���%����� � � � ����: �F� �� � � � ��E�*>�$?��D�����*�(�(� �(�&�(� � :�;� (�(�(�(�V,��,�#�,�t�,�,�,�,�Bk�k�k�k�k�G�F�O�k�k�k�\ XX�XX�XX�XX�XX�M�*@�A�XX�XX�XX�v]N�]N�]N�]N�]N�=��8�]N�]N�]N�]N�]Nr0