Ë
    M/Åe®X  ã                   ót  — d 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mZ ddlmZ ddlm	Z	 ddlm
Z
 dd	lmZ ddlZdd
lmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlm Z  ddl!m"Z# ddl$m%Z% ddl&m'Z' ddl&m(Z(  G d„ d«      Z)y)z$Certbot command line argument parseré    N)ÚAny)ÚDict)ÚIterable)ÚList)ÚOptional)ÚTuple)ÚUnion)Úcrypto_util)Úerrors)Úutil)Ú	constants)Úhooks)ÚCOMMAND_OVERVIEW)ÚHELP_AND_VERSION_USAGE)ÚSHORT_USAGE)Úadd_domains)ÚCustomHelpFormatter)Úflag_default)ÚHelpfulArgumentGroup)Úset_test_server_options)Ú	VERB_HELP)ÚVERB_HELP_MAP)Úobj)Údisco)ÚArgumentSource)ÚNamespaceConfigc            	       ó  — e Zd ZdZdee   dee   ddfd„Zg d¢Zdefd„Z	dee   d	e
eef   defd
„Zdeddfd„Zdeeef   fd„Zdedej&                  fd„Zdefd„Zdeddfd„Zdeddfd„Zd$d„Zdedeee      de
eef   fd„Zdee
eee      ef      dededdfd„Zdee
eee      ef      dededej&                  fd„Zdededdfd„Zd%dedee   dede fd „Z!de"jF                  ddfd!„Z$d"e
eef   deee   ef   fd#„Z%y)&ÚHelpfulArgumentParserzØArgparse Wrapper.

    This class wraps argparse, adding the ability to make --help less
    verbose, and request help on specific subcategories at a time, eg
    'certbot --help security' for security options.

    ÚargsÚpluginsÚreturnNc                 óÐ  — ddl m} i d|j                  “d|j                  “d|j                  “d|j                  “d|j
                  “d|j                  “d	|j                  “d
|j                  “d|j                  “d|j                  “d|j                  “d|j                  “d|j                  “d|j                  “d|j                  “d|j                  “d|j                   “d|j"                  i¥| _        t'        j(                  t*        j,                  «      j.                  | _        g | _        g d¢}|t5        | j$                  «      | j6                  z   dgz   z  }t5        |«      }||z   d gz   | _        || _        | j:                  r!| j:                  d   dk(  rd| j:                  d<   | j=                  «        | j?                  d| j8                  «      }| j?                  d| j8                  «      }|  tA        |tB        «      rtA        |tB        «      r|xs || _"        ntA        |tF        «      r|n|| _"        | jI                  || jD                  «      }| jK                  | jD                  «      | _&        i | _'        tQ        jR                  d|tT        ddgtW        d«      djY                  dj[                  tW        d«      «      «      ¬ «      | _.        d!| j\                  _/        |  y )"Nr   )ÚmainÚauthÚcertonlyÚrunÚinstallr    ÚregisterÚupdate_accountÚshow_accountÚ
unregisterÚrenewÚrevokeÚrollbackÚ
everythingÚupdate_symlinksÚcertificatesÚdeleteÚenhanceÚreconfigure)ÚallÚsecurityÚpathsÚ
automationÚtestingÚmanageÚhelpú--helpú-hÚcertbotú-cú--configÚconfig_filesz"path to config file (default: {0})z and )ÚprogÚusageÚformatter_classÚargs_for_setting_config_pathÚdefault_config_filesÚconfig_arg_help_messageF)0Úcertbot._internalr#   r%   r&   r'   Úplugins_cmdr(   r)   r*   r+   r,   r-   r.   r0   r1   r2   r3   r4   ÚVERBSÚdisplay_objÚNoninteractiveDisplayÚsysÚstdoutÚnotificationÚnotifyÚactionsÚlistÚCOMMANDS_TOPICSÚhelp_topicsr   Údetermine_verbÚprescan_for_flagÚ
isinstanceÚboolÚhelp_argÚstrÚ_usage_stringÚdetermine_help_topicsÚvisible_topicsÚgroupsÚconfigargparseÚ	ArgParserr   r   ÚformatÚjoinÚparserÚ_add_config_file_help)	Úselfr   r    r#   ÚHELP_TOPICSÚplugin_namesÚhelp1Úhelp2Úshort_usages	            ú?/usr/lib/python3/dist-packages/certbot/_internal/cli/helpful.pyÚ__init__zHelpfulArgumentParser.__init__-   sÏ  € Ý*ð
Ø�D—M‘Mð
à˜Ÿ™ð
ð �4—8‘8ð
ð �t—|‘|ð	
ð
 �t×'Ñ'ð
