minizlib-2.1.2/000077500000000000000000000000001371561155300133405ustar00rootroot00000000000000minizlib-2.1.2/.gitignore000066400000000000000000000000611371561155300153250ustar00rootroot00000000000000node_modules/ coverage/ .nyc_output/ nyc_output/ minizlib-2.1.2/.travis.yml000066400000000000000000000000761371561155300154540ustar00rootroot00000000000000language: node_js sudo: false node_js: - node - 12 - 10 minizlib-2.1.2/LICENSE000066400000000000000000000024211371561155300143440ustar00rootroot00000000000000Minizlib was created by Isaac Z. Schlueter. It is a derivative work of the Node.js project. """ Copyright Isaac Z. Schlueter and Contributors Copyright Node.js contributors. All rights reserved. Copyright Joyent, Inc. and other Node contributors. All rights reserved. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. """ minizlib-2.1.2/README.md000066400000000000000000000036011371561155300146170ustar00rootroot00000000000000# minizlib A fast zlib stream built on [minipass](http://npm.im/minipass) and Node.js's zlib binding. This module was created to serve the needs of [node-tar](http://npm.im/tar) and [minipass-fetch](http://npm.im/minipass-fetch). Brotli is supported in versions of node with a Brotli binding. ## How does this differ from the streams in `require('zlib')`? First, there are no convenience methods to compress or decompress a buffer. If you want those, use the built-in `zlib` module. This is only streams. That being said, Minipass streams to make it fairly easy to use as one-liners: `new zlib.Deflate().end(data).read()` will return the deflate compressed result. This module compresses and decompresses the data as fast as you feed it in. It is synchronous, and runs on the main process thread. Zlib and Brotli operations can be high CPU, but they're very fast, and doing it this way means much less bookkeeping and artificial deferral. Node's built in zlib streams are built on top of `stream.Transform`. They do the maximally safe thing with respect to consistent asynchrony, buffering, and backpressure. See [Minipass](http://npm.im/minipass) for more on the differences between Node.js core streams and Minipass streams, and the convenience methods provided by that class. ## Classes - Deflate - Inflate - Gzip - Gunzip - DeflateRaw - InflateRaw - Unzip - BrotliCompress (Node v10 and higher) - BrotliDecompress (Node v10 and higher) ## USAGE ```js const zlib = require('minizlib') const input = sourceOfCompressedData() const decode = new zlib.BrotliDecompress() const output = whereToWriteTheDecodedData() input.pipe(decode).pipe(output) ``` ## REPRODUCIBLE BUILDS To create reproducible gzip compressed files across different operating systems, set `portable: true` in the options. This causes minizlib to set the `OS` indicator in byte 9 of the extended gzip header to `0xFF` for 'unknown'. minizlib-2.1.2/bench.js000066400000000000000000000034111371561155300147540ustar00rootroot00000000000000'use strict' const core = require('zlib') const miniz = require('minizlib') const fs = require('fs') const file = 'npm-5-8x.tgz' const data = fs.readFileSync(file) const N = +process.argv[2] || 10 let C = +process.argv[3] || 3 let n = 0 const doMini = () => { const miniunz = new miniz.Unzip() miniunz.on('end', () => { console.timeEnd('mini') if (++n < N) doMini() else { n = 0 doCore() } }) console.time('mini') miniunz.end(data) miniunz.resume() } const doCore = () => { const coreunz = new core.Unzip() coreunz.on('end', () => { console.timeEnd('core') if (++n < N) doCore() else if (--C > 0) { n = 0 doMini() } }) console.time('core') coreunz.end(data) coreunz.resume() } doMini() /* $ node bench.js mini: 1062.121ms mini: 992.747ms mini: 981.529ms mini: 939.813ms mini: 1009.037ms mini: 969.063ms mini: 961.559ms mini: 952.462ms mini: 931.309ms mini: 942.898ms core: 1133.598ms core: 1112.883ms core: 1086.734ms core: 1073.089ms core: 1048.197ms core: 1072.097ms core: 1073.972ms core: 1053.326ms core: 1053.606ms core: 1052.969ms mini: 906.290ms mini: 1001.500ms mini: 1035.073ms mini: 963.583ms mini: 922.108ms mini: 935.533ms mini: 877.866ms mini: 914.190ms mini: 908.777ms mini: 889.769ms core: 1103.496ms core: 1049.253ms core: 1136.523ms core: 1066.346ms core: 1085.796ms core: 1062.242ms core: 1071.801ms core: 1078.519ms core: 1077.774ms core: 1104.796ms mini: 934.895ms mini: 973.971ms mini: 938.026ms mini: 971.475ms mini: 946.436ms mini: 966.129ms mini: 943.973ms mini: 961.074ms mini: 966.523ms mini: 993.003ms core: 1107.929ms core: 1080.664ms core: 1075.637ms core: 1084.507ms core: 1071.859ms core: 1049.318ms core: 1054.679ms core: 1055.525ms core: 1060.224ms core: 1056.568ms */ minizlib-2.1.2/constants.js000066400000000000000000000072341371561155300157200ustar00rootroot00000000000000// Update with any zlib constants that are added or changed in the future. // Node v6 didn't export this, so we just hard code the version and rely // on all the other hard-coded values from zlib v4736. When node v6 // support drops, we can just export the realZlibConstants object. const realZlibConstants = require('zlib').constants || /* istanbul ignore next */ { ZLIB_VERNUM: 4736 } module.exports = Object.freeze(Object.assign(Object.create(null), { Z_NO_FLUSH: 0, Z_PARTIAL_FLUSH: 1, Z_SYNC_FLUSH: 2, Z_FULL_FLUSH: 3, Z_FINISH: 4, Z_BLOCK: 5, 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, 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, DEFLATE: 1, INFLATE: 2, GZIP: 3, GUNZIP: 4, DEFLATERAW: 5, INFLATERAW: 6, UNZIP: 7, BROTLI_DECODE: 8, BROTLI_ENCODE: 9, Z_MIN_WINDOWBITS: 8, Z_MAX_WINDOWBITS: 15, Z_DEFAULT_WINDOWBITS: 15, Z_MIN_CHUNK: 64, Z_MAX_CHUNK: Infinity, Z_DEFAULT_CHUNK: 16384, Z_MIN_MEMLEVEL: 1, Z_MAX_MEMLEVEL: 9, Z_DEFAULT_MEMLEVEL: 8, Z_MIN_LEVEL: -1, Z_MAX_LEVEL: 9, Z_DEFAULT_LEVEL: -1, BROTLI_OPERATION_PROCESS: 0, BROTLI_OPERATION_FLUSH: 1, BROTLI_OPERATION_FINISH: 2, BROTLI_OPERATION_EMIT_METADATA: 3, BROTLI_MODE_GENERIC: 0, BROTLI_MODE_TEXT: 1, BROTLI_MODE_FONT: 2, BROTLI_DEFAULT_MODE: 0, BROTLI_MIN_QUALITY: 0, BROTLI_MAX_QUALITY: 11, BROTLI_DEFAULT_QUALITY: 11, BROTLI_MIN_WINDOW_BITS: 10, BROTLI_MAX_WINDOW_BITS: 24, BROTLI_LARGE_MAX_WINDOW_BITS: 30, BROTLI_DEFAULT_WINDOW: 22, BROTLI_MIN_INPUT_BLOCK_BITS: 16, BROTLI_MAX_INPUT_BLOCK_BITS: 24, BROTLI_PARAM_MODE: 0, BROTLI_PARAM_QUALITY: 1, BROTLI_PARAM_LGWIN: 2, BROTLI_PARAM_LGBLOCK: 3, BROTLI_PARAM_DISABLE_LITERAL_CONTEXT_MODELING: 4, BROTLI_PARAM_SIZE_HINT: 5, BROTLI_PARAM_LARGE_WINDOW: 6, BROTLI_PARAM_NPOSTFIX: 7, BROTLI_PARAM_NDIRECT: 8, BROTLI_DECODER_RESULT_ERROR: 0, BROTLI_DECODER_RESULT_SUCCESS: 1, BROTLI_DECODER_RESULT_NEEDS_MORE_INPUT: 2, BROTLI_DECODER_RESULT_NEEDS_MORE_OUTPUT: 3, BROTLI_DECODER_PARAM_DISABLE_RING_BUFFER_REALLOCATION: 0, BROTLI_DECODER_PARAM_LARGE_WINDOW: 1, BROTLI_DECODER_NO_ERROR: 0, BROTLI_DECODER_SUCCESS: 1, BROTLI_DECODER_NEEDS_MORE_INPUT: 2, BROTLI_DECODER_NEEDS_MORE_OUTPUT: 3, BROTLI_DECODER_ERROR_FORMAT_EXUBERANT_NIBBLE: -1, BROTLI_DECODER_ERROR_FORMAT_RESERVED: -2, BROTLI_DECODER_ERROR_FORMAT_EXUBERANT_META_NIBBLE: -3, BROTLI_DECODER_ERROR_FORMAT_SIMPLE_HUFFMAN_ALPHABET: -4, BROTLI_DECODER_ERROR_FORMAT_SIMPLE_HUFFMAN_SAME: -5, BROTLI_DECODER_ERROR_FORMAT_CL_SPACE: -6, BROTLI_DECODER_ERROR_FORMAT_HUFFMAN_SPACE: -7, BROTLI_DECODER_ERROR_FORMAT_CONTEXT_MAP_REPEAT: -8, BROTLI_DECODER_ERROR_FORMAT_BLOCK_LENGTH_1: -9, BROTLI_DECODER_ERROR_FORMAT_BLOCK_LENGTH_2: -10, BROTLI_DECODER_ERROR_FORMAT_TRANSFORM: -11, BROTLI_DECODER_ERROR_FORMAT_DICTIONARY: -12, BROTLI_DECODER_ERROR_FORMAT_WINDOW_BITS: -13, BROTLI_DECODER_ERROR_FORMAT_PADDING_1: -14, BROTLI_DECODER_ERROR_FORMAT_PADDING_2: -15, BROTLI_DECODER_ERROR_FORMAT_DISTANCE: -16, BROTLI_DECODER_ERROR_DICTIONARY_NOT_SET: -19, BROTLI_DECODER_ERROR_INVALID_ARGUMENTS: -20, BROTLI_DECODER_ERROR_ALLOC_CONTEXT_MODES: -21, BROTLI_DECODER_ERROR_ALLOC_TREE_GROUPS: -22, BROTLI_DECODER_ERROR_ALLOC_CONTEXT_MAP: -25, BROTLI_DECODER_ERROR_ALLOC_RING_BUFFER_1: -26, BROTLI_DECODER_ERROR_ALLOC_RING_BUFFER_2: -27, BROTLI_DECODER_ERROR_ALLOC_BLOCK_TYPE_TREES: -30, BROTLI_DECODER_ERROR_UNREACHABLE: -31, }, realZlibConstants)) minizlib-2.1.2/index.js000066400000000000000000000223441371561155300150120ustar00rootroot00000000000000'use strict' const assert = require('assert') const Buffer = require('buffer').Buffer const realZlib = require('zlib') const constants = exports.constants = require('./constants.js') const Minipass = require('minipass') const OriginalBufferConcat = Buffer.concat const _superWrite = Symbol('_superWrite') class ZlibError extends Error { constructor (err) { super('zlib: ' + err.message) this.code = err.code this.errno = err.errno /* istanbul ignore if */ if (!this.code) this.code = 'ZLIB_ERROR' this.message = 'zlib: ' + err.message Error.captureStackTrace(this, this.constructor) } get name () { return 'ZlibError' } } // the Zlib class they all inherit from // This thing manages the queue of requests, and returns // true or false if there is anything in the queue when // you call the .write() method. const _opts = Symbol('opts') const _flushFlag = Symbol('flushFlag') const _finishFlushFlag = Symbol('finishFlushFlag') const _fullFlushFlag = Symbol('fullFlushFlag') const _handle = Symbol('handle') const _onError = Symbol('onError') const _sawError = Symbol('sawError') const _level = Symbol('level') const _strategy = Symbol('strategy') const _ended = Symbol('ended') const _defaultFullFlush = Symbol('_defaultFullFlush') class ZlibBase extends Minipass { constructor (opts, mode) { if (!opts || typeof opts !== 'object') throw new TypeError('invalid options for ZlibBase constructor') super(opts) this[_sawError] = false this[_ended] = false this[_opts] = opts this[_flushFlag] = opts.flush this[_finishFlushFlag] = opts.finishFlush // this will throw if any options are invalid for the class selected try { this[_handle] = new realZlib[mode](opts) } catch (er) { // make sure that all errors get decorated properly throw new ZlibError(er) } this[_onError] = (err) => { // no sense raising multiple errors, since we abort on the first one. if (this[_sawError]) return this[_sawError] = true // there is no way to cleanly recover. // continuing only obscures problems. this.close() this.emit('error', err) } this[_handle].on('error', er => this[_onError](new ZlibError(er))) this.once('end', () => this.close) } close () { if (this[_handle]) { this[_handle].close() this[_handle] = null this.emit('close') } } reset () { if (!this[_sawError]) { assert(this[_handle], 'zlib binding closed') return this[_handle].reset() } } flush (flushFlag) { if (this.ended) return if (typeof flushFlag !== 'number') flushFlag = this[_fullFlushFlag] this.write(Object.assign(Buffer.alloc(0), { [_flushFlag]: flushFlag })) } end (chunk, encoding, cb) { if (chunk) this.write(chunk, encoding) this.flush(this[_finishFlushFlag]) this[_ended] = true return super.end(null, null, cb) } get ended () { return this[_ended] } write (chunk, encoding, cb) { // process the chunk using the sync process // then super.write() all the outputted chunks if (typeof encoding === 'function') cb = encoding, encoding = 'utf8' if (typeof chunk === 'string') chunk = Buffer.from(chunk, encoding) if (this[_sawError]) return assert(this[_handle], 'zlib binding closed') // _processChunk tries to .close() the native handle after it's done, so we // intercept that by temporarily making it a no-op. const nativeHandle = this[_handle]._handle const originalNativeClose = nativeHandle.close nativeHandle.close = () => {} const originalClose = this[_handle].close this[_handle].close = () => {} // It also calls `Buffer.concat()` at the end, which may be convenient // for some, but which we are not interested in as it slows us down. Buffer.concat = (args) => args let result try { const flushFlag = typeof chunk[_flushFlag] === 'number' ? chunk[_flushFlag] : this[_flushFlag] result = this[_handle]._processChunk(chunk, flushFlag) // if we don't throw, reset it back how it was Buffer.concat = OriginalBufferConcat } catch (err) { // or if we do, put Buffer.concat() back before we emit error // Error events call into user code, which may call Buffer.concat() Buffer.concat = OriginalBufferConcat this[_onError](new ZlibError(err)) } finally { if (this[_handle]) { // Core zlib resets `_handle` to null after attempting to close the // native handle. Our no-op handler prevented actual closure, but we // need to restore the `._handle` property. this[_handle]._handle = nativeHandle nativeHandle.close = originalNativeClose this[_handle].close = originalClose // `_processChunk()` adds an 'error' listener. If we don't remove it // after each call, these handlers start piling up. this[_handle].removeAllListeners('error') // make sure OUR error listener is still attached tho } } if (this[_handle]) this[_handle].on('error', er => this[_onError](new ZlibError(er))) let writeReturn if (result) { if (Array.isArray(result) && result.length > 0) { // The first buffer is always `handle._outBuffer`, which would be // re-used for later invocations; so, we always have to copy that one. writeReturn = this[_superWrite](Buffer.from(result[0])) for (let i = 1; i < result.length; i++) { writeReturn = this[_superWrite](result[i]) } } else { writeReturn = this[_superWrite](Buffer.from(result)) } } if (cb) cb() return writeReturn } [_superWrite] (data) { return super.write(data) } } class Zlib extends ZlibBase { constructor (opts, mode) { opts = opts || {} opts.flush = opts.flush || constants.Z_NO_FLUSH opts.finishFlush = opts.finishFlush || constants.Z_FINISH super(opts, mode) this[_fullFlushFlag] = constants.Z_FULL_FLUSH this[_level] = opts.level this[_strategy] = opts.strategy } params (level, strategy) { if (this[_sawError]) return if (!this[_handle]) throw new Error('cannot switch params when binding is closed') // no way to test this without also not supporting params at all /* istanbul ignore if */ if (!this[_handle].params) throw new Error('not supported in this implementation') if (this[_level] !== level || this[_strategy] !== strategy) { this.flush(constants.Z_SYNC_FLUSH) assert(this[_handle], 'zlib binding closed') // .params() calls .flush(), but the latter is always async in the // core zlib. We override .flush() temporarily to intercept that and // flush synchronously. const origFlush = this[_handle].flush this[_handle].flush = (flushFlag, cb) => { this.flush(flushFlag) cb() } try { this[_handle].params(level, strategy) } finally { this[_handle].flush = origFlush } /* istanbul ignore else */ if (this[_handle]) { this[_level] = level this[_strategy] = strategy } } } } // minimal 2-byte header class Deflate extends Zlib { constructor (opts) { super(opts, 'Deflate') } } class Inflate extends Zlib { constructor (opts) { super(opts, 'Inflate') } } // gzip - bigger header, same deflate compression const _portable = Symbol('_portable') class Gzip extends Zlib { constructor (opts) { super(opts, 'Gzip') this[_portable] = opts && !!opts.portable } [_superWrite] (data) { if (!this[_portable]) return super[_superWrite](data) // we'll always get the header emitted in one first chunk // overwrite the OS indicator byte with 0xFF this[_portable] = false data[9] = 255 return super[_superWrite](data) } } class Gunzip extends Zlib { constructor (opts) { super(opts, 'Gunzip') } } // raw - no header class DeflateRaw extends Zlib { constructor (opts) { super(opts, 'DeflateRaw') } } class InflateRaw extends Zlib { constructor (opts) { super(opts, 'InflateRaw') } } // auto-detect header. class Unzip extends Zlib { constructor (opts) { super(opts, 'Unzip') } } class Brotli extends ZlibBase { constructor (opts, mode) { opts = opts || {} opts.flush = opts.flush || constants.BROTLI_OPERATION_PROCESS opts.finishFlush = opts.finishFlush || constants.BROTLI_OPERATION_FINISH super(opts, mode) this[_fullFlushFlag] = constants.BROTLI_OPERATION_FLUSH } } class BrotliCompress extends Brotli { constructor (opts) { super(opts, 'BrotliCompress') } } class BrotliDecompress extends Brotli { constructor (opts) { super(opts, 'BrotliDecompress') } } exports.Deflate = Deflate exports.Inflate = Inflate exports.Gzip = Gzip exports.Gunzip = Gunzip exports.DeflateRaw = DeflateRaw exports.InflateRaw = InflateRaw exports.Unzip = Unzip /* istanbul ignore else */ if (typeof realZlib.BrotliCompress === 'function') { exports.BrotliCompress = BrotliCompress exports.BrotliDecompress = BrotliDecompress } else { exports.BrotliCompress = exports.BrotliDecompress = class { constructor () { throw new Error('Brotli is not supported in this version of Node.js') } } } minizlib-2.1.2/package-lock.json000066400000000000000000003426231371561155300165660ustar00rootroot00000000000000{ "name": "minizlib", "version": "2.1.2", "lockfileVersion": 1, "requires": true, "dependencies": { "@babel/code-frame": { "version": "7.5.5", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.5.5.tgz", "integrity": "sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw==", "dev": true, "requires": { "@babel/highlight": "^7.0.0" } }, "@babel/generator": { "version": "7.6.2", "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.6.2.tgz", "integrity": "sha512-j8iHaIW4gGPnViaIHI7e9t/Hl8qLjERI6DcV9kEpAIDJsAOrcnXqRS7t+QbhL76pwbtqP+QCQLL0z1CyVmtjjQ==", "dev": true, "requires": { "@babel/types": "^7.6.0", "jsesc": "^2.5.1", "lodash": "^4.17.13", "source-map": "^0.5.0" }, "dependencies": { "source-map": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", "dev": true } } }, "@babel/helper-function-name": { "version": "7.1.0", "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.1.0.tgz", "integrity": "sha512-A95XEoCpb3TO+KZzJ4S/5uW5fNe26DjBGqf1o9ucyLyCmi1dXq/B3c8iaWTfBk3VvetUxl16e8tIrd5teOCfGw==", "dev": true, "requires": { "@babel/helper-get-function-arity": "^7.0.0", "@babel/template": "^7.1.0", "@babel/types": "^7.0.0" } }, "@babel/helper-get-function-arity": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0.tgz", "integrity": "sha512-r2DbJeg4svYvt3HOS74U4eWKsUAMRH01Z1ds1zx8KNTPtpTL5JAsdFv8BNyOpVqdFhHkkRDIg5B4AsxmkjAlmQ==", "dev": true, "requires": { "@babel/types": "^7.0.0" } }, "@babel/helper-split-export-declaration": { "version": "7.4.4", "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.4.4.tgz", "integrity": "sha512-Ro/XkzLf3JFITkW6b+hNxzZ1n5OQ80NvIUdmHspih1XAhtN3vPTuUFT4eQnela+2MaZ5ulH+iyP513KJrxbN7Q==", "dev": true, "requires": { "@babel/types": "^7.4.4" } }, "@babel/highlight": { "version": "7.5.0", "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.5.0.tgz", "integrity": "sha512-7dV4eu9gBxoM0dAnj/BCFDW9LFU0zvTrkq0ugM7pnHEgguOEeOz1so2ZghEdzviYzQEED0r4EAgpsBChKy1TRQ==", "dev": true, "requires": { "chalk": "^2.0.0", "esutils": "^2.0.2", "js-tokens": "^4.0.0" } }, "@babel/parser": { "version": "7.6.2", "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.6.2.tgz", "integrity": "sha512-mdFqWrSPCmikBoaBYMuBulzTIKuXVPtEISFbRRVNwMWpCms/hmE2kRq0bblUHaNRKrjRlmVbx1sDHmjmRgD2Xg==", "dev": true }, "@babel/runtime": { "version": "7.6.2", "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.6.2.tgz", "integrity": "sha512-EXxN64agfUqqIGeEjI5dL5z0Sw0ZwWo1mLTi4mQowCZ42O59b7DRpZAnTC6OqdF28wMBMFKNb/4uFGrVaigSpg==", "dev": true, "requires": { "regenerator-runtime": "^0.13.2" } }, "@babel/template": { "version": "7.6.0", "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.6.0.tgz", "integrity": "sha512-5AEH2EXD8euCk446b7edmgFdub/qfH1SN6Nii3+fyXP807QRx9Q73A2N5hNwRRslC2H9sNzaFhsPubkS4L8oNQ==", "dev": true, "requires": { "@babel/code-frame": "^7.0.0", "@babel/parser": "^7.6.0", "@babel/types": "^7.6.0" } }, "@babel/traverse": { "version": "7.6.2", "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.6.2.tgz", "integrity": "sha512-8fRE76xNwNttVEF2TwxJDGBLWthUkHWSldmfuBzVRmEDWOtu4XdINTgN7TDWzuLg4bbeIMLvfMFD9we5YcWkRQ==", "dev": true, "requires": { "@babel/code-frame": "^7.5.5", "@babel/generator": "^7.6.2", "@babel/helper-function-name": "^7.1.0", "@babel/helper-split-export-declaration": "^7.4.4", "@babel/parser": "^7.6.2", "@babel/types": "^7.6.0", "debug": "^4.1.0", "globals": "^11.1.0", "lodash": "^4.17.13" } }, "@babel/types": { "version": "7.6.1", "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.6.1.tgz", "integrity": "sha512-X7gdiuaCmA0uRjCmRtYJNAVCc/q+5xSgsfKJHqMN4iNLILX39677fJE1O40arPMh0TTtS9ItH67yre6c7k6t0g==", "dev": true, "requires": { "esutils": "^2.0.2", "lodash": "^4.17.13", "to-fast-properties": "^2.0.0" } }, "ajv": { "version": "6.10.2", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz", "integrity": "sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==", "dev": true, "requires": { "fast-deep-equal": "^2.0.1", "fast-json-stable-stringify": "^2.0.0", "json-schema-traverse": "^0.4.1", "uri-js": "^4.2.2" } }, "ansi-regex": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", "dev": true }, "ansi-styles": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "requires": { "color-convert": "^1.9.0" } }, "anymatch": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", "dev": true, "requires": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" } }, "append-transform": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-1.0.0.tgz", "integrity": "sha512-P009oYkeHyU742iSZJzZZywj4QRJdnTWffaKuJQLablCZ1uz6/cW4yaRgcDaoQ+uwOxxnt0gRUcwfsNP2ri0gw==", "dev": true, "requires": { "default-require-extensions": "^2.0.0" } }, "archy": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=", "dev": true }, "arg": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.1.tgz", "integrity": "sha512-SlmP3fEA88MBv0PypnXZ8ZfJhwmDeIE3SP71j37AiXQBXYosPV0x6uISAaHYSlSVhmHOVkomen0tbGk6Anlebw==", "dev": true }, "argparse": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dev": true, "requires": { "sprintf-js": "~1.0.2" } }, "asn1": { "version": "0.2.4", "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", "dev": true, "requires": { "safer-buffer": "~2.1.0" } }, "assert-plus": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", "dev": true }, "async-hook-domain": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/async-hook-domain/-/async-hook-domain-1.1.1.tgz", "integrity": "sha512-nHfgkoCbzXqCPEFshW5/LROfUqKcZdOW4mfvR66V7bdSuvvvt+s2CuHVBmJxHfOVFhCJ29xlRqEJxyNQKQsqBg==", "dev": true, "requires": { "source-map-support": "^0.5.11" } }, "asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", "dev": true }, "aws-sign2": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", "dev": true }, "aws4": { "version": "1.8.0", "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz", "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==", "dev": true }, "balanced-match": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", "dev": true }, "bcrypt-pbkdf": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", "dev": true, "requires": { "tweetnacl": "^0.14.3" } }, "binary-extensions": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.0.0.tgz", "integrity": "sha512-Phlt0plgpIIBOGTT/ehfFnbNlfsDEiqmzE2KRXoX1bLIlir4X/MR+zSyBEkL05ffWgnRSf/DXv+WrUAVr93/ow==", "dev": true }, "bind-obj-methods": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/bind-obj-methods/-/bind-obj-methods-2.0.0.tgz", "integrity": "sha512-3/qRXczDi2Cdbz6jE+W3IflJOutRVica8frpBn14de1mBOkzDo+6tY33kNhvkw54Kn3PzRRD2VnGbGPcTAk4sw==", "dev": true }, "brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "braces": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", "dev": true, "requires": { "fill-range": "^7.0.1" } }, "browser-process-hrtime": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", "dev": true }, "buffer-from": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", "dev": true }, "caching-transform": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/caching-transform/-/caching-transform-3.0.2.tgz", "integrity": "sha512-Mtgcv3lh3U0zRii/6qVgQODdPA4G3zhG+jtbCWj39RXuUFTMzH0vcdMtaJS1jPowd+It2Pqr6y3NJMQqOqCE2w==", "dev": true, "requires": { "hasha": "^3.0.0", "make-dir": "^2.0.0", "package-hash": "^3.0.0", "write-file-atomic": "^2.4.2" }, "dependencies": { "write-file-atomic": { "version": "2.4.3", "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz", "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", "dev": true, "requires": { "graceful-fs": "^4.1.11", "imurmurhash": "^0.1.4", "signal-exit": "^3.0.2" } } } }, "camelcase": { "version": "5.3.1", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "dev": true }, "capture-stack-trace": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.1.tgz", "integrity": "sha512-mYQLZnx5Qt1JgB1WEiMCf2647plpGeQ2NMR/5L0HNZzGQo4fuSPnK+wjfPnKZV0aiJDgzmWqqkV/g7JD+DW0qw==", "dev": true }, "caseless": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", "dev": true }, "chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, "requires": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", "supports-color": "^5.3.0" } }, "chokidar": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.2.1.tgz", "integrity": "sha512-/j5PPkb5Feyps9e+jo07jUZGvkB5Aj953NrI4s8xSVScrAo/RHeILrtdb4uzR7N6aaFFxxJ+gt8mA8HfNpw76w==", "dev": true, "requires": { "anymatch": "~3.1.1", "braces": "~3.0.2", "fsevents": "~2.1.0", "glob-parent": "~5.1.0", "is-binary-path": "~2.1.0", "is-glob": "~4.0.1", "normalize-path": "~3.0.0", "readdirp": "~3.1.3" } }, "cliui": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", "dev": true, "requires": { "string-width": "^2.1.1", "strip-ansi": "^4.0.0", "wrap-ansi": "^2.0.0" } }, "code-point-at": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", "dev": true }, "color-convert": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dev": true, "requires": { "color-name": "1.1.3" } }, "color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", "dev": true }, "color-support": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", "dev": true }, "combined-stream": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", "dev": true, "requires": { "delayed-stream": "~1.0.0" } }, "commander": { "version": "2.20.1", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.1.tgz", "integrity": "sha512-cCuLsMhJeWQ/ZpsFTbE765kvVfoeSddc4nU3up4fV+fDBcfUXnbITJ+JzhkdjzOqhURjZgujxaioam4RM9yGUg==", "dev": true, "optional": true }, "commondir": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", "dev": true }, "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", "dev": true }, "convert-source-map": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.6.0.tgz", "integrity": "sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A==", "dev": true, "requires": { "safe-buffer": "~5.1.1" }, "dependencies": { "safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", "dev": true } } }, "core-util-is": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", "dev": true }, "coveralls": { "version": "3.0.6", "resolved": "https://registry.npmjs.org/coveralls/-/coveralls-3.0.6.tgz", "integrity": "sha512-Pgh4v3gCI4T/9VijVrm8Ym5v0OgjvGLKj3zTUwkvsCiwqae/p6VLzpsFNjQS2i6ewV7ef+DjFJ5TSKxYt/mCrA==", "dev": true, "requires": { "growl": "~> 1.10.0", "js-yaml": "^3.13.1", "lcov-parse": "^0.0.10", "log-driver": "^1.2.7", "minimist": "^1.2.0", "request": "^2.86.0" } }, "cp-file": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/cp-file/-/cp-file-6.2.0.tgz", "integrity": "sha512-fmvV4caBnofhPe8kOcitBwSn2f39QLjnAnGq3gO9dfd75mUytzKNZB1hde6QHunW2Rt+OwuBOMc3i1tNElbszA==", "dev": true, "requires": { "graceful-fs": "^4.1.2", "make-dir": "^2.0.0", "nested-error-stacks": "^2.0.0", "pify": "^4.0.1", "safe-buffer": "^5.0.1" } }, "cross-spawn": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-4.0.2.tgz", "integrity": "sha1-e5JHYhwjrf3ThWAEqCPL45dCTUE=", "dev": true, "requires": { "lru-cache": "^4.0.1", "which": "^1.2.9" } }, "dashdash": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", "dev": true, "requires": { "assert-plus": "^1.0.0" } }, "debug": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", "dev": true, "requires": { "ms": "^2.1.1" } }, "decamelize": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", "dev": true }, "default-require-extensions": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-2.0.0.tgz", "integrity": "sha1-9fj7sYp9bVCyH2QfZJ67Uiz+JPc=", "dev": true, "requires": { "strip-bom": "^3.0.0" } }, "delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", "dev": true }, "diff": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.1.tgz", "integrity": "sha512-s2+XdvhPCOF01LRQBC8hf4vhbVmI2CGS5aZnxLJlT5FtdhPCDFq80q++zK2KlrVorVDdL5BOGZ/VfLrVtYNF+Q==", "dev": true }, "ecc-jsbn": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", "dev": true, "requires": { "jsbn": "~0.1.0", "safer-buffer": "^2.1.0" } }, "emoji-regex": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", "dev": true }, "error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", "dev": true, "requires": { "is-arrayish": "^0.2.1" } }, "es6-error": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", "dev": true }, "escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", "dev": true }, "esm": { "version": "3.2.25", "resolved": "https://registry.npmjs.org/esm/-/esm-3.2.25.tgz", "integrity": "sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA==", "dev": true }, "esprima": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", "dev": true }, "esutils": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true }, "events-to-array": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/events-to-array/-/events-to-array-1.1.2.tgz", "integrity": "sha1-LUH1Y+H+QA7Uli/hpNXGp1Od9/Y=", "dev": true }, "extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", "dev": true }, "extsprintf": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", "dev": true }, "fast-deep-equal": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", "dev": true }, "fast-json-stable-stringify": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=", "dev": true }, "fill-range": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", "dev": true, "requires": { "to-regex-range": "^5.0.1" } }, "find-cache-dir": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", "dev": true, "requires": { "commondir": "^1.0.1", "make-dir": "^2.0.0", "pkg-dir": "^3.0.0" } }, "find-up": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", "dev": true, "requires": { "locate-path": "^3.0.0" } }, "findit": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/findit/-/findit-2.0.0.tgz", "integrity": "sha1-ZQnwEmr0wXhVHPqZOU4DLhOk1W4=", "dev": true }, "flow-parser": { "version": "0.109.0", "resolved": "https://registry.npmjs.org/flow-parser/-/flow-parser-0.109.0.tgz", "integrity": "sha512-e8Z1n0QvXAjpFcTqLBBM5hVKoJuR8CLNy5WlhRYIqcSH3ClYvZNSi38ZZN9wnQSoNoH12vnvMVeMHUCfYyVNhQ==", "dev": true }, "flow-remove-types": { "version": "2.109.0", "resolved": "https://registry.npmjs.org/flow-remove-types/-/flow-remove-types-2.109.0.tgz", "integrity": "sha512-IN0t0foOC0ZZc05mS3Kfv7tgbdH9v/Zi0hia9pDjBmAZFld2h19JtesMLpC/57tqZiWAYNQBUV5dqE/BZ1flgQ==", "dev": true, "requires": { "flow-parser": "^0.109.0", "pirates": "^3.0.2", "vlq": "^0.2.1" } }, "foreground-child": { "version": "1.5.6", "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-1.5.6.tgz", "integrity": "sha1-T9ca0t/elnibmApcCilZN8svXOk=", "dev": true, "requires": { "cross-spawn": "^4", "signal-exit": "^3.0.0" } }, "forever-agent": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", "dev": true }, "form-data": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", "dev": true, "requires": { "asynckit": "^0.4.0", "combined-stream": "^1.0.6", "mime-types": "^2.1.12" } }, "fs-exists-cached": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs-exists-cached/-/fs-exists-cached-1.0.0.tgz", "integrity": "sha1-zyVVTKBQ3EmuZla0HeQiWJidy84=", "dev": true }, "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", "dev": true }, "fsevents": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.0.tgz", "integrity": "sha512-+iXhW3LuDQsno8dOIrCIT/CBjeBWuP7PXe8w9shnj9Lebny/Gx1ZjVBYwexLz36Ri2jKuXMNpV6CYNh8lHHgrQ==", "dev": true, "optional": true }, "function-loop": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/function-loop/-/function-loop-1.0.2.tgz", "integrity": "sha512-Iw4MzMfS3udk/rqxTiDDCllhGwlOrsr50zViTOO/W6lS/9y6B1J0BD2VZzrnWUYBJsl3aeqjgR5v7bWWhZSYbA==", "dev": true }, "get-caller-file": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true }, "getpass": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", "dev": true, "requires": { "assert-plus": "^1.0.0" } }, "glob": { "version": "7.1.4", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", "dev": true, "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", "minimatch": "^3.0.4", "once": "^1.3.0", "path-is-absolute": "^1.0.0" } }, "glob-parent": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.0.tgz", "integrity": "sha512-qjtRgnIVmOfnKUE3NJAQEdk+lKrxfw8t5ke7SXtfMTHcjsBfOfWXCQfdb30zfDoZQ2IRSIiidmjtbHZPZ++Ihw==", "dev": true, "requires": { "is-glob": "^4.0.1" } }, "globals": { "version": "11.12.0", "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", "dev": true }, "graceful-fs": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.2.tgz", "integrity": "sha512-IItsdsea19BoLC7ELy13q1iJFNmd7ofZH5+X/pJr90/nRoPEX0DJo1dHDbgtYWOhJhcCgMDTOw84RZ72q6lB+Q==", "dev": true }, "growl": { "version": "1.10.5", "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", "dev": true }, "handlebars": { "version": "4.4.2", "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.4.2.tgz", "integrity": "sha512-cIv17+GhL8pHHnRJzGu2wwcthL5sb8uDKBHvZ2Dtu5s1YNt0ljbzKbamnc+gr69y7bzwQiBdr5+hOpRd5pnOdg==", "dev": true, "requires": { "neo-async": "^2.6.0", "optimist": "^0.6.1", "source-map": "^0.6.1", "uglify-js": "^3.1.4" } }, "har-schema": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", "dev": true }, "har-validator": { "version": "5.1.3", "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", "dev": true, "requires": { "ajv": "^6.5.5", "har-schema": "^2.0.0" } }, "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", "dev": true }, "hasha": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/hasha/-/hasha-3.0.0.tgz", "integrity": "sha1-UqMvq4Vp1BymmmH/GiFPjrfIvTk=", "dev": true, "requires": { "is-stream": "^1.0.1" } }, "hosted-git-info": { "version": "2.8.4", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.4.tgz", "integrity": "sha512-pzXIvANXEFrc5oFFXRMkbLPQ2rXRoDERwDLyrcUxGhaZhgP54BBSl9Oheh7Vv0T090cszWBxPjkQQ5Sq1PbBRQ==", "dev": true }, "http-signature": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", "dev": true, "requires": { "assert-plus": "^1.0.0", "jsprim": "^1.2.2", "sshpk": "^1.7.0" } }, "imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", "dev": true }, "inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", "dev": true, "requires": { "once": "^1.3.0", "wrappy": "1" } }, "inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", "dev": true }, "is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", "dev": true }, "is-binary-path": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", "dev": true, "requires": { "binary-extensions": "^2.0.0" } }, "is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", "dev": true }, "is-fullwidth-code-point": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", "dev": true }, "is-glob": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", "dev": true, "requires": { "is-extglob": "^2.1.1" } }, "is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true }, "is-stream": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", "dev": true }, "is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", "dev": true }, "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", "dev": true, "optional": true }, "isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", "dev": true }, "isstream": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", "dev": true }, "istanbul-lib-coverage": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz", "integrity": "sha512-8aXznuEPCJvGnMSRft4udDRDtb1V3pkQkMMI5LI+6HuQz5oQ4J2UFn1H82raA3qJtyOLkkwVqICBQkjnGtn5mA==", "dev": true }, "istanbul-lib-hook": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-2.0.7.tgz", "integrity": "sha512-vrRztU9VRRFDyC+aklfLoeXyNdTfga2EI3udDGn4cZ6fpSXpHLV9X6CHvfoMCPtggg8zvDDmC4b9xfu0z6/llA==", "dev": true, "requires": { "append-transform": "^1.0.0" } }, "istanbul-lib-instrument": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-3.3.0.tgz", "integrity": "sha512-5nnIN4vo5xQZHdXno/YDXJ0G+I3dAm4XgzfSVTPLQpj/zAV2dV6Juy0yaf10/zrJOJeHoN3fraFe+XRq2bFVZA==", "dev": true, "requires": { "@babel/generator": "^7.4.0", "@babel/parser": "^7.4.3", "@babel/template": "^7.4.0", "@babel/traverse": "^7.4.3", "@babel/types": "^7.4.0", "istanbul-lib-coverage": "^2.0.5", "semver": "^6.0.0" }, "dependencies": { "semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true } } }, "istanbul-lib-processinfo": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/istanbul-lib-processinfo/-/istanbul-lib-processinfo-1.0.0.tgz", "integrity": "sha512-FY0cPmWa4WoQNlvB8VOcafiRoB5nB+l2Pz2xGuXHRSy1KM8QFOYfz/rN+bGMCAeejrY3mrpF5oJHcN0s/garCg==", "dev": true, "requires": { "archy": "^1.0.0", "cross-spawn": "^6.0.5", "istanbul-lib-coverage": "^2.0.3", "rimraf": "^2.6.3", "uuid": "^3.3.2" }, "dependencies": { "cross-spawn": { "version": "6.0.5", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", "dev": true, "requires": { "nice-try": "^1.0.4", "path-key": "^2.0.1", "semver": "^5.5.0", "shebang-command": "^1.2.0", "which": "^1.2.9" } } } }, "istanbul-lib-report": { "version": "2.0.8", "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-2.0.8.tgz", "integrity": "sha512-fHBeG573EIihhAblwgxrSenp0Dby6tJMFR/HvlerBsrCTD5bkUuoNtn3gVh29ZCS824cGGBPn7Sg7cNk+2xUsQ==", "dev": true, "requires": { "istanbul-lib-coverage": "^2.0.5", "make-dir": "^2.1.0", "supports-color": "^6.1.0" }, "dependencies": { "supports-color": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", "dev": true, "requires": { "has-flag": "^3.0.0" } } } }, "istanbul-lib-source-maps": { "version": "3.0.6", "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-3.0.6.tgz", "integrity": "sha512-R47KzMtDJH6X4/YW9XTx+jrLnZnscW4VpNN+1PViSYTejLVPWv7oov+Duf8YQSPyVRUvueQqz1TcsC6mooZTXw==", "dev": true, "requires": { "debug": "^4.1.1", "istanbul-lib-coverage": "^2.0.5", "make-dir": "^2.1.0", "rimraf": "^2.6.3", "source-map": "^0.6.1" } }, "istanbul-reports": { "version": "2.2.6", "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-2.2.6.tgz", "integrity": "sha512-SKi4rnMyLBKe0Jy2uUdx28h8oG7ph2PPuQPvIAh31d+Ci+lSiEu4C+h3oBPuJ9+mPKhOyW0M8gY4U5NM1WLeXA==", "dev": true, "requires": { "handlebars": "^4.1.2" } }, "jackspeak": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-1.4.0.tgz", "integrity": "sha512-VDcSunT+wcccoG46FtzuBAyQKlzhHjli4q31e1fIHGOsRspqNUFjVzGb+7eIFDlTvqLygxapDHPHS0ouT2o/tw==", "dev": true, "requires": { "cliui": "^4.1.0" } }, "js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", "dev": true }, "js-yaml": { "version": "3.13.1", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", "dev": true, "requires": { "argparse": "^1.0.7", "esprima": "^4.0.0" } }, "jsbn": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", "dev": true }, "jsesc": { "version": "2.5.2", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", "dev": true }, "json-parse-better-errors": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", "dev": true }, "json-schema": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", "dev": true }, "json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", "dev": true }, "json-stringify-safe": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", "dev": true }, "jsprim": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", "dev": true, "requires": { "assert-plus": "1.0.0", "extsprintf": "1.3.0", "json-schema": "0.2.3", "verror": "1.10.0" } }, "lcov-parse": { "version": "0.0.10", "resolved": "https://registry.npmjs.org/lcov-parse/-/lcov-parse-0.0.10.tgz", "integrity": "sha1-GwuP+ayceIklBYK3C3ExXZ2m2aM=", "dev": true }, "load-json-file": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", "dev": true, "requires": { "graceful-fs": "^4.1.2", "parse-json": "^4.0.0", "pify": "^3.0.0", "strip-bom": "^3.0.0" }, "dependencies": { "pify": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", "dev": true } } }, "locate-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", "dev": true, "requires": { "p-locate": "^3.0.0", "path-exists": "^3.0.0" } }, "lodash": { "version": "4.17.15", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", "dev": true }, "lodash.flattendeep": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz", "integrity": "sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI=", "dev": true }, "log-driver": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/log-driver/-/log-driver-1.2.7.tgz", "integrity": "sha512-U7KCmLdqsGHBLeWqYlFA0V0Sl6P08EE1ZrmA9cxjUE0WVqT9qnyVDPz1kzpFEP0jdJuFnasWIfSd7fsaNXkpbg==", "dev": true }, "lru-cache": { "version": "4.1.5", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", "dev": true, "requires": { "pseudomap": "^1.0.2", "yallist": "^2.1.2" }, "dependencies": { "yallist": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", "dev": true } } }, "make-dir": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", "dev": true, "requires": { "pify": "^4.0.1", "semver": "^5.6.0" } }, "make-error": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.5.tgz", "integrity": "sha512-c3sIjNUow0+8swNwVpqoH4YCShKNFkMaw6oH1mNS2haDZQqkeZFlHS3dhoeEbKKmJB4vXpJucU6oH75aDYeE9g==", "dev": true }, "merge-source-map": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.1.0.tgz", "integrity": "sha512-Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw==", "dev": true, "requires": { "source-map": "^0.6.1" } }, "mime-db": { "version": "1.40.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.40.0.tgz", "integrity": "sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA==", "dev": true }, "mime-types": { "version": "2.1.24", "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.24.tgz", "integrity": "sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ==", "dev": true, "requires": { "mime-db": "1.40.0" } }, "minimatch": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "dev": true, "requires": { "brace-expansion": "^1.1.7" } }, "minimist": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", "dev": true }, "minipass": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.0.0.tgz", "integrity": "sha512-FKNU4XrAPDX0+ynwns7njVu4RolyG1mUKSlT6n6GwGXLtYSYh2Znc0S83Rl6zEr1zgFfXvAzIBabnmItm+n19g==", "requires": { "yallist": "^4.0.0" } }, "mkdirp": { "version": "0.5.1", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", "dev": true, "requires": { "minimist": "0.0.8" }, "dependencies": { "minimist": { "version": "0.0.8", "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", "dev": true } } }, "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, "neo-async": { "version": "2.6.1", "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.1.tgz", "integrity": "sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw==", "dev": true }, "nested-error-stacks": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/nested-error-stacks/-/nested-error-stacks-2.1.0.tgz", "integrity": "sha512-AO81vsIO1k1sM4Zrd6Hu7regmJN1NSiAja10gc4bX3F0wd+9rQmcuHQaHVQCYIEC8iFXnE+mavh23GOt7wBgug==", "dev": true }, "nice-try": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", "dev": true }, "node-modules-regexp": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz", "integrity": "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=", "dev": true }, "normalize-package-data": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", "dev": true, "requires": { "hosted-git-info": "^2.1.4", "resolve": "^1.10.0", "semver": "2 || 3 || 4 || 5", "validate-npm-package-license": "^3.0.1" } }, "normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "dev": true }, "number-is-nan": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", "dev": true }, "nyc": { "version": "14.1.1", "resolved": "https://registry.npmjs.org/nyc/-/nyc-14.1.1.tgz", "integrity": "sha512-OI0vm6ZGUnoGZv/tLdZ2esSVzDwUC88SNs+6JoSOMVxA+gKMB8Tk7jBwgemLx4O40lhhvZCVw1C+OYLOBOPXWw==", "dev": true, "requires": { "archy": "^1.0.0", "caching-transform": "^3.0.2", "convert-source-map": "^1.6.0", "cp-file": "^6.2.0", "find-cache-dir": "^2.1.0", "find-up": "^3.0.0", "foreground-child": "^1.5.6", "glob": "^7.1.3", "istanbul-lib-coverage": "^2.0.5", "istanbul-lib-hook": "^2.0.7", "istanbul-lib-instrument": "^3.3.0", "istanbul-lib-report": "^2.0.8", "istanbul-lib-source-maps": "^3.0.6", "istanbul-reports": "^2.2.4", "js-yaml": "^3.13.1", "make-dir": "^2.1.0", "merge-source-map": "^1.1.0", "resolve-from": "^4.0.0", "rimraf": "^2.6.3", "signal-exit": "^3.0.2", "spawn-wrap": "^1.4.2", "test-exclude": "^5.2.3", "uuid": "^3.3.2", "yargs": "^13.2.2", "yargs-parser": "^13.0.0" } }, "oauth-sign": { "version": "0.9.0", "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", "dev": true }, "once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "dev": true, "requires": { "wrappy": "1" } }, "opener": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.1.tgz", "integrity": "sha512-goYSy5c2UXE4Ra1xixabeVh1guIX/ZV/YokJksb6q2lubWu6UbvPQ20p542/sFIll1nl8JnCyK9oBaOcCWXwvA==", "dev": true }, "optimist": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", "dev": true, "requires": { "minimist": "~0.0.1", "wordwrap": "~0.0.2" }, "dependencies": { "minimist": { "version": "0.0.10", "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz", "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=", "dev": true } } }, "os-homedir": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", "dev": true }, "own-or": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/own-or/-/own-or-1.0.0.tgz", "integrity": "sha1-Tod/vtqaLsgAD7wLyuOWRe6L+Nw=", "dev": true }, "own-or-env": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/own-or-env/-/own-or-env-1.0.1.tgz", "integrity": "sha512-y8qULRbRAlL6x2+M0vIe7jJbJx/kmUTzYonRAa2ayesR2qWLswninkVyeJe4x3IEXhdgoNodzjQRKAoEs6Fmrw==", "dev": true, "requires": { "own-or": "^1.0.0" } }, "p-limit": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.1.tgz", "integrity": "sha512-85Tk+90UCVWvbDavCLKPOLC9vvY8OwEX/RtKF+/1OADJMVlFfEHOiMTPVyxg7mk/dKa+ipdHm0OUkTvCpMTuwg==", "dev": true, "requires": { "p-try": "^2.0.0" } }, "p-locate": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", "dev": true, "requires": { "p-limit": "^2.0.0" } }, "p-try": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "dev": true }, "package-hash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/package-hash/-/package-hash-3.0.0.tgz", "integrity": "sha512-lOtmukMDVvtkL84rJHI7dpTYq+0rli8N2wlnqUcBuDWCfVhRUfOmnR9SsoHFMLpACvEV60dX7rd0rFaYDZI+FA==", "dev": true, "requires": { "graceful-fs": "^4.1.15", "hasha": "^3.0.0", "lodash.flattendeep": "^4.4.0", "release-zalgo": "^1.0.0" } }, "parse-json": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", "dev": true, "requires": { "error-ex": "^1.3.1", "json-parse-better-errors": "^1.0.1" } }, "path-exists": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", "dev": true }, "path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", "dev": true }, "path-key": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", "dev": true }, "path-parse": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", "dev": true }, "path-type": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", "dev": true, "requires": { "pify": "^3.0.0" }, "dependencies": { "pify": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", "dev": true } } }, "performance-now": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", "dev": true }, "picomatch": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.0.7.tgz", "integrity": "sha512-oLHIdio3tZ0qH76NybpeneBhYVj0QFTfXEFTc/B3zKQspYfYYkWYgFsmzo+4kvId/bQRcNkVeguI3y+CD22BtA==", "dev": true }, "pify": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", "dev": true }, "pirates": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/pirates/-/pirates-3.0.2.tgz", "integrity": "sha512-c5CgUJq6H2k6MJz72Ak1F5sN9n9wlSlJyEnwvpm9/y3WB4E3pHBDT2c6PEiS1vyJvq2bUxUAIu0EGf8Cx4Ic7Q==", "dev": true, "requires": { "node-modules-regexp": "^1.0.0" } }, "pkg-dir": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", "dev": true, "requires": { "find-up": "^3.0.0" } }, "process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", "dev": true, "optional": true }, "pseudomap": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", "dev": true }, "psl": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/psl/-/psl-1.4.0.tgz", "integrity": "sha512-HZzqCGPecFLyoRj5HLfuDSKYTJkAfB5thKBIkRHtGjWwY7p1dAyveIbXIq4tO0KYfDF2tHqPUgY9SDnGm00uFw==", "dev": true }, "punycode": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", "dev": true }, "qs": { "version": "6.5.2", "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", "dev": true }, "read-pkg": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", "dev": true, "requires": { "load-json-file": "^4.0.0", "normalize-package-data": "^2.3.2", "path-type": "^3.0.0" } }, "read-pkg-up": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-4.0.0.tgz", "integrity": "sha512-6etQSH7nJGsK0RbG/2TeDzZFa8shjQ1um+SwQQ5cwKy0dhSXdOncEhb1CPpvQG4h7FyOV6EB6YlV0yJvZQNAkA==", "dev": true, "requires": { "find-up": "^3.0.0", "read-pkg": "^3.0.0" } }, "readable-stream": { "version": "2.3.6", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", "dev": true, "optional": true, "requires": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", "isarray": "~1.0.0", "process-nextick-args": "~2.0.0", "safe-buffer": "~5.1.1", "string_decoder": "~1.1.1", "util-deprecate": "~1.0.1" }, "dependencies": { "safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", "dev": true, "optional": true } } }, "readdirp": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.1.3.tgz", "integrity": "sha512-ZOsfTGkjO2kqeR5Mzr5RYDbTGYneSkdNKX2fOX2P5jF7vMrd/GNnIAUtDldeHHumHUCQ3V05YfWUdxMPAsRu9Q==", "dev": true, "requires": { "picomatch": "^2.0.4" } }, "regenerator-runtime": { "version": "0.13.3", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.3.tgz", "integrity": "sha512-naKIZz2GQ8JWh///G7L3X6LaQUAMp2lvb1rvwwsURe/VXwD6VMfr+/1NuNw3ag8v2kY1aQ/go5SNn79O9JU7yw==", "dev": true }, "release-zalgo": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/release-zalgo/-/release-zalgo-1.0.0.tgz", "integrity": "sha1-CXALflB0Mpc5Mw5TXFqQ+2eFFzA=", "dev": true, "requires": { "es6-error": "^4.0.1" } }, "request": { "version": "2.88.0", "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", "dev": true, "requires": { "aws-sign2": "~0.7.0", "aws4": "^1.8.0", "caseless": "~0.12.0", "combined-stream": "~1.0.6", "extend": "~3.0.2", "forever-agent": "~0.6.1", "form-data": "~2.3.2", "har-validator": "~5.1.0", "http-signature": "~1.2.0", "is-typedarray": "~1.0.0", "isstream": "~0.1.2", "json-stringify-safe": "~5.0.1", "mime-types": "~2.1.19", "oauth-sign": "~0.9.0", "performance-now": "^2.1.0", "qs": "~6.5.2", "safe-buffer": "^5.1.2", "tough-cookie": "~2.4.3", "tunnel-agent": "^0.6.0", "uuid": "^3.3.2" } }, "require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", "dev": true }, "require-main-filename": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", "dev": true }, "resolve": { "version": "1.12.0", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.12.0.tgz", "integrity": "sha512-B/dOmuoAik5bKcD6s6nXDCjzUKnaDvdkRyAk6rsmsKLipWj4797iothd7jmmUhWTfinVMU+wc56rYKsit2Qy4w==", "dev": true, "requires": { "path-parse": "^1.0.6" } }, "resolve-from": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true }, "rimraf": { "version": "2.7.1", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", "dev": true, "requires": { "glob": "^7.1.3" } }, "safe-buffer": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz", "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==", "dev": true }, "safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", "dev": true }, "semver": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true }, "set-blocking": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", "dev": true }, "shebang-command": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", "dev": true, "requires": { "shebang-regex": "^1.0.0" } }, "shebang-regex": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", "dev": true }, "signal-exit": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", "dev": true }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true }, "source-map-support": { "version": "0.5.13", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", "dev": true, "requires": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" } }, "spawn-wrap": { "version": "1.4.3", "resolved": "https://registry.npmjs.org/spawn-wrap/-/spawn-wrap-1.4.3.tgz", "integrity": "sha512-IgB8md0QW/+tWqcavuFgKYR/qIRvJkRLPJDFaoXtLLUaVcCDK0+HeFTkmQHj3eprcYhc+gOl0aEA1w7qZlYezw==", "dev": true, "requires": { "foreground-child": "^1.5.6", "mkdirp": "^0.5.0", "os-homedir": "^1.0.1", "rimraf": "^2.6.2", "signal-exit": "^3.0.2", "which": "^1.3.0" } }, "spdx-correct": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz", "integrity": "sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==", "dev": true, "requires": { "spdx-expression-parse": "^3.0.0", "spdx-license-ids": "^3.0.0" } }, "spdx-exceptions": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz", "integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==", "dev": true }, "spdx-expression-parse": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", "dev": true, "requires": { "spdx-exceptions": "^2.1.0", "spdx-license-ids": "^3.0.0" } }, "spdx-license-ids": { "version": "3.0.5", "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz", "integrity": "sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==", "dev": true }, "sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", "dev": true }, "sshpk": { "version": "1.16.1", "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", "dev": true, "requires": { "asn1": "~0.2.3", "assert-plus": "^1.0.0", "bcrypt-pbkdf": "^1.0.0", "dashdash": "^1.12.0", "ecc-jsbn": "~0.1.1", "getpass": "^0.1.1", "jsbn": "~0.1.0", "safer-buffer": "^2.0.2", "tweetnacl": "~0.14.0" } }, "stack-utils": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-1.0.2.tgz", "integrity": "sha512-MTX+MeG5U994cazkjd/9KNAapsHnibjMLnfXodlkXw76JEea0UiNzrqidzo1emMwk7w5Qhc9jd4Bn9TBb1MFwA==", "dev": true }, "string-width": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", "dev": true, "requires": { "is-fullwidth-code-point": "^2.0.0", "strip-ansi": "^4.0.0" } }, "string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "optional": true, "requires": { "safe-buffer": "~5.1.0" }, "dependencies": { "safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", "dev": true, "optional": true } } }, "strip-ansi": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", "dev": true, "requires": { "ansi-regex": "^3.0.0" } }, "strip-bom": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", "dev": true }, "supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, "requires": { "has-flag": "^3.0.0" } }, "tap": { "version": "14.6.9", "resolved": "https://registry.npmjs.org/tap/-/tap-14.6.9.tgz", "integrity": "sha512-impxvxJo49knWdQNctdY+hAyQGbLjGR9foNkX4B9NnotgV5tfmJNqLrFu+YluHSNhIjfqF6Ea+Pj08xPAHxfSQ==", "dev": true, "requires": { "async-hook-domain": "^1.1.1", "bind-obj-methods": "^2.0.0", "browser-process-hrtime": "^1.0.0", "capture-stack-trace": "^1.0.0", "chokidar": "^3.0.2", "color-support": "^1.1.0", "coveralls": "^3.0.6", "diff": "^4.0.1", "esm": "^3.2.25", "findit": "^2.0.0", "flow-remove-types": "^2.107.0", "foreground-child": "^1.3.3", "fs-exists-cached": "^1.0.0", "function-loop": "^1.0.2", "glob": "^7.1.4", "import-jsx": "^2.0.0", "ink": "^2.3.0", "isexe": "^2.0.0", "istanbul-lib-processinfo": "^1.0.0", "jackspeak": "^1.4.0", "minipass": "^3.0.0", "mkdirp": "^0.5.1", "nyc": "^14.1.1", "opener": "^1.5.1", "own-or": "^1.0.0", "own-or-env": "^1.0.1", "react": "^16.9.0", "rimraf": "^2.7.1", "signal-exit": "^3.0.0", "source-map-support": "^0.5.13", "stack-utils": "^1.0.2", "tap-mocha-reporter": "^5.0.0", "tap-parser": "^10.0.0", "tap-yaml": "^1.0.0", "tcompare": "^2.3.0", "treport": "^0.4.1", "trivial-deferred": "^1.0.1", "ts-node": "^8.3.0", "typescript": "^3.6.3", "which": "^1.3.1", "write-file-atomic": "^3.0.0", "yaml": "^1.6.0", "yapool": "^1.0.0" }, "dependencies": { "@babel/runtime": { "version": "7.4.5", "bundled": true, "dev": true, "requires": { "regenerator-runtime": "^0.13.2" }, "dependencies": { "regenerator-runtime": { "version": "0.13.2", "bundled": true, "dev": true } } }, "@types/prop-types": { "version": "15.7.1", "bundled": true, "dev": true }, "@types/react": { "version": "16.8.22", "bundled": true, "dev": true, "requires": { "@types/prop-types": "*", "csstype": "^2.2.0" } }, "ansi-escapes": { "version": "3.2.0", "bundled": true, "dev": true }, "ansi-regex": { "version": "2.1.1", "bundled": true, "dev": true }, "ansi-styles": { "version": "2.2.1", "bundled": true, "dev": true }, "ansicolors": { "version": "0.3.2", "bundled": true, "dev": true }, "arrify": { "version": "1.0.1", "bundled": true, "dev": true }, "astral-regex": { "version": "1.0.0", "bundled": true, "dev": true }, "auto-bind": { "version": "2.1.0", "bundled": true, "dev": true, "requires": { "@types/react": "^16.8.12" } }, "babel-code-frame": { "version": "6.26.0", "bundled": true, "dev": true, "requires": { "chalk": "^1.1.3", "esutils": "^2.0.2", "js-tokens": "^3.0.2" } }, "babel-core": { "version": "6.26.3", "bundled": true, "dev": true, "requires": { "babel-code-frame": "^6.26.0", "babel-generator": "^6.26.0", "babel-helpers": "^6.24.1", "babel-messages": "^6.23.0", "babel-register": "^6.26.0", "babel-runtime": "^6.26.0", "babel-template": "^6.26.0", "babel-traverse": "^6.26.0", "babel-types": "^6.26.0", "babylon": "^6.18.0", "convert-source-map": "^1.5.1", "debug": "^2.6.9", "json5": "^0.5.1", "lodash": "^4.17.4", "minimatch": "^3.0.4", "path-is-absolute": "^1.0.1", "private": "^0.1.8", "slash": "^1.0.0", "source-map": "^0.5.7" }, "dependencies": { "source-map": { "version": "0.5.7", "bundled": true, "dev": true } } }, "babel-generator": { "version": "6.26.1", "bundled": true, "dev": true, "requires": { "babel-messages": "^6.23.0", "babel-runtime": "^6.26.0", "babel-types": "^6.26.0", "detect-indent": "^4.0.0", "jsesc": "^1.3.0", "lodash": "^4.17.4", "source-map": "^0.5.7", "trim-right": "^1.0.1" }, "dependencies": { "source-map": { "version": "0.5.7", "bundled": true, "dev": true } } }, "babel-helper-builder-react-jsx": { "version": "6.26.0", "bundled": true, "dev": true, "requires": { "babel-runtime": "^6.26.0", "babel-types": "^6.26.0", "esutils": "^2.0.2" } }, "babel-helpers": { "version": "6.24.1", "bundled": true, "dev": true, "requires": { "babel-runtime": "^6.22.0", "babel-template": "^6.24.1" } }, "babel-messages": { "version": "6.23.0", "bundled": true, "dev": true, "requires": { "babel-runtime": "^6.22.0" } }, "babel-plugin-syntax-jsx": { "version": "6.18.0", "bundled": true, "dev": true }, "babel-plugin-syntax-object-rest-spread": { "version": "6.13.0", "bundled": true, "dev": true }, "babel-plugin-transform-es2015-destructuring": { "version": "6.23.0", "bundled": true, "dev": true, "requires": { "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-object-rest-spread": { "version": "6.26.0", "bundled": true, "dev": true, "requires": { "babel-plugin-syntax-object-rest-spread": "^6.8.0", "babel-runtime": "^6.26.0" } }, "babel-plugin-transform-react-jsx": { "version": "6.24.1", "bundled": true, "dev": true, "requires": { "babel-helper-builder-react-jsx": "^6.24.1", "babel-plugin-syntax-jsx": "^6.8.0", "babel-runtime": "^6.22.0" } }, "babel-register": { "version": "6.26.0", "bundled": true, "dev": true, "requires": { "babel-core": "^6.26.0", "babel-runtime": "^6.26.0", "core-js": "^2.5.0", "home-or-tmp": "^2.0.0", "lodash": "^4.17.4", "mkdirp": "^0.5.1", "source-map-support": "^0.4.15" }, "dependencies": { "source-map": { "version": "0.5.7", "bundled": true, "dev": true }, "source-map-support": { "version": "0.4.18", "bundled": true, "dev": true, "requires": { "source-map": "^0.5.6" } } } }, "babel-runtime": { "version": "6.26.0", "bundled": true, "dev": true, "requires": { "core-js": "^2.4.0", "regenerator-runtime": "^0.11.0" } }, "babel-template": { "version": "6.26.0", "bundled": true, "dev": true, "requires": { "babel-runtime": "^6.26.0", "babel-traverse": "^6.26.0", "babel-types": "^6.26.0", "babylon": "^6.18.0", "lodash": "^4.17.4" } }, "babel-traverse": { "version": "6.26.0", "bundled": true, "dev": true, "requires": { "babel-code-frame": "^6.26.0", "babel-messages": "^6.23.0", "babel-runtime": "^6.26.0", "babel-types": "^6.26.0", "babylon": "^6.18.0", "debug": "^2.6.8", "globals": "^9.18.0", "invariant": "^2.2.2", "lodash": "^4.17.4" } }, "babel-types": { "version": "6.26.0", "bundled": true, "dev": true, "requires": { "babel-runtime": "^6.26.0", "esutils": "^2.0.2", "lodash": "^4.17.4", "to-fast-properties": "^1.0.3" } }, "babylon": { "version": "6.18.0", "bundled": true, "dev": true }, "balanced-match": { "version": "1.0.0", "bundled": true, "dev": true }, "brace-expansion": { "version": "1.1.11", "bundled": true, "dev": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "caller-callsite": { "version": "2.0.0", "bundled": true, "dev": true, "requires": { "callsites": "^2.0.0" } }, "caller-path": { "version": "2.0.0", "bundled": true, "dev": true, "requires": { "caller-callsite": "^2.0.0" } }, "callsites": { "version": "2.0.0", "bundled": true, "dev": true }, "cardinal": { "version": "2.1.1", "bundled": true, "dev": true, "requires": { "ansicolors": "~0.3.2", "redeyed": "~2.1.0" } }, "chalk": { "version": "1.1.3", "bundled": true, "dev": true, "requires": { "ansi-styles": "^2.2.1", "escape-string-regexp": "^1.0.2", "has-ansi": "^2.0.0", "strip-ansi": "^3.0.0", "supports-color": "^2.0.0" } }, "ci-info": { "version": "2.0.0", "bundled": true, "dev": true }, "cli-cursor": { "version": "2.1.0", "bundled": true, "dev": true, "requires": { "restore-cursor": "^2.0.0" } }, "cli-truncate": { "version": "1.1.0", "bundled": true, "dev": true, "requires": { "slice-ansi": "^1.0.0", "string-width": "^2.0.0" } }, "color-convert": { "version": "1.9.3", "bundled": true, "dev": true, "requires": { "color-name": "1.1.3" } }, "color-name": { "version": "1.1.3", "bundled": true, "dev": true }, "concat-map": { "version": "0.0.1", "bundled": true, "dev": true }, "convert-source-map": { "version": "1.6.0", "bundled": true, "dev": true, "requires": { "safe-buffer": "~5.1.1" } }, "core-js": { "version": "2.6.5", "bundled": true, "dev": true }, "csstype": { "version": "2.6.5", "bundled": true, "dev": true }, "debug": { "version": "2.6.9", "bundled": true, "dev": true, "requires": { "ms": "2.0.0" } }, "detect-indent": { "version": "4.0.0", "bundled": true, "dev": true, "requires": { "repeating": "^2.0.0" } }, "emoji-regex": { "version": "7.0.3", "bundled": true, "dev": true }, "escape-string-regexp": { "version": "1.0.5", "bundled": true, "dev": true }, "esprima": { "version": "4.0.1", "bundled": true, "dev": true }, "esutils": { "version": "2.0.2", "bundled": true, "dev": true }, "events-to-array": { "version": "1.1.2", "bundled": true, "dev": true }, "globals": { "version": "9.18.0", "bundled": true, "dev": true }, "has-ansi": { "version": "2.0.0", "bundled": true, "dev": true, "requires": { "ansi-regex": "^2.0.0" } }, "has-flag": { "version": "3.0.0", "bundled": true, "dev": true }, "home-or-tmp": { "version": "2.0.0", "bundled": true, "dev": true, "requires": { "os-homedir": "^1.0.0", "os-tmpdir": "^1.0.1" } }, "import-jsx": { "version": "2.0.0", "bundled": true, "dev": true, "requires": { "babel-core": "^6.25.0", "babel-plugin-transform-es2015-destructuring": "^6.23.0", "babel-plugin-transform-object-rest-spread": "^6.23.0", "babel-plugin-transform-react-jsx": "^6.24.1", "caller-path": "^2.0.0", "resolve-from": "^3.0.0" } }, "ink": { "version": "2.3.0", "bundled": true, "dev": true, "requires": { "@types/react": "^16.8.6", "arrify": "^1.0.1", "auto-bind": "^2.0.0", "chalk": "^2.4.1", "cli-cursor": "^2.1.0", "cli-truncate": "^1.1.0", "is-ci": "^2.0.0", "lodash.throttle": "^4.1.1", "log-update": "^3.0.0", "prop-types": "^15.6.2", "react-reconciler": "^0.20.0", "scheduler": "^0.13.2", "signal-exit": "^3.0.2", "slice-ansi": "^1.0.0", "string-length": "^2.0.0", "widest-line": "^2.0.0", "wrap-ansi": "^5.0.0", "yoga-layout-prebuilt": "^1.9.3" }, "dependencies": { "ansi-regex": { "version": "4.1.0", "bundled": true, "dev": true }, "ansi-styles": { "version": "3.2.1", "bundled": true, "dev": true, "requires": { "color-convert": "^1.9.0" } }, "chalk": { "version": "2.4.2", "bundled": true, "dev": true, "requires": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", "supports-color": "^5.3.0" } }, "string-width": { "version": "3.1.0", "bundled": true, "dev": true, "requires": { "emoji-regex": "^7.0.1", "is-fullwidth-code-point": "^2.0.0", "strip-ansi": "^5.1.0" } }, "strip-ansi": { "version": "5.2.0", "bundled": true, "dev": true, "requires": { "ansi-regex": "^4.1.0" } }, "supports-color": { "version": "5.5.0", "bundled": true, "dev": true, "requires": { "has-flag": "^3.0.0" } }, "wrap-ansi": { "version": "5.1.0", "bundled": true, "dev": true, "requires": { "ansi-styles": "^3.2.0", "string-width": "^3.0.0", "strip-ansi": "^5.0.0" } } } }, "invariant": { "version": "2.2.4", "bundled": true, "dev": true, "requires": { "loose-envify": "^1.0.0" } }, "is-ci": { "version": "2.0.0", "bundled": true, "dev": true, "requires": { "ci-info": "^2.0.0" } }, "is-finite": { "version": "1.0.2", "bundled": true, "dev": true, "requires": { "number-is-nan": "^1.0.0" } }, "is-fullwidth-code-point": { "version": "2.0.0", "bundled": true, "dev": true }, "js-tokens": { "version": "3.0.2", "bundled": true, "dev": true }, "jsesc": { "version": "1.3.0", "bundled": true, "dev": true }, "json5": { "version": "0.5.1", "bundled": true, "dev": true }, "lodash": { "version": "4.17.14", "bundled": true, "dev": true }, "lodash.throttle": { "version": "4.1.1", "bundled": true, "dev": true }, "log-update": { "version": "3.2.0", "bundled": true, "dev": true, "requires": { "ansi-escapes": "^3.2.0", "cli-cursor": "^2.1.0", "wrap-ansi": "^5.0.0" }, "dependencies": { "ansi-regex": { "version": "4.1.0", "bundled": true, "dev": true }, "ansi-styles": { "version": "3.2.1", "bundled": true, "dev": true, "requires": { "color-convert": "^1.9.0" } }, "string-width": { "version": "3.1.0", "bundled": true, "dev": true, "requires": { "emoji-regex": "^7.0.1", "is-fullwidth-code-point": "^2.0.0", "strip-ansi": "^5.1.0" } }, "strip-ansi": { "version": "5.2.0", "bundled": true, "dev": true, "requires": { "ansi-regex": "^4.1.0" } }, "wrap-ansi": { "version": "5.1.0", "bundled": true, "dev": true, "requires": { "ansi-styles": "^3.2.0", "string-width": "^3.0.0", "strip-ansi": "^5.0.0" } } } }, "loose-envify": { "version": "1.4.0", "bundled": true, "dev": true, "requires": { "js-tokens": "^3.0.0 || ^4.0.0" } }, "minimatch": { "version": "3.0.4", "bundled": true, "dev": true, "requires": { "brace-expansion": "^1.1.7" } }, "minipass": { "version": "3.0.0", "bundled": true, "dev": true, "requires": { "yallist": "^4.0.0" }, "dependencies": { "yallist": { "version": "4.0.0", "bundled": true, "dev": true } } }, "mkdirp": { "version": "0.5.1", "bundled": true, "dev": true, "requires": { "minimist": "0.0.8" }, "dependencies": { "minimist": { "version": "0.0.8", "bundled": true, "dev": true } } }, "ms": { "version": "2.0.0", "bundled": true, "dev": true }, "number-is-nan": { "version": "1.0.1", "bundled": true, "dev": true }, "object-assign": { "version": "4.1.1", "bundled": true, "dev": true }, "onetime": { "version": "2.0.1", "bundled": true, "dev": true, "requires": { "mimic-fn": "^1.0.0" }, "dependencies": { "mimic-fn": { "version": "1.2.0", "bundled": true, "dev": true } } }, "os-homedir": { "version": "1.0.2", "bundled": true, "dev": true }, "os-tmpdir": { "version": "1.0.2", "bundled": true, "dev": true }, "path-is-absolute": { "version": "1.0.1", "bundled": true, "dev": true }, "private": { "version": "0.1.8", "bundled": true, "dev": true }, "prop-types": { "version": "15.7.2", "bundled": true, "dev": true, "requires": { "loose-envify": "^1.4.0", "object-assign": "^4.1.1", "react-is": "^16.8.1" } }, "punycode": { "version": "2.1.1", "bundled": true, "dev": true }, "react": { "version": "16.9.0", "bundled": true, "dev": true, "requires": { "loose-envify": "^1.1.0", "object-assign": "^4.1.1", "prop-types": "^15.6.2" } }, "react-is": { "version": "16.8.6", "bundled": true, "dev": true }, "react-reconciler": { "version": "0.20.4", "bundled": true, "dev": true, "requires": { "loose-envify": "^1.1.0", "object-assign": "^4.1.1", "prop-types": "^15.6.2", "scheduler": "^0.13.6" } }, "redeyed": { "version": "2.1.1", "bundled": true, "dev": true, "requires": { "esprima": "~4.0.0" } }, "regenerator-runtime": { "version": "0.11.1", "bundled": true, "dev": true }, "repeating": { "version": "2.0.1", "bundled": true, "dev": true, "requires": { "is-finite": "^1.0.0" } }, "resolve-from": { "version": "3.0.0", "bundled": true, "dev": true }, "restore-cursor": { "version": "2.0.0", "bundled": true, "dev": true, "requires": { "onetime": "^2.0.0", "signal-exit": "^3.0.2" } }, "safe-buffer": { "version": "5.1.2", "bundled": true, "dev": true }, "scheduler": { "version": "0.13.6", "bundled": true, "dev": true, "requires": { "loose-envify": "^1.1.0", "object-assign": "^4.1.1" } }, "signal-exit": { "version": "3.0.2", "bundled": true, "dev": true }, "slash": { "version": "1.0.0", "bundled": true, "dev": true }, "slice-ansi": { "version": "1.0.0", "bundled": true, "dev": true, "requires": { "is-fullwidth-code-point": "^2.0.0" } }, "string-length": { "version": "2.0.0", "bundled": true, "dev": true, "requires": { "astral-regex": "^1.0.0", "strip-ansi": "^4.0.0" }, "dependencies": { "ansi-regex": { "version": "3.0.0", "bundled": true, "dev": true }, "strip-ansi": { "version": "4.0.0", "bundled": true, "dev": true, "requires": { "ansi-regex": "^3.0.0" } } } }, "string-width": { "version": "2.1.1", "bundled": true, "dev": true, "requires": { "is-fullwidth-code-point": "^2.0.0", "strip-ansi": "^4.0.0" }, "dependencies": { "ansi-regex": { "version": "3.0.0", "bundled": true, "dev": true }, "strip-ansi": { "version": "4.0.0", "bundled": true, "dev": true, "requires": { "ansi-regex": "^3.0.0" } } } }, "strip-ansi": { "version": "3.0.1", "bundled": true, "dev": true, "requires": { "ansi-regex": "^2.0.0" } }, "supports-color": { "version": "2.0.0", "bundled": true, "dev": true }, "tap-parser": { "version": "10.0.0", "bundled": true, "dev": true, "requires": { "events-to-array": "^1.0.1", "minipass": "^3.0.0", "tap-yaml": "^1.0.0" } }, "tap-yaml": { "version": "1.0.0", "bundled": true, "dev": true, "requires": { "yaml": "^1.5.0" } }, "to-fast-properties": { "version": "1.0.3", "bundled": true, "dev": true }, "treport": { "version": "0.4.1", "bundled": true, "dev": true, "requires": { "cardinal": "^2.1.1", "chalk": "^2.4.2", "import-jsx": "^2.0.0", "ink": "^2.1.1", "ms": "^2.1.1", "react": "^16.8.6", "string-length": "^2.0.0", "tap-parser": "^10.0.0", "unicode-length": "^2.0.1" }, "dependencies": { "ansi-styles": { "version": "3.2.1", "bundled": true, "dev": true, "requires": { "color-convert": "^1.9.0" } }, "chalk": { "version": "2.4.2", "bundled": true, "dev": true, "requires": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", "supports-color": "^5.3.0" } }, "ms": { "version": "2.1.2", "bundled": true, "dev": true }, "supports-color": { "version": "5.5.0", "bundled": true, "dev": true, "requires": { "has-flag": "^3.0.0" } }, "unicode-length": { "version": "2.0.2", "bundled": true, "dev": true, "requires": { "punycode": "^2.0.0", "strip-ansi": "^3.0.1" } } } }, "trim-right": { "version": "1.0.1", "bundled": true, "dev": true }, "widest-line": { "version": "2.0.1", "bundled": true, "dev": true, "requires": { "string-width": "^2.1.1" } }, "yaml": { "version": "1.6.0", "bundled": true, "dev": true, "requires": { "@babel/runtime": "^7.4.5" } }, "yoga-layout-prebuilt": { "version": "1.9.3", "bundled": true, "dev": true } } }, "tap-mocha-reporter": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/tap-mocha-reporter/-/tap-mocha-reporter-5.0.0.tgz", "integrity": "sha512-8HlAtdmYGlDZuW83QbF/dc46L7cN+AGhLZcanX3I9ILvxUAl+G2/mtucNPSXecTlG/4iP1hv6oMo0tMhkn3Tsw==", "dev": true, "requires": { "color-support": "^1.1.0", "debug": "^2.1.3", "diff": "^1.3.2", "escape-string-regexp": "^1.0.3", "glob": "^7.0.5", "readable-stream": "^2.1.5", "tap-parser": "^10.0.0", "tap-yaml": "^1.0.0", "unicode-length": "^1.0.0" }, "dependencies": { "debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "requires": { "ms": "2.0.0" } }, "diff": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/diff/-/diff-1.4.0.tgz", "integrity": "sha1-fyjS657nsVqX79ic5j3P2qPMur8=", "dev": true }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true } } }, "tap-parser": { "version": "10.0.0", "resolved": "https://registry.npmjs.org/tap-parser/-/tap-parser-10.0.0.tgz", "integrity": "sha512-kzeUPvVoSyovAlYvN8m8eajjh1LAJpGn8C3hVIbq7TDW6FDzuH09egdJZMczG4bDdc7+uQSqOlin+XKRLtHbeA==", "dev": true, "requires": { "events-to-array": "^1.0.1", "minipass": "^3.0.0", "tap-yaml": "^1.0.0" } }, "tap-yaml": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/tap-yaml/-/tap-yaml-1.0.0.tgz", "integrity": "sha512-Rxbx4EnrWkYk0/ztcm5u3/VznbyFJpyXO12dDBHKWiDVxy7O2Qw6MRrwO5H6Ww0U5YhRY/4C/VzWmFPhBQc4qQ==", "dev": true, "requires": { "yaml": "^1.5.0" } }, "tcompare": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/tcompare/-/tcompare-2.3.0.tgz", "integrity": "sha512-fAfA73uFtFGybWGt4+IYT6UPLYVZQ4NfsP+IXEZGY0vh8e2IF7LVKafcQNMRBLqP0wzEA65LM9Tqj+FSmO8GLw==", "dev": true }, "test-exclude": { "version": "5.2.3", "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-5.2.3.tgz", "integrity": "sha512-M+oxtseCFO3EDtAaGH7iiej3CBkzXqFMbzqYAACdzKui4eZA+pq3tZEwChvOdNfa7xxy8BfbmgJSIr43cC/+2g==", "dev": true, "requires": { "glob": "^7.1.3", "minimatch": "^3.0.4", "read-pkg-up": "^4.0.0", "require-main-filename": "^2.0.0" } }, "to-fast-properties": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", "dev": true }, "to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, "requires": { "is-number": "^7.0.0" } }, "tough-cookie": { "version": "2.4.3", "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", "dev": true, "requires": { "psl": "^1.1.24", "punycode": "^1.4.1" }, "dependencies": { "punycode": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", "dev": true } } }, "trivial-deferred": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/trivial-deferred/-/trivial-deferred-1.0.1.tgz", "integrity": "sha1-N21NKdlR1jaKb3oK6FwvTV4GWPM=", "dev": true }, "ts-node": { "version": "8.4.1", "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-8.4.1.tgz", "integrity": "sha512-5LpRN+mTiCs7lI5EtbXmF/HfMeCjzt7DH9CZwtkr6SywStrNQC723wG+aOWFiLNn7zT3kD/RnFqi3ZUfr4l5Qw==", "dev": true, "requires": { "arg": "^4.1.0", "diff": "^4.0.1", "make-error": "^1.1.1", "source-map-support": "^0.5.6", "yn": "^3.0.0" } }, "tunnel-agent": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", "dev": true, "requires": { "safe-buffer": "^5.0.1" } }, "tweetnacl": { "version": "0.14.5", "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", "dev": true }, "typedarray-to-buffer": { "version": "3.1.5", "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", "dev": true, "requires": { "is-typedarray": "^1.0.0" } }, "typescript": { "version": "3.6.3", "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.6.3.tgz", "integrity": "sha512-N7bceJL1CtRQ2RiG0AQME13ksR7DiuQh/QehubYcghzv20tnh+MQnQIuJddTmsbqYj+dztchykemz0zFzlvdQw==", "dev": true }, "uglify-js": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.6.0.tgz", "integrity": "sha512-W+jrUHJr3DXKhrsS7NUVxn3zqMOFn0hL/Ei6v0anCIMoKC93TjcflTagwIHLW7SfMFfiQuktQyFVCFHGUE0+yg==", "dev": true, "optional": true, "requires": { "commander": "~2.20.0", "source-map": "~0.6.1" } }, "unicode-length": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/unicode-length/-/unicode-length-1.0.3.tgz", "integrity": "sha1-Wtp6f+1RhBpBijKM8UlHisg1irs=", "dev": true, "requires": { "punycode": "^1.3.2", "strip-ansi": "^3.0.1" }, "dependencies": { "ansi-regex": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", "dev": true }, "punycode": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", "dev": true }, "strip-ansi": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, "requires": { "ansi-regex": "^2.0.0" } } } }, "uri-js": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", "dev": true, "requires": { "punycode": "^2.1.0" } }, "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", "dev": true, "optional": true }, "uuid": { "version": "3.3.3", "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.3.tgz", "integrity": "sha512-pW0No1RGHgzlpHJO1nsVrHKpOEIxkGg1xB+v0ZmdNH5OAeAwzAVrCnI2/6Mtx+Uys6iaylxa+D3g4j63IKKjSQ==", "dev": true }, "validate-npm-package-license": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", "dev": true, "requires": { "spdx-correct": "^3.0.0", "spdx-expression-parse": "^3.0.0" } }, "verror": { "version": "1.10.0", "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", "dev": true, "requires": { "assert-plus": "^1.0.0", "core-util-is": "1.0.2", "extsprintf": "^1.2.0" } }, "vlq": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/vlq/-/vlq-0.2.3.tgz", "integrity": "sha512-DRibZL6DsNhIgYQ+wNdWDL2SL3bKPlVrRiBqV5yuMm++op8W4kGFtaQfCs4KEJn0wBZcHVHJ3eoywX8983k1ow==", "dev": true }, "which": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "dev": true, "requires": { "isexe": "^2.0.0" } }, "which-module": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", "dev": true }, "wordwrap": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=", "dev": true }, "wrap-ansi": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", "dev": true, "requires": { "string-width": "^1.0.1", "strip-ansi": "^3.0.1" }, "dependencies": { "ansi-regex": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", "dev": true }, "is-fullwidth-code-point": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", "dev": true, "requires": { "number-is-nan": "^1.0.0" } }, "string-width": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", "dev": true, "requires": { "code-point-at": "^1.0.0", "is-fullwidth-code-point": "^1.0.0", "strip-ansi": "^3.0.0" } }, "strip-ansi": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, "requires": { "ansi-regex": "^2.0.0" } } } }, "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", "dev": true }, "write-file-atomic": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.0.tgz", "integrity": "sha512-EIgkf60l2oWsffja2Sf2AL384dx328c0B+cIYPTQq5q2rOYuDV00/iPFBOUiDKKwKMOhkymH8AidPaRvzfxY+Q==", "dev": true, "requires": { "imurmurhash": "^0.1.4", "is-typedarray": "^1.0.0", "signal-exit": "^3.0.2", "typedarray-to-buffer": "^3.1.5" } }, "y18n": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", "dev": true }, "yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, "yaml": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.7.0.tgz", "integrity": "sha512-BEXCJKbbJmDzjuG4At0R4nHJKlP81hxoLQqUCaxzqZ8HHgjAlOXbiOHVCQ4YuQqO/rLR8HoQ6kxGkYJ3tlKIsg==", "dev": true, "requires": { "@babel/runtime": "^7.5.5" } }, "yapool": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/yapool/-/yapool-1.0.0.tgz", "integrity": "sha1-9pPymjFbUNmp2iZGp6ZkXJaYW2o=", "dev": true }, "yargs": { "version": "13.3.0", "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.0.tgz", "integrity": "sha512-2eehun/8ALW8TLoIl7MVaRUrg+yCnenu8B4kBlRxj3GJGDKU1Og7sMXPNm1BYyM1DOJmTZ4YeN/Nwxv+8XJsUA==", "dev": true, "requires": { "cliui": "^5.0.0", "find-up": "^3.0.0", "get-caller-file": "^2.0.1", "require-directory": "^2.1.1", "require-main-filename": "^2.0.0", "set-blocking": "^2.0.0", "string-width": "^3.0.0", "which-module": "^2.0.0", "y18n": "^4.0.0", "yargs-parser": "^13.1.1" }, "dependencies": { "ansi-regex": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", "dev": true }, "cliui": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", "dev": true, "requires": { "string-width": "^3.1.0", "strip-ansi": "^5.2.0", "wrap-ansi": "^5.1.0" } }, "string-width": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", "dev": true, "requires": { "emoji-regex": "^7.0.1", "is-fullwidth-code-point": "^2.0.0", "strip-ansi": "^5.1.0" } }, "strip-ansi": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", "dev": true, "requires": { "ansi-regex": "^4.1.0" } }, "wrap-ansi": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", "dev": true, "requires": { "ansi-styles": "^3.2.0", "string-width": "^3.0.0", "strip-ansi": "^5.0.0" } } } }, "yargs-parser": { "version": "13.1.1", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.1.tgz", "integrity": "sha512-oVAVsHz6uFrg3XQheFII8ESO2ssAf9luWuAd6Wexsu4F3OtIW0o8IribPXYrD4WC24LWtPrJlGy87y5udK+dxQ==", "dev": true, "requires": { "camelcase": "^5.0.0", "decamelize": "^1.2.0" } }, "yn": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", "dev": true } } } minizlib-2.1.2/package.json000066400000000000000000000016131371561155300156270ustar00rootroot00000000000000{ "name": "minizlib", "version": "2.1.2", "description": "A small fast zlib stream built on [minipass](http://npm.im/minipass) and Node.js's zlib binding.", "main": "index.js", "dependencies": { "minipass": "^3.0.0", "yallist": "^4.0.0" }, "scripts": { "test": "tap test/*.js --100 -J", "preversion": "npm test", "postversion": "npm publish", "postpublish": "git push origin --all; git push origin --tags" }, "repository": { "type": "git", "url": "git+https://github.com/isaacs/minizlib.git" }, "keywords": [ "zlib", "gzip", "gunzip", "deflate", "inflate", "compression", "zip", "unzip" ], "author": "Isaac Z. Schlueter (http://blog.izs.me/)", "license": "MIT", "devDependencies": { "tap": "^14.6.9" }, "files": [ "index.js", "constants.js" ], "engines": { "node": ">= 8" } } minizlib-2.1.2/test/000077500000000000000000000000001371561155300143175ustar00rootroot00000000000000minizlib-2.1.2/test/brotli-flush.js000066400000000000000000000012421371561155300172660ustar00rootroot00000000000000'use strict'; const t = require('tap') if (!require('zlib').BrotliDecompress) { t.plan(0, 'brotli not supported') process.exit(0) } const zlib = require('../') const {resolve} = require('path') const fixture = resolve(__dirname, 'fixtures/person.jpg') const fs = require('fs') const file = fs.readFileSync(fixture) const chunkSize = 16; const deflater = new zlib.BrotliCompress(); const chunk = file.slice(0, chunkSize); const expectedFull = Buffer.from('iweA/9j/4AAQSkZJRgABAQEASA==', 'base64'); deflater.write(chunk) deflater.flush() const bufs = [] deflater.on('data', b => bufs.push(b)) const actualFull = Buffer.concat(bufs) t.deepEqual(actualFull, expectedFull) minizlib-2.1.2/test/brotli-from-brotli.js000066400000000000000000000020761371561155300204070ustar00rootroot00000000000000'use strict' // Test unzipping a file that was created with a non-node brotli lib, // piped in as fast as possible. const t = require('tap') if (!require('zlib').BrotliDecompress) { t.plan(0, 'brotli not supported') process.exit(0) } const zlib = require('../') const {resolve, basename} = require('path') const {sync: mkdirp} = require('mkdirp') const {sync: rimraf} = require('rimraf') const tmpdir = resolve(__dirname, basename(__filename, '.js')) mkdirp(tmpdir) t.teardown(() => rimraf(tmpdir)) const decompress = new zlib.BrotliDecompress() const fs = require('fs') const fixture = resolve(__dirname, 'fixtures/person.jpg.br') const unzippedFixture = resolve(__dirname, 'fixtures/person.jpg') const outputFile = resolve(tmpdir, 'person.jpg') const expect = fs.readFileSync(unzippedFixture) const inp = fs.createReadStream(fixture) const out = fs.createWriteStream(outputFile) t.test('decompress and test output', t => { inp.pipe(decompress).pipe(out).on('close', () => { const actual = fs.readFileSync(outputFile) t.deepEqual(actual, expect) t.end() }) }) minizlib-2.1.2/test/brotli-from-string.js000066400000000000000000000041141371561155300204150ustar00rootroot00000000000000'use strict'; // Test compressing and uncompressing a string with brotli const t = require('tap') if (!require('zlib').BrotliDecompress) { t.plan(0, 'brotli not supported') process.exit(0) } const zlib = require('../'); const inputString = 'ΩΩLorem ipsum dolor sit amet, consectetur adipiscing eli' + 't. Morbi faucibus, purus at gravida dictum, libero arcu ' + 'convallis lacus, in commodo libero metus eu nisi. Nullam' + ' commodo, neque nec porta placerat, nisi est fermentum a' + 'ugue, vitae gravida tellus sapien sit amet tellus. Aenea' + 'n non diam orci. Proin quis elit turpis. Suspendisse non' + ' diam ipsum. Suspendisse nec ullamcorper odio. Vestibulu' + 'm arcu mi, sodales non suscipit id, ultrices ut massa. S' + 'ed ac sem sit amet arcu malesuada fermentum. Nunc sed. '; const compressedString = 'G/gBQBwHdky2aHV5KK9Snf05//1pPdmNw/7232fnIm1IB' + 'K1AA8RsN8OB8Nb7Lpgk3UWWUlzQXZyHQeBBbXMTQXC1j7' + 'wg3LJs9LqOGHRH2bj/a2iCTLLx8hBOyTqgoVuD1e+Qqdn' + 'f1rkUNyrWq6LtOhWgxP3QUwdhKGdZm3rJWaDDBV7+pDk1' + 'MIkrmjp4ma2xVi5MsgJScA3tP1I7mXeby6MELozrwoBQD' + 'mVTnEAicZNj4lkGqntJe2qSnGyeMmcFgraK94vCg/4iLu' + 'Tw5RhKhnVY++dZ6niUBmRqIutsjf5TzwF5iAg8a9UkjF5' + '2eZ0tB2vo6v8SqVfNMkBmmhxr0NT9LkYF69aEjlYzj7IE' + 'KmEUQf1HBogRYhFIt4ymRNEgHAIzOyNEsQM='; t.test('compress then decompress', t => new zlib.BrotliCompress().end(inputString).concat().then(buffer => { t.ok(inputString.length > buffer.length, 'buffer is shorter than input') return new zlib.BrotliDecompress().end(buffer).concat().then(buffer => t.equal(buffer.toString(), inputString)) })) t.test('decompress then check', t => new zlib.BrotliDecompress({ encoding: 'utf8' }) .end(compressedString, 'base64').concat().then(result => t.equal(result, inputString))) minizlib-2.1.2/test/brotli.js000066400000000000000000000041441371561155300161530ustar00rootroot00000000000000const t = require('tap') if (!require('zlib').BrotliDecompress) { t.plan(0, 'brotli not supported') process.exit(0) } const zlib = require('../') const fs = require('fs') const {resolve} = require('path') const fixture = resolve(__dirname, 'fixtures/pss-vectors.json') const sampleBuffer = fs.readFileSync(fixture) // Test some brotli-specific properties of the brotli streams that can not // be easily covered through expanding zlib-only tests. t.test('set quality param at stream creation', t => { // Test setting the quality parameter at stream creation: const sizes = [] for (let quality = zlib.constants.BROTLI_MIN_QUALITY; quality <= zlib.constants.BROTLI_MAX_QUALITY; quality++) { const encoded = new zlib.BrotliCompress({ params: { [zlib.constants.BROTLI_PARAM_QUALITY]: quality } }).end(sampleBuffer).read() sizes.push(encoded.length) } // Increasing quality should roughly correspond to decreasing compressed size: for (let i = 0; i < sizes.length - 1; i++) { t.ok(sizes[i + 1] <= sizes[i] * 1.05, `size ${i+1} should be smaller than size ${i}`); // 5 % margin of error. } t.ok(sizes[0] > sizes[sizes.length - 1], 'first size larger than last') t.end() }) t.test('setting out of bound option valules or keys fails', t => { // Test that setting out-of-bounds option values or keys fails. t.throws(() => { new zlib.BrotliCompress({ params: { 10000: 0 } }) }, { code: 'ERR_BROTLI_INVALID_PARAM', message: '10000 is not a valid Brotli parameter', }) // Test that accidentally using duplicate keys fails. t.throws(() => { new zlib.BrotliCompress({ params: { '0': 0, '00': 0 } }) }, { code: 'ERR_BROTLI_INVALID_PARAM', message: '00 is not a valid Brotli parameter' }) t.throws(() => { new zlib.BrotliCompress({ params: { // This is a boolean flag [zlib.constants.BROTLI_PARAM_DISABLE_LITERAL_CONTEXT_MODELING]: 42 } }) }, { code: 'ERR_ZLIB_INITIALIZATION_FAILED', message: 'Initialization failed' }) t.end() }) minizlib-2.1.2/test/const.js000066400000000000000000000004051371561155300160020ustar00rootroot00000000000000const t = require('tap') const zlib = require('../') t.equal(zlib.constants.Z_OK, 0, 'Z_OK should be 0') zlib.constants.Z_OK = 1 t.equal(zlib.constants.Z_OK, 0, 'Z_OK should still be 0') t.ok(Object.isFrozen(zlib.constants), 'zlib.constants should be frozen') minizlib-2.1.2/test/deflate-constructors.js000066400000000000000000000035021371561155300210270ustar00rootroot00000000000000'use strict' const zlib = require('../') const t = require('tap') // Throws if `opts.chunkSize` is invalid t.throws(_ => new zlib.Deflate({chunkSize: -Infinity})) // Confirm that maximum chunk size cannot be exceeded because it is `Infinity`. t.equal(zlib.constants.Z_MAX_CHUNK, Infinity) // Throws if `opts.windowBits` is invalid t.throws(_ => new zlib.Deflate({windowBits: -Infinity, chunkSize: 12345})) t.throws(_ => new zlib.Deflate({windowBits: Infinity})) // Throws if `opts.level` is invalid t.throws(_ => new zlib.Deflate({level: -Infinity})) t.throws(_ => new zlib.Deflate({level: Infinity})) // Throws a RangeError if `level` invalid in `Deflate.prototype.params()` t.throws(_ => new zlib.Deflate().params(-Infinity)) t.throws(_ => new zlib.Deflate().params(Infinity)) // Throws if `opts.memLevel` is invalid t.throws(_ => new zlib.Deflate({memLevel: -Infinity})) t.throws(_ => new zlib.Deflate({memLevel: Infinity})) // Does not throw if opts.strategy is valid t.doesNotThrow(_ => new zlib.Deflate({strategy: zlib.constants.Z_FILTERED})) t.doesNotThrow(_ => new zlib.Deflate({strategy: zlib.constants.Z_HUFFMAN_ONLY})) t.doesNotThrow(_ => new zlib.Deflate({strategy: zlib.constants.Z_RLE})) t.doesNotThrow(_ => new zlib.Deflate({strategy: zlib.constants.Z_FIXED})) t.doesNotThrow(_ => new zlib.Deflate({ strategy: zlib.constants.Z_DEFAULT_STRATEGY})) // Throws if opt.strategy is the wrong type. t.throws(_ => new zlib.Deflate({strategy: '' + zlib.constants.Z_RLE })) // Throws if opts.strategy is invalid t.throws(_ => new zlib.Deflate({strategy: 'this is a bogus strategy'})) // Throws TypeError if `strategy` is invalid in `Deflate.prototype.params()` t.throws(_ => new zlib.Deflate().params(0, 'I am an invalid strategy')) // Throws if opts.dictionary is not a Buffer t.throws(_ => new zlib.Deflate({dictionary: 'not a buffer'})) minizlib-2.1.2/test/dictionary-fail.js000066400000000000000000000017171371561155300177410ustar00rootroot00000000000000'use strict' const t = require('tap') const zlib = require('../') // String "test" encoded with dictionary "dict". const input = Buffer.from([0x78, 0xBB, 0x04, 0x09, 0x01, 0xA5]) { const stream = new zlib.Inflate() stream.on('error', err => t.match(err, { message: 'zlib: Missing dictionary', errno: 2, code: 'Z_NEED_DICT', })) stream.write(input) } { const stream = new zlib.Inflate({ dictionary: Buffer.from('fail') }) stream.on('error', err => t.match(err, { message: 'zlib: Bad dictionary', errno: 2, code: 'Z_NEED_DICT', })) stream.write(input) } { const stream = new zlib.InflateRaw({ dictionary: Buffer.from('fail') }) // It's not possible to separate invalid dict and invalid data when // using the raw format stream.on('error', err => t.match(err, { message: 'zlib: invalid stored block lengths', errno: -3, code: 'Z_DATA_ERROR', })) stream.write(input) } minizlib-2.1.2/test/dictionary.js000066400000000000000000000064441371561155300170320ustar00rootroot00000000000000'use strict' // test compression/decompression with dictionary const t = require('tap') const zlib = require('../') const spdyDict = Buffer.from([ 'optionsgetheadpostputdeletetraceacceptaccept-charsetaccept-encodingaccept-', 'languageauthorizationexpectfromhostif-modified-sinceif-matchif-none-matchi', 'f-rangeif-unmodifiedsincemax-forwardsproxy-authorizationrangerefererteuser', '-agent10010120020120220320420520630030130230330430530630740040140240340440', '5406407408409410411412413414415416417500501502503504505accept-rangesageeta', 'glocationproxy-authenticatepublicretry-afterservervarywarningwww-authentic', 'ateallowcontent-basecontent-encodingcache-controlconnectiondatetrailertran', 'sfer-encodingupgradeviawarningcontent-languagecontent-lengthcontent-locati', 'oncontent-md5content-rangecontent-typeetagexpireslast-modifiedset-cookieMo', 'ndayTuesdayWednesdayThursdayFridaySaturdaySundayJanFebMarAprMayJunJulAugSe', 'pOctNovDecchunkedtext/htmlimage/pngimage/jpgimage/gifapplication/xmlapplic', 'ation/xhtmltext/plainpublicmax-agecharset=iso-8859-1utf-8gzipdeflateHTTP/1', '.1statusversionurl\0' ].join('')) const input = [ 'HTTP/1.1 200 Ok', 'Server: node.js', 'Content-Length: 0', '' ].join('\r\n') t.test('basic dictionary test', t => { t.plan(1) let output = '' const deflate = new zlib.Deflate({ dictionary: spdyDict }) const inflate = new zlib.Inflate({ dictionary: spdyDict }) inflate.setEncoding('utf-8') deflate.on('data', chunk => inflate.write(chunk)) inflate.on('data', chunk => output += chunk) deflate.on('end', _ => inflate.end()) inflate.on('end', _ => t.equal(input, output)) deflate.write(input) deflate.end() }) t.test('deflate reset dictionary test', t => { t.plan(1) let doneReset = false let output = '' const deflate = new zlib.Deflate({ dictionary: spdyDict }) const inflate = new zlib.Inflate({ dictionary: spdyDict }) inflate.setEncoding('utf-8') deflate.on('data', chunk => { if (doneReset) inflate.write(chunk) }) inflate.on('data', chunk => output += chunk) deflate.on('end', _ => inflate.end()) inflate.on('end', _ => t.equal(input, output)) deflate.write(input) deflate.flush() deflate.reset() doneReset = true deflate.write(input) deflate.end() }) t.test('raw dictionary test', t => { t.plan(1) let output = '' const deflate = new zlib.DeflateRaw({ dictionary: spdyDict }) const inflate = new zlib.InflateRaw({ dictionary: spdyDict }) inflate.setEncoding('utf-8') deflate.on('data', chunk => inflate.write(chunk)) inflate.on('data', chunk => output += chunk) deflate.on('end', _ => inflate.end()) inflate.on('end', _ => t.equal(input, output)) deflate.write(input) deflate.end() }) t.test('deflate raw reset dictionary test', t => { t.plan(1) let doneReset = false let output = '' const deflate = new zlib.DeflateRaw({ dictionary: spdyDict }) const inflate = new zlib.InflateRaw({ dictionary: spdyDict }) inflate.setEncoding('utf-8') deflate.on('data', chunk => { if (doneReset) inflate.write(chunk) }) inflate.on('data', chunk => output += chunk) deflate.on('end', _ => inflate.end()) inflate.on('end', _ => t.equal(input, output)) deflate.write(input) deflate.flush() deflate.reset() doneReset = true deflate.write(input) deflate.end() }) minizlib-2.1.2/test/fixtures/000077500000000000000000000000001371561155300161705ustar00rootroot00000000000000minizlib-2.1.2/test/fixtures/elipses.txt000066400000000000000000000724601371561155300204060ustar00rootroot00000000000000…………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………minizlib-2.1.2/test/fixtures/empty.txt000066400000000000000000000000001371561155300200550ustar00rootroot00000000000000minizlib-2.1.2/test/fixtures/person.jpg000066400000000000000000001311321371561155300202010ustar00rootroot00000000000000JFIFHHJPhotoshop 3.08BIMHH8BIM\action conference copenhagencphdenmarkrebootreboot118BIM I@@IAdobed           s!1AQa"q2B#R3b$r%C4Scs5D'6Tdt& EFVU(eufv7GWgw8HXhx)9IYiy*:JZjzm!1AQa"q2#BRbr3$4CS%cs5DT &6E'dtU7()󄔤euFVfvGWgw8HXhx9IYiy*:JZjz ?~X,a7UXWMpAH_56I:h4}b]G҂ʓBrs^,5h9rHCpˈ$xI*R.ՖKWbX癧~|?}2\d~OyNllPt~=Օ%TV(׋) śD%<']^o/LSޡ&HEۯ')HR:HP[I!*e#!oY?RE=4}$O5<~Y8l?(-5E$H9D=GrJr,7Y93wޢNL9A/GgY+.<јڭ^_Z.JebTJӝY,oC;f(9/RI7V u VT/.ekՙCr?"j >.e l T 4$#SP+ïd&dOI/?ycN^KRCEi#9 %WYo"owPޓ|KQ^$ l1zc6]ZSnq`{ qkS%CFs"3c @AZRmV,q[G+L#t=0(n$tߙEdHMKޤckH S_eZs,X3? iKz}z Mdz6.x[퀁i-o\R\J'IQHj8ـT#c--|$f89g~QWn9L0XɢkW24[=|UQ1,BPqU1Rlp @U4OK0ᏤZ@_Vgbhb}/ qrO$ԭRoSd(DQnMO[C^>IW_>\KZsYu7RQx.(J7=˫l9 c.t2Hz]<*i_# kҔAjQi~kmq2&]yEVl8ɐZ=-}EL( Gs.RRU;e eG^!腙ܗ(3!6Y5Vcp}Vi#U(P8帀<(ϾL KQ ~뗎I,D+,b/_-i:MjrDзU?@ !~n׬g{T 095݉fAHE~^mKΔMH(欫&Eh^~Ω\B V̜w+O3H!`*Ȩ"hH8fJ`Wb]私|9f{NNՃlJI &Y5orIBÊ!PBb?S)5}= 6kIm>kJ$`5pC8ɫ]F/hCxʫ<)|U_˚4y9 }k}RX[]Io_?VVG8̃t̄,㶺ēړ#5կLHEknY9"?Rm=2#2NmgKU? c(q'bƿ<Mwډa2q2NyYΞgм{uF-~ JbX=I4SFbGrHA6+t(YVrDDC|(gq_v-mIDb<PbH(=u.FP%AW8evȖ Uت;RbzPx* c#C4 8M94? W0@&_7wV ު伆b3Cӧ4ÿ6|k}UZ+%QVj>ڡ<[K1;FO{<ϡy.d6ڟG*7f cIGă: LXbNU{표E7F #}SWMjA$-_$~'~_HO>-O.qYWd}T#kj` $O$/7i,׏IqlՆwS{/\TR"n &.əD;ْivҖWCF80XS Rv< @5h-4 k_B _:d|!2k}ŲxO\ҷ= RVnbʴZ g#5,cZY _yScrq@7C w$9l1U1%-4ŞQRFޝ~ُ7aSu,i\^sPҊ&`@ve qg]}mRFp^=v*UkaCӹEԢY(p(^9 j|9-= bR@4)@v,(\l SAǞ UfVF ܿt@YW \ 2,reeDj=VYfy1YLTԴ1<њt[KH9#SʽlƕX~ޅ%G7Rnזw/۰;5b*QYUxN\Sy"&At5kgcl-ܑna^4J=0%*yp̿g'@ y ٧4>KB-r=.@ S@qe>~,#oEm:]H%@yF*ՙke Aoyѣi"x kVlX'LIZثz0\BK)o6MrA&=D0zUi~ B; &;~h򧔭/A;gMReeЏ?gY8,4#xu1ۿڷ S#GS PUثPRJ'a+[X[m1 bO&ZȂ60@Dw5?g98ryw夫l$i$'Mۊ?pjG)r<ɃkGoC]Jo,b(%: jD7jPBJB< bnը?#'Z~:"X~Qژg^Bwu :u ; կ}a_P֔AnX;\C#FԲ H9|G`f"#>FwIG7fƈ@h˕EY"x=Krzۉ\8y|M醮cS/q,uk(~||䫩UE@U e;d+z%Z\r0P‹[^"N]Z֥C'O_MV 9Zih)\i:q o2*(䢵.'c̶eT$/܌ Ioh]K5ᗚ9iAcwa 3D,v:c1%/$0mMlyw,+:vzc r, ȳ{}LQfбzaXaIG[6Isnx9N)݆2K B eʮAwO[Lڏ$7c_Wzqk`?D;W9Elyjߚ6~RY$E+ȫ͔ %\Da5ҵ'v.մ)$"7d^TUUkaCI懐el/NQ*殄2IE≈T)/kheԍmG,LGd4R>ҷl2dknYe|qM>WǕٵ%X>!#bjn(H_tK-mPQ"Q (Mk_Z,$'d)5[#sl[ SqZ+5PhWbc/h/RViI%d5@5OִIt)lRz&;e6C˼mך!8eqrLK2IZX]-ȷRYh<rK-厥p'&f(ԃ}Aחq? ꥀ^fE'qf|ȞiBmy g>*> 2rLҠiڄ7vs"9G:+s"O~HclPc.;b"M>귶zd% my b7_>$?g1BdiE[M}|~UEP0*e%[(o\žDAkE;q Yq-՜?WoL eF`+Z6eės@ȴq? >1k) ]4d.\[F!P+L>ն<:$p?.mb:I-̆IX3*n)ZŨF1YcP+ѾUz'")rr^6n4o@@#Ăr>^-H#qB~S^2VcCLmõ$*Yf+~GԄC 'Pef< ^ k&OZEf]_$?$*> mޙ~Ͷc嗎l$9& vVU@b ݾ VTE+OJ2D7e \8{np^7#~1~g 'LQA@zm4f_$ߘ]?چsg:ު1̆(~k˖aGF{EEvVYc:\LqHb!a}IWyq8 +A^yg:ƣrj`ĄIh_2ju*1p~9!vS6yMTyZS^DuHX8&)d+ܷ0oԮN5{D9}һͯ䊶јd(ݨƤSlE≭= R:[b7 k1dE/י.l!cY$|4')XZ}5&mtAS:)z嵦5:ipx3uF~Dps##yy^@巈L>j(Oˣ+.4H\=5[3=v֣w/֭!a;dx[8=[$ThI Ei琕G41#N !F+]{l2oW6CZZZA9y?-y~d@NaHH\t%0ݖ ˽9P~ pl\#b8ZWb&;mʿN)Kw$}4.uJ}$dK zsI;&hZƝMkn=j@iUNAkK>$'&[c jiAYiȞȶ*M#*L O_dwԅeЩ1O(0aV f&C\WkI)x`SYqx9~$Lʆ^#դN Kh8Ud+ /qP*ZɒHڳ[7zLVyUJ^r+rW -A}KZ0oM9@z ̈ fH&xeROPA+A+dH.uwPG=UI^3L(gzKN R/dHmi% RHbo4$x/?͐'2cO}RIo Dɽ+@Os'f>J u[DhcKj#u4R~_S +هZ UE7 = PN {v-Y^I}?֭b) /NURzwRyuY9g@HӿE-:^B vCMTPl~|x7~njܲ%ߖ+`K$N,QpMՂZ~ce\ǫ~?ʞ1ˤ:l\z\&+y#wػ'1!z-3+E9Eo59XHȺwTC&*fK,J;lQŅټKo beG_k9-054PPݖdO+1.-R~Eyl6DіFI4UB)>7&1FuI&# e#5vSsY>BisH[%.K: 08r]~ňypN9AOb-!դd)bQTEBkzrf\x8fW"Q4O)GȺvՒZgKk |Xp,>^"mMCt[ߣC|ۢc^/Ͷ!~"-R:kƠq .(* ɱQ^m P@eEZ #0yޮ?QĤ#lŔ"̈TĊ(WpA\l`'ɵiN@+Cܡ 6esLO cb5%;{;Hu)g5G6*Yx߷~cfG(bV7 *)vsX̂?g15z_Xq0۪k˩]OWFÍ#v+deQl5 8h03U~zҎο𿵌J[#tux8sFGqnFs,aXxmNGS@A}SLk~>ۺ銀 >GE^3E]I#%a<^;T/HpoOķl'1[}b$dWNUE߷Ԭ֒I؅K˳ $Wq[gvf мf?g9D3qْU5ϥϤd ]QV6n_.2;.Ey4f+sw¥I٤Os&#Qdۗ1:q<q749"L_ %R')t6nG-]qHq+7_>fds>Y<$}V;F{\#Q(m/% SE* rڃ $̭lOUF9,;|'jq2I4eeUUN$azev$#Y@Pn+L^|kZlcV41 !$Qѿ [^p/&6+ ŀ,֊@o.^(l_:yR֢ңKDJb`U%Qg*AFQE ny ҹ␫J#G+3/NMl‘@$tp5ֈ+Aq?K Dx< )Ɔq ݄J-.PC rժ.} &Y4KBfJWiF#dɖ*7,H|0%cP]ojP)tOJn6:}ɶ#UQɏ2it*YcG{K1<I8myKI]joHZd+ܚ(?r-)ᄆrvPv_a/׀j=i(b |AQ Zka-ID[4qo1FBL;nͳ/(&}?_L߈e 15o&ԋs0HJ v0y6F4[tit>KQ)xg+1ɶo&ƴYkTZIHÒG7_-_Z~aoy61HU R߂er}\Ώ$ߚ_OelO"aQ݃ Qkx=YV0BOUOcg)Qj708,tb;6`!N6oUnREGÈfJ|-G%O|j2$G-C~h37aʳDzFbޢZx c">jͩ[SԪ||[f?YՇN?0f4F`HP?yHZq`jnsCUe sp{?4<]=, `WySf, G{fMO6N)fN ,B~URk<#TriSj+K)DQٕKS]P%is٠=)( 8&%^N#ETׯcC"n:V(i=+{԰ #<2reUbpӥJկb',Gs i@v r8Q8;w-: #Msx']9#?zJO$&P7ѨnD̨PycTwZc_{4SGnT*| ~ʧrn5}r $SZ&l5JQӞ0,㘼v\Oj2=TBvWgl9cYf1* u܃R ?! y{:?(G^.GN^*je~uf40<|lc/"ҿ,|}`ywx]/JQj7j(rXdIهw_Z*W97,ai F/J#@j0KC4B ^εn%Csi}U0 cD2coz M&2/evE(8!ɸ ٛ٠뉡e埘Λc7,j๱88|fE 9LEیБ =K?j73ԲHGj>O}4FLi(TBH(0kSF 0Y)60;LԡEg-AVSrɮQ_-͵4a>̈Jd4ziW3j5VqQ`\rݜ2ʛ R*pnJ*0|\f1e6i%S#Rĉ}䜈6NV,WicS*M?7%J:U̐i-ܩ8ѩeN_QciI=o$(u)!dYWu}f"NJmڽ+(b{d6):aOѓ?oÂOf~uMFtzwSMu5;#W_S-l9Sl󮝡YJa)xz: -."";qVBG&5e_H%ұ4&->;daH 18'.i;Db*H9, fqq6hfakIu*A#sU*Kpfٜ 4j^kQO<ͪS\䆐t;a֊Q-w1·7MK߄Y]R-[4ab&gg%`yWx5KDd/: fɫж$S _ַHOG'@y_PLoĖ\ IR*4"e-Vwj UN]:bBFM؆i2ES+4c$_ʚ{hqq$.ȪOel]`X䖝~y5-ޢNB脅%KL Kxоdkܾi6uYXbu|Y)x̭CʼoyaPT^t㔯ٌ1z;͞~뚼MЁ/Zb6_K#t__QVŜWo N R fոU-5󞯭 J JiD?RWfAG IsDyXF45Oo724<2r*wf݆j'in9H(__҉EeL8_5ifX^$Ct>;MsFw%ݸ viգ+4E]% gDD05$Tצ=8$@zuU呝`FM6e>Ɖv d|ѨXKf[*y1c.jY Umi_jJwma;$-:n薒>«5 U8!@ְ45~Y `ZFpt6W짗&~ȷ& yn-!,5՟ԥW1C8K7#9FBtow;-3ȗ#[iEdk#om=dߝ>s:ot[sѼלv%Q*>6L@'/x_Gԯ7GT0x䏡~`"܎Qܓ-ń9yF(7։iYx&#4 "G 2<Õ-̟D)VsfxbKh՗byM/Ooo,DRʹuߑ\6%B `z1R`2ӑl Բ{OYdk۵7{d*A0,kZ6Lo_YRX' ZML~h. Қ"H0O*i${ĨF*ȊTec>Q&REE6I6FMZSքS!m Eb݇UU#aۆT%z^ ȱzxOJP  9іUZ>PӭŧO gRĵ*vC~tn-例QzpijEI$,e Mw,`Do_Խ9yp) 31fS9?Iw3pՖGsA3Q')`2tXՈ/}i(_t$kf%n%A+Սw 'E[D-Z*~wluY4{CStHWooU5;eA1}WS]}k!Nӓ" U#om#Tt+l*Wd[T|Wb@z_$w'l? Ad~Um⽈Y45 FL AjZ#04go3@k 1WU<֭z`]co$CP)hL~tV5gcC̗, ĂX+M1[\%̲s ‹gEƬŒ(k~!JSVk2'2lQlQl,rURxOn4[5\@K5G\xS|\f <(C5?gٍ,D6!L~Wv2N24f&@PdCK,}SDe}VYe Pw=&c/V;w";YazV"4ʹ:sCM7gTM(.82}3m1djqRj&&$(rYίiZ՜Gc +}i#xf$HۄYھh9gYݞS7P7lOk$8o8PI, fhP( 5T05oLX,=TՓz7}& # 2vad-^G@8 zUc}T2>{WUaokSAFe)T8rv8~m$\:fϫڄj~"J@sysB0L-΃uhTIa2h&#;f;r$aҢ֭#`2C ̭.2j4BYcYYI}<4c2QSYe{numK dQŠ:( `X{Fif eπĤAg(iz %/?,uпKN 9"Er FRlUQ%hd>d|qTMW2mHUV8Pcڎ|K+ȤOq/Hᒐe@; i\|~=E:HaG[a&OqJZ='7 p+7&kG'm->[XUw#n y ՠLYZj7IU_-K{I6wa2Ft+y)NA[B7Ե4kW:yhijPgf)ȯ 9LzokwyF4C˧|izpM,U22?a(%8*=BioL78dP>C<l1D~+fc+_ nhܢV('C2pq3sd:Vfkؠ4-"7HضJ?Eʼ%/-RzYד䳱zC-rA3pU0?# 8tl j{qbZ* P=7,?Bo-F"(>u1a7[߾'@<% B`Mﰠ {{b_ -{Zx[q.B1*SJlGWĞLRּw/嶉SDѕH)trN[| *P*N"+|Zj^f]B6L}D-(aK5~)n%^DHwa+B*x }OfPjR -9jK$8RP8X_*_OoYjLU3 ETu*r' 65LK2=j=Fe[=L֬/FEYn.E5vOcQQaڀ1TTOlj _"0\yX!(iYz3XX "OS jǿт3 {ԝ#2;2}CN Ddb222FQ&goUxVrGH 7ˀk%럗?q.$"#yI6*hJٗP6e$RM[ӖLԜ^*Fy 2(89y[v֒#G,kv j9&@P49dm8B |30}. Ȝ]J.YðOP1 TgDZp]EE,7"Ey@* Ɵ^26TײVYI\((X_g+Yumߚt;KZ ة}tXոD BFfiv|,n$UUJemW,@MtIU4ԕt37j>󟚊C*#ۃ0ٗIIrW1dEJt#!4ESIySr07ׂv5coqp,c%ʻGo†Ah D%2E?wӊ@Jߗ!„-Ő ݱT{9#bzPR'Ÿ,. =A"W--5 y.eq) |1rJzYel]̕!3pKzXPSr0ٛILZoD b7־?X!UvqBN*P]G4eBQ[.x$&^NH8z/LI;v0W[uQN* ޫ}Jr>B丕[sKfr֞'W'4&P\VsE+T ƕ4sIKWҀC<+K$ʪ~U>z Gu3'O%=f -،}..Q8BIM%jCW6K<*GC     C     J !1"AQa2q #BR$3Cbr%Ss񃄔5!1AQaq"2#3BR$C ?{Zi> u*$Gb0]PI ʷTpôXrHq q#g8O&5%l=-;ŚbE,Ӵ2HNIf$u'fsJ.n@$A:qQ:eJ1q Ar1't,qzu % %IsVsBʏWu'z[UM,6ɥA8 ˎ4D`>9*v MWjsNK醨mG_WܤI1RGX0IHsهG]"syqh"1+jz0+ !]Ӱʝðqi՗-.+=GqU-ETy"Yf9P`s 1*W`<#Jo:SjjWvۛ1&=A0>Oep|Gx= k 5 r&_QfSe8FqӋuN䙱|a굤 -%gYh R:NP~|CKWv{Ll ^l ;!eQwEP]Xz?tB)Ąn;H-=r`? gvs=ؐ,5E!y6F4op]lIXi*1>fY#dnbBFqOi; @#)7"grvt$:oHbHf:uƑC P*8GAOғCK'$₢mE,$ VW]G@1܂T oUc.֧?u$sqà&1[znTjZ-EjEUeD˲U!PFg%8:%uYU4|`S5!}COdt|m@䴨|(=@غR6q!H'ފs~rإu9o]W]SY5ӥmt],#4UKI dϨM*oָuQr`Ya[.T:i(TM`8"\UH=OXR2fm鮞PsIiZIRΐ5v33 `9@썎 ;X t9J.V|:KnoKm4tԔ(b(EC g;o5J(o1nk[" wB|Ǝ=mXAxATR`tGYՋO\^Qb oL6Z5MYlV*y)Xf*@ђ )W եQ{$D:c0`e6+mxۓZjqD~( `6yQbzd\e!Oc:}#Mf\F*ni 5ɹTTl$NI8pυm>H[(ef5# J(ĉBv )AUc1T>'`\mV2G@3[Q#oFon*dC y?i9[ ThU7j'zJ42n :ۉ$ę͹LR44B kj!& [-Xp0r8u^x΂u1Nrz^^Nurg\cU*α10bn{^bR ^Bm} ^䖒YjMڦ!"1Py@16.4A}{c]U#rj+JaH!i`ގ{蝸V*GzX0Uƕ*KUHSy7pDQO}E,BzoIHeh͗S<3}zatGMYm jj\%AqPAYEd,'4i$dU#wqΊtEqQ"ֈuN ̭vH-|ç]ֆO5GBX$qN˖~CzqSQ7&Kf.Ujt\VJ`*LI !ٟF;R'؂4"lp vvEdPZy)ᢚZy0U3Hx,E akms~g~=lR^o]+afƋSm⏺v&V.W[*:u]I]0觩B 1x-C+z&4 SFk -Ŗ)>GIFH6U\]nTWHU3(+Q$#`G_nYMxjr?ZRT2M.dv 8 [;_Z?CcJ6I"6s|ln%̛Ư+v㫤xHT7hSnÈ'^p^ZcFf2Oˆ&8ܡc,GˌcipSx`ya 2iN -* ߄{]\]jTsAD%Ȩgkqrjhl̟N/4&/6P`>4` $%CbG~tN-G"Ou:c@c_SMv޽{VF"9Z39Ft/!egK%C@% >c˧j+U0.Lcù|q0z(HD/_+ѭ 1 'Vdw珯̬^[S.M O%k=jih1"/>z3"/1lxD"@u@CߢQzZ-W FMSizx$OE3b' Gux٨fۉ"LͶuaԭGlPU$fHsBaYfo^'xb@2I݅=NF``d m#ƩKޮl4W[i -O4-3'd>a>% ^\Ri7}ZخauBS#n{ʦ %rGӍSMkђF=GFwtAt_te!-]oZ@OU%"*x^tFUUN ='LuaE͡'x}\8?E[YSpqn\m o@% n|p gLv#8 OE;$SO+o"!튇>K?cZE_@5`E3KУp[}}}DQ#Tk$fZa"mتzSJNAT9%Y]E4RrzV,=3,0|`)o),ԊU"N q 0G̶=Ikk4oc#zaGG2"<!$cK$BZÓOݬ zmH*&dz0Sՙ< #`BivP/.\M!Kh]DZ$q:̲!1|ħ#muEWCXtl3~_IDI/P+=5sKԌ'G7S4;fSHx peljh?GP!2}ď6ؖw aIDzL,myFjI>-Ƴ(HAP.8H ):J*Z;m5G)eeFZV.Sbȫ͂tRGl~)}PGvLi ,r~ǿN@P b[qoƒl_I=1$sSyHT( g<1ðcF"$nMnTk{QU+K#")g,@Ubp@?T IA5j꪿WCQRkej#`GݹՀ$s \ܪ]lj+m=wPKwk ].U>t#H#mUDbT41ߍ<#adiޭDDV"jKVt⪆3AuR# 2ջnv2jXjQ1[ن|tI:3P٬5uEVt)c)e_ %1r˙QM7PH$Jø8 oʥ0K-&8$tpxטhs꥜p2h®pz'^GѪkS"$tWh(%w?I<\rR,Z /qiRlбO5RFz$fcd<}OOawuAj~v4փc٧y _'gͣ8GKAZTQ qijQ֥4*`A$xDb+0:4{-|'}= V]t!yhWo3?49\[gM!U]W=R҇İSҭ0ӫs!cS媝W:R$Yh>ǒ6]oj.+X4TԷ)'3%!RJ&Y@Sve*'>=Mp7[QXs{B->9[A ,'mU_ qJg;yFbZ8tu۩-W;Toq?^C#H YH;j=٤HgKu1P݇M d7iUiLc}:eH9Q4.b#|JKͷPYi)]ZZl!CC:`@nk(ڕ&2݂[ImoD_f+8% AwEJk'$䑎(~ؒFutK45E< KP`mzaߎcuJߩ/7GI0XBܮexC5/,mKQ4QO1^wG[4#F@pA=6洚/ }yWOqWADpvt'zqB u** & C~'uhH 13uD,Yujq&ex/uedg7>],]7$X*ב'hlf@OUUei"ƻP. ٵ͂E,0GR03߆ e =u_+Rꥦ TZPF@ `0~\<((Iz<:0VFxI%֚ŷ\io&@@{ DNep*A)h%:w< XZdY*+L3tt<Z@̣=^p&m:dخxI羝aɹ[ uR-szb[#Niہ/XV|T(N1#x9febˡ$zRuRp*|#9q'ujnq#M9k6H? a˛/q"}(3p`T]PTr z'+ߌNjZu ։58WIP2~Xܡ YOL*ٮqʝ@'~g_f+9j Z?07`:;Rj7"Ueq:^W^ xPN.$g5 J闡L}`xlڲ@9:|qjeMKmCw7qU2yd`*p@b3=Cc^jKD;3wE7G k*&ifPG9q2Nj-D)MAEoX+"}dvt꾜96S2V* eCliuw9ӈEsif*WQɍpRZmWg sU,S#j;vc9N: pLorX-y龉^\x6ܣ4u[#!s'T&8ivb^^pNLrh+M5DZELn8rOQߧ5b7E:CwN˛nx2`8+eq'7p$ 1ZJ\cA8ϹV=~H-Ko-XHY$ 2@?^4'0v*K59IB1 ppVoJX)t;L~S[ 5il1n' Sa᭹OW%%m?TK6Țܓ Ufʜ7Z+ !I%W]_M]W="#U[ťs`IౠX2L*MKwۅMRfTD˻{0}i]X5.\ǯzI>"Gs+ɒ|9$ @ /R?/ꯖEMb sc!e~l)S9\,7t6tV mV誺T,)MeKUzA`[.8lC N~,x-ZA]5(jZۺ+HĆ,&^9Sk8R[$2}O_V-~S b\tUį/m|V%W[rLi^u@֕AcBg)#TG!FTJ(իMv]dtO8Pf 6 n-h[uc]!g˖8$=a%D];U$q' 'Lux?DU[Վ4DщM䝲 @\I$vw?.hUB;EtIAz ڨ( rHE!,A c5h+ꎼ=3E+BS3#! YP{sss3,g6`û$߻-tZfPAEctXK8Ui#8v`G|. GvYԌB$aC[bVjݫ$bݴRg*='&Gm?I53dH KGbQ7A%ܣ|@^wfjA-!$I/9\x[ i%e,t,imgZ:5eILUprr f ~Z?MHh\Yrsn(b3>XNv#x[*ĕU1;TV` ?8ZjP=h)v"FAHERzvE`ZXYOc3Zuv8x餥㖒H7iυqzU@?g$~$9aqi-A"cxDG@=ݬi])GdDo+,u(2˩e+#1cqu?SsM&pI Avu4! hdi;Ha>=1ۈLj.—=2&Js3O+FclϿ9|utPjZKWP0;@8vFZI4/SS5%"yvβ5# ˿rGqx_hx8$ZLb"X߸ Aqs40R%M=PV$[DS>dRg'a{6#88."MH xt;ʵurng?6M\ې'k DmiVHdo$'b]v,Q4`qj,>aQ\:?V֛ݪKU4qeAJzcS*\88]F S>w,P<mQ-M^棳u{EE RFWƎGpt I&ҦHsaCb9B X ߙc1;O $)nzM ̭)MYIlj=Fs"V"פ$&(`Jgxą{]&[~hK,:߼w\6 cNJtDTi=hL%y`D?vD̝G`#U;*_k%LTASM(*"~aLa;YE| eF\X]GܵUtIk*aBdR :F!pA:Daf2D^yUKu-KYgELCu{ꚖhUe k g!iURkSTfmG Ɨ埮z~ mפZͪLWcdMñd; H=3 FrIXok[`6ξ^h-Y%%eU}u-ZV9Ӳ ǨQZNi$#xB@jJ szI sWP5<#3S!P6r384Æ6 { Jydv'E $ewgTۀxk4H>UvX,/5kSd\tX]uث+։i6p]ޫ"<Pk]jžᦄʴt6AaD^D:#A ?uI`DAf%{e}`$&.V#qߋnts4)UoEicg"$\(#ۊ;CEՂźO,-?3nYWOT]jOj&G$(%W(v} -f []U&^!ڶW*iI4!z jF2GbPg&~Ϸe̘A!p}תj^[MI\'Tp%eu< y #@AoSmtUcd^[7Y7mUhjtj%ގϕoHPGxB/O1:P#O~YA_ \ISRR^[T5.H.j6`w8YeOH$E YrĎMl-Q&B=8o5|Sb#iӱ?^Nކa.cuo.uZ9#3)\vޤe@e\K>VgMUKVC$BGMqJzHD2B Yݸxi? F xO6@<5t貮QRQY:RTR$QW$3T"n|;W\@yK봽颩Z=p\Smͼ{t<{,'ϒԨ=Ow_͊ [o+o+jYQ>84ޠ@Vs՚xZPI:[K'rkg!Fk+MnxQj8*Bk6 q Ǯ~\n,, j  uj=ޕ%0'H g$?xrC#U5óO*G]*$H$PxVuHep0>dܹFU#;KX,z"^OO!4S" AP6^]6yqG-d%4UvcbIwS:u e:~\lz#1gVú_݃êeGYWSIZ=\[PT(9JmHEoT52i C 0Eţ]_@ȊO@^BʭWM9[ R$$Ol l e]iWt/ۧ p)O^?NV^s<5),q2$/bhT -b7NaM«@;=[tW̽KFfiG,&!P(rw1t?/uDC@cY^5F }U}!g M榤İb r^01IfTjԫw8mZgSw!5r eOoD-g%|O@Y!cE+?äҤANӌoзثQ0"#>žh d l˷DY8 Q=~F ꣢cŮikA)UO7ozBr db+c0I${=0])tQ^d5Et[^ʾb˃ $%V PmWAp,ռɶ硍㩊,T#4Ԥ*pDmy,pc0­rCIDo?[m$FꦖkUjW[jo (6e澎V[%MN1lӱÑ#6v2*8MTGQ~h6[sԮW-/䢺[Wˍ*wU cD*8R $."0k71GՐ1/ 㯿|qeڤea_>sɔmrp6Q%AEe.۪i:FnYoqSb[tʻ1Nszӯ\L5kHVOxUкM!zU9tmU@Htkȩ p}%31ۍB Gi  mm*^(~)( 鑲:B`xԧ #L0O~ۡGTT5#BʶEֶQ fSm47![O^nT,RU3(W*H= M:,Իd7aNOp%Ee/d9׼L;y:.֠TSИɚxR"G_p/}lc;hU*g ZF$=3_dx"/.945$v[gU馾=kҜ#ţ Q805Qmf0zoVqʻ9* 7x*i˓ː{}3]X|lS*pQTnkv䦎))ؓxa ?䦺OV7Niķ\h59VTLc{ GRhujI &M% 6Yܣ╈Tz='reF+LuS9(nX\^5-7jN=Sׄ qJt ~iMn5-0VF'92mB)%߁Fǧ WK 6 2`ԭ0jT,}%\|O!Rpy!9=ON U/OLuI)'.c}UNG~\(fـ}U[#( "wlpuR!|,tM-z%էUa"QyN* sd֫X|#}VZZ`|_OT.Ri;V_d@30DUHB8ȭQ,O%7 wln˩9nUj˔bVUH0Fwqs]K s?V--^BG˾Si+cڨJ'p)Ice;,@x`6ӫUXQ::"bm(PyŪsۭ5-AUXyӂ@FL3{&8;? ^ckmrɮ95QWR,:'VA !iѴk\ix:Q}U<̼&;̐?o*]SK[U54 ;#$x,%X6 .qd|$FvK-dH%Jet=B?0߯!<)0Hi!'}GS9e'܂V|<'b QąRP4ᙶInrn[QfG" UD${!Eλcm'N $C*HapRQAA"Likd2H<ɇh;H$ q?e_l9h?ߺbp5asTmw80D,QṶܱTowp K3x\:S$kV :MQ^C-;Wςpeho^diGu2;EGe7422asS/$c6l5~|m|KdBR;eό2W mV &ntoތpfjSI|u@[K(sZ[y*Lp{}%_mszdZ ew`njך) ޭL:cL]l}=ƶ-=,~`.2z@鸎ṕc:%rˡM, \F L@?SMjyJU$3$aqvC\vh[U#0p"' ֹ7U)؈y׭{ܿ9=g̰܈_i~jvQB$%!B>p1IqC6(Gy!It6a$4),#c8ǿ7VH+ ]=tZTZH>q߉"[MZ5Ѭ?WDCE]3TthJȨ*ɻSCRJb$?D4՗JdyDb|ՕN:uQӁի?n$RM< Jk8l7a"&8=&Ͽ 42Np r"0M !CmH+ipুb)'xEn]OJ@0#GBKd^1'NLVKsJ(Mvel,)&Ҷ^^S]@Rl?R@K,0$SZFqk4LJ03EuqqIJͧa D~FT d1@~VXaԞ ɦ"GK쨭SSVI&\:|>sK].i24%3FRW_Uq;)+lsh*#t V[~H&zHTQfx,aX_|b'PX_)\<;?O_`Wg䪵W329+Iʑ8 o(C۵pv'{LTɔ'_-iBHupGIXԤuqeiRm9~ ]GN$Z9;X}H׉Ҋc\%Z[[u'`6Dz{s~({#p6[uUbQUa) k.>xzuK4C}Q+mjf0+.0W#?\p̭$쭩@ TYJ( pV]ͬ|NUIB|H |}D.K "hu.g Â$(?t8v'.] SgJz@WN#s{P,sJ0Y`H ?.NAcs cH5[NM$weWlSOߺ^gVQTyd!,JBGl>rOF,]j}#׀Q %buEUA)%s.N=c:~Rs*K]⅏,]w~x=}8 ?w~CcOOk̍E\-ZQ$$T9M '{:@t\4*H[u$%=Dҁq;~r ] !W:$Aч^cH%j)&}q-+ u]M!^%E@Cbl֗ gGbm]z{=TOCoE,0VI]ZNյAwV`[EMpsRtU<^ MVUUbb;X~^9q)-bPURO7%zNӏ2D1O.\{ pҴ2)F;aIp}4:-ЫMQR{ !u.jb:1Ny {g2`\.[L[Z)jC@H tG`QRS*GF '߅Zz$Opgۣ!:a\֫Jɰn-~GWN Bv!〞B'GumMB=l9Lp1rvlqnC?)h]Uj\p/6_&?-; SS-4UmEmpF\ S. |RlZiI zvE +'Xݹpcb\ڰ uG I= B~&yQλݭiꛓ=2>$F-Żu41\CAe~9-JRPȿ׎{_UC% c#S35uLh Mnwٌ{Bʱ|ǐ~PP[)KupIT7P鸂pOO~-%=(O %]¢]@ TQ=MPF9%TaWAR*] N1e1K }Pk-rUUaGoBthtTP@‰S;$Ad.?>&+i(v Nν6OϦ=J[IWqXFJ}X%6RtAi]K;}}@Zj-1A9IbbR=,~`t,_U il:S5:ZZYDN»8 :}8vi&=ey j%sJ`XV*:u@U&]aSvv*)C-ΑILY\Ն㓓QO4 ~/v%#~4Q;<_%je')Hc-J'z}z /6uQhҮU*2ԈhN-wZul {uBjثºx'150icPy=zOovIE*n$^ !`Ͼ1F!rL./c [m_I9ZAg&XOԩ_I-?YBGCa) ԫӴ35De$UsশB.]рS K6B:~\ 斜LD90Xᔖd$ j* }WI-G p[YkƢ}7e b{ gRvg¦($*x'dw  %{x1UV#}XEa%߯?p 4D_UGo.br'…o:WzUHZd|cot%UA3Y#E<(k}YfKnk,\yN]NӁ<`.SzN5,h2$| w$UR[T H'xLpN:ڊG{`$SO(iRԼ9 T*Y,ɇn$۫@VLsI8(yF :ߌ˷ LDÅkROMp~j$DV^frF^QEU=ڢWltTy vބ@Z iF*cR}X8=G=ǣiu-V ggRQ2[ F: 0̀pw|p˔xl'C\faS۷\QdjZoTt4E`I2I'roJS|9>Y#88dƂ M/冖٪7;^%gbg)U;doP44PkkI]u W4IHemlA|;DY/;OZ:Hjk!-O[n&4N; IL)ĩĂ{c24ShqյWMW[)M/#=qY I+ke+eL@&#orG("jzX[{ U@Ql\t'>v +i5Bx7y<*5z fB66;$=[fuJ7)Wy{SY x'(b:6Z F[Zk 1#I#UY!O\n:yA6yuꅎ9Ï˷۩.PSBrˤi$ȍ 'pOBq?T8 h2QuB9s"5,M䎋cq}{?znU5󬰫Hw|tW-yܪj3M+;sqɀKt=ޅ $2hLR  %yWVRNIjT~?^ T[(2$Fc߄wK^1#g˪YvHNCJCUS Lt˶b{.:I.vɃ[VnFEE-`v*O:8 Z0n6)[zRR'gI6m S8d)t=wjUN%zn]IdvXM)={c<@H.OE\)䙈Y%\'d|DfkBd%nd WʂIztn u%n"!*K5w:jie6ŒȦU"-8FXmUv]Q'P`>$ZHYh ɩGiW&?,^S 4y3c_ $d#yY+G6ͽ{$|IZt_*S蠦 VIbqDbOxvѯA ]U{*(o-ωP3(euBTmPS U#bq\p%LBGCdFp~CJ >rvc#8iq\en<.ji[ܰcbBe%D!\`L~uQ*-M,YeB~|1)Bdɉ1dg9+!jڎ=/\( ScR)eF3T^15m/g5tq@^tx: ȺrBGGe#q,M`R.-]kySz٘,ORz~.a,v9lUI-EՖ7Ѻ%Jr1cH`7Q!襵׺c[P",Ȯ@;?%T㙲#J|9 _?>QBr8 p_d)*R=8I'¢^+N6J_<$u/I8Sު)qN;?Ca< Q?#>ᒕqt[N=+UnK!I끜 kDS*SMmdfH38Ϩ~_sBt Gi[VTvdQWI=?džTRz_G Sh KJʠG(9%R7f h7]@K@KF(ረ}Cv1#&D v [@aEMr{psG_xG9dMzJ$5Tě|_O3O^L1邊JZHl|1HɢJ[᝭oLFYѽ_,2z h`#}l俐C@\Ve,FUO"*NA 9]gI, BbUQ|2YjSyJ<]S}#d#A ̓ދrQܑa'gBKZY`饭xEAOGEE/A:԰2$04HWHN|TP4 @b`9&CNUm>0tNRJۥFXot*8cVuiMV#'GȒi?6݋..Z+>UI+ zk?YkX#r mbLY3swm'Z-YdïY INd}sb2?n<:BuRI4͂nU7[dGw4Ïew pKBK0AەqWAipx{fq[NObx'  ڇѫSzg|V&4˦2L >zMkH88wSh[K؂sΔrϹ.*^ =Ji'OVRw{ `nD뵯|{vW,_MY{=lP_ Pڗ: @lavAeNI5]1*q׽aVN ./c}`(b5S14nNWW=nU?$s ^' Y>XQց/vIMBGP<-&F(tukh 6v'Txo5lN2FJ__E8x^tt& c"mcrO"}n֠ӄw/:}dFRbdZENFm.L0q 5`z/U4s@>U+)FJ^WXnal;#Gt,{I<o9w}H_sCX2֟`1=P?-(x&~d6a^4{-ƪFbYt#2tVQnr<ыX3x_sn$of&z\)c#/,Zt;z#:4VWˎl ϋC;Eӌ9J3IDIY1hq Mm"L󔿰nڞэystŏB蟧PP4+^B2+R\FakQG^; US`1hKbHx!6Li8 s:[DR һh>US/zACuǰ_FiO_gwq5rkQ/^؞93k|͘SL@R~Xv{>(.9YKG9wMPF_3v)l6j%[=g$-sie ^2ve9QW!y҆F$GpJDIAf7G/bӬTtXßp.)SaS+'M;aY`U撼ˀD5,U&deʝ96V`i G'׮܏{OI)/In'j+-]%p WoQK)ˇ>L.V<8|\[ĸ+` 4,]^o,!i=UJBqm Z 1M4*gUYB}! "b6&N.( 17kSo5i5s 8XF[6dlY'3 JMaATj0g|wB EעPB!2j-3+'] ~Z!x3맀+ܐspDH0@ !!#JvBЍ3. X6`cfN儠:p`\8H'<9DgL/~ZjPtTt*y8g#YMiB>ޙŭ*L&ɕJwW~D#Qg̋Ӽ^pd=-S8JV]v2R. fg|922W; l&[?k:VAZYSWcZa ] !J'p;Qg-`@L̝=VGG.UO.p~ oٲOFW"%6L. E/>. +Z;ZgKt%6_7;3a)َ^N:9..gDG9u#ɏzl#K_AӍC''yhNƊ} w;t&N^y,Zd9un ɛ/4C4OLs_shQunVG8t0cBEW!KyHPF؅prA򽑞m˧u(PwQCSњ,uO}w)Zŋ w.J٦a%.{(KBF]pu=6_1vn`{ו&+}6Qr 1qJM1x߽lmNx1}p{ȐW#,@)Š;#)BPq^BNk I}*ۄ0=_h^q?p02hah%N 9b25|a:Unk`.Q+F SZF鳃):g{kU h~ç"̀RXwߞI {0{"bs[⳪ G_ץ2&nTչTu\E:wyWg3"ˍ}D@f֕l0Ɣ-&e]cRӞ{ 1.$đCO .y&r'Xbʓ30kZo]"c?5Aܥ :S?a,=g^Ҍ KrqAG5i,gQ,Kg2)O{_oZClo. E,NҰ0bYl&r EfSY:rG.%`EP7xJZ%wu beEKvѸx)ꩌQBAn6U۠^Pi$Y'яu>g@?g5ϠzwúM\S vwǧsÚ7@Jj~ lӶI t: C4N0,ͭ5:< 2irfŻ?ZjY,SJb $^macGC?H1U'vdḢmL7Dd)8z$2 C):GT2s?&&'@ -iʍYO0G*qO: L? زEng+1ػagǘ[~-|QJzoG1di8`x`"YMٌɭ1*# TPbe;8iEz[#v~JٟTsd?K_HO 5tFۍ m*HMrݺtQ¥z\,pby;ir~wh"]Nr-'VdW;UI?AC͹sq{0mHӸMS”&TH9pS96}h,^A}Hq&.eSuW3ߵJg~rZqc޽ȥPµ,5Dpji!kaE 3Dw8Zdfw<_/1eİv\?ѥ|v)0>/vyVfkŐ9,XYsO \:/b%2w~(?hD ,EUu7E&Wn'ʉo(yGk`PWgJ\>罀"U]G4.==^^vdن_R./sRهJdĸZ)j) 6ኲS,Td23>‹<\ m9lNDjlh1C쪧<*jS/$R/02Rb&yQį8(LO;[js v7O̊ \R+䤑@t{_ VoA}lc8xĤCq(h`j_&k!P b%Y^#rȜ?G!޳X(= =E.!hl0?HtM ޷Nɡe~B@aLVE \d`,SvقиjӋ*iKUoH˰}ϞeJUG*oE ʋui#\`x) ',Gh*_`blڙTZ`١ [;-B1)wU0}<\--`Hcуر(-er%+q#+Qo›VXQ;6Cf*Ru EКS ͳvH y0V+i 8ޮ} I{ddG?&!-RnV[As`Ac-̧)϶=̰gGK\J^$±%vP}q'rdֵu{έndؾzmkֻT߄qZV*zO!fW<زm8.jX:(?;1JHϣ-q(xLvG뗢Y]?Ůβ*.GbF1Aު m(/<c?;3&iہ,蛊%Y%h]wC>@o;S2]? 3bO= H֏&&HY!bmQФwm&Ui6gM] .@LWyKM - GgzVF« rMl/znVFl=NumOt,|2O1:x^a|<"G7Oߨ d-bd}2D!1bRmA<~RdipoS/k#G$?]@a:Jؘy/L$_yb66ܸNrx+s[l^r]}@O,>>{Y@Hr |^{aXpHbM~=Ӱv!^:Z3o>lWƎ꺌M_-c􊜚XM#$ b8qes@Ug^IȮTrufxo?8sX)֥}d>=j+y燊8zlV|}%+RNzxёd/IǩI4:1hؘ*aQr0c*oN.okh˭v.5] aʝ&֤?4O*E.l52lV8ns !uwwo Nelb?zKrU(zU)Tfut#fGb \p$L9})Y|(Pq< E n1B3L/ù5LX(Niͳ++X( ^$ 0!|?+b9zWxF94*L٫)W@%BmK@)kJ˲9=~έ plZ.E/uQWB&D:Wvdd^!KOq$5 vEEڬ`; ޖ;鰁@sqjCt1_8X#0*0TمҳʭU!;8e{Xщ=+JqRv]m:BWd%dl0gUX':ٯZO·Iș1oJ%FGPQahr ,rugRC'*)GeysVs8g7N&Fr'{exAq8UvU iAHd|J*MfK} t FdSw甼eo6=/B&cVJ5&1T6l\ZƷCAKjM !kyIa!F (LT} n0l00Gm 76*eIТ_Ձ4@M3VeJ/o\ P~d/b^(Ye#4Qs=6H6Ϥl2Zk*/7`lRiLvY3*0t_x9kU':ߢd>P) wL8OY-Q#ZaS8̕C$WbYɹ4/:A:Fao哒9S"@3eLyYJq=W8Aąu]([֌Cժ vAHqN謵X]dRdT驈ˆi)#[ &K/Ap_+F [ssJ0H>NxuAޭ(#k)\2]*{(ɅD{a${c瓪;V4 EpZWU{ )d$Ez oK ti-A 8|^%A#O|O6j|#0lto@ᕉ=F%)2JM& WѪ"̢BF=4G5)&O8tǀYeɂ^L+τ#j5/i*w஀U!dh7@_8WYpyh]$U%mWYwsm@#҂8tE`Σ(=XȆc4M O=y?ZxR kOYy4Et܄$q;åt.#qzI  .(T`0_6'9Rl[E8l34ѭ߭^#SDǾÉR('lU\Y`1m C)nM2XG?bNz&#%yF, =O6Ӧ4g nvjml;r'\sp[r CgooT`&t>E9B%ާ =ݖІH,S;Q ~ιj|Vm0*%}$>`7fƼ醣5ÎR}uTGd=ȖH߅o9J6>\&cK*ʿmm/3SFc $3QpZ|nsaA-1 z7j P囀˵ ǂ?1aSjռ5Foircg5ߓXdG%i/<#|8l|ϳr8.䟝++EI0ίpzhF ߥq# 曰c#.F',{TF^{AMn837Id﫧AU 0Z5Cq~˒OѣbfGٛ''ED̓Ē'1gm5o+wt K\ ة޷06^1_(Z\p5jYO ȉLN󞓇|ݶ[@9ɲ!=xcnXJaZAypsuX}>a//p U&Wy\Pp).Nsfe @$hejb X5LnX1[;;zEX'X.}yZB6PC2Lyho^I{~\UŐ +fy| ߎVD8ZB\夦Cfh6\UfNL}6lq,KRțiG^O (@>.s3̞X}5UDB2V& wt'#퉔yqG +:\{o|U?@Wq~r;R VG u_׬K4. wj^?^t;[rgr&|ӷ=qs< 2j8ʞ2PfZ2B$J-pjwl1xÎ[R{sߕU0W.o (<-\8\J,j͒ ̓RKw+Վ@TU8 T]K%edWLxc-3MHFwx? O~ݏ5P .4]oIs֟l6rPaaA vzm _1tic`)td@;}ܛo.e9k}D$С>ئǤL;s8 *Ѱ( Ӭ0K y3%'JTݗpJQ}ILlVL,JQiXΞACaV6E.J`~e[ҧN1t#1- r)1U^4"ͧqwuFƓcSls^cu]K?>?7:?b9(OIHxxilF?o{%ݎbQs|jh/N7~ "$?&o^)]dYroC=)e+1p5 , web[ P8%A˟~7I攣S0u}ڱɰNIe;}ΕeK-zp B@cő>tc,c_]$KAv߬v2 :Zgk֠u$eg82@Xp8ly<㷈zwe֌ns̈́^èrIix+Hbі?5qmK1i7u[ өt)yTFlCLgSJws,@Q.MQmCڃ%8aoF9s Md@qr&{ױ})k5 3JtQ#A|J\7wh7:srN(O8grȓ7HJ7NERĻ=R_E"LV|pN8t~l!pi4"W@)&jeM2XgLS.?|O&v/Fc+?P5Sr$rvpv~*|Bؼ8 T00q>xv- -n:H.ٲw*VBo&^¾`Ⓖ.PӎFz&aF FGM,] 佤-Pq3yYN0QwiM-w%QN{=CZ׬Y)auuћtWk 3[4#?s 0i]aZe,،~8FL:1^/[EͺBh#We5ߊ7)ւØih8#ֿ~H*% ]\zW7,`靄ioL..dVEܳ&=֚ 迨J7J@k'\h15̢{ ߊ[)sx0H(ϔ TY/L(nj.-i?PU +o/PzLH02'Mq=?8rϥO#.FvfZy)9qEې} A0&~7 {cz5' T|W*a,LA]$E6Fgض>L-#ڿ ~r;;&3nzԜ m7GP %zF̌GSiN f^X}FRv3*j˨lsr No^*azm ̮֚+z)uH0zFx#>JH3ʣl|W,zZYqwk{ +OP`1CPgk`;cؓ0<Qm1ֻϒLb:NMGL GCN/.^Mz~oR%ޯȚJ>V즒ʍkec+@ʠ 9̋ g_86pܰc^K 24d{Sk+{&9Nqlq4-+ŻZ3cޙ|Y_m }JB쮣i5T]7zΘ۠ L4Xj.I>@:܇" vpy+ WW >]At?-cu8\!CԺ."EOg-X){2gEN098i'>_Ӿ,z(3Z@qz2.9$Dm IpXQZbsk%AhGQU4UEc)n3LDuAauDl]0#>5>M]3~"nIH:@=ᏼs lTS KGAݍ62>N >KcF{{D zU>٠!FPp `-NLCb[WQ/n4n6(0I-bH݇4Q9ʤ:Ug(h|Ѷqw)f"VS2d'} b8^ȋyhmnN}@յ6`qA J/kM7q+@nwӿCg$t)Z(O9i=9ǫq5'ۺ}k4D=痝,Wskʄad:On8U >[&xdБp?]+ q$J gCVs0CIt 4<|E!1U-يP*ړKOx#y@,\v;+Q3SC#Ga uS*U-G9[}j..@bZ%2\!hW!# OӽDJf vS#^lssMŧThH5! -,wK~%:1?ٖUVHOzb@{,ns\)a{/^]3`7ˁ@a@X>Z2%նToeM៺mDIh-VhB٢kO .ɥ5# hR0 jY%Jq& j$}^m|5Bo&6?k9*խ&ugCsr5!BQ>`:iƯ[o=DSs o0#(K!ƣnrm%C ̠+."sq;4o)&.sb0č []3J!rYŹϬlPzHU0ºϳ;,:VuesLn˱V<zO|&RuxYɴ"HІi /}Le:lrGvgOʡ@u6i4:pҤ-Ѧ5+&FЬɺGp +xB^qo[ӡgmFyy: #EѺ_\hГj3䭦_s*t fl^ҧ7 AUDHo`&Q  )d cLes0.P!Tw3R1mnc-;x{ ɏ|p.ox@sqWcQg&J7bW8Ѓ+e2OYI ܬ$XG XFGm&ĉo9޾:6ÕX.X(žy }CMS]CL4J8S e }V%s$Fh?},|鳩fswN5^E lyrB֞ tK͞B.?l;(ZJũ<ҡ'e7N\) ژa`bGfl5rX#Eh1DXBבEE+U&hGv-S !0xR,qU*K 8 J#[-.VI7-ݷ.8K'n+۲45 zQQ^f?u,LoDG 8jCЪHyz@>q F5:,QR*[]n:0"n;#Oډ.?zgT=C,W(xGe1^i&8xdˌC@c|xӵ7mRUܻ^߫N'h&0܍}=]vQp?a΅*.{ ?`v$o nfકd-zWp&|xJMK(rJؒT O$6MIJ ypo]1FH'3ޚr#78]*m4a[ӓMb1Of+%qhJU<A#./_=dIhcXSXI ̓kfř sHɵ&t&1hk4s;.} ]Du׀iSW~5; )~ZTpB-;~>+MkH@d[ D N?횲wXzNԚooΜڎV.e*s o<ԧļżq[a=-̇ BT2-jum B6ݭZqbxaY 6gk[6ہu yV1HyIv; ^{T6Pv~ݵ6sFhJ@U$'{Vr /pr"@Q8t"b[Rr3)e8z%"߅j|\0zy"Su[UV'gF^bj!, ^'tOH,_st׍Q+2K,+wm &}LCR8b YX2߈"\7 lq 1}̸5'ēSW+n eTѠa@ ڳ>ʵ-n.de+ܰsS)'}ziϽ(lX]OǪpeoPI֠DP3ZnW%[/ 7J..}25s i}%0XjgjвˍZd"B8-U3BާXp~d1,5)[RT&`M M φhfF3^!LऊI/!2Y %ZhOp4"ywR~%-Œ-g-]9vK5iu?\MWܩvPvGTazXB;̗t>W4&5SOj`-^[*iS3ڻC!1}J5+S 煙;=]t ʱHHO*Z:'&KbV@4ޜ+f#@?U5"sMְ20MI+й VB0 WN⒳0T834x0j_=_‰hh5GN66ؑECRyߵR_k9e%%??`x{);gg.ӵrue&U'<͸WTԯ:=Ao[98NǝMw9l7XA$=SPhIKR"ej3#17jOb!r3M|Lf{3/l Y<(8CmjR][YV>Dna&֜.76^Z~/eTffַ 0{6/k2nhqOgvџVиJYnfBpsѯ&ݍ>P PuM7cRQξ!-g<}D]s/0'eތzn>\&esWjzN&ofOTC=5tK[vgi e$aO6(bꏼB2s ?kezq)ϩ-MAW~WKV|$$xhƥhuE)QǢؾ˴\kds3V'k(> N6 =i24thאalߨx5RB):2L_/V Y6r Yô 9d xǭ^>N *3%/hj$ \H(I, isS̿t}k}Ir4:'Z@07E)P $ە.~&4$OJ*%k733hb#kMVk %~8E0`ʷ:)_+|(:'8Y \omC qſn᨜zʑC\Ø` ,?E5[gn7Ȉ~5wcS/%FIv(0ϟ)asZ W:ߏPw=NB*[s))MRaRE`v2Ԛ\~822NlG4RIdrhԪz3wt2}i{ε^XV\lSƌ,UI~/yf#pdŒ2**T6nQyGWO(3",z߶Dtd p>ȊpЛ-6N 6$x:,gEr=qstVMMJ*x.7*+EǴ-Qїy_qh -%Uڝ }n52K~/z" HWۖXqޡsP輘?-١Q\(y._Q$5rZ'W.Z˷X:xe{`W+פ}H4 O>g8CFv@^N 8=]ӵWEm|#rh\@WOPĥ x# ת4vZ2 b@f[eH^SMf={ 1E5yқ6z #0C2M}tUZ>N \^7"Q]JV Bv,;h~!}T^p^ꪈ C70L 3OH(n$spTInֽ?{v$ 0>f];ws)8(&:AJ'L?ZEĘfxp hA#z?絪m}^:2\eZX%eֺt<%/e%t'rل`ƀ+ L=~7{"Tx71p6Hdv+Z b&\\MJr̢Lc Gp^" "O` 7m\b7f$;Q7 6ZhMfaFk؈/U4MB/ELp1(_͜&zv?䪍5'H8x$#dFk'Cr~-'-y <uclXXuj6(ߡjKjT ~o<[ƾܳ3?6L1lyӝ۶?hRNO{ s=A 95IIVS'Nu3X[YB]wE6scK,KEVSQȄ~cԖR$栆T JNdZE&WԽМHX0abe׵'H- c>[}vRNN@]ұzY62 Fyű\w[Ņr/#9kZ0! *ZF| @6en`I+,iBw&Y̗??]T2^.> o2q&CmD,V*೔jϪ(vP/~C.HFs՝Ŕ\NP uӈzDvlU_efoDv=:YeG|ZM0ԪuѮFoZf7:=hpX?+իɺLN:4D4ٳĢbm /. ,WbVmy,ɧz9\/{7L=BX-uVQRVh؄3j=5_^C.<ީ7O99H)D/0ο<d)M\}){zuopc ~G=ċ_\t.zþ '+A>NKgt)A$eL2AV[ ( (SYk9"3LTah ňp5VPi]sՙ9Z:n`1ApRr2n7.TٴD^Z% q0nU/ti)݂Ic=H8JYR$p얝!;Ix}YښT/ W ȥ>?bv^8G1qMSzx́-f_h^O[}f =y{LS/uSq7@| 2{k],ľ7?rgi0Pl<]c;zB^e޴B=nH?`8?#uqΉw9zUTNU;1ٽc/tH;EM%RRGʜǏ[`Eh=g\@{ M%x`NFWTLtQ\ZVv,5lq˄3z0~_7)GB,= C=,W.vú.(Wq <\_tߎ嫒L:ޝ#C]*7ӄXb,FߌzHRZ6.Ro;u\j*RgRPRkFk6'w=Iu(=>\_78[(\nj}Q"u \e6-c2;%UpY>y,c>#q:PRQ&8m3d(*|Dh='%McstEs’7C5iO7c#s>]Ԑhvg2'Ja6‰H(rLk_ȑ"8bgwH˯mޏ8~P1d4d syUYamAX4J@ eamѽGbNg YriLZ<, #;Vʫ"YϾS ;$+xajq̫v} 5]ٍw쐊 @ Q0nq~v~u.7cʗז5Va!p؂V{(z0f5+0|۞U^jnpQZWzOh (gf<5'3C7! %z9a: /H5 gJ_ f d˪@rt"e q°M p/=D[oQiKԊa?VLKsM"6xAg*~KV.!!h _u,Zz:9K`#z(KT^}c_ F M'wp@.*(< 1׍4GQ@bR :`8MJxu54tzJ"23w7Th-rjo!STM5`~7^&]/uk4ǹm}'b6ٖ>h=KLQNe -:0M!ߍ4p֔UWGD GG ;ΫcX,|tP#$Y Gʦj yԆC ˉUD v> `QQD?s|9Ehle/(ˈ-Ӥ7ܵҩZx )jqSKdӅ2/"içr~?H Qy)0ȼwe iwKr!:&\JI'zN~)a-2E~k=`-jhا60EoRvmP+PeһAFb`lnFg-#`(d3~{eቺCby/[/RY:A,^\ǁj"܎Tk,?MĎP2Lp~:=޸S Izݩ_"`hz鄉ʥ%u4-4omGJ ;¬l^)T8d -x+ p:?K|h1QOe>UI|2l$}CEDV#ǡil5^(mWZxW\ &[X@O^rDJO: e\IT#ӎocvATQdϧ?qܻGfqj &ϟbSz bb..ڗ@^`اa 7j(K ,ʷ#TziV =Wz*~v_Ӝi9JWFM;t񯴓;&ļa駨xXigvS1@,ӳQ9iW .;aH- C*8fij8 D\\2"pj Zg~8_e:?ʄqpe K2qI*V $u,zm3ָ 2_gt7+tkPHQ:>r\j4dʎqF`@%0%^LhuZite.59a^c .:]! `E+e_}~V&QQHzU/0_U1\hln%h pѵv&@p-F; VQt y5z/<`EBq3Pdklut@-O2RL'c"pMQPZ]g.+ TU_bZL߇hIp#\ǡ/BU >dﳔ-agcVYTs۳ER >K2~ӿ˼4}UJY*s=Cw+0^Cqױn:*ܖaDj]5~Y_aCYISЊ6L`SluýxZ*ܲE1 L8]5?Ԋ,~m2p-Ļl6-WcEgASKz}\щ6YM %Ua1<[PQۇbݚ1tf1+KգMĦu7'S1ddMB&T|nJTq?e}JYrnL~J l7Sb&⮂HlQQ;vvJ&zc5-)<i/!lʾ?ZJ'՝* )^А_2ڕH񦥞d#_&?%xzH*Y0$x*m`J *7;37}Z|EsK<# #/O&PZ? (#V|^_DjH)bwhIݹC8Ce`a4*yp4ױh~6_T͋.= )PJFEFW@n<߮Uŝe V ^hӜՐQ 6}`Q0~'$_]4j:TgDnNg#g!0S]u.z UU @آmؐ>W0{LhVItvеWMT@_Zq1|*C{#g|hYNu#FB7cWpɴ/ǠNکK4!#dXںKk_Ȏ1΀-=I__t&mEJF`dr[(p{sHDzJ7PGv̠:sa2n5ܠ궎%1S0!ɦL5G%Oͼ 8'8mz@@\WuQ)(?B+j qU3H$tfQ/bd׹xKw; A' CY.l Foܴ ۸@&d R45e 2F>Qxm je9⨼BF༊N{]6Ï_~"|C@ QJ&cȧ=7.쭺O]/!9gq㧗c6`]K%; N {OƴLj;\񈹉.T%!f&ya?&W:g,gvAqeAFeLtKO*͒p~<$A||Ө UWyAs?G q,ÀS2Of ";4+m֣neH}TN ƈoY(AXO.\<fP-lbRB*؄r{ +͑glLP9"0V9Hw<[/WqPT7'jnGXF?&KvA*ssVm+).2TDuR TTsW[㖦O3-Mk;հWD<~OO|(\*$T]FwkgO8Jy7&&>oT(VBSJ~f[POa ="ʜ3p>5Zۈ\c6=%TV44ӛM)1M&4=%O?" 딴shv~J-.w i0Ś/[Ѽp:}Ffx#x옲RY2ng.IA*rs62> ̒3mS\?SPq\0a~VT*!G)8Ӗo>j+ijgϖ=)/qVp.02mHgV߇fJOsj::Z_M"dfs%^TTVcA1Mq2d[I v%Rx ޔL+fN wfWIX 1v졲PŎLqb]_/_;$Lli[9""ԏ|[|n%ZRǘLIZqUvx[Am^6iJAx9pPimAXنSTӾA>#&-㛟}θdɯm*@n!8Nף=Q' s;99͓QC zڥA]S`2Sg7CFV?{=fI-)&HɵkX8v4M+/"5dsH#8MC<%zρw0g2 +rA8aK1?CLb3|tsAłgb3L˰Uz@YMh,7#f+- <dO6'skrϑNvEd07d` Wdf{'[eRk=|݌89]#?:  F, h+p2'7Krk6P8(Š14" x{9*Ğ[Sr$!5HQ#/8mAG7~ ~/x;lzfT>'B9g8y>ݘ5ga}N6;552e)H B\lT͐; f?9" s&]*CQ$ z."Z ~TfÅ!u pPF0|@C \W %^8$%#D*7qO漭Kbpϥ,2+ 6+{rlidJw#G֑_s -[a{,J|!LSeRSpWfiMlzףL^dǚSXB[8I aĦcY:Q?Hw(܀LΖ!c󴓨C8 ]G d_8in2GEN\(Q͚UOS'FȱS%_HRڰA 7PHfp&?Gt^\&yvsطk*D6VEf|-'RZO3 (k'K rg+ySXOVLhY*Hv n_*ΥC7{dĠipಋ KE33.ar4p[ҶLCMVGXz,("cQ2Y.T%S9Zhi3[Ox&; N'WXO'ë6"ܫ:þ| .*+Pq43^ƒx'[HjR04>[G7DZ.1qNjҖ$2 )a/YZRYUܭ"Ƌqi3,aWyUkg}Ό 4$WN*=OA:f&l"Ȼ[©HCҎ Q+;FѷQnD]- _5wi4{3l->b9ys^̱Y6 ,Λ|cy խPK僱N;b ,Mp~kUo29&jE^lWmf ;Fz^%dCs!)+O8zDHylMA·_?we6$k^ٔm98WV>IGj<#ͶDWK,O2u=3^T34aTᕥ|J+reDs௫/7 @EllPJ.Xz 53~>snП-X5+5: c2ab8(iLJ /mEަ#ʹ3; %́B\D}^*NKҨlMgb8 N[ZbO\=di͊t0 Y6'Xkse 8Y(> *Kxu!GZ~^xʰrrD yWݹtNi/-IZۡq98n.m*{S1'># w0xհ{0ف%r5K`uCAr!4Z ߥ J}nv eK*3p%ڰ \DOyZ伤b7a9sHZa!Ƈ1pwz?T,^$$/JSd*bFa{ AGp3 Z_Pt$E$ U\v&6F-r5w~pۜQw`IQF~Cߝd\|;r3s5)' 5IVyܕgj@aJa\v_o4н`Ysʮ.`ROOP,]+ pLf9ʶcwϔRمGKY!tO١^ ')Ig_K2ljRɿZ_~à0uxvos5.m'%"S-cv潜{=;grZ 3USW pm硒 FY6 8vd!oyX!fn tutYY`RgN杌s& x,rc82t_ecӡkȿ]8IU66Ij볊lF]%(/ 9/cc+ ~.mhˡӒ9ȗ35'h͜L|m.R}iϡ3_GDu"1PGw|I% scx4jeL];Eb\)r0d,YL BIXRB1R>6<:ٺ2F,bNzf4 -Qc$^8SáT|O֤UčX\x{VU5-cd3$M6} aS?);eR)sV'1kz}' '/cSklq3!4tL8AQpRY?8bN6@ݫȂgwxXpiy֚k^uyeA2D:h-walT ܑ1z[* frN',Rb(>\ZFBG,[88twԆvTcE*Ɂ8.JmP;Ȳ!"mh9lÏxђD/(uplgYܦ_Ǥj7gL:4N_F )7F8.d^陀9)J"n:JX`/[.M!ɢf=s LgݼVD .irr?5^! pj40q?.xr`x;UVYՔYU}iFCn&R:/dVSLE AO|YӚFNX` r9rt:WVgI6T"o6gF4|/tkSΪ"´"g7E;o3EW0/ʅZ O4uAuC|\@2*הd>.ycPl纉K~DGػNxO]%!l882fp"K "lFuh-͒~N3ʡ=N)%"\`o>}&* |F;Du@1c}NeF4ȩ;g5dVAz {64m.zhփێx-tc1aæo)nrfvneȣ#L_?.Np1aS*;S~ 8 =VR>4ZvW۾xJ`3*ߡP7/CUC hBQ*o6 ߩ^9 pTהR=7fs^sr]I#b[5m~-ED9dB,jzy4DtiWw޳*\ZZkزgDaV{C(h(W7e_,U&\2(.<TK1|}l:@Aw畽y. e:{"<):< =''E[Zة؝z&& ͿUG~ѻbo"F-ywsm9Q>'eGXmbHUvi k: 9 ?)7ЯNWWGlM]YpZ;W1w3`4*C;Ȉч hJOOdʷSR'IUev^e,*׏r g7V#:hIF\yxWiL qBֈ5 r(AS,|relLMf(ʔF[ 0c~?YBxƝ9FӿFxӋJjib>iXmƒAT!fwTa(o%d7 De;FX2d3ՑKL ̑1=} X Z _SD02֨sz\IԎ.C(rL{~L,4gsVxv|ȵaZa0|U՛}ݱ<q L3-W&사nt4X˱+W%VsњĴ_^?.wsWHDt_g>lkw3PC[˷' z8}kϒr:m|G\Q!QA Pp_k1عy+qhJI[y2ݺViPzM~ OWQm+KP5h:N{j;SsJ$~(heQ]ZQpFOOZ-M<錈1dX㸎j~{/.-o Rs ʂeE.ĥ1,'l\\:Egu uoPESpb,Գ7u?d[ \ފ͜qBu> &qS=}4USɧ v'LAEI3~ٜ}LF BܞA&J=j sImUT|$RyvШ%آbyV(kTrXh&+#(*Dh`5m,-[A ,4͐$bp\H]Um6s۫ר[}elLBb;::_ ΅*g µY-u4l'$dL>2%{U7[D^$1Q*Ťnde)⚣ \lTb%ƣ_ţTGtvAvY"f{ZU{O!ꫥjt}]:#4 j\ҟuuz㑎١^F_X6i&V pi:%|5б+%lXqm1 s7_yQyE[A\^^ o .J&L`p9~z֩k`ǦEƂIZJQ۔FDҒ##pn>)jC;T0']PrO:*3ěʸ$Gͣs{wMٙq5?XZs }VVwNӆԗlW̿4Kr#KrXV7"rdeȜw@=a+HmG)i&Q&K58[{͔0eƥ5\VT; 8dd6BKVeSΚnF_o*>&D&*sRO1绱 u&--U9+8ts|9~5OX5x^׊<5yFۏUa,*Y홶G ֵA1kPRk/EH6ꨋ`V~Pqrd`DG+ j {DyAig ԗ0^t(Us[QcŲ f6L3"ŽBH&jsx1gsD0Fvm9^A[iD2%fBm:"1x"/0+)Wcs}Mqt|nX@,ډaH!AWyHAkx\;Ie\d̞/ (|I@_s)</l] mz^/{Y)ҺSS2j< h*&ߕGo#;ctH s]]J}߀eW:3~4xVFHoX֌p>uտ5,ՇIDBZ:Z>[.:4Z D9'R.ENзݡ]'W6[=|qFwYn3ӡ5,>s}{r+ZR騚 #y(g6{vN !ذsseMI(`*D q6 fL&G(Rdl!"40p@!D!S0$l`(wH. ʄC]zPnsso(t8\[nb y8y_ <QuPFQ}bcU?-o]ӵA)ň \lJ|`Bci5\è  'jsZeХLsEdN hcsTFN8rݔTHE]KLZA%QQ h:"[7A°" =dB2g4G5 ǭ՟/,J2 )/-bNgհ8hL&V"Hv􆐍:ʛ;%ZsNe#{}GξfNTqTi)Orv*XO7l>$ڴ khEL%v6(q,\PDnxLUc=T<ЃTjS0 IEa[iը8$ ݜ$ްsC,7 ;mc  rer`S= πJ4/Q-ə@2HQTdec8<*/[OJ>hɻ+r3h.>}5,5UC8@I-UgU$,4 N@ 2F!ol\֥Kˠ)\-᧊bR2/``B [beÆxBʪƷzjm/#;OqHJϘm*R#V$h*$"\ÔXFw&n2N$Ui{8om_RLY-ԤN 7qw̄(Ӽj&Wb> +ci VFj]I|5 4O7fRi"^GsP3Y-)5'!5E\PT8,^m{mukUqxBj D!f N̫I v@"6G)˒QvGMokFJ5pF2bPN eZxk^3G`|{en\(dSUR)xn]ju7I2Aq2ۑ=KѡоkLiE@0$d)Zh3n`}v" okNX~sLUH ψ}2y&l0o]V?@Kꎘ8U'n_#Ic&zFB/$&QޔK3 ڟ9 Qmیt/ >(H[]ȍX)? !QΖqդ,~ ; P{@1Z7k}olG^;lY-l TO k~yE>--LҊ9SLkR2@the˴)г"H龥T:h|IHG6i\mJ<8J7aeK"zD ֕b(j؛`ɋ>H@VXUԘYmS3qe"RI;ʨt^g&ֱP,K: v(_1sy/;5<1uL0P0,ty90--mEGgP}IHD_FqϭLgJzp6$Dj b%JMp@TUkM'm{gkB}~o)F"z?၎DIYa62k%;OKH@?n@4HƂ.Ȏ3f$f= 9?oYˋ*_.}r΄k5h]O58Q]~,ckG<lfiS.h2$}nJX8>zrwwTi+r]ӅMQf)l*>ѯ%@v{c9e' $H̥VA;@8|coMü.=c>FCEH.U,i( $3BO!MLjv?=Ӷ v7D̎bȕ#m Xb^]?2AzJu -Mj-tVgȎ5Cspχ( 7NoR5:Xɀ$cI|H)=?8 pĠ詇N6;Sh]4Y3đo_me@{Q9W2#μ͔GQF ><ݮ{Y\.젲D-n%20RZ~~[A [c8r1A0PIBԱͺ`)cYnk!ЯwdlTgi%= h@|r֭߷co3Df V=SQqp)=;ч zN>F,)$ȮG NPJ`ZQxivPq'3A'dP#}i}ށn~ xG$+1,Û; 2ch&X%NkJS6S(F"8G˜\[ :|-JbiT4%?fORVf3*EXO0Oe cˌK2Tʩ1͍3qIDoϬHe2:G̒(sdSM(\Eiefd`,eCKsTZ?Z$3OwXnAԛMsi^ty?>Jw >̓3jkT! }~G0ʮ}ұs?~y{9u]X3)h.[w~?f- saq*O4u ' } E|̀x7H>3=Cſ)T^:MlrsȆk לH%^{R*~e5vD)92Krj7-oSpn[͘o¡,43H6A>sV\[0@Yf_z)Zgi7bc sYfcnYʞ*[rz ƖWT+ϔfLPb9Qy;umjzDGŤIo2iIVq#\SC)D=h]1fsXF0b]u7:*G3UԣH+FNGg6 ]ɘ  @P+ @*8S ͓\sJ]Z~J*aPYzdxxHc?5Ӈ:T3m^r4xFB-?[dv= W hfuy~jυރr>ge4 ǃN]:d@J8hIѨ"?ĺ=egd O?b#KT%*\rӱn?]Y䳲&O& #qK"b6Y843! Yۏb7JIV;d5CqR~ O ft.#WOqe};NY??D@H)KWctn*\Q&&q.]ʂQ(Ww0(  =ROM(    ?.C@      AeVD3&uΚQ/BGen-K(*Ե]*Km`~2'$I\IcAap=4yh#,exSR36k3sK$~aSZ-\-.4u3,`ҲPSm&o^(7E?&h̐klԱt'Ǭ@4w9ޚ#^z|}4xR銚Oo_:aac~=#@ e'Fm"\ԫ}ktS뭟?0թR/-!EC|}B݄A8^ZvE/˴D6QRܗM<|2  #܋NaAsYֺmy$b&Ug5BCtm u> Ѻ0nc!i1l]'\sQL78Ozݝh%C?RSg11iXT#4!Rɣ*yLJ+FfInA |:>h|ǰM C@(ks= ?R3!㇐hsɕq{^;$g=R PgF5 t'A%w(T|UK,#'`t87[_Lyn )epW W@]1}H[jӽ1}}/֫r ueMrdC7QEy-2coT3W85Έ5jL`#UwK._肤DrxFsMX4E6r:U%؁+3J3ŒxWs&AoI /qqk2nKw21>vI'rv⶯9lԡnOzܐs]ϏƏu8Z[UqQWwLGGuT/5p;Jbfɑ5 {nq;cf@)yٷ"S[){Ù7ֿ:S[Z?Iwkֲ>XO~>0!f>i^WƬWqQ!0U2~˔.PuH+Kuۤsݭv1\3%Z<sus[+i:s1tibjBGCL+fЋ4(9O{-*9잝ffP0PيdtJg 5-gL>M*Vu0 l8w%("vo.V :ըfQ+;\Joߊƾ3Ka:4d߼Iq m}R-([^C5qgt5L~3wVԾkA,tRs";qUe 厸ty2\zFdVba3D[{2IB+!(oŋLxD?+]7"g^ϕ;ERrLv Dx`Ւhݝ&K3guaq7`Z,"Ml{.ݦqa(#=s܏OBN∞2/-2UvA8C$rn"L3^97<$pzjdmWn; 3 ,P6wc7AA.}B^0d$0ϧ{"˂{/Xo&ьc=wp?ZdvQZ{0x^bV*!K<(S>OUSF"9a/VRU+ҴvQ"c^kYY"mQ$qGC(ybO2yD53S_/8iɏ/lOՀLoz8j*H`p)w!k@WmQ\ZG *8|-OX aBV lp"-giTu0`V08_NtOqR -q>;x2AlDfo1=UV_* USEJ)|~0^Rmkil``p&LE];kI%Vʆ%@ +rſ(!T~b"0?BJO0O(n󦏓/uO--@`;>a_]#Mt<ɞ+&EB"ҸHC{{z| R}%A\a.~DdWh9++])f"} 7W'@Ex)yK xǞ:-O*{(q[msW\(Ulc'Dd^LewCL{^韛WzR]7>ӅA 4A+fP逍qo1 by֮ Zpmpx{Ubeۑ[GP)ވ t+ylyu N-S-Y((MoBMћf]fD O$"ӊ$R"a&acLg :QzevK:RP]`lRn/SRQZ.[PLCn_0ioi[: V4zؘbkᛴtST}cbb#<Ц,!iLBpy٣3:d9>'.epǴ _p~ 6gf\y' c>bY.G{+~xC]RyW<67Vq̒,H lxѵ'}vzkS\!nw'}XOuYkQ'?7U]جY]T7<PL(b{s'?+ME\nr*ax%89uBJx})}tp @M_Xf R8<<.ijIA9&$CZ|?2pBHwRdeUkc_)I/w&iϦ}x(0׮u׃Tƣyk[] hh% UW#|iPa5g D7޸NK)#Oxk͝IMZP$da&6K;xRH-nu암I#CCl SSu0.Bi ouG\rt'T;uؕBqq5ML@^kqT51ץ E= ‰y4#G)H{yw;zN9A+e}tidiV}r%zU=sP*IA ͎UCfB߀+i7k㻶%2^vĉ_+$m)\I#c/]p堡fd?YOuF[UίJG.S@@]d.ގb06(-q~qWRnϋ ,ƈZOJ>-|sRKGsE2ca,[vh̬#g\I?3r aP󋑔j4x HJCbWpl p@  ^_U6Gx?Wa GmBI9*Mcy2H_q~lޥ=ACr-D9):)H.RfmEW͹XqH;_[z:Y13!zy[M -G >_:B'݊t2^oiw 5Et΂CN&~,O/S7 !-g@%css[ m>4ZXX7ؘiS@n>/z=#cϕ[54Y2Tih)#7俟H7[[|pC)FawL8 ZĊŚYw*!1ӚSQ{?sńmy&pS KY#MG9B~J#$: ,?`IIBM7, -4'lfz$J{јtr K-|@q%AF{Y]i0ie}HW C4:Cew,ڦ1Jt}s=>Ta4]./1P\*R. s9q'wDž@\$4Ti/1m\1+CT^3+2|J.Xw/i#*<|}so#t5J_q}֭vR~+WYI86&RT 4 B/0H>}2E0U X0C4M1DoEWmmi:Q`j tZ?(|o1:@}CArZ@tDûkXr'nJ )@cFv V~%qF}Ա8]9ƑbWڄ7 Uz3|@gӁt.'Y|?Kw% ՛2r脰},⅃]X+?<&JF}j q!'PXmC>QH6$t0Ϯl< =ƈ0I֫{UL32'1XPQW{^zYXM{vG؏c7F],Ih1:w'"F6'X8, i?m2D'BKt t)#nR +;[ɪ w0pUqqUp#qwZꉓm*+BfŹ#-+Œ'{ Cy#t=>ڻ\ڥ ,4f jF*ӁZC6qр%N6aQ7tb&awm]K&>p[w\*MYz$>E2> y它LDF`'ަ#٠&GCN9TmpC/w aa 7'O(jRXJMot΍:+%}y+奴a[' ЮBo,߄^GoϤ~WFݓ܏m1ytPƏL8'(U*ol!4+y["CB!ku˫ȋdLa۴_7@;y@#\̓WYhNAh|'L! >gbhMyQl9K"5XآR4VO6.V˨UM{9 rkEn<̀lHa@+M݌nYDn x(ި{kAY>U]&cn_AOV',|>7d(E px@QI8Nx.,GS ײ$A9jK,YHf* 3)W(ky+)4Gp=lƺ#"8x *VSłf?yfun}:!ED*)ZwH1,+SYT{MyP .j-ω%Ή<tP066ӣm '\]mJˤ06m)$5{'v13`p.1+/?a ďl^=Iƛ+3jJ>-!PWw_ ׉65_\xay(:[ѣ&|Yb!:2aqo{VS}ÌTCK6bhMNڝ0%mѿcQ"K+Po<7ڹօ&2jb~(ixo~p8Vw_\T2eVRHrɈ 5?-ޜmKJ Jt ,pP|/KTIS&5O c\EEwj" <E'XJnP0^=1rM̺ Ed{;}*p W(⍟0,uИ(XyEs$U hX`Sّ<(DZXF<@j9%!^ +VIDbuw E}1 #7 M 6ZHsJpI *<;y { A#cQ^ښuV^Ӳɘѽ"kj.H'#b5k" . ~=Pg5[`(d] m#I͓7]aLL>(xG~~xi,٣w%8h{vZ+MS,$7f&vMpCފ4ޗ8hho>ͽ= D9O.;!cO2Ac Setu?U9[FG-2YT >b}i_dƸ|" xPv2_?[?2Y uL#5B!vZƗ /9˲oo ;#κ]I/Sb ?Gpրǹ33EAcfĿ+48 'SXC ysQ*{߰Ya{I)"=R)&mΏ|XgO~8v9s^As.P=DP,r 8H֜,0$:K8'4U,`az&PG^ƻ%SorEPeDQ_s*N[ > A2YhxY*1M Ke3<~8*ib@ސXoVcJF6)T@rX-jm[seg2xC+ޗ]8e1RrӅ .G 9Fv0P-xܗ.Ȧ>= ʘS+'Z K(וC?"8x¦̷?Wʐ,K`BWoOH"wpGibZH>v\ +FyNrDh a`Z?WZsYf$S^W\}&izŕ@ݿtj4ZHdM5Lbc"qCHA@6- 2S*FM:V(h&Je<~Kc-d'Ccqk nڦ1?Ȳresfm0oBu63/]Binz]=< AVWmC筏&0x)EG:рѷkcci̔s1];gdž. $9DUtdԞZjct?"C$J}Xg&x(̏j)@|ɥcfdžǗ!E4&"!.#^NCf. ?#//3ΑiВAMsC+(ݭEպP\/),Wv$|9 [BBU 6ֲE {~`Ǹ563>%?KPL@_Py|'/e#_%fA[ @,wқ0X5W(5ב1Hu8, 01 ɟ"F~($>3 5%3HEi'Os`iGEuh46adb_S,A#}Qx=^wH"^E%%?775?\pnE춲M.V9>37: $S7D_Ai!׾"r I>I>Vj3> n$FO55T;RPɢPqE?{g%0x&m-&(ow&'Zd*l$xoQ!"d2]q<I2I1:frϴr,1 t3 ORA"lq[dud )(|A7SȒ.edƑciQ)h[9V;#uR*52lN f1L<6v_߼`iW'.W)= y0w LK+"M1b+)'+o5' (z#!~jfh0'(bŪF)b~u[F m*. mp2 sLxgA^8fHPQ9P?;N"TQ%",d}ґ%1>p)"F }*lX {Ɂ豒- SV?28qs^gR|F%fM 0 CuMIA ~L뾶c=6,V,[ bj,C)De27g[el#ILzGS۸_=9yG2"G^嫰_vXԖL-7ZufN9s&ZLy-YFUA >byy{-)x3k@!,0Z\m?DtdGښg:82>Vsuoe h-Sf)ۄwWZ ~ykG7-%9γixf,J5k joX,"`eě"9 '`4xA,rLiTгxEgے깤CȨ[/ܐ?Rxiv?8C UcJpl f0;K.|Bb ~5_2unTۂ圖ؽ|3XF$2$ ucɶ9m 4iʋ9 ;ֺE93oYt~|3*iD <|/oQwg'2n >٤Z.fgaSf27~<>:XAIL(u{Y=]M$1/=`Z}n뎽t}tClm{[WgKS|cȥ"UUjH_$h6f[?@եgMT[2T*<Cq/zb[BBB~cz KslSejG5PšiO-7/vkDt|r>:@5Uͭ,Q-}O/ OڄБCGҾLoɺ<=78eAOb0aH}ѦV=['EnUa`h ذOбOE-C-|9҅<"yh~avd|{H ¦_;'bdL7XmYZ6T^EW< f҄lt " ]h0Xnvu;+SO'd́j1ÉdE/}mxL'Od-NER9o3_D妽%&Ngrd4џr rZ&q˥nD&$Oekm84/6D]IHNǖ(!mM("B}l.=Es ̼>+#d 32:Vl0ܽG`2BqŬ-~w揁iav gwKʳKWڟ,V?㙘5p*gSN2_$` sBe U2;ì<t cMkuSvڱɹ'AND*벮qZ򳆷^DsDCeS2iTG/(}$3m$B?QRInsjΟfPc4U<Ɗs-mAG)s߀,%wy+OUywq^2͂߆a v-Dcg9v5ڣ2hw4]^>Oי1g fc``Y,7\JfNhBuPiߊ"`3mAKċ[vUMIsۤT4y9'cT!w7pۉ_?B0=/")n)ER2 ~QJ kOeRDQC0n ymm}E Eh0R+(U.cuQaG i7<ޙ3 M2 z\@TumC*zE8H S/| dj}U_nٶ(Vt,KI+_Ƞ>cr+jntqvuɚfjDК &C BA>u=miTvf[}O6v 6:M-Co(Ed ft6UBm3Xg5F}M&cKSD in 4 -&0LX3AZtuyu X,z Ya[wWEGSvkW`fbCp A_X?j2]Չʿ{u*^+űu_%l%AzB㲄{z^CcՅz,BnQ㋲ ZЋrMgV] JQ%?Ǣz?U\~?cmyA:u:?%Д 0Z[IʫmqpN/<=O5Mo𴹊s.Z++1bo ,2P/(Cuj@hj-zt~EDHΔi?J<,kT@QjƊO}OmbmMi?>_d$ gvO(2''1Q3(jNV) 8 #"ˣ_ָ > LU%5 p;Iq_o\>Acr$Twnjԕ)bp}c4Y^_/\J[#Mc|dQ ҍEo):35Kgq̅xa*}GPy+f70$u)+Neu;8A>@?RK9)mKT1 ŸO~L-auO2g cg%Л ~)VN[3KDʰ[t'gq][뛄9ݘ7Mɚngb &OKnuo%Km}Z7\mugxwÄەDf5䌓$:&kkf@q#!EW!%u\u3gYgzĘhr ˴)ś6]ÁQnfPzJtk=ϩmj^7cS HR ^#2(X!>޵/Gν,@Bg C0 ^IfpeN4LkhISSk7}&Xҥhbzp㭖jA_-skj-d<åHdX@\&lY{T;g57ܙ'iG ɻI?-&߳(^z͈j%JK|z.=-]8%,Y\waЍ  sOr}H7 4Yma~?^E\/E:[u…s%ȃ()o&4s3Vrѱ;?Lߪ"Zz6U\-ٳt!@+SJRw[ a'#|٪WMfY<2@5Ԗws@/ rBZyp{hJN{"5 DON0͍Kȃ/StkҎ$M [2L!qQvDQ5`ĺIG@?g29}#?tlxO05C@I1@6t >Ouq C]KhǭkwPsB/N AJLZe 4Z8M%?дr]_UH-{VVZe/ixY$^Ģ",/}^6.9OzrlEBgsRLD_P7=Plptr#y缤 NZQb=T nNHiG&ȃjSjSѽYL8a.dPD5s&'Iym?.vnTg$BP*[.CrK8/vW8Lo}ڛX1>o.<$:_bʸԶ͆WQW: ŗm9߂#io`Kf'ﵲcKNyϬOG[`ȥ4o Ѡ B+j<=;x*Jq|geNs+vIϡһZ֕)5e,df& ga"Ίּ0Bd4! . nK<#;R&RWQ~P8<=,fB~\[L⾤f~ 㳺)r E7`wι="z 2I7AͦCA|٦R\\l]DI%Ec56.Ŵ62M-z?hX5/UtNͷ-^谩̗_hCcߙ% @Ov<3bܞ@J $EE.8 4:c8ZU?HO֑G省,MY"{T5@AIp?0:} ,=UioOU]F2-%yYL!Y:f~aG`>y*acz㲾Rn3 A$Y#)`ՈOBd;v#GFp ObsӨ##YTsqf$ƎqkYP Ԕ3'ëy;?;ImEˬ,??Hu}K;Yؾ4ഢ#Qjg@!W5N<ڦ*-N[TOV׸,J]ئD菔y7z(  w$nf,}M}tUmR7z26u0iJyZ\GT嶕ˢwNe3FxYQjK"2?WRs)pM`g*)CWlcS7njc_X НH(|sko.WE>xQD:i|/W=BteTJMS6EG^6: f%4ŝB?v" Ҹ\mG_fz%UQa|ݝ3GZZ9$a|&#'b~՛ .2,, a5u Վj9 S l:J}Re؎68%nDCf]F| /nNN`_".lmH(+`tZ n'fHYwSww:s .{ zɨYs,&%Gq7?Q MU? o DN^+p3 jS;6%E$h,J!qKB,9l~Ʌ߀Ɗ=-ƢϏΟyoHC{dg;.6t=2ƓRO$֥FD۱?O4Fi;fv$g|bzԇiQ+dQ_Izo_ru5&:5ދA*+~5З$:&HHϘU6LhANN"mH"&p cP4>1b!zHz\B\ FRa[!`9r꒛a]ݪY_˚^dK *]aqaUO>C?6AVr!zm;@؊A뜗Lv6 ,[Xr{iy.)<ĶŽ;Aj524SH|@Eup|3JQI"؜k $ ag77w$<|]ˡ띺z9o6x~`H>nM[66EzYsJfT lf<˜ĝI#a'=Z^*| JzNnُ%RRDȝ&Rc6Dc}U9)A߆^e,*mJ z4 JӰdhq`Hr%y7TpWH3c@`7=? =ui 2tB֙J]4NwN᯵P94(m>szjӧ3+(( poy[ xߏ=F1̨ F;o`>--c`ݿ>KF)giWH)gJ$8`Iq;iJת/S&'į7l5t@hWx= tܔ]ΩTʣw1yGcr5o91ŋH VqKrnv9DPLfVC< xTUyK~sZ:T= DP: n: aIo)%\kQ3G3}_' NH GpkVϽ6`Y1P0h7wB~ӿ8Rs-+6ii Kp=k^ ;Q bbdP5*`[2:ǀ'_HED5ّ\:rk]W)40H6w)tdu6bxlwL mF- `"1dz no'@0-(SoAd&bHۑX5 =h}qfcmIw1W0yY;B5aNyW pT0Yb W(Hcac}nuIT$pTx-S8XWP]6Pt>#6cI]AA"SX:+cHP ?[oD=&j_vn/VKڵ*7[HM׊T7k[8|`PyYjԛ0;ޟS1=|n)/lC-,tA'Jo+H<E }PɂNˏd"޷kV4u/@,AS}.CC!Bo  TS dΩXp#B;/!.Jv<\Q?.J]Ci- 5^9k3ˆb7\^c`9Wr*[;z-YkOsߴ7.h@Ct'8ν&IM3MHܵ[8\ů[a ~:V*PSn:4g_4Y+/-LQ7˓!Geִ|^Lޥ4 nMZtƗ5ںQ@*pW2ޠo&PNzn\,}UPEyB-Rh&mM<;Ou_[ O8m0͜d #`ЯrJTT':3pJGT(\#SʹLSy}ķq%Y}%NtPg (TCA;TNl$E(gkDcx[h)UT@l ͐_0qr!G:%-N纫~~m~qb3d#jh䏹:qƤ-u> @L5q m}3švfJmc̾]F44 w&ԃIZ[ڶag%Wc4M|K-9֛V KJ%m #CA Me"uM:OQ0a}~KeЖ&SԛU27O/%t%mlEAcա"Zo{<(ev1D1vGZ鋝d<;wL6'bVwkjcA=7dRʦ+xgp# C%y?̉]k[#Ƣe+f3`'a`,pc>#WY!%R4&Elt\bL 1FN6У1b~8/t'o 7}^lVQ/3KX8 u,OLT3yI3I3er =,"נ*c̗TE f?'?Bл`KY9z\H{JI#GV}RW=ʫH`K$A[E=G<Bo4js!M疀jʦz㱣$5/;n؅Q$E&LO>gI?HHb0܍?Fa- b*/Ju~NI)d3/uN7NDsSNL_(`ME&zJ]|7@tX!lKt6)nSkKg8u梎'?&?}\qI>R3SPa~0w.Cm6?xF FlgĂ+oLY{s E" 9-/՜jCZEӎF%yѡb&EZC8x,m9l.&5By%zk"Xp%,86/ |Duڵr$LXt4Եwѿc S<=A'#UߘJVF:ڤMjFlHYJRF.NCR; W-( (+5y)J6O=Inn?Pث+W>l(v*-ϣK>X*RNY{7ARh3ׯ@zܛTV|.MVrc65YǫAbq}l¥%,!w,w_`0jB2|rx MY;~oA"Õ7emXt܍ ov P<Ӓ9B%+J`y]_ڦ4fA O`J3\9:SGUЖ kk" >"[{8>c|yh!9LѦDJ[\]h6v 2ZS7Iٯm_! ;lQ}(׈W&lӟPCYi!-eܣ67;?n]p)&<4"ס.Q&55S|&FԪuȚ\%ջ]q~3VE-JQX؜xo⟠S0kr$Ќ[ch1&TxOnƀB]d"( z*x+Q$*@TIY}x8 pCUp 1%sUτ vA'zTʒbyPna盔lHٳk1B)9E`/sAbi^V}<@*V1yPʧ;%6Gmҟx1 ÍU{RxJE+$q7 ndGVמ=hF<&,lBLG#_d)|*(MebJΟ/\Iң)`Bκ8pBR_3ۃ%Ta[;k`2a(͏‚A'6L] k2P]bZ!OJ^ Fd;3KyA7,.)% $SfxI MP-\Z8%漢&KOTYcYr})F :t~ ҫY1 DNږ<)azW5,v3 I%,٫ ̂vX/lW'%?/5}5oE6e na?뇅 Bcw:S:xTuh(lm%EH^(IE q:"3ǎ60dRfs\8z%V/3]ϋN|*!t˽MSr5S1Ͼ*UENEd"3G#sSiw7q^ lMH0n(%xHZ-eHQ!IRavc#jYKk\:%Z^ogœ߫i$8L(I%,(.,u)O>-na)nyqelL^F48  xOޢmZ{5_$#wJsEg- he쬋:K>_вdR# JnRa$a9.usR|_ [^&6\t ٿ/2:umV2 t̰jm!Ǧ?q]N.GMi1%vRG.i to)ƥ,ʻgקtVZA'fuT'C/Q%4ILxRp&_*(o_5^i+x%ٱ &`t^?(<}YwN~>1؋*#+EQ ?`30Eqo.d(:҂GYj=]Q e@`+WD& Ai3/%qYY6S(EC>|xI}s!L 4SZ iwtkFCOyvm!gW^$՜WLPǾIgP;V-"DܵP)v.طT!Y?QYk"YX%lXrg"ќ]RRh%ַtzLf# P%!ho7 vrLW*uG>6YUү QVw5%`:\NJ_Se =uUSvCV,B *=fE׼늀}p)ٖKLee$1#R:F=y2+EdBV5#N>T݈XsHnuVҿr.\Uu`^֙>Ys*q-vm`*>AfQ|{~Y}gY96lQ!;hk1@C*tȩv.0I,,YaaeXǚy,kĺnb6ZXCL01>:PfX6 T~aOűG4޳ݞH潉4!pm'QU]oSfN,T ]CHLU*4N*x~ok#YMs|;60iM-P P[ C -ԧ\RaNK%$?Ĺ{| Ƨ,pr3g]o9Ù@~د6ڄ"S z*quC%\sLe:&wXɲNaF9&#s~/itQh3a|Tmh^"mKK%Vx(BYIM!'fTzuIFFNJ_ x4yrA 2ij)2,٩V%mJ0']H(P4bOzՓ=5њ#gaȬJ^iT هU,htw H?Z9¶Un8fj.R,_q4PVT%uUuo@cM;KEq)5T=.OtqdrbޤiH<7jv-Ǔ\TԢ(.,BH\*$d /aiDW^wXueH%c Zܫ;nFO+^_cNX U6p5<0 9;dC וk(axoW3Kϳ{VTR2bbs>+NWܟ¾n`c1;l|0JF] oQ1>!c;(A2;LȒ̐X`Z"!5^PM"bxwmZRt8J8zgn;j, w1zmw:g#s(/ΝW\w9s3KWN_U79Z%9+ TV+vBeoq `kÝJ u/njikCSAC-g}#*?vFaar0â Tb΋KJ1t”$> ;}xA:5>$)3Z+)ޅ~~"V̝hi.(x:G ˜ˁ=^\z%"ů74/ Eq~|mў̿'dkD=9c NX3Chߜ0L~|شʎ /|@Wsd =΀+@#XW",XEL?gVp;:~PeH@1-.vYȃw@T!p Qѱ״luUV%+)4~E4*t-;ʁ ;Nhe/1xםDypof#钕 BF??SQVqY?y8)ʹXɳ`;:u UT)Ec5TEraM7 3/sJt"ù!`IY3i׀9bu,aЊ܆&g@4` J`nاeFaAw|wj8hTu״G[ہwep9ǧQ5߫nD-T,W[HL 9VzGyK!J^" X7'Hu?Ӳ\cSwnXhds<7BgT,1/Ԇŀ C`C?7AZ ۬K1k]3%ԖeH Jҍ}?sfTjkS޳:r1L`3#*{Ljے]Q@MI~1˵C>OiS֣w;H?@fi4wWjVt OEbC^3sUbcۡ!!@)?g<%7x1 /S_ltӡH aFSpbp뒿5*j4BU+`M!Z&{ߺeL|]d_|[F;`#e|D^g}E ajgBɵ¦ k˻O("4dj$j2KfnM\JC%'Yp)' KV) /i$u)\@Uc }^urgXbc9g(96;}ӥXQ9 (A!H#`T!=dir #zlzuZ" z˻8ɟgzab@SC&خR]:Tld$J?à]b]qB]N[oq- tbE&dpӱhU#,nڌ妅4 QT^!žh0MO`$n:L z]$Bj,[QfҭlR^غܲU[LnՄDĥm;P; d_ *zDB,b1aV]VU(++nr) IQY+dP yf Kc50@wpgy醾tt[0Ove7FVwr r)Ek w )DdKZi O9P'*xyuV&i]-p;hv>-5roJSN)rm&р!y⸩mwMmEAޤC+$9dx(I|N=EuNs뢜\y~sJ;f=   5- 2Np}zӸ!a37ċ<إ z9J_dJO*.}Y OmF:Zڊe?zu[q#=ηZΊ[6RR3hW>B}`q䃳ܓΈ}Ct XlP84;KWoP:V>#.{,5+D97_'3 Ph5LQb#&yFvWk/-^7@rkHyi_YW\=C>'&1ɊVO^˿|Uw}>nʆ֧ʝ9B cQ+`'hb9gBPPjfJ }e/&'հ4IKS䱽Q^2\Dcvk:,0%U!G@ɤezY\\}x9sYpx`/SJs|S[ %GDžE)Xyc*ñhhNO n'S%RP`&c#"#Ą9_Z0; ,30䟅g4>SE4)v6W+Eg䑔ԄF9G82=^ ?(use雡yw<8RAAMGA^Įլέ_(ˍJ=&%cpRpK77!yiϯsg _m)FԄUS0i˕_5=>OjgNbLÙH}h%7ZmkchDrTBax%Hp:zxČs,XbɹM :dW&, DgX'o[D5&YRWi?UQ,HV_)0Ϯz~ mפZͪLWcdMñd; H=3 FrIXok[`6ξ^h-Y%%eU}u-ZV9Ӳ ǨQZNi$#xB@jJ szI sWP5<#3S!P6r384Æ6 { Jydv'E $ewgTۀxk4H>UvX,/5kSd\tX]uث+։i6p]ޫ"<Pk]jžᦄʴt6AaD^D:#A ?uI`DAf%{e}`$&.V#qߋnts4)UoEicg"$\(#ۊ;CEՂźO,-?3nYWOT]jOj&G$(%W(v} -f []U&^!ڶW*iI4!z jF2GbPg&~Ϸe̘A!p}תj^[MI\'Tp%eu< y #@AoSmtUcd^[7Y7mUhjtj%ގϕoHPGxB/O1:P#O~YA_ \ISRR^[T5.H.j6`w8YeOH$E YrĎMl-Q&B=8o5|Sb#iӱ?^Nކa.cuo.uZ9#3)\vޤe@e\K>VgMUKVC$BGMqJzHD2B Yݸxi? F xO6@<5t貮QRQY:RTR$QW$3T"n|;W\@yK봽颩Z=p\Smͼ{t<{,'ϒԨ=Ow_͊ [o+o+jYQ>84ޠ@Vs՚xZPI:[K'rkg!Fk+MnxQj8*Bk6 q Ǯ~\n,, j  uj=ޕ%0'H g$?xrC#U5óO*G]*$H$PxVuHep0>dܹFU#;KX,z"^OO!4S" AP6^]6yqG-d%4UvcbIwS:u e:~\lz#1gVú_݃êeGYWSIZ=\[PT(9JmHEoT52i C 0Eţ]_@ȊO@^BʭWM9[ R$$Ol l e]iWt/ۧ p)O^?NV^s<5),q2$/bhT -b7NaM«@;=[tW̽KFfiG,&!P(rw1t?/uDC@cY^5F }U}!g M榤İb r^01IfTjԫw8mZgSw!5r eOoD-g%|O@Y!cE+?äҤANӌoзثQ0"#>žh d l˷DY8 Q=~F ꣢cŮikA)UO7ozBr db+c0I${=0])tQ^d5Et[^ʾb˃ $%V PmWAp,ռɶ硍㩊,T#4Ԥ*pDmy,pc0­rCIDo?[m$FꦖkUjW[jo (6e澎V[%MN1lӱÑ#6v2*8MTGQ~h6[sԮW-/䢺[Wˍ*wU cD*8R $."0k71GՐ1/ 㯿|qeڤea_>sɔmrp6Q%AEe.۪i:FnYoqSb[tʻ1Nszӯ\L5kHVOxUкM!zU9tmU@Htkȩ p}%31ۍB Gi  mm*^(~)( 鑲:B`xԧ #L0O~ۡGTT5#BʶEֶQ fSm47![O^nT,RU3(W*H= M:,Իd7aNOp%Ee/d9׼L;y:.֠TSИɚxR"G_p/}lc;hU*g ZF$=3_dx"/.945$v[gU馾=kҜ#ţ Q805Qmf0zoVqʻ9* 7x*i˓ː{}3]X|lS*pQTnkv䦎))ؓxa ?䦺OV7Niķ\h59VTLc{ GRhujI &M% 6Yܣ╈Tz='reF+LuS9(nX\^5-7jN=Sׄ qJt ~iMn5-0VF'92mB)%߁Fǧ WK 6 2`ԭ0jT,}%\|O!Rpy!9=ON U/OLuI)'.c}UNG~\(fـ}U[#( "wlpuR!|,tM-z%էUa"QyN* sd֫X|#}VZZ`|_OT.Ri;V_d@30DUHB8ȭQ,O%7 wln˩9nUj˔bVUH0Fwqs]K s?V--^BG˾Si+cڨJ'p)Ice;,@x`6ӫUXQ::"bm(PyŪsۭ5-AUXyӂ@FL3{&8;? ^ckmrɮ95QWR,:'VA !iѴk\ix:Q}U<̼&;̐?o*]SK[U54 ;#$x,%X6 .qd|$FvK-dH%Jet=B?0߯!<)0Hi!'}GS9e'܂V|<'b QąRP4ᙶInrn[QfG" UD${!Eλcm'N $C*HapRQAA"Likd2H<ɇh;H$ q?e_l9h?ߺbp5asTmw80D,QṶܱTowp K3x\:S$kV :MQ^C-;Wςpeho^diGu2;EGe7422asS/$c6l5~|m|KdBR;eό2W mV &ntoތpfjSI|u@[K(sZ[y*Lp{}%_mszdZ ew`njך) ޭL:cL]l}=ƶ-=,~`.2z@鸎ṕc:%rˡM, \F L@?SMjyJU$3$aqvC\vh[U#0p"' ֹ7U)؈y׭{ܿ9=g̰܈_i~jvQB$%!B>p1IqC6(Gy!It6a$4),#c8ǿ7VH+ ]=tZTZH>q߉"[MZ5Ѭ?WDCE]3TthJȨ*ɻSCRJb$?D4՗JdyDb|ՕN:uQӁի?n$RM< Jk8l7a"&8=&Ͽ 42Np r"0M !CmH+ipুb)'xEn]OJ@0#GBKd^1'NLVKsJ(Mvel,)&Ҷ^^S]@Rl?R@K,0$SZFqk4LJ03EuqqIJͧa D~FT d1@~VXaԞ ɦ"GK쨭SSVI&\:|>sK].i24%3FRW_Uq;)+lsh*#t V[~H&zHTQfx,aX_|b'PX_)\<;?O_`Wg䪵W329+Iʑ8 o(C۵pv'{LTɔ'_-iBHupGIXԤuqeiRm9~ ]GN$Z9;X}H׉Ҋc\%Z[[u'`6Dz{s~({#p6[uUbQUa) k.>xzuK4C}Q+mjf0+.0W#?\p̭$쭩@ TYJ( pV]ͬ|NUIB|H |}D.K "hu.g Â$(?t8v'.] SgJz@WN#s{P,sJ0Y`H ?.NAcs cH5[NM$weWlSOߺ^gVQTyd!,JBGl>rOF,]j}#׀Q %buEUA)%s.N=c:~Rs*K]⅏,]w~x=}8 ?w~CcOOk̍E\-ZQ$$T9M '{:@t\4*H[u$%=Dҁq;~r ] !W:$Aч^cH%j)&}q-+ u]M!^%E@Cbl֗ gGbm]z{=TOCoE,0VI]ZNյAwV`[EMpsRtU<^ MVUUbb;X~^9q)-bPURO7%zNӏ2D1O.\{ pҴ2)F;aIp}4:-ЫMQR{ !u.jb:1Ny {g2`\.[L[Z)jC@H tG`QRS*GF '߅Zz$Opgۣ!:a\֫Jɰn-~GWN Bv!〞B'GumMB=l9Lp1rvlqnC?)h]Uj\p/6_&?-; SS-4UmEmpF\ S. |RlZiI zvE +'Xݹpcb\ڰ uG I= B~&yQλݭiꛓ=2>$F-Żu41\CAe~9-JRPȿ׎{_UC% c#S35uLh Mnwٌ{Bʱ|ǐ~PP[)KupIT7P鸂pOO~-%=(O %]¢]@ TQ=MPF9%TaWAR*] N1e1K }Pk-rUUaGoBthtTP@‰S;$Ad.?>&+i(v Nν6OϦ=J[IWqXFJ}X%6RtAi]K;}}@Zj-1A9IbbR=,~`t,_U il:S5:ZZYDN»8 :}8vi&=ey j%sJ`XV*:u@U&]aSvv*)C-ΑILY\Ն㓓QO4 ~/v%#~4Q;<_%je')Hc-J'z}z /6uQhҮU*2ԈhN-wZul {uBjثºx'150icPy=zOovIE*n$^ !`Ͼ1F!rL./c [m_I9ZAg&XOԩ_I-?YBGCa) ԫӴ35De$UsশB.]рS K6B:~\ 斜LD90Xᔖd$ j* }WI-G p[YkƢ}7e b{ gRvg¦($*x'dw  %{x1UV#}XEa%߯?p 4D_UGo.br'…o:WzUHZd|cot%UA3Y#E<(k}YfKnk,\yN]NӁ<`.SzN5,h2$| w$UR[T H'xLpN:ڊG{`$SO(iRԼ9 T*Y,ɇn$۫@VLsI8(yF :ߌ˷ LDÅkROMp~j$DV^frF^QEU=ڢWltTy vބ@Z iF*cR}X8=G=ǣiu-V ggRQ2[ F: 0̀pw|p˔xl'C\faS۷\QdjZoTt4E`I2I'roJS|9>Y#88dƂ M/冖٪7;^%gbg)U;doP44PkkI]u W4IHemlA|;DY/;OZ:Hjk!-O[n&4N; IL)ĩĂ{c24ShqյWMW[)M/#=qY I+ke+eL@&#orG("jzX[{ U@Ql\t'>v +i5Bx7y<*5z fB66;$=[fuJ7)Wy{SY x'(b:6Z F[Zk 1#I#UY!O\n:yA6yuꅎ9Ï˷۩.PSBrˤi$ȍ 'pOBq?T8 h2QuB9s"5,M䎋cq}{?znU5󬰫Hw|tW-yܪj3M+;sqɀKt=ޅ $2hLR  %yWVRNIjT~?^ T[(2$Fc߄wK^1#g˪YvHNCJCUS Lt˶b{.:I.vɃ[VnFEE-`v*O:8 Z0n6)[zRR'gI6m S8d)t=wjUN%zn]IdvXM)={c<@H.OE\)䙈Y%\'d|DfkBd%nd WʂIztn u%n"!*K5w:jie6ŒȦU"-8FXmUv]Q'P`>$ZHYh ɩGiW&?,^S 4y3c_ $d#yY+G6ͽ{$|IZt_*S蠦 VIbqDbOxvѯA ]U{*(o-ωP3(euBTmPS U#bq\p%LBGCdFp~CJ >rvc#8iq\en<.ji[ܰcbBe%D!\`L~uQ*-M,YeB~|1)Bdɉ1dg9+!jڎ=/\( ScR)eF3T^15m/g5tq@^tx: ȺrBGGe#q,M`R.-]kySz٘,ORz~.a,v9lUI-EՖ7Ѻ%Jr1cH`7Q!襵׺c[P",Ȯ@;?%T㙲#J|9 _?>QBr8 p_d)*R=8I'¢^+N6J_<$u/I8Sު)qN;?Ca< Q?#>ᒕqt[N=+UnK!I끜 kDS*SMmdfH38Ϩ~_sBt Gi[VTvdQWI=?džTRz_G  new zlib.Gzip({ flush: zlib.constants.Z_SYNC_FLUSH })) t.throws(_ => new zlib.Gzip({ flush: 'foobar' })) t.throws(_ => new zlib.Gzip({ flush: 10000 })) t.doesNotThrow(_ => new zlib.Gzip({ finishFlush: zlib.constants.Z_SYNC_FLUSH })) t.throws(_ => new zlib.Gzip({ finishFlush: 'foobar' })) t.throws(_ => new zlib.Gzip({ finishFlush: 10000 })) minizlib-2.1.2/test/flush.js000066400000000000000000000020271371561155300157770ustar00rootroot00000000000000'use strict' const t = require('tap') const zlib = require('../') const path = require('path') const fixtures = path.resolve(__dirname, 'fixtures') const fs = require('fs') const file = fs.readFileSync(path.resolve(fixtures, 'person.jpg')) const chunkSize = 16 const opts = { level: 0 } const deflater = new zlib.Deflate(opts) const chunk = file.slice(0, chunkSize) const expectedNone = Buffer.from([0x78, 0x01]) const blkhdr = Buffer.from([0x00, 0x10, 0x00, 0xef, 0xff]) const adler32 = Buffer.from([0x00, 0x00, 0x00, 0xff, 0xff]) const expectedFull = Buffer.concat([blkhdr, chunk, adler32]) let actualNone let actualFull deflater.write(chunk) deflater.flush(zlib.constants.Z_NO_FLUSH) actualNone = deflater.read() deflater.flush() const bufs = [] let buf while (buf = deflater.read()) { bufs.push(buf) } actualFull = Buffer.concat(bufs) t.same(actualNone, expectedNone) t.same(actualFull, expectedFull) deflater.end() deflater.flush() t.notEqual(deflater.read(), null) t.ok(deflater.ended) deflater.flush() t.equal(deflater.read(), null) minizlib-2.1.2/test/from-concatenated-gzip.js000066400000000000000000000052131371561155300212160ustar00rootroot00000000000000'use strict' // Test unzipping a gzip file that contains multiple concatenated "members" const t = require('tap') if (process.version.match(/^v4/)) { return t.plan(0, 'concatenated zlib members not supported in node v4') } const zlib = require('../') const corez = require('zlib') const path = require('path') const fs = require('fs') const fixtures = path.resolve(__dirname, 'fixtures') const method = Type => data => { const res = [] const z = new Type() z.on('data', chunk => res.push(chunk)) z.end(data) return Buffer.concat(res) } const gzip = method(zlib.Gzip) const gunz = method(zlib.Gunzip) const unzip = method(zlib.Unzip) const deflate = method(zlib.Deflate) const inflate = method(zlib.Inflate) const abcEncoded = gzip('abc') t.same(abcEncoded, corez.gzipSync('abc')) const defEncoded = gzip('def') t.same(defEncoded, corez.gzipSync('def')) const data = Buffer.concat([ abcEncoded, defEncoded ]) t.equal(gunz(data).toString(), 'abcdef') t.equal(unzip(data).toString(), 'abcdef') // Multi-member support does not apply to zlib inflate/deflate. t.equal(unzip(Buffer.concat([ deflate('abc'), deflate('def') ])).toString(), 'abc', 'result should match contents of first "member"') // files that have the "right" magic bytes for starting a new gzip member // in the middle of themselves, even if they are part of a single // regularly compressed member const pmmFileZlib = path.join(fixtures, 'pseudo-multimember-gzip.z') const pmmFileGz = path.join(fixtures, 'pseudo-multimember-gzip.gz') const pmmExpected = inflate(fs.readFileSync(pmmFileZlib)) const pmmResultBuffers = [] fs.createReadStream(pmmFileGz) .pipe(new zlib.Gunzip()) .on('data', data => pmmResultBuffers.push(data)) .on('end', _ => t.same(Buffer.concat(pmmResultBuffers), pmmExpected, 'result should match original random garbage')) // test that the next gzip member can wrap around the input buffer boundary const offs = [0, 1, 2, 3, 4, defEncoded.length] offs.forEach(offset => { t.test('wraparound offset = ' + offset, t => { t.plan(1) const resultBuffers = [] const unzip = new zlib.Gunzip() .on('error', (err) => { assert.ifError(err) }) .on('data', (data) => resultBuffers.push(data)) .on('end', _ => { t.equal( Buffer.concat(resultBuffers).toString(), 'abcdef', 'result should match original input', { offset: offset } ) }) // first write: write "abc" + the first bytes of "def" unzip.write(Buffer.concat([ abcEncoded, defEncoded.slice(0, offset) ])) // write remaining bytes of "def" unzip.end(defEncoded.slice(offset)) }) }) minizlib-2.1.2/test/multiple-errors-handled.js000066400000000000000000000026471371561155300214300ustar00rootroot00000000000000const t = require('tap') const { Gzip } = require('../') t.test('only raise once if emitted before writing', t => { t.plan(1) const gz = new Gzip() // dirty hack to get at the internal handle const kHandle = Object.getOwnPropertySymbols(gz) .filter(sym => sym.toString() === 'Symbol(handle)')[0] gz.once('error', er => t.match(er, { message: 'zlib: fart' })) const handle = gz[kHandle] handle.emit('error', new Error('fart')) handle.emit('error', new Error('poop')) }) t.test('only raise once if emitted after writing', t => { t.plan(1) const gz = new Gzip() // dirty hack to get at the internal handle const kHandle = Object.getOwnPropertySymbols(gz) .filter(sym => sym.toString() === 'Symbol(handle)')[0] gz.once('error', er => t.match(er, { message: 'zlib: fart' })) gz.write('hello, ') const handle = gz[kHandle] handle.emit('error', new Error('fart')) handle.emit('error', new Error('poop')) }) t.test('only raise once if emitted after writing after emitting', t => { t.plan(1) const gz = new Gzip() // dirty hack to get at the internal handle const kHandle = Object.getOwnPropertySymbols(gz) .filter(sym => sym.toString() === 'Symbol(handle)')[0] gz.once('error', er => t.match(er, { message: 'zlib: fart' })) gz.write('hello, ') const handle = gz[kHandle] handle.emit('error', new Error('fart')) gz.write(' world') handle.emit('error', new Error('poop')) }) minizlib-2.1.2/test/omit-os-signifier.js000066400000000000000000000004531371561155300202230ustar00rootroot00000000000000const zlib = require('../') const data = Buffer.from('hello world') const t = require('tap') const stream = new zlib.Gzip({portable: true}) const res = stream.end(data).read() t.equal(res[9], 255) const unc = new zlib.Gunzip({encoding: 'utf8'}).end(res).read() t.equal(unc, 'hello world') t.end() minizlib-2.1.2/test/params.js000066400000000000000000000024541371561155300161450ustar00rootroot00000000000000'use strict'; const t = require('tap') const assert = require('assert'); const zlib = require('../'); const path = require('path'); const fixtures = path.resolve(__dirname, 'fixtures') const fs = require('fs'); const file = fs.readFileSync(path.resolve(fixtures, 'person.jpg')); const chunkSize = 12 * 1024; const opts = { level: 9, strategy: zlib.constants.Z_DEFAULT_STRATEGY }; const deflater = new zlib.DeflateRaw(opts); const chunk1 = file.slice(0, chunkSize); const chunk2 = file.slice(chunkSize); const blkhdr = Buffer.from([0x00, 0x5a, 0x82, 0xa5, 0x7d]); const expected = Buffer.concat([blkhdr, chunk2]); let actual; deflater.write(chunk1) do {} while (deflater.read()) // twice should be no-op deflater.params(0, zlib.constants.Z_DEFAULT_STRATEGY) deflater.params(0, zlib.constants.Z_DEFAULT_STRATEGY) do {} while (deflater.read()) deflater.write(chunk2) const bufs = []; for (let buf; buf = deflater.read(); bufs.push(buf)); actual = Buffer.concat(bufs); t.same(actual, expected) t.throws('invalid level', _ => deflater.params(Infinity)) t.throws('invalid strategy', _ => deflater.params(0, 'nope')) deflater.end() deflater.read() deflater.close() deflater.close() deflater.close() t.throws('params after end', _ => deflater.params(0, 0), new Error('cannot switch params when binding is closed')) minizlib-2.1.2/test/very-bad-input.js000066400000000000000000000010161371561155300175210ustar00rootroot00000000000000const fs = require('fs') const zlib = require('../') const data = Buffer.concat([Buffer.from([0x1f, 0x8b]), fs.readFileSync(__filename)]) const stream = new zlib.Unzip() const t = require('tap') stream.on('error', er => { const level = zlib.constants.Z_DEFAULT_LEVEL const strategy = zlib.constants.Z_DEFAULT_STRATEGY // these should be no-ops, and should not throw, // because we already raised an error. stream.params(level, strategy) stream.reset() t.match(er, { code: 'Z_DATA_ERROR' }) }) stream.end(data) minizlib-2.1.2/test/zero-byte.js000066400000000000000000000005011371561155300165710ustar00rootroot00000000000000'use strict' const t = require('tap') const zlib = require('../') const gz = new zlib.Gzip() const emptyBuffer = Buffer.alloc(0) let received = 0 gz.on('data', function(c) { received += c.length }) t.plan(2) gz.on('end', _ => { t.equal(received, 20) }) gz.write(emptyBuffer, _ => t.pass('called write cb')) gz.end() minizlib-2.1.2/test/zlib-base-without-options.js000066400000000000000000000010721371561155300217170ustar00rootroot00000000000000// this should be pretty hard to hit, since the class isn't exposed, // but just in case, it checks, so we should test that check. const zlib = require('../') const ZlibBase = Object.getPrototypeOf(Object.getPrototypeOf( zlib.Unzip.prototype )).constructor const t = require('tap') t.throws(() => new ZlibBase(), { message: 'invalid options for ZlibBase constructor', }) t.throws(() => new ZlibBase(null), { message: 'invalid options for ZlibBase constructor', }) t.throws(() => new ZlibBase(42069), { message: 'invalid options for ZlibBase constructor', }) minizlib-2.1.2/test/zlib.js000066400000000000000000000130451371561155300156200ustar00rootroot00000000000000'use strict' const t = require('tap') const zlib = require('../') const path = require('path') const fs = require('fs') const util = require('util') const stream = require('stream') const EE = require('events').EventEmitter const fixtures = path.resolve(__dirname, 'fixtures') let zlibPairs = [ [zlib.Deflate, zlib.Inflate], [zlib.Gzip, zlib.Gunzip], [zlib.Deflate, zlib.Unzip], [zlib.Gzip, zlib.Unzip], [zlib.DeflateRaw, zlib.InflateRaw] ] // how fast to trickle through the slowstream let trickle = [128, 1024, 1024 * 1024] // tunable options for zlib classes. // several different chunk sizes let chunkSize = [128, 1024, 1024 * 16, 1024 * 1024] // this is every possible value. let level = [-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9] let windowBits = [8, 9, 10, 11, 12, 13, 14, 15] let memLevel = [1, 2, 3, 4, 5, 6, 7, 8, 9] let strategy = [0, 1, 2, 3, 4] // it's nice in theory to test every combination, but it // takes WAY too long. Maybe a pummel test could do this? if (!process.env.PUMMEL) { trickle = [1024] chunkSize = [1024 * 16] windowBits = [9] level = [6] memLevel = [8] strategy = [0] } let testFiles = ['person.jpg', 'elipses.txt', 'empty.txt'] if (process.env.FAST) { zlibPairs = [[zlib.Gzip, zlib.Unzip]] testFiles = ['person.jpg'] } const tests = {} testFiles.forEach(function(file) { tests[file] = fs.readFileSync(path.resolve(fixtures, file)) }) // stream that saves everything class BufferStream extends EE { constructor () { super() this.chunks = [] this.length = 0 this.writable = true this.readable = true } write (c) { this.chunks.push(c) this.length += c.length return true } end (c) { if (c) this.write(c) // flatten const buf = Buffer.allocUnsafe(this.length) let i = 0 this.chunks.forEach(c => { c.copy(buf, i) i += c.length }) this.emit('data', buf) this.emit('end') return true } } class SlowStream extends stream.Stream { constructor (trickle) { super() this.trickle = trickle this.offset = 0 this.readable = this.writable = true this.paused = false } write () { throw new Error('not implemented, just call ss.end(chunk)') } pause () { this.paused = true this.emit('pause') } resume () { const emit = () => { if (this.paused) return if (this.offset >= this.length) { this.ended = true return this.emit('end') } const end = Math.min(this.offset + this.trickle, this.length) const c = this.chunk.slice(this.offset, end) this.offset += c.length this.emit('data', c) process.nextTick(emit) } if (this.ended) return this.emit('resume') if (!this.chunk) return this.paused = false emit() } end (chunk) { // walk over the chunk in blocks. this.chunk = chunk this.length = chunk.length this.resume() return this.ended } } // for each of the files, make sure that compressing and // decompressing results in the same data, for every combination // of the options set above. let failures = 0 let total = 0 let done = 0 const runTest = ( t, file, chunkSize, trickle, windowBits, level, memLevel, strategy, pair ) => { const test = tests[file] const Def = pair[0] const Inf = pair[1] const opts = { level: level, windowBits: windowBits, memLevel: memLevel, strategy: strategy } const def = new Def(opts) const inf = new Inf(opts) const ss = new SlowStream(trickle) const buf = new BufferStream() // verify that the same exact buffer comes out the other end. buf.on('data', function(c) { const msg = file let ok = true const testNum = ++done let i for (i = 0; i < Math.max(c.length, test.length); i++) { if (c[i] !== test[i]) { ok = false break } } t.ok(ok, msg, { testfile: file, type: Def.name + ' -> ' + Inf.name, position: i, options: opts, expect: test[i], actual: c[i], chunkSize: chunkSize }) t.end() }) // the magic happens here. // ss.pipe(def).pipe(inf).pipe(buf) ss.pipe(def) def.pipe(inf) inf.pipe(buf) ss.end(test) } Object.keys(tests).forEach(file => { t.test('file=' + file, t => { chunkSize.forEach(chunkSize => { t.test('chunkSize=' + chunkSize, t => { trickle.forEach(trickle => { t.test('trickle=' + trickle, t => { windowBits.forEach(windowBits => { t.test('windowBits=' + windowBits, t => { level.forEach(level => { t.test('level=' + level, t => { memLevel.forEach(memLevel => { t.test('memLevel=' + memLevel, t => { strategy.forEach(strategy => { t.test('strategy=' + strategy, t => { zlibPairs.forEach((pair, pairIndex) => { t.test('pair=' + pairIndex, t => { runTest(t, file, chunkSize, trickle, windowBits, level, memLevel, strategy, pair) }) }) t.end() }) }) t.end() }) }) t.end() }) }) t.end() }) }) t.end() }) }) t.end() }) }) t.end() }) })