=}`eddlmZddlZddlZddlZddlZddlZ ddlZ ddl Z ddl Z ddlmZmZmZmZmZmZej*ej,ej.ej0dZdZdZdZdZd Zd Zd Z d Z!d Z"dZ#dZ$dZ%dZ&dZ'dZ(dZ)dZ*dZ+dZ,dZ-dZ.dZ/dZ0dZ1dZ2dZ3dZ4dZ5dZ6d Z7d!Z8d"Z9d#Z:d$Z;d%Zd(Z?d)Z@d*ZAd+ZBd,ZCd-ZDd.ZEd/ZFe/e;e0ee3e?e4e@e5eAe6eBe7eCe8eDe9eEe:eFi ZGdZHdZIdZJdZKdZLdZMdZNdZOdZPd ZQd!ZRd"ZSd#ZTd0ZUd1ZVd2ZWd3ZXd4ZYd5ZZd6Z[d7Z\d8Z]d9Z^d:Z_d;Z`dZcd7Zdd8Zed9Zfd:Zgd;ZhdZkdZldZmdZne jd>e jd=e jd?e jde jd?e jd=iZ{eudBe{jDZ|dZ}d>Z~d=ZdCZdDZdEZdFZGdGdHeZGdIdJeZGdKdLeZGdMdNeZedOk(rddlZedPdQZejjdRjeejjdSejdTejejjdUjej!d@ej#yy#e$r ddl m ZYwxYw#e$rddl Z YwxYw)V)absolute_importN) SerialBaseSerialExceptionto_bytes iterbytesPortNotOpenErrorTimeout)debuginfowarningerrors,    efghijklmnop @ c#*K|] \}}||f ywN.0kvs 0/usr/lib/python3/dist-packages/serial/rfc2217.py rQs!PTQ1a&!Pc#*K|] \}}||f ywrJrKrLs rPrQrQs"RdaAq6"RrR REQUESTEDACTIVEINACTIVEREALLY_INACTIVEc&eZdZdZ ddZdZdZy) TelnetOptionz@Manage a single telnet option, keeps track of DO/DONT WILL/WONT.Nc ||_||_||_||_||_||_||_||_d|_| |_ y)a; Initialize option. :param connection: connection used to transmit answers :param name: a readable name for debug outputs :param send_yes: what to send when option is to be enabled. :param send_no: what to send when option is to be disabled. :param ack_yes: what to expect when remote agrees on option. :param ack_no: what to expect when remote disagrees on option. :param initial_state: options initialized with REQUESTED are tried to be enabled on startup. use INACTIVE for all others. FN) connectionnameoptionsend_yessend_noack_yesack_nostateactiveactivation_callback) selfr[r\r]r^r_r`ra initial_staterds rP__init__zTelnetOption.__init__sK%       "  #6 c&dj|S)zString for debug outputsz{o.name}:{o.active}({o.state}))oformatres rP__repr__zTelnetOption.__repr__s/666>>rhc||jk(r$|jtur/t|_d|_|j |j y|jtury|jt ur_t|_|jj|j|jd|_|j n|j y|jtur1|jj|j|jytdj|yy||jk(r|jturt |_d|_y|jturCt |_|jj|j|jd|_y|jt ury|jturytdj|y)zo A DO/DONT/WILL/WONT was received for this option, update state and answer when needed. TNzoption in illegal state {!r}F)r`rbrTrUrcrdrVr[telnet_send_optionr^r]rWr_ ValueErrorrlrarecommands rPprocess_incomingzTelnetOption.process_incoming s dll "zzY&# " ++7,,.v%x'# 224==$++N" ++7,,..224<<M !?!F!Ft!LMM 88 #zzY&% # v%% 224<<M# x'. !?!F!Ft!LMM$rhrJ)__name__ __module__ __qualname____doc__rgrnrtrKrhrPrYrYsJ=A70?$NrhrYcHeZdZdZd dZdZdZdZeeZ d dZ dZ y) TelnetSubnegotiationz A object to handle subnegotiation of options. In this case actually sub-sub options for RFC 2217. It is used to track com port options. Nch||}||_||_||_d|_||_t |_yrJ)r[r\r]value ack_optionrVrb)rer[r\r]r}s rPrgzTelnetSubnegotiation.__init__9s7  J$   $ rhc&dj|S)zString for debug outputs.z{sn.name}:{sn.state})snrkrms rPrnzTelnetSubnegotiation.__repr__Cs%,,,55rhcH||_t|_|jj |j |j|jj rJ|jj jdj|j|jyy)z Request a change of the value. a request is sent to the server. if the client needs to know if the change is performed he has to check the state of this object. zSB Requesting {} -> {!r}N) r|rTrbr[rfc2217_send_subnegotiationr]loggerr rlr\)rer|s rPsetzTelnetSubnegotiation.setGsq    33DKKL ?? ! ! OO " " ( ()C)J)J499VZV`V`)a b "rhc|jtk(r$tdj|j|jt k(S)z{ Check if answer from server has been received. when server rejects the change, raise a ValueError. z%remote rejected value for option {!r})rbrWrqrlr\rUrms rPis_readyzTelnetSubnegotiation.is_readySs: :: (DKKDIIVW WzzV##rhct|}|js7tjd|j ry|js7t dj |j)z Wait until the subnegotiation has been acknowledged or timeout. It can also throw a value error when the answer from the server does not match the value sent. 皙?z%timeout while waiting for option {!r}N)r expiredtimesleeprrrlr\)retimeout timeout_timers rPwaitzTelnetSubnegotiation.wait^s`  ( '') JJt }} '') ""I"P"PQUQZQZ"[\ \rhc>|j|dt|jk(r t|_n t|_|j j rK|j j jdj|j||jyy)z Check an incoming subnegotiation block. The parameter already has cut off the header like sub option number and com port option value. NzSB Answer {} -> {!r} -> {}) r|lenrUrbrWr[rr rlr\)re suboptions rP check_answerz!TelnetSubnegotiation.check_answerlsv ::#3C O4 4DJ)DJ ?? ! ! OO " " ( ()E)L)LTYYXacgcmcm)n o "rhrJ)rG) rurvrwrxrgrnrrpropertyrcrrrKrhrPrzrz3s4 6 c$h F ] prhrzc2eZdZdZdZfdZdZdZdZdZ e dZ d!d Z d Z d Zd Zd ZdZdZe dZe dZe dZe dZe dZej0dZdZdZdZdZdZdZd"dZdZ dZ!dZ"d Z#xZ$S)#Serialzt4t6t0t2t<t-|d t@t0t2t4t6t<t-|dt@t4t6t0t2t<t-|dt.t4t6t0t2t8t-|dt:t4t6t0t2t<g|z|_!tE|dtFtHtE|dtJtLtE|dtNtPtE|dtRtTd|_+tE|dtXtZtE|dt\t^d|_0|j`jc|jVd|_2d|_3tid|_5d|_6d|_t'jn|jp|_9|jrjud|jrjwdj!|j|jrjy |jBD];}|jzt<us|j}|j~|j=ti|j}|jsLtjdtd|Dtd |Dk(rn+|jsLt d!j!||jr4|jjd"j!|jB|j|js|j|js|j|j|jy#t$r1}d|_ t d j!|j|d}~wwxYw#|jxYw)#zx Open port with current settings. This may throw a SerialException if the port cannot be opened. NFrGz.Port must be configured before it can be used.zPort is already open.rH)rrFzCould not open port {}: {} we-BINARY we-RFC2217ECHOwe-SGAthey-SGA they-BINARY they-RFC2217baudratedatasizeparitystopsize)rrrrpurgecontrol)rrrrT)targetz&pySerial RFC 2217 reader thread for {}rc34K|]}|jywrJrcrMrjs rPrQzSerial.open..s;Aqxx;c3BK|]}|jtk7ywrJ)rbrVrs rPrQzSerial.open..sBr[\177hCVBrsz;Remote does not seem to support RFC2217 or BINARY mode {!r}zNegotiated options: {})Nrrrr_portris_opensocketcreate_connectionfrom_urlportstrr setsockopt IPPROTO_TCP TCP_NODELAY ExceptionrlQueuer threadingLockrrYBINARYWILLWONTDODONTrVCOM_PORT_OPTIONrTrSGArrz SET_BAUDRATESERVER_SET_BAUDRATE SET_DATASIZESERVER_SET_DATASIZE SET_PARITYSERVER_SET_PARITY SET_STOPSIZESERVER_SET_STOPSIZEr PURGE_DATASERVER_PURGE_DATA SET_CONTROLSERVER_SET_CONTROLrupdaterrr rrThread_telnet_read_loopr setDaemonsetNamestartrbrpr^r]rrrsumr _reconfigure_port_dsrdtr_update_dtr_state_rtscts_update_rts_statereset_input_bufferreset_output_bufferclose)remsgmandadory_optionsr]rs rPopenz Serial.opens  */'!& ! :: !"RS S <<!"9: : Z!33DMM$,,4OYZL LL # #F$6$68J8JA N"KKM%>>+ {FD$D( S |_dD"dT] ^  vtRtT9 M xdD"dI N z3D$i P }fb$dH U ~D$PTV_ `    -T:|M`a,T:|M`a,T8zM^_,T:|M`a ' #-T7zM^_,T9{M_`!  $$T%@%@A#*2; $)!  ''t/E/EF  t$ ELLTZZXY  .. L<<9,++FOOV]]K Ld334Goo' 4 ;):;;sBr`qBr?rroo' &QXXYjkmm{{   !9!@!@AUAU!VW  " " $<<&&(<<&&(  # # %  $ $ &Y ZDL!">"E"EdllTW"XY Y ZZ  JJL s3 A.T!U'BUCU T= ,T88T=Uc|j td|j tdd|jcxkrdks&nt dj |j|jdjtjd|j|jd jtjd |j|jd jtjd t|j|jd jtjd t|j|jj!}|j"r*|j"j%d j |t'|j(}|j+sEt-j.dt1d|Dt3|k(rn+|j+sEtdj ||j"r*|j"j5dj ||j6r|j8r t d|j6r|j;t<y|j8r|j;t>y|j;t@y)z,Set communication parameters on opened port.NzCan only operate on open portsz(write_timeout is currently not supportedrlzinvalid baudrate: {!r}r!Ir!BrrzNegotiating settings: {}rc34K|]}|jywrJrrs rPrQz+Serial._reconfigure_port..s+188+rz7Remote does not accept parameter change (RFC2217): {!r}zNegotiated settings: {}z-xonxoff and rtscts together are not supported)!rr_write_timeoutNotImplementedError _baudraterqrlrrstructpack _bytesizeRFC2217_PARITY_MAP_parityRFC2217_STOPBIT_MAP _stopbitsvaluesrr r rrrrrrr r_xonxoffrfc2217_set_controlSET_CONTROL_USE_HW_FLOW_CONTROLSET_CONTROL_USE_SW_FLOW_CONTROLSET_CONTROL_USE_NO_FLOW_CONTROL)reitemsrs rPrzSerial._reconfigure_ports, << !"BC C    *%&PQ Q 4>>+G+5<:[?option[&option...]]": not starting with rfc2217:// ({!r})TloggingzpySerial.rfc2217rzenabled loggingign_set_control poll_modemrzunknown option: {!r}izport not in range 0...65535zPexpected a string in the form "rfc2217://:[?option[&option...]]": {}N)urlparseurlsplitschemerrlparse_qsqueryr r basicConfig getLoggerrsetLevel LOGGER_LEVELSr rrfloatrrqporthostname)reurlpartsr]res rPrzSerial.from_url0s !!#& <<9 $!66??+ !>??+  ++  P!EEKVAYP P Ps D"F F-F((F-cb|js t|jjS)z9Return the number of bytes currently in the input buffer.)rrrqsizerms rP in_waitingzSerial.in_waitingUs)||"$ $  &&((rhc|js tt} t|j}t ||kr|j |j js td|jjd|j}| t|S||z }|jrnt ||krt|S#tj$r Yt|SwxYw)z Read size bytes from the serial port. If a timeout is set it may return less characters as requested. With no timeout it will block until the requested number of bytes is read. z&connection failed (reader thread died)T)rr bytearrayr _timeoutrris_aliverrget time_leftbytesrrEmpty)resizedatarbufs rPreadz Serial.read\s ||"$ ${ dmm,Gd)d"<<'t||/D/D/F)*RSS''++D'2C2C2EF; ;& ??$d)d"T{{{  T{ sB C-$CC=<C=c|js t|j5 |jj t |j tt dddt|S#tj$r}tdj|d}~wwxYw#1swYt|SxYw)z Output the given byte string over the serial port. Can block if the connection is blocked. May raise SerialException if the connection is closed. z$connection failed (socket error): {}N)rrrrsendallrreplaceIAC IAC_DOUBLEDrr rrlr)rer1r$s rPwritez Serial.writets ||"$ $    X X $$Xd^%;%;C%MN X 4y<< X%&L&S&STU&VWW X X 4ys(B*#+D,55ndK'Q((!,,t{{ !!":;o~~||{{ ))*M*T*TUV*WX%%))$/ f{{ !!":;sG IF?D8I-'I?III'AH=8I=II*I/cr|jr+|jjdj|yyz1Process commands other than DO, DONT, WILL, WONT.zignoring Telnet command: {!r}Nrr rlrrs rPrkzSerial._telnet_process_command/. ;; KK   ? F Fw O P rhcTd}|jD]%}|j|k(s|j|d}'|sp|tk(s |tk(r]|j |tk(rt nt||jr+|jjdj|yyyyz&Process incoming DO, DONT, WILL, WONT.FTzrejected Telnet option: {!r}N rr]rtrrrprrrr rlrersr]knownitems rPrlzSerial._telnet_negotiate_option5(( D{{f$%%g.   $'R-''DdVT;;KK''(F(M(Mf(UV#0rhc|ddtk(r|ddtk(rct|dk\rUt|dd|_|j rn|j j dj|jy |ddtk(r}t|dk\rot|dd|_ |j r4|j j dj|j|jjdy |ddtk(rd|_ y |ddtk(rd |_ y |jj!D]3}|j"|ddk(s|j%t'|dd y |j r+|j j)d j|y y y |j r+|j j)d j|y y ) ;Process subnegotiation, the data between IAC SB and IAC SE.rrFrErGzNOTIFY_LINESTATE: {}NOTIFY_MODEMSTATE: {}r TFNzignoring COM_PORT_OPTION: {!r}zignoring subnegotiation: {!r})rSERVER_NOTIFY_LINESTATErordrrr rlSERVER_NOTIFY_MODEMSTATErrrestartFLOWCONTROL_SUSPENDrFLOWCONTROL_RESUMErrr}rr.r )rerrys rPriz%Serial._telnet_process_subnegotiationHs Qq>_ ,1~!88S^q=P"%i!n"5;;KK$$%;%B%B4??%ST1Q#;;IRS@S#&y1~#6 ;;KK$$%<%C%CDDTDT%UV((0051Q#66,0)1Q#55,1) 1188:`D)Aa.8))% !" *>? ` {{ ++,L,S,ST],^_#',{{ ##$C$J$J9$UVrhc||j5|jj|dddy#1swYyxYw)zGinternal socket write with no data escaping. used to send telnet stuff.N)rrr5)rer1s rP_internal_raw_writezSerial._internal_raw_writehs2    ' LL  & ' ' 's2;c:|jt|z|zyzSend DO, DONT, WILL, WONT.N)rr7reactionr]s rPrpzSerial.telnet_send_optionms   v!67rhc|jtt}|jttzt z|z|ztzt zy)z%Subnegotiation of RFC2217 parameters.N)r6r7r8rrgrrhrer]r|s rPrz"Serial.rfc2217_send_subnegotiationqs> c;/   rO!;f!Du!Ls!RUW!WXrhcz|jd}|j||j|jy)z~ Send purge request to the remote. (PURGE_RECEIVE_BUFFER / PURGE_TRANSMIT_BUFFER / PURGE_BOTH_BUFFERS) rN)rrrrrer|rys rPr;zSerial.rfc2217_send_purgevs1 $$W-  $''(rhc|jd}|j||jrtjdy|j |j y)z)transmit change of control line to remoterg?N)rrrrrrrrs rPrzSerial.rfc2217_set_controlsE$$Y/   * * JJsO IId++ ,rhcy)z` check if server is ready to receive data. block for some time when not. NrKrms rPrfc2217_flow_server_readyz Serial.rfc2217_flow_server_readysrhct|jr|jjr|jr|jj d|j t t|j}|jsAtjd|jjsn8|jsA|jr|jjd|j3|jr|jj d|jStd)z get last modem state (cached value. If value is "old", request a new one. This cache helps that we don't issue to many requests when e.g. all status lines, one after the other is queried by the user (CTS, DSR etc.) zpolling modem staterzpoll for modem state failedzusing cached modem statez!remote sends no NOTIFY_MODEMSTATE)rrrrr rNOTIFY_MODEMSTATEr rrrr rrras rPrPzSerial.get_modem_states  ! !d&>&>&F&F&H{{ !!"78  , ,-> ?d334Goo' 4 //779 oo';;KK''(EF    '{{ !!"<=## #""EF Frh)rFrh)%rurvrwrx BAUDRATESrgrrrrrr'r3r9rrrDrrrRrVrYr]rsetterrrkrlrirrprr;rrrP __classcell__)rs@rPrrzs%F4I6$_B*FX"!,J)) 0 )7 < : :BB BB AA AA  ^^    @t@y |j jBr|jt>tDy |jt>tFy |dd tFk(rdd|j _d|j _!|jr|jjd|jt>tFy |dd t@k(rSd|j _|jr|jjd|jt>t@y |dd tDk(rSd|j _!|jr|jjd|jt>tDy |dd tHk(r(|jr|jjKdy |dd tLk(rSd|j _'|jr|jjd|jt>tLy |dd tPk(rSd|j _'|jr|jjd|jt>tPy |dd tRk(r(|jr|jjKdy |dd tTk(rSd|j _+|jr|jjd|jt>tTy |dd tXk(rSd|j _+|jr|jjd|jt>tXy |dd tZk(r(|jr|jjKdy |dd t\k(rSd|j _/|jr|jjd |jt>t\y |dd t`k(rd|j _/|jr|jjd!|jt>t`y |ddtbk(r!|jtdtgdgy |ddthk(r:|jr|jjd"|jkd#y |ddtlk(r/|jr|jjd$d|_7y |ddtpk(r/|jr|jjd%d|_7y |ddtrk(rUtu|dd |_;|jr~|jjd&j|jvy |ddtxk(rUtu|dd |_=|jr|jjd'j|jzy |ddt|k(r|dd t~k(r\|j j|jr|jjd(|jtt~y |dd tk(r\|j j|jr|jjd)|jtty |dd tk(rv|j j|j j|jr|jjd*|jtty |jr{|jjd+jt|dd y |jr7|jjd,jt|dd y y y y y y |jr+|jjKd-j|y y #t$rR}|jr*|jjd j|||j _Yd }~ d }~wwxYw#t$rR}|jr*|jjdj|||j _Yd }~ ?d }~wwxYw#t$rR}|jr*|jjdj|||j _Yd }~ d }~wwxYw#t$rR}|jr*|jjdj|||j _Yd }~ d }~wwxYw).r|rrFzreceived COM_PORT_OPTION: {!r}rErz{} baud rate: {}rr,zfailed to set baud rate: {}NrrGz{} data size: {}zfailed to set data size: {}z {} parity: {}zfailed to set parity: {}z{} stop bits: {}zfailed to set stop bits: {}Fzchanged flow control to NoneTz changed flow control to XON/XOFFzchanged flow control to RTS/CTSz'requested break state - not implementedzchanged BREAK to activezchanged BREAK to inactivez%requested DTR state - not implementedzchanged DTR to activezchanged DTR to inactivez%requested RTS state - not implementedzchanged RTS to activezchanged RTS to inactivezrequest for modem statersuspendresumezline state mask: 0x{:02x}zmodem state mask: 0x{:02x}zpurge inz purge outz purge bothzundefined PURGE_DATA: {!r}zundefined COM_PORT_OPTION: {!r}zunknown subnegotiation: {!r})Frrr rlrrrrunpackr rqr rrrrbytesizerrrRFC2217_REVERSE_PARITY_MAPrrrstopbitsRFC2217_REVERSE_STOPBIT_MAPrrrSET_CONTROL_REQ_FLOW_SETTINGxonxoffrrrtsctsrr SET_CONTROL_REQ_BREAK_STATEr rBbreak_conditionrCSET_CONTROL_REQ_DTRrLdtrrMSET_CONTROL_REQ_RTSrGrtsrHNOTIFY_LINESTATEr~rrrrrrSET_LINESTATE_MASKrrSET_MODEMSTATE_MASKrrr<rrr>rPURGE_BOTH_BUFFERSlist)rerbackuprr$rrrs rPriz*PortManager._telnet_process_subnegotiations Qq>_ ,{{ !!"B"I"I)"TU1~--- x"(--y1~"FKX1}/7 , {{ (();)B)BH5Z_aealalauau)vw001DfkkRWY]YdYdYmYmFno1Q</-- x"(--y1~"FKX1}/7 , {{ (();)B)BH5Z_aealalauau)vw001DfkkRWY]YdYdYmYmFno1Q:-++ q#]]5)Aa.A!DF{-G-O * {{ (()?)?UZ\`\g\g\n\n)op00%KK'9$++:L:L'MNP1Q</-- x%}}UIaNCAFH1}/J8/T , {{ (();)B)BH5Z_aealalauau)vw00'KK':4;;;O;O'PQS1Q;.Qq>%AA{{**889KMlm++889KMlm889KMlmq^'FF*/DKK').DKK&{{ (()GH445GIhiq^'FF*.DKK'{{ (()KL445GIhiq^'FF)-DKK&{{ (()JK445GIhiq^'BB{{ ++,UVq^';;26DKK/{{ (()BC445GI]^q^'<<27DKK/{{ (()DE445GI^_q^'::{{ ++,STq^'99&*DKKO{{ (()@A445GI[\q^'::&+DKKO{{ (()BC445GI\]q^'::{{ ++,STq^'99&*DKKO{{ (()@A445GI[\q^'::&+DKKO{{ (()BC445GI\]1Q#3300+aSM#1Q#44;;KK$$%>?&&$&?1Q#66;;KK$$Y/,0)1Q#55;;KK$$X.,1)1Q#55%(1Q%8";;KK$$%@%G%GHZHZ%[\1Q#66'*9Qq>':$;;KK$$%A%H%HI]I]%^_1Q:-Qq>%99KK224{{ ((4445FH\]q^'<<KK335{{ ((5445FH]^q^'99KK224KK335{{ ((6445FHZ[{{ ))*F*M*MdS\]^]_S`Na*bc;;KK%%&G&N&NtT]^_^`TaOb&cd#) A;|{{ ##$B$I$I)$TUe"2{{ ))*G*N*Nq*QR+1DKK((2"2{{ ))*G*N*Nq*QR+1DKK((2"0{{ ))*D*K*KA*NO)/DKK&&0 "2{{ ))*G*N*Nq*QR+1DKK((2sd'1q 1r4-9t9u0 r1Ar,,r14 t=At  t u-Au((u-0 w 9Aww rJr)F)rurvrwrxrgrrprrrrrkrlrirKrhrPrrsB HF8(5V 5H "7%vQ W&~Vrhr__main__zrfc2217://localhost:7000rz{} z write... shello z read: {} ) __future__rrrrrrr ImportError urllib.parseparserqueuerserial.serialutilrrrrrr DEBUGINFOWARNINGERRORrrhNOPDMBRKIPAOAYTECELGArgrrrrr7r8rrrrrrrrrrrrrrrrrrrrrr~rSERVER_FLOWCONTROL_SUSPENDSERVER_FLOWCONTROL_RESUMESERVER_SET_LINESTATE_MASKSERVER_SET_MODEMSTATE_MASKrRFC2217_ANSWER_MAPrr rrrrBrCrrLrMrrGrHSET_CONTROL_REQ_FLOW_SETTING_IN"SET_CONTROL_USE_NO_FLOW_CONTROL_IN!SET_CONTROL_USE_SW_FLOW_CONTOL_IN!SET_CONTROL_USE_HW_FLOW_CONTOL_IN SET_CONTROL_USE_DCD_FLOW_CONTROL SET_CONTROL_USE_DTR_FLOW_CONTROL SET_CONTROL_USE_DSR_FLOW_CONTROLLINESTATE_MASK_TIMEOUTLINESTATE_MASK_SHIFTREG_EMPTYLINESTATE_MASK_TRANSREG_EMPTYLINESTATE_MASK_BREAK_DETECTLINESTATE_MASK_FRAMING_ERRORLINESTATE_MASK_PARTIY_ERRORLINESTATE_MASK_OVERRUN_ERRORLINESTATE_MASK_DATA_READYr\rXrUrQrrrrr<r>r PARITY_NONE PARITY_ODD PARITY_EVEN PARITY_MARK PARITY_SPACErdictr r STOPBITS_ONESTOPBITS_ONE_POINT_FIVE STOPBITS_TWOrrrcrfrjrTrUrVrWobjectrYrzrrrusyssstdoutr9rlflushr3rrKrhrPrsbz'  $))]] LL ]]                         !"$##$%%!%#-/3113!  '")")")%")%,"$+!$+!#* #* #*  " "      q    "!P5G5M5M5O!PP  ""A  #"R6I6O6O6Q"RR       #CN6CNLDp6DpNzGZzG@QV&QVj  z)62AJJV]]1%&JJ\"GGJGGIJJ\((34GGIS($##$s"KK# K K # K0/K0