| 
                        1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001300230033004300530063007300830093010301130123013301430153016301730183019302030213022302330243025302630273028302930303031303230333034303530363037303830393040304130423043304430453046304730483049305030513052305330543055305630573058305930603061306230633064306530663067306830693070307130723073307430753076307730783079308030813082308330843085308630873088308930903091309230933094309530963097309830993100310131023103310431053106310731083109311031113112311331143115311631173118311931203121312231233124312531263127312831293130313131323133313431353136313731383139314031413142314331443145314631473148314931503151315231533154315531563157315831593160316131623163316431653166316731683169317031713172317331743175317631773178317931803181318231833184318531863187318831893190319131923193319431953196319731983199320032013202320332043205320632073208320932103211321232133214321532163217321832193220322132223223322432253226322732283229323032313232323332343235323632373238323932403241324232433244324532463247324832493250325132523253325432553256325732583259326032613262326332643265326632673268326932703271327232733274327532763277327832793280328132823283328432853286328732883289329032913292329332943295329632973298329933003301330233033304330533063307330833093310331133123313331433153316331733183319332033213322332333243325332633273328332933303331333233333334333533363337333833393340334133423343334433453346334733483349335033513352335333543355335633573358335933603361336233633364336533663367336833693370337133723373337433753376337733783379338033813382338333843385338633873388338933903391339233933394339533963397339833993400340134023403340434053406340734083409341034113412341334143415341634173418341934203421342234233424342534263427342834293430343134323433343434353436343734383439344034413442344334443445344634473448344934503451345234533454345534563457345834593460346134623463346434653466346734683469347034713472347334743475347634773478347934803481348234833484348534863487348834893490349134923493349434953496349734983499350035013502350335043505350635073508350935103511351235133514351535163517351835193520352135223523352435253526352735283529353035313532353335343535353635373538353935403541354235433544354535463547354835493550355135523553355435553556355735583559356035613562356335643565356635673568356935703571357235733574357535763577357835793580358135823583358435853586358735883589359035913592359335943595359635973598359936003601360236033604360536063607360836093610361136123613361436153616361736183619362036213622 | 
                        - var tmp = {}
 - 
 - /* pako 1.0.4 nodeca/pako */ ;(function(f) {
 -   tmp = f()
 - })(function() {
 -   var define, module, exports
 -   return (function e(t, n, r) {
 -     function s(o, u) {
 -       if (!n[o]) {
 -         if (!t[o]) {
 -           var a = typeof require == 'function' && require
 -           if (!u && a) return a(o, !0)
 -           if (i) return i(o, !0)
 -           var f = new Error('Cannot find module \'' + o + '\'')
 -           throw ((f.code = 'MODULE_NOT_FOUND'), f)
 -         }
 -         var l = (n[o] = { exports: {} })
 -         t[o][0].call(
 -           l.exports,
 -           function(e) {
 -             var n = t[o][1][e]
 -             return s(n ? n : e)
 -           },
 -           l,
 -           l.exports,
 -           e,
 -           t,
 -           n,
 -           r
 -         )
 -       }
 -       return n[o].exports
 -     }
 -     var i = typeof require == 'function' && require
 -     for (var o = 0; o < r.length; o++) s(r[o])
 -     return s
 -   })(
 -     {
 -       1: [
 -         function(require, module, exports) {
 -           'use strict'
 - 
 -           var TYPED_OK =
 -             typeof Uint8Array !== 'undefined' &&
 -             typeof Uint16Array !== 'undefined' &&
 -             typeof Int32Array !== 'undefined'
 - 
 -           exports.assign = function(obj /*from1, from2, from3, ...*/) {
 -             var sources = Array.prototype.slice.call(arguments, 1)
 -             while (sources.length) {
 -               var source = sources.shift()
 -               if (!source) {
 -                 continue
 -               }
 - 
 -               if (typeof source !== 'object') {
 -                 throw new TypeError(source + 'must be non-object')
 -               }
 - 
 -               for (var p in source) {
 -                 if (source.hasOwnProperty(p)) {
 -                   obj[p] = source[p]
 -                 }
 -               }
 -             }
 - 
 -             return obj
 -           }
 - 
 -           // reduce buffer size, avoiding mem copy
 -           exports.shrinkBuf = function(buf, size) {
 -             if (buf.length === size) {
 -               return buf
 -             }
 -             if (buf.subarray) {
 -               return buf.subarray(0, size)
 -             }
 -             buf.length = size
 -             return buf
 -           }
 - 
 -           var fnTyped = {
 -             arraySet: function(dest, src, src_offs, len, dest_offs) {
 -               if (src.subarray && dest.subarray) {
 -                 dest.set(src.subarray(src_offs, src_offs + len), dest_offs)
 -                 return
 -               }
 -               // Fallback to ordinary array
 -               for (var i = 0; i < len; i++) {
 -                 dest[dest_offs + i] = src[src_offs + i]
 -               }
 -             },
 -             // Join array of chunks to single array.
 -             flattenChunks: function(chunks) {
 -               var i, l, len, pos, chunk, result
 - 
 -               // calculate data length
 -               len = 0
 -               for (i = 0, l = chunks.length; i < l; i++) {
 -                 len += chunks[i].length
 -               }
 - 
 -               // join chunks
 -               result = new Uint8Array(len)
 -               pos = 0
 -               for (i = 0, l = chunks.length; i < l; i++) {
 -                 chunk = chunks[i]
 -                 result.set(chunk, pos)
 -                 pos += chunk.length
 -               }
 - 
 -               return result
 -             }
 -           }
 - 
 -           var fnUntyped = {
 -             arraySet: function(dest, src, src_offs, len, dest_offs) {
 -               for (var i = 0; i < len; i++) {
 -                 dest[dest_offs + i] = src[src_offs + i]
 -               }
 -             },
 -             // Join array of chunks to single array.
 -             flattenChunks: function(chunks) {
 -               return [].concat.apply([], chunks)
 -             }
 -           }
 - 
 -           // Enable/Disable typed arrays use, for testing
 -           //
 -           exports.setTyped = function(on) {
 -             if (on) {
 -               exports.Buf8 = Uint8Array
 -               exports.Buf16 = Uint16Array
 -               exports.Buf32 = Int32Array
 -               exports.assign(exports, fnTyped)
 -             } else {
 -               exports.Buf8 = Array
 -               exports.Buf16 = Array
 -               exports.Buf32 = Array
 -               exports.assign(exports, fnUntyped)
 -             }
 -           }
 - 
 -           exports.setTyped(TYPED_OK)
 -         },
 -         {}
 -       ],
 -       2: [
 -         function(require, module, exports) {
 -           // String encode/decode helpers
 -           'use strict'
 - 
 -           var utils = require('./common')
 - 
 -           // Quick check if we can use fast array to bin string conversion
 -           //
 -           // - apply(Array) can fail on Android 2.2
 -           // - apply(Uint8Array) can fail on iOS 5.1 Safary
 -           //
 -           var STR_APPLY_OK = true
 -           var STR_APPLY_UIA_OK = true
 - 
 -           try {
 -             String.fromCharCode.apply(null, [0])
 -           } catch (__) {
 -             STR_APPLY_OK = false
 -           }
 -           try {
 -             String.fromCharCode.apply(null, new Uint8Array(1))
 -           } catch (__) {
 -             STR_APPLY_UIA_OK = false
 -           }
 - 
 -           // Table with utf8 lengths (calculated by first byte of sequence)
 -           // Note, that 5 & 6-byte values and some 4-byte values can not be represented in JS,
 -           // because max possible codepoint is 0x10ffff
 -           var _utf8len = new utils.Buf8(256)
 -           for (var q = 0; q < 256; q++) {
 -             _utf8len[q] =
 -               q >= 252
 -                 ? 6
 -                 : q >= 248
 -                 ? 5
 -                 : q >= 240
 -                 ? 4
 -                 : q >= 224
 -                 ? 3
 -                 : q >= 192
 -                 ? 2
 -                 : 1
 -           }
 -           _utf8len[254] = _utf8len[254] = 1 // Invalid sequence start
 - 
 -           // convert string to array (typed, when possible)
 -           exports.string2buf = function(str) {
 -             var buf,
 -               c,
 -               c2,
 -               m_pos,
 -               i,
 -               str_len = str.length,
 -               buf_len = 0
 - 
 -             // count binary size
 -             for (m_pos = 0; m_pos < str_len; m_pos++) {
 -               c = str.charCodeAt(m_pos)
 -               if ((c & 0xfc00) === 0xd800 && m_pos + 1 < str_len) {
 -                 c2 = str.charCodeAt(m_pos + 1)
 -                 if ((c2 & 0xfc00) === 0xdc00) {
 -                   c = 0x10000 + ((c - 0xd800) << 10) + (c2 - 0xdc00)
 -                   m_pos++
 -                 }
 -               }
 -               buf_len += c < 0x80 ? 1 : c < 0x800 ? 2 : c < 0x10000 ? 3 : 4
 -             }
 - 
 -             // allocate buffer
 -             buf = new utils.Buf8(buf_len)
 - 
 -             // convert
 -             for (i = 0, m_pos = 0; i < buf_len; m_pos++) {
 -               c = str.charCodeAt(m_pos)
 -               if ((c & 0xfc00) === 0xd800 && m_pos + 1 < str_len) {
 -                 c2 = str.charCodeAt(m_pos + 1)
 -                 if ((c2 & 0xfc00) === 0xdc00) {
 -                   c = 0x10000 + ((c - 0xd800) << 10) + (c2 - 0xdc00)
 -                   m_pos++
 -                 }
 -               }
 -               if (c < 0x80) {
 -                 /* one byte */
 -                 buf[i++] = c
 -               } else if (c < 0x800) {
 -                 /* two bytes */
 -                 buf[i++] = 0xc0 | (c >>> 6)
 -                 buf[i++] = 0x80 | (c & 0x3f)
 -               } else if (c < 0x10000) {
 -                 /* three bytes */
 -                 buf[i++] = 0xe0 | (c >>> 12)
 -                 buf[i++] = 0x80 | ((c >>> 6) & 0x3f)
 -                 buf[i++] = 0x80 | (c & 0x3f)
 -               } else {
 -                 /* four bytes */
 -                 buf[i++] = 0xf0 | (c >>> 18)
 -                 buf[i++] = 0x80 | ((c >>> 12) & 0x3f)
 -                 buf[i++] = 0x80 | ((c >>> 6) & 0x3f)
 -                 buf[i++] = 0x80 | (c & 0x3f)
 -               }
 -             }
 - 
 -             return buf
 -           }
 - 
 -           // Helper (used in 2 places)
 -           function buf2binstring(buf, len) {
 -             // use fallback for big arrays to avoid stack overflow
 -             if (len < 65537) {
 -               if (
 -                 (buf.subarray && STR_APPLY_UIA_OK) ||
 -                 (!buf.subarray && STR_APPLY_OK)
 -               ) {
 -                 return String.fromCharCode.apply(
 -                   null,
 -                   utils.shrinkBuf(buf, len)
 -                 )
 -               }
 -             }
 - 
 -             var result = ''
 -             for (var i = 0; i < len; i++) {
 -               result += String.fromCharCode(buf[i])
 -             }
 -             return result
 -           }
 - 
 -           // Convert byte array to binary string
 -           exports.buf2binstring = function(buf) {
 -             return buf2binstring(buf, buf.length)
 -           }
 - 
 -           // Convert binary string (typed, when possible)
 -           exports.binstring2buf = function(str) {
 -             var buf = new utils.Buf8(str.length)
 -             for (var i = 0, len = buf.length; i < len; i++) {
 -               buf[i] = str.charCodeAt(i)
 -             }
 -             return buf
 -           }
 - 
 -           // convert array to string
 -           exports.buf2string = function(buf, max) {
 -             var i, out, c, c_len
 -             var len = max || buf.length
 - 
 -             // Reserve max possible length (2 words per char)
 -             // NB: by unknown reasons, Array is significantly faster for
 -             //     String.fromCharCode.apply than Uint16Array.
 -             var utf16buf = new Array(len * 2)
 - 
 -             for (out = 0, i = 0; i < len; ) {
 -               c = buf[i++]
 -               // quick process ascii
 -               if (c < 0x80) {
 -                 utf16buf[out++] = c
 -                 continue
 -               }
 - 
 -               c_len = _utf8len[c]
 -               // skip 5 & 6 byte codes
 -               if (c_len > 4) {
 -                 utf16buf[out++] = 0xfffd
 -                 i += c_len - 1
 -                 continue
 -               }
 - 
 -               // apply mask on first byte
 -               c &= c_len === 2 ? 0x1f : c_len === 3 ? 0x0f : 0x07
 -               // join the rest
 -               while (c_len > 1 && i < len) {
 -                 c = (c << 6) | (buf[i++] & 0x3f)
 -                 c_len--
 -               }
 - 
 -               // terminated by end of string?
 -               if (c_len > 1) {
 -                 utf16buf[out++] = 0xfffd
 -                 continue
 -               }
 - 
 -               if (c < 0x10000) {
 -                 utf16buf[out++] = c
 -               } else {
 -                 c -= 0x10000
 -                 utf16buf[out++] = 0xd800 | ((c >> 10) & 0x3ff)
 -                 utf16buf[out++] = 0xdc00 | (c & 0x3ff)
 -               }
 -             }
 - 
 -             return buf2binstring(utf16buf, out)
 -           }
 - 
 -           // Calculate max possible position in utf8 buffer,
 -           // that will not break sequence. If that's not possible
 -           // - (very small limits) return max size as is.
 -           //
 -           // buf[] - utf8 bytes array
 -           // max   - length limit (mandatory);
 -           exports.utf8border = function(buf, max) {
 -             var pos
 - 
 -             max = max || buf.length
 -             if (max > buf.length) {
 -               max = buf.length
 -             }
 - 
 -             // go back from last position, until start of sequence found
 -             pos = max - 1
 -             while (pos >= 0 && (buf[pos] & 0xc0) === 0x80) {
 -               pos--
 -             }
 - 
 -             // Fuckup - very small and broken sequence,
 -             // return max, because we should return something anyway.
 -             if (pos < 0) {
 -               return max
 -             }
 - 
 -             // If we came to start of buffer - that means vuffer is too small,
 -             // return max too.
 -             if (pos === 0) {
 -               return max
 -             }
 - 
 -             return pos + _utf8len[buf[pos]] > max ? pos : max
 -           }
 -         },
 -         { './common': 1 }
 -       ],
 -       3: [
 -         function(require, module, exports) {
 -           'use strict'
 - 
 -           // Note: adler32 takes 12% for level 0 and 2% for level 6.
 -           // It doesn't worth to make additional optimizationa as in original.
 -           // Small size is preferable.
 - 
 -           function adler32(adler, buf, len, pos) {
 -             var s1 = (adler & 0xffff) | 0,
 -               s2 = ((adler >>> 16) & 0xffff) | 0,
 -               n = 0
 - 
 -             while (len !== 0) {
 -               // Set limit ~ twice less than 5552, to keep
 -               // s2 in 31-bits, because we force signed ints.
 -               // in other case %= will fail.
 -               n = len > 2000 ? 2000 : len
 -               len -= n
 - 
 -               do {
 -                 s1 = (s1 + buf[pos++]) | 0
 -                 s2 = (s2 + s1) | 0
 -               } while (--n)
 - 
 -               s1 %= 65521
 -               s2 %= 65521
 -             }
 - 
 -             return s1 | (s2 << 16) | 0
 -           }
 - 
 -           module.exports = adler32
 -         },
 -         {}
 -       ],
 -       4: [
 -         function(require, module, exports) {
 -           'use strict'
 - 
 -           module.exports = {
 -             /* Allowed flush values; see deflate() and inflate() below for details */
 -             Z_NO_FLUSH: 0,
 -             Z_PARTIAL_FLUSH: 1,
 -             Z_SYNC_FLUSH: 2,
 -             Z_FULL_FLUSH: 3,
 -             Z_FINISH: 4,
 -             Z_BLOCK: 5,
 -             Z_TREES: 6,
 - 
 -             /* Return codes for the compression/decompression functions. Negative values
 -              * are errors, positive values are used for special but normal events.
 -              */
 -             Z_OK: 0,
 -             Z_STREAM_END: 1,
 -             Z_NEED_DICT: 2,
 -             Z_ERRNO: -1,
 -             Z_STREAM_ERROR: -2,
 -             Z_DATA_ERROR: -3,
 -             //Z_MEM_ERROR:     -4,
 -             Z_BUF_ERROR: -5,
 -             //Z_VERSION_ERROR: -6,
 - 
 -             /* compression levels */
 -             Z_NO_COMPRESSION: 0,
 -             Z_BEST_SPEED: 1,
 -             Z_BEST_COMPRESSION: 9,
 -             Z_DEFAULT_COMPRESSION: -1,
 - 
 -             Z_FILTERED: 1,
 -             Z_HUFFMAN_ONLY: 2,
 -             Z_RLE: 3,
 -             Z_FIXED: 4,
 -             Z_DEFAULT_STRATEGY: 0,
 - 
 -             /* Possible values of the data_type field (though see inflate()) */
 -             Z_BINARY: 0,
 -             Z_TEXT: 1,
 -             //Z_ASCII:                1, // = Z_TEXT (deprecated)
 -             Z_UNKNOWN: 2,
 - 
 -             /* The deflate compression method */
 -             Z_DEFLATED: 8
 -             //Z_NULL:                 null // Use -1 or null inline, depending on var type
 -           }
 -         },
 -         {}
 -       ],
 -       5: [
 -         function(require, module, exports) {
 -           'use strict'
 - 
 -           // Note: we can't get significant speed boost here.
 -           // So write code to minimize size - no pregenerated tables
 -           // and array tools dependencies.
 - 
 -           // Use ordinary array, since untyped makes no boost here
 -           function makeTable() {
 -             var c,
 -               table = []
 - 
 -             for (var n = 0; n < 256; n++) {
 -               c = n
 -               for (var k = 0; k < 8; k++) {
 -                 c = c & 1 ? 0xedb88320 ^ (c >>> 1) : c >>> 1
 -               }
 -               table[n] = c
 -             }
 - 
 -             return table
 -           }
 - 
 -           // Create table on load. Just 255 signed longs. Not a problem.
 -           var crcTable = makeTable()
 - 
 -           function crc32(crc, buf, len, pos) {
 -             var t = crcTable,
 -               end = pos + len
 - 
 -             crc ^= -1
 - 
 -             for (var i = pos; i < end; i++) {
 -               crc = (crc >>> 8) ^ t[(crc ^ buf[i]) & 0xff]
 -             }
 - 
 -             return crc ^ -1 // >>> 0;
 -           }
 - 
 -           module.exports = crc32
 -         },
 -         {}
 -       ],
 -       6: [
 -         function(require, module, exports) {
 -           'use strict'
 - 
 -           function GZheader() {
 -             /* true if compressed data believed to be text */
 -             this.text = 0
 -             /* modification time */
 -             this.time = 0
 -             /* extra flags (not used when writing a gzip file) */
 -             this.xflags = 0
 -             /* operating system */
 -             this.os = 0
 -             /* pointer to extra field or Z_NULL if none */
 -             this.extra = null
 -             /* extra field length (valid if extra != Z_NULL) */
 -             this.extra_len = 0 // Actually, we don't need it in JS,
 -             // but leave for few code modifications
 - 
 -             //
 -             // Setup limits is not necessary because in js we should not preallocate memory
 -             // for inflate use constant limit in 65536 bytes
 -             //
 - 
 -             /* space at extra (only when reading header) */
 -             // this.extra_max  = 0;
 -             /* pointer to zero-terminated file name or Z_NULL */
 -             this.name = ''
 -             /* space at name (only when reading header) */
 -             // this.name_max   = 0;
 -             /* pointer to zero-terminated comment or Z_NULL */
 -             this.comment = ''
 -             /* space at comment (only when reading header) */
 -             // this.comm_max   = 0;
 -             /* true if there was or will be a header crc */
 -             this.hcrc = 0
 -             /* true when done reading gzip header (not used when writing a gzip file) */
 -             this.done = false
 -           }
 - 
 -           module.exports = GZheader
 -         },
 -         {}
 -       ],
 -       7: [
 -         function(require, module, exports) {
 -           'use strict'
 - 
 -           // See state defs from inflate.js
 -           var BAD = 30 /* got a data error -- remain here until reset */
 -           var TYPE = 12 /* i: waiting for type bits, including last-flag bit */
 - 
 -           /*
 -      Decode literal, length, and distance codes and write out the resulting
 -      literal and match bytes until either not enough input or output is
 -      available, an end-of-block is encountered, or a data error is encountered.
 -      When large enough input and output buffers are supplied to inflate(), for
 -      example, a 16K input buffer and a 64K output buffer, more than 95% of the
 -      inflate execution time is spent in this routine.
 - 
 -      Entry assumptions:
 - 
 -      state.mode === LEN
 -      strm.avail_in >= 6
 -      strm.avail_out >= 258
 -      start >= strm.avail_out
 -      state.bits < 8
 - 
 -      On return, state.mode is one of:
 - 
 -      LEN -- ran out of enough output space or enough available input
 -      TYPE -- reached end of block code, inflate() to interpret next block
 -      BAD -- error in block data
 - 
 -      Notes:
 - 
 -      - The maximum input bits used by a length/distance pair is 15 bits for the
 -      length code, 5 bits for the length extra, 15 bits for the distance code,
 -      and 13 bits for the distance extra.  This totals 48 bits, or six bytes.
 -      Therefore if strm.avail_in >= 6, then there is enough input to avoid
 -      checking for available input while decoding.
 - 
 -      - The maximum bytes that a single length/distance pair can output is 258
 -      bytes, which is the maximum length that can be coded.  inflate_fast()
 -      requires strm.avail_out >= 258 for each loop to avoid checking for
 -      output space.
 -      */
 -           module.exports = function inflate_fast(strm, start) {
 -             var state
 -             var _in /* local strm.input */
 -             var last /* have enough input while in < last */
 -             var _out /* local strm.output */
 -             var beg /* inflate()'s initial strm.output */
 -             var end /* while out < end, enough space available */
 -             //#ifdef INFLATE_STRICT
 -             var dmax /* maximum distance from zlib header */
 -             //#endif
 -             var wsize /* window size or zero if not using window */
 -             var whave /* valid bytes in the window */
 -             var wnext /* window write index */
 -             // Use `s_window` instead `window`, avoid conflict with instrumentation tools
 -             var s_window /* allocated sliding window, if wsize != 0 */
 -             var hold /* local strm.hold */
 -             var bits /* local strm.bits */
 -             var lcode /* local strm.lencode */
 -             var dcode /* local strm.distcode */
 -             var lmask /* mask for first level of length codes */
 -             var dmask /* mask for first level of distance codes */
 -             var here /* retrieved table entry */
 -             var op /* code bits, operation, extra bits, or */
 -             /*  window position, window bytes to copy */
 -             var len /* match length, unused bytes */
 -             var dist /* match distance */
 -             var from /* where to copy match from */
 -             var from_source
 - 
 -             var input, output // JS specific, because we have no pointers
 - 
 -             /* copy state to local variables */
 -             state = strm.state
 -             //here = state.here;
 -             _in = strm.next_in
 -             input = strm.input
 -             last = _in + (strm.avail_in - 5)
 -             _out = strm.next_out
 -             output = strm.output
 -             beg = _out - (start - strm.avail_out)
 -             end = _out + (strm.avail_out - 257)
 -             //#ifdef INFLATE_STRICT
 -             dmax = state.dmax
 -             //#endif
 -             wsize = state.wsize
 -             whave = state.whave
 -             wnext = state.wnext
 -             s_window = state.window
 -             hold = state.hold
 -             bits = state.bits
 -             lcode = state.lencode
 -             dcode = state.distcode
 -             lmask = (1 << state.lenbits) - 1
 -             dmask = (1 << state.distbits) - 1
 - 
 -             /* decode literals and length/distances until end-of-block or not enough
 -          input data or output space */
 - 
 -             top: do {
 -               if (bits < 15) {
 -                 hold += input[_in++] << bits
 -                 bits += 8
 -                 hold += input[_in++] << bits
 -                 bits += 8
 -               }
 - 
 -               here = lcode[hold & lmask]
 - 
 -               dolen: for (;;) {
 -                 // Goto emulation
 -                 op = here >>> 24 /*here.bits*/
 -                 hold >>>= op
 -                 bits -= op
 -                 op = (here >>> 16) & 0xff /*here.op*/
 -                 if (op === 0) {
 -                   /* literal */
 -                   //Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ?
 -                   //        "inflate:         literal '%c'\n" :
 -                   //        "inflate:         literal 0x%02x\n", here.val));
 -                   output[_out++] = here & 0xffff /*here.val*/
 -                 } else if (op & 16) {
 -                   /* length base */
 -                   len = here & 0xffff /*here.val*/
 -                   op &= 15 /* number of extra bits */
 -                   if (op) {
 -                     if (bits < op) {
 -                       hold += input[_in++] << bits
 -                       bits += 8
 -                     }
 -                     len += hold & ((1 << op) - 1)
 -                     hold >>>= op
 -                     bits -= op
 -                   }
 -                   //Tracevv((stderr, "inflate:         length %u\n", len));
 -                   if (bits < 15) {
 -                     hold += input[_in++] << bits
 -                     bits += 8
 -                     hold += input[_in++] << bits
 -                     bits += 8
 -                   }
 -                   here = dcode[hold & dmask]
 - 
 -                   dodist: for (;;) {
 -                     // goto emulation
 -                     op = here >>> 24 /*here.bits*/
 -                     hold >>>= op
 -                     bits -= op
 -                     op = (here >>> 16) & 0xff /*here.op*/
 - 
 -                     if (op & 16) {
 -                       /* distance base */
 -                       dist = here & 0xffff /*here.val*/
 -                       op &= 15 /* number of extra bits */
 -                       if (bits < op) {
 -                         hold += input[_in++] << bits
 -                         bits += 8
 -                         if (bits < op) {
 -                           hold += input[_in++] << bits
 -                           bits += 8
 -                         }
 -                       }
 -                       dist += hold & ((1 << op) - 1)
 -                       //#ifdef INFLATE_STRICT
 -                       if (dist > dmax) {
 -                         strm.msg = 'invalid distance too far back'
 -                         state.mode = BAD
 -                         break top
 -                       }
 -                       //#endif
 -                       hold >>>= op
 -                       bits -= op
 -                       //Tracevv((stderr, "inflate:         distance %u\n", dist));
 -                       op = _out - beg /* max distance in output */
 -                       if (dist > op) {
 -                         /* see if copy from window */
 -                         op = dist - op /* distance back in window */
 -                         if (op > whave) {
 -                           if (state.sane) {
 -                             strm.msg = 'invalid distance too far back'
 -                             state.mode = BAD
 -                             break top
 -                           }
 - 
 -                           // (!) This block is disabled in zlib defailts,
 -                           // don't enable it for binary compatibility
 -                           //#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR
 -                           //                if (len <= op - whave) {
 -                           //                  do {
 -                           //                    output[_out++] = 0;
 -                           //                  } while (--len);
 -                           //                  continue top;
 -                           //                }
 -                           //                len -= op - whave;
 -                           //                do {
 -                           //                  output[_out++] = 0;
 -                           //                } while (--op > whave);
 -                           //                if (op === 0) {
 -                           //                  from = _out - dist;
 -                           //                  do {
 -                           //                    output[_out++] = output[from++];
 -                           //                  } while (--len);
 -                           //                  continue top;
 -                           //                }
 -                           //#endif
 -                         }
 -                         from = 0 // window index
 -                         from_source = s_window
 -                         if (wnext === 0) {
 -                           /* very common case */
 -                           from += wsize - op
 -                           if (op < len) {
 -                             /* some from window */
 -                             len -= op
 -                             do {
 -                               output[_out++] = s_window[from++]
 -                             } while (--op)
 -                             from = _out - dist /* rest from output */
 -                             from_source = output
 -                           }
 -                         } else if (wnext < op) {
 -                           /* wrap around window */
 -                           from += wsize + wnext - op
 -                           op -= wnext
 -                           if (op < len) {
 -                             /* some from end of window */
 -                             len -= op
 -                             do {
 -                               output[_out++] = s_window[from++]
 -                             } while (--op)
 -                             from = 0
 -                             if (wnext < len) {
 -                               /* some from start of window */
 -                               op = wnext
 -                               len -= op
 -                               do {
 -                                 output[_out++] = s_window[from++]
 -                               } while (--op)
 -                               from = _out - dist /* rest from output */
 -                               from_source = output
 -                             }
 -                           }
 -                         } else {
 -                           /* contiguous in window */
 -                           from += wnext - op
 -                           if (op < len) {
 -                             /* some from window */
 -                             len -= op
 -                             do {
 -                               output[_out++] = s_window[from++]
 -                             } while (--op)
 -                             from = _out - dist /* rest from output */
 -                             from_source = output
 -                           }
 -                         }
 -                         while (len > 2) {
 -                           output[_out++] = from_source[from++]
 -                           output[_out++] = from_source[from++]
 -                           output[_out++] = from_source[from++]
 -                           len -= 3
 -                         }
 -                         if (len) {
 -                           output[_out++] = from_source[from++]
 -                           if (len > 1) {
 -                             output[_out++] = from_source[from++]
 -                           }
 -                         }
 -                       } else {
 -                         from = _out - dist /* copy direct from output */
 -                         do {
 -                           /* minimum length is three */
 -                           output[_out++] = output[from++]
 -                           output[_out++] = output[from++]
 -                           output[_out++] = output[from++]
 -                           len -= 3
 -                         } while (len > 2)
 -                         if (len) {
 -                           output[_out++] = output[from++]
 -                           if (len > 1) {
 -                             output[_out++] = output[from++]
 -                           }
 -                         }
 -                       }
 -                     } else if ((op & 64) === 0) {
 -                       /* 2nd level distance code */
 -                       here =
 -                         dcode[
 -                           (here & 0xffff) /*here.val*/ +
 -                             (hold & ((1 << op) - 1))
 -                         ]
 -                       continue dodist
 -                     } else {
 -                       strm.msg = 'invalid distance code'
 -                       state.mode = BAD
 -                       break top
 -                     }
 - 
 -                     break // need to emulate goto via "continue"
 -                   }
 -                 } else if ((op & 64) === 0) {
 -                   /* 2nd level length code */
 -                   here =
 -                     lcode[
 -                       (here & 0xffff) /*here.val*/ + (hold & ((1 << op) - 1))
 -                     ]
 -                   continue dolen
 -                 } else if (op & 32) {
 -                   /* end-of-block */
 -                   //Tracevv((stderr, "inflate:         end of block\n"));
 -                   state.mode = TYPE
 -                   break top
 -                 } else {
 -                   strm.msg = 'invalid literal/length code'
 -                   state.mode = BAD
 -                   break top
 -                 }
 - 
 -                 break // need to emulate goto via "continue"
 -               }
 -             } while (_in < last && _out < end)
 - 
 -             /* return unused bytes (on entry, bits < 8, so in won't go too far back) */
 -             len = bits >> 3
 -             _in -= len
 -             bits -= len << 3
 -             hold &= (1 << bits) - 1
 - 
 -             /* update state and return */
 -             strm.next_in = _in
 -             strm.next_out = _out
 -             strm.avail_in = _in < last ? 5 + (last - _in) : 5 - (_in - last)
 -             strm.avail_out =
 -               _out < end ? 257 + (end - _out) : 257 - (_out - end)
 -             state.hold = hold
 -             state.bits = bits
 -             return
 -           }
 -         },
 -         {}
 -       ],
 -       8: [
 -         function(require, module, exports) {
 -           'use strict'
 - 
 -           var utils = require('../utils/common')
 -           var adler32 = require('./adler32')
 -           var crc32 = require('./crc32')
 -           var inflate_fast = require('./inffast')
 -           var inflate_table = require('./inftrees')
 - 
 -           var CODES = 0
 -           var LENS = 1
 -           var DISTS = 2
 - 
 -           /* Public constants ==========================================================*/
 -           /* ===========================================================================*/
 - 
 -           /* Allowed flush values; see deflate() and inflate() below for details */
 -           //var Z_NO_FLUSH      = 0;
 -           //var Z_PARTIAL_FLUSH = 1;
 -           //var Z_SYNC_FLUSH    = 2;
 -           //var Z_FULL_FLUSH    = 3;
 -           var Z_FINISH = 4
 -           var Z_BLOCK = 5
 -           var Z_TREES = 6
 - 
 -           /* Return codes for the compression/decompression functions. Negative values
 -            * are errors, positive values are used for special but normal events.
 -            */
 -           var Z_OK = 0
 -           var Z_STREAM_END = 1
 -           var Z_NEED_DICT = 2
 -           //var Z_ERRNO         = -1;
 -           var Z_STREAM_ERROR = -2
 -           var Z_DATA_ERROR = -3
 -           var Z_MEM_ERROR = -4
 -           var Z_BUF_ERROR = -5
 -           //var Z_VERSION_ERROR = -6;
 - 
 -           /* The deflate compression method */
 -           var Z_DEFLATED = 8
 - 
 -           /* STATES ====================================================================*/
 -           /* ===========================================================================*/
 - 
 -           var HEAD = 1 /* i: waiting for magic header */
 -           var FLAGS = 2 /* i: waiting for method and flags (gzip) */
 -           var TIME = 3 /* i: waiting for modification time (gzip) */
 -           var OS = 4 /* i: waiting for extra flags and operating system (gzip) */
 -           var EXLEN = 5 /* i: waiting for extra length (gzip) */
 -           var EXTRA = 6 /* i: waiting for extra bytes (gzip) */
 -           var NAME = 7 /* i: waiting for end of file name (gzip) */
 -           var COMMENT = 8 /* i: waiting for end of comment (gzip) */
 -           var HCRC = 9 /* i: waiting for header crc (gzip) */
 -           var DICTID = 10 /* i: waiting for dictionary check value */
 -           var DICT = 11 /* waiting for inflateSetDictionary() call */
 -           var TYPE = 12 /* i: waiting for type bits, including last-flag bit */
 -           var TYPEDO = 13 /* i: same, but skip check to exit inflate on new block */
 -           var STORED = 14 /* i: waiting for stored size (length and complement) */
 -           var COPY_ = 15 /* i/o: same as COPY below, but only first time in */
 -           var COPY = 16 /* i/o: waiting for input or output to copy stored block */
 -           var TABLE = 17 /* i: waiting for dynamic block table lengths */
 -           var LENLENS = 18 /* i: waiting for code length code lengths */
 -           var CODELENS = 19 /* i: waiting for length/lit and distance code lengths */
 -           var LEN_ = 20 /* i: same as LEN below, but only first time in */
 -           var LEN = 21 /* i: waiting for length/lit/eob code */
 -           var LENEXT = 22 /* i: waiting for length extra bits */
 -           var DIST = 23 /* i: waiting for distance code */
 -           var DISTEXT = 24 /* i: waiting for distance extra bits */
 -           var MATCH = 25 /* o: waiting for output space to copy string */
 -           var LIT = 26 /* o: waiting for output space to write literal */
 -           var CHECK = 27 /* i: waiting for 32-bit check value */
 -           var LENGTH = 28 /* i: waiting for 32-bit length (gzip) */
 -           var DONE = 29 /* finished check, done -- remain here until reset */
 -           var BAD = 30 /* got a data error -- remain here until reset */
 -           var MEM = 31 /* got an inflate() memory error -- remain here until reset */
 -           var SYNC = 32 /* looking for synchronization bytes to restart inflate() */
 - 
 -           /* ===========================================================================*/
 - 
 -           var ENOUGH_LENS = 852
 -           var ENOUGH_DISTS = 592
 -           //var ENOUGH =  (ENOUGH_LENS+ENOUGH_DISTS);
 - 
 -           var MAX_WBITS = 15
 -           /* 32K LZ77 window */
 -           var DEF_WBITS = MAX_WBITS
 - 
 -           function zswap32(q) {
 -             return (
 -               ((q >>> 24) & 0xff) +
 -               ((q >>> 8) & 0xff00) +
 -               ((q & 0xff00) << 8) +
 -               ((q & 0xff) << 24)
 -             )
 -           }
 - 
 -           function InflateState() {
 -             this.mode = 0 /* current inflate mode */
 -             this.last = false /* true if processing last block */
 -             this.wrap = 0 /* bit 0 true for zlib, bit 1 true for gzip */
 -             this.havedict = false /* true if dictionary provided */
 -             this.flags = 0 /* gzip header method and flags (0 if zlib) */
 -             this.dmax = 0 /* zlib header max distance (INFLATE_STRICT) */
 -             this.check = 0 /* protected copy of check value */
 -             this.total = 0 /* protected copy of output count */
 -             // TODO: may be {}
 -             this.head = null /* where to save gzip header information */
 - 
 -             /* sliding window */
 -             this.wbits = 0 /* log base 2 of requested window size */
 -             this.wsize = 0 /* window size or zero if not using window */
 -             this.whave = 0 /* valid bytes in the window */
 -             this.wnext = 0 /* window write index */
 -             this.window = null /* allocated sliding window, if needed */
 - 
 -             /* bit accumulator */
 -             this.hold = 0 /* input bit accumulator */
 -             this.bits = 0 /* number of bits in "in" */
 - 
 -             /* for string and stored block copying */
 -             this.length = 0 /* literal or length of data to copy */
 -             this.offset = 0 /* distance back to copy string from */
 - 
 -             /* for table and code decoding */
 -             this.extra = 0 /* extra bits needed */
 - 
 -             /* fixed and dynamic code tables */
 -             this.lencode = null /* starting table for length/literal codes */
 -             this.distcode = null /* starting table for distance codes */
 -             this.lenbits = 0 /* index bits for lencode */
 -             this.distbits = 0 /* index bits for distcode */
 - 
 -             /* dynamic table building */
 -             this.ncode = 0 /* number of code length code lengths */
 -             this.nlen = 0 /* number of length code lengths */
 -             this.ndist = 0 /* number of distance code lengths */
 -             this.have = 0 /* number of code lengths in lens[] */
 -             this.next = null /* next available space in codes[] */
 - 
 -             this.lens = new utils.Buf16(
 -               320
 -             ) /* temporary storage for code lengths */
 -             this.work = new utils.Buf16(
 -               288
 -             ) /* work area for code table building */
 - 
 -             /*
 -          because we don't have pointers in js, we use lencode and distcode directly
 -          as buffers so we don't need codes
 -          */
 -             //this.codes = new utils.Buf32(ENOUGH);       /* space for code tables */
 -             this.lendyn = null /* dynamic table for length/literal codes (JS specific) */
 -             this.distdyn = null /* dynamic table for distance codes (JS specific) */
 -             this.sane = 0 /* if false, allow invalid distance too far */
 -             this.back = 0 /* bits back of last unprocessed length/lit */
 -             this.was = 0 /* initial length of match */
 -           }
 - 
 -           function inflateResetKeep(strm) {
 -             var state
 - 
 -             if (!strm || !strm.state) {
 -               return Z_STREAM_ERROR
 -             }
 -             state = strm.state
 -             strm.total_in = strm.total_out = state.total = 0
 -             strm.msg = '' /*Z_NULL*/
 -             if (state.wrap) {
 -               /* to support ill-conceived Java test suite */
 -               strm.adler = state.wrap & 1
 -             }
 -             state.mode = HEAD
 -             state.last = 0
 -             state.havedict = 0
 -             state.dmax = 32768
 -             state.head = null /*Z_NULL*/
 -             state.hold = 0
 -             state.bits = 0
 -             //state.lencode = state.distcode = state.next = state.codes;
 -             state.lencode = state.lendyn = new utils.Buf32(ENOUGH_LENS)
 -             state.distcode = state.distdyn = new utils.Buf32(ENOUGH_DISTS)
 - 
 -             state.sane = 1
 -             state.back = -1
 -             //Tracev((stderr, "inflate: reset\n"));
 -             return Z_OK
 -           }
 - 
 -           function inflateReset(strm) {
 -             var state
 - 
 -             if (!strm || !strm.state) {
 -               return Z_STREAM_ERROR
 -             }
 -             state = strm.state
 -             state.wsize = 0
 -             state.whave = 0
 -             state.wnext = 0
 -             return inflateResetKeep(strm)
 -           }
 - 
 -           function inflateReset2(strm, windowBits) {
 -             var wrap
 -             var state
 - 
 -             /* get the state */
 -             if (!strm || !strm.state) {
 -               return Z_STREAM_ERROR
 -             }
 -             state = strm.state
 - 
 -             /* extract wrap request from windowBits parameter */
 -             if (windowBits < 0) {
 -               wrap = 0
 -               windowBits = -windowBits
 -             } else {
 -               wrap = (windowBits >> 4) + 1
 -               if (windowBits < 48) {
 -                 windowBits &= 15
 -               }
 -             }
 - 
 -             /* set number of window bits, free window if different */
 -             if (windowBits && (windowBits < 8 || windowBits > 15)) {
 -               return Z_STREAM_ERROR
 -             }
 -             if (state.window !== null && state.wbits !== windowBits) {
 -               state.window = null
 -             }
 - 
 -             /* update state and reset the rest of it */
 -             state.wrap = wrap
 -             state.wbits = windowBits
 -             return inflateReset(strm)
 -           }
 - 
 -           function inflateInit2(strm, windowBits) {
 -             var ret
 -             var state
 - 
 -             if (!strm) {
 -               return Z_STREAM_ERROR
 -             }
 -             //strm.msg = Z_NULL;                 /* in case we return an error */
 - 
 -             state = new InflateState()
 - 
 -             //if (state === Z_NULL) return Z_MEM_ERROR;
 -             //Tracev((stderr, "inflate: allocated\n"));
 -             strm.state = state
 -             state.window = null /*Z_NULL*/
 -             ret = inflateReset2(strm, windowBits)
 -             if (ret !== Z_OK) {
 -               strm.state = null /*Z_NULL*/
 -             }
 -             return ret
 -           }
 - 
 -           function inflateInit(strm) {
 -             return inflateInit2(strm, DEF_WBITS)
 -           }
 - 
 -           /*
 -      Return state with length and distance decoding tables and index sizes set to
 -      fixed code decoding.  Normally this returns fixed tables from inffixed.h.
 -      If BUILDFIXED is defined, then instead this routine builds the tables the
 -      first time it's called, and returns those tables the first time and
 -      thereafter.  This reduces the size of the code by about 2K bytes, in
 -      exchange for a little execution time.  However, BUILDFIXED should not be
 -      used for threaded applications, since the rewriting of the tables and virgin
 -      may not be thread-safe.
 -      */
 -           var virgin = true
 - 
 -           var lenfix, distfix // We have no pointers in JS, so keep tables separate
 - 
 -           function fixedtables(state) {
 -             /* build fixed huffman tables if first call (may not be thread safe) */
 -             if (virgin) {
 -               var sym
 - 
 -               lenfix = new utils.Buf32(512)
 -               distfix = new utils.Buf32(32)
 - 
 -               /* literal/length table */
 -               sym = 0
 -               while (sym < 144) {
 -                 state.lens[sym++] = 8
 -               }
 -               while (sym < 256) {
 -                 state.lens[sym++] = 9
 -               }
 -               while (sym < 280) {
 -                 state.lens[sym++] = 7
 -               }
 -               while (sym < 288) {
 -                 state.lens[sym++] = 8
 -               }
 - 
 -               inflate_table(LENS, state.lens, 0, 288, lenfix, 0, state.work, {
 -                 bits: 9
 -               })
 - 
 -               /* distance table */
 -               sym = 0
 -               while (sym < 32) {
 -                 state.lens[sym++] = 5
 -               }
 - 
 -               inflate_table(DISTS, state.lens, 0, 32, distfix, 0, state.work, {
 -                 bits: 5
 -               })
 - 
 -               /* do this just once */
 -               virgin = false
 -             }
 - 
 -             state.lencode = lenfix
 -             state.lenbits = 9
 -             state.distcode = distfix
 -             state.distbits = 5
 -           }
 - 
 -           /*
 -      Update the window with the last wsize (normally 32K) bytes written before
 -      returning.  If window does not exist yet, create it.  This is only called
 -      when a window is already in use, or when output has been written during this
 -      inflate call, but the end of the deflate stream has not been reached yet.
 -      It is also called to create a window for dictionary data when a dictionary
 -      is loaded.
 - 
 -      Providing output buffers larger than 32K to inflate() should provide a speed
 -      advantage, since only the last 32K of output is copied to the sliding window
 -      upon return from inflate(), and since all distances after the first 32K of
 -      output will fall in the output data, making match copies simpler and faster.
 -      The advantage may be dependent on the size of the processor's data caches.
 -      */
 -           function updatewindow(strm, src, end, copy) {
 -             var dist
 -             var state = strm.state
 - 
 -             /* if it hasn't been done already, allocate space for the window */
 -             if (state.window === null) {
 -               state.wsize = 1 << state.wbits
 -               state.wnext = 0
 -               state.whave = 0
 - 
 -               state.window = new utils.Buf8(state.wsize)
 -             }
 - 
 -             /* copy state->wsize or less output bytes into the circular window */
 -             if (copy >= state.wsize) {
 -               utils.arraySet(
 -                 state.window,
 -                 src,
 -                 end - state.wsize,
 -                 state.wsize,
 -                 0
 -               )
 -               state.wnext = 0
 -               state.whave = state.wsize
 -             } else {
 -               dist = state.wsize - state.wnext
 -               if (dist > copy) {
 -                 dist = copy
 -               }
 -               //zmemcpy(state->window + state->wnext, end - copy, dist);
 -               utils.arraySet(state.window, src, end - copy, dist, state.wnext)
 -               copy -= dist
 -               if (copy) {
 -                 //zmemcpy(state->window, end - copy, copy);
 -                 utils.arraySet(state.window, src, end - copy, copy, 0)
 -                 state.wnext = copy
 -                 state.whave = state.wsize
 -               } else {
 -                 state.wnext += dist
 -                 if (state.wnext === state.wsize) {
 -                   state.wnext = 0
 -                 }
 -                 if (state.whave < state.wsize) {
 -                   state.whave += dist
 -                 }
 -               }
 -             }
 -             return 0
 -           }
 - 
 -           function inflate(strm, flush) {
 -             var state
 -             var input, output // input/output buffers
 -             var next /* next input INDEX */
 -             var put /* next output INDEX */
 -             var have, left /* available input and output */
 -             var hold /* bit buffer */
 -             var bits /* bits in bit buffer */
 -             var _in, _out /* save starting available input and output */
 -             var copy /* number of stored or match bytes to copy */
 -             var from /* where to copy match bytes from */
 -             var from_source
 -             var here = 0 /* current decoding table entry */
 -             var here_bits, here_op, here_val // paked "here" denormalized (JS specific)
 -             //var last;                   /* parent table entry */
 -             var last_bits, last_op, last_val // paked "last" denormalized (JS specific)
 -             var len /* length to copy for repeats, bits to drop */
 -             var ret /* return code */
 -             var hbuf = new utils.Buf8(
 -               4
 -             ) /* buffer for gzip header crc calculation */
 -             var opts
 - 
 -             var n // temporary var for NEED_BITS
 - 
 -             var order =
 -               /* permutation of code lengths */
 -               [16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15]
 - 
 -             if (
 -               !strm ||
 -               !strm.state ||
 -               !strm.output ||
 -               (!strm.input && strm.avail_in !== 0)
 -             ) {
 -               return Z_STREAM_ERROR
 -             }
 - 
 -             state = strm.state
 -             if (state.mode === TYPE) {
 -               state.mode = TYPEDO
 -             } /* skip check */
 - 
 -             //--- LOAD() ---
 -             put = strm.next_out
 -             output = strm.output
 -             left = strm.avail_out
 -             next = strm.next_in
 -             input = strm.input
 -             have = strm.avail_in
 -             hold = state.hold
 -             bits = state.bits
 -             //---
 - 
 -             _in = have
 -             _out = left
 -             ret = Z_OK
 - 
 -             // goto emulation
 -             inf_leave: for (;;) {
 -               switch (state.mode) {
 -                 case HEAD:
 -                   if (state.wrap === 0) {
 -                     state.mode = TYPEDO
 -                     break
 -                   }
 -                   //=== NEEDBITS(16);
 -                   while (bits < 16) {
 -                     if (have === 0) {
 -                       break inf_leave
 -                     }
 -                     have--
 -                     hold += input[next++] << bits
 -                     bits += 8
 -                   }
 -                   //===//
 -                   if (state.wrap & 2 && hold === 0x8b1f) {
 -                     /* gzip header */
 -                     state.check = 0 /*crc32(0L, Z_NULL, 0)*/
 -                     //=== CRC2(state.check, hold);
 -                     hbuf[0] = hold & 0xff
 -                     hbuf[1] = (hold >>> 8) & 0xff
 -                     state.check = crc32(state.check, hbuf, 2, 0)
 -                     //===//
 - 
 -                     //=== INITBITS();
 -                     hold = 0
 -                     bits = 0
 -                     //===//
 -                     state.mode = FLAGS
 -                     break
 -                   }
 -                   state.flags = 0 /* expect zlib header */
 -                   if (state.head) {
 -                     state.head.done = false
 -                   }
 -                   if (
 -                     !(state.wrap & 1) /* check if zlib header allowed */ ||
 -                     (((hold & 0xff) /*BITS(8)*/ << 8) + (hold >> 8)) % 31
 -                   ) {
 -                     strm.msg = 'incorrect header check'
 -                     state.mode = BAD
 -                     break
 -                   }
 -                   if ((hold & 0x0f) /*BITS(4)*/ !== Z_DEFLATED) {
 -                     strm.msg = 'unknown compression method'
 -                     state.mode = BAD
 -                     break
 -                   }
 -                   //--- DROPBITS(4) ---//
 -                   hold >>>= 4
 -                   bits -= 4
 -                   //---//
 -                   len = (hold & 0x0f) /*BITS(4)*/ + 8
 -                   if (state.wbits === 0) {
 -                     state.wbits = len
 -                   } else if (len > state.wbits) {
 -                     strm.msg = 'invalid window size'
 -                     state.mode = BAD
 -                     break
 -                   }
 -                   state.dmax = 1 << len
 -                   //Tracev((stderr, "inflate:   zlib header ok\n"));
 -                   strm.adler = state.check = 1 /*adler32(0L, Z_NULL, 0)*/
 -                   state.mode = hold & 0x200 ? DICTID : TYPE
 -                   //=== INITBITS();
 -                   hold = 0
 -                   bits = 0
 -                   //===//
 -                   break
 -                 case FLAGS:
 -                   //=== NEEDBITS(16); */
 -                   while (bits < 16) {
 -                     if (have === 0) {
 -                       break inf_leave
 -                     }
 -                     have--
 -                     hold += input[next++] << bits
 -                     bits += 8
 -                   }
 -                   //===//
 -                   state.flags = hold
 -                   if ((state.flags & 0xff) !== Z_DEFLATED) {
 -                     strm.msg = 'unknown compression method'
 -                     state.mode = BAD
 -                     break
 -                   }
 -                   if (state.flags & 0xe000) {
 -                     strm.msg = 'unknown header flags set'
 -                     state.mode = BAD
 -                     break
 -                   }
 -                   if (state.head) {
 -                     state.head.text = (hold >> 8) & 1
 -                   }
 -                   if (state.flags & 0x0200) {
 -                     //=== CRC2(state.check, hold);
 -                     hbuf[0] = hold & 0xff
 -                     hbuf[1] = (hold >>> 8) & 0xff
 -                     state.check = crc32(state.check, hbuf, 2, 0)
 -                     //===//
 -                   }
 -                   //=== INITBITS();
 -                   hold = 0
 -                   bits = 0
 -                   //===//
 -                   state.mode = TIME
 -                 /* falls through */
 -                 case TIME:
 -                   //=== NEEDBITS(32); */
 -                   while (bits < 32) {
 -                     if (have === 0) {
 -                       break inf_leave
 -                     }
 -                     have--
 -                     hold += input[next++] << bits
 -                     bits += 8
 -                   }
 -                   //===//
 -                   if (state.head) {
 -                     state.head.time = hold
 -                   }
 -                   if (state.flags & 0x0200) {
 -                     //=== CRC4(state.check, hold)
 -                     hbuf[0] = hold & 0xff
 -                     hbuf[1] = (hold >>> 8) & 0xff
 -                     hbuf[2] = (hold >>> 16) & 0xff
 -                     hbuf[3] = (hold >>> 24) & 0xff
 -                     state.check = crc32(state.check, hbuf, 4, 0)
 -                     //===
 -                   }
 -                   //=== INITBITS();
 -                   hold = 0
 -                   bits = 0
 -                   //===//
 -                   state.mode = OS
 -                 /* falls through */
 -                 case OS:
 -                   //=== NEEDBITS(16); */
 -                   while (bits < 16) {
 -                     if (have === 0) {
 -                       break inf_leave
 -                     }
 -                     have--
 -                     hold += input[next++] << bits
 -                     bits += 8
 -                   }
 -                   //===//
 -                   if (state.head) {
 -                     state.head.xflags = hold & 0xff
 -                     state.head.os = hold >> 8
 -                   }
 -                   if (state.flags & 0x0200) {
 -                     //=== CRC2(state.check, hold);
 -                     hbuf[0] = hold & 0xff
 -                     hbuf[1] = (hold >>> 8) & 0xff
 -                     state.check = crc32(state.check, hbuf, 2, 0)
 -                     //===//
 -                   }
 -                   //=== INITBITS();
 -                   hold = 0
 -                   bits = 0
 -                   //===//
 -                   state.mode = EXLEN
 -                 /* falls through */
 -                 case EXLEN:
 -                   if (state.flags & 0x0400) {
 -                     //=== NEEDBITS(16); */
 -                     while (bits < 16) {
 -                       if (have === 0) {
 -                         break inf_leave
 -                       }
 -                       have--
 -                       hold += input[next++] << bits
 -                       bits += 8
 -                     }
 -                     //===//
 -                     state.length = hold
 -                     if (state.head) {
 -                       state.head.extra_len = hold
 -                     }
 -                     if (state.flags & 0x0200) {
 -                       //=== CRC2(state.check, hold);
 -                       hbuf[0] = hold & 0xff
 -                       hbuf[1] = (hold >>> 8) & 0xff
 -                       state.check = crc32(state.check, hbuf, 2, 0)
 -                       //===//
 -                     }
 -                     //=== INITBITS();
 -                     hold = 0
 -                     bits = 0
 -                     //===//
 -                   } else if (state.head) {
 -                     state.head.extra = null /*Z_NULL*/
 -                   }
 -                   state.mode = EXTRA
 -                 /* falls through */
 -                 case EXTRA:
 -                   if (state.flags & 0x0400) {
 -                     copy = state.length
 -                     if (copy > have) {
 -                       copy = have
 -                     }
 -                     if (copy) {
 -                       if (state.head) {
 -                         len = state.head.extra_len - state.length
 -                         if (!state.head.extra) {
 -                           // Use untyped array for more conveniend processing later
 -                           state.head.extra = new Array(state.head.extra_len)
 -                         }
 -                         utils.arraySet(
 -                           state.head.extra,
 -                           input,
 -                           next,
 -                           // extra field is limited to 65536 bytes
 -                           // - no need for additional size check
 -                           copy,
 -                           /*len + copy > state.head.extra_max - len ? state.head.extra_max : copy,*/
 -                           len
 -                         )
 -                         //zmemcpy(state.head.extra + len, next,
 -                         //        len + copy > state.head.extra_max ?
 -                         //        state.head.extra_max - len : copy);
 -                       }
 -                       if (state.flags & 0x0200) {
 -                         state.check = crc32(state.check, input, copy, next)
 -                       }
 -                       have -= copy
 -                       next += copy
 -                       state.length -= copy
 -                     }
 -                     if (state.length) {
 -                       break inf_leave
 -                     }
 -                   }
 -                   state.length = 0
 -                   state.mode = NAME
 -                 /* falls through */
 -                 case NAME:
 -                   if (state.flags & 0x0800) {
 -                     if (have === 0) {
 -                       break inf_leave
 -                     }
 -                     copy = 0
 -                     do {
 -                       // TODO: 2 or 1 bytes?
 -                       len = input[next + copy++]
 -                       /* use constant limit because in js we should not preallocate memory */
 -                       if (
 -                         state.head &&
 -                         len &&
 -                         state.length < 65536 /*state.head.name_max*/
 -                       ) {
 -                         state.head.name += String.fromCharCode(len)
 -                       }
 -                     } while (len && copy < have)
 - 
 -                     if (state.flags & 0x0200) {
 -                       state.check = crc32(state.check, input, copy, next)
 -                     }
 -                     have -= copy
 -                     next += copy
 -                     if (len) {
 -                       break inf_leave
 -                     }
 -                   } else if (state.head) {
 -                     state.head.name = null
 -                   }
 -                   state.length = 0
 -                   state.mode = COMMENT
 -                 /* falls through */
 -                 case COMMENT:
 -                   if (state.flags & 0x1000) {
 -                     if (have === 0) {
 -                       break inf_leave
 -                     }
 -                     copy = 0
 -                     do {
 -                       len = input[next + copy++]
 -                       /* use constant limit because in js we should not preallocate memory */
 -                       if (
 -                         state.head &&
 -                         len &&
 -                         state.length < 65536 /*state.head.comm_max*/
 -                       ) {
 -                         state.head.comment += String.fromCharCode(len)
 -                       }
 -                     } while (len && copy < have)
 -                     if (state.flags & 0x0200) {
 -                       state.check = crc32(state.check, input, copy, next)
 -                     }
 -                     have -= copy
 -                     next += copy
 -                     if (len) {
 -                       break inf_leave
 -                     }
 -                   } else if (state.head) {
 -                     state.head.comment = null
 -                   }
 -                   state.mode = HCRC
 -                 /* falls through */
 -                 case HCRC:
 -                   if (state.flags & 0x0200) {
 -                     //=== NEEDBITS(16); */
 -                     while (bits < 16) {
 -                       if (have === 0) {
 -                         break inf_leave
 -                       }
 -                       have--
 -                       hold += input[next++] << bits
 -                       bits += 8
 -                     }
 -                     //===//
 -                     if (hold !== (state.check & 0xffff)) {
 -                       strm.msg = 'header crc mismatch'
 -                       state.mode = BAD
 -                       break
 -                     }
 -                     //=== INITBITS();
 -                     hold = 0
 -                     bits = 0
 -                     //===//
 -                   }
 -                   if (state.head) {
 -                     state.head.hcrc = (state.flags >> 9) & 1
 -                     state.head.done = true
 -                   }
 -                   strm.adler = state.check = 0
 -                   state.mode = TYPE
 -                   break
 -                 case DICTID:
 -                   //=== NEEDBITS(32); */
 -                   while (bits < 32) {
 -                     if (have === 0) {
 -                       break inf_leave
 -                     }
 -                     have--
 -                     hold += input[next++] << bits
 -                     bits += 8
 -                   }
 -                   //===//
 -                   strm.adler = state.check = zswap32(hold)
 -                   //=== INITBITS();
 -                   hold = 0
 -                   bits = 0
 -                   //===//
 -                   state.mode = DICT
 -                 /* falls through */
 -                 case DICT:
 -                   if (state.havedict === 0) {
 -                     //--- RESTORE() ---
 -                     strm.next_out = put
 -                     strm.avail_out = left
 -                     strm.next_in = next
 -                     strm.avail_in = have
 -                     state.hold = hold
 -                     state.bits = bits
 -                     //---
 -                     return Z_NEED_DICT
 -                   }
 -                   strm.adler = state.check = 1 /*adler32(0L, Z_NULL, 0)*/
 -                   state.mode = TYPE
 -                 /* falls through */
 -                 case TYPE:
 -                   if (flush === Z_BLOCK || flush === Z_TREES) {
 -                     break inf_leave
 -                   }
 -                 /* falls through */
 -                 case TYPEDO:
 -                   if (state.last) {
 -                     //--- BYTEBITS() ---//
 -                     hold >>>= bits & 7
 -                     bits -= bits & 7
 -                     //---//
 -                     state.mode = CHECK
 -                     break
 -                   }
 -                   //=== NEEDBITS(3); */
 -                   while (bits < 3) {
 -                     if (have === 0) {
 -                       break inf_leave
 -                     }
 -                     have--
 -                     hold += input[next++] << bits
 -                     bits += 8
 -                   }
 -                   //===//
 -                   state.last = hold & 0x01 /*BITS(1)*/
 -                   //--- DROPBITS(1) ---//
 -                   hold >>>= 1
 -                   bits -= 1
 -                   //---//
 - 
 -                   switch (hold & 0x03 /*BITS(2)*/) {
 -                     case 0 /* stored block */:
 -                       //Tracev((stderr, "inflate:     stored block%s\n",
 -                       //        state.last ? " (last)" : ""));
 -                       state.mode = STORED
 -                       break
 -                     case 1 /* fixed block */:
 -                       fixedtables(state)
 -                       //Tracev((stderr, "inflate:     fixed codes block%s\n",
 -                       //        state.last ? " (last)" : ""));
 -                       state.mode = LEN_ /* decode codes */
 -                       if (flush === Z_TREES) {
 -                         //--- DROPBITS(2) ---//
 -                         hold >>>= 2
 -                         bits -= 2
 -                         //---//
 -                         break inf_leave
 -                       }
 -                       break
 -                     case 2 /* dynamic block */:
 -                       //Tracev((stderr, "inflate:     dynamic codes block%s\n",
 -                       //        state.last ? " (last)" : ""));
 -                       state.mode = TABLE
 -                       break
 -                     case 3:
 -                       strm.msg = 'invalid block type'
 -                       state.mode = BAD
 -                   }
 -                   //--- DROPBITS(2) ---//
 -                   hold >>>= 2
 -                   bits -= 2
 -                   //---//
 -                   break
 -                 case STORED:
 -                   //--- BYTEBITS() ---// /* go to byte boundary */
 -                   hold >>>= bits & 7
 -                   bits -= bits & 7
 -                   //---//
 -                   //=== NEEDBITS(32); */
 -                   while (bits < 32) {
 -                     if (have === 0) {
 -                       break inf_leave
 -                     }
 -                     have--
 -                     hold += input[next++] << bits
 -                     bits += 8
 -                   }
 -                   //===//
 -                   if ((hold & 0xffff) !== ((hold >>> 16) ^ 0xffff)) {
 -                     strm.msg = 'invalid stored block lengths'
 -                     state.mode = BAD
 -                     break
 -                   }
 -                   state.length = hold & 0xffff
 -                   //Tracev((stderr, "inflate:       stored length %u\n",
 -                   //        state.length));
 -                   //=== INITBITS();
 -                   hold = 0
 -                   bits = 0
 -                   //===//
 -                   state.mode = COPY_
 -                   if (flush === Z_TREES) {
 -                     break inf_leave
 -                   }
 -                 /* falls through */
 -                 case COPY_:
 -                   state.mode = COPY
 -                 /* falls through */
 -                 case COPY:
 -                   copy = state.length
 -                   if (copy) {
 -                     if (copy > have) {
 -                       copy = have
 -                     }
 -                     if (copy > left) {
 -                       copy = left
 -                     }
 -                     if (copy === 0) {
 -                       break inf_leave
 -                     }
 -                     //--- zmemcpy(put, next, copy); ---
 -                     utils.arraySet(output, input, next, copy, put)
 -                     //---//
 -                     have -= copy
 -                     next += copy
 -                     left -= copy
 -                     put += copy
 -                     state.length -= copy
 -                     break
 -                   }
 -                   //Tracev((stderr, "inflate:       stored end\n"));
 -                   state.mode = TYPE
 -                   break
 -                 case TABLE:
 -                   //=== NEEDBITS(14); */
 -                   while (bits < 14) {
 -                     if (have === 0) {
 -                       break inf_leave
 -                     }
 -                     have--
 -                     hold += input[next++] << bits
 -                     bits += 8
 -                   }
 -                   //===//
 -                   state.nlen = (hold & 0x1f) /*BITS(5)*/ + 257
 -                   //--- DROPBITS(5) ---//
 -                   hold >>>= 5
 -                   bits -= 5
 -                   //---//
 -                   state.ndist = (hold & 0x1f) /*BITS(5)*/ + 1
 -                   //--- DROPBITS(5) ---//
 -                   hold >>>= 5
 -                   bits -= 5
 -                   //---//
 -                   state.ncode = (hold & 0x0f) /*BITS(4)*/ + 4
 -                   //--- DROPBITS(4) ---//
 -                   hold >>>= 4
 -                   bits -= 4
 -                   //---//
 -                   //#ifndef PKZIP_BUG_WORKAROUND
 -                   if (state.nlen > 286 || state.ndist > 30) {
 -                     strm.msg = 'too many length or distance symbols'
 -                     state.mode = BAD
 -                     break
 -                   }
 -                   //#endif
 -                   //Tracev((stderr, "inflate:       table sizes ok\n"));
 -                   state.have = 0
 -                   state.mode = LENLENS
 -                 /* falls through */
 -                 case LENLENS:
 -                   while (state.have < state.ncode) {
 -                     //=== NEEDBITS(3);
 -                     while (bits < 3) {
 -                       if (have === 0) {
 -                         break inf_leave
 -                       }
 -                       have--
 -                       hold += input[next++] << bits
 -                       bits += 8
 -                     }
 -                     //===//
 -                     state.lens[order[state.have++]] = hold & 0x07 //BITS(3);
 -                     //--- DROPBITS(3) ---//
 -                     hold >>>= 3
 -                     bits -= 3
 -                     //---//
 -                   }
 -                   while (state.have < 19) {
 -                     state.lens[order[state.have++]] = 0
 -                   }
 -                   // We have separate tables & no pointers. 2 commented lines below not needed.
 -                   //state.next = state.codes;
 -                   //state.lencode = state.next;
 -                   // Switch to use dynamic table
 -                   state.lencode = state.lendyn
 -                   state.lenbits = 7
 - 
 -                   opts = { bits: state.lenbits }
 -                   ret = inflate_table(
 -                     CODES,
 -                     state.lens,
 -                     0,
 -                     19,
 -                     state.lencode,
 -                     0,
 -                     state.work,
 -                     opts
 -                   )
 -                   state.lenbits = opts.bits
 - 
 -                   if (ret) {
 -                     strm.msg = 'invalid code lengths set'
 -                     state.mode = BAD
 -                     break
 -                   }
 -                   //Tracev((stderr, "inflate:       code lengths ok\n"));
 -                   state.have = 0
 -                   state.mode = CODELENS
 -                 /* falls through */
 -                 case CODELENS:
 -                   while (state.have < state.nlen + state.ndist) {
 -                     for (;;) {
 -                       here =
 -                         state.lencode[
 -                           hold & ((1 << state.lenbits) - 1)
 -                         ] /*BITS(state.lenbits)*/
 -                       here_bits = here >>> 24
 -                       here_op = (here >>> 16) & 0xff
 -                       here_val = here & 0xffff
 - 
 -                       if (here_bits <= bits) {
 -                         break
 -                       }
 -                       //--- PULLBYTE() ---//
 -                       if (have === 0) {
 -                         break inf_leave
 -                       }
 -                       have--
 -                       hold += input[next++] << bits
 -                       bits += 8
 -                       //---//
 -                     }
 -                     if (here_val < 16) {
 -                       //--- DROPBITS(here.bits) ---//
 -                       hold >>>= here_bits
 -                       bits -= here_bits
 -                       //---//
 -                       state.lens[state.have++] = here_val
 -                     } else {
 -                       if (here_val === 16) {
 -                         //=== NEEDBITS(here.bits + 2);
 -                         n = here_bits + 2
 -                         while (bits < n) {
 -                           if (have === 0) {
 -                             break inf_leave
 -                           }
 -                           have--
 -                           hold += input[next++] << bits
 -                           bits += 8
 -                         }
 -                         //===//
 -                         //--- DROPBITS(here.bits) ---//
 -                         hold >>>= here_bits
 -                         bits -= here_bits
 -                         //---//
 -                         if (state.have === 0) {
 -                           strm.msg = 'invalid bit length repeat'
 -                           state.mode = BAD
 -                           break
 -                         }
 -                         len = state.lens[state.have - 1]
 -                         copy = 3 + (hold & 0x03) //BITS(2);
 -                         //--- DROPBITS(2) ---//
 -                         hold >>>= 2
 -                         bits -= 2
 -                         //---//
 -                       } else if (here_val === 17) {
 -                         //=== NEEDBITS(here.bits + 3);
 -                         n = here_bits + 3
 -                         while (bits < n) {
 -                           if (have === 0) {
 -                             break inf_leave
 -                           }
 -                           have--
 -                           hold += input[next++] << bits
 -                           bits += 8
 -                         }
 -                         //===//
 -                         //--- DROPBITS(here.bits) ---//
 -                         hold >>>= here_bits
 -                         bits -= here_bits
 -                         //---//
 -                         len = 0
 -                         copy = 3 + (hold & 0x07) //BITS(3);
 -                         //--- DROPBITS(3) ---//
 -                         hold >>>= 3
 -                         bits -= 3
 -                         //---//
 -                       } else {
 -                         //=== NEEDBITS(here.bits + 7);
 -                         n = here_bits + 7
 -                         while (bits < n) {
 -                           if (have === 0) {
 -                             break inf_leave
 -                           }
 -                           have--
 -                           hold += input[next++] << bits
 -                           bits += 8
 -                         }
 -                         //===//
 -                         //--- DROPBITS(here.bits) ---//
 -                         hold >>>= here_bits
 -                         bits -= here_bits
 -                         //---//
 -                         len = 0
 -                         copy = 11 + (hold & 0x7f) //BITS(7);
 -                         //--- DROPBITS(7) ---//
 -                         hold >>>= 7
 -                         bits -= 7
 -                         //---//
 -                       }
 -                       if (state.have + copy > state.nlen + state.ndist) {
 -                         strm.msg = 'invalid bit length repeat'
 -                         state.mode = BAD
 -                         break
 -                       }
 -                       while (copy--) {
 -                         state.lens[state.have++] = len
 -                       }
 -                     }
 -                   }
 - 
 -                   /* handle error breaks in while */
 -                   if (state.mode === BAD) {
 -                     break
 -                   }
 - 
 -                   /* check for end-of-block code (better have one) */
 -                   if (state.lens[256] === 0) {
 -                     strm.msg = 'invalid code -- missing end-of-block'
 -                     state.mode = BAD
 -                     break
 -                   }
 - 
 -                   /* build code tables -- note: do not change the lenbits or distbits
 -                          values here (9 and 6) without reading the comments in inftrees.h
 -                          concerning the ENOUGH constants, which depend on those values */
 -                   state.lenbits = 9
 - 
 -                   opts = { bits: state.lenbits }
 -                   ret = inflate_table(
 -                     LENS,
 -                     state.lens,
 -                     0,
 -                     state.nlen,
 -                     state.lencode,
 -                     0,
 -                     state.work,
 -                     opts
 -                   )
 -                   // We have separate tables & no pointers. 2 commented lines below not needed.
 -                   // state.next_index = opts.table_index;
 -                   state.lenbits = opts.bits
 -                   // state.lencode = state.next;
 - 
 -                   if (ret) {
 -                     strm.msg = 'invalid literal/lengths set'
 -                     state.mode = BAD
 -                     break
 -                   }
 - 
 -                   state.distbits = 6
 -                   //state.distcode.copy(state.codes);
 -                   // Switch to use dynamic table
 -                   state.distcode = state.distdyn
 -                   opts = { bits: state.distbits }
 -                   ret = inflate_table(
 -                     DISTS,
 -                     state.lens,
 -                     state.nlen,
 -                     state.ndist,
 -                     state.distcode,
 -                     0,
 -                     state.work,
 -                     opts
 -                   )
 -                   // We have separate tables & no pointers. 2 commented lines below not needed.
 -                   // state.next_index = opts.table_index;
 -                   state.distbits = opts.bits
 -                   // state.distcode = state.next;
 - 
 -                   if (ret) {
 -                     strm.msg = 'invalid distances set'
 -                     state.mode = BAD
 -                     break
 -                   }
 -                   //Tracev((stderr, 'inflate:       codes ok\n'));
 -                   state.mode = LEN_
 -                   if (flush === Z_TREES) {
 -                     break inf_leave
 -                   }
 -                 /* falls through */
 -                 case LEN_:
 -                   state.mode = LEN
 -                 /* falls through */
 -                 case LEN:
 -                   if (have >= 6 && left >= 258) {
 -                     //--- RESTORE() ---
 -                     strm.next_out = put
 -                     strm.avail_out = left
 -                     strm.next_in = next
 -                     strm.avail_in = have
 -                     state.hold = hold
 -                     state.bits = bits
 -                     //---
 -                     inflate_fast(strm, _out)
 -                     //--- LOAD() ---
 -                     put = strm.next_out
 -                     output = strm.output
 -                     left = strm.avail_out
 -                     next = strm.next_in
 -                     input = strm.input
 -                     have = strm.avail_in
 -                     hold = state.hold
 -                     bits = state.bits
 -                     //---
 - 
 -                     if (state.mode === TYPE) {
 -                       state.back = -1
 -                     }
 -                     break
 -                   }
 -                   state.back = 0
 -                   for (;;) {
 -                     here =
 -                       state.lencode[
 -                         hold & ((1 << state.lenbits) - 1)
 -                       ] /*BITS(state.lenbits)*/
 -                     here_bits = here >>> 24
 -                     here_op = (here >>> 16) & 0xff
 -                     here_val = here & 0xffff
 - 
 -                     if (here_bits <= bits) {
 -                       break
 -                     }
 -                     //--- PULLBYTE() ---//
 -                     if (have === 0) {
 -                       break inf_leave
 -                     }
 -                     have--
 -                     hold += input[next++] << bits
 -                     bits += 8
 -                     //---//
 -                   }
 -                   if (here_op && (here_op & 0xf0) === 0) {
 -                     last_bits = here_bits
 -                     last_op = here_op
 -                     last_val = here_val
 -                     for (;;) {
 -                       here =
 -                         state.lencode[
 -                           last_val +
 -                             ((hold &
 -                               ((1 << (last_bits + last_op)) -
 -                                 1)) /*BITS(last.bits + last.op)*/ >>
 -                               last_bits)
 -                         ]
 -                       here_bits = here >>> 24
 -                       here_op = (here >>> 16) & 0xff
 -                       here_val = here & 0xffff
 - 
 -                       if (last_bits + here_bits <= bits) {
 -                         break
 -                       }
 -                       //--- PULLBYTE() ---//
 -                       if (have === 0) {
 -                         break inf_leave
 -                       }
 -                       have--
 -                       hold += input[next++] << bits
 -                       bits += 8
 -                       //---//
 -                     }
 -                     //--- DROPBITS(last.bits) ---//
 -                     hold >>>= last_bits
 -                     bits -= last_bits
 -                     //---//
 -                     state.back += last_bits
 -                   }
 -                   //--- DROPBITS(here.bits) ---//
 -                   hold >>>= here_bits
 -                   bits -= here_bits
 -                   //---//
 -                   state.back += here_bits
 -                   state.length = here_val
 -                   if (here_op === 0) {
 -                     //Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ?
 -                     //        "inflate:         literal '%c'\n" :
 -                     //        "inflate:         literal 0x%02x\n", here.val));
 -                     state.mode = LIT
 -                     break
 -                   }
 -                   if (here_op & 32) {
 -                     //Tracevv((stderr, "inflate:         end of block\n"));
 -                     state.back = -1
 -                     state.mode = TYPE
 -                     break
 -                   }
 -                   if (here_op & 64) {
 -                     strm.msg = 'invalid literal/length code'
 -                     state.mode = BAD
 -                     break
 -                   }
 -                   state.extra = here_op & 15
 -                   state.mode = LENEXT
 -                 /* falls through */
 -                 case LENEXT:
 -                   if (state.extra) {
 -                     //=== NEEDBITS(state.extra);
 -                     n = state.extra
 -                     while (bits < n) {
 -                       if (have === 0) {
 -                         break inf_leave
 -                       }
 -                       have--
 -                       hold += input[next++] << bits
 -                       bits += 8
 -                     }
 -                     //===//
 -                     state.length +=
 -                       hold & ((1 << state.extra) - 1) /*BITS(state.extra)*/
 -                     //--- DROPBITS(state.extra) ---//
 -                     hold >>>= state.extra
 -                     bits -= state.extra
 -                     //---//
 -                     state.back += state.extra
 -                   }
 -                   //Tracevv((stderr, "inflate:         length %u\n", state.length));
 -                   state.was = state.length
 -                   state.mode = DIST
 -                 /* falls through */
 -                 case DIST:
 -                   for (;;) {
 -                     here =
 -                       state.distcode[
 -                         hold & ((1 << state.distbits) - 1)
 -                       ] /*BITS(state.distbits)*/
 -                     here_bits = here >>> 24
 -                     here_op = (here >>> 16) & 0xff
 -                     here_val = here & 0xffff
 - 
 -                     if (here_bits <= bits) {
 -                       break
 -                     }
 -                     //--- PULLBYTE() ---//
 -                     if (have === 0) {
 -                       break inf_leave
 -                     }
 -                     have--
 -                     hold += input[next++] << bits
 -                     bits += 8
 -                     //---//
 -                   }
 -                   if ((here_op & 0xf0) === 0) {
 -                     last_bits = here_bits
 -                     last_op = here_op
 -                     last_val = here_val
 -                     for (;;) {
 -                       here =
 -                         state.distcode[
 -                           last_val +
 -                             ((hold &
 -                               ((1 << (last_bits + last_op)) -
 -                                 1)) /*BITS(last.bits + last.op)*/ >>
 -                               last_bits)
 -                         ]
 -                       here_bits = here >>> 24
 -                       here_op = (here >>> 16) & 0xff
 -                       here_val = here & 0xffff
 - 
 -                       if (last_bits + here_bits <= bits) {
 -                         break
 -                       }
 -                       //--- PULLBYTE() ---//
 -                       if (have === 0) {
 -                         break inf_leave
 -                       }
 -                       have--
 -                       hold += input[next++] << bits
 -                       bits += 8
 -                       //---//
 -                     }
 -                     //--- DROPBITS(last.bits) ---//
 -                     hold >>>= last_bits
 -                     bits -= last_bits
 -                     //---//
 -                     state.back += last_bits
 -                   }
 -                   //--- DROPBITS(here.bits) ---//
 -                   hold >>>= here_bits
 -                   bits -= here_bits
 -                   //---//
 -                   state.back += here_bits
 -                   if (here_op & 64) {
 -                     strm.msg = 'invalid distance code'
 -                     state.mode = BAD
 -                     break
 -                   }
 -                   state.offset = here_val
 -                   state.extra = here_op & 15
 -                   state.mode = DISTEXT
 -                 /* falls through */
 -                 case DISTEXT:
 -                   if (state.extra) {
 -                     //=== NEEDBITS(state.extra);
 -                     n = state.extra
 -                     while (bits < n) {
 -                       if (have === 0) {
 -                         break inf_leave
 -                       }
 -                       have--
 -                       hold += input[next++] << bits
 -                       bits += 8
 -                     }
 -                     //===//
 -                     state.offset +=
 -                       hold & ((1 << state.extra) - 1) /*BITS(state.extra)*/
 -                     //--- DROPBITS(state.extra) ---//
 -                     hold >>>= state.extra
 -                     bits -= state.extra
 -                     //---//
 -                     state.back += state.extra
 -                   }
 -                   //#ifdef INFLATE_STRICT
 -                   if (state.offset > state.dmax) {
 -                     strm.msg = 'invalid distance too far back'
 -                     state.mode = BAD
 -                     break
 -                   }
 -                   //#endif
 -                   //Tracevv((stderr, "inflate:         distance %u\n", state.offset));
 -                   state.mode = MATCH
 -                 /* falls through */
 -                 case MATCH:
 -                   if (left === 0) {
 -                     break inf_leave
 -                   }
 -                   copy = _out - left
 -                   if (state.offset > copy) {
 -                     /* copy from window */
 -                     copy = state.offset - copy
 -                     if (copy > state.whave) {
 -                       if (state.sane) {
 -                         strm.msg = 'invalid distance too far back'
 -                         state.mode = BAD
 -                         break
 -                       }
 -                       // (!) This block is disabled in zlib defailts,
 -                       // don't enable it for binary compatibility
 -                       //#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR
 -                       //          Trace((stderr, "inflate.c too far\n"));
 -                       //          copy -= state.whave;
 -                       //          if (copy > state.length) { copy = state.length; }
 -                       //          if (copy > left) { copy = left; }
 -                       //          left -= copy;
 -                       //          state.length -= copy;
 -                       //          do {
 -                       //            output[put++] = 0;
 -                       //          } while (--copy);
 -                       //          if (state.length === 0) { state.mode = LEN; }
 -                       //          break;
 -                       //#endif
 -                     }
 -                     if (copy > state.wnext) {
 -                       copy -= state.wnext
 -                       from = state.wsize - copy
 -                     } else {
 -                       from = state.wnext - copy
 -                     }
 -                     if (copy > state.length) {
 -                       copy = state.length
 -                     }
 -                     from_source = state.window
 -                   } else {
 -                     /* copy from output */
 -                     from_source = output
 -                     from = put - state.offset
 -                     copy = state.length
 -                   }
 -                   if (copy > left) {
 -                     copy = left
 -                   }
 -                   left -= copy
 -                   state.length -= copy
 -                   do {
 -                     output[put++] = from_source[from++]
 -                   } while (--copy)
 -                   if (state.length === 0) {
 -                     state.mode = LEN
 -                   }
 -                   break
 -                 case LIT:
 -                   if (left === 0) {
 -                     break inf_leave
 -                   }
 -                   output[put++] = state.length
 -                   left--
 -                   state.mode = LEN
 -                   break
 -                 case CHECK:
 -                   if (state.wrap) {
 -                     //=== NEEDBITS(32);
 -                     while (bits < 32) {
 -                       if (have === 0) {
 -                         break inf_leave
 -                       }
 -                       have--
 -                       // Use '|' insdead of '+' to make sure that result is signed
 -                       hold |= input[next++] << bits
 -                       bits += 8
 -                     }
 -                     //===//
 -                     _out -= left
 -                     strm.total_out += _out
 -                     state.total += _out
 -                     if (_out) {
 -                       strm.adler = state.check =
 -                         /*UPDATE(state.check, put - _out, _out);*/
 -                         state.flags
 -                           ? crc32(state.check, output, _out, put - _out)
 -                           : adler32(state.check, output, _out, put - _out)
 -                     }
 -                     _out = left
 -                     // NB: crc32 stored as signed 32-bit int, zswap32 returns signed too
 -                     if ((state.flags ? hold : zswap32(hold)) !== state.check) {
 -                       strm.msg = 'incorrect data check'
 -                       state.mode = BAD
 -                       break
 -                     }
 -                     //=== INITBITS();
 -                     hold = 0
 -                     bits = 0
 -                     //===//
 -                     //Tracev((stderr, "inflate:   check matches trailer\n"));
 -                   }
 -                   state.mode = LENGTH
 -                 /* falls through */
 -                 case LENGTH:
 -                   if (state.wrap && state.flags) {
 -                     //=== NEEDBITS(32);
 -                     while (bits < 32) {
 -                       if (have === 0) {
 -                         break inf_leave
 -                       }
 -                       have--
 -                       hold += input[next++] << bits
 -                       bits += 8
 -                     }
 -                     //===//
 -                     if (hold !== (state.total & 0xffffffff)) {
 -                       strm.msg = 'incorrect length check'
 -                       state.mode = BAD
 -                       break
 -                     }
 -                     //=== INITBITS();
 -                     hold = 0
 -                     bits = 0
 -                     //===//
 -                     //Tracev((stderr, "inflate:   length matches trailer\n"));
 -                   }
 -                   state.mode = DONE
 -                 /* falls through */
 -                 case DONE:
 -                   ret = Z_STREAM_END
 -                   break inf_leave
 -                 case BAD:
 -                   ret = Z_DATA_ERROR
 -                   break inf_leave
 -                 case MEM:
 -                   return Z_MEM_ERROR
 -                 case SYNC:
 -                 /* falls through */
 -                 default:
 -                   return Z_STREAM_ERROR
 -               }
 -             }
 - 
 -             // inf_leave <- here is real place for "goto inf_leave", emulated via "break inf_leave"
 - 
 -             /*
 -          Return from inflate(), updating the total counts and the check value.
 -          If there was no progress during the inflate() call, return a buffer
 -          error.  Call updatewindow() to create and/or update the window state.
 -          Note: a memory error from inflate() is non-recoverable.
 -          */
 - 
 -             //--- RESTORE() ---
 -             strm.next_out = put
 -             strm.avail_out = left
 -             strm.next_in = next
 -             strm.avail_in = have
 -             state.hold = hold
 -             state.bits = bits
 -             //---
 - 
 -             if (
 -               state.wsize ||
 -               (_out !== strm.avail_out &&
 -                 state.mode < BAD &&
 -                 (state.mode < CHECK || flush !== Z_FINISH))
 -             ) {
 -               if (
 -                 updatewindow(
 -                   strm,
 -                   strm.output,
 -                   strm.next_out,
 -                   _out - strm.avail_out
 -                 )
 -               ) {
 -                 state.mode = MEM
 -                 return Z_MEM_ERROR
 -               }
 -             }
 -             _in -= strm.avail_in
 -             _out -= strm.avail_out
 -             strm.total_in += _in
 -             strm.total_out += _out
 -             state.total += _out
 -             if (state.wrap && _out) {
 -               strm.adler = state.check /*UPDATE(state.check, strm.next_out - _out, _out);*/ = state.flags
 -                 ? crc32(state.check, output, _out, strm.next_out - _out)
 -                 : adler32(state.check, output, _out, strm.next_out - _out)
 -             }
 -             strm.data_type =
 -               state.bits +
 -               (state.last ? 64 : 0) +
 -               (state.mode === TYPE ? 128 : 0) +
 -               (state.mode === LEN_ || state.mode === COPY_ ? 256 : 0)
 -             if (
 -               ((_in === 0 && _out === 0) || flush === Z_FINISH) &&
 -               ret === Z_OK
 -             ) {
 -               ret = Z_BUF_ERROR
 -             }
 -             return ret
 -           }
 - 
 -           function inflateEnd(strm) {
 -             if (!strm || !strm.state /*|| strm->zfree == (free_func)0*/) {
 -               return Z_STREAM_ERROR
 -             }
 - 
 -             var state = strm.state
 -             if (state.window) {
 -               state.window = null
 -             }
 -             strm.state = null
 -             return Z_OK
 -           }
 - 
 -           function inflateGetHeader(strm, head) {
 -             var state
 - 
 -             /* check state */
 -             if (!strm || !strm.state) {
 -               return Z_STREAM_ERROR
 -             }
 -             state = strm.state
 -             if ((state.wrap & 2) === 0) {
 -               return Z_STREAM_ERROR
 -             }
 - 
 -             /* save header structure */
 -             state.head = head
 -             head.done = false
 -             return Z_OK
 -           }
 - 
 -           function inflateSetDictionary(strm, dictionary) {
 -             var dictLength = dictionary.length
 - 
 -             var state
 -             var dictid
 -             var ret
 - 
 -             /* check state */
 -             if (!strm /* == Z_NULL */ || !strm.state /* == Z_NULL */) {
 -               return Z_STREAM_ERROR
 -             }
 -             state = strm.state
 - 
 -             if (state.wrap !== 0 && state.mode !== DICT) {
 -               return Z_STREAM_ERROR
 -             }
 - 
 -             /* check for correct dictionary identifier */
 -             if (state.mode === DICT) {
 -               dictid = 1 /* adler32(0, null, 0)*/
 -               /* dictid = adler32(dictid, dictionary, dictLength); */
 -               dictid = adler32(dictid, dictionary, dictLength, 0)
 -               if (dictid !== state.check) {
 -                 return Z_DATA_ERROR
 -               }
 -             }
 -             /* copy dictionary to window using updatewindow(), which will amend the
 -          existing dictionary if appropriate */
 -             ret = updatewindow(strm, dictionary, dictLength, dictLength)
 -             if (ret) {
 -               state.mode = MEM
 -               return Z_MEM_ERROR
 -             }
 -             state.havedict = 1
 -             // Tracev((stderr, "inflate:   dictionary set\n"));
 -             return Z_OK
 -           }
 - 
 -           exports.inflateReset = inflateReset
 -           exports.inflateReset2 = inflateReset2
 -           exports.inflateResetKeep = inflateResetKeep
 -           exports.inflateInit = inflateInit
 -           exports.inflateInit2 = inflateInit2
 -           exports.inflate = inflate
 -           exports.inflateEnd = inflateEnd
 -           exports.inflateGetHeader = inflateGetHeader
 -           exports.inflateSetDictionary = inflateSetDictionary
 -           exports.inflateInfo = 'pako inflate (from Nodeca project)'
 - 
 -           /* Not implemented
 -      exports.inflateCopy = inflateCopy;
 -      exports.inflateGetDictionary = inflateGetDictionary;
 -      exports.inflateMark = inflateMark;
 -      exports.inflatePrime = inflatePrime;
 -      exports.inflateSync = inflateSync;
 -      exports.inflateSyncPoint = inflateSyncPoint;
 -      exports.inflateUndermine = inflateUndermine;
 -      */
 -         },
 -         {
 -           '../utils/common': 1,
 -           './adler32': 3,
 -           './crc32': 5,
 -           './inffast': 7,
 -           './inftrees': 9
 -         }
 -       ],
 -       9: [
 -         function(require, module, exports) {
 -           'use strict'
 - 
 -           var utils = require('../utils/common')
 - 
 -           var MAXBITS = 15
 -           var ENOUGH_LENS = 852
 -           var ENOUGH_DISTS = 592
 -           //var ENOUGH = (ENOUGH_LENS+ENOUGH_DISTS);
 - 
 -           var CODES = 0
 -           var LENS = 1
 -           var DISTS = 2
 - 
 -           var lbase = [
 -             /* Length codes 257..285 base */
 -             3,
 -             4,
 -             5,
 -             6,
 -             7,
 -             8,
 -             9,
 -             10,
 -             11,
 -             13,
 -             15,
 -             17,
 -             19,
 -             23,
 -             27,
 -             31,
 -             35,
 -             43,
 -             51,
 -             59,
 -             67,
 -             83,
 -             99,
 -             115,
 -             131,
 -             163,
 -             195,
 -             227,
 -             258,
 -             0,
 -             0
 -           ]
 - 
 -           var lext = [
 -             /* Length codes 257..285 extra */
 -             16,
 -             16,
 -             16,
 -             16,
 -             16,
 -             16,
 -             16,
 -             16,
 -             17,
 -             17,
 -             17,
 -             17,
 -             18,
 -             18,
 -             18,
 -             18,
 -             19,
 -             19,
 -             19,
 -             19,
 -             20,
 -             20,
 -             20,
 -             20,
 -             21,
 -             21,
 -             21,
 -             21,
 -             16,
 -             72,
 -             78
 -           ]
 - 
 -           var dbase = [
 -             /* Distance codes 0..29 base */
 -             1,
 -             2,
 -             3,
 -             4,
 -             5,
 -             7,
 -             9,
 -             13,
 -             17,
 -             25,
 -             33,
 -             49,
 -             65,
 -             97,
 -             129,
 -             193,
 -             257,
 -             385,
 -             513,
 -             769,
 -             1025,
 -             1537,
 -             2049,
 -             3073,
 -             4097,
 -             6145,
 -             8193,
 -             12289,
 -             16385,
 -             24577,
 -             0,
 -             0
 -           ]
 - 
 -           var dext = [
 -             /* Distance codes 0..29 extra */
 -             16,
 -             16,
 -             16,
 -             16,
 -             17,
 -             17,
 -             18,
 -             18,
 -             19,
 -             19,
 -             20,
 -             20,
 -             21,
 -             21,
 -             22,
 -             22,
 -             23,
 -             23,
 -             24,
 -             24,
 -             25,
 -             25,
 -             26,
 -             26,
 -             27,
 -             27,
 -             28,
 -             28,
 -             29,
 -             29,
 -             64,
 -             64
 -           ]
 - 
 -           module.exports = function inflate_table(
 -             type,
 -             lens,
 -             lens_index,
 -             codes,
 -             table,
 -             table_index,
 -             work,
 -             opts
 -           ) {
 -             var bits = opts.bits
 -             //here = opts.here; /* table entry for duplication */
 - 
 -             var len = 0 /* a code's length in bits */
 -             var sym = 0 /* index of code symbols */
 -             var min = 0,
 -               max = 0 /* minimum and maximum code lengths */
 -             var root = 0 /* number of index bits for root table */
 -             var curr = 0 /* number of index bits for current table */
 -             var drop = 0 /* code bits to drop for sub-table */
 -             var left = 0 /* number of prefix codes available */
 -             var used = 0 /* code entries in table used */
 -             var huff = 0 /* Huffman code */
 -             var incr /* for incrementing code, index */
 -             var fill /* index for replicating entries */
 -             var low /* low bits for current root entry */
 -             var mask /* mask for low root bits */
 -             var next /* next available space in table */
 -             var base = null /* base value table to use */
 -             var base_index = 0
 -             //  var shoextra;    /* extra bits table to use */
 -             var end /* use base and extra for symbol > end */
 -             var count = new utils.Buf16(MAXBITS + 1) //[MAXBITS+1];    /* number of codes of each length */
 -             var offs = new utils.Buf16(MAXBITS + 1) //[MAXBITS+1];     /* offsets in table for each length */
 -             var extra = null
 -             var extra_index = 0
 - 
 -             var here_bits, here_op, here_val
 - 
 -             /*
 -          Process a set of code lengths to create a canonical Huffman code.  The
 -          code lengths are lens[0..codes-1].  Each length corresponds to the
 -          symbols 0..codes-1.  The Huffman code is generated by first sorting the
 -          symbols by length from short to long, and retaining the symbol order
 -          for codes with equal lengths.  Then the code starts with all zero bits
 -          for the first code of the shortest length, and the codes are integer
 -          increments for the same length, and zeros are appended as the length
 -          increases.  For the deflate format, these bits are stored backwards
 -          from their more natural integer increment ordering, and so when the
 -          decoding tables are built in the large loop below, the integer codes
 -          are incremented backwards.
 - 
 -          This routine assumes, but does not check, that all of the entries in
 -          lens[] are in the range 0..MAXBITS.  The caller must assure this.
 -          1..MAXBITS is interpreted as that code length.  zero means that that
 -          symbol does not occur in this code.
 - 
 -          The codes are sorted by computing a count of codes for each length,
 -          creating from that a table of starting indices for each length in the
 -          sorted table, and then entering the symbols in order in the sorted
 -          table.  The sorted table is work[], with that space being provided by
 -          the caller.
 - 
 -          The length counts are used for other purposes as well, i.e. finding
 -          the minimum and maximum length codes, determining if there are any
 -          codes at all, checking for a valid set of lengths, and looking ahead
 -          at length counts to determine sub-table sizes when building the
 -          decoding tables.
 -          */
 - 
 -             /* accumulate lengths for codes (assumes lens[] all in 0..MAXBITS) */
 -             for (len = 0; len <= MAXBITS; len++) {
 -               count[len] = 0
 -             }
 -             for (sym = 0; sym < codes; sym++) {
 -               count[lens[lens_index + sym]]++
 -             }
 - 
 -             /* bound code lengths, force root to be within code lengths */
 -             root = bits
 -             for (max = MAXBITS; max >= 1; max--) {
 -               if (count[max] !== 0) {
 -                 break
 -               }
 -             }
 -             if (root > max) {
 -               root = max
 -             }
 -             if (max === 0) {
 -               /* no symbols to code at all */
 -               //table.op[opts.table_index] = 64;  //here.op = (var char)64;    /* invalid code marker */
 -               //table.bits[opts.table_index] = 1;   //here.bits = (var char)1;
 -               //table.val[opts.table_index++] = 0;   //here.val = (var short)0;
 -               table[table_index++] = (1 << 24) | (64 << 16) | 0
 - 
 -               //table.op[opts.table_index] = 64;
 -               //table.bits[opts.table_index] = 1;
 -               //table.val[opts.table_index++] = 0;
 -               table[table_index++] = (1 << 24) | (64 << 16) | 0
 - 
 -               opts.bits = 1
 -               return 0 /* no symbols, but wait for decoding to report error */
 -             }
 -             for (min = 1; min < max; min++) {
 -               if (count[min] !== 0) {
 -                 break
 -               }
 -             }
 -             if (root < min) {
 -               root = min
 -             }
 - 
 -             /* check for an over-subscribed or incomplete set of lengths */
 -             left = 1
 -             for (len = 1; len <= MAXBITS; len++) {
 -               left <<= 1
 -               left -= count[len]
 -               if (left < 0) {
 -                 return -1
 -               } /* over-subscribed */
 -             }
 -             if (left > 0 && (type === CODES || max !== 1)) {
 -               return -1 /* incomplete set */
 -             }
 - 
 -             /* generate offsets into symbol table for each length for sorting */
 -             offs[1] = 0
 -             for (len = 1; len < MAXBITS; len++) {
 -               offs[len + 1] = offs[len] + count[len]
 -             }
 - 
 -             /* sort symbols by length, by symbol order within each length */
 -             for (sym = 0; sym < codes; sym++) {
 -               if (lens[lens_index + sym] !== 0) {
 -                 work[offs[lens[lens_index + sym]]++] = sym
 -               }
 -             }
 - 
 -             /*
 -          Create and fill in decoding tables.  In this loop, the table being
 -          filled is at next and has curr index bits.  The code being used is huff
 -          with length len.  That code is converted to an index by dropping drop
 -          bits off of the bottom.  For codes where len is less than drop + curr,
 -          those top drop + curr - len bits are incremented through all values to
 -          fill the table with replicated entries.
 - 
 -          root is the number of index bits for the root table.  When len exceeds
 -          root, sub-tables are created pointed to by the root entry with an index
 -          of the low root bits of huff.  This is saved in low to check for when a
 -          new sub-table should be started.  drop is zero when the root table is
 -          being filled, and drop is root when sub-tables are being filled.
 - 
 -          When a new sub-table is needed, it is necessary to look ahead in the
 -          code lengths to determine what size sub-table is needed.  The length
 -          counts are used for this, and so count[] is decremented as codes are
 -          entered in the tables.
 - 
 -          used keeps track of how many table entries have been allocated from the
 -          provided *table space.  It is checked for LENS and DIST tables against
 -          the constants ENOUGH_LENS and ENOUGH_DISTS to guard against changes in
 -          the initial root table size constants.  See the comments in inftrees.h
 -          for more information.
 - 
 -          sym increments through all symbols, and the loop terminates when
 -          all codes of length max, i.e. all codes, have been processed.  This
 -          routine permits incomplete codes, so another loop after this one fills
 -          in the rest of the decoding tables with invalid code markers.
 -          */
 - 
 -             /* set up for code type */
 -             // poor man optimization - use if-else instead of switch,
 -             // to avoid deopts in old v8
 -             if (type === CODES) {
 -               base = extra = work /* dummy value--not used */
 -               end = 19
 -             } else if (type === LENS) {
 -               base = lbase
 -               base_index -= 257
 -               extra = lext
 -               extra_index -= 257
 -               end = 256
 -             } else {
 -               /* DISTS */
 -               base = dbase
 -               extra = dext
 -               end = -1
 -             }
 - 
 -             /* initialize opts for loop */
 -             huff = 0 /* starting code */
 -             sym = 0 /* starting code symbol */
 -             len = min /* starting code length */
 -             next = table_index /* current table to fill in */
 -             curr = root /* current table index bits */
 -             drop = 0 /* current bits to drop from code for index */
 -             low = -1 /* trigger new sub-table when len > root */
 -             used = 1 << root /* use root table entries */
 -             mask = used - 1 /* mask for comparing low */
 - 
 -             /* check available table space */
 -             if (
 -               (type === LENS && used > ENOUGH_LENS) ||
 -               (type === DISTS && used > ENOUGH_DISTS)
 -             ) {
 -               return 1
 -             }
 - 
 -             /* process all codes and make table entries */
 -             for (;;) {
 -               /* create table entry */
 -               here_bits = len - drop
 -               if (work[sym] < end) {
 -                 here_op = 0
 -                 here_val = work[sym]
 -               } else if (work[sym] > end) {
 -                 here_op = extra[extra_index + work[sym]]
 -                 here_val = base[base_index + work[sym]]
 -               } else {
 -                 here_op = 32 + 64 /* end of block */
 -                 here_val = 0
 -               }
 - 
 -               /* replicate for those indices with low len bits equal to huff */
 -               incr = 1 << (len - drop)
 -               fill = 1 << curr
 -               min = fill /* save offset to next table */
 -               do {
 -                 fill -= incr
 -                 table[next + (huff >> drop) + fill] =
 -                   (here_bits << 24) | (here_op << 16) | here_val | 0
 -               } while (fill !== 0)
 - 
 -               /* backwards increment the len-bit code huff */
 -               incr = 1 << (len - 1)
 -               while (huff & incr) {
 -                 incr >>= 1
 -               }
 -               if (incr !== 0) {
 -                 huff &= incr - 1
 -                 huff += incr
 -               } else {
 -                 huff = 0
 -               }
 - 
 -               /* go to next symbol, update count, len */
 -               sym++
 -               if (--count[len] === 0) {
 -                 if (len === max) {
 -                   break
 -                 }
 -                 len = lens[lens_index + work[sym]]
 -               }
 - 
 -               /* create new sub-table if needed */
 -               if (len > root && (huff & mask) !== low) {
 -                 /* if first time, transition to sub-tables */
 -                 if (drop === 0) {
 -                   drop = root
 -                 }
 - 
 -                 /* increment past last table */
 -                 next += min /* here min is 1 << curr */
 - 
 -                 /* determine length of next table */
 -                 curr = len - drop
 -                 left = 1 << curr
 -                 while (curr + drop < max) {
 -                   left -= count[curr + drop]
 -                   if (left <= 0) {
 -                     break
 -                   }
 -                   curr++
 -                   left <<= 1
 -                 }
 - 
 -                 /* check for enough space */
 -                 used += 1 << curr
 -                 if (
 -                   (type === LENS && used > ENOUGH_LENS) ||
 -                   (type === DISTS && used > ENOUGH_DISTS)
 -                 ) {
 -                   return 1
 -                 }
 - 
 -                 /* point entry in root table to sub-table */
 -                 low = huff & mask
 -                 /*table.op[low] = curr;
 -                  table.bits[low] = root;
 -                  table.val[low] = next - opts.table_index;*/
 -                 table[low] =
 -                   (root << 24) | (curr << 16) | (next - table_index) | 0
 -               }
 -             }
 - 
 -             /* fill in remaining table entry if code is incomplete (guaranteed to have
 -          at most one remaining entry, since if the code is incomplete, the
 -          maximum code length that was allowed to get this far is one bit) */
 -             if (huff !== 0) {
 -               //table.op[next + huff] = 64;            /* invalid code marker */
 -               //table.bits[next + huff] = len - drop;
 -               //table.val[next + huff] = 0;
 -               table[next + huff] = ((len - drop) << 24) | (64 << 16) | 0
 -             }
 - 
 -             /* set return parameters */
 -             //opts.table_index += used;
 -             opts.bits = root
 -             return 0
 -           }
 -         },
 -         { '../utils/common': 1 }
 -       ],
 -       10: [
 -         function(require, module, exports) {
 -           'use strict'
 - 
 -           module.exports = {
 -             2: 'need dictionary' /* Z_NEED_DICT       2  */,
 -             1: 'stream end' /* Z_STREAM_END      1  */,
 -             0: '' /* Z_OK              0  */,
 -             '-1': 'file error' /* Z_ERRNO         (-1) */,
 -             '-2': 'stream error' /* Z_STREAM_ERROR  (-2) */,
 -             '-3': 'data error' /* Z_DATA_ERROR    (-3) */,
 -             '-4': 'insufficient memory' /* Z_MEM_ERROR     (-4) */,
 -             '-5': 'buffer error' /* Z_BUF_ERROR     (-5) */,
 -             '-6': 'incompatible version' /* Z_VERSION_ERROR (-6) */
 -           }
 -         },
 -         {}
 -       ],
 -       11: [
 -         function(require, module, exports) {
 -           'use strict'
 - 
 -           function ZStream() {
 -             /* next input byte */
 -             this.input = null // JS specific, because we have no pointers
 -             this.next_in = 0
 -             /* number of bytes available at input */
 -             this.avail_in = 0
 -             /* total number of input bytes read so far */
 -             this.total_in = 0
 -             /* next output byte should be put there */
 -             this.output = null // JS specific, because we have no pointers
 -             this.next_out = 0
 -             /* remaining free space at output */
 -             this.avail_out = 0
 -             /* total number of bytes output so far */
 -             this.total_out = 0
 -             /* last error message, NULL if no error */
 -             this.msg = '' /*Z_NULL*/
 -             /* not visible by applications */
 -             this.state = null
 -             /* best guess about the data type: binary or text */
 -             this.data_type = 2 /*Z_UNKNOWN*/
 -             /* adler32 value of the uncompressed data */
 -             this.adler = 0
 -           }
 - 
 -           module.exports = ZStream
 -         },
 -         {}
 -       ],
 -       '/lib/inflate.js': [
 -         function(require, module, exports) {
 -           'use strict'
 - 
 -           var zlib_inflate = require('./zlib/inflate')
 -           var utils = require('./utils/common')
 -           var strings = require('./utils/strings')
 -           var c = require('./zlib/constants')
 -           var msg = require('./zlib/messages')
 -           var ZStream = require('./zlib/zstream')
 -           var GZheader = require('./zlib/gzheader')
 - 
 -           var toString = Object.prototype.toString
 - 
 -           /**
 -            * class Inflate
 -            *
 -            * Generic JS-style wrapper for zlib calls. If you don't need
 -            * streaming behaviour - use more simple functions: [[inflate]]
 -            * and [[inflateRaw]].
 -            **/
 - 
 -           /* internal
 -            * inflate.chunks -> Array
 -            *
 -            * Chunks of output data, if [[Inflate#onData]] not overriden.
 -            **/
 - 
 -           /**
 -            * Inflate.result -> Uint8Array|Array|String
 -            *
 -            * Uncompressed result, generated by default [[Inflate#onData]]
 -            * and [[Inflate#onEnd]] handlers. Filled after you push last chunk
 -            * (call [[Inflate#push]] with `Z_FINISH` / `true` param) or if you
 -            * push a chunk with explicit flush (call [[Inflate#push]] with
 -            * `Z_SYNC_FLUSH` param).
 -            **/
 - 
 -           /**
 -            * Inflate.err -> Number
 -            *
 -            * Error code after inflate finished. 0 (Z_OK) on success.
 -            * Should be checked if broken data possible.
 -            **/
 - 
 -           /**
 -            * Inflate.msg -> String
 -            *
 -            * Error message, if [[Inflate.err]] != 0
 -            **/
 - 
 -           /**
 -            * new Inflate(options)
 -            * - options (Object): zlib inflate options.
 -            *
 -            * Creates new inflator instance with specified params. Throws exception
 -            * on bad params. Supported options:
 -            *
 -            * - `windowBits`
 -            * - `dictionary`
 -            *
 -            * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced)
 -            * for more information on these.
 -            *
 -            * Additional options, for internal needs:
 -            *
 -            * - `chunkSize` - size of generated data chunks (16K by default)
 -            * - `raw` (Boolean) - do raw inflate
 -            * - `to` (String) - if equal to 'string', then result will be converted
 -            *   from utf8 to utf16 (javascript) string. When string output requested,
 -            *   chunk length can differ from `chunkSize`, depending on content.
 -            *
 -            * By default, when no options set, autodetect deflate/gzip data format via
 -            * wrapper header.
 -            *
 -            * ##### Example:
 -            *
 -            * ```javascript
 -            * var pako = require('pako')
 -            *   , chunk1 = Uint8Array([1,2,3,4,5,6,7,8,9])
 -            *   , chunk2 = Uint8Array([10,11,12,13,14,15,16,17,18,19]);
 -            *
 -            * var inflate = new pako.Inflate({ level: 3});
 -            *
 -            * inflate.push(chunk1, false);
 -            * inflate.push(chunk2, true);  // true -> last chunk
 -            *
 -            * if (inflate.err) { throw new Error(inflate.err); }
 -            *
 -            * console.log(inflate.result);
 -            * ```
 -            **/
 -           function Inflate(options) {
 -             if (!(this instanceof Inflate)) return new Inflate(options)
 - 
 -             this.options = utils.assign(
 -               {
 -                 chunkSize: 16384,
 -                 windowBits: 0,
 -                 to: ''
 -               },
 -               options || {}
 -             )
 - 
 -             var opt = this.options
 - 
 -             // Force window size for `raw` data, if not set directly,
 -             // because we have no header for autodetect.
 -             if (opt.raw && opt.windowBits >= 0 && opt.windowBits < 16) {
 -               opt.windowBits = -opt.windowBits
 -               if (opt.windowBits === 0) {
 -                 opt.windowBits = -15
 -               }
 -             }
 - 
 -             // If `windowBits` not defined (and mode not raw) - set autodetect flag for gzip/deflate
 -             if (
 -               opt.windowBits >= 0 &&
 -               opt.windowBits < 16 &&
 -               !(options && options.windowBits)
 -             ) {
 -               opt.windowBits += 32
 -             }
 - 
 -             // Gzip header has no info about windows size, we can do autodetect only
 -             // for deflate. So, if window size not set, force it to max when gzip possible
 -             if (opt.windowBits > 15 && opt.windowBits < 48) {
 -               // bit 3 (16) -> gzipped data
 -               // bit 4 (32) -> autodetect gzip/deflate
 -               if ((opt.windowBits & 15) === 0) {
 -                 opt.windowBits |= 15
 -               }
 -             }
 - 
 -             this.err = 0 // error code, if happens (0 = Z_OK)
 -             this.msg = '' // error message
 -             this.ended = false // used to avoid multiple onEnd() calls
 -             this.chunks = [] // chunks of compressed data
 - 
 -             this.strm = new ZStream()
 -             this.strm.avail_out = 0
 - 
 -             var status = zlib_inflate.inflateInit2(this.strm, opt.windowBits)
 - 
 -             if (status !== c.Z_OK) {
 -               throw new Error(msg[status])
 -             }
 - 
 -             this.header = new GZheader()
 - 
 -             zlib_inflate.inflateGetHeader(this.strm, this.header)
 -           }
 - 
 -           /**
 -            * Inflate#push(data[, mode]) -> Boolean
 -            * - data (Uint8Array|Array|ArrayBuffer|String): input data
 -            * - mode (Number|Boolean): 0..6 for corresponding Z_NO_FLUSH..Z_TREE modes.
 -            *   See constants. Skipped or `false` means Z_NO_FLUSH, `true` meansh Z_FINISH.
 -            *
 -            * Sends input data to inflate pipe, generating [[Inflate#onData]] calls with
 -            * new output chunks. Returns `true` on success. The last data block must have
 -            * mode Z_FINISH (or `true`). That will flush internal pending buffers and call
 -            * [[Inflate#onEnd]]. For interim explicit flushes (without ending the stream) you
 -            * can use mode Z_SYNC_FLUSH, keeping the decompression context.
 -            *
 -            * On fail call [[Inflate#onEnd]] with error code and return false.
 -            *
 -            * We strongly recommend to use `Uint8Array` on input for best speed (output
 -            * format is detected automatically). Also, don't skip last param and always
 -            * use the same type in your code (boolean or number). That will improve JS speed.
 -            *
 -            * For regular `Array`-s make sure all elements are [0..255].
 -            *
 -            * ##### Example
 -            *
 -            * ```javascript
 -            * push(chunk, false); // push one of data chunks
 -            * ...
 -            * push(chunk, true);  // push last chunk
 -            * ```
 -            **/
 -           Inflate.prototype.push = function(data, mode) {
 -             var strm = this.strm
 -             var chunkSize = this.options.chunkSize
 -             var dictionary = this.options.dictionary
 -             var status, _mode
 -             var next_out_utf8, tail, utf8str
 -             var dict
 - 
 -             // Flag to properly process Z_BUF_ERROR on testing inflate call
 -             // when we check that all output data was flushed.
 -             var allowBufError = false
 - 
 -             if (this.ended) {
 -               return false
 -             }
 -             _mode =
 -               mode === ~~mode ? mode : mode === true ? c.Z_FINISH : c.Z_NO_FLUSH
 - 
 -             // Convert data if needed
 -             if (typeof data === 'string') {
 -               // Only binary strings can be decompressed on practice
 -               strm.input = strings.binstring2buf(data)
 -             } else if (toString.call(data) === '[object ArrayBuffer]') {
 -               strm.input = new Uint8Array(data)
 -             } else {
 -               strm.input = data
 -             }
 - 
 -             strm.next_in = 0
 -             strm.avail_in = strm.input.length
 - 
 -             do {
 -               if (strm.avail_out === 0) {
 -                 strm.output = new utils.Buf8(chunkSize)
 -                 strm.next_out = 0
 -                 strm.avail_out = chunkSize
 -               }
 - 
 -               status = zlib_inflate.inflate(
 -                 strm,
 -                 c.Z_NO_FLUSH
 -               ) /* no bad return value */
 - 
 -               if (status === c.Z_NEED_DICT && dictionary) {
 -                 // Convert data if needed
 -                 if (typeof dictionary === 'string') {
 -                   dict = strings.string2buf(dictionary)
 -                 } else if (
 -                   toString.call(dictionary) === '[object ArrayBuffer]'
 -                 ) {
 -                   dict = new Uint8Array(dictionary)
 -                 } else {
 -                   dict = dictionary
 -                 }
 - 
 -                 status = zlib_inflate.inflateSetDictionary(this.strm, dict)
 -               }
 - 
 -               if (status === c.Z_BUF_ERROR && allowBufError === true) {
 -                 status = c.Z_OK
 -                 allowBufError = false
 -               }
 - 
 -               if (status !== c.Z_STREAM_END && status !== c.Z_OK) {
 -                 this.onEnd(status)
 -                 this.ended = true
 -                 return false
 -               }
 - 
 -               if (strm.next_out) {
 -                 if (
 -                   strm.avail_out === 0 ||
 -                   status === c.Z_STREAM_END ||
 -                   (strm.avail_in === 0 &&
 -                     (_mode === c.Z_FINISH || _mode === c.Z_SYNC_FLUSH))
 -                 ) {
 -                   if (this.options.to === 'string') {
 -                     next_out_utf8 = strings.utf8border(
 -                       strm.output,
 -                       strm.next_out
 -                     )
 - 
 -                     tail = strm.next_out - next_out_utf8
 -                     utf8str = strings.buf2string(strm.output, next_out_utf8)
 - 
 -                     // move tail
 -                     strm.next_out = tail
 -                     strm.avail_out = chunkSize - tail
 -                     if (tail) {
 -                       utils.arraySet(
 -                         strm.output,
 -                         strm.output,
 -                         next_out_utf8,
 -                         tail,
 -                         0
 -                       )
 -                     }
 - 
 -                     this.onData(utf8str)
 -                   } else {
 -                     this.onData(utils.shrinkBuf(strm.output, strm.next_out))
 -                   }
 -                 }
 -               }
 - 
 -               // When no more input data, we should check that internal inflate buffers
 -               // are flushed. The only way to do it when avail_out = 0 - run one more
 -               // inflate pass. But if output data not exists, inflate return Z_BUF_ERROR.
 -               // Here we set flag to process this error properly.
 -               //
 -               // NOTE. Deflate does not return error in this case and does not needs such
 -               // logic.
 -               if (strm.avail_in === 0 && strm.avail_out === 0) {
 -                 allowBufError = true
 -               }
 -             } while (
 -               (strm.avail_in > 0 || strm.avail_out === 0) &&
 -               status !== c.Z_STREAM_END
 -             )
 - 
 -             if (status === c.Z_STREAM_END) {
 -               _mode = c.Z_FINISH
 -             }
 - 
 -             // Finalize on the last chunk.
 -             if (_mode === c.Z_FINISH) {
 -               status = zlib_inflate.inflateEnd(this.strm)
 -               this.onEnd(status)
 -               this.ended = true
 -               return status === c.Z_OK
 -             }
 - 
 -             // callback interim results if Z_SYNC_FLUSH.
 -             if (_mode === c.Z_SYNC_FLUSH) {
 -               this.onEnd(c.Z_OK)
 -               strm.avail_out = 0
 -               return true
 -             }
 - 
 -             return true
 -           }
 - 
 -           /**
 -            * Inflate#onData(chunk) -> Void
 -            * - chunk (Uint8Array|Array|String): ouput data. Type of array depends
 -            *   on js engine support. When string output requested, each chunk
 -            *   will be string.
 -            *
 -            * By default, stores data blocks in `chunks[]` property and glue
 -            * those in `onEnd`. Override this handler, if you need another behaviour.
 -            **/
 -           Inflate.prototype.onData = function(chunk) {
 -             this.chunks.push(chunk)
 -           }
 - 
 -           /**
 -            * Inflate#onEnd(status) -> Void
 -            * - status (Number): inflate status. 0 (Z_OK) on success,
 -            *   other if not.
 -            *
 -            * Called either after you tell inflate that the input stream is
 -            * complete (Z_FINISH) or should be flushed (Z_SYNC_FLUSH)
 -            * or if an error happened. By default - join collected chunks,
 -            * free memory and fill `results` / `err` properties.
 -            **/
 -           Inflate.prototype.onEnd = function(status) {
 -             // On success - join
 -             if (status === c.Z_OK) {
 -               if (this.options.to === 'string') {
 -                 // Glue & convert here, until we teach pako to send
 -                 // utf8 alligned strings to onData
 -                 this.result = this.chunks.join('')
 -               } else {
 -                 this.result = utils.flattenChunks(this.chunks)
 -               }
 -             }
 -             this.chunks = []
 -             this.err = status
 -             this.msg = this.strm.msg
 -           }
 - 
 -           /**
 -            * inflate(data[, options]) -> Uint8Array|Array|String
 -            * - data (Uint8Array|Array|String): input data to decompress.
 -            * - options (Object): zlib inflate options.
 -            *
 -            * Decompress `data` with inflate/ungzip and `options`. Autodetect
 -            * format via wrapper header by default. That's why we don't provide
 -            * separate `ungzip` method.
 -            *
 -            * Supported options are:
 -            *
 -            * - windowBits
 -            *
 -            * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced)
 -            * for more information.
 -            *
 -            * Sugar (options):
 -            *
 -            * - `raw` (Boolean) - say that we work with raw stream, if you don't wish to specify
 -            *   negative windowBits implicitly.
 -            * - `to` (String) - if equal to 'string', then result will be converted
 -            *   from utf8 to utf16 (javascript) string. When string output requested,
 -            *   chunk length can differ from `chunkSize`, depending on content.
 -            *
 -            *
 -            * ##### Example:
 -            *
 -            * ```javascript
 -            * var pako = require('pako')
 -            *   , input = pako.deflate([1,2,3,4,5,6,7,8,9])
 -            *   , output;
 -            *
 -            * try {
 -            *   output = pako.inflate(input);
 -            * } catch (err)
 -            *   console.log(err);
 -            * }
 -            * ```
 -            **/
 -           function inflate(input, options) {
 -             var inflator = new Inflate(options)
 - 
 -             inflator.push(input, true)
 - 
 -             // That will never happens, if you don't cheat with options :)
 -             if (inflator.err) {
 -               throw inflator.msg || msg[inflator.err]
 -             }
 - 
 -             return inflator.result
 -           }
 - 
 -           /**
 -            * inflateRaw(data[, options]) -> Uint8Array|Array|String
 -            * - data (Uint8Array|Array|String): input data to decompress.
 -            * - options (Object): zlib inflate options.
 -            *
 -            * The same as [[inflate]], but creates raw data, without wrapper
 -            * (header and adler32 crc).
 -            **/
 -           function inflateRaw(input, options) {
 -             options = options || {}
 -             options.raw = true
 -             return inflate(input, options)
 -           }
 - 
 -           /**
 -            * ungzip(data[, options]) -> Uint8Array|Array|String
 -            * - data (Uint8Array|Array|String): input data to decompress.
 -            * - options (Object): zlib inflate options.
 -            *
 -            * Just shortcut to [[inflate]], because it autodetects format
 -            * by header.content. Done for convenience.
 -            **/
 - 
 -           exports.Inflate = Inflate
 -           exports.inflate = inflate
 -           exports.inflateRaw = inflateRaw
 -           exports.ungzip = inflate
 -         },
 -         {
 -           './utils/common': 1,
 -           './utils/strings': 2,
 -           './zlib/constants': 4,
 -           './zlib/gzheader': 6,
 -           './zlib/inflate': 8,
 -           './zlib/messages': 10,
 -           './zlib/zstream': 11
 -         }
 -       ]
 -     },
 -     {},
 -     []
 -   )('/lib/inflate.js')
 - })
 - 
 - export default tmp
 
 
  |