ð ˜Ÿ™ð
ð ˜d×1Ñ1ð
ð ˜D×-Ñ-ð
ð ˜$Ÿ/™/ð
ð �T—Z‘Zð
ð �d—k‘kð
ð ˜Ÿ™ð
ð ˜$Ÿ(™(ð
ð ˜t×3Ñ3ð
ð ˜D×-Ñ-ð
ð  �d—k‘kð!
ð" �t—|‘|ð#
ð$ ˜4×+Ñ+ñ%
ˆŒ
ô, "×7Ñ7¼¿
¹
ÓC×PÑPˆŒà46ˆŒò ,aˆØ”t˜DŸJ™JÓ'¨$×*>Ñ*>Ñ>À(ÀÑKÑKˆä,0°«MˆØ0;¸lÑ0JÈdÈVÑ0SˆÔàˆŒ	à�9Š9˜Ÿ™ 1™¨Ò/Ø#ˆD�I‰I�a‰Là×ÑÔØ×%Ñ% d¨D×,<Ñ,<Ó=ˆØ×%Ñ% h°×0@Ñ0@ÓAˆÙÜ�eœTÔ"¤z°%¼Ô'>Ø!šN UˆD�Mä%/°´sÔ%;™EÀˆDŒMà×(Ñ(¨°$·-±-Ó@ˆà"×8Ñ8¸¿¹ÓGˆÔð ;=ˆŒä$×.Ñ.ØØÜ/Ø*.°
Ð);Ü!-¨nÓ!=Ø$H×$OÑ$OØ—‘œ\¨.Ó9Ó:ó%<ô=ˆŒð -2ˆ�‰Ô)âó    )ÚcommandÚcommandsÚ
subcommandÚsubcommandsÚverbsc                 óÀ   — t        d„ t        D «       «      }d}t        t        «      D ].  \  }}|j	                  dd«      }|dj                  |||¬«      z  }Œ0 |dz  }|S )Nc              3   ó2   K  — | ]  }t        |«      –— Œ y ­w©N)Úlen)Ú.0Úvs     rk   ú	<genexpr>z:HelpfulArgumentParser._list_subcommands.<locals>.<genexpr>w   s   è ø€ Ò4 ”c˜!—fÑ4ùs   ‚z,The full list of available SUBCOMMANDS is:

ÚshortÚ z{0:<{length}}     {1}
)ÚlengthzG
You can get more help on a specific subcommand with --help SUBCOMMAND
)Úmaxr   Úsortedr   Úgetra   )re   ÚlongestÚtextÚverbÚpropsÚdocs         rk   Ú_list_subcommandsz'HelpfulArgumentParser._list_subcommandsv   sp   € ÜÑ4¤mÔ4Ó4ˆà?ˆÜ!¤)Ó,ò 	P‰KˆD�%Ø—)‘)˜G RÓ(ˆCØÐ-×4Ñ4°T¸3ÀwÐ4ÓOÑO‰Dð	Pð 	Ð[Ñ[ˆØˆrm   rY   c                 óä  — d|v rd}nd}d|v rd}nd}t         }|du r;| j                  |t        ||fz  z   t        z   «       t	        j
                  d«       |S || j                  v r9| j                  || j                  «       z   «       t	        j
                  d«       |S |d	k(  r|t        ||fz  z  }|S t        |t        «      r,t        j                  |i «      j                  d
d«      }|r|n|}|S )a#  Make usage strings late so that plugins can be initialised late

        :param plugins: all discovered plugins
        :param help_arg: False for none; True for --help; "TOPIC" for --help TOPIC
        :rtype: str
        :returns: a short usage string for the top of --help TOPIC)
        ÚnginxzH--nginx           Use the Nginx plugin for authentication & installationz+(the certbot nginx plugin is not installed)ÚapachezI--apache          Use the Apache plugin for authentication & installationz,(the certbot apache plugin is not installed)Tr   r5   rC   N)r   rP   r   r   rM   ÚexitrS   r…   rW   rZ   r   r   )re   r    rY   Ú	nginx_docÚ
