VimUnDow ٬޶ɰMpeAoW_Bvar Method = require('method')rZZZPJ_sr6vP k665_rts5vP l467@ take(first(source), take(rest(source), n - 1))5_sutvP m$8 75_tvuvP m%8 make()5_uwvvP m'8 make(t)5_vxwvP m+8 return make(t)5_wyxvP m0) return new tail.constructor(head, tail)5_xzyvP m5var make = Method875_y{zvP m;95_z|{vP m>!:5_{}|vP m;:5_|~} vP m; make.define()5_}~vP m;make.define(null, function())5_~vP m; make.define(null, function() {})5_vP m;(make.define(null, function() { return })5_-vP m;/make.define(null, function(_, head) { return })5_.vP m;1make.define(null, function(_, head) { return []})5_3vP m";5make.define(null, function(_, head) { return [head]})5_3vP m;5_vP m=<5_ vP m= first.devel()5_vP m=first.devel(null, function())5_vP m= first.devel(null, function() {})5_*vP m>=5_ vP m>-first.devel(null, function() { return null })5_ vP m> rest.define5_ vP m> rest.define()5_vP m>rest.define(null, function())5_vP m> rest.define(null, function() {})5_'vP m>*rest.define(null, function() { return []})5_(vP n>+rest.define(null, function() { return [ ]})5_(vP n#>*rest.define(null, function() { return []})5_(vP n$>5_6vP n@?5_ 6vP n@ make.define()5_6vP n@make.define(Array, function())5_6vP n @!make.define(Array, function() {})5_6vP n%@"make.define(Array, function() { })5_)6vP n+@,make.define(Array, function(tail, head) { })5_+6vP n/@/make.define(Array, function(tail, head) { [] })5_26vP n2@5make.define(Array, function(tail, head) { [ head ] })5_:6vP n9%@>make.define(Array, function(tail, head) { [ head ].concat() })5_*6vP nA&@Bmake.define(Array, function(tail, head) { [ head ].concat(tail) })5_06vP nCA@5_ 6vP nJAfirst.define()5_6vP nQAfirst.define(Array, )5_6vP nRAfirst.define(Array, function())5_#6vP nSA$first.define(Array, function(array))5_%6vP nSA'first.define(Array, function(array) {})5_36vP nVA6first.define(Array, function(array) { return array[]})5_56vP nW'A7first.define(Array, function(array) { return array[0]})5_56vP nXA5_6vP nZCB5_ 6vP n]Ccount.define()5_6vP n`Ccount.define(Array, function())5_#6vP naC$count.define(Array, function(array))5_%6vP na(C'count.define(Array, function(array) {})5_;6vP ngDC5_6vP nkDisEmpty.define()5_6vP nnD!isEmpty.define(Array, function())5_%6vP noD&isEmpty.define(Array, function(array))5_(6vP nqD*isEmpty.define(Array, function(array) {})5_'6vP nrD)isEmpty.define(Array, function(array) {})5_<6vP nv)D>isEmpty.define(Array, function(array) { return array.length })5_6vP n!E!D5_ 6vP n!Efunction isEmpty()5_ 6vP n"Efunction isEmpty() {}5_!6vP n*!#G!#F5_6vP nvar isEmpty = Method()5_6vP nexports.isEmpty = isEmpty5_6vP n+5_6vP nD5_6vP n5_6vP nD5_6vP nEfunction isEmpty() {5_6vP nF E5_6vP nF count()5_6vP nF count(sequence)5_6vP nF count(sequence) === 05_6vP nFfunction isEmpty(sequence) {return count(sequence) === 0F return count(sequence) === 05_6vP n5_6vP n,D9function isEmpty(sequence) { return count(sequence) === 0}D}5_6vP n-DisEmpty.define(Array, function(array) { return array.length === 0 })5_6vP nCB5_ 6vP nC rest.define()5_6vP nCrest.define(Array, function())5_"6vP nC#rest.define(Array, function(array))5_$6vP nC&rest.define(Array, function(array) {})5_86vP nC;rest.define(Array, function(array) { return array.slice()})5_:6vP n.C')X5_UP@TU5_UP@TUfunction append(left, right) {5_UP@TU return binoid(length, right)5_UP@?TU}5_TP@@ST5_SPATVfunction takeWhileSS5_UPATfunction takeWhile()5_UPATVfunction takeWhile()5_UPATfunction takeWhile() {}5_VPAWYfunction dropWhileVV5_XPA#WYfunction dropWhile()5_XPA#Wfunction dropWhile() {}5_ UPA&TVYfunction takeWhile() {5_" XPA,WYYfunction dropWhile() {5_ #!"UU#UvPA:UWZ UWY5_"$#UU#UvPAFTVZfunction takeWhile(source, f) {5_#%$V U#UvPAJUWZ return f5_$&%UU#UvPAOUW[ UWZ5_%'&VU#UvPARUW[ var head = first()5_&('WU#UvPAWVX[ return predicate()5_')(WU#UvPAYVX[ return predicate(head)5_(*)W U#UvPAfVX[! return predicate(head) ? cons()5_)+*W0U#UvPApVX[2 return predicate(head) ? cons(head, takeWhile())5_*,+W5U#UvPArVX[8 return predicate(head) ? cons(head, takeWhile(rest()))5_+-,W<U#UvPAtVX[> return predicate(head) ? cons(head, takeWhile(rest(source)))5_,.-WIU#UvPAyVX[I return predicate(head) ? cons(head, takeWhile(rest(source), predicate))5_-0.WJU#UvPAzAWY\ WY[5_.1/0XU#UvPAWY\ : null5_021XU#UvPAWY\ null5_132XU#UvPABWY\ null5_243[U#UvPA[]] []\5_354\U#UvPA[]] var head = first()5_465\U#UvPA\^^ \^]5_576]U#UvPA\^^ return predicate()5_687]U#UvPA\^^ return predicate(head)5_798]%U#UvPA\^^& return predicate(head) ? dropWhile()5_8:9]*U#UvPA\^^, return predicate(head) ? dropWhile(rest())5_9;:]1U#UvPA\^^2 return predicate(head) ? dropWhile(rest(source))5_:<;]=U#UvPA]_ rest\_^= return predicate(head) ? dropWhile(rest(source), predicate)5_;=<^ U#UvPA]__! rest()5_<>=[U#UvPACZ\_function dropWhile(source, f) {5_=?>YU#UvPAY[`Y[_5_>@?`U#UvPAD``5_?A@aU#UvPBbd function zipaa5_@BAc U#UvPBbfunction zip()5_ACBcU#UvPBbdfunction zip(left, right)5_BDCcU#UvPBbfunction zip(left, right) {}5_CEDcU#UvPBcee ced5_DFEcU#UvPCbdefunction zip(left, right) {5_EGFd U#UvPCcee var head = 5_FHGdU#UvPCcee var head = f()5_GIHdU#UvPCcee var head = f(first())5_HJIdU#UvPCcee var head = f(first(left))5_IKJd"U#UvPCcee$ var head = f(first(left), first())5_JLKd&U#UvPC"dff dfe5_KMLd d d(v(PC8cef) var head = f(first(left), first(right))5_LNMdd d(v(PC9cd var head = 5_MONd d d(v(PC:cee return cons()5_NPOdd d(v(PC<df zip)cfe cons()5_OQPe d d(v(PCDdff zip())5_PRQed d(v(PCGdff zip(rest()))5_QSRed d(v(PCHdff zip(rest(left)))5_RTSed d(v(PCKdff zip(rest(left), rest()))5_SUTe"d d(v(PCOdff$ zip(rest(left), rest(right)))5_TVUed d(v(PCQcef$ cons(f(first(left), first(right)), zip(rest(left), rest(right), f))dff' zip(rest(left), rest(right), f))5_UWVd%d d(v(PCcfeE cons(f(first(left), first(right)), zip(rest(left), rest(right), f))5_VXWdd d(v(PCcef$ cons(f(first(left), first(right)),5_WYXed d(v(PCdff' zip(rest(left), rest(right), f))5_XZY(d d(v(PF)+ function lazy(+g(*f5_Y[Z*f f(v(PG)+hfunction lazy()5_Z\[*f f(v(PG),hfunction lazy() {}5_[]\*g g(v(PG)+ifunction lazy() {5_\^]*g g(v(PGL)+ifunction lazy(source, f) {5_]_^)g g(v(PGa)+j)+i5_^`_*h h(v(PGf)+jfunction Lazy()5__a`*h h(v(PGf)+jfunction Lazy() {}5_`ba*h h(v(PGn*,j5_acb*i i(v(PGr*,k5_bdc+j j(v(PG*,l5_ced+ j j(v(PG*,lfirst.define()5_dfe+j j(v(PG*,lfirst.define(Lazy, function())5_egf+j j(v(PG*,l!first.define(Lazy, function() {})5_fhg+j j(v(PG*,l"first.define(Lazy, function() { })5_gih+#j j(v(PG*,l&first.define(Lazy, function(lazy) { })5_hji+$j j(v(PG*-lCfirst.define(Lazy, function(lazy) { lazy.value || lazy.valueOf() })5_ikj,k k(v(PG+.m! lazy.value || lazy.valueOf() })5_jlk,l l(v(PG+-n lazy.value || lazy.valueOf()5_kml,l l(v(PG+-n lazy.value || lazy.forse()5_lnm,l l(v(PG+-n) lazy.value || lazy.value = lazy.forse()5_mon,*l l(v(PG+-n* lazy.value || (lazy.value = lazy.forse()5_npo,l l(v(PG+-n+ lazy.value || (lazy.value = lazy.forse())5_oqp, l l(v(PG+-n, (lazy.value || (lazy.value = lazy.forse())5_prq,l l(v(PG+-n- (lazy.value) || (lazy.value = lazy.forse())5_qsr,l l(v(PG+-n7 var self = lazy.value) || (lazy.value = lazy.forse())5_rts,l l(v(PH ,.o ,.n5_sut, m m(v(PH+-o6 var self = lazy.value || (lazy.value = lazy.forse())5_tvu,1m m(v(PH+-o1 first(lazy.value || (lazy.value = lazy.forse())5_uwv,m m(v(PH+-o2 first(lazy.value || (lazy.value = lazy.forse()))5_vxw-m m(v(PH,- 5_wyx-l l(v(PH-/o-/n5_xzy. m m(v(PH&-/o rest.define()5_y{z.m m(v(PH*-/orest.define(Lazy, function())5_z|{. m m(v(PH+-/o!rest.define(Lazy, function(lazy))5_{}|."m m(v(PH,-0o$rest.define(Lazy, function(lazy) {})5_|~}.n n(v(PH-.0q .0p5_}~/o o(v(PH2.0q return rest()5_~/o o(v(PH8.0q return rest(lazy.value || ())5_/7o o(v(PHAE.0q: return rest(lazy.value || (lazy.value === lazy.forin()))5_0o o(v(PHU02r02q5_*p p(v(PHa*,s*,r5_+q q(v(PHb*,s[]5_+q q(v(PHl*,s[ first, rest, count, make ]5_+q q(v(PHm*,s;[ first, rest, count, make ]5_+&q q(v(PHp*,s';[ first, rest, count, make ].forEach()5_+0q q(v(PHr*,s1;[ first, rest, count, make ].forEach(function())5_+2q q(v(PHr*-s4;[ first, rest, count, make ].forEach(function() {})5_+/r r(v(PHx*,t2;[ first, rest, count, make ].forEach(function() {5_+/r r(v(PHz+-u +-t5_+0s s(v(PH~*,u3;[ first, rest, count, make ].forEach(function(f) {5_,s s(v(PH+-u5_,s s(v(PH+-u method.define()5_,s s(v(PH+-u! method.define(Lazy, function())5_,$s s(v(PH+-u% method.define(Lazy, function(lazy))5_,&s s(v(PH+.u( method.define(Lazy, function(lazy) {})5_,#t t(v(PH+-v& method.define(Lazy, function(lazy) {5_,"t t(v(PH,.w ,.v5_-u u(v(PH,.w return method()5_-!u u(v(PH,.w# return method(self.value || ())5_+u u(v(PH*,w8;[ first, rest, count, make ].forEach(function(method) {5_+u u(v(PH*,w7[ first, rest, count, make ].forEach(function(method) {5_/u u(v(PH.0w})5_/u u(v(PH/1w5_/v v(v(PH.0x});5_1v v(v(PH01#first.define(Lazy, function(lazy) {5_1u u(v(PH019 return first(lazy.value || (lazy.value = lazy.forse()))5_1t t(v(PH01})5_1s s(v(PH01"rest.define(Lazy, function(lazy) {5_1r r(v(PH01: return rest(lazy.value || (lazy.value === lazy.forse()))5_1q q(v(PH01})5_1p p(v(PH01count.5_1o o(v(PH015_*n n(v(PH)+pfunction Lazy() {}5_***vPH)+pfunction Lazy(forse) {}5_-8**vPHF,.p< return method(self.value || (self.value = self.forse()))5_***vPH)+pfunction Lazy(force) {}5_***vPI)+pfunction Lazy(expand) {}5_***vPI)+pfunction Lazy(expand) {} 5_***vPI)+pfunction Lazy(expand) {}5_***vPI )+p.function Lazy(expand) { this.expand = expand }5_*0**vPI)+p2function Lazy(expression) { this.expand = expand }5_-8**vPIG,.p< return method(self.value || (self.value = self.force()))5_1**vPI702pfunction lazy(f) {5_1**vPI;02pfunction lazy(f) { return new5_1**vPI=02pfunction lazy(f) { return new5_1#**vPI>02p$function lazy(f) { return new Lazy()5_1%**vPI?02p%function lazy(f) { return new Lazy(f)5_2**vPIAH12}5_G**vPIXFHofunction filter(source, f) {5_G **vPI[FHo)var filter = function filter(source, f) {5_J**vPI^IKo}5_G!**vPIdFHo.var filter = lazy(function filter(source, f) {5_M**vPILNofunction map(source, f) {5_O**vPINPo}5_M**vPIILNo(var map = lazy(function map(source, f) {5_R**vPIQSofunction take(source, n) {5_R**vPIQSo*var take = lazy(function take(source, n) {5_U**vPITVo}5_X**vPIWYofunction drop(source, n) {5_X **vPIWYo%var drop = function drop(source, n) {5_X**vPIWYo*var drop = lazy(function drop(source, n) {5_[**vPIZ\o}5_^**vPI]_o'function takeWhile(source, predicate) {5_^**vPI]_o7var takeWhile = function takeWhile(source, predicate) {5_^'**vPI]_o33 v PK>M=>5_?33 v PK?>?function cons(head, tail) {5_?33 v PK?>? return make(tail, head)5_?33 v PK@>?}5_?33 v PK@>?exports.cons = cons5_?33 v PKA>?5_;33 v PKCN:<qfunction sequence(head, rest) {5_633 v PK68r68q5_7 33 v PK68rfirst.define()5_7 33 v PK68r"first.define(Sequence, function())5_7'33 v PK68r(first.define(Sequence, function(stream))5_7)33 v PK69r+first.define(Sequence, function(stream) {})5_733 v PKO79t 79s5_**2v,PKP)+t 6function Lazy(expression) { this.expand = expression }8![ first, rest, count, make ].forEach(function(method) {& method.define(Lazy, function(self) {= return method(self.value || (self.value = self.expand())) })})'function lazy(f) { return new Lazy(f) }function Sequence(head, rest) {5_8**v,PKQ8Cl8:k5_22**v,PK13u; return stream.tail || (stream.tail = stream.rest(stream))5_2>**v,PLR13u@ return stream.tail || (stream.tail = stream.rest.call(stream))5_9'**v,PL8:u6function Lazy(expression) { this.expand = expression }5_92**v,PLS8:u4function Lazy(expression) { this.call = expression }5_<9**v,PL T;=u= return method(self.value || (self.value = self.expand()))5_;%**v,PL&;=v ;=u5_A**v,PLO@Cv'function lazy(f) { return new Lazy(f) }5_B**v,PLRADw return new Lazy(f) }5_B**v,PLUACx return new Lazy(f)5_B**v,PLxACx return function()5_B**v,PLxADx return function() {}5_B**v,PL{BDz BDy5_C**v,PLBDz return Lazy()5_C**v,PLBDz return Lazy(arguments)5_C **v,PLBDz return Lazy(f, arguments)5_B**v,PLACz return function() {5_<**v,PL;=z self.call()5_< **v,PL;=z self.call(self.arguments)5_<**v,PL;=z self.apply(self.arguments)5_9**v,PL8;z.function Lazy(expression) { this.call = call }5_:**v,PL9<{ this.call = call }5_:**v,PL:<} :<|5_: **v,PL9;} this.call = call5_:**v,PL9;} this.f = call5_9**v,PL8:}function Lazy(expression) {5_9**v,PL8:}function Lazy(f, arguments) {5_;**v,PL:<} this.5_? **v,PL>@}$ self.apply(self, self.arguments)5_?**v,PL>@}& self.f.apply(self, self.arguments)5_???'v'PL>@}( self.f.apply(self.f, self.arguments)5_???'v'PL>? 5_ ?9??'v'PM>@|; return method(self.value || (self.value = self.call()))5_  >??'v'PM&>@} >@|5_   ?@@'v'PM)>@} if ()5_  ?@@'v'PM,>@} if (self.f)5_  ?@@'v'PM7>A} if (self.f) {}5_?AA'v'PM;?A ?A~5_B.B.BRvRPMCACT return method(self.value || (self.value = self.f.apply(self.f, self.arguments)))5_@B.BRvRPMD?A self.value = 5_@8B.BRvRPMJ?A8 self.value = self.f.apply(self.f, self.arguments))5_@6B.BRvRPMK@B @B5_BC.CRvRPMWBD BD5_DD.DRvRPM[CD/ return method(self.value || (self.value = )5_ID.DRvRPMfGI" return function LazySequence() {return new Lazy(f, arguments)HJ! return new Lazy(f, arguments)5_ID.DRvRPMhGI@ return function LazySequence() { return new Lazy(f, arguments)}HJ }5_<D.DRvRPM<><>~5_=E.ERvRPM<>Lazy.prototype.5_= E.ERvRPM<> Lazy.prototype.call = function()5_="E.ERvRPM<?#Lazy.prototype.call = function() {}5_=F.FRvRPM=? =?5_>G.GRvRPM=? if ()5_ > G.GRvRPM=? if (this.f)5_! >G.GRvRPM=@ if (this.f) {}5_ "!>H.HRvRPM>@ >@5_!#"?I.IRvRPM>@ this.value = this.f.apply()5_"$#?1I.IRvRPM?A ?A5_#%$AJ.JRvRPMAC AC5_$&%E&K.KRvRPNDF& method.define(Lazy, function(self) {5_%'&E9K.KRvRPNDF9 method.define(Lazy, function(self) { return self.call()5_&('E;K.KRvRPNDF; method.define(Lazy, function(self) { return self.call() }5_')(FK.KRvRPN!EF if (self.f) {5_(*)FJ.JRvRPN!EF7 self.value = self.f.apply(self.f, self.arguments)5_)+*FI.IRvRPN!EF$ self.f = self.arguments = null5_*,+FH.HRvRPN"EF }5_+-,FG.GRvRPN"EF return self.value5_,.-FF.FRvRPN#EF })5_-/.;F.FRvRPN,;= ;=5_.0/LG.GRvRPN:KL5_/10=G.GRvRPNc=?=?5_021>H.HRvRPNk=?function forse()5_132>H.HRvRPNl=?function forse(self)5_243>H.HRvRPNl=@function forse(self) {}5_354AAEvPNq@B if (this.f) {3 this.value = this.f.apply(this, this.arguments)" this.f = this.arguments = null } return this.value5_465>AAvPNr>D~ >@}5_576? FFvPNu>@ if (this.f) {5_687@FFvPNw?A3 this.value = this.f.apply(this, this.arguments)5_798AFFvPNy@B" this.f = this.arguments = null5_8:9AFFvPN|@B" self.f = this.arguments = null5_9;:@FFvPN?A3 self.value = this.f.apply(this, this.arguments)5_:<;@"FFvPN?A3 self.value = self.f.apply(this, this.arguments)5_;=<@(FFvPN?A3 self.value = self.f.apply(self, this.arguments)5_<>=> FFvPN=?function forse(self) {5_=?>E"FFvPNDF"Lazy.prototype.call = function() {5_>@?FFFvPNEF 5_?A@FFFvPNEF}5_@BAC FFvPNBD return this.value5_AEBG;FFvPNFH< method.define(Lazy, function(self) { return self.call() })5_BFCEGFFvPNFH method.define(Lazy, force)5_EGFG FFvPNFH! method.define(Lazy, function())5_FHGG"FFvPNFI$ method.define(Lazy, function() {})5_GIHGFFvPNFH" method.define(Lazy, function() {5_HJIG"FFvPNGI GI5_IKJHFFvPNGI return method()5_JLKHFFvPNGI return method(force())5_KMLFFFvPNUEG8![ first, rest, count, make ].forEach(function(method) {5_LNM2'FFvPO&13H return stream.tail || (stream.tail = stream.rest.call(stream, stream))5_MON28FFvPO*13N return stream.tail || (stream.tail = force(stream.rest.call(stream, stream))5_NPO28FFvPO513: return stream.tail || (stream.tail = force(stream.rest))5_OQP2,FFvPO=13B return stream.tail || (stream.tail = force(stream.rest, stream))5_PRQ>2'2,v,POK=?function force(self) {5_QSR=2'2,v,POO=?5_RTS?2'2,v,POT>@function expand(self) {5_SUT?2'2,v,POV>@function expand(form) {5_TVU1%2'2,v,PO^02(rest.define(Sequence, function(stream) {5_UWV.&2'2,v,POb-/)first.define(Sequence, function(stream) {5_VXW/.'. v POf.0 return stream.head5_WYX2.'. v POj13C return stream.tail || (stream.tail = expand(stream.rest, stream))5_XZY2!.'. v POm13E return sequence.tail || (stream.tail = expand(stream.rest, stream))5_Y[Z28.'. v POp13G return sequence.tail || (sequence.tail = expand(stream.rest, stream))5_Z\[2G.'. v POs13I return sequence.tail || (sequence.tail = expand(sequence.rest, stream))5_[]\?.'. v PO>@function expand(form, stream) {5_\^]@ ??vPO?A if (self.f) {5_]_^A??vPO@B3 self.value = self.f.apply(self, self.arguments)5_^`_9 ? ?vPO9; 9;5__a`A::vPO@B if (form.f) {5_`baA ::vPO@B if (!form.f) {5_acbB::vPOAC3 form.value = self.f.apply(self, self.arguments)5_bdcB"::vPOAC3 form.value = form.f.apply(self, self.arguments)5_cedB#::vPOAC4 form.value = form.f.apply(force, self.arguments)5_dfe;::vPO:< this.f = f5_egf9;;vPO8:function Lazy(f, args) {5_fhg9;;vPO8: function Lazy(operation, args) {5_gih;;;vPO:< this.operation = f5_hji;;;vPO:< this.operation = body5_ikj;;;vPO:< this.operation = options5_jlk<;;vPO;= this.arguments = args5_kml<;;vPO;= this.body = args5_lnm=;;vPOV<= this.value = null5_mon:;;vPOW9: this.expanded = false5_npo?::vPO>@ if (!form.expanded) {5_oqp?::vPO>@ if (!form.operation) {5_prq?::vPO>@ if (form.operation) {5_qsr@::vPO?A3 form.value = form.f.apply(form, self.arguments)5_rts@::vPP?A3 form.value = form.f.apply(form, self.arguments)5_sut@::vPP?A6 form.expanded = form.f.apply(form, self.arguments)5_tvu@-::vPP ?A> form.expanded = form.operation.apply(form, self.arguments)5_uwv@1::vPP?AB form.expanded = form.operation.apply(sequence, self.arguments)5_vxw@=::vPP?A> form.expanded = form.operation.apply(form, self.arguments)5_wyxA::vPP@B" self.f = self.arguments = null5_xzyA ::vPP%@B" form.f = self.arguments = null5_y{zA::vPP(@B* form.operation = self.arguments = null5_z|{A#::vPP-@B* form.operation = form.arguments = null5_{}|C ::vPP2BD return self.value5_|~}C::vPP7BD return form.value5_}~@::vPP=?A9 form.expanded = form.operation.apply(form, form.body)5_~C@@ v PPEBD return form.expanded5_D@@ v PPLDF5_I@@ v PPQHJ return method(force(self))5_H#@@ v PPgGI& method.define(Lazy, function(self) {5_IH"HvPPkXHJ return method(expand(self))5_2IH"HvPPY13K return sequence.tail || (sequence.tail = expand(sequence.rest, sequence))5_>H"HvPPZ=?!function expand(form, sequence) {5_FH"HvPP[EFLazy.prototype.call = force5_>>DvPP=?function expand(form) { if (form.body) {7 form.result = form.operation.apply(form, form.body)% form.operation = form.body = null } return form.result}5_8>>vPP8@}8:|5_?EEvPP\?A5_EFFvPPDE5_EEEvPP^DE5_;!EEvPQ;= ;=5_<FFvPR<> <>5_>GGvPR_=>% form.operation = form.body = null5_-vPRq-:-/5_.vPRt`-/&List.prototype.toString = function() {5_7vPRya67exports.List = List5_MMVvPRLN function Lazy(operation, body) { this.operation = operation this.body = body}2![ first, rest, count ].forEach(function(method) {& method.define(Lazy, function(form) { return method(expand(form)) })})5_8MMvPR7C5_8 WWvPR79 function Lazy(operation, body) {5_8** v PR79$function LazySequ(operation, body) {5_;** v PR;=;=5_<'** v PRc;=(LazySequence.prototype = Object.create()5_>** v PRd=?2![ first, rest, count ].forEach(function(method) {5_?** v PRe>@& method.define(Lazy, function(form) {5_=** v PRf<=5_<** v PRg<>5_DDJvPRCE+first.define(Sequence, function(sequence) { return sequence.head})*rest.define(Sequence, function(sequence) {A return sequence.tail || (sequence.tail = expand(sequence.rest))})function cons(head, rest) {5_6DDvPR7@69685_?MMvPR>?5_?LLvPRh>?5_OOWvPRNP function expand(form) { if (form.body) {7 form.result = form.operation.apply(form, form.body) delete form.operation delete form.body } return form.result}5_OOOvPRiNO5_(OOvPRj)4(+(*5_2ZZvPR125_2YYvPRk125_Y2XXvPS XZB return function LazySequence() { return new Lazy(f, arguments) }5_YXXvPSlXZJ return function LazySequence() { return new LazySequence(f, arguments) }5_YXXvPS!mXZF return function sequence() { return new LazySequence(f, arguments) }5_Y XXvPS4X[G return function transform() { return new LazySequence(f, arguments) }5_Z*XXvPS6nY\+ return new LazySequence(f, arguments) }5_XXXvPS>WYfunction lazy(f) {5_ZXXvPSCoY[) return new LazySequence(f, arguments)5_FXXvPTFHFH5_G YYvPTFHcount.define()5_G YYvPTFH"count.define(Sequence, function())5_G)YYvPTFH*count.define(Sequence, function(sequence))5_G+YYvPTFI-count.define(Sequence, function(sequence) {})5_GZZvPTGI GI5_H[[vPTGI return count()5_H[[vPTGI return count(source)5_H[[vPTGI return count(sequence.)5_H[[vPTGI return count(rest(sequence.)5_H[[vPTpGI return count(rest(sequence)5_w [[vPUqvx5 return cons(f(first(source)), map(rest(source), f))5_w[[vPUvx? return source && cons(f(first(source)), map(rest(source), f))5_w>[[vPUsvy> return source ? cons(f(first(source)), map(rest(source), f))5_w [[vPVzvx@ return source ? cons(f(first(source)), map(rest(source), f)) :5_w[[vPV}vxH return isEmpty(source ? cons(f(first(source)), map(rest(source), f)) :5_w[[vPV~vxI return isEmpty(source) ? cons(f(first(source)), map(rest(source), f)) :5_w#[[vPVvyQ return isEmpty(source) ? empty : cons(f(first(source)), map(rest(source), f)) :5_xI[[vPVwyI cons(f(first(source)), map(rest(source), f)) :5_y[[vPVuxy null5_q [[vPVpsJ return f(first(source)) ? cons(first(source), filter(rest(source)), f) :5_s[[vPVrt3 filter(rest(source), f)5_s [[vPVvrt! filter(rest(source), f)5_y[[vPVwz" return isEmpty(source) ? empty :,cons(f(first(source)), map(rest(source), f))xzG cons(f(first(source)), map(rest(source), f))5_y[[vPVxz. cons(f(first(source)), map(rest(source), f))5_y[[vPVxz0 cons(f(first(source)), map(rest(source), f))5_s [[vPVxrt filter(rest(source), f)5_D[[vPW2DF DF5_E\\vPW5DF if ()5_E\\vPW9DF if (sequence.rest)5_E\\vPW:DG if (sequence.rest) {}5_E]]vPW<EG EG5_F^^vPWDEG sequence.tail = expand()5_F'^^vPWIFH FH5_I__vPWQzHJA return sequence.tail || (sequence.tail = expand(sequence.rest))5_,__vPW+-7 form.result = form.operation.apply(form, form.body)5_, __vPW,. ,.5_-``vPX{-/ -/5_2aavPX ~13 return form.result5_HaavPXFGI) sequence.tail = expand(sequence.rest)5_H5aavPXJGI6 sequence.tail = expand(sequence.tailsequence.rest)5_IaavPXUHI delete sequence.rest5_F``vPXXFH FH5_HaavPX^GI if (sequence.rest) {5_HaavPXlGI if (tail && tail.form) {5_IaavPXnGI if (tail && tail.form) expand(sequence.tail)HJ) sequence.tail = expand(sequence.tail)5_H)``vPXpGI. if (tail && tail.form) expand(sequence.tail)5_I``vPXrHI }5_I__vPXtHJ return sequence.tail5_*__vPX})+function expand(form) {5_+__vPX*+ if (form.body) {5_+^^vPX*,5 var value = form.operation.apply(form, form.body)5_+^^vPX*,3 var value = form.operation.apply(form, form.body)5_+'^^vPX*,3 var value = tail.operation.apply(form, form.body)5_+-^^vPX*,3 var value = tail.operation.apply(tail, form.body)5_,^^vPX+- form.head = value.head5_,^^vPX+- form.head = value.head5_*^^vPX)+function expand(tail) {5_+^^vPX*,3 var value = tail.operation.apply(tail, tail.body)5_,^^vPX+- tail.head = value.head5_-^^vPX,. form.tail = value.tail5_+ ^^vPX*,3 var value = form.operation.apply(tail, tail.body)5_,^^vPX+- form.head = value.head5_-^^vPX,. form.tail = value.tail5_.^^vPX-/ delete form.operation5_/^^vPX.0 delete form.body5_0^^vPX/0 }5_0]]vPX/0 return form5_/\\vPX/1 /15_P]]vPYvPRPR5_QQQ"v"PYPR#LazySequence.prototype.isExpandable5_Q#QQ"v"PYPR#LazySequence.prototype.IsExpandable5_QQQ"v"PYPR*LazySequence.prototype.IsExpandable = true5_QQQ"v"PYPR*LazySequence.prototype.ssExpandable = true5_EQQ"v"PYEG EG5_FRR"v"PYEG if ()5_FRR"v"PYEG if (tail.isExpandable)5_F0RR"v"PYEG1 if (tail.isExpandable) sequence.tail = expand()5_GRR"v"PYFG% if (tail && tail.form) expand(tail)5_G QQ"v"PYFH return tail5_FQQ"v"PYEG5 if (tail.isExpandable) sequence.tail = expand(tail)5_FQQ"v"PYEG8 return tail.isExpandable) sequence.tail = expand(tail)5_ F9QQ"v"PYEG9 return tail.isExpandable ? sequence.tail = expand(tail)5_  FQQ"v"PYEG: return tail.isExpandable ? sequence.tail = expand(tail) 5_   F;QQ"v"PYEG; return tail.isExpandable ? (sequence.tail = expand(tail) 5_   F:QQ"v"PYEH; return tail.isExpandable ? (sequence.tail = expand(tail))FH FH5_   HRR"v"PYGH return sequence.tail5_  5 QQ"v"PZ46 this.rest = rest5_ 3QQ"v"PZ24function Sequence(head, rest) {5_5QQ"v"PZ 46 this.tail = rest5_+*QQ"v"PZ*,6 var sequence = form.operation.apply(tail, tail.body)5_+0QQ"v"PZ*,6 var sequence = form.operation.apply(form, tail.body)5_0 QQ"v"PZ/1 return form5_+QQ"v"PZ*,6 var sequence = form.operation.apply(form, form.body)5_,,0vPZ+- +- form.head = sequence.head form.tail = sequence.tail delete form.operation delete form.body return sequence5_,,,vPZ+, 5_P,,,vPZPR PR5_Q,,vP[PR if ()5_Q,,vP[PR if (form.isExpandable)5_Q,,vP[PS if (form.isExpandable) {}5_Q,,vP[ QS QS5_R,,vP[QS expand()5_R,,vP[QS var sequence = expand()5_R,,vP[RT RT5_S,,vP[$SU5_ S,,vP[(RT form.isExpandable = false5_! S,,vP[)RT- delimiterChar form.isExpandable = false5_ "!S&,,vP[-RT& delete form.isExpandable = false5_!#"S,,vP[/SU SU5_"$#T,,vP[;TV TV5_#%$U,,vP[ZUW UW5_$&%V,,vP[kUV method.implement()5_%'&V,,vP[lUV5_&('R,,vP[tRU RT5_')(Y,,vP[XZ return method(expand(form))5_(*):,,vP[:<:<5_)+*;,,vP[:<Sequence.head = function()5_*,+;,,vP[:<Sequence.head = function(head)5_+-,; ,,vP[:<!Sequence.head = function(head) {}5_,.-;5,,vP[;=;=5_-/.;,,vP[:<7Sequence.head = function(head) { return sequence.head }5_.0/<,,vP[;=Sequence.tail = function()5_/10<",,vP[;="Sequence.tail = function(sequence)5_021<$,,vP[;=%Sequence.tail = function(sequence) {}5_132<:,,vP[;=<>5_354=,,vP[<>Sequence.count = function()5_465=#,,vP[<>#Sequence.count = function(sequence)5_576=%,,vP[<>&Sequence.count = function(sequence) {}5_687=,,vP\<=>Sequence.count = function(sequence) { return sequence.length }5_798;,,vP\ :<;Sequence.head = function(sequence) { return sequence.head }5_8:9<,,vP\ ;=;Sequence.tail = function(sequence) { return sequence.tail }5_9;:>>@vP\=?+first.define(Sequence, function(sequence) { return sequence.head})5_:<;>>>vP\=?first.define(Sequence, )5_;@<>%>>vP\=?&first.define(Sequence, Sequence.first)5_<A>@??CvP\>@*rest.define(Sequence, function(sequence) { var tail = sequence.tail= return tail.isExpandable ? (sequence.tail = expand(tail)) :! tail})5_@BA???vP\>@rest.define(Sequence, )5_ACB?#??vP\>@$rest.define(Sequence, Sequence.rest)5_BDC<<=vP\;A5Sequence.tail = first.define(Sequence, Sequence.head);=@Sequence.tail = function tail(sequence) { return sequence.tail }%first.define(Sequence, Sequence.head)5_CED@<<vP\?C&}first.define(Sequence, Sequence.head)5_DFE<<<vP\;=$Sequence.tail = function(sequence) {5_EGF;*<<vP\:=@Sequence.head = function head(sequence) { return sequence.head }5_FHG<==vP\;> return sequence.head }5_GIH? >>vP\>@ var tail = sequence.tail5_HJI@ >>vP\?A= return tail.isExpandable ? (sequence.tail = expand(tail)) :5_IKJ? >>vP\>@ var rest = sequence.tail5_JLK@ ? ?vP\?A= return rest.isExpandable ? (sequence.tail = expand(tail)) :5_KML@9? ?vP\?A= return form.isExpandable ? (sequence.tail = expand(tail)) :5_LNMA!? ?vP\@B! tail5_MONY? ?vP]Y[ Y[5_NPOZ? ?vP]Y[ first.define()5_OQPZ? ?vP] Y[ first.define(form)5_PRQZ? ?vP] Y[ first.implement(form)5_QSRZ)? ?vP]Z\ Z\5_RTS[? ?vP]Z\ rest.implement()5_SUTZ*? ?vP]Y[+ first.implement(form, Sequence.first)5_TYU[(? ?vP]Z\) rest.implement(form, Sequence.rest)5_UZWYNNN"v"P^WMN*LazySequence.prototype.isExpandable = true5_Y\ZLNN"v"P^XLN LN5_Z][\OO"v"P_ return count(sequence) === 05_\^]NN"v"P_})5_]_^)MM"v"P_)var isEmpty = Method(function(sequence) {5_^`_CMM"v"P_CECE5__a`DNN"v"P_CEisEmpty.define()5_`baD#NN"v"P_CE$isEmpty.define(Sequence, function())5_adbD%NN"v"P_CE'isEmpty.define(Sequence, function() {})5_bfcdPNN"v"P`!OQ2;[ first, rest, count ].forEach(function(method) {5_dgefZNN"v"P`8Z\ Z\5_fhg[NN"v"P`=Z\ return method()5_gihRNN"v"P`HQR if (form.isExpandable) {5_hji[NN"v"P`JZ[ }5_ikj[NN"v"P`JZ[ return method(form)5_jlkRZRvP`NQ[ ! var sequence = expand(form) form.head = sequence.head form.tail = sequence.tail delete form.isExpandable delete form.operation delete form.body* first.implement(form, Sequence.head)) rest.implement(form, Sequence.tail) return method(form)5_kmlUUWvP`kTV delete form.isExpandable delete form.operation delete form.body5_lnmRUUvP`lRV RT5_monUXXvP`nUW UW5_npoVYYvP`oUW if ()5_oqpVYYvP`tUW if (sequence === empty)5_prqVYYvP`uUX if (sequence === empty) {}5_qsrVZZvP`zVX VX5_rtsW[[vP`VX isEmpty.implement()5_sutW"[[vP`VX# isEmpty.implement(function())5_tvuW$[[vP`VX& isEmpty.implement(function() {})5_uwvX[[vP`WY }5_vxwX [[vP`WZ } else {}5_wyxY\\vP`XY }5_xzyY[[vP`XZ form.head = sequence.head5_y{zZ[[vP`Y[ form.tail = sequence.tail5_z|{[[[vP`Z[ 5_{}|[[[vP`Z\( first.implement(form, Sequence.head)5_|~}\[[vP`[]' rest.implement(form, Sequence.tail)5_}~\[[vP`\^ \^5_~U[[vP`UW5_e\\vPaegeg5_l\\vPa$lnln5_X\\vPajWY3 isEmpty.implement(function() { return true })5_Q'\\vPaQS QS5_R]]vPaQR cons5_^\\vPa^`5_`\\vPa_a return method(form)5_U\\vPaVX console.logUX UW5_W^^vPbVX console.log()5_^^vPb4 5_^^vPb9 console.log()5_!^^vPbh!#!#5_"__vPbr!#empty.isEmpty = function()5_"__vPbr!#empty.isEmpty = function() {}5_###2v2Pby"$4isEmpty.implement(empty, function() { return true })5_###2v2Pbz"$isEmpty.implement(empty, )5_!!!3v3Pb "4var empty = { toString: function() { return '()' } }5_!!3v3Pb5_""3v3Pb4var empty = { toString: function() { return '()' } }5_'##3v3Pb( toString: function() { return '()' } }5_$$3v3Pb 5_%%3v3Pb isEmpty: function()5_%%3v3Pb isEmpty: function() {}5_&%%3v3Pb& toString: function() { return '()' }5_%%%3v3Pb count: function% isEmpty: function() { return true }5_&&3v3Pb count: function()5_&&3v3Pb count: function() {}5_ &&3v3Pb count: function() { return 0 }5_''3v3Pb5_''3v3Pb first: function()5_''3v3Pb first: function() {}5_!''3v3Pb 5_((3v3Pb rest: function()5_((3v3Pb rest: function() {}5_#((3v3Pb# first: function() { return null }5_((3v3Pb5_++/vPb*,'isEmpty.implement(empty, empty.isEmpty)/count.implement(empty, function() { return 0 })2first.implement(empty, function() { return null })2rest.implement(empty, function() { return empty })exports.empty = empty5_*++vPb)**empty.isEmpty = function() { return true }5_**vPb$5_.00vPb /count.implement(empty, function() { return 0 })5_ 100vPb!2first.implement(empty, function() { return null })5_!100vPb "2rest.implement(empty, function() { return empty })5_& $v$Pb'isEmpty.implement(empty, empty.isEmpty)5_" $v$Pb #count.implement(empty, empty.count)5_ $v$Pb& isEmpty: function() { return true },5_%vPb&count.implement(empty, empty.count = )5_,vPbDcount.implement(empty, empty.count = count: function() { return 0 })5_ " v Pb$ first: function() { return null },5_"" v Pc #first.implement(empty, empty.first)5_#" v Pc >first.implement(empty, empty.first function() { return null })5_ " v Pc!!rest.implement(empty, empty.rest)5_ -" v Pc!.rest.implement(empty, empty.rest = function())5_ /" v Pc!1rest.implement(empty, empty.rest = function() {})5_" v Pc ! count: function() { return 0 },5_" v Pc first: ,5_" v Pc# rest: function() { return empty }5_" v Pc var empty = {%toString: function() { return '()' },' toString: function() { return '()' },5_ " v Pc3var empty = { toString: function() { return '()' },}5_3V=v Pc5var empty = { toString: function() { return '()' }, }5_V=v Pc6make.define(null, function(_, head) { return [head] })5_V=v Pc5_V=v Pcvar make = Method()5_V=v Pcexports.make = make5_V=v Pc5_V=v Pc+Imake.define(Array, function(tail, head) { return [ head ].concat(tail) })5_*V=v Pc.+count.define(null, function() { return 0 })5_V=v Pc65_V=v Pc;isEmpty.define()5_,v,PcC.first.define(null, function() { return null })5_,v,PcEfirst.define(null, )5_)v)PcI+rest.define(null, function() { return [] })5_)v)PcJrest.define(null, )5_)v)PcO!!5_ )v)PcS!isEmpty.define()5_ )v)PcV!!isEmpty.define(Array, function())5_ %)v)PcW!&isEmpty.define(Array, function(array))5_ ')v)PcX!)isEmpty.define(Array, function(array) {})5_%)v)Pcg$%5_/)v)Pd/1 /15_0)v)Pd/1 console.log()5_0)v)Pd/0 console.log(tail)5_0)v)Pd025_1)v)Pd015_1)v)Pd135_2)v)Pd 125_2)v)Pd 24 245_3)v)Pd#24 console.log()5_)v)Pdm5_)v)Pdzfunction EmptySequence()5_)v)Pd{function EmptySequence()()5_)v)Pd~5_   )v)PeS4var empty = { toString: function() { return '()' } }5_  )v)PeW=L)v)Pf7KM if (isEmpty(sequence) {5_=?>u )v)PfLtv" return isEmpty(source) ? empty :5_>@?} )v)PfO|~" return isEmpty(source) ? empty :5_?A@')v)Pg?&' console.log(tail)5_@BAI)v)PgGHI console.log(sequence)5_ACBI)v)PgGHI5_BDC1!)v)Pg02! form5_CEDsD)v)PhrtJ f(first(source)) ? cons(first(source), filter(rest(source)), f) :5_DFEsG)v)PhrtI f(first(source)) ? cons(first(source), filter(rest(source), f) :5_EGFy)v)Phxy console.log(source)5_FHG )v)Pi ~ return n <= 0 ? null :5_GIHr)v)Piqs return isEmpty(source) ? [] :5_HJIy)v)Pixz return isEmpty(source) ? [] :5_IKJ)v)Pi!~ return isEmpty(source) ? [] :5_JLK)v)Pi$ n <= 0 ? null :5_KML)v)Pi* n <= 0 ? null :5_LNM)v)Pi3@ cons(first(source), take(rest(source), n - 1))5_MON  "v"PiC return n <= 0 ? source :5_NPO "v"PiI+ drop(rest(source), n - 1)5_OQP  vPi]K return predicate(head) ? cons(head, takeWhile(rest(source), predicate)) :5_PRQ vPih null5_QSR  "v"Pi~? return predicate(head) ? dropWhile(rest(source), predicate) :5_RTS "v"Pi' rest(source)5_SUTPJ'/* vim:set ts=2 sw=2 sts=2 expandtab */5_TVUPJM/*jshint asi: true undef: true es5: true node: true browser: true devel: true5_UWV PJ9 forin: true latedef: false globalstrict: true */5_VXWPJ 'use strict';5_WYX PJ "use strict';5_XZYPJvar Method = require('method')5_YZPJvar Method = require("method')5_')*("")v)Pf5_()!!)v)Pf5_ )v)Pe-toString: { value: function() { return '()' }Ovar empty = Object.create(null, { toString: { value: function() { return '()' }5_Q  )v)PeSvar empty = Object.create(null, { toString: value: { function() { return '()' } } )5_)v)Pdfunction() { return '()' } }?EmptySequence.prototype.toString = function() { return '()' } }5_+)v)PdHEmptySequence.prototype.toString = function toString() { return '()' } }5_H v PdFEmptySequence.prototype.toString = function toString() { return '()' }5_ v PdAisEmpty.define(empty, empty.isEmpty = function() { return true })5_ v PdIisEmpty.define(EmptySequence, empty.isEmpty = function() { return true })5_ v PdEcount.implement(EmptySequence, empty.count = function() { return 0 })5_ v PdHfirst.implement(EmptySequence, empty.first = function() { return null })5_ v PdGrest.implement(EmptySequence, empty.rest = function() { return empty })5_ v PdDrest.define(EmptySequence, empty.rest = function() { return empty })5_ v PdEfirst.define(EmptySequence, empty.first = function() { return null })5_ v PdBcount.define(EmptySequence, empty.count = function() { return 0 })5_ v PdIisEmpty.define(EmptySequence, Empty.isEmpty = function() { return true })5_# v PdQisEmpty.define(EmptySequence, EmptySequence.isEmpty = function() { return true })5_ v PdJcount.define(EmptySequence, EmptySequence.count = function() { return 0 })5_vPdMfirst.define(EmptySequence, EmptySequence.first = function() { return null })5_2v2PdLrest.define(EmptySequence, EmptySequence.rest = function() { return empty })5_2v2PdA >>vP\s@B= tail = tail.isExpandable ? (sequence.tail = expand(tail)) :5_>?B>>vP\xBC BD rest.define()5_<>=A >>vP\j@B: if (tail.isExpandable ? (sequence.tail = expand(tail)) :5_2``vPX}135_J\\vPVJKJLfunction EmptySequence()5_K\\vPV'JLfunction EmptySequence() {}5_K]]vPV'JLfunction EmptySequence() {}5_K^^vPV)KL5_L]]vPV.KM5_L\\vPV.KM}JMfunction EmptySequence() {}5_K^^vPV/KLKM5_YYvPR function expand(form) { if (form.body) {7 form.result = form.operation.apply(form, form.body) delete form.operation delete form.body } return form.result}5_~C@@ v PPCBD 5_BDECEGGvPNEFEGfirst.define()5_CDF GGvPNEGfirst.define(Lazy, force)5_7E.ERvRPM68}ca5_   ?AA'v'PM1>@} if (self.f) { }5_  ?@@'v'PM3>@5_?**v,PL>@}, var self.f.apply(self.f, self.arguments)5_B**v,PL[ACx return function() {}5_B**v,PL\ACx return function() { }5_B**v,PL`BCy BDz f.5_***vPH)+pfunction Lazy(expand) {}5_.0/WKU#UvPAVX\I return predicate(head) ? cons(head, takeWhile(rest(source), predicate))5_ "!UPA1TVY'function takeWhile(source, predicate) {5_vP  Xvar count = Method(function())5_vP  X!var count = Method(function() {})5_vP  Xvar count = Method(function() {})5_JvP &<IKX return n <= 0 ? empty :5_H@EvP uGIO& rest(source), n - 1)5_$6vP nC'rest.define(Array, function(array) { })5_6vP n ?@6make.define(null, function(_, head) { return [head] })5_6vP n 5