!A?hM $ ddlZddlZddlZddlmZddlmZddlmZ ddlm Z ddlm Z e dZ e e dzZe d Zee zZee d z Zee d z Zee d ze d z Zee zZee d zZee zZee dz ZddhZeezZdZdZejdejejzZGdde Z!Gdde!Z"Gdde!Z#Gdde!Z$Gdde!Z%Gdde"Z&Gd d!e!Z'Gd"d#e!Z(Gd$d%e!Z)Gd&d'e!Z*Gd(d)e*Z+Gd*d+e"Z,Gd,d-e!Z-Gd.d/e!Z.Gd0d1e!Z/Gd2d3e!Z0Gd4d5e!Z1Gd6d7e!Z2Gd8d9e!Z3Gd:d;e!Z4Gd<d=e!Z5Gd>d?e!Z6Gd@dAe!Z7GdBdCe!Z8GdDdEe!Z9GdFdGe!Z:GdHdIe!Z;GdJdKe!Z<GdLdMe$Z=GdNdOe!Z>GdPdQe!Z?GdRdSe!Z@GdTdUe!ZAGdVdWeAZBGdXdYe!ZCGdZd[e!ZDGd\d]e!ZEGd^d_e!ZFGd`dae!ZGGdbdceGZHGdddeeGZIGdfdge!ZJGdhdie!ZKGdjdke!ZLGdldmeLZMGdndoeMZNGdpdqe!ZOGdrdsePZQGdtdueQZRGdvdweQZSGdxdyeRZTGdzd{e jUZVeSd d|ZWeSd}d~ZXdeX_YdeX_ZeSddZ[ejd\d]e j^Z_ejd\ej`d]ejaZbejdjcZdejd\ej`d]ejaZeejd\ej`d]ejaZfejd\ej`d]ejaZgdZhdZidZjddZkdZldZmdZndZodZpdZqdZrdZsdZtdZudZvdZwdZxdZydZzdZ{dZ|dZ}dZ~dZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdS)N) hexdigits) itemgetter)_encoded_words)errors)utilsz (z ()<>@,:;.\"[].z."(z/?=z*'%%  cr t|ddddS)N\\\"z\")strreplacevalues G/opt/alt/python-internal/lib64/python3.11/email/_header_value_parser.pymake_quoted_pairsrcs1E u::  dF + + 3 3C ? ??c,t|}d|dS)Nr)r)rescapeds r quote_stringrhs&&G w>>>rz =\? # literal =? [^?]* # charset \? # literal ? [qQbB] # literal 'q' or 'b', case insensitive \? # literal ? .*? # encoded word \?= # literal ?= ceZdZdZdZdZfdZdZfdZe dZ e dZ dZ e d Z e d Zd Zdd ZddZddZxZS) TokenListNTcHtj|i|g|_dSN)super__init__defects)selfargskw __class__s rr zTokenList.__init__s*$%"%%% rc@dd|DS)Nc34K|]}t|VdSrr.0xs r z$TokenList.__str__..(,,!s1vv,,,,,,rjoinr"s r__str__zTokenList.__str__s#ww,,t,,,,,,rcd|jjtSNz{}({})formatr%__name__r__repr__r"r%s rr8zTokenList.__repr__s3t~6"WW--//11 1rc@dd|DS)Nr'c32K|]}|j |jVdSrrr*s rr-z"TokenList.value..s+8818qw888888rr/r1s rrzTokenList.values#ww88888888rc@td|D|jS)Nc3$K|] }|jV dSr) all_defectsr*s rr-z(TokenList.all_defects..s$00aAM000000r)sumr!r1s rr>zTokenList.all_defectss#004000$,???rc6|dSNr)startswith_fwsr1s rrBzTokenList.startswith_fwssAw%%'''rc6 td|DS)Nc3$K|] }|jV dSr) as_ew_allowed)r+parts rr-z*TokenList.as_ew_allowed..s%77$4%777777r)allr1s rrEzTokenList.as_ew_alloweds"O77$777777rcHg}|D]}||j|Sr)extendcomments)r"rJtokens rrJzTokenList.commentss2 , ,E OOEN + + + +rc$t||S)Npolicy)_refold_parse_treer"rNs rfoldzTokenList.folds!$v6666rr'cLt||dS)Nindent)printppstrr"rTs rpprintzTokenList.pprints$ djjj''(((((rcTd||S)Nr rS)r0_pprWs rrVzTokenList.ppstrs"yy00111rc#nKd||jj|jV|D]K}t |ds|d|zV-||dzEd{VL|jrd|j}nd}d||VdS)Nz{}{}/{}(rZz* !! invalid element in token list: {!r}z z Defects: {}r'z{}){})r6r%r7 token_typehasattrrZr!)r"rTrKextras rrZz TokenList._pps  N # O    4 4E5%(( 4!55;VE]]CDDDD!99VF]3333333333 < "))$,77EEEnnVU+++++++rr')r7 __module__ __qualname__r\syntactic_breakew_combine_allowedr r2r8propertyrr>rBrErJrQrXrVrZ __classcell__r%s@rrr}s9JO---1111199X9@@X@(((88X8X 777))))2222,,,,,,,,rrc:eZdZedZedZdS)WhiteSpaceTokenListcdSN r1s rrzWhiteSpaceTokenList.valuesrcd|DS)Nc2g|]}|jdk |jS)comment)r\contentr*s r z0WhiteSpaceTokenList.comments..s&CCCa1<+B+B +B+B+Brrlr1s rrJzWhiteSpaceTokenList.commentssCC4CCCCrN)r7r`rardrrJrlrrrhrhsM XDDXDDDrrhceZdZdZdS)UnstructuredTokenList unstructuredNr7r`rar\rlrrrtrtsJJJrrtceZdZdZdS)PhrasephraseNrvrlrrrxrxJJJrrxceZdZdZdS)WordwordNrvrlrrr|r|JJJrr|ceZdZdZdS)CFWSListcfwsNrvrlrrrrr~rrceZdZdZdS)AtomatomNrvrlrrrrr~rrceZdZdZdZdS)TokenrKFN)r7r`rar\ encode_as_ewrlrrrrsJLLLrrceZdZdZdZdZdZdS) EncodedWord encoded-wordN)r7r`rar\ctecharsetlangrlrrrrs"J CG DDDrrcTeZdZdZedZedZedZdS) QuotedString quoted-stringc8|D]}|jdkr |jcSdSNbare-quoted-stringr\rr"r,s rrqzQuotedString.contents9  A|333w4  rcg}|D]J}|jdkr#|t|0||jKd|S)Nrr')r\appendrrr0)r"resr,s r quoted_valuezQuotedString.quoted_valuesf $ $A|333 3q66"""" 17####wws||rc8|D]}|jdkr |jcSdSrrr"rKs rstripped_valuezQuotedString.stripped_values= # #E#777{"""8 # #rN)r7r`rar\rdrqrrrlrrrrsh J X X##X###rrc.eZdZdZdZedZdS)BareQuotedStringrcZtdd|DS)Nr'c34K|]}t|VdSrr)r*s rr-z+BareQuotedString.__str__.. s(#9#9qCFF#9#9#9#9#9#9r)rr0r1s rr2zBareQuotedString.__str__ s+BGG#9#9D#9#9#999:::rc@dd|DS)Nr'c34K|]}t|VdSrr)r*s rr-z)BareQuotedString.value..r.rr/r1s rrzBareQuotedString.value #ww,,t,,,,,,rN)r7r`rar\r2rdrrlrrrrsC%J;;;--X---rrcJeZdZdZdZdZedZedZdS)CommentrpcldtdgfdDdgggS)Nr'rc:g|]}|Srl)quote)r+r,r"s rrrz#Comment.__str__..s#999qTZZ]]999r))r0r?r1s`rr2zComment.__str__sPwws E9999D999 E " ##$$ $rc|jdkrt|St|ddddddS)Nrprrrz\(rz\))r\rr)r"rs rrz Comment.quotesc  y ( (u:: 5zz!!$//77"%u...5g"%u/./. .rc@dd|DS)Nr'c34K|]}t|VdSrr)r*s rr-z"Comment.content..%r.rr/r1s rrqzComment.content#rrc|jgSr)rqr1s rrJzComment.comments's  ~rN) r7r`rar\r2rrdrqrJrlrrrrsmJ$$$...--X-XrrcTeZdZdZedZedZedZdS) AddressListz address-listcd|DS)Nc(g|]}|jdk |S)addressr\r*s rrrz)AddressList.addresses..1$;;;a1<#:#:#:#:#:rrlr1s r addresseszAddressList.addresses/;;4;;;;rc6td|DgS)Nc3:K|]}|jdk |jVdSrNr\ mailboxesr*s rr-z(AddressList.mailboxes..5s<>>Q\9%<%<K%<%<%<%<>>rr?r1s rrzAddressList.mailboxes36>>!>>>?ACC Crc6td|DgS)Nc3:K|]}|jdk |jVdSrr\ all_mailboxesr*s rr-z,AddressList.all_mailboxes..:s<>>Q\9%<%<O%<%<%<%<>>rrr1s rrzAddressList.all_mailboxes8rrN)r7r`rar\rdrrrrlrrrr+spJ <<X<CCXCCCXCCCrrcTeZdZdZedZedZedZdS)AddressrcB|djdkr |djSdS)Nrgroupr\ display_namer1s rrzAddress.display_nameBs) 7  ( (7' ' ) (rcv|djdkr |dgS|djdkrgS|djSNrmailboxinvalid-mailboxrr1s rrzAddress.mailboxesGsE 7  * *G9  !W #4 4 4IAw  rc|djdkr |dgS|djdkr |dgS|djSrrr1s rrzAddress.all_mailboxesOsL 7  * *G9  !W #4 4 4G9 Aw$$rN)r7r`rar\rdrrrrlrrrr>shJ ((X(!!X!%%X%%%rrc>eZdZdZedZedZdS) MailboxList mailbox-listcd|DS)Nc(g|]}|jdk |S)rrr*s rrrz)MailboxList.mailboxes..]rrrlr1s rrzMailboxList.mailboxes[rrcd|DS)Nc$g|] }|jdv |S))rrrr*s rrrz-MailboxList.all_mailboxes..as/???a|======rrlr1s rrzMailboxList.all_mailboxes_s"??4??? ?rNr7r`rar\rdrrrlrrrrWsMJ <<X<??X???rrc>eZdZdZedZedZdS) GroupList group-listcF|r|djdkrgS|djSNrrrr1s rrzGroupList.mailboxesis- tAw)^;;IAw  rcF|r|djdkrgS|djSrrr1s rrzGroupList.all_mailboxesos- tAw)^;;IAw$$rNrrlrrrresMJ !!X! %%X%%%rrcTeZdZdZedZedZedZdS)GrouprcB|djdkrgS|djSNrrr1s rrzGroup.mailboxeszs& 7  - -IAw  rcB|djdkrgS|djSrrr1s rrzGroup.all_mailboxess& 7  - -IAw$$rc|djSrA)rr1s rrzGroup.display_namesAw##rN)r7r`rar\rdrrrrlrrrrvshJ !!X! %%X% $$X$$$rrceZdZdZedZedZedZedZedZ dS)NameAddr name-addrcFt|dkrdS|djSNr)lenrr1s rrzNameAddr.display_names# t99>>4Aw##rc|djSN local_partr1s rrzNameAddr.local_partsBx""rc|djSrdomainr1s rrzNameAddr.domainsBxrc|djSr)router1s rrzNameAddr.routesBx~rc|djSr addr_specr1s rrzNameAddr.addr_specsBx!!rN r7r`rar\rdrrrrrrlrrrrsJ $$X$ ##X#XX""X"""rrcjeZdZdZedZedZedZedZdS) AngleAddrz angle-addrc8|D]}|jdkr |jcSdSN addr-spec)r\rrs rrzAngleAddr.local_parts; $ $A|{**|###+ $ $rc8|D]}|jdkr |jcSdSrr\rrs rrzAngleAddr.domains8  A|{**x+  rc8|D]}|jdkr |jcSdS)N obs-route)r\domainsrs rrzAngleAddr.routes; ! !A|{**y   + ! !rc|D];}|jdkr.|jr |jcSt|j|jzcS)r\rrrrs rrzAngleAddr.addr_specs`  A|{**<D;&&&' 55 CCCC + 4rN) r7r`rar\rdrrrrrlrrrrsJ $$X$   X !!X! Xrrc(eZdZdZedZdS)ObsRoutercd|DS)Nc2g|]}|jdk |jSrrr*s rrrz$ObsRoute.domains..s&CCCQ!,(*B*B*B*B*Brrlr1s rrzObsRoute.domainssCC$CCCCrN)r7r`rar\rdrrlrrrrs7J DDXDDDrrceZdZdZedZedZedZedZedZ dS)MailboxrcB|djdkr |djSdSNrrrr1s rrzMailbox.display_names) 7  , ,7' ' - ,rc|djSrArr1s rrzMailbox.local_partAw!!rc|djSrArr1s rrzMailbox.domainsAw~rcB|djdkr |djSdSr )r\rr1s rrz Mailbox.routes( 7  , ,7=  - ,rc|djSrArr1s rrzMailbox.addr_specsAw  rNrrlrrrrsJ ((X(""X"X!!X!!!X!!!rrc8eZdZdZedZexZxZxZZ dS)InvalidMailboxrcdSrrlr1s rrzInvalidMailbox.display_nametrNrrlrrrrsB"J X/;:J::%)))rrc6eZdZdZdZefdZxZS)DomainrFctdtjSNr'r0rrsplitr9s rrz Domain.domain'wwuww}**,,---r)r7r`rar\rErdrrerfs@rrrsLJM ....X.....rrceZdZdZdS)DotAtomdot-atomNrvrlrrrrsJJJrrceZdZdZdZdS) DotAtomTextz dot-atom-textTNr7r`rar\rErlrrrrs JMMMrrceZdZdZdZdS) NoFoldLiteralzno-fold-literalFNrrlrrr!r! s"JMMMrr!cneZdZdZdZedZedZedZedZ dS)AddrSpecrFc|djSrArr1s rrzAddrSpec.local_partr rcFt|dkrdS|djS)Nr)rrr1s rrzAddrSpec.domains" t99q==4Bxrct|dkr |djS|dj|djz|djzS)Nr&rrr)rrrstriplstripr1s rrzAddrSpec.valuesW t99q==7= Aw}##%%d1gm3DGM4H4H4J4JJJrct|j}t|t|tz krt |j}n|j}|j |dz|jzS|S)N@)setrr DOT_ATOM_ENDSrr)r"namesetlps rrzAddrSpec.addr_spec$sedo&& w<<#gm344 4 4do..BBB ; "8dk) ) rN) r7r`rar\rErdrrrrrlrrr#r#sJM ""X"X KKXK Xrr#ceZdZdZdZdS) ObsLocalPartzobs-local-partFNrrlrrr1r10s!JMMMrr1cLeZdZdZdZedZefdZxZS) DisplayNamez display-nameFct|}t|dkr|jS|djdkr|dn7|ddjdkr t|ddd|d<|djdkr|n7|ddjdkr t|ddd|d<|jS)Nrrrr)rrrr\pop)r"rs rrzDisplayName.display_name;soo s88q==9  q6  & & GGAJJJJ1vay#v--"3q6!"":..A r7  ' ' GGIIII2wr{%//#CGCRCL11Byrctd}|jrd}n|D]}|jdkrd}t|dkrt|rrdx}}|djdks|ddjdkrd}|djdks|ddjdkrd}|t|jz|zSt jS) NFTrrr'rrkr)r!r\rrrrr)r"rr,prepostr%s rrzDisplayName.valueLs < !EE ! !>e>OC$Aw!6))T!WQZ-BF-J-JBx"F**d2hrl.Ev.M.M|D$5666t; ;77= r) r7r`rar\rcrdrrrerfs@rr3r36shJ X !!!!X!!!!!rr3cBeZdZdZdZedZedZdS) LocalPartz local-partFcX|djdkr |djS|djS)Nrr)r\rrr1s rrzLocalPart.valuees- 7  0 07' '7= rc tg}t}d}|dtgzD]}|jdkr|r6|jdkr+|djdkrt|dd|d<t|t}|rG|jdkr<|djdkr+|t|ddn|||d}|}t|dd}|jS)NFrrdotrr)DOTr\r isinstancerr)r"rlast last_is_tltokis_tls rrzLocalPart.local_partlse 7cU?  C~'' /s~66H'611#D"I..BsI..E $/U22F%// 9SW--.... 3r7DJJAbD ""yrN)r7r`rar\rErdrrrlrrr:r:`sRJM !!X! Xrr:cLeZdZdZdZefdZedZxZS) DomainLiteralzdomain-literalFctdtjSrrr9s rrzDomainLiteral.domainrrc8|D]}|jdkr |jcSdS)Nptextrrs ripzDomainLiteral.ips8  A|w&&w'  r) r7r`rar\rErdrrIrerfs@rrErEsg!JM ....X.XrrEceZdZdZdZdZdS) MIMEVersionz mime-versionN)r7r`rar\majorminorrlrrrKrKsJ E EEErrKcJeZdZdZdZdZdZedZedZ dS) Parameter parameterFus-asciic.|jr |djndSr) sectionednumberr1s rsection_numberzParameter.section_numbers"&6tAw~~Q6rc|D]N}|jdkr |jcS|jdkr-|D]*}|jdkr|D]}|jdkr |jcccS+OdS)Nrrrr')r\rrs r param_valuezParameter.param_values < ''))D6!!!t 4L  !5u = > > > >!<<>>3 3 KD%5jmm444E(1+K!)G' &CJJNN8A;!##!HQK'..v/IH0J0JKKK!"1"IEKA).! *! *%!Q&&!>I ,,V-GI.K.KLLL  ,,V-GF.H.HIIIQ)>RR & = =e D DP$)LL:K$L$LEE +-?@PPP %*LL=N$O$OEEE P !077R!M001N1P1PQQQ.PPP!' 4 4UY 4 O O P ""5))))GGK((E+    g3 3 s$I&"G99'H#"H#&+JJc g}|jD]S\}}|r7|d|t|>||Td|}|rd|zndS)N{}={}z; rkr')r}rr6rr0)r"r}r~rs rr2zMimeParameters.__str__&s; $ $KD% $ gnnT<3F3FGGHHHH d####6""%-sV||2-rN)r7r`rar\rbrdr}r2rlrrrjrjsJ"JO CCXCJ.....rrjc(eZdZdZedZdS)ParameterizedHeaderValueFcRt|D]}|jdkr |jcSiS)Nrk)reversedr\r}rs rr}zParameterizedHeaderValue.params7s>d^^ $ $E#444|###5 rN)r7r`rarbrdr}rlrrrr1s4O XrrceZdZdZdZdZdZdS) ContentTypez content-typeFtextplainN)r7r`rar\rEmaintypesubtyperlrrrr?s"JMHGGGrrceZdZdZdZdZdS)ContentDispositionzcontent-dispositionFN)r7r`rar\rEcontent_dispositionrlrrrrFs &JMrrceZdZdZdZdZdS)ContentTransferEncodingzcontent-transfer-encodingF7bitN)r7r`rar\rErrlrrrrLs,JM CCCrrceZdZdZdZdS) HeaderLabelz header-labelFNrrlrrrrRsJMMMrrceZdZdZdZdZdS)MsgIDzmsg-idFc0t||jzSr)rlineseprPs rrQz MsgID.fold[s4yy6>))rN)r7r`rar\rErQrlrrrrWs-JM*****rrceZdZdZdS) MessageIDz message-idNrvrlrrrr`sJJJrrceZdZdZdS)InvalidMessageIDzinvalid-message-idNrvrlrrrrds%JJJrrceZdZdZdS)HeaderheaderNrvrlrrrrhrzrrc~eZdZdZdZdZfdZfdZdZe dZ d fd Z dZ e d Z d ZxZS) TerminalTcht||}||_g|_|Sr)r__new__r\r!)clsrr\r"r%s rrzTerminal.__new__vs-wwsE**$  rcd|jjtSr4r5r9s rr8zTerminal.__repr__|s,t~68H8H8J8JKKKrcNt|jjdz|jzdS)N/)rUr%r7r\r1s rrXzTerminal.pprints' dn%+do=>>>>>rc*t|jSr)listr!r1s rr>zTerminal.all_defectssDL!!!rr'c d||jj|jt |jsdnd|jgS)Nz {}{}/{}({}){}r'z {})r6r%r7r\rr8r!)r"rTr%s rrZz Terminal._pps_&&  N # O GG    l BBB T\(B(B  rcdSrrlr1s rpop_trailing_wszTerminal.pop_trailing_wsrrcgSrrlr1s rrJzTerminal.commentss rc.t||jfSr)rr\r1s r__getnewargs__zTerminal.__getnewargs__s4yy$/**rr_)r7r`rarErcrbrr8rXrdr>rZrrJrrerfs@rrrpsMO LLLLL???""X"X+++++++rrc*eZdZedZdZdS)WhiteSpaceTerminalcdSrjrlr1s rrzWhiteSpaceTerminal.valuermrcdS)NTrlr1s rrBz!WhiteSpaceTerminal.startswith_fwsstrNr7r`rardrrBrlrrrrs< Xrrc*eZdZedZdZdS) ValueTerminalc|Srrlr1s rrzValueTerminal.values rcdS)NFrlr1s rrBzValueTerminal.startswith_fwssurNrrlrrrrs< Xrrc*eZdZedZdZdS)EWWhiteSpaceTerminalcdSrrlr1s rrzEWWhiteSpaceTerminal.valuesrrcdSrrlr1s rr2zEWWhiteSpaceTerminal.__str__srrN)r7r`rardrr2rlrrrrs< XrrceZdZdS)_InvalidEwErrorN)r7r`rarlrrrrs;;rrr=,zlist-separatorFr+zroute-component-markerz([{}]+)r'z[^{}]+z[\x00-\x20\x7F]c t|}|r,|jtj|t j|r.|jtjddSdS)Nz*Non-ASCII characters found in header token)_non_printable_finderr!rrNonPrintableDefectrrzr{)xtextnon_printabless r_validate_xtextrsJ*511NH V6~FFGGG U##; V: 8:: ; ; ; ; ;;;rcn t|d^}}g}d}d}tt|D]D}||dkr |rd}d}nd}|rd}n |||vrn!|||E|dz}d|d||dg|z|fS)NrFrTr') _wsp_splitterrangerrr0)rendcharsfragment remaindervcharsescapehad_qpposs r_get_ptext_to_endcharsrs)22Hy F F FS]]## C=D    FF c]h & & E hsm$$$$Ag 776??BGGXcdd^$4y$@AA6 IIrc |}t|dt|t|z d}||fS)Nfws)r)rr)rnewvaluers rget_fwsrsK||~~H U# >@@ @ABBioodA..OC) eABBi% 0 7 7 > >@@ @ WWY  F F aq Yq Y #!<<a00yDj4 399;;! &4 ,.. / / / BF GGI  E@'*z$*t2C'D'D$gtWW  !@@@ / 6 6rv > >@@ @@BJBGJg  " 7c>>!$--KE4 IIe    )$22 e]33 %wwy!!  " ?q$$ &4 <>> ? ? ? u9s F..9G'c t}|r|dtvr(t|\}}||:d}|dr t |d\}}d}t |dkr?|djdkr.|jtj dd}|r=t |d kr*|d jd krt|dd|d<||#t$rd}Yntj $rYnwxYwt|d ^}}|r1t|r|d^}}t%|d}t'|||d |}||S) NrTrutextrrz&missing whitespace before encoded wordFrrr')rtrrrrrrr\r!rrsrrrrrfc2047_matchersearch partitionrrr0)rrurKvalid_ewhave_wsrBrrs rget_unstructuredrKs),)**L (# 8s??"5>>LE5    & & &    D ! !  /w?? u|$$q((#B'2e;;$,33F4ND5F5FGGG"'5s<00144#B'2nDD+?(,e,5,5 R(##E***%# ! ! ! *    "(q11i  4..s33 4#ood33OC)c7++E""" ""Q (#R s"D D>-D>=D>cr t|d\}}}t|d}t|||fS)Nz()rH)rrrrrH_s r get_qp_ctextrsE -UD99OE5! ug . .EE %<rcr t|d\}}}t|d}t|||fS)NrrH)rrrrs r get_qcontentrsE-UC88OE5! % ) )EE %<rc t|}|s'tjd||}|t |d}t |d}t|||fS)Nzexpected atext but found '{}'atext)_non_atom_end_matcherrrr6rrrr)rmrs r get_atextrs e$$A ;% + 2 25 9 9;; ; GGIIE #e**++ E % ) )EE %<rc |ddkr'tjd|t}|dd}|r3|ddkr't |\}}|||r/|ddkr"|dt vrt|\}}n|dddkrd} t|\}}|j tj dd }n'#tj$rt |\}}YnwxYw|rNt|dkr;|d j d kr*|d j d krt|d d |d <nt |\}}|||r |ddk"|s0|j tj d||fS||ddfS)Nrrzexpected '"' but found '{}'rrrFz!encoded word inside quoted stringTrrrrz"end of header inside quoted string)rrr6rrrrrrr!rsrr\r)rbare_quoted_stringrKrs rget_bare_quoted_stringrsJ  Qx3% * 1 1% 8 8:: :)++ !""IE )qS#E** u!!%((( )E!HOO 8s??"5>>LE55 2A2Y$  H 3/66 u"*11&2L73939:::* 3 3 3+E22 uuu 3 7C 233a77&r*5>>*2.9^KK-A*2..7.7&r*(..LE5!!%(((+ )E!HOO, )"))&*D 0+2+2 3 3 3!5(( uQRRy ((sAD!D*)D*c" |r3|ddkr'tjd|t}|dd}|r|ddkrv|dtvrt |\}}n1|ddkrt |\}}nt|\}}|||r |ddkv|s0|j tj d||fS||ddfS)Nrrzexpected '(' but found '{}'rrzend of header inside comment) rrr6rrr get_commentrrr!rs)rrprKs rrrs7  9qS% ) 0 0 7 799 9iiG !""IE E!HOO 8s??"5>>LE55 1X__&u--LE55'..LE5u E!HOO v9 * , , - - -~ E!""I rc t}|ri|dtvrZ|dtvrt|\}}nt |\}}|||r|dtvZ||fSrA)r CFWS_LEADERrrrr)rrrKs rget_cfwsrs ::D E!H ++ 8s??"5>>LE55&u--LE5 E E!H ++ ;rcV t}|r6|dtvr't|\}}||t |\}}|||r6|dtvr't|\}}||||fSrA)rrrrr)r quoted_stringrKs rget_quoted_stringrs !NNM $q[(( uU###)%00LE5 $q[(( uU### % rcf t}|r6|dtvr't|\}}|||r6|dtvr't jd||dr; t|\}}n9#t j$rt|\}}YnwxYwt|\}}|||r6|dtvr't|\}}||||fS)Nrzexpected atom but found '{}'r) rrrr ATOM_ENDSrrr6rrr)rrrKs rget_atomr !sN 66D q[(( u E :qY&&% * 1 1% 8 8:: : ( ,+E22LE55& , , ,%U++LE555 , !'' uKK q[(( u E ;sB))!C  C c t}|r|dtvr'tjd||ry|dtvrjt |\}}|||r0|ddkr$|t|dd}|r|dtvj|dtur*tjdd|z||fS)Nrz8expected atom at a start of dot-atom-text but found '{}'r rrz4expected atom at end of dot-atom-text but found '{}')rr rrr6rrr>)r dot_atom_textrKs rget_dot_atom_textr <s MMM :E!H ))%'++16%==:: : E!HI-- '' uU###  U1X__   % % %!""IE E!HI-- RC%'#VCI..00 0 % rc t}|dtvr't|\}}|||dr; t |\}}n9#t j$rt|\}}YnwxYwt|\}}|||r6|dtvr't|\}}||||fS)Nrr) rrrrrrrrr )rdot_atomrKs r get_dot_atomrOs  yyH Qx; u 0 4+E22LE55& 4 4 4-U33LE555 4 )// u OOE q[(( u U?sA//!BBcb |dtvrt|\}}nd}|stjd|ddkrt |\}}nH|dt vr'tjd|t|\}}||g|dd<||fS)Nrz5Expected 'atom' or 'quoted-string' but found nothing.rz1Expected 'atom' or 'quoted-string' but found '{}')rrrrrSPECIALSr6r )rleaderrKs rget_wordrhs Qx;   E% CEE E Qx}}(// uu qX  %'77=ve}}FF F  u Hbqb %<rc t} t|\}}||nA#tj$r/|jtjdYnwxYw|r |dtvr|ddkrQ|t|jtj d|dd}n t|\}}nd#tj$rR|dtvr?t|\}}|jtj dnYnwxYw|||r|dtv||fS)Nzphrase does not start with wordrr zperiod in 'phrase'rzcomment found without atom) rxrrrrr!rs PHRASE_ENDSr>ObsoleteHeaderDefectrr)rryrKs r get_phrasers XXF0 u e  "000f8 -// 0 0 0 0 00 !E!HK// 8S== MM#    N ! !&"=$#&#& ' ' '!""IEE ' uu*   8{**#+E??LE5N))&*E4+6+6777777  MM% ! !E!HK//" 5=s"'9;A76A7*C==AEEc t}d}|dtvrt|\}}|s'tjd| t |\}}nh#tj$rV t|\}}n?#tj$r-|ddkr|dtvrt}YnwxYwYnwxYw||g|dd<| ||r|ddks|dtvrtt||z\}}|j dkr-|j tjdn,|j tjd||d< |jdn<#t&$r/|j tjdYnwxYw||fS) Nrz"expected local-part but found '{}'rinvalid-obs-local-partz >@@ @ #E** uu  "    #E??LE55&   Qx4E!H $;$;KKEEE  Hbqb e '%(D..E!HK$?$? 23z??U3J K K  $(@ @ @   % %f&@N'P'P Q Q Q Q   % %f&A>'@'@ A A A& 1 >(((( >>>!!&"@;#=#= > > > > >> u sHA00CBC9C CCCC F;;6G43G4c  t}d}|r|ddks|dtvr|ddkrU|r,|jt jd|t d}|dd}|ddkrb|t|dd|dd}|jt jd d}|r=|d jd kr,|jt jd  t|\}}d}n7#tj $r%|dtvrt|\}}YnwxYw|||r|ddk|dtv|djd ks"|djd kr=|djd kr,|jt jd|d jd ks"|d jd kr=|djd kr,|jt jd|jrd|_||fS)NFrrr zinvalid repeated '.'Trmisplaced-specialz/'\' character outside of quoted-string/ccontentrr=zmissing '.' between wordsrz!Invalid leading '.' in local partrz"Invalid trailing '.' in local partr) r1rr!rrrsr>rr\rrrr)rrlast_non_ws_was_dotrKs rrrs!^^N %U1Xt^^uQx{'B'B 8s??" -&--f.H*/,/,---  ! !# & & &"& !""IE  1Xt^^  ! !-a0C#E#E F F F!""IE  " ) )&*DB+D+D E E E"'    .nR0;uDD  " ) )&*D++-+- . . . +#E??LE5"'  & + + +Qx{**#E??LE555 + e$$$7 %U1Xt^^uQx{'B'B8 q$-- 1  (& 0 0 1  (% / /%%f&@ /'1'1 2 2 2r%.. 2  )6 1 1 2  )5 0 0%%f&@ 0'2'2 3 3 3=$<! 5  sE1F F c t|d\}}}t|d}|r,|jt jdt |||fS)Nz[]rHz(quoted printable found in domain-literal)rrr!rrrr)rrHrs r get_dtextr%sz 2%>>E5& % ) )E 9 V8 688 9 9 9E %<rc|rdS|tjd|tdddS)NFz"end of input inside domain-literal]domain-literal-endT)rrrsr)rdomain_literals r_check_for_early_dl_endr*s] u&4,..///--ABBCCC 4rcN t}|dtvr't|\}}|||st jd|ddkr't jd||dd}t||r||fS|tdd|dtvr't|\}}||t|\}}||t||r||fS|dtvr't|\}}||t||r||fS|ddkr't jd||tdd |dd}|r6|dtvr't|\}}||||fS) Nrzexpected domain-literal[z6expected '[' at start of domain-literal but found '{}'rzdomain-literal-startr'z4expected ']' at end of domain-literal but found '{}'r() rErrrrrr6r*rrrr%)rr)rKs rget_domain_literalr-"s;#__N Qx; ue$$$ A%&?@@@ Qx3%'!!'00 0 !""IEun55%u$$--CDDEEE Qx3u~~ ue$$$U##LE5%   un55%u$$ Qx3u~~ ue$$$un55%u$$ Qx3%'!!'00 0--ABBCCC !""IE %q[(( ue$$$ 5  rc t}d}|dtvrt|\}}|s'tjd||ddkr5t |\}}||g|dd<||||fS t|\}}n'#tj$rt|\}}YnwxYw|r |ddkrtjd||g|dd<|||r|ddkr|j tj d|dj dkr |d|dd<|rc|ddkrW|tt|d d\}}|||r |ddkW||fS) Nrzexpected domain but found '{}'r,r+zInvalid Domainr z(domain is not a dot-atom (contains CFWS)rr)rrrrrr6r-rrr r!rr\r>)rrrrKs r get_domainr/IsXXF F Qx;   <% , 3 3E : :<< < Qx3)%00 u  E"1"I eu}'#E** uu  "''' uuu' 8qS%&6777 Hbqb  MM% !qSf9 688 9 9 9 !9 : - -q F111I !aC MM#   #E!""I..LE5 MM%  !aC 5=sB11!CCc t}t|\}}|||r |ddkr0|jt jd||fS|t ddt|dd\}}||||fS)Nrr+z#addr-spec local part with no domainaddress-at-symbolr)r#r rr!rrsrr/)rrrKs r get_addr_specr2os I!%((LE5 U  E!HOO  !; 1"3"3 4 4 4% ]3(;<<===eABBi((LE5 U e rc t}|r|ddks|dtvr|dtvr(t|\}}||n0|ddkr$|t|dd}|r|ddku|dtv|r |ddkr't jd||tt|dd\}}|||r|ddkr|t|dd}|sn|dtvr't|\}}|||ddkrI|tt|dd\}}|||r |ddk|st jd|ddkr't jd||tdd ||ddfS) Nrrrr+z(expected obs-route domain but found '{}'z%end of header while parsing obs-route:z4expected ':' marking end of obs-route but found '{}'zend-of-obs-route-marker) rrrr ListSeparatorrrr6RouteComponentMarkerr/r)r obs_routerKs r get_obs_router8s  I U1Xs]]eAh+&=&= 8{ " "#E??LE5   U # # # # 1X__   ] + + +!""IE U1Xs]]eAh+&=&= FE!HOO% 6 = =e D DFF F )***eABBi((LE5 U  $E!HcMM'''abb    8{ " "#E??LE5   U # # # 8s??   1 2 2 2%eABBi00LE5   U # # #  $E!HcMM O%&MNNN Qx3%(''-ve}}66 6 ]3(ABBCCC eABBi rc( t}|dtvr't|\}}|||r |ddkr't jd||tdd|dd}|ddkr]|tdd|jt j d|dd}||fS t|\}}n#tj$r t|\}}|jt j d n:#tj$r(t jd |wxYw||t|\}}YnwxYw|||r|ddkr |dd}n,|jt j d |tdd|r6|dtvr't|\}}||||fS) Nrzangle-addr-endznull addr-spec in angle-addrz*obsolete route specification in angle-addrz.expected addr-spec or obs-route but found '{}'z"missing trailing '>' on angle-addr) rrrrrrr6rr!rsr2r8r)r angle_addrrKs rget_angle_addrr=sJ Qx; u%   @E!HOO% 0 7 7 > >@@ @mC);<<=== !""IE Qx3--=>>???!!&"< *#,#, - - -abb 5   ,$U++ uu  " , , , P(//LE5   % %f&A<'>'> ? ? ? ?& P P P)@GGNNPP P P %   $U++ uuu ,e 3qSabb !!&"< 0#2#2 3 3 3mC)9::;;; !q[(( u%   u s*D%%G5>E43G47F++*GGc t}t|\}}||dd|jdd|_||fSr)r3rrIr!)rrrKs rget_display_namer?s]==Le$$LE5aaa!!! =+L  rcj t}d}|dtvr;t|\}}|s'tjd||ddkr|dt vr'tjd|t|\}}|s'tjd|||g|ddd<d}||t|\}}||g|dd<||||fS)Nrz!expected name-addr but found '{}'r:) rrrrrr6rr?rr=)r name_addrrrKs r get_name_addrrBsf I F Qx;   D)3::6BBDD D Qx3 8{ " ")3::5AACC C'.. u C)3::5AACC C  "8E!HRaRLF!%((LE5 Hbqb  U e rc t} t|\}}nc#tj$rQ t |\}}n:#tj$r(tjd|wxYwYnwxYwt d|jDrd|_| |||fS)Nzexpected mailbox but found '{}'c3JK|]}t|tjVdSr)r?rrsr*s rr-zget_mailbox..sC 3 3 a3 4 4 3 3 3 3 3 3rr) rrBrrr2r6anyr>r\r)rrrKs r get_mailboxrFs iiGA$U++ uu  "AAA A(//LE55& A A A)188??AA A A5A   3 3 % 1 3 3 333/. NN5 E>&$BAB7A>>BBc, t}|r|d|vrv|dtvr4|t|dd|dd}n't |\}}|||r |d|vv||fS)Nrr"r)rrrrr)rrinvalid_mailboxrKs rget_invalid_mailboxrJs %&&O *E!HH,, 8{ " "  " "=q1D$F$F G G G!""IEE%e,,LE5  " "5 ) ) ) *E!HH,, E !!rc t}|rd|ddkrW t|\}}||n}#tj$rjd}|dt vrt |\}}|r |ddvrB|||jtjdnt|d\}}||g|dd<|||jtj dn|ddkr-|jtjdn^t|d\}}||g|dd<|||jtj dYnwxYw|rm|ddvrc|d}d|_ t|d\}}| ||jtj d|r0|ddkr$|t|d d}|r |ddkW||fS) Nr;z,;zempty element in mailbox-listzinvalid mailbox in mailbox-listrrrr)rrFrrrrrr!rrJrsr\rIr5)r mailbox_listrKrrs rget_mailbox_listrN*s ==L (E!HOO 8&u--LE5    & & & && 8 8 8FQx;&& (  <aD 0 0 ''/// (//0K71919::::$7ud#C#CLE5)%+Hbqb  ''... (//0J91;1;<<<<qS$++F,G3-5-56666 35$?? u%!'E"1"I##E***$++F,F5-7-7888/ 82  4U1XT))#2&G!2G .ud;;LE5 NN5 ! ! !  ' '(B1)3)3 4 4 4  U1X__    . . .!""IEQ (E!HOOR  s'A E7GGc t}|s0|jtjd||fSd}|r|dt vr~t |\}}|sE|jtjd||||fS|ddkr||||fSt|\}}t|j dkr\|||| ||jtj d||fS||g|dd<||||fS)Nzend of header before group-listrzend of header in group-listrLzgroup-list with empty entries) rr!rrrsrrrNrrrIr)r group_listrrKs rget_group_listrQcsJ !!!&"< -#/#/ 0 0 05  F %q[((   %   % %f&@-'/'/ 0 0 0   f % % %u$ $ 8s??   f % % %u$ $#E**LE5 5 ""     f % % %%   !!&"= +#-#- . . .5   Hbqb e u rc t}t|\}}|r |ddkr'tjd||||t dd|dd}|r;|ddkr/|t dd||ddfSt|\}}|||s-|jtj dn3|ddkr'tjd ||t dd|dd}|r6|dtvr't|\}}||||fS) Nrr4z8expected ':' at end of group display name but found '{}'zgroup-display-name-terminatorrrLzgroup-terminatorzend of header in groupz)expected ';' at end of group but found {}) rr?rrr6rrrQr!rsrr)rrrKs r get_grouprSs GGE#E**LE5 9E!HOO%'**0&--99 9 LL LLs$CDDEEE !""IE  qS ]3(:;;<<<eABBi!%((LE5 LL G V7 $&& ' ' ' ' qS% 7 > >u E EGG G LLs$677888 !""IE q[(( u U %<rc@ t} t|\}}nc#tj$rQ t |\}}n:#tj$r(tjd|wxYwYnwxYw||||fS)Nzexpected address but found '{}')rrSrrrFr6r)rrrKs r get_addressrUs iiGA '' uu  "AAA A&u--LE55& A A A)188??AA A A5A  NN5 E>rGc t}|rm t|\}}||n#tj$r}d}|dt vrt |\}}|r |ddkrC|||jtjdnt|d\}}||g|dd<|t|g|jtj dn|ddkr-|jtjdnlt|d\}}||g|dd<|t|g|jtj dYd}~nd}~wwxYw|ru|ddkri|dd}d|_ t|d\}}| ||jtj d|r$|t|dd}|m||fS) Nrrz"address-list entry with no contentzinvalid address in address-listzempty element in address-listrrr)rrUrrrrrr!rrJrrsr\rIr5)r address_listrKerrrrs rget_address_listrYs==L ( 8&u--LE5    & & & && 8 8 8FQx;&& (  <aC ''/// (//0K<1>1>????$7uc#B#BLE5)%+Hbqb  ''(8(8999 (//0J91;1;<<<<qS$++F,G3-5-56666 35#>> u%!'E"1"I##GUG$4$4555$++F,F5-7-7888/ 82  4U1X__#2&q)G!2G .uc::LE5 NN5 ! ! !  ' '(B1)3)3 4 4 4      . . .!""IEQ (R  s'=G FGGcH t}|s'tjd||ddkr'tjd||t dd|dd}t |\}}|||r |ddkr'tjd||t dd ||ddfS) Nz'expected no-fold-literal but found '{}'rr,z;expected '[' at the start of no-fold-literal but found '{}'zno-fold-literal-startrr'z9expected ']' at the end of no-fold-literal but found '{}'zno-fold-literal-end)r!rrr6rrr%)rno_fold_literalrKs rget_no_fold_literalr\s4#ooO E% 5 < ' on msg-id)rrrrrrr6rr rr!rrsr\r/)rmsg_idrKes r get_msg_idr`s WWF q[(( u e >E >D  E  7EE  E  HK,H?>K?K>J K 7KK K KKKc t} t|\}}|||r?|jt jd|ny#tj$rg}t|}t|}|jt jd|Yd}~nd}~wwxYw|S)NzUnexpected {!r}zInvalid msg-id: {!r}) rr`rr!rrsr6rrr)r message_idrKexs rparse_message_idrdUs#J 2!%(( u%     2   % %f&@!((//'1'1 2 2 2  "KKK ''%e,, !!  &'='D'DR'H'H I I K K K K K K K KK s'A::C0 AC++C0c t}|s.|jtjd|S|dt vrUt |\}}|||s,|jtjdd}|rM|ddkrA|dt vr2||dz }|dd}|r|ddkr|dt v2|sc|jtjd ||t|dn7t||_ |t|d |r6|dt vr't |\}}|||r |ddkrZ|j ,|jtjd |r#|t|d|S|tdd |dd}|r6|dt vr't |\}}|||s5|j ,|jtjd |Sd}|r5|dt vr&||dz }|dd}|r|dt v&|sc|jtjd ||t|dn7t||_ |t|d |r6|dt vr't |\}}|||rO|jtjd |t|d|S)Nz%Missing MIME version number (eg: 1.0)rz0Expected MIME version number but found only CFWSr'r rz1Expected MIME major version number but found {!r}rdigitsz0Incomplete MIME version; found only major numberzversion-separatorz1Expected MIME minor version number but found {!r}z'Excess non-CFWS text after MIME version)rKr!rrHeaderMissingRequiredValuerrisdigitrsr6rintrLrM)r mime_versionrKrfs rparse_mime_versionrkqs ==L ##F$E 3%5%5 6 6 6 Qx; uE""" E  ' '(IB)D)D E E E F E!HOOa (C(C%(abb  E!HOOa (C(C >>  =##F$> ? F Fv N N%P%P Q Q QM&'::;;;; [[ M&(;;<<< #q[(( uE""" E!HOO   )  ' '(BB)D)D E E E  ?    eW = = > > > c+>??@@@ !""IE #q[(( uE"""    )  ' '(BB)D)D E E E F E!HK//%(abb  E!HK// >>  =##F$> ? F Fv N N%P%P Q Q QM&'::;;;; [[ M&(;;<<< #q[(( uE""" ;##F$> 5%7%7 8 8 8M%99::: rc4 t}|r|ddkrx|dtvr4|t|dd|dd}n't |\}}|||r |ddkx||fS)NrrLr"r)rZrrrr)rinvalid_parameterrKs rget_invalid_parameterrns )** ,E!HOO 8{ " "  $ $]583F&H&H I I I!""IEE%e,,LE5  $ $U + + + ,E!HOO e ##rc t|}|s'tjd||}|t |d}t |d}t|||fS)Nzexpected ttext but found '{}'ttext)_non_token_end_matcherrrr6rrrr)rrrps r get_ttextrrs u%%A ;% + 2 25 9 9;; ; GGIIE #e**++ E % ) )EE %<rc t}|r6|dtvr't|\}}|||r6|dtvr't jd|t|\}}|||r6|dtvr't|\}}||||fSNrzexpected token but found '{}') rrrr TOKEN_ENDSrrr6rr)rmtokenrKs r get_tokenrwsWWF q[(( u e ;qZ''% + 2 25 9 9;; ;U##LE5 MM% q[(( u e 5=rc t|}|s'tjd||}|t |d}t |d}t|||fS)Nz expected attrtext but found {!r}r`)_non_attribute_end_matcherrrr6rrrrrrr`s r get_attrtextr{s #5))A >% . 5 5e < <>> >wwyyH #h--.. !EXz22HH U?rc t}|r6|dtvr't|\}}|||r6|dtvr't jd|t|\}}|||r6|dtvr't|\}}||||fSrt) r]rrrATTRIBUTE_ENDSrrr6r{rr^rKs r get_attributer s I  q[(( u ;q^++% + 2 25 9 9;; ;&&LE5 U  q[(( u e rc t|}|s'tjd||}|t |d}t |d}t|||fS)Nz)expected extended attrtext but found {!r}extended-attrtext)#_non_extended_attribute_end_matcherrrr6rrrrrzs rget_extended_attrtextr s ,E22A G% 7 > >u E EGG GwwyyH #h--.. !EX':;;HH U?rc t}|r6|dtvr't|\}}|||r6|dtvr't jd|t|\}}|||r6|dtvr't|\}}||||fSrt) r]rrrEXTENDED_ATTRIBUTE_ENDSrrr6rr~s rget_extended_attributer- s I  q[(( u ;q444% + 2 25 9 9;; ;(//LE5 U  q[(( u e rc t}|r |ddkr'tjd||t dd|dd}|r|ds'tjd|d}|rK|dr1||dz }|dd}|r|d1|ddkr2|dkr,|jtjd t||_ |t |d ||fS) Nr*zExpected section but found {}zsection-markerrz$Expected section number but found {}r'0z'section number has an invalid leading 0rf) rdrrr6rrrhr!rsrirT)rrerfs r get_sectionrC siiG 0E!HOO%&E&L&L(-'/'/00 0 NN=&677888 !""IE @a((**@%'117@@ @ F E!H$$&&%(abb  E!H$$&&ayCFcMMv99 ; ; < < <[[GN NN=22333 E>rc t}|stjdd}|dtvrt |\}}|s'tjd||ddkrt |\}}nt|\}}||g|dd<||||fS)Nz&Expected value but found end of stringrz Expected value but found only {}r) rgrrrrr6rrr)rvrrKs r get_valuera s A P%&NOOO F Qx;   @%'006v@@ @ Qx3(// uu-e44 u Hbqb HHUOOO e8OrcT t}t|\}}|||r |ddkrC|jt jd|||fS|ddkr t|\}}d|_||n#tj $rYnwxYw|st j d|ddkr4|tdd|dd}d|_ |dd krt j d |td d |dd}d}|r6|dtvr't|\}}||d}|}|j r|r|dd krt|\}}|j}d }|jdkr4|r|ddkrd}nBt#|\}} | r| ddkrd}n t%|\}} | sd}n#YnxYw|r_|jt jd|||D]} | jdkr g| dd<| }n|}n.d}|jt jd|r|ddkrd}nt)|\}}|j r |jdkrW|r |ddkr||||}||fS|jt jd|sI|jt jd|||||fSnC|>|D]} | jdkrn| jdk|| | j|_|ddkr't j d||tdd|dd}|rt|ddkrht#|\}}|||j|_|r |ddkr't j d||tdd|dd}|t1} |rr|dt2vrt5|\}}n9|dd krtd d}|dd}nt7|\}}| ||r| }nt)|\}}||||}||fS)NrrLz)Parameter contains name ({}) but no valuerTzIncomplete parameterzextended-parameter-markerr=zParameter not followed by '='parameter-separatorrF'z5Quoted string value for extended parameter is invalidrzZParameter marked as extended but appears to have a quoted string value that is non-encodedzcApparent initial-extended-value but attribute was not marked as extended or was not initial sectionz(Missing required charset/lang delimitersrr`z=Expected RFC2231 char/lang encoding delimiter, but found {!r}zRFC2231-delimiterz;Expected RFC2231 char/lang encoding delimiter, but found {}DQUOTE)rOrrr!rrsr6rrSrrrXrrrrrUr{rr\rrrrrgrrr) rrrKrrappendtoqstring inner_value semi_validrtrs r get_parameterrw s KKE ''LE5 LL E!HOO V79%%+VE]]44 5 5 5e| Qx3 &u--LE5"EO LL    &    D  B)*@AA A 8s?? LLs,GHH I I I!""IE!EN Qx3%&EFFF LLs$9::;;; !""IE F q[(( u UIH ~$<%$ FU1A55 aC OOE " " "$!%<  V7 DEE F F F  V7 688 9 9 9  %<      <#666E7 LJ & & OOA   GEM 8s??)+FFLfUmmUU U c+>??@@@abb   KU1X__'..LE5 OOE " " "EJ KE!HOO-/<??@@@abb  GG Qx3&u~~ uuqS%c844abb +E22 u HHUOOO  '' u OOE %<s.CCC-IIc$ t}|r t|\}}||n#tj$r }d}|dt vrt |\}}|s|||cYd}~S|ddkrD||||jtjdnpt|\}}|r|g|dd<|||jtjd |Yd}~nd}~wwxYw|r|ddkru|d}d|_ t|\}}| ||jtjd ||r-|tdd|d d}||S) NrrLzparameter entry with no contentzinvalid parameter {!r}rr[z)parameter with invalid trailing text {!r}rr)rjrrrrrrr!rsrnr6r\rIr)rmime_parametersrKrXrrs rparse_mime_parametersr sl %&&O # =(//LE5  " "5 ) ) ) )& = = =FQx;&& (  '&&v...&&&&&&&Qx3%#**6222'..v/I507078888 5U;; u)!'E"1"I&&u---'..v/I,33E::0<0<===# =&  LU1X__$B'E2E 077LE5 LL     # * *6+E;BB5II,K,K L L L    " "=6K#L#L M M M!""IEG #H s"'=E ;EECEEc |r|ddkrx|dtvr4|t|dd|dd}n't|\}}|||r |ddkx|sdS|tdd|t |dddS)NrrLr"rr)rrrrr) tokenlistrrKs r_find_mime_parametersr9 s $E!HOO 8{ " "   ]585HII J J J!""IEE%e,,LE5   U # # # $E!HOO  ]3(=>>??? *595566666rc t}d}|s.|jtjd|S t |\}}nf#tj$rT|jtjd|t|||cYSwxYw|||r |ddkr@|jtjd|rt|||S|j |_ |tdd|dd} t |\}}nf#tj$rT|jtjd |t|||cYSwxYw|||j |_|s|S|dd krU|jtjd ||` |`t|||S|td d |t!|dd|S) NFz"Missing content type specificationz(Expected content maintype but found {!r}rrzInvalid content typezcontent-type-separatorrz'Expected content subtype but found {!r}rLz 022 3 3 3  '' uu  " V7 6 = =e D DFF G G GeU+++   LL E!HOO V7 "$$ % % %  0 !% / / / [&&((..00EN LLs$<==>>> !""IE '' uu  " V7 5 < |dr6|ddtvr!|dd}|ddd|d<|S)Nr'r)r)lineswsps r_steal_trailing_WSP_if_existsr sS C #r#uRy}33Bim"IcrcNb Jrc |jp tj}|jrdnd}dg}d}d}d}d}t dd} t |} | r| d} | | ur|dz}"t| } |s@| jdvrt |  }nt |  } | ||} n5#t$r(td | jDrd } nd} d }YnwxYw| jd krt!| ||||r|s| jsd}d}| jr| | dt)|j }|j|vr_t)||t)|dz kr$t-|}|||dxx|z cc<t1| dst | | z} d}| jr;|| |kr|d ks |dkr| dkrd}t3| |||| j| }| }d}d}d}t)| |t)|dz kr|dxx| z cc<7| jrWt)| dz|krAt-|}|s| r||| zd}t1| dsrt | }| jdkr0t9ddgd|Dzt9ddgz}| js|dz }|| || z} | jr|s| d| d }:t-|}|s| r||| zn|dxx| z cc<| |j||jzS)Nutf-8rQr'rFwrap_as_ew_blockedr)rHrc3JK|]}t|tjVdSr)r?rr{r*s rr-z%_refold_parse_tree.. sC..a!>??......r unknown-8bitTrkrMrrrrrHcHg|]}tt|d S)rH)rr)r+ps rrrz&_refold_parse_tree..C s;(((##4Q#7#7AA(((r)max_line_lengthsysmaxsizeutf8rrr5rr\ SPECIALSNL isdisjointNLSETrryrEr>_fold_mime_parametersrErbrQrrrrr] _fold_as_ewrcrBrinsertr0) parse_treerNmaxlenrorlast_ew last_charsetr want_encodingend_ew_not_allowedrrFtstrr encoded_partnewlinenewpartss rrOrO s # 2s{F +5ww:H DEGLM!"&:;;   E syy|| % % % ! #  4yy ;"444$.$9$9$$?$? ? %*$4$4T$:$: :  ! KK ! ! !GG! ! ! !.. ,..... "(" MMM ! ?/ / / !$vx @ @ @  ) &!3) &% ! % ' !#'99F9#;#;Q>Q=Q  u % % 66s>C/DDcz |B|r@tt|d|d|z}|dd||d<|dtvr]|d}|dd}t|d|kr"|t ||dxx|z cc<d}|dtvr|d}|dd}|t|dn|}|dkrdn|} t| dz} | dz|krt jd|r|t|dz } | | z } | dkr|d ;|d| } tj | | }t|| z }|dkr8| dd} tj | | }t|| z }|dk8|dxx|z cc<|t| d}|r*|d t|d}||dxx|z cc<|r|ndS) Nrrrr'rQrz3max_line_length is too small to fit an encoded wordrk)r) rrrrrrrrrr) to_encoderrrrcr leading_wsp trailing_wsp new_last_ew encode_as chrome_lenremaining_space text_spaceto_encode_word encoded_wordexcesss rrrZ s 1 U2Ywxx09< = =?? "Ihwh'b |s l abbM b NNf $ $ LL6u== > > > b [ L} } crcN $+O#eBi...K"j00gIY!#JQ6!!% ACC C ) 3uRy>>1$z1 ?? LL    ";J;/z.)DDD \""_4qjj,CRC0N:niHHHL&&8F qjj b \! c.11223  ) LL   eBi..K+ ), "IIIIII, 6;;$6rc  |jD]O\}}|dds|dxxdz cc<|}d} ||d}n-#t$r d}t j|rd}d}nd}YnwxYw|r:tj |d | } d ||| } n#d |t|} t|dt| zd z|kr|ddz| z|d<+t| dz|kr| d| z[d} |dz} |rt|tt| zdzt| z} || dzkrd}|| z dz x}} |d|}tj |d | } t| |krn|d z}F| d || | | d } | d z } ||d}|r|dxxdz cc<|QdS)NrrLstrictFTrrnrr')saferz {}*={}''{}rrrkrrz''r&Nz {}*{}*={}{})r}r(rarryrrzrtrurr6rrrr)rFrrror~rr error_handlerencoding_required encoded_valuerre extra_chromer splitpointmaxcharspartials rrr s{:!:! e Ry!!**3//  "III III  " LL " " " %  ! " " " $ $U++ "( 1 !  "  ="L..B}/66M&&tWmDDDD>>$ U(;(;<>CII % )F 2 2b C$.E"I  YY]f $ $ LLt $ $ $ ~  !TSW%6%66:S=N=NNJa'' $*Z$7!$; ;J   , & 2 2"]!3!<!< }%%11a   LL..g|]<< = = =L qLG*++&E !b S - !I:!:!sA))'BB)r)rerrtstringroperatorremailrrrrr,rrrr r-r TSPECIALSru ASPECIALSr}rrrrrcompileVERBOSE MULTILINErrrrhrtrxr|rrrrrrrrrrrrrrrrrrrrr!r#r1r3r:rErKrOrZr]rdrgrjrrrrrrrrrrrrrrrrr>r5rErbr6r6r0rrrmatchrfindallrrqryrrrrrrrrrrrrrr r rrrr rr%r*r-r/r2r8r=r?rBrFrJrNrQrSrUrYr\r`rdrkrnrrrwr{rrrrrrrrrrrrrOrrrlrrrsCJ ''''''  c%jjCCHHn 3  sN CCHH$ U# E "cc#hh . _ E " S(33s883 t    @@@  "*Z",  @,@,@,@,@,@,@,@,FDDDDD)DDD     I   Y9"9I )#####9###6 - - - - -| - - -!4CCCCC)CCC&%%%%%i%%%2 ? ? ? ? ?) ? ? ?%%%%% %%%"$$$$$I$$$*"""""y"""6 DDDDDDyDDD!!!!!i!!!6;;;;;Y;;;.....Y...i) I yB9 '!'!'!'!'!&'!'!'!T!!!!! !!!H     I    ) 8%%%%%y%%% ##### ###i     I   S.S.S.S.S.YS.S.S.l     y   *1 i ) *****I***&&&&&y&&&Y(+(+(+(+(+s(+(+(+VH-<<<<#I$4$4 BIbggj!!""%$%$%%%*'RZ (8(8 BIbggn%%&&)()())).&0bj1A1A BIbgg-..//2121'2'227$;;;JJJ<   ////bAAAF"    ))))))V2      $6   &2   D$$$L%%%N-!-!-!^(%!%!%!N$$$L ' ' ' R,,,\   <*"""$666r###J<:444n&&&,BBBJ8BBBH$$$$&.&.$,<,LLL\222h777 777r<^B7B7B7H?7?7?7BI!I!I!I!I!r