nHd^< ddlZddlZddlZddlZddlZddlZddlZddlZddl Z ddl m Z gdZ dZdZdZdZdZd Zeejjd ejjDZd Zd Zejd jZejdjZ ejdZ!ejdZ"hdZ#d:dZ$Gddej%j&Z'dZ(e'fdZ)Gddej*Z+GddZ, ddl-Z-Gdde,Z.e /dn #e0$rYnwxYwGdde1Z2Gd d!e2Z3Gd"d#e2Z4Gd$d%e2Z5Gd&d'e2Z6Gd(d)e2Z7Gd*d+e2Z8Gd,d-e2Z9Gd.d/e9Z:Gd0d1e9Z;Gd2d3e9Z<Gd4d5e2Z=Gd6d7e2Z>Gd8d9e?e=Z@e2ZAdS);N)urlsplit) HTTPResponseHTTPConnection HTTPException NotConnectedUnknownProtocolUnknownTransferEncodingUnimplementedFileModeIncompleteRead InvalidURLImproperConnectionStateCannotSendRequestCannotSendHeaderResponseNotReady BadStatusLine LineTooLongRemoteDisconnectederror responsesPiUNKNOWNIdlezRequest-startedz Request-sentci|] }||j S)phrase).0vs 2/opt/alt/python311/lib64/python3.11/http/client.py rls G G GQQ G G Gids[^:\s][^:\r\n]*s\n(?![ \t])|\r(?![ \t\n])z[- ]z[-]>PUTPOSTPATCHdatac  |dS#t$r[}t|j|j|j|j|d||j|jdd|ddd}~wwxYw)Nlatin-1z (z.20z) is not valid Latin-1. Use z9.encode('utf-8') if you want to send it encoded in UTF-8.)encodeUnicodeEncodeErrorencodingobjectstartendtitle)r%nameerrs r_encoder1sF E{{9%%% EEE L J I GZZ\\\\4 #' 12222DDD : ;;AE EEs A=AA88A=ceZdZdZdS) HTTPMessagec: |dz}t|}g}d}|D]Z}|d||krd}n|ddsd}|r||[|S)N:r)lowerlenkeysisspaceappend)selfr/nlsthitlines rgetallmatchingheadersz!HTTPMessage.getallmatchingheaderss zz||c! IIIIKK ! !DBQBx~~4''"1"X%%''  ! 4    r N)__name__ __module__ __qualname__rArr rr3r3s#r r3c* g} |tdz}t|tkrtd||t|t krt dt z|dvrn|S)NTr6 header linezgot more than %d headers  r )readline_MAXLINEr8rr; _MAXHEADERSr)fpheadersr@s r _read_headersrOs G{{8a<(( t99x  m,, ,t w<<+ % % :[ HII I ( ( (  Nr c t|}d|d}tj||S)Nr iso-8859-1)_class)rOjoindecodeemailparserParserparsestr)rMrRrNhstrings r parse_headersrZs\BGhhw&&|44G <  f  - - 6 6w ? ??r ceZdZd"dZdZdZdZdZfdZfd Z d Z d Z d#d Z d Z dZdZdZd#dZdZdZdZd$dZd$dZd$fd ZdZdZdZd#dZdZdZdZd Zd!Z xZ!S)%rrNc|d|_||_||_dx|_|_t |_t |_t |_ t |_ t |_ t |_ t |_ dS)Nrb)makefilerM debuglevel_methodrNmsg_UNKNOWNversionstatusreasonchunked chunk_leftlength will_close)r<sockr_methodurls r__init__zHTTPResponse.__init__sl--%%$ #'& tx     " "r ct|jtdzd}t |tkrt d|jdkrtdt||std | dd\}}}n?#t$r2 | dd\}}d}n#t$rd}YnwxYwYnwxYw| d s#| t| t|}|d ks|d krt|n#t$rt|wxYw|||fS) Nr6rQz status linerzreply:z-Remote end closed connection without responsezHTTP/r!i)strrMrJrKr8rr_printreprrsplit ValueError startswith _close_connrint)r<r@rcrdres r _read_statuszHTTPResponse._read_statuss47##HqL11<@@ t99x  m,, , ?Q   (DJJ ' ' ' 2%&122 2 &*jjq&9&9 #GVVV    "&**T1"5"5      !!'** &      %% % &[[F||v||#D))) , & & &%% % &&&sBB-- C)8CC) C# C)"C##C)(C)%*EE*c|jdS |\}}}|tkrn1t|j}|jdkrt d|~U|x|_|_| |_ |dvrd|_ n,| drd|_ nt|t|jx|_|_|jdkr3|jD]\}}t d|d z||jd }|r'|d krd|_d|_nd |_||_d|_|jd }|rF|js? t1||_|jdkrd|_n#t2$r d|_Yn wxYwd|_|t4ks%|t6ksd|cxkrdks n|jdkrd|_|js|js|j d|_dSdSdSdS)NTrzheaders:)zHTTP/1.0zHTTP/0.9 zHTTP/1. header:r5transfer-encodingrfFcontent-lengthr!HEAD)rNryCONTINUErOrMr_rrcoderdstriprercrvrrZraitemsgetr7rfrg _check_closerirhrxru NO_CONTENT NOT_MODIFIEDr`) r<rcrdreskipped_headershdrvaltr_encrhs rbeginzHTTPResponse.begin7s < # F &*&7&7&9&9 #GVV!!+DG44O""j/222 #)( DKllnn . . .DLL    * * +DLL!'** *"/"8"88 tx ?Q   L..00 1 1SisC0000!!"566  !fllnn 11DL"DOO DL++-- !!"233  $,  '!&kk ;??"&DK  # # #"  # DK j Fl$:$: 6    C     LF " "DK  #  # K "DOOO # # # #  s+GG&%G&c\|jd}|jdkr|rd|vrdSdS|jdrdS|rd|vrdS|jd}|rd|vrdSdS)N connectionr|closeTFz keep-alivezproxy-connection)rNrrcr7)r<connpconns rrzHTTPResponse._check_closes| -- <2   4::<<//t5 <  L ) ) 5  LDJJLL005   !344  \U[[]]225tr cJ|j}d|_|dSN)rMr)r<rMs rrwzHTTPResponse._close_conns! W  r c t|jr|dSdS#|jr|wwxYwr)superrrMrwr< __class__s rrzHTTPResponse.closesl # GGMMOOOw #  """"" # #tw #  """" #s AA ct|jr|jdSdSr)rflushrMrs rrzHTTPResponse.flushs;   7  GMMOOOOO  r c dS)NTrr<s rreadablezHTTPResponse.readables !tr c |jduSr)rMrs risclosedzHTTPResponse.iscloseds/w$r c |jdS|jdkr|dS|jr||S||j||jkr|j}|j|}|s|r|n?|j8|xjt|zc_|js||S|j|j}nF ||j}n##t$r|wxYwd|_||S)Nr rr) rMr`rwrf _read_chunkedrhreadr8 _safe_readr )r<amtss rrzHTTPResponse.readspM 7?3 <6 ! !      3 < +%%c** * ?{&3+<+<k S!!A ' '  """"( s1vv% {'$$&&&H{"GLLNN 44AA%$$&&&       Hs 9D D4c |jdS|jdkr|dS|jr||S|j4t ||jkrt|d|j}|j|}|s|r|n2|j+|xj|zc_|js||S)Nrr) rMr`rwrf_readinto_chunkedrhr8 memoryviewreadinto)r<br=s rrzHTTPResponse.readintos  7?1 <6 ! !      1 < -))!,, , ; "1vv ##qMM!DK-0 G  Q   #Q #        [ $ KK1 KK; #  """r cF|jtdz}t|tkrt d|d}|dkr |d|} t |dS#t$r|wxYw)Nr6z chunk size;r) rMrJrKr8rfindrxrurw)r<r@is r_read_next_chunk_sizez"HTTPResponse._read_next_chunk_size sw1 -- t99x  l++ + IIdOO 668D tR==             s 0B B c |jtdz}t|tkrt d|sdS|dvrdST)NTr6z trailer linerG)rMrJrKr8rr<r@s r_read_and_discard_trailerz&HTTPResponse._read_and_discard_trailersd 7##HqL11D4yy8##!.111 ,,, r c|j}|s||d |}n#t$rt dwxYw|dkr*||d}||_|S)Nror r)rgrrrur rrw)r<rgs r_get_chunk_leftzHTTPResponse._get_chunk_left*s _  )%""" *!7799  * * *$S))) *Q..000  """! (DOs 7Acg} |}|nr|9||kr3|||||z |_n7||||||z}d|_d|S#t $r(}t d||d}~wwxYw)NTrr )rr;rrgrSr )r<rvaluergexcs rrzHTTPResponse._read_chunkedBs ; $!1133 %?sj'8'8LL!5!5666&03&6DO T__Z88999?:%C"# $88E?? " ; ; ; %11s : ;sBB## C-#CCcd}t|} |}||St||kr$||}||z |_||zS|d|}||}||d}||z }d|_#t $r%t t |d|wxYw)Nr)rrr8_safe_readintorgr bytes)r<r total_bytesmvbrgr=temp_mvbs rrzHTTPResponse._readinto_chunkedXs mm : $!1133 %&&s88z))++C00A&01nDO&?*{ {+''11!""gq "# $  : : : q;'7!8!899 9 :sB6B#6B/Cc |j|}t||kr t||t|z |Sr)rMrr8r )r<rr%s rrzHTTPResponse._safe_readpsJ w||C   t99s?? s3t99}55 5 r c t|}|j|}||kr(tt |d|||z |Sr)r8rMrr r)r<rrr=s rrzHTTPResponse._safe_readinto|sU@!ff G  Q   s77 q!us1u55 5r cT |j |jdkrdS|jr||S|j|dks ||jkr|j}|j|}|s|r|n$|j|xjt|zc_|SNrr r)rMr`rf_read1_chunkedrhread1rwr8)r<r=results rrzHTTPResponse.read1s  7?dlf443 < *&&q)) ) ; "AT[ Aq!! '! '        [ $ KK3v;; &KK r c|j |jdkrdS|jr||S|j|S)Nrr )rMr`rf _peek_chunkedpeek)r<r=s rrzHTTPResponse.peeksL 7?dlf443 < )%%a(( (w||Ar cl|j |jdkrdS|jr!t|S|j|dks ||jkr|j}|j|}|s|r|n$|j|xjt|zc_|Sr)rMr`rfrrJrhrwr8)r<limitrrs rrJzHTTPResponse.readlines 7?dlf443 < +77##E** * ; " UT[5H5HKE!!%(( '% '        [ $ KK3v;; &KK r c|}||dkrdSd|cxkr|ksn|}|j|}|xjt |zc_|st d|S)Nrr )rrMrrgr8r )r<r=rgrs rrzHTTPResponse._read1_chunkeds))++  a3Q$$$$*$$$$Aw}}Q 3t99$ & %% % r c |}n#t$rYdSwxYw|dS|j|d|S)Nr )rr rMr)r<r=rgs rrzHTTPResponse._peek_chunkedsf --//JJ   33   3w||J''  44s  %%c4|jSr)rMfilenors rrzHTTPResponse.filenosw~~r c |jt|j|p|}t|tst |ds|Sd|S)N__iter__z, )rNrget_all isinstancerqhasattrrS)r<r/defaultrNs r getheaderzHTTPResponse.getheadersq  < "$$ $,&&t,,7 gs # # &77J+G+G &N99W%% %r cz |jtt|jSr)rNrlistrrs r getheaderszHTTPResponse.getheaderss54 < "$$ $DL&&(()))r c|Srrrs rrzHTTPResponse.__iter__s r c |jSr)rNrs rinfozHTTPResponse.infos (|r c |jSr)rlrs rgeturlzHTTPResponse.geturls xr c |jSr)rdrs rgetcodezHTTPResponse.getcodes {r )rNNr)r)"rBrCrDrmryrrrwrrrrrrrrrrrrrrrrJrrrrrrrrr __classcell__rs@rrrs)####<'''BF#F#F#P: #####  &&&&P   D   0;;;;,:::0   "          5 5 5   &&&&(*** .   r rceZdZdZdZeZeZdZ dZ e dZ e dZ dejddfd Zd d Zd Zd Zd ZdZdZdZdZdZd!dZ d"dZdZdZdZdZdZ d#dddZ!difdddZ"dZ#dZ$dS)$rr|zHTTP/1.1r6rc8 t|tjSr)rio TextIOBase)streams r _is_textIOzHTTPConnection._is_textIO s &"-000r c ||tvrdSdSt|drdS t|}|jS#t $rYnwxYwt |trt|SdS)Nrr) upper_METHODS_EXPECTING_BODYrrnbytes TypeErrorrrqr8)bodyrkmvs r_get_content_lengthz"HTTPConnection._get_content_length&s <||~~!888qt 4  4 D!!B9     D  dC  t99 tsA AAN cF||_||_||_d|_g|_d|_t |_d|_d|_ d|_ i|_ | ||\|_ |_||j t j|_dSr)timeoutsource_address blocksizerj_buffer_HTTPConnection__response_CS_IDLE_HTTPConnection__stater` _tunnel_host _tunnel_port_tunnel_headers _get_hostporthostport_validate_hostsocketcreate_connection_create_connection)r<rrrrrs rrmzHTTPConnection.__init__Fs ,"      !!%!3!3D$!?!?DI DI&&&#)":r c |jrtd|||\|_|_|r ||_dS|jdS)Nz.Can't set up tunnel for established connection)rj RuntimeErrorrrrrclear)r<rrrNs r set_tunnelzHTTPConnection.set_tunnel\st  9 QOPP P/3/A/A$/M/M,4,  )#*D  & & ( ( ( ( (r c||d}|d}||krm t||dzd}nF#t$r9||dzddkr|j}nt d||dzdzYnwxYw|d|}n|j}|r"|ddkr|ddkr |dd}||fS) Nr5]r6rpznonnumeric port: '%s'r[r)rfindrxru default_portr )r<rrrjs rrzHTTPConnection._get_hostportts < 3A 3A1uuOtAaCDDz??DD!OOOAaCDDzR''#0()@4!:)MNNNO BQBx( "Q348s??AbDzd|sAABBc||_dSr)r_)r<levels rset_debuglevelzHTTPConnection.set_debuglevels r cd|jd|jfz}|g}|jD]3\}}||d|dd4|d|d|~||j |j } | \}}}|tj jkr;|t!d |d | |jt(d z} t+| t(krt-d | sn3| dvrn.|jdkr"t1d| |dS#|wxYw)NsCONNECT %s:%d HTTP/1.0 asciiz:  r'rHr rkzTunnel connection failed:  Tr6rFrGrr})rr(rrrr;sendrSresponse_classrjr`ryhttp HTTPStatusOKrOSErrorrrMrJrKr8rr_rrrT) r<connectrNheaderrresponsercrmessager@s r_tunnelzHTTPConnection._tunnels/   $ $W - -t/@3BB)!17799 G GMFE NNf33333::9EE F F F Fw #((7##$$$ &&ty&FF '/'<'<'>'> $WdGt))) S4SS'--//SSTTT 4{++HqL99t99x''%m444000?Q&&)T[[]]333 4 NN     HNN    s C(GG)c tjd||j|j||j|jf|j|j|_ |jtj tj dn-#t$r }|j tjkrYd}~nd}~wwxYw|jr|dSdS)Nzhttp.client.connectr6)sysauditrrrrrrj setsockoptr IPPROTO_TCP TCP_NODELAYrerrno ENOPROTOOPTrr!r<es rrzHTTPConnection.connectsA 'ty$)DDD++ Yty !4<1DFF   I !3V5G K K K K   w%+++,++++     LLNNNNN  s0B B1B,,B1c  t|_ |j}|rd|_||j}|rd|_|dSdS#|j}|rd|_|wwxYwr)rrrjrr)r<rjrs rrzHTTPConnection.closes6  !9D    H !"&      ! !H !"&     !s $A'Bc~ |j*|jr|nt|jdkrt dt |t|dr|jdkrt d||}|r|jdkrt d | |j }|snH|r| d}tj d|||j|edStj d|| |j|dS#t$rat!|t"jjr"|D]}|j|YdStd t)|zwxYw) Nrzsend:rzsending a readableencoding file using iso-8859-1r6rQzhttp.client.sendz9data should be a bytes-like object or an iterable, got %r)rj auto_openrrr_rrrsrrrrr(r#r$sendallrr collectionsabcIterabletype)r<r%r( datablockds rrzHTTPConnection.sends 9 ~ % "nn$ ?Q   '4:: & & & 4  ""*+++__T**F 8$/A--6777 - IIdn55  ? ) 0 0 > >I ,dI>>> !!),,, - F $dD111 G I  d # # # # # G G G$  899 G))AI%%a(((())) !9;?::!FGGG  Gs5EAF< F<c< |j|dSr)rr;)r<rs r_outputzHTTPConnection._outputs%  Ar c#K|jdkrtd||}|r|jdkrtd ||j}|sdS|r|d}|V:)Nrzreading a readabler.TrQ)r_rrrrrr()r<rr(r5s r_read_readablezHTTPConnection._read_readables ?Q   & ' ' '**  4do)) 2 3 3 3  dn55I  ;%,,\:: OOO  r Fc |jdd|j}|jdd=|||t |dr||}nb t ||f}nN#t$rA t|}n-#t$r tdt|zwxYwYnwxYw|D]m}|s|j dkrtd|r7|j dkr,t|dd d |zdz}||n|r$|j dkr|d dSdSdSdS) N)r r rHrzAmessage_body should be a bytes-like object or an iterable, got %rrzZero length chunk ignoredr|Xrrs0 )rextendrSrrr:rriterr4r_rr _http_vsnr8r()r< message_bodyencode_chunkedrachunkschunks r _send_outputzHTTPConnection._send_outputs J'''ll4<(( LO #  #|V,, -,,\::- |,,,+_FF!>>>>!%l!3!3$>>>')H*.|*<*<)=>>>>> ! !**9:::!"dn&:&:"5zz111188AAEI!"E %     ($.B"6"6 ,'''''S $ #N ( ("6"6s*?B CB-,C-*CCCc |jr |jrd|_|jtkr t|_nt |j||||_|pd}|||d|d|j }| | ||j dkrs|sTd}| drt|\}}}}}|rS |d}n%#t $r|d}YnwxYw|d|n|jr|j} |j} n|j} |j} | d} n%#t $r| d} YnwxYw| d d krd | zd z} | |jkr|d| n0| d} |d| d | |s|d ddSdSdS)N/rr|rprridnaHostr5r[]zAccept-Encodingidentity)rrrr_CS_REQ_STARTEDr_validate_methodr`_validate_path _http_vsn_strr8_encode_requestr?rvrr(r) putheaderrrrrrr rT) r<rkrl skip_hostskip_accept_encodingrequestnetlocnil netloc_encrrhost_encs r putrequestzHTTPConnection.putrequest>s  ? #t7799 #"DO* <8 # #*DLL#DL11 1 f%%% jS C   &T-?-?@ T))'22333 >R  0 K>>&))?19#.Cc3K;%+]]7%;%; -;;;%+]]6%:%: ;NN6:6666()#0#0#y#y7#';;w#7#7-777#';;v#6#67 yy~~**#'(?T#9t000vx8888#+??7#;#;v(((DD/IJJJ( >0*===== > > Ds$DD<;D<;FF32F3c,|dS)Nr)r()r<rTs rrPzHTTPConnection._encode_requests~~g&&&r c t|}|r(td|d|ddS)Nz)method can't contain control characters.  (found at least ))$_contains_disallowed_method_pchar_researchrugroup)r<rkmatchs rrMzHTTPConnection._validate_methodsg44;;FCC  ;:::',{{}}:::;; ; ; ;r c t|}|r(td|d|ddSNz&URL can't contain control characters. r\r]!_contains_disallowed_url_pchar_rer_r r`)r<rlras rrNzHTTPConnection._validate_pathss,188==  DCcCC05 CCCDD D D Dr c t|}|r(td|d|ddSrcrd)r<rras rrzHTTPConnection._validate_hostssG188>>  DCdCC05 CCCDD D D Dr c |jtkrtt|dr|d}t |st d|t|}t|D]\}}t|dr|d||<n:t|tr%t|d||<t||rt d||d |}|dz|z}||dS)Nr(rzInvalid header name r'zInvalid header value s s: )rrLrrr(_is_legal_header_namerur enumeraterrxrq_is_illegal_header_valuerSr8)r<rvaluesr one_valuers rrQzHTTPConnection.putheadersZ  K|]}|VdSr)r7)rks r z/HTTPConnection._send_request.. s* < D? C3DD*)NN)NF)FFr)%rBrCrDr?rOrr HTTP_PORTr r/r_ staticmethodrrr_GLOBAL_DEFAULT_TIMEOUTrmrrrr!rrrr8r:rDrYrPrMrNrrQrprTrrr}rr rrrsIM!NLIJ11\1 \>#'0N $;;;;,))))0(   !!!F    ! ! !&G&G&GP   4(4(4(4(l16(-}}}}~''';;;DDDDDD8 Ge G G G G G)-bG$GGGGG ,=,=,=\=====r rcNeZdZ eZdddejdfddddfd ZfdZxZ S)HTTPSConnectionNr)contextcheck_hostnamerc2tt|||||| ||| ddl} | dt d||_||_|Btj }|j dkr| dg|j d|_ |j tjk} ||j}|r| st!d|s|r$||||j d|_ ||_|||j_dSdS) N)rrzTkey_file, cert_file and check_hostname are deprecated, use a custom context instead.ror|zhttp/1.1TzMcheck_hostname needs a SSL context with either CERT_OPTIONAL or CERT_REQUIRED)rrrmwarningswarnDeprecationWarningkey_file cert_filessl_create_default_https_contextr?set_alpn_protocolspost_handshake_auth verify_mode CERT_NONErruload_cert_chain_context) r<rrrrrrrrrr will_verifyrs rrmzHTTPSConnection.__init__su /4 ( ( 1 1$g2@R''.. |<<<.:26G/!->K%!(!7 Jk J "IJJJ 79 7'' 8<<<.:26G/#DM)/= ,,,*)r c t|jr|j}n|j}|j|j||_dS)N)server_hostname)rrrrr wrap_socketrj)r<rrs rrzHTTPSConnection.connectsa 6 GGOO     ,"&"3"&) 11$)BQ2SSDIIIr ) rBrCrD HTTPS_PORTr rrrmrrrs@rrrzs2! '+TT#;$(% >59$(D% >% >% >% >% >% >% >N S S S S S S S S Sr rceZdZdS)rNrBrCrDrr rrrs Dr rceZdZdS)rNrrr rrrDr rceZdZdS)r Nrrr rr r rr r ceZdZdZdS)rc$|f|_||_dSr)argsrc)r<rcs rrmzUnknownProtocol.__init__sH  r NrBrCrDrmrr rrrs#r rceZdZdS)r Nrrr rr r rr r ceZdZdS)r Nrrr rr r rr r c*eZdZddZdZejZdS)r Nc2|f|_||_||_dSr)rpartialexpected)r<rrs rrmzIncompleteRead.__init__sH    r cr|j d|jz}nd}d|jjt|j|fzS)Nz, %i more expectedrpz%s(%i bytes read%s))rrrBr8rr*s r__repr__zIncompleteRead.__repr__sE = $$t}4AAA$(?(+DL(9(91(>> >r r)rBrCrDrmrr+__str__rr rr r s:!!!!>>>nGGGr r ceZdZdS)r Nrrr rr r rr r ceZdZdS)rNrrr rrrrr rceZdZdS)rNrrr rrrrr rceZdZdS)rNrrr rrrrr rceZdZdZdS)rcF|st|}|f|_||_dSr)rsrr@rs rrmzBadStatusLine.__init__s) ::DE  r Nrrr rrrs#r rceZdZdZdS)rcPt|dt|fzdS)Nz&got more than %d bytes when reading %s)rrmrK)r< line_types rrmzLineTooLong.__init__s6t%M(0)'<&= > > > > >r Nrrr rrrs#>>>>>r rceZdZdZdS)rcft|dtj|g|Ri|dS)Nrp)rrmConnectionResetError)r<poskws rrmzRemoteDisconnected.__init__s?tR(((%d7S777B77777r Nrrr rrrs#88888r r)r%)B email.parserrU email.messager(rrrerr#collections.abcr1 urllib.parser__all__r~rrbrrLroglobalsupdater __members__rkrrKrLcompile fullmatchrhr_rjrer^rr1r Messager3rOrZBufferedIOBaserrrrr; ImportError Exceptionrrr rr r r r rrrrrrrrrr rrsDL !!!!!!       #  ,--- H G$/"="D"D"F"F G G G   6# #677A%2:&CDDK%/BJ/@$A$A!(2rz-'@'@$322 E E E E%-'<$) @ @ @ @eeeee2$eeeN] ] ] ] ] ] ] ] ~@&JJJ9S9S9S9S9S.9S9S9Sv NN$%%%%}   D @     I        =           m      m        M        ]        m        /        .        .   M>>>>>->>> 88888-}888 s"E EE