apache_docrC   Úcustoms          rk   r[   z#HelpfulArgumentParser._usage_string�   s  € ð �gÑØb‰IàEˆIØ�wÑØd‰JàGˆJäˆØ�tÑØ�K‰K˜Ô 0°JÀ	Ð3JÑ JÑJÔMcÑcÔdÜ�H‰H�QŒKð ˆð ˜×-Ñ-Ñ-Ø�K‰K˜ × 6Ñ 6Ó 8Ñ8Ô9Ü�H‰H�QŒKð ˆð ˜Òð Ô%¨°YÐ(?Ñ?Ñ?ˆEð ˆô ˜¤#Ô&Ü"×&Ñ& x°Ó4×8Ñ8¸À$ÓGˆFÙ$‘F¨%ˆEð ˆrm   Úconfigc                 ó�   — |j                   €J ‚|j                   d   t        j                  k(  r| j                  dk(  rg |_        yyy)z8Make "certbot renew" safe if domains are set in cli.ini.NÚdomainsr,   )Úargument_sourcesr   ÚCONFIG_FILEr‚   r�   ©re   r�   s     rk   Ú&remove_config_file_domains_for_renewalz<HelpfulArgumentParser.remove_config_file_domains_for_renewal¤   sM   € ð ×&Ñ&Ð2Ð2Ð2Ø×#Ñ# IÑ.´.×2LÑ2LÒLØ—	‘	˜WÒ$ØˆF�Nð %ð Mrm   c                 óª  ‡ ‡— ‰ j                   D �ci c]  }|j                  t        j                  “Œ c}Š‰ j                  j                  «       }dt        t        t        t        j                  t        f   f   dt        dd fˆˆ fd„}|D ].  }|j                  d«      sŒ |||   t        j                  «       Œ0  ||j                  di «      t        j                  «       d|v rç|d   }|d   \  }}g }|D ]ž  }	|	j                  d	«      sŒ|	d
v rt        j                  ‰d<   Œ-d|	v r|	j!                  d«      d   }	nd|	v r|	j!                  d«      d   }	|	j                  d«      r|j#                  |	«       Œ�|	dd  D ]  }
|j#                  d	|
› �«       Œ Œ  |D ]0  }	‰ j%                  |	«      }t        j                  ‰|j                  <   Œ2 ‰S c c}w )NÚsettings_dictÚsourcer!   c                 óæ   •— | j                  «       D ���cg c]  \  }\  }}|€‰j                  |«      n|‘Œ }}}}‰j                  |D �ci c]  }|j                  |“Œ c}«       y c c}}}w c c}w ru   )ÚitemsÚ_find_action_for_argÚupdateÚdest)r•   r–   ÚargÚactionÚ_rQ   Úresultre   s         €€rk   Úupdate_resultz@HelpfulArgumentParser._build_sources_dict.<locals>.update_result¿   sz   ø€ ð 0=×/BÑ/BÓ/D÷Fð FÙ+˜3¡ ¨ð :@¸�t×0Ñ0°Ô5ÈVÑSð FˆGò Fà�M‰M¸gÖG°F˜FŸK™K¨Ñ/ÒGÕHùôFùâGs   –"A'ÁA.Úconfig_fileÚenv_varÚcommand_liner{   ú-)r?   r@   Ú
config_dirú=r   ú ú--é   )rQ   r›   r   ÚDEFAULTrc   Úget_source_to_settings_dictr   rZ   r   r_   ÚActionÚ
startswithr‘   r   ÚENV_VARÚCOMMAND_LINEÚsplitÚappendr™   )re   r�   Úsource_to_settings_dictr    Ú
source_keyr•   rž   Úunprocessed_argsr   rœ   Ú	short_argrŸ   s   `          @rk   Ú_build_sources_dictz)HelpfulArgumentParser._build_sources_dict¬   sï  ù€ ð FJÇ\Á\ÖS¸6�6—;‘;¤× 6Ñ 6Ñ6ÒSˆð #'§+¡+×"IÑ"IÓ"KÐð	I¬¬c´5¼×9NÑ9NÔPSÐ9SÑ3TÐ.TÑ)Uð 	IÜ"0ð	IØ59ö	Ið 2ò 	_ˆJØ×$Ñ$ ]Õ3ÙÐ5°jÑAÄ>×C]ÑC]Õ^ð	_ñ 	Ð-×1Ñ1°)¸RÓ@Ä.×BXÑBXÔYð Ð4Ñ4à3°NÑCˆMØ$1°"Ñ$5Ñ!ˆQÐ ØˆDØ'ò 5�à—~‘~ cÔ*Øð Ð,Ñ,Ü+9×+FÑ+F�F˜<Ñ(Øà˜#‘:ØŸ)™) C›.¨Ñ+‘CØ˜C‘ZØŸ)™) C›.¨Ñ+�Cà—>‘> $Ô'Ø—K‘K Õ$ð &)¨¨ Wò 5˜	ØŸ™ a¨	 { OÕ4ñ5ð)5ð. ò B�à×2Ñ2°3Ó7�Ü&4×&AÑ&A��v—{‘{Ò#ðBð
 ˆùòy Ts   ‘"Grœ   c                 óò   — |d   dk7  rd|z   }| j                   D ]  }||j                  v sŒ|c S  | j                   D ]*  }|j                  D ]  }|j                  |«      sŒ|c c S  Œ, t        d|› d�«      ‚)Nr   r¤   r¨   z!Action corresponding to argument z is None)rQ   Úoption_stringsr­   ÚAssertionError)re   rœ   r�   Úoption_strings       rk   r™   z*HelpfulArgumentParser._find_action_for_argð   s”   € ð ˆq‰6�SŠ=Ø˜‘*ˆCð —l‘lò 	ˆFØ�f×+Ñ+Ò+Ø’ð	ð
 —l‘lò 	"ˆFØ!'×!6Ñ!6ò "�Ø ×+Ñ+¨CÕ0Ø!”Mñ"ð	"ô
 Ð@ÀÀÀXÐNÓOÐOrm   c                 óÎ  — | j                   j                  | j                  «      }| j                  | j                     |_        | j                  |_        t        |«      }|j                  | j                  «       «       | j                  |«       | j                  dk(  rE|j                  r2t        j                  dj                  t        j                  «      «      ‚d|_        |j                  r>|j                   r2t        j                  dj                  t        j                  «      «      ‚|j"                  s|j$                  r| j'                  |«       |j(                  r| j+                  |«       |j,                  r|j.                  sd|_        |j0                  rt3        j0                  |«       |j4                  r1t7        d„ |j8                  D «       «      rt        j                  d«      ‚|j:                  r!|j<                  rt        j                  d«      ‚t?        |j@                  tB        «      r-tE        |j@                  «      dkD  rt        j                  d	«      ‚|S )
zžParses command line arguments and returns the result.

        :returns: parsed command line arguments
        :rtype: configuration.NamespaceConfig

        r,   z{0} cannot be used with renewTz.Flag for non-interactive mode and {0} conflictc              3   óF   K  — | ]  }t        j                  |«      –— Œ y ­wru   )r   Úis_wildcard_domain)rw   Úds     rk   ry   z3HelpfulArgumentParser.parse_args.<locals>.<genexpr>1  s   è ø€ ÒF°!”4×*Ñ*¨1×-ÑFùs   ‚!zFUsing --allow-subset-of-names with a wildcard domain is not supported.z@Parameters --hsts and --auto-hsts cannot be used simultaneously.r©   z8Only *one* --key-type type may be provided at this time.)#rc   Ú
parse_argsr   rJ   r‚   Úfuncr   Úset_argument_sourcesr¶   r“   Úforce_interactiver   ÚErrorra   r   ÚFORCE_INTERACTIVE_FLAGÚnoninteractive_modeÚstagingÚdry_runÚset_test_serverÚcsrÚ
handle_csrÚmust_stapleÚstapleÚvalidate_hooksr   Úallow_subset_of_namesÚanyr�   ÚhstsÚ	auto_hstsrW   Úkey_typerR   rv   )re   Úparsed_argsr�   s      rk   r¿   z HelpfulArgumentParser.parse_args  sã  € ð —k‘k×,Ñ,¨T¯Y©YÓ7ˆØŸ:™: d§i¡iÑ0ˆÔØŸ9™9ˆÔÜ  Ó-ˆØ×#Ñ# D×$<Ñ$<Ó$>Ô?à×3Ñ3°FÔ;ð �9‰9˜ÒØ×'Ò'Ü—l‘lØ3×:Ñ:Ü!×8Ñ8ó:ó;ð ;ð *.ˆFÔ&à×#Ò#¨×(BÒ(BÜ—,‘,Ø@×GÑGÜ×4Ñ4ó6ó7ð 7ð �>Š>˜VŸ^š^Ø× Ñ  Ô(à�:Š:Ø�O‰O˜FÔ#à×Ò f§m¢mØ ˆFŒMà× Ò Ü× Ñ  Ô(à×'Ò'ÜÑF°v·~±~ÔFÔFÜ—l‘lð $Hó Ið Ið �;Š;˜6×+Ò+Ü—,‘,ØRóTð Tô �f—o‘o¤tÔ,´°V·_±_Ó1EÈÒ1IÜ—,‘,ØJóLð Lð ˆrm   c                 ó.   — t        | j                  |«      S )z›Updates server, break_my_certs, staging, tos, and
        register_unsafely_without_email in config as necessary to prepare
        to use the test server.)r   r‚   r’   s     rk   rÈ   z%HelpfulArgumentParser.set_test_server?  s   € ô ' t§y¡y°&Ó9Ð9rm   c                 ój  — |j                   dk7  rt        j                  d«      ‚|j                  rt        j                  d«      ‚|j                  dd \  }}t        j                  ||«      \  }}}|D ]  }t        ||«       Œ |s%t        j                  d|j                  d   z  «      ‚||f|_        |D �ch c]  }|j                  «       ’Œ }	}t        |j                  «      }
|	|
k7  rCt        j                  dj                  dj                  |	«      dj                  |
«      «      «      ‚y	c c}w )
zProcess a --csr flag.r%   z’Currently, a CSR file may only be specified when obtaining a new or replacement via the certonly command. Please try the certonly command instead.z1--allow-subset-of-names cannot be used with --csrr   é   zJUnfortunately, your CSR %s needs to have a SubjectAltName for every domainzMInconsistent domain requests:
From the CSR: {0}
From command line/config: {1}z, N)r‚   r   rÃ   rÎ   rÉ   r
   Úimport_csr_filer   Ú
actual_csrÚlowerÚsetr�   ÚConfigurationErrorra   rb   )re   r�   ÚcsrfileÚcontentsÚtyprÉ   r�   Údomainr¾   Úcsr_domainsÚconfig_domainss              rk   rÊ   z HelpfulArgumentParser.handle_csrE  s-  € à�;‰;˜*Ò$Ü—,‘,ð  ;ó <ð <ð ×'Ò'Ü—,‘,ÐRÓSÐSà"ŸJ™J q¨˜OÑˆ�Ü'×7Ñ7¸ÀÓJÑˆˆS�'ð ò 	(ˆFÜ˜ Õ'ð	(ñ ä—,‘,Ø\Ø—*‘*˜Q‘-ñ ó!ð !ð ! #˜JˆÔà*1Ö2 Q�q—w‘w•yÐ2ˆÐ2Ü˜VŸ^™^Ó,ˆØ˜.Ò(Ü×+Ñ+Øaß‘˜Ÿ	™	 +Ó.°·	±	¸.Ó0IÓJóLð Lð )ùò 3s   Â9D0c                 ó  — d| j                   v sd| j                   v rd| _        yt        | j                   «      D ]G  \  }}|| j                  v sŒ|}|dk(  rd}|dk(  rd}|| _        | j                   j	                  |«        y d| _        y)	z‡Determines the verb/subcommand provided by the user.

        This function works around some of the limitations of argparse.

        r=   r<   r;   Nr$   r%   r/   r&   )r   r‚   Ú	enumeraterJ   Úpop)re   ÚiÚtokenr‚   s       rk   rU   z$HelpfulArgumentParser.determine_verbg  sŽ   € ð �4—9‘9Ñ ¨D¯I©IÑ 5àˆDŒIØä! $§)¡)Ó,ò 		‰HˆAˆuØ˜Ÿ
™
Ò"Ø�Ø˜6’>Ø%�DØ˜<Ò'Ø �DØ �”	Ø—	‘	—‘˜aÔ Ùð		ð ˆ�	rm   ÚflagÚpossible_argumentsc                 óª   — || j                   vry| j                   j                  |«      }	 | j                   |dz      }||v r|S 	 y# t        $ r Y yw xY w)as  Checks cli input for flags.

        Check for a flag, which accepts a fixed set of possible arguments, in
        the command line; we will use this information to configure argparse's
        help correctly.  Return the flag's argument, if it has one that matches
        the sequence @possible_arguments; otherwise return whether the flag is
        present.

        Fr©   T)r   ÚindexÚ
IndexError)re   rç   rè   ÚposÚnxts        rk   rV   z&HelpfulArgumentParser.prescan_for_flag  sk   € ð �t—y‘yÑ ØØ�i‰i�o‰o˜dÓ#ˆð	Ø—)‘)˜C !™GÑ$ˆCØÐ(Ñ(Ø�
ð )ð øô ò 	ØØð	ús   ¬A Á	AÁAÚtopicsÚkwargsc                 ób   — | j                   j                   | j                  |g|¢­i |¤Ž«       y)a1  Add a new command line argument.

        :param topics: str or [str] help topic(s) this should be listed under,
                       or None for options that don't fit under a specific
                       topic which will only be shown in "--help all" output.
                       The first entry determines where the flag lives in the
                       "--help all" output (None -> "optional arguments").
        :param list *args: the names of this argument flag
        :param dict **kwargs: various argparse settings for this argument

        N)rQ   r±   Ú_add)re   rî   r   rï   s       rk   ÚaddzHelpfulArgumentParser.add•  s+   € ð 	�‰×Ñ˜I˜DŸI™I fÐ>¨tÒ>°vÑ>Õ?rm   c                 ó  — |j                  d«      }|t        j                  u r | j                  j                  |i |¤ŽS t        |t        «      r | j                  |v r| j                  n|d   }n|}t        |t        «      sZ| j                  |   rK|| j                  v r!| j                  |   } |j                  |i |¤ŽS  | j                  j                  |i |¤ŽS t        j                  |d<    | j                  j                  |i |¤ŽS )Nr�   r   r;   )r   r   ÚDeprecatedArgumentActionrc   Úadd_argumentrW   rR   rY   rX   r]   r^   ÚargparseÚSUPPRESS)re   rî   r   rï   r�   ÚtopicÚgroups          rk   rñ   zHelpfulArgumentParser._add¤  s÷   € à—‘˜HÓ%ˆØ”T×2Ñ2Ñ2ð ,�4—;‘;×+Ñ+¨TÐ<°VÑ<Ð<ä�fœdÔ#ð &*§]¡]°fÑ%<�D—M’MÀ&ÈÁ)‰EàˆEä˜%¤Ô&¨4×+>Ñ+>¸uÒ+EØ˜Ÿ™Ñ#ØŸ™ EÑ*�Ø)�u×)Ñ)¨4Ð:°6Ñ:Ð:à/�t—{‘{×/Ñ/°Ð@¸Ñ@Ð@ä%×.Ñ.ˆF�6‰NØ+�4—;‘;×+Ñ+¨TÐ<°VÑ<Ð<rm   Úargument_nameÚnum_argsc                 ór   — t        j                  | j                  d«      }t        j                  |||«       y)aŒ  Adds a deprecated argument with the name argument_name.

        Deprecated arguments are not shown in the help. If they are used
        on the command line, a warning is shown stating that the
        argument is deprecated and no other action is taken.

        :param str argument_name: Name of deprecated argument.
        :param int num_args: Number of arguments the option takes.

        N)Ú	functoolsÚpartialrò   r   Úadd_deprecated_argument)re   rú   rû   Úadd_funcs       rk   rÿ   z-HelpfulArgumentParser.add_deprecated_argumentÃ  s,   € ô2 ×$Ñ$ T§X¡X¨tÓ4ˆÜ×$Ñ$ X¨}¸hÕGrm   rø   rr   c                 ó  — | j                   |   rg | j                  j                  |fi |¤Ž| j                  |<   | j                  r1|D ],  }| j                  |   j                  |t        |   d   ¬«       Œ. t        | |«      S )aÙ  Create a new argument group.

        This method must be called once for every topic, however, calls
        to this function are left next to the argument definitions for
        clarity.

        :param str topic: Name of the new argument group.
        :param str verbs: List of subcommands that should be documented as part of
                          this help group / topic

        :returns: The new argument group.
        :rtype: `HelpfulArgumentGroup`

        rz   )r;   )r]   rc   Úadd_argument_groupr^   rY   rõ   r   r   )re   rø   rr   rï   rx   s        rk   Ú	add_groupzHelpfulArgumentParser.add_groupß  s�   € ð  ×Ñ˜uÒ%Ø!? §¡×!?Ñ!?ÀÑ!PÈÑ!PˆD�K‰K˜ÑØ�}Š}Øò W�AØ—K‘K Ñ&×3Ñ3°A¼MÈ!Ñ<LÈWÑ<UÐ3ÕVðWä# D¨%Ó0Ð0rm   c                 ó¦   — |j                  «       D ]>  \  }}| j                  ||j                  ¬«      }|j                  j	                  ||«       Œ@ y)z‰

        Let each of the plugins add its own command line arguments, which
        may or may not be displayed as help topics.

        )ÚdescriptionN)r˜   r  Úlong_descriptionÚ
plugin_clsÚinject_parser_options)re   r    ÚnameÚ	plugin_epÚparser_or_groups        rk   Úadd_plugin_argsz%HelpfulArgumentParser.add_plugin_argsö  sT   € ð  'Ÿ}™}›ò 	N‰OˆD�)Ø"Ÿn™n¨TØ9B×9SÑ9Sð -ó UˆOà× Ñ ×6Ñ6°ÈÕMñ	Nrm   Úchosen_topicc                 óø   — |dk(  rd}|dk(  rd}|dk(  r| j                   D �ci c]  }||dk7  “Œ
 c}S |s| j                   D �ci c]  }|d“Œ c}S | j                   D �ci c]  }|||k(  “Œ
 c}S c c}w c c}w c c}w )z»

        The user may have requested help on a topic, return a dict of which
        topics to display. @chosen_topic has prescan_for_flag's return type

        :returns: dict

        r$   r%   r/   r&   r5   zcertbot-route53:authF)rT   )re   r  Úts      rk   r\   z+HelpfulArgumentParser.determine_help_topics  s“   € ð ˜6Ò!Ø%ˆLØ˜<Ò'Ø ˆLØ˜5Ò à<@×<LÑ<LÖM°q�A�qÐ2Ñ2Ñ2ÒMÐMÙØ&*×&6Ñ&6Ö7 �A�u‘HÒ7Ð7Ø.2×.>Ñ.>Ö?¨��1˜Ñ$Ñ$Ò?Ð?ùò Nùâ7ùÚ?s   ¢A-Á
A2ÁA7)r!   N)© )&Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   rZ   r   rl   rS   r…   r	   rX   r[   r   r“   r   r   r¶   r_   r¬   r™   r¿   rÈ   rÊ   rU   r   rV   r   rò   rñ   Úintrÿ   r   r  r   ÚPluginsRegistryr  r\   r  rm   rk   r   r   %   s.  „ ñðD˜T #™Yð D°¸#±ð DÀ4ó DòN T€Oð	 3ó 	ð! X¨c¡]ð !¸eÀCÈÀIÑ>Nð !ÐSVó !ðF ¸_ð  ÐQUó  ðB T¨#¨~Ð*=Ñ%>ó BðHP¨ð P°×0EÑ0Eó Pð.6˜Oó 6ðp: oð :¸$ó :ðL ð L°Tó LóDð0 Sð ¸hÀxÐPSÁ}Ñ>Uð Ø# C¨ IÑ.óð,@˜( 5¨¨h°s©mÑ)<¸cÐ)AÑ#BÑCð @ÈCð @Øð@Ø"ó@ð=˜8 E¨$¨x¸©}Ñ*=¸sÐ*BÑ$CÑDð =ÈSð =Øð=Ø,×3Ñ3ó=ð>H°Sð HÀCð HÈDó Hñ81˜sð 1¨8°C©=ð 1Øð1Ø$8ó1ð.
N u×'<Ñ'<ð 
NÀó 
Nð@°%¸¸T¸	Ñ2Bð @Ø#'¨°©°tÐ(;Ñ#<ô@rm   r   )*r  rö   rý   rM   Útypingr   r   r   r   r   r   r	   r_   r>   r
   r   r   rH   r   r   Ú#certbot._internal.cli.cli_constantsr   r   r   Úcertbot._internal.cli.cli_utilsr   r   r   r   r   Úcertbot._internal.cli.verb_helpr   r   Úcertbot._internal.displayr   rK   Úcertbot._internal.pluginsr   Úcertbot.configurationr   r   r   r  rm   rk   ú<module>r     sp   ðÙ *ã Û Û 
Ý Ý Ý Ý Ý Ý Ý ã å Ý Ý Ý 'Ý #Ý @Ý FÝ ;Ý 7Ý ?Ý 8Ý @Ý CÝ 5Ý 9Ý 8Ý +Ý 0Ý 1÷r@ò r@rm   