VimUnDov) ،'=1Z{.EN bfa var res2 = '50 This line ends the mark\n;226-This is the first line of the second response\n' +p*    R?_R5_R require('tape');5_R5_R.5_RDtape5_RX 5_ Rp  var res = 5_ Ru  var res = '123-First line- Second line5_ Rv' var res = '123-First line Second linee 234 A line beginning with numbers5_ 'RvI var res = '123-First line Second line 234 A line beginning with numbersu 123 The last line5_ R[ var res = '123-First line Second line 234 A line beginning with numbers 123 The last line5_ RC Second line 234 A line beginning with numbers 123 The last line5_  RD ' Second line 234 A line beginning with numbers 123 The last line5_ RC 'Second line 234 A line beginning with numbers 123 The last line5_'R 9 ' 234 A line beginning with numbers 123 The last line5_(R ( ' 234 A line beginning with numbers'5_(R });  '123 The last line) ' 234 A line beginning with numbers'+ 'Second line'+! var res = '123-First line\r\n'+0tape('Parse multiline response 1', function(t) {var parser = require('./');var tape = require('tape');5_R  '123 The last line5_R });  '123 The last line';+ ' 234 A line beginning with numbers' + 'Second line' +" var res = '123-First line\r\n' +0tape('Parse multiline response 1', function(t) {var parser = require('./');var tape = require('tape');5_ R " var res = '123-First line\r\n' +5_R  'Second line' +5_(R + ' 234 A line beginning with numbers' +5_R var res = 5_ R  '123 The last line';5_ R   5_ R  var res =5_ VR / ' 234 A line beginning with numbers\r\n' + 'Second line\r\n' + '123-First line\r\n' +5_  VR   '123 The last line\r\n';5_  VR   });   var p = parser();   '123 The last line\r\n']; / ' 234 A line beginning with numbers\r\n' , 'Second line\r\n' , '123-First line\r\n' , var res =[0tape('Parse multiline response 1', function(t) {var parser = require('./');var tape = require('tape');5_  VR 5_   VR& 5_!  VR* .forEach5_ "!  VR+  res.forEach5_!#"  VRl  5_"$# VRn}); t.end(); res.forEach(p)  var p = parser();   ];  '123 The last line\r\n' 0 ' 234 A line beginning with numbers\r\n', 'Second line\r\n', '123-First line\r\n', var res = [0tape('Parse multiline response 1', function(t) {var parser = require('./');var tape = require('tape');5_#%$ VR5_$&% V Rɵ5_%'& V Rɷ5_&(' V Rɺ0tape('Parse multiline response 1', function(t) {5_'*(VRɽ '123-First line\r\n', 'Second line\r\n',0 ' 234 A line beginning with numbers\r\n', '123 The last line\r\n'5_(+)*VR5_*,+VR }); t.end(); res.forEach(p) var p = parser(); ];> 226 This is the last line of the response, using code 226E 226 This line does not end the response; note the leading space6 226-This is the first line of the second response 150 This line ends the mark9 123-This line does not end the mark; note the hyphen$150-This is the first line of a mark var res = [0tape('Parse multiline response 2', function(t) {});  t.end();  res.forEach(p)  var p = parser();   ];  '123 The last line\r\n' 0 ' 234 A line beginning with numbers\r\n', 'Second line\r\n', '123-First line\r\n', var res = [0tape('Parse multiline response 1', function(t) {var parser = require('./');var tape = require('tape');5_+-,VR* 150 - This is the first line of a mark5_,.-+VR+ '150 - This is the first line of a mark5_-/.VRB 226 This line does not end the response;note the leading space7 226 - This is the first line of the second response 150 This line ends the mark9 123 - This line does not end the mark;note the hyphen5_.0/VR= 226 This is the last line of the response, using code 2265_/10VR- '150 - This is the first line of a mark',5_021VR< '123 - This line does not end the mark;note the hyphen',5_132VR: '226 - This is the first line of the second response',5_243 VR9 '226- This is the first line of the second response',5_354 VR; '123- This line does not end the mark;note the hyphen',5_465 VR, '150- This is the first line of a mark',5_576VR E '226 This line does not end the response;note the leading space',5_687VR G ' 226 This line does not end the response;note the leading space',5_798 VRI  res.forEach(p)5_8:9 VRe  res.map(p)5_9;: VRg    5_:<;VRʏ  '123-First line\r\n',5_;=<VRʏ  '123-First liner\n',5_<>=VRʏ  '123-First line\n',5_=?>VRʏ  '123-First linen',5_>@?VRʑ  'Second line\r\n',5_?A@VRʑ  'Second liner\n',5_@BAVRʑ  'Second line\n',5_ACBVRʑ  'Second linen',5_BDC*VRʘ 0 ' 234 A line beginning with numbers\r\n',5_CED*VRʘ / ' 234 A line beginning with numbersr\n',5_DFE*VRʘ . ' 234 A line beginning with numbers\n',5_EGF*VRʙ - ' 234 A line beginning with numbersn',5_FHG VRʚ  '123 The last line\r\n'5_GIH VRʚ  '123 The last liner\n'5_HJI VRʚ  '123 The last line\n'5_IKJ VRʚ   '123 The last linen'5_JLKVR"  5_KNLvR% !var tape = require('tape');5_LOMNvR>"!5_NPO))V)RY@ '226 This is the last line of the response, using code 226',F ' 226 This line does not end the response;note the leading space',8 '226-This is the first line of the second response'," '150 This line ends the mark',: '123-This line does not end the mark;note the hyphen',+ '150-This is the first line of a mark',5_OQP ))V)R]" var res = [5_PRQ ))V)R^" var res = - '150-This is the first line of a mark\n'+5_QSR1)V)R` ];5_RTS1)V)Ra 5_SUT1)V)Re!1var stream = resumer().queue('your string').end()5_TVU1)V)Rf!$var stream = resumer().queue().end()5_UWV'1)V)Rh!'var stream = resumer().queue(res).end()5_VXW'1)V)Ri "});! t.end();  res.forEach(p) var p = parser();(var stream = resumer().queue(res).end();B '226 This is the last line of the response, using code 226\n'+H ' 226 This line does not end the response;note the leading space\n'+: '226-This is the first line of the second response\n'+$ '150 This line ends the mark\n'+< '123-This line does not end the mark;note the hyphen\n'+5 var res = '150-This is the first line of a mark\n'+0tape('Parse multiline response 2', function(t) {}); t.end();console.log(a)  var a = res.map(p)  var p = parser();   ];  '123 The last line' , ' 234 A line beginning with numbers',  'Second line', '123-First line', var res = [0tape('Parse multiline response 1', function(t) {var parser = require('./');!var resumer = require('resumer');var tape = require('tape');5_WYX)1)V)Rх$"!5_XZY1)V)Rщ(source.pipe(liner)5_Y[Z   vRя("liner.on('readable', function () {(stream.pipe(liner)!(" while (line = liner.read()) {5_Z\[vRѕ')});&( t.end();%' res.forEach(p)$& var p = parser();#%"$})!# } "# // do something with line!# while (line = parser.read()) {  var line#parser.on('readable', function () {stream.pipe(parser)* var stream = resumer().queue(res).end();C '226 This is the last line of the response, using code 226\n' +I ' 226 This line does not end the response;note the leading space\n' +; '226-This is the first line of the second response\n' +% '150 This line ends the mark\n' += '123-This line does not end the mark;note the hyphen\n' +6 var res = '150-This is the first line of a mark\n' +0tape('Parse multiline response 2', function(t) {}); t.end(); console.log(a)  var a = res.map(p)  var p = parser();   ];  '123 The last line' , ' 234 A line beginning with numbers',  'Second line', '123-First line', var res = [0tape('Parse multiline response 1', function(t) {var parser = require('./');!var resumer = require('resumer');var tape = require('tape');5_[]\!vRћ ! // do something with line5_\^]!vRћ "( "'5_]_^! vRѡ "(console.log(line)5_^`_!vRѧ ')});&( t.end();%' res.forEach(p)$& var p = parser();#%"$ })!# } "console.log('%',line)!" while (line = parser.read()) {  var line$ parser.on('readable', function() { stream.pipe(parser)* var stream = resumer().queue(res).end();C '226 This is the last line of the response, using code 226\n' +I ' 226 This line does not end the response;note the leading space\n' +; '226-This is the first line of the second response\n' +% '150 This line ends the mark\n' += '123-This line does not end the mark;note the hyphen\n' +6 var res = '150-This is the first line of a mark\n' +0tape('Parse multiline response 2', function(t) {}); t.end(); console.log(a)  var a = res.map(p)  var p = parser();   ];  '123 The last line' , ' 234 A line beginning with numbers',  'Second line', '123-First line', var res = [0tape('Parse multiline response 1', function(t) {var parser = require('./');!var resumer = require('resumer');var tape = require('tape');5__a`VRѭ 0tape('Parse multiline response 1', function(t) { var res = [ '123-First line', 'Second line',, ' 234 A line beginning with numbers', '123 The last line' ]; var p = parser(); var a = res.map(p) console.log(a) t.end();});5_`baVRѮ5_acb CVRѶ C '226 This is the last line of the response, using code 226\n' +5_bdcVR res.forEach(p)5_cedVR var p = parser();5_dfeVR5_egfVR stream.pipe(parser)5_fhgVR5_gihVR5_hjiVR var p = parser();5_ikjVRN5_jlkVRb console.log('%', line)5_kmlVRc5_lnmVRe5_monVRr var resopnses = [];5_npoVRV}); t.end(); }) } console.log('%', line)responses.push(line);" while (line = parser.read()) { var line$ parser.on('readable', function() { var responses = []; stream.pipe(parser) * var stream = resumer().queue(res).end();  B '226 This is the last line of the response, using code 226\n'; I ' 226 This line does not end the response;note the leading space\n' + ; '226-This is the first line of the second response\n' + % '150 This line ends the mark\n' + = '123-This line does not end the mark;note the hyphen\n' +6 var res = '150-This is the first line of a mark\n' +0tape('Parse multiline response 2', function(t) {var parser = require('./');!var resumer = require('resumer');var tape = require('tape');5_oqp VRԮ var line5_prq VRԺ var line;5_q|rVR var line1 = parser.read();5_r}s|VR/ var line1 = parser.read(); var line2 = parser.read();5_|~}VR2 console.log('%', line)5_}~VR65_~#VRc}); t.end();$t.deepEqual(150, responses[0].code);parser.on('end', function() { }) } responses.push(line);" while (line = parser.read()) {$ parser.on('readable', function() { var responses = []; stream.pipe(parser) * var stream = resumer().queue(res).end();  B '226 This is the last line of the response, using code 226\n'; I ' 226 This line does not end the response;note the leading space\n' + ; '226-This is the first line of the second response\n' + % '150 This line ends the mark\n' + = '123-This line does not end the mark;note the hyphen\n' +6 var res = '150-This is the first line of a mark\n' +0tape('Parse multiline response 2', function(t) {var parser = require('./');!var resumer = require('resumer');var tape = require('tape');5_VRk5_VRm }); }); t.end();( t.deepEqual(150, responses[0].code); parser.on('end', function() { }) } responses.push(line);" while (line = parser.read()) {$ parser.on('readable', function() { var responses = []; stream.pipe(parser) * var stream = resumer().queue(res).end();  B '226 This is the last line of the response, using code 226\n'; I ' 226 This line does not end the response;note the leading space\n' + ; '226-This is the first line of the second response\n' + % '150 This line ends the mark\n' + = '123-This line does not end the mark;note the hyphen\n' +6 var res = '150-This is the first line of a mark\n' +0tape('Parse multiline response 2', function(t) {var parser = require('./');!var resumer = require('resumer');var tape = require('tape');5_VRq })5_VR}5_VRՃ( t.deepEqual(150, responses[0].code);5_VRՅ( t.deepEqual(226, responses[0].code);5_'VRՐ5_VRՒ( t.deepEqual(150, responses[0].code);5_#VRՕ) t.deepEqual(true, responses[0].code);5_VR՘( t.deepEqual(226, responses[1].code);5_$VR՛* t.deepEqual(false, responses[1].code);5_$VRժ5_  R # t.qual(150, responses[0].code); ( t.deepEqual(150, responses[0].code);+ t.deepEqual(true, responses[0].isMark);( t.deepEqual(226, responses[1].code);, t.deepEqual(false, responses[1].isMark);5_  R! 5_  R  "});! });  t.end();( t.equal(false, responses[1].isMark);$ t.equal(226, responses[1].code);' t.equal(true, responses[0].isMark);$ t.equal(150, responses[0].code);t.equal(2, responses.length); parser.on('end', function() { }); } responses.push(line);" while (line = parser.read()) {$ parser.on('readable', function() { var responses = []; stream.pipe(parser) * var stream = resumer().queue(res).end();  B '226 This is the last line of the response, using code 226\n'; I ' 226 This line does not end the response;note the leading space\n' + ; '226-This is the first line of the second response\n' + % '150 This line ends the mark\n' + = '123-This line does not end the mark;note the hyphen\n' +6 var res = '150-This is the first line of a mark\n' +0tape('Parse multiline response 2', function(t) {var parser = require('./');!var resumer = require('resumer');var tape = require('tape');5_$ " v RY!5_ " v R\"$ t.equal(150, responses[0].code);5_ " v R^' t.equal(true, responses[0].isMark);5_ " v R^""5_ " v R`#5_  " v Rb "$5_! " v Rk "%5_! " v Ro $%t.equal(!"%5_## " v Rr"$'# '150 This line ends the mark\n'5_#2 " v R֊"$'8 '150 This line ends the mark\n', responses[0].line);5_#  " v R֛"$'8 '150 This line ends the mark\n', responses[0].text);5_#  " v R֛"$'7 '150 This line ends the markn', responses[0].text);5_# " v R֢&(});%' });$& t.end();#%"$6 '150 This line ends the mark', responses[0].text);!#= '123-This line does not end the mark;note the hyphen\n' + "2t.equal('150-This is the first line of a mark\n' +! ( t.equal(false, responses[1].isMark);' t.equal(true, responses[0].isMark);$ t.equal(226, responses[1].code);$ t.equal(150, responses[0].code);! t.equal(2, responses.length); parser.on('end', function() { }); } responses.push(line);" while (line = parser.read()) {$ parser.on('readable', function() { var responses = []; stream.pipe(parser) * var stream = resumer().queue(res).end();  B '226 This is the last line of the response, using code 226\n'; I ' 226 This line does not end the response;note the leading space\n' + ; '226-This is the first line of the second response\n' + % '150 This line ends the mark\n' + = '123-This line does not end the mark;note the hyphen\n' +6 var res = '150-This is the first line of a mark\n' +0tape('Parse multiline response 2', function(t) {var parser = require('./');!var resumer = require('resumer');var tape = require('tape');5_# = vR֫#&(#%'5_% = vRֱ$()t.equal(%&)5_'> = vRִ&(+> '226 This is the last line of the response, using code 2265_'S = vR*,});)+ });(* t.end();')&(T '226 This is the last line of the response, using code 226', responses[1].text);%'I ' 226 This line does not end the response;note the leading space\n' +$&?t.equal('226-This is the first line of the second response\n' +#%"$8 '150 This line ends the mark', responses[0].text);!#? '123-This line does not end the mark;note the hyphen\n' + "6 t.equal('150-This is the first line of a mark\n' +! ( t.equal(false, responses[1].isMark);' t.equal(true, responses[0].isMark);$ t.equal(226, responses[1].code);$ t.equal(150, responses[0].code);! t.equal(2, responses.length); parser.on('end', function() { }); } responses.push(line);" while (line = parser.read()) {$ parser.on('readable', function() { var responses = []; stream.pipe(parser) * var stream = resumer().queue(res).end();  B '226 This is the last line of the response, using code 226\n'; I ' 226 This line does not end the response;note the leading space\n' + ; '226-This is the first line of the second response\n' + % '150 This line ends the mark\n' + = '123-This line does not end the mark;note the hyphen\n' +6 var res = '150-This is the first line of a mark\n' +0tape('Parse multiline response 2', function(t) {var parser = require('./');!var resumer = require('resumer');var tape = require('tape');5_'C = vR&)+V '226 This is the last line of the response, using code 226', responses[1].text);5_( = vR+-});*, });)+ t.end();(*')responses[1].text);&(C '226 This is the last line of the response, using code 226', %'K ' 226 This line does not end the response;note the leading space\n' +$&C t.equal('226-This is the first line of the second response\n' +#%"$8 '150 This line ends the mark', responses[0].text);!#? '123-This line does not end the mark;note the hyphen\n' + "6 t.equal('150-This is the first line of a mark\n' +! ( t.equal(false, responses[1].isMark);' t.equal(true, responses[0].isMark);$ t.equal(226, responses[1].code);$ t.equal(150, responses[0].code);! t.equal(2, responses.length); parser.on('end', function() { }); } responses.push(line);" while (line = parser.read()) {$ parser.on('readable', function() { var responses = []; stream.pipe(parser) * var stream = resumer().queue(res).end();  B '226 This is the last line of the response, using code 226\n'; I ' 226 This line does not end the response;note the leading space\n' + ; '226-This is the first line of the second response\n' + % '150 This line ends the mark\n' + = '123-This line does not end the mark;note the hyphen\n' +6 var res = '150-This is the first line of a mark\n' +0tape('Parse multiline response 2', function(t) {var parser = require('./');!var resumer = require('resumer');var tape = require('tape');5_ = vR -,5_ = vR,.});+- });*, t.end();)+(* responses[1].text);')B '226 This is the last line of the response, using code 226',&(K ' 226 This line does not end the response;note the leading space\n' +%'C t.equal('226-This is the first line of the second response\n' +$&#%8 '150 This line ends the mark', responses[0].text);"$? '123-This line does not end the mark;note the hyphen\n' +!#6 t.equal('150-This is the first line of a mark\n' + "!( t.equal(false, responses[1].isMark); ' t.equal(true, responses[0].isMark);$ t.equal(226, responses[1].code);$ t.equal(150, responses[0].code);! t.equal(2, responses.length); parser.on('end', function() { }); } responses.push(line);" while (line = parser.read()) { var line;$ parser.on('readable', function() { var responses = []; stream.pipe(parser) * var stream = resumer().queue(res).end();  B '226 This is the last line of the response, using code 226\n'; I ' 226 This line does not end the response;note the leading space\n' + ; '226-This is the first line of the second response\n' + % '150 This line ends the mark\n' + = '123-This line does not end the mark;note the hyphen\n' +6 var res = '150-This is the first line of a mark\n' +0tape('Parse multiline response 2', function(t) {var parser = require('./');!var resumer = require('resumer');var tape = require('tape');5_ = vR!- stream.pipe(parser)5_ = vR"5_ = vR'#-,5_ = vRG$console.log(line);5_ = vR,var parser = require('./');5_  = vR - ,5_  = vR var par5_  = vR - ,5_  = vR -var parser = new Parser()5_ = vR% -var parser = (new Parser()5_ = vR&,.});+- });*, t.end();)+(* responses[1].text);')B '226 This is the last line of the response, using code 226',&(K ' 226 This line does not end the response;note the leading space\n' +%'C t.equal('226-This is the first line of the second response\n' +$&#%8 '150 This line ends the mark', responses[0].text);"$? '123-This line does not end the mark;note the hyphen\n' +!#6 t.equal('150-This is the first line of a mark\n' + "!( t.equal(false, responses[1].isMark); ' t.equal(true, responses[0].isMark);$ t.equal(226, responses[1].code);$ t.equal(150, responses[0].code);! t.equal(2, responses.length); parser.on('end', function() { }); } responses.push(line);" while (line = parser.read()) { var line;$ parser.on('readable', function() { var responses = []; stream.pipe(parser); #var parser = (new Parser()).parser; * var stream = resumer().queue(res).end();  B '226 This is the last line of the response, using code 226\n'; I ' 226 This line does not end the response;note the leading space\n' + ; '226-This is the first line of the second response\n' + % '150 This line ends the mark\n' += '123-This line does not end the mark;note the hyphen\n' +6 var res = '150-This is the first line of a mark\n' +0tape('Parse multiline response 2', function(t) {var Parser = require('./');!var resumer = require('resumer');var tape = require('tape');5_ = vR'.-5_ = vR= .% var parser = (new Parser()).parser;5_ = vR= .$ var parser = new Parser()).parser;5_ = vR= .# var parser = new Parser().parser;5_ = vR= ." var parser = new Parser()parser;5_ = vR= .! var parser = new Parser()arser;5_ = vR= . var parser = new Parser()rser;5_ = vR= . var parser = new Parser()ser;5_ = vR= . var parser = new Parser()er;5_ = vR=( . var parser = new Parser()r;5_ = vR>)console.log(line)5_- = vR--5_/+ = vR$.00/tape('Parse single line - normal', function() {5_// = vR(.003tape('Parse single line - normal', functionatat() {5_/, = vR*.00/tape('Parse single line - normal', function() {5_/0 = vR+.100tape('Parse single line - normal', function(t) {5_0  = vR_/11 var str = '5_0  = vRc/111 var str = 'User logged out; service terminated.5_05 = vR{/315 var str = '231 User logged out; service terminated.5_06 = vRՉ/136 var str = '231 User logged out; service terminated.'5_06 = vRՊ0230135_1 = vRՋ1751345_6VRձ6=96795_6VRճ56 parser.on5_8VRո79>" while (line = parser.read()) {5_8VRո79>! hile (line = parser.read()) {5_8VRո79> ile (line = parser.read()) {5_8VRչ79> le (line = parser.read()) {5_8VRչ79> e (line = parser.read()) {5_8VRչ79> (line = parser.read()) {5_8VRչ79> (line = parser.read()) {5_9VRս8:> responses.push(line);5_9VRտ89 responses.push(line);5_9VRտ89 }5_8VR7;< line = parser.read()) {5_:VR9:t.equal5_9VR9;=9:=5_:VR:<>:;>5_;VR;=?;<?5_:VR9;@ t.equal(line.code, 231);5_:VR9;@ t.equal(line.isMark, 231);5_;VR:<@ t.equal(line.code, 231);5_;VR:<@ t.equal(line.code, false);5_<VR;=@ t.equal(line.code, 231);5_<VR;=@ t.equal(line.text, 231);5_<VR;=@B t.equal(line.text, 231 User logged out; service terminated.');5_<VR <>A<>@5_=VR@B});?A >@=? });<>t.end();;=C t.equal(line.text, '231 User logged out; service terminated.');:<! t.equal(line.isError, false);9; t.equal(line.isMark, false);8: t.equal(line.code, 231);79 line = parser.read();68 var line;57$ parser.on('readable', function() {4635stream.pipe(parser);24 var parser = new Parser();1302* var stream = resumer().queue(res).end();/17 var str = '231 User logged out; service terminated.';.00tape('Parse single line - normal', function(t) {-/,.});+- });*, t.end();)+(* responses[1].text);')B '226 This is the last line of the response, using code 226',&(K ' 226 This line does not end the response;note the leading space\n' +%'C t.equal('226-This is the first line of the second response\n' +$&#%8 '150 This line ends the mark', responses[0].text);"$? '123-This line does not end the mark;note the hyphen\n' +!#6 t.equal('150-This is the first line of a mark\n' + "!( t.equal(false, responses[1].isMark); ' t.equal(true, responses[0].isMark);$ t.equal(226, responses[1].code);$ t.equal(150, responses[0].code);! t.equal(2, responses.length); parser.on('end', function() { }); } responses.push(line);" while (line = parser.read()) { var line;$ parser.on('readable', function() { var responses = []; stream.pipe(parser);  var parser = new Parser(); * var stream = resumer().queue(res).end();  B '226 This is the last line of the response, using code 226\n'; I ' 226 This line does not end the response;note the leading space\n' + ; '226-This is the first line of the second response\n' + % '150 This line ends the mark\n' += '123-This line does not end the mark;note the hyphen\n' +6 var res = '150-This is the first line of a mark\n' +0tape('Parse multiline response 2', function(t) {var Parser = require('./');!var resumer = require('resumer');var tape = require('tape');5_?VR*>?5_?VR!+?var tape = require('tape');!var resumer = require('resumer');var Parser = require('./');0tape('Parse multiline response 2', function(t) {6 var res = '150-This is the first line of a mark\n' += '123-This line does not end the mark;note the hyphen\n' +% '150 This line ends the mark\n' +; '226-This is the first line of the second response\n' +I ' 226 This line does not end the response;note the leading space\n' +B '226 This is the last line of the response, using code 226\n';* var stream = resumer().queue(res).end(); var parser = new Parser(); stream.pipe(parser); var responses = [];$ parser.on('readable', function() { var line;" while (line = parser.read()) { responses.push(line); } }); parser.on('end', function() {! t.equal(2, responses.length);$ t.equal(150, responses[0].code);$ t.equal(226, responses[1].code);' t.equal(true, responses[0].isMark);( t.equal(false, responses[1].isMark);6 t.equal('150-This is the first line of a mark\n' +? '123-This line does not end the mark;note the hyphen\n' +8 '150 This line ends the mark', responses[0].text);C t.equal('226-This is the first line of the second response\n' +K ' 226 This line does not end the response;note the leading space\n' +B '226 This is the last line of the response, using code 226', responses[1].text); t.end(); });});0tape('Parse single line - normal', function(t) {7 var str = '231 User logged out; service terminated.';* var stream = resumer().queue(res).end(); var parser = new Parser(); stream.pipe(parser);$ parser.on('readable', function() { var line; line = parser.read(); t.equal(line.code, 231); t.equal(line.isMark, false);! t.equal(line.isError, false);C t.equal(line.text, '231 User logged out; service terminated.'); t.end(); });});5_1?VR2,02?* var stream = resumer().queue(res).end();5_/?/VRW./0tape('Parse single line - normal', function(t) {7 var str = '231 User logged out; service terminated.';* var stream = resumer().queue(str).end(); var parser = new Parser(); stream.pipe(parser);$ parser.on('readable', function() { var line; line = parser.read(); t.equal(line.code, 231); t.equal(line.isMark, false);! t.equal(line.isError, false);C t.equal(line.text, '231 User logged out; service terminated.'); t.end(); });});5_//VRY..5_@@VR\.?5_/?VR@; '226-This is the first line of the second response\n' +5_%AAVR@% '150 This line ends the mark\n' +5_)AAVR(!@ @5_ BBVR+!A* var stream = resumer().queue(res).end();5_ #BBVR4/!A+ var stream2 = resumer().queue(res).end();5_"BBVR:"$B"$A5_#CCVRD0AB@B});?A });>@ t.end();=?<> responses[1].text);;=B '226 This is the last line of the response, using code 226',:<K ' 226 This line does not end the response;note the leading space\n' +9;C t.equal('226-This is the first line of the second response\n' +8:798 '150 This line ends the mark', responses[0].text);68? '123-This line does not end the mark;note the hyphen\n' +576 t.equal('150-This is the first line of a mark\n' +4635( t.equal(false, responses[1].isMark);24' t.equal(true, responses[0].isMark);1302$ t.equal(226, responses[1].code);/1$ t.equal(150, responses[0].code);.0-/! t.equal(2, responses.length);,. parser.on('end', function() {+-*, });)+ }(* responses.push(line);')" while (line = parser.read()) {&( var line;%'$ parser.on('readable', function() {$& var responses = [];#%"$stream2.pipe(parser);!# stream.pipe(parser); " var parser = new Parser();!, var stream2 = resumer().queue(res2).end(); * var stream = resumer().queue(res).end();B '226 This is the last line of the response, using code 226\n';I ' 226 This line does not end the response;note the leading space\n' +F var res2 = '226-This is the first line of the second response\n' +$ '150 This line ends the mark\n';= '123-This line does not end the mark;note the hyphen\n' +6 var res = '150-This is the first line of a mark\n' +0tape('Parse multiline response 2', function(t) {}); }); t.end();C t.equal(line.text, '231 User logged out; service terminated.');! t.equal(line.isError, false); t.equal(line.isMark, false); t.equal(line.code, 231);  line = parser.read();  var line; $ parser.on('readable', function() {   stream.pipe(parser);  var parser = new Parser(); * var stream = resumer().queue(str).end();7 var str = '231 User logged out; service terminated.';0tape('Parse single line - normal', function(t) {var Parser = require('./');!var resumer = require('resumer');var tape = require('tape');5_"BBVRc A* var stream = resumer().queue(res).end();5_"BBVRe1 A# var stream = resumer().queue(res;5_"BBVRؑ@AA5_kkVRؕj0tape('Parse multiline response 2', function(t) {5_kkVRؕ2j/tape('Parse multiline response2', function(t) {5_?kkVRؙ3?Aj5_kkAvRبj});k5_kkAvRةjn3});tape('Parse multiline response 2', function(t) {5_mkAvRحln0tape('Parse multiline response 2', function(t) {5_pqsVRoq$ '150 This line ends the mark\n';5_pqsVRoq% '1'50 This line ends the mark\n';5_qqsVRprD var res2 = '226-This is the first line of the second response\n' +qr5_q*qsVR5prb var res2 = '50 This line ends the mark\n';226-This is the first line of the second response\n' +5_o"qsVR47np= '123-This line does not end the mark;note the hyphen\n' + '1'5_5prVRO87 var str = '231 User logged out; service terminated.';5_ prVRC t.equal('226-This is the first line of the second response\n' +5_AprVRB '226 This is the last line of the response, using code 226', responses[1].text);5_AprVR9V '226 This is the last line of the response, using code 226', responses[1].text);5_##5v5R8 '150 This line ends the mark', responses[0].text);5_ #5v5R6 t.equal('150-This is the first line of a mark\n' +5_#5v5RI t.equal(, responses[0].text'150-This is the first line of a mark\n' +5_ #5v5RJ t.equal(, responses[0].text,'150-This is the first line of a mark\n' +5_ #5v5RI t.equal( responses[0].text,'150-This is the first line of a mark\n' +5_  #5v5R;}); }); t.end();C '226 This is the last line of the response, using code 226');K ' 226 This line does not end the response;note the leading space\n' +V t.equal(responses[1].text, '226-This is the first line of the second response\n' +% '150 This line ends the mark');? '123-This line does not end the mark;note the hyphen\n' +H t.equal(responses[0].text,'150-This is the first line of a mark\n' +( t.equal(false, responses[1].isMark);' t.equal(true, responses[0].isMark);$ t.equal(226, responses[1].code);$ t.equal(150, responses[0].code);! t.equal(2, responses.length); parser.on('end', function() { });~ }} responses.push(line);|~" while (line = parser.read()) {{} var line;z|$ parser.on('readable', function() {y{ var responses = [];xzwy stream2.pipe(parser);vx stream.pipe(parser);uw var parser = new Parser();tv, var stream2 = resumer().queue(res2).end();su$ var stream = resumer().queue(res);rtqsB '226 This is the last line of the response, using code 226\n';prI ' 226 This line does not end the response;note the leading space\n' +oqa var res2 = '50 This line ends the mark\n;226-This is the first line of the second response\n' +npA '123-This line does not end the mark;note the hyphen\n' + '1'mo6 var res = '150-This is the first line of a mark\n' +ln0tape('Parse multiline response 3', function(t) {kmjl});ik });hj t.end();gifh responses[1].text);egB '226 This is the last line of the response, using code 226',dfK ' 226 This line does not end the response;note the leading space\n' +ceC t.equal('226-This is the first line of the second response\n' +bdac8 '150 This line ends the mark', responses[0].text);`b? '123-This line does not end the mark;note the hyphen\n' +_a6 t.equal('150-This is the first line of a mark\n' +^`]_( t.equal(false, responses[1].isMark);\^' t.equal(true, responses[0].isMark);[]Z\$ t.equal(226, responses[1].code);Y[$ t.equal(150, responses[0].code);XZWY! t.equal(2, responses.length);VX parser.on('end', function() {UWTV });SU }RT responses.push(line);QS" while (line = parser.read()) {PR var line;OQ$ parser.on('readable', function() {NP var responses = [];MOLN stream2.pipe(parser);KM stream.pipe(parser);JL var parser = new Parser();IK, var stream2 = resumer().queue(res2).end();HJ$ var stream = resumer().queue(res);GIFHB '226 This is the last line of the response, using code 226\n';EGI ' 226 This line does not end the response;note the leading space\n' +DFD var res2 = '226-This is the first line of the second response\n' +CE$ '150 This line ends the mark\n';BD= '123-This line does not end the mark;note the hyphen\n' +AC6 var res = '150-This is the first line of a mark\n' +@B0tape('Parse multiline response 2', function(t) {?A>@});=? });<> t.end();;=:< responses[1].text);9;B '226 This is the last line of the response, using code 226',8:K ' 226 This line does not end the response;note the leading space\n' +79C t.equal('226-This is the first line of the second response\n' +68578 '150 This line ends the mark', responses[0].text);46? '123-This line does not end the mark;note the hyphen\n' +356 t.equal('150-This is the first line of a mark\n' +2413( t.equal(false, responses[1].isMark);02' t.equal(true, responses[0].isMark);/1.0$ t.equal(226, responses[1].code);-/$ t.equal(150, responses[0].code);,.+-! t.equal(2, responses.length);*, parser.on('end', function() {)+(* });') }&( responses.push(line);%'" while (line = parser.read()) {$& var line;#%$ parser.on('readable', function() {"$ var responses = [];!# " stream.pipe(parser);! var parser = new Parser(); * var stream = resumer().queue(res).end();B '226 This is the last line of the response, using code 226\n';I ' 226 This line does not end the response;note the leading space\n' +; '226-This is the first line of the second response\n' +% '150 This line ends the mark\n' += '123-This line does not end the mark;note the hyphen\n' +6 var res = '150-This is the first line of a mark\n' +.tape('Parse multiline response', function(t) {}); }); t.end();C t.equal(line.text, '231 User logged out; service terminated.');! t.equal(line.isError, false); t.equal(line.isMark, false); t.equal(line.code, 231);  line = parser.read();  var line; $ parser.on('readable', function() {   stream.pipe(parser);  var parser = new Parser(); * var stream = resumer().queue(str).end();9 var str = '231 User logged out; service terminated.\n';0tape('Parse single line - normal', function(t) {var Parser = require('./');!var resumer = require('resumer');var tape = require('tape');5_ p*#5v5R?oqa var res2 = '50 This line ends the mark\n;226-This is the first line of the second response\n' +5_qqqVRضpt5_sqqVRظrt5_uqqVRػtv5_r$qqVRؼ4qs* var stream = resumer().queue(res).end();5_VRg console.log('%', line)5_rt|sVR5_sutVR 5_twuVR5_uxvwVR});5_wyxVRvar tape = require('tape');!var resumer = require('resumer');var parser = require('./');0tape('Parse multiline response 2', function(t) {6 var res = '150-This is the first line of a mark\n' + = '123-This line does not end the mark;note the hyphen\n' + % '150 This line ends the mark\n' + ; '226-This is the first line of the second response\n' + I ' 226 This line does not end the response;note the leading space\n' + B '226 This is the last line of the response, using code 226\n';  * var stream = resumer().queue(res).end(); stream.pipe(parser) var responses = [];$ parser.on('readable', function() { var line1 = parser.read(); var line2 = parser.read(); }); t.end();});5_xzyVR console.log(line1, line25_y{zVR console.log(line1, line2)5_z{VR console.log(line1, line2);5_uwvVR  })5_LNM vR;!! var res = tape[5_(*)VRɾ ( 150-This is the first line of a mark= 123-This line does not end the mark; note the hyphen) 150 This line ends the markD 226-This is the first line of the second responseX 226 This line does not end the response; note the leading spaceW 226 This is the last line of the response, using code 